vlfeat/0000755000175000017500000000000012237042517010750 5ustar dimadimavlfeat/src/0000755000175000017500000000000012237035722011537 5ustar dimadimavlfeat/src/mser.10000644000175000017500000000771112237004736012576 0ustar dimadima.TH MSER 1 "" "VLFeat" "VLFeat" .\" ------------------------------------------------------------------ .SH NAME .\" ------------------------------------------------------------------ mser \- Maximally Stable Extremal Regions .\" ------------------------------------------------------------------ .SH SYNOPSIS .\" ------------------------------------------------------------------ .B mser .RI [ options ] FILE .\|.\|. .\" ------------------------------------------------------------------ .SH OPTIONS .\" ------------------------------------------------------------------ .TP .B \-v\fR,\fP \-\^\-verbose Increase verbosity level (may be repeated). .TP .B \-h\fR,\fP \-\^\-help Show options and version. .TP .BI \-\^\-seeds \fR[=\fPFILESPEC\fR]\fP Enable/specify seeds output. .TP .BI \-\^\-frames \fR[=\fPFILESPEC\fR]\fP Enable/specify frames output. .TP .BI \-\^\-meta \fR[=\fPFILESPEC\fR]\fP Enable/specify meta output. .TP .BI \-d " REAL" "\fR,\fP \-\^\-delta" "=REAL" Specify delta parameter. .TP .BI \-\^\-min-area \fR=\fPREAL Specify minimum region area. .TP .BI \-\^\-max-area \fR=\fPREAL Specify maximum region area. .TP .BI \-\^\-max-variation \fR=\fPREAL Specify maximum region variation. .TP .BI \-\^\-min-diversity \fR=\fPREAL Specify minimum region diversity. .\" ------------------------------------------------------------------ .SH DESCRIPTION .\" ------------------------------------------------------------------ .B mser computes the .I Maximally Stable Extremal Regions (MSER) \. In the simplest case, .B mser reads an image file (in PGM format), computes the MSERs, and writes them to a file of region seeds. Alternatively, the .B --frames option can be used to compute elliptical frames instead of region seeds. It is also possible to use .B --frames and .B --seeds in combination to save both seeds and frames. . .P A .IR region\ seed is and index pointing to one of the image pixels (pixels are enumerated in row major order, with 0 corresponding to the upper-left corner of the image). An MSER containing a given seed is the largest connect subset of pixels whose value is not smaller than the seed value. . .P A .IR frame is an ellipse approximating an MSER and is specified by 5 floating point numbers: coordinate of the center .I x and .I y, and elements .IR S11 , .IR S12 , .IR S22 of the co-variance matrix. .P Both seeds and frames can be saved either in ascii or binary format, based on the specified .IR FILESPEC s (see also .BR vlfeat (7)): . .TP Ascii format . Each seed is a decimal number, one per line of text, and each frame is a list of 6 floating point numbers, one per line of text. . .TP Binary format . The binary format is similar to the ascii format, except that each seed is stored as a unsigned integer (four bytes) and each frame component is stored as an IEEE double (eight bytes). The data is written in little endian order. . .P .B mser can process multiple images. In this case the names of the corresponding output files are calculated based on .IR FILESPEC s. .\" ------------------------------------------------------------------ .SH EXAMPLES .\" ------------------------------------------------------------------ . .TP mser test.pgm -d 5 Computes the MSERs of image .I test.pgm setting the parameter .I delta to 5 and save the result as a sequence of region seeds to .IR test.mser . .TP mser test.pgm \-\^\-frames Computes the MSERs of image .IR test.pgm , fits elliptical frames to them and saves the frames to .IR test.frame . . .TP mser test.pgm \-\^\-frames=bin:///tmp/%.frame \-\^\-seeds Computes the MSERs of image .IR test.pgm , fits elliptical frames to them and saves the frames to .I /tmp/test.frame and the region seeds to .IR test.mser . . .\" ------------------------------------------------------------------ .SH SEE ALSO .\" ------------------------------------------------------------------ .P .BR vlfeat (7) . .P J. Matas, O. Chum, M. Urban, and T. Pajdla. Robust wide baseline stereo from maximally stable extremal regions. In .IR "Proc. BMVC" , 2002. . vlfeat/src/test_host.c0000644000175000017500000000064312237004736013723 0ustar dimadima/* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include int main(int argc VL_UNUSED, char ** argv VL_UNUSED) { char * string = vl_configuration_to_string_copy() ; assert (string) ; VL_PRINTF(string) ; vl_free(string) ; return 0 ; } vlfeat/src/test_stringop.c0000644000175000017500000000741512237004736014617 0ustar dimadima/* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include "check.h" #include #include int main (int argc VL_UNUSED, char *argv[] VL_UNUSED) { vl_size q ; int err, protocol ; char const *repl = "vision" ; char const *str = "*: * '\\*' *" ; char const *subst = "vision: vision '*' vision" ; char const *t1 = "a/b/c/d.tar.gz" ; char const *t3 = "t" ; char const *next ; enum { buf_len = 1024 } ; char buf [buf_len] ; enum { sml_len = 2 } ; char sml [sml_len] ; /* -------------------------------------------------------------- */ /* t3 fits in the destination buffer */ q = vl_string_copy (sml, sml_len, t3) ; err = (q >= sml_len) ; check (! err, "vl_string_copy") ; check (q == strlen(t3), "vl_string_copy") ; /* t1 does not fit in the destination buffer */ q = vl_string_copy (sml, sml_len, t1) ; err = (q >= sml_len) ; check (err, "vl_string_copy") ; check (q == strlen(t1), "vl_string_copy") ; /* -------------------------------------------------------------- */ /* check substitution with widcard */ q = vl_string_replace_wildcard (buf, buf_len, str, '*', '\\', repl) ; err = (q >= buf_len) ; check (! err, "vl_string_replace_wildcard") ; check (strcmp(buf, subst) == 0, "vl_string_replace_wildcard") ; check (strlen(subst) == q, "vl_string_replace_wildcard") ; /* and the case in which the destination buffer is too small */ q = vl_string_replace_wildcard (sml, sml_len, str, '*', '\\', repl) ; err = (q >= sml_len) ; check (err, "vl_string_replace_wildcard") ; check (strlen(subst) == q, "vl_string_replace_wildcard") ; /* and without output string */ q = vl_string_replace_wildcard (0,0, str, '*', '\\', repl) ; err = (q >= sml_len) ; check (err, "vl_string_replace_wildcard") ; check (strlen(subst) == q, "vl_string_replace_wildcard") ; /* -------------------------------------------------------------- */ q = vl_string_basename (buf, buf_len, "a/b/c/d.tar.gz", 0) ; err = (q >= buf_len) ; check (! err, "vl_string_basename") ; check (strcmp(buf, "d.tar.gz") == 0, "vl_string_basename") ; q = vl_string_basename (buf, buf_len, "a/b/c/d.tar.gz", 1) ; err = (q >= buf_len) ; check (! err, "vl_string_basename") ; check (strcmp(buf, "d.tar") == 0, "vl_string_basename") ; q = vl_string_basename (buf, buf_len, "a/b/c/d.tar.gz", 2) ; err = (q >= buf_len) ; check (! err, "vl_string_basename") ; check (strcmp(buf, "d") == 0, "vl_string_basename") ; q = vl_string_basename (buf, buf_len, "a/b/c/d.tar.gz", 3) ; err = (q >= buf_len) ; check (! err, "vl_string_basename") ; check (strcmp(buf, "d") == 0, "vl_string_basename") ; /* -------------------------------------------------------------- */ next = "ascii://bin://ascii://bin://unkown1://unknown2://bin:///which remains/" ; next = vl_string_parse_protocol(next, &protocol) ; check (protocol == VL_PROT_ASCII,) ; next = vl_string_parse_protocol(next, &protocol) ; check (protocol == VL_PROT_BINARY,) ; next = vl_string_parse_protocol(next, &protocol) ; check (protocol == VL_PROT_ASCII,) ; next = vl_string_parse_protocol(next, &protocol) ; check (protocol == VL_PROT_BINARY,) ; next = vl_string_parse_protocol(next, &protocol) ; check (protocol == VL_PROT_UNKNOWN,) ; next = vl_string_parse_protocol(next, &protocol) ; check (protocol == VL_PROT_UNKNOWN,) ; next = vl_string_parse_protocol(next, &protocol) ; check (protocol == VL_PROT_BINARY,) ; check (strcmp(next, "/which remains/") == 0,"%s",next) ; check_signoff() ; return 0 ; } vlfeat/src/generic-driver.h0000644000175000017500000001435112237004745014622 0ustar dimadima/** @author Andrea Vedaldi ** @brief Support for command line drivers - Definition. ** @internal ** ** This file contains support code which is shared by the command ** line drivers. **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. Copyright (C) 2013 Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_GENERIC_DRIVER #define VL_GENERIC_DRIVER #include #include #include #include /** @brief File meta information **/ struct _VlFileMeta { vl_bool active ; /**< Is the file active? */ char pattern [1024] ; /**< File name pattern */ int protocol ; /**< File protocol */ char name [1024] ; /**< Current file name */ FILE * file ; /**< Current file stream */ } ; /** @brief File meta information type ** @see ::_VlFileMeta **/ typedef struct _VlFileMeta VlFileMeta ; /* ----------------------------------------------------------------- */ /** @brief Parse argument for file meta information ** ** @param optarg argument to parse. ** @param self structure to initalize. ** ** The function parses the string @a optarg to fill the structure @a ** self. @a optarg is supposed to be composed of two parts: a file ** protocol specification and a file pattern. Then the function: ** ** - Sets VlFileMeta::active to true. ** - Sets VlFileMeta::protocol to the file protocol id (if any). ** - Sets VlFileMeta::pattern to the file pattern (if any). ** ** @return error code. The funciton may fail either because the file ** protocol is not recognized (::VL_ERR_BAD_ARG) or because the file ** pattern is too long to be stored (::VL_ERR_OVERFLOW). **/ static int vl_file_meta_parse (VlFileMeta * self, char const * optarg) { vl_size q ; self->active = 1 ; if (optarg) { int protocol ; char const * arg = vl_string_parse_protocol (optarg, &protocol) ; /* parse the (optional) protocol part */ switch (protocol) { case VL_PROT_UNKNOWN : return VL_ERR_BAD_ARG ; case VL_PROT_ASCII : case VL_PROT_BINARY : self->protocol = protocol ; break ; case VL_PROT_NONE : break ; } if (vl_string_length (arg) > 0) { q = vl_string_copy (self->pattern, sizeof (self->pattern), arg) ; if (q >= sizeof(self->pattern)) { return VL_ERR_OVERFLOW ; } } } return VL_ERR_OK ; } /* ----------------------------------------------------------------- */ /** @brief Open the file associated to meta information ** ** @param self File meta information. ** @param basename Basename. ** @param mode Opening mode (as in @c fopen). ** ** @return error code. The error may be either either ** ::VL_ERR_OVERFLOW if the file name is too long or to ::VL_ERR_IO ** if the file cannot be opened. **/ static int vl_file_meta_open (VlFileMeta * self, char const * basename, char const * mode) { vl_size q ; if (! self->active) { return VL_ERR_OK ; } q = vl_string_replace_wildcard (self->name, sizeof(self->name), self -> pattern, '%', '\0', basename) ; if (q >= sizeof(self->name)) { return vl_set_last_error (VL_ERR_OVERFLOW, NULL) ; } if (self->active) { self->file = fopen (self->name, mode) ; if (! self->file) { return vl_set_last_error(VL_ERR_IO, NULL) ; } } return 0 ; } /* ----------------------------------------------------------------- */ /** @brief Close the file associated to meta information ** ** @param self File meta information. **/ static void vl_file_meta_close (VlFileMeta * self) { if (self -> file) { fclose (self -> file) ; self -> file = 0 ; } } /* ----------------------------------------------------------------- */ /** @brief Write double to file ** ** @param self File meta information. ** @param x Datum to write. ** ** @return error code. The function returns ::VL_ERR_ALLOC if the ** datum cannot be written. **/ VL_INLINE int vl_file_meta_put_double (VlFileMeta * self, double x) { int err ; size_t n ; double y ; switch (self -> protocol) { case VL_PROT_ASCII : err = fprintf (self -> file, "%g ", x) ; break ; case VL_PROT_BINARY : vl_swap_host_big_endianness_8 (&y, &x) ; n = fwrite (&y, sizeof(double), 1, self -> file) ; err = n < 1 ; break ; default : abort() ; } return err ? VL_ERR_ALLOC : VL_ERR_OK ; } /* ----------------------------------------------------------------- */ /** @brief Write uint8 to file ** ** @param self File meta information. ** @param x Datum to write. ** ** @return error code. The function returns ::VL_ERR_ALLOC if the ** datum cannot be written. **/ VL_INLINE int vl_file_meta_put_uint8 (VlFileMeta *self, vl_uint8 x) { size_t n ; int err ; switch (self -> protocol) { case VL_PROT_ASCII : err = fprintf (self -> file, "%d ", x) ; if (err) return VL_ERR_ALLOC ; break ; case VL_PROT_BINARY : n = fwrite (&x, sizeof(vl_uint8), 1, self -> file) ; if (n < 1) return VL_ERR_ALLOC ; break ; default : abort() ; } return VL_ERR_OK ; } /* ----------------------------------------------------------------- */ /** @brief Read double from file ** ** @param self File meta information. ** @param x Datum read. ** ** @return error code. The function returns ::VL_ERR_EOF if the ** end-of-file is reached and ::VL_ERR_BAD_ARG if the file is ** malformed. **/ VL_INLINE int vl_file_meta_get_double (VlFileMeta *self, double *x) { int err ; size_t n ; double y ; switch (self -> protocol) { case VL_PROT_ASCII : err = fscanf (self -> file, " ") ; if (err == EOF) return VL_ERR_EOF ; err = fscanf (self -> file, "%lg", x) ; if (err == EOF) return VL_ERR_EOF ; if (err < 1 ) return VL_ERR_BAD_ARG ; break ; case VL_PROT_BINARY : n = fread (&y, sizeof(double), 1, self -> file) ; if (n < 1) return VL_ERR_BAD_ARG ; vl_swap_host_big_endianness_8 (x, &y) ; break ; default : abort() ; } return VL_ERR_OK ; } /* VL_GENERIC_DRIVER */ #endif vlfeat/src/test_getopt_long.c0000644000175000017500000000420212237004736015262 0ustar dimadima/* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include int daggerset; /* options descriptor */ static struct option longopts[] = { { "help", no_argument, 0, 'h' }, { "buffy", no_argument, 0, 'b' }, { "fluoride", required_argument, 0, 'f' }, { "daggerset", no_argument, &daggerset, 1000 }, { "daggerunset", no_argument, &daggerset, 1001 }, { "spike", optional_argument, 0, 1002 }, { NULL, 0, 0, 0 } }; int main (int argc, char *argv[]) { int ch ; printf("*** parsing options: start\n") ; while ((ch = getopt_long(argc, argv, "hbf:", longopts, 0)) != -1) { switch (ch) { case 'h': printf("test_getopt_long: test VLFeat implementation of this function.\n" " --help -h this message\n" " --buffy -b option with no arguments\n" " --fluoride -f option with required argument\n" " --daggerset auto option with no arguments\n" " --daggerrunset auto option with no argument\n" " --spike long option with optional argument\n") ; break; case 'b': printf("option `b' or `buffy'\n") ; break; case 'f': printf("option `f' or `flouride' with arg `%s'\n", optarg) ; break ; case 1002 : printf("option `spike' with arg `%s'\n", optarg) ; break ; case 0: printf("automatic longoption (daggerset=%d)\n", daggerset) ; break ; case '?' : printf("illegal option or missing argument\n") ; break ; case ':' : printf("illegal option\n") ; break ; default: abort() ; } } printf("*** parsing options: end\n"); { int i ; for(i = optind ; i < argc ; ++i) printf("non-option: '%s'\n", argv[i]) ; } return 0 ; } vlfeat/src/vlfeat.70000644000175000017500000000547412237004736013123 0ustar dimadima.TH VLFEAT 1 "" "VLFeat" "VLFeat" .\" ------------------------------------------------------------------ .SH NAME .\" ------------------------------------------------------------------ VLFeat \- VisionLab Features Library .\" ------------------------------------------------------------------ .SH DESCRIPTION .\" ------------------------------------------------------------------ .B VLFeat is a collection of computer vision algorithms with a special focus on image features such as SIFT and MSER. .P The functionalities offered by the library can be accessed either through its API, or by means of command line and MATLAB programs. See the .B SEE ALSO section for a list of the related command line programs and for a pointer to the general documentation of the library. . .P . .\" ------------------------------------------------------------------ .SH "FILE SPECIFIERS (FILESPEC)" .\" ------------------------------------------------------------------ Some commands in .B VLFeat make use of `file specifiers' to associate to one or more input files the appropriate output/auxiliary files. A file specifier is a string such as `ascii://%.txt' and contains two pieces of information: .IP \(bu 4 The .B file format (in this case .IR ascii ). The supported formats depend on the particular application. Two common formats are .I ascii and .IR bin (ary). . .IP \(bu 4 A .B name transformation rule (in this case .IR %.txt ). This is used to transform the name an input file into the name of the corresponding output/auxiliary file. The transformed name is comput by extracting the basename of the input file substituting it to all occurences of the wildcard characer `%' in the transformation rule (`%%') passes the wildcard character untouched. .P Recall that the basename of a file name is obtained by stripping the directory prefix (everything from the beginning up to the last `/' or `\\' character) and extension (everything from the last `.' characeter (excluding the prefix) to the end). .P For instance, the filespec `ascii://%.txt' and the input file `test.data' specify a file named `test.txt' in ascii (text) format. . .SS "Partial file specifiers" . Normally, a program provides default values for its file specifiers. In this case, partial file specifier (with only the file format or the name transformation rule are acceptable). . .SS "File specifiers equivalent to a file name" . A partial specifier such as `file.txt' is in effect equivalent to the file name `file.txt'. If the specifier is used in conjunction with multiple input files, this causes the same file to be accessed multile times. .\" ------------------------------------------------------------------ .SH SEE ALSO .\" ------------------------------------------------------------------ .BR sift (1), .BR mser (1) .P A. Vedaldi and B. Fulkerson. VLFeat Library. .IR http://www.vlfeat.org/ vlfeat/src/test_mathop.c0000644000175000017500000000303612237004736014235 0ustar dimadima#include #include #include #include int main (int argc VL_UNUSED, char** argv VL_UNUSED) { int error = 0 ; /* ----------------------------------------------------------------- * vl_fast_resqrt_* * -------------------------------------------------------------- */ VL_PRINTF ("%20s %10s %10s %10s\n", "func", "elaps [s]", "eval/s", "chksum") ; #define SFX f #define SFX2 FLT #define T float #define SQRT sqrtf #define ABS fabsf #define ONE 1.0F #include "test_mathop_fast_resqrt.tc" #undef ONE #undef ABS #undef SQRT #undef T #undef SFX2 #undef SFX #define SFX d #define SFX2 DBL #define T float #define SQRT sqrt #define ABS fabs #define ONE 1.0 #include "test_mathop_fast_resqrt.tc" #undef ONE #undef ABS #undef SQRT #undef T #undef SFX2 #undef SFX VL_PRINTF("\n") ; /* ----------------------------------------------------------------- * vl_fast_sqrt_ui* * -------------------------------------------------------------- */ VL_PRINTF ("%20s %10s %10s %10s\n", "func", "elaps [s]", "eval/s", "chksum") ; #undef SFX #undef T #undef STEP #define SFX 32 #define T vl_uint32 #define STEP 7 #include "test_mathop_fast_sqrt_ui.tc" #undef SFX #undef T #undef STEP #define SFX 16 #define T vl_uint16 #define STEP 0 #include "test_mathop_fast_sqrt_ui.tc" #undef SFX #undef T #undef STEP #define SFX 8 #define T vl_uint8 #define STEP 0 #include "test_mathop_fast_sqrt_ui.tc" return error ; } vlfeat/src/test_threads.c0000644000175000017500000000435612237004745014405 0ustar dimadima/** @file test_threads.c ** @author Andrea Vedaldi ** @brief Test threaded VLFeat client **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. Copyright (C) 2013 Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #if defined(VL_THREADS_POSIX) #include #endif #if defined(VL_THREADS_WIN) #include #endif #if defined(VL_THREADS_POSIX) void * testThread(void * args) { int j ; int id = *(int*)args ; vl_tic() ; for (j = 0 ; j < 10 ; ++j) { printf("Thread %5d: %d\n", id, vl_rand_int31(vl_get_rand())) ; fflush(stdout) ; } printf("Thread %5d: elapsed time: %.2f s\n", id, vl_toc()) ; return NULL ; } #elif defined(VL_THREADS_WIN) DWORD WINAPI testThread(LPVOID args) { int j ; int id = *(DWORD*)args ; vl_tic() ; for (j = 0 ; j < 10 ; ++j) { printf("Thread %5d: %d\n", id, vl_rand_int31(vl_get_rand())) ; fflush(stdout) ; } printf("Thread %5d: elapsed time: %.2f s\n", id, vl_toc()) ; return 0 ; } #endif int main(int argc VL_UNUSED, char** argv VL_UNUSED) { #ifndef VL_DISABLE_THREADS #if defined(VL_THREADS_POSIX) vl_uindex i ; pthread_t threads [5] ; int threadIds [5] ; for (i = 0 ; i < sizeof(threads) / sizeof(threads[0]) ; ++i) { threadIds [i] = i ; pthread_create (threads + i, NULL, testThread, threadIds + i) ; } for (i = 0 ; i < sizeof(threads) / sizeof(threads[0]) ; ++i) { pthread_join (threads[i], NULL) ; } #elif defined(VL_THREADS_WIN) int i ; DWORD threadIds [5] ; HANDLE threadHandles [5] ; for (i = 0 ; i < sizeof(threadHandles) / sizeof(threadHandles[0]) ; ++i) { threadHandles [i] = CreateThread ( NULL, 0, testThread, threadIds + i, 0, threadIds + i) ; } for (i = 0 ; i < sizeof(threadHandles) / sizeof(threadHandles[0]) ; ++i) { WaitForSingleObject (threadHandles[i], INFINITE); } #endif /* VL_DISABLE_THREADS */ #else printf("VLFeat was compiled without threading support\n") ; #endif { char * string = vl_configuration_to_string_copy() ; printf("%s", string) ; vl_free(string) ; } return 0 ; } vlfeat/src/test_kmeans.c0000644000175000017500000000320312237004745014217 0ustar dimadima/** @file test_kmeans.c ** @brief K-means test ** @author David Novotny **/ #include #include #include //#include int main(int argc VL_UNUSED, char ** argv VL_UNUSED) { VlRand rand ; vl_size numData = 100000; vl_size dimension = 256; vl_size numCenters = 400; vl_size maxiter = 10; vl_size maxComp = 100; vl_size maxrep = 1; vl_size ntrees = 1; double * data; vl_size dataIdx, d; //VlKMeansAlgorithm algorithm = VlKMeansANN ; VlKMeansAlgorithm algorithm = VlKMeansLloyd ; //VlKMeansAlgorithm algorithm = VlKMeansElkan ; VlVectorComparisonType distance = VlDistanceL2 ; VlKMeans * kmeans = vl_kmeans_new (VL_TYPE_DOUBLE,distance) ; vl_rand_init (&rand) ; vl_rand_seed (&rand, 1000) ; data = vl_malloc(sizeof(double) * dimension * numData); for(dataIdx = 0; dataIdx < numData; dataIdx++) { for(d = 0; d < dimension; d++) { double randomNum = (double)vl_rand_real3(&rand)+1; data[dataIdx*dimension+d] = randomNum; } } vl_kmeans_set_verbosity (kmeans,1); vl_kmeans_set_max_num_iterations (kmeans, maxiter) ; vl_kmeans_set_max_num_comparisons (kmeans, maxComp) ; vl_kmeans_set_num_repetitions (kmeans, maxrep) ; vl_kmeans_set_num_trees (kmeans, ntrees); vl_kmeans_set_algorithm (kmeans, algorithm); //struct timeval t1,t2; //gettimeofday(&t1, NULL); vl_kmeans_cluster(kmeans,data,dimension,numData,numCenters); //gettimeofday(&t2, NULL); //VL_PRINT("elapsed vlfeat: %f s\n",(double)(t2.tv_sec - t1.tv_sec) + ((double)(t2.tv_usec - t1.tv_usec))/1000000.); vl_kmeans_delete(kmeans); vl_free(data); return 0 ; } vlfeat/src/test_heap-def.c0000644000175000017500000000766212237004736014427 0ustar dimadima/** @file test_heap-def.c ** @brief Test heap-def.h ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #define VL_HEAP_prefix vl_heap_float #define VL_HEAP_type float #include #include typedef struct _S { int x ; } S ; int s_cmp (S const * v, vl_uindex a, vl_uindex b) { return v[a].x - v[b].x ; } void s_swap (S * v, vl_uindex a, vl_uindex b) { S t = v[a] ; v[a] = v[b] ; v[b] = t ; printf("Swapping %" VL_FMT_UINDEX "x with %" VL_FMT_UINDEX "\n", a, b) ; } #define VL_HEAP_prefix s_heap #define VL_HEAP_type S #define VL_HEAP_cmp s_cmp #include #define VL_HEAP_prefix track_s_heap #define VL_HEAP_type S #define VL_HEAP_cmp s_cmp #define VL_HEAP_swap s_swap #include typedef struct _H { vl_size numNodes ; int* array ; } H ; int h_cmp (H const * h, vl_uindex a, vl_uindex b) { return h->array[a] - h->array[b] ; } void h_swap (H * h, vl_uindex a, vl_uindex b) { int t = h->array[a] ; h->array[a] = h->array[b] ; h->array[b] = t ; } #define VL_HEAP_prefix h_heap #define VL_HEAP_array H* #define VL_HEAP_array_const H const* #define VL_HEAP_swap h_swap #define VL_HEAP_cmp h_cmp #include int main (int argc VL_UNUSED, char** argv VL_UNUSED) { vl_uindex i ; vl_size numNodes = 0 ; float data [] = {1.01, 5.02, 8, 0.1, 100, 3, 9, 4, 1.02} ; S data_s [] = {{5}, {7}, {9}, {1}} ; S data_s_track [] = {{5}, {7}, {9}, {1}} ; int data_h [] = {5, 7, 9, 1} ; H h ; h.numNodes = 0 ; h.array = data_h ; printf("Pushing heap\n") ; for (i = 0 ; i < sizeof(data) / sizeof(data[0]) ; ++i) { printf ("%5" VL_FMT_UINDEX ": %f\n", i, data[i]) ; vl_heap_float_push (data, &numNodes) ; } printf("Popping heap\n") ; for (i = 0 ; i < sizeof(data) / sizeof(data[0]) ; ++i) { printf ("%" VL_FMT_UINDEX ": %f\n", i, data[vl_heap_float_pop (data, &numNodes)]) ; } printf("Refilling, updating fourth element, and popping again\n") ; for (i = 0 ; i < sizeof(data) / sizeof(data[0]) ; ++i) { vl_heap_float_push (data, &numNodes) ; } printf("%f -> %f\n", data[3], 9.01) ; data [3] = 9.01 ; vl_heap_float_update (data, numNodes, 3) ; for (i = 0 ; i < sizeof(data) / sizeof(data[0]) ; ++i) { printf ("%" VL_FMT_UINDEX ": %f\n", i, data[vl_heap_float_pop (data, &numNodes)]) ; } printf("Pushing heap of structures\n") ; numNodes = 0 ; for (i = 0 ; i < sizeof(data_s) / sizeof(data_s[0]) ; ++i) { printf ("s[%" VL_FMT_UINDEX "].x = %d\n", i, data_s[i].x) ; s_heap_push (data_s, &numNodes) ; } printf("Popping heap of structures\n") ; for (i = 0 ; i < sizeof(data_s) / sizeof(data_s[0]) ; ++i) { printf ("s[%" VL_FMT_UINDEX "].x = %d\n", i, data_s[s_heap_pop (data_s, &numNodes)].x) ; } printf("Pushing heap of structures with custom swap\n") ; numNodes = 0 ; for (i = 0 ; i < sizeof(data_s) / sizeof(data_s[0]) ; ++i) { printf ("s[%" VL_FMT_UINDEX "].x = %d\n", i, data_s_track[i].x) ; track_s_heap_push (data_s_track, &numNodes) ; } printf("Popping heap of structures with custom swap\n") ; for (i = 0 ; i < sizeof(data_s) / sizeof(data_s[0]) ; ++i) { printf ("s[%" VL_FMT_UINDEX "].x = %d\n", i, data_s_track [track_s_heap_pop (data_s_track, &numNodes)].x) ; } printf("Pushing heap of structures with custom container\n") ; numNodes = 0 ; for (i = 0 ; i < sizeof(data_h) / sizeof(data_h[0]) ; ++i) { printf ("s[%" VL_FMT_UINDEX "].x = %d\n", i, h.array[i]) ; h_heap_push (&h, &h.numNodes) ; } printf("Popping heap of structures with custom container\n") ; for (i = 0 ; i < sizeof(data_h) / sizeof(data_h[0]) ; ++i) { printf ("s[%" VL_FMT_UINDEX "].x = %d\n", i, h.array [h_heap_pop (&h, &h.numNodes)]) ; } return 0 ; } vlfeat/src/test_liop.c0000644000175000017500000000132212237004745013704 0ustar dimadima#include #include #include #include #include #include int main(){ vl_int i ; VlLiopDesc * liop ; vl_size size = 11*11 ; float mat[] = { 6,6,6,6,6,6,6,6,6,6,6, 6,6,6,5,4,4,4,5,6,6,6, 6,6,5,4,3,3,3,4,5,6,6, 6,5,4,3,2,2,2,3,4,5,6, 6,4,3,2,2,1,2,2,3,4,6, 6,4,3,2,1,1,1,2,3,4,6, 6,4,3,2,2,1,2,2,3,4,6, 6,5,4,3,2,2,2,3,4,5,6, 6,6,5,4,3,3,3,4,5,6,6, 6,6,6,5,4,4,4,5,6,6,6, 6,6,6,6,6,6,6,6,6,6,6}; float * patch = vl_malloc(sizeof(float)*size); for(i = 0; i < (signed)size; i++){ patch[i] = mat[i]; } liop = vl_liopdesc_new(4,6,2,11); vl_liopdesc_delete(liop) ; vl_free(patch) ; } vlfeat/src/test_gauss_elimination.c0000644000175000017500000000077112237004736016462 0ustar dimadima/** file: test_gauss_elimination.cpp */ #include #include #include int main(int argc VL_UNUSED, char**argv VL_UNUSED) { double A [] = { 1, 12, 3, 4 }; double b [] = { 1, -2 } ; double x [2] ; double c [2] ; int i ; vl_solve_linear_system_2 (x, A, b) ; c[0] = A[0] * x[0] + A[2] * x[1] ; c[1] = A[1] * x[0] + A[3] * x[1] ; for (i = 0 ; i < 2 ; ++i) { VL_PRINTF("[A x]_%-4d = %4g, b_%-4d = %4g\n", i+1, c[i], i+1, b[i]) ; } return 0 ; } vlfeat/src/test_rand.c0000644000175000017500000000132212237004736013665 0ustar dimadima/** @file test_rand.c ** @author Andrea Vedaldi ** @breif Test vl/random.h **/ #include #include #include int main (int argc VL_UNUSED, char *argv[] VL_UNUSED) { int i ; vl_uint32 init [4] = {0x123, 0x234, 0x345, 0x456} ; VlRand rand ; vl_rand_init (&rand) ; vl_rand_seed_by_array (&rand, init, sizeof(init)/sizeof(init[0])) ; printf("1000 outputs of vl_rand_uint32()\n"); for (i=0; i<1000; i++) { printf("%10" VL_FL_INT32 "u ", vl_rand_uint32(&rand)); if (i%5==4) printf("\n"); } printf("\n1000 outputs of vl_rand_real2()\n"); for (i=0; i<1000; i++) { printf("%10.8f ", vl_rand_real2(&rand)); if (i%5==4) printf("\n"); } return 0; } vlfeat/src/test_gmm.c0000644000175000017500000001724312237004745013532 0ustar dimadima/** @file test_gmm.c ** @brief GMM test ** @author David Novotny **/ #include #include #include #include #include #include //#include //#define TYPE double //#define VL_F_TYPE VL_TYPE_DOUBLE #define TYPE float #define VL_F_TYPE VL_TYPE_FLOAT void saveResults(const char * dataFileData, const char * dataFileResults, VlGMM * gmm, void * data, vl_size numData); int main(int argc VL_UNUSED, char ** argv VL_UNUSED) { VlKMeans * kmeans = 0; VlRand rand ; vl_size dataIdx, d, cIdx; VlGMM * gmm; double sigmaLowerBound = 0.000001; vl_size numData = 1000; vl_size dimension = 3; vl_size numClusters = 20; vl_size maxiter = 5; vl_size maxrep = 1; vl_size maxiterKM = 5; vl_size ntrees = 3; vl_size maxComp = 20; typedef enum _init { KMeans, Rand, Custom } Init ; vl_bool computeFisher = VL_TRUE; vl_bool computeVlad = VL_FALSE; Init init = KMeans; //char * dataFileResults = "/home/dave/vlfeat/data/gmm/gmm-results.mat"; //char * dataFileData = "/home/dave/vlfeat/data/gmm/gmm-data.mat"; TYPE * data = vl_malloc(sizeof(TYPE)*numData*dimension); TYPE * enc = vl_malloc(sizeof(TYPE)*2*dimension*numClusters); vl_uint32 * assign; vl_set_num_threads(0) ; /* use the default number of threads */ vl_rand_init (&rand) ; vl_rand_seed (&rand, 49000) ; for(dataIdx = 0; dataIdx < numData; dataIdx++) { for(d = 0; d < dimension; d++) { data[dataIdx*dimension+d] = (TYPE)vl_rand_real3(&rand); //VL_PRINT("%f ",data[dataIdx*dimension+d]); } //VL_PRINT("\n"); } gmm = vl_gmm_new (VL_F_TYPE, dimension, numClusters) ; switch(init) { case KMeans: kmeans = vl_kmeans_new(VL_F_TYPE,VlDistanceL2); vl_kmeans_set_verbosity (kmeans,1); vl_kmeans_set_max_num_iterations (kmeans, maxiterKM) ; vl_kmeans_set_max_num_comparisons (kmeans, maxComp) ; vl_kmeans_set_num_trees (kmeans, ntrees); vl_kmeans_set_algorithm (kmeans, VlKMeansANN); vl_kmeans_set_initialization(kmeans, VlKMeansRandomSelection); vl_gmm_set_initialization (gmm,VlGMMKMeans); vl_gmm_set_kmeans_init_object(gmm,kmeans); break; case Rand: vl_gmm_set_initialization (gmm,VlGMMRand); break; case Custom: { TYPE * initSigmas; TYPE * initMeans; TYPE * initWeights; initSigmas = vl_malloc(sizeof(TYPE) * numClusters * dimension); initWeights = vl_malloc(sizeof(TYPE) * numClusters); initMeans = vl_malloc(sizeof(TYPE) * numClusters * dimension); vl_gmm_set_initialization (gmm,VlGMMCustom); for(cIdx = 0; cIdx < numClusters; cIdx++) { for(d = 0; d < dimension; d++) { initMeans[cIdx*dimension+d] = (TYPE)vl_rand_real3(&rand); initSigmas[cIdx*dimension+d] = (TYPE)vl_rand_real3(&rand); } initWeights[cIdx] = (TYPE)vl_rand_real3(&rand); } vl_gmm_set_priors(gmm,initWeights); vl_gmm_set_covariances(gmm,initSigmas); vl_gmm_set_means(gmm,initMeans); break; } default: abort(); } vl_gmm_set_max_num_iterations (gmm, maxiter) ; vl_gmm_set_num_repetitions(gmm, maxrep); vl_gmm_set_verbosity(gmm,1); vl_gmm_set_covariance_lower_bound (gmm,sigmaLowerBound); //struct timeval t1,t2; //gettimeofday(&t1, NULL); vl_gmm_cluster (gmm, data, numData); //gettimeofday(&t2, NULL); //VL_PRINT("elapsed vlfeat: %f s\n",(double)(t2.tv_sec - t1.tv_sec) + ((double)(t2.tv_usec - t1.tv_usec))/1000000.); // VL_PRINT("posterior:\n"); // for(cIdx = 0; cIdx < clusterNum; cIdx++){ // for(dataIdx = 0; dataIdx < Ndata; dataIdx++){ // VL_PRINT("%f ",((float*)posteriors)[cIdx*Ndata+dataIdx]); // } // VL_PRINT("\n"); // } // VL_PRINT("mean:\n"); // for(cIdx = 0; cIdx < numClusters; cIdx++) { // for(d = 0; d < dimension; d++) { // VL_PRINT("%f ",((TYPE*)means)[cIdx*dimension+d]); // } // VL_PRINT("\n"); // } // // VL_PRINT("sigma:\n"); // for(cIdx = 0; cIdx < numClusters; cIdx++) { // for(d = 0; d < dimension; d++) { // VL_PRINT("%f ",((TYPE*)sigmas)[cIdx*dimension+d]); // } // VL_PRINT("\n"); // } // // VL_PRINT("w:\n"); // for(cIdx = 0; cIdx < numClusters; cIdx++) { // VL_PRINT("%f ",((TYPE*)weights)[cIdx]); // VL_PRINT("\n"); // } //saveResults(dataFileData,dataFileResults,gmm,(void*) data, numData); // VL_PRINT("fisher:\n"); // for(cIdx = 0; cIdx < clusterNum; cIdx++) { // for(d = 0; d < dimension*2; d++) { // VL_PRINT("%f ",enc[cIdx*dimension*2+d]); // } // VL_PRINT("\n"); // } vl_free(data); numData = 2000; data = vl_malloc(numData*dimension*sizeof(TYPE)); for(dataIdx = 0; dataIdx < numData; dataIdx++) { for(d = 0; d < dimension; d++) { data[dataIdx*dimension+d] = (TYPE)vl_rand_real3(&rand); } } if(computeFisher) { vl_fisher_encode (enc, VL_F_TYPE, vl_gmm_get_means(gmm), dimension, numClusters, vl_gmm_get_covariances(gmm), vl_gmm_get_priors(gmm), data, numData, VL_FISHER_FLAG_IMPROVED ) ; } assign = vl_malloc(numData*numClusters*sizeof(vl_uint32)); for(dataIdx = 0; dataIdx < numData; dataIdx++) { for(cIdx = 0; cIdx < numClusters; cIdx++) { assign[cIdx*numData+dataIdx] = (vl_uint32)vl_rand_real3(&rand); } } if(computeVlad) { vl_free(enc); enc = vl_malloc(sizeof(TYPE)*dimension*numClusters); vl_vlad_encode (enc, VL_F_TYPE, vl_gmm_get_means(gmm), dimension, numClusters, data, numData, assign, 0) ; } vl_gmm_delete(gmm); vl_free(data); if(enc){ vl_free(enc); } if(kmeans) { vl_kmeans_delete(kmeans); } return 0 ; } void saveResults(const char * dataFileData, const char * dataFileResults, VlGMM * gmm, void * data, vl_size numData) { char *mode = "w"; FILE * ofp; vl_size d, cIdx; vl_uindex i_d; vl_size dimension = vl_gmm_get_dimension(gmm) ; vl_size numClusters = vl_gmm_get_num_clusters(gmm) ; vl_type dataType = vl_gmm_get_data_type(gmm) ; double const * sigmas = vl_gmm_get_covariances(gmm) ; double const * means = vl_gmm_get_means(gmm) ; double const * weights = vl_gmm_get_priors(gmm) ; double const * posteriors = vl_gmm_get_posteriors(gmm) ; ofp = fopen(dataFileData, mode); for(i_d = 0; i_d < numData; i_d++) { if(vl_gmm_get_data_type(gmm) == VL_TYPE_DOUBLE) { for(d = 0; d < vl_gmm_get_dimension(gmm) ; d++) { fprintf(ofp, "%f ", ((double*)data)[i_d * vl_gmm_get_dimension(gmm) + d]); } } else { for(d = 0; d < vl_gmm_get_dimension(gmm); d++) { fprintf(ofp, "%f ", ((float*) data)[i_d * vl_gmm_get_dimension(gmm) + d]); } } fprintf(ofp, "\n"); } fclose (ofp); ofp = fopen(dataFileResults, mode); for(cIdx = 0; cIdx < numClusters; cIdx++) { if(dataType == VL_TYPE_DOUBLE) { for(d = 0; d < vl_gmm_get_dimension(gmm); d++) { fprintf(ofp, "%f ", ((double*)means)[cIdx*dimension+d]); } for(d = 0; d < dimension; d++) { fprintf(ofp, "%f ", ((double*)sigmas)[cIdx*dimension+d]); } fprintf(ofp, "%f ", ((double*)weights)[cIdx]); for(i_d = 0; i_d < numData; i_d++) { fprintf(ofp, "%f ", ((double*)posteriors)[cIdx*numData + i_d]); } fprintf(ofp, "\n"); } else { for(d = 0; d < dimension; d++) { fprintf(ofp, "%f ", ((float*)means)[cIdx*dimension+d]); } for(d = 0; d < dimension; d++) { fprintf(ofp, "%f ", ((float*)sigmas)[cIdx*dimension+d]); } fprintf(ofp, "%f ", ((float*)weights)[cIdx]); for(i_d = 0; i_d < numData; i_d++) { fprintf(ofp, "%f ", ((float*)posteriors)[cIdx*numData + i_d]); } fprintf(ofp, "\n"); } } fclose (ofp); } vlfeat/src/test_mathop_fast_resqrt.tc0000644000175000017500000000252312237004736017036 0ustar dimadima#define F_EPS VL_XCAT(SFX2, _EPSILON) #define F_MAX VL_XCAT(SFX2, _MAX) #define F_MIN VL_XCAT(SFX2, _MIN) { T x ; T dx ; T maxErr = 0 ; T acc ; int numEval = 0 ; double elaps ; char const* funcName = VL_XSTRINGIFY(VL_XCAT(vl_fast_resqrt_, SFX)) ; for (x = F_MIN, dx = F_EPS ; x < F_MAX ; x += dx, dx *= 1 + 1e-6 ) { T y = VL_XCAT(vl_fast_resqrt_, SFX)(x) ; T y_ = ONE / SQRT (x) ; T err = ABS (y_ - y) / y * 100 ; maxErr = VL_MAX(maxErr, err) ; } VL_PRINTF ("%20s (max relative error: %.6f%%)\n", funcName, maxErr) ; if (maxErr > 0.001) { VL_PRINTF ("error: %s: relative error is too large!\n", funcName) ; error = 1 ; } vl_tic() ; numEval = 0 ; acc = 0 ; for (x = F_MIN, dx = F_EPS ; x < F_MAX ; x += dx, dx *= 1 + 1e-6 ) { T y = VL_XCAT(vl_fast_resqrt_, SFX)(x) ; acc += y ; numEval += 1 ; } elaps = vl_toc() ; VL_PRINTF ("%20s %10.2g %10.2g\n", funcName, elaps, numEval / elaps) ; vl_tic() ; numEval = 0 ; acc = 0 ; for (x = F_MIN, dx = F_EPS ; x < F_MAX ; x += dx, dx *= 1 + 1e-6 ) { T y = ONE / SQRT (x) ; acc += y ; numEval += 1 ; } elaps = vl_toc() ; VL_PRINTF ("%20s %10.2g %10.2g\n", "baseline", elaps, numEval / elaps) ; } #undef F_MIN #undef F_MAX #undef F_EPS vlfeat/src/test_svd2.c0000644000175000017500000000374612237004736013633 0ustar dimadima/** @file test_svd2.c ** @brief Test SVD on 2x2 matrices (@ref mathop.h) ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include void print_matrix(char const * name, double *M) { printf("%s = \n[ %10f %10f ]\n[ %10f %10f ]\n", name, M[0], M[2], M[1], M[3]) ; } void prod2 (double R [4], double A [4], double B [4]) { R[0] = A[0]*B[0] + A[2]*B[1] ; R[1] = A[1]*B[0] + A[3]*B[1] ; R[2] = A[0]*B[2] + A[2]*B[3] ; R[3] = A[1]*B[2] + A[3]*B[3] ; } void transp2 (double R [4], double A [4]) { R[0] = A[0] ; R[1] = A[2] ; R[2] = A[1] ; R[3] = A[3] ; } double det2 (double A [4]) { return A[0]*A[3] - A[1]*A[2]; } void check_svd (double *M , double * U, double * S, double *V) { double T1 [4] ; double T2 [4] ; print_matrix("M",M) ; print_matrix("U",U) ; print_matrix("S",S) ; print_matrix("V",V) ; transp2(T1, V) ; prod2(T2, S, T1) ; prod2(T1, U, T2) ; print_matrix("USV'",T1) ; transp2(T1, U) ; prod2(T2, T1, U) ; print_matrix("U'U",T2) ; transp2(T1, V) ; prod2(T2, T1, V) ; print_matrix("V'V",T2) ; printf("det(M) = %f\n", det2(M)) ; printf("det(U) = %f\n", det2(U)) ; printf("det(V) = %f\n", det2(V)) ; printf("det(S) = %f\n", det2(S)) ; printf("\n") ; } int main (int argc VL_UNUSED, char ** argv VL_UNUSED) { double M [] = { 0.864397318249258, 0.094202610858281, -0.851909224508774, 0.873504449150106 } ; double S [4] ; double U [4] ; double V [4] ; vl_svd2(S, U, V, M) ; check_svd(M, U, S, V) ; M[1] = 0 ; vl_svd2(S, U, V, M) ; check_svd(M, U, S, V) ; vl_lapack_dlasv2(S+3, S, V+1, V, U+1, U, M[0], M[2], M[3]) ; V[2] = -V[1] ; V[3] = V[0] ; U[2] = -U[1] ; U[3] = U[0] ; check_svd(M, U, S, V) ; return 0 ; } vlfeat/src/test_mathop_fast_sqrt_ui.tc0000644000175000017500000000163412237004736017206 0ustar dimadima#define FL VL_XCAT(VL_FL_INT, SFX) { T x, acc, acc_ ; double elaps ; int neval ; vl_tic() ; neval = 0 ; x = 0 ; acc = 0 ; do { T y = VL_XCAT(vl_fast_sqrt_ui, SFX) (x) ; acc += y ; x += 1 << STEP ; neval += 1 ; } while (x > (1 << STEP) - 1) ; elaps = vl_toc() ; VL_PRINTF ("%20s", "vl_fast_sqrt_ui" VL_XSTRINGIFY(SFX)) ; VL_PRINTF (" %10.2f %10.2g %010" FL "x\n", elaps, (double) neval / elaps, acc) ; vl_tic() ; neval = 0 ; x = 0 ; acc_ = 0 ; do { vl_uint32 y = floor(sqrt((double) x)); acc_ += y ; x += 1 << STEP ; neval += 1 ; } while (x > (1 << STEP) - 1) ; elaps = vl_toc() ; VL_PRINTF ("%20s", "baseline") ; VL_PRINTF (" %10.2f %10.2g %010" FL "x\n", elaps, (double) neval / elaps, acc) ; if (acc != acc_) { VL_PRINTF ("error: vl_fast_sqrt_ui" VL_XSTRINGIFY(SFX) " != floor(sqrt((double) x))\n") ; error = 1 ; } } #undef FL vlfeat/src/test_nan.c0000644000175000017500000000146712237004736013527 0ustar dimadima/* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include int main(int argc VL_UNUSED, char** argv VL_UNUSED) { VL_PRINTF ("Double NaN : `%g'\n", VL_NAN_D ) ; VL_PRINTF ("Double Inf : `%g'\n", VL_INFINITY_D) ; VL_PRINTF ("Double - Inf : `%g'\n", - VL_INFINITY_D) ; VL_PRINTF ("Single NaN : `%g'\n", VL_NAN_F ) ; VL_PRINTF ("Single Inf : `%g'\n", VL_INFINITY_F) ; VL_PRINTF ("Single - Inf : `%g'\n", - VL_INFINITY_F) ; VL_PRINTF ("Double: 0.0 < VL_INFINITY_D: %d\n", 0.0 < VL_INFINITY_D) ; VL_PRINTF ("Double: 0.0 > - VL_INFINITY_D: %d\n", 0.0 > - VL_INFINITY_D) ; return 0 ; } vlfeat/src/check.h0000644000175000017500000000133012237004736012763 0ustar dimadima/** @file check.h ** @brief Unit test utilties ** @author Andrea Vedaldi **/ #ifndef __CHECK_H__ #define __CHECK_H__ #include #include #include static void check_impl (int condition, const char * file, int line, const char * format, ...) { va_list args; va_start(args, format) ; if (! condition) { fprintf(stderr, "%s:%d: check failed: ", file, line) ; vfprintf(stderr, format, args) ; fprintf(stderr, "\n") ; exit (1) ; } va_end(args) ; } #define check(condition, ...) \ check_impl(condition, __FILE__, __LINE__, "" __VA_ARGS__) #define check_signoff() \ fprintf(stdout, "%s passed\n", __FILE__) /* __CHECK_H__ */ #endif vlfeat/src/test_imopv.c0000644000175000017500000000512212237004736014075 0ustar dimadima/* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include int main (int argc, char** argv) { int width = 256 ; int height = 256 ; int const W = 7 ; float * image ; float * dest ; float * dest2 ; float * filt ; int x, y ; if (argc < 2) { image = vl_malloc (sizeof(float) * width * height) ; for (y = 0 ; y < height ; ++y) { for (x = 0 ; x < width ; ++x) { image [x + width * y] = 128.0f * (((x % 16) < 8) ^ ((y % 16) < 8)) ; } } } else { VlPgmImage im ; int err ; err = vl_pgm_read_new_f (argv[1], &im, &image) ; if (err) { VL_PRINTF("test_imopv: error: %s (%d)\n", vl_get_last_error_message(), vl_get_last_error()) ; return -1 ; } width = im.width ; height = im.height ; } VL_PRINTF("test_imopv: width: %d, height: %d\n", width, height); dest = vl_malloc (sizeof(float) * width * height) ; dest2 = vl_malloc (sizeof(float) * width * height) ; filt = vl_malloc (sizeof(float) * (2*W+1)) ; for (x = 0 ; x < 2*W+1 ; ++ x) { filt [x] = 1.0f / (2*W+1) ; } #if 1 vl_set_simd_enabled (0) ; vl_tic() ; { int trial = 0 ; for (trial = 0 ; trial < 1000 ; ++trial) vl_imconvcol_vf (dest, height, image, width, height, width, filt, -W, W, 1, VL_TRANSPOSE|VL_PAD_BY_CONTINUITY) ; } VL_PRINTF ("Elapsed time no SIMD: %f [s]\n", vl_toc()) ; vl_set_simd_enabled (1) ; vl_tic() ; { int trial = 0 ; for (trial = 0 ; trial < 1000 ; ++trial) vl_imconvcol_vf (dest2, height, image, width, height, width, filt, -W, W, 1, VL_TRANSPOSE|VL_PAD_BY_CONTINUITY) ; } VL_PRINTF ("Elapsed time with SIMD: %f [s]\n", vl_toc()) ; #else vl_imconvcoltri_vf (dest, height, image, width, height, width, 5, 1, VL_TRANSPOSE|VL_PAD_BY_CONTINUITY) ; vl_imconvcoltri_vf (dest2, height, image, width, height, width, 5, 1, VL_TRANSPOSE|VL_PAD_BY_ZERO) ; #endif vl_pgm_write_f("/tmp/src.pgm", image, width, height) ; vl_pgm_write_f("/tmp/test.pgm", dest, height, width) ; vl_pgm_write_f("/tmp/test2.pgm", dest2, height, width) ; vl_free(image) ; vl_free(filt) ; vl_free(dest) ; vl_free(dest2) ; return 0 ; } vlfeat/src/test_mathop_abs.c0000644000175000017500000000204012237004736015054 0ustar dimadima/* * test_mathop_abs.c * vlfeat * * Created by Andrea Vedaldi on 16/07/2009. * Copyright 2009 UCLA. All rights reserved. * */ #include #include #include int main(int argc VL_UNUSED, char**argv VL_UNUSED) { VlRand * rand = vl_get_rand() ; vl_size numData = 100000000 ; vl_size i ; float * X = vl_malloc(sizeof(float) * numData) ; float * Y = vl_malloc(sizeof(float) * numData) ; float * X_end = X + numData ; for (i = 0 ; i < numData ; ++ i) { X[i] = vl_rand_real1(rand) - .5 ; Y[i] = 0 ; } { float * Xi = X ; float * Yi = Y ; vl_tic() ; while (Xi < X_end) { *Yi++ = fabsf (*Xi++) ; } VL_PRINTF("fabsf: %.3f\n", vl_toc()) ; } for (i = 0 ; i < numData ; ++ i) { X[i] = vl_rand_real1(rand) - .5 ; X[i] = 0 ; } { float * Xi = X ; float * Yi = Y ; vl_tic() ; while (Xi < X_end) { *Yi++ = vl_abs_f (*Xi++) ; } VL_PRINTF("vl_abs_f: %.3f\n", vl_toc()) ; } vl_free (Y) ; vl_free (X) ; return 0 ; } vlfeat/src/aib.c0000644000175000017500000000244612237004736012445 0ustar dimadima/* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include int main() { vl_uint32 nrows = 10; vl_uint32 ncols = 3; double Pic[3*10] = { 0.6813, 0.3028, 0.8216, 0.3795, 0.5417, 0.6449, 0.8318, 0.1509, 0.8180, 0.5028, 0.6979, 0.6602, 0.7095, 0.3784, 0.3420, 0.4289, 0.8600, 0.2897, 0.3046, 0.8537, 0.3412, 0.1897, 0.5936, 0.5341, 0.1934, 0.4966, 0.7271, 0.6822, 0.8998, 0.3093, }; vl_uint32 r,c; VlAIB * aib; vl_uint * parents; printf("Pic = ["); for(r=0; r %d\n", r, parents[r]); vl_aib_delete(aib); } /* free(Pic); */ printf("IB done\n"); return 0; } vlfeat/src/test_qsort-def.c0000644000175000017500000000142112237004736014645 0ustar dimadima/** @file test_heap-def.c ** @brief Test heap-def.h ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #define VL_QSORT_prefix my_qsort #define VL_QSORT_type float #include #include int main (int argc VL_UNUSED, char ** argv VL_UNUSED) { float values [] = {.4, 12.3, 44.0, 1.2, 3.4, 5.6} ; vl_size n = sizeof(values) / sizeof(values[0]) ; vl_uindex i ; for (i = 0 ; i < n ; ++i) printf("%5.2f ", values [i]) ; printf("\n") ; my_qsort_sort (values, n) ; for (i = 0 ; i < n ; ++i) printf("%5.2f ", values [i]) ; printf("\n") ; return 0 ; } vlfeat/src/test_vec_comp.c0000644000175000017500000000325412237004745014542 0ustar dimadima/** @file test_vec_comp.c ** @brief Test vector computations ** @author Andrea Vedaldi **/ /* Copyright (C) 2008-11 Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include void init_data (vl_size numDimensions, vl_size numSamples, float ** X, float ** Y) { VlRand * rand = vl_get_rand() ; vl_uindex i ; float * Xi = *X = vl_malloc(sizeof(float) * numDimensions * numSamples) ; float * Yi = *Y = vl_malloc(sizeof(float) * numDimensions * numSamples) ; for (i = 0 ; i < numDimensions * numSamples ; ++ i) { *Xi++ = vl_rand_real1(rand) ; *Yi++ = vl_rand_real1(rand) ; } } int main (int argc VL_UNUSED, char** argv VL_UNUSED) { float * X ; float * Y ; vl_size numDimensions = 1000 ; vl_size numSamples = 2000 ; float * result = vl_malloc (sizeof(float) * numSamples * numSamples) ; VlFloatVectorComparisonFunction f ; init_data (numDimensions, numSamples, &X, &Y) ; X+=1 ; Y+=1 ; vl_set_simd_enabled (VL_FALSE) ; f = vl_get_vector_comparison_function_f (VlDistanceL2) ; vl_tic () ; vl_eval_vector_comparison_on_all_pairs_f (result, numDimensions, X, numSamples, Y, numSamples, f) ; VL_PRINTF("Float L2 distnace: %.3f s\n", vl_toc ()) ; vl_set_simd_enabled (VL_TRUE) ; f = vl_get_vector_comparison_function_f (VlDistanceL2) ; vl_tic () ; vl_eval_vector_comparison_on_all_pairs_f (result, numDimensions, X, numSamples, Y, numSamples, f) ; VL_PRINTF("Float L2 distance (SIMD): %.3f s\n", vl_toc ()) ; X-- ; Y-- ; vl_free (X) ; vl_free (Y) ; vl_free (result) ; return 0 ; } vlfeat/src/mser.c0000644000175000017500000004165212237004736012662 0ustar dimadima/** @file mser-driver.c ** @author Andrea Vedaldi ** @brief MSER command line driver - Definition ** @internal **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #define VL_MSER_DRIVER_VERSION 0.2 #include "generic-driver.h" #include #include #include #include #include #include #include #include /* ----------------------------------------------------------------- */ /* help message */ char const help_message [] = "Usage: %s [options] files ...\n" "\n" "Options include:\n" " --verbose -v Be verbose\n" " --help -h Print this help message\n" " --seeds Specify seeds file\n" " --frames Specify frames file\n" " --meta Specify meta file\n" " --delta -d Specify MSER delta paramter\n" " --epsilon -e Specify MSER epsilon parameter\n" " --no-dups Remove duplicate\n" " --dups Keep duplicates\n" " --max-area Specify maximum region (relative) area\n" " --min-area Specify minimum region (relative) area\n" " --max-variation Specify maximum absolute region stability\n" " --bright-on-dark Enable or disable bright-on-dark regions (default 1)\n" " --dark-on-bright Enable or disable dark-on-bright regions (default 1)\n" "\n" ; /* ----------------------------------------------------------------- */ /* long options codes */ enum { opt_seed = 1000, opt_frame, opt_meta, opt_max_area, opt_min_area, opt_max_variation, opt_min_diversity, opt_bright, opt_dark } ; /* short options */ char const opts [] = "vhd:" ; /* long options */ struct option const longopts [] = { { "verbose", no_argument, 0, 'v' }, { "help", no_argument, 0, 'h' }, { "delta", required_argument, 0, 'd' }, { "seeds", optional_argument, 0, opt_seed }, { "frames", optional_argument, 0, opt_frame }, { "meta", optional_argument, 0, opt_meta }, { "max-area", required_argument, 0, opt_max_area }, { "min-area", required_argument, 0, opt_min_area }, { "max-variation", required_argument, 0, opt_max_variation }, { "min-diversity", required_argument, 0, opt_min_diversity }, { "bright-on-dark", required_argument, 0, opt_bright }, { "dark-on-bright", required_argument, 0, opt_dark }, { 0, 0, 0, 0 } } ; /* ----------------------------------------------------------------- */ /** @brief MSER driver entry point **/ int main(int argc, char **argv) { /* algorithm parameters */ double delta = -1 ; double max_area = -1 ; double min_area = -1 ; double max_variation = -1 ; double min_diversity = -1 ; int bright_on_dark = 1 ; int dark_on_bright = 1 ; vl_bool err = VL_ERR_OK ; char err_msg [1024] ; int n ; int exit_code = 0 ; int verbose = 0 ; VlFileMeta frm = {0, "%.frame", VL_PROT_ASCII, "", 0} ; VlFileMeta piv = {0, "%.mser", VL_PROT_ASCII, "", 0} ; VlFileMeta met = {0, "%.meta", VL_PROT_ASCII, "", 0} ; #define ERRF(msg, arg) { \ err = VL_ERR_BAD_ARG ; \ snprintf(err_msg, sizeof(err_msg), msg, arg) ; \ break ; \ } #define ERR(msg) { \ err = VL_ERR_BAD_ARG ; \ snprintf(err_msg, sizeof(err_msg), msg) ; \ break ; \ } /* ------------------------------------------------------------------ * Parse options * --------------------------------------------------------------- */ while (!err) { int ch = getopt_long(argc, argv, opts, longopts, 0) ; /* If there are no files passed as input, print the help and settings */ if (ch == -1 && argc - optind == 0) ch = 'h'; /* end of option list? */ if (ch == -1) break; /* process options */ switch (ch) { /* .......................................................... */ case '?' : ERRF("Invalid option '%s'.", argv [optind - 1]) ; break ; case ':' : ERRF("Missing mandatory argument for option '%s'.", argv [optind - 1]) ; break ; case 'h' : printf (help_message, argv [0]) ; printf ("MSERs filespec: `%s'\n", piv.pattern) ; printf ("Frames filespec: `%s'\n", frm.pattern) ; printf ("Meta filespec: `%s'\n", met.pattern) ; printf ("Version: driver %s; libvl %s\n", VL_XSTRINGIFY(VL_MSER_DRIVER_VERSION), vl_get_version_string()) ; exit (0) ; break ; case 'v' : ++ verbose ; break ; /* .......................................................... */ case 'd' : n = sscanf (optarg, "%lf", &delta) ; if (n == 0 || delta < 0) ERRF("The argument of '%s' must be a non-negative number.", argv [optind - 1]) ; break ; /* ........................................................... */ case opt_max_area : n = sscanf (optarg, "%lf", &max_area) ; if (n == 0 || max_area < 0 || max_area > 1) ERR("max-area argument must be in the [0,1] range.") ; break ; case opt_min_area : n = sscanf (optarg, "%lf", &min_area) ; if (n == 0 || min_area < 0 || min_area > 1) ERR("min-area argument must be in the [0,1] range.") ; break ; case opt_max_variation : n = sscanf (optarg, "%lf", &max_variation) ; if (n == 0 || max_variation < 0) ERR("max-variation argument must be non-negative.") ; break ; case opt_min_diversity : n = sscanf (optarg, "%lf", &min_diversity) ; if (n == 0 || min_diversity < 0 || min_diversity > 1) ERR("min-diversity argument must be in the [0,1] range.") ; break ; /* ........................................................... */ case opt_frame : err = vl_file_meta_parse (&frm, optarg) ; if (err) ERRF("The arguments of '%s' is invalid.", argv [optind - 1]) ; break ; case opt_seed : err = vl_file_meta_parse (&piv, optarg) ; if (err) ERRF("The arguments of '%s' is invalid.", argv [optind - 1]) ; break ; case opt_meta : err = vl_file_meta_parse (&met, optarg) ; if (err) ERRF("The arguments of '%s' is invalid.", argv [optind - 1]) ; if (met.protocol != VL_PROT_ASCII) ERR("meta file supports only ASCII protocol") ; break ; case opt_bright : n = sscanf (optarg, "%d", &bright_on_dark) ; if (n == 0 || (bright_on_dark != 0 && bright_on_dark != 1)) ERR("bright_on_dark must be 0 or 1.") ; break ; case opt_dark : n = sscanf (optarg, "%d", &dark_on_bright) ; if (n == 0 || (dark_on_bright != 0 && dark_on_bright != 1)) ERR("dark_on_bright must be 0 or 1.") ; break ; /* .......................................................... */ case 0 : default : abort() ; } } /* check for parsing errors */ if (err) { fprintf(stderr, "%s: error: %s (%d)\n", argv [0], err_msg, err) ; exit (1) ; } /* parse other arguments (filenames) */ argc -= optind ; argv += optind ; /* make sure at least one file */ if (piv.active == 0 && frm.active == 0) { frm.active = 1 ; } if (verbose > 1) { printf("mser: frames output\n") ; printf("mser: active %d\n", frm.active ) ; printf("mser: pattern %s\n", frm.pattern) ; printf("mser: protocol %s\n", vl_string_protocol_name (frm.protocol)) ; printf("mser: seeds output\n") ; printf("mser: active %d\n", piv.active ) ; printf("mser: pattern %s\n", piv.pattern) ; printf("mser: protocol %s\n", vl_string_protocol_name (piv.protocol)) ; printf("mser: meta output\n") ; printf("mser: active %d\n", met.active ) ; printf("mser: pattern %s\n", met.pattern) ; printf("mser: protocol %s\n", vl_string_protocol_name (met.protocol)) ; } /* ------------------------------------------------------------------ * Process one image per time * --------------------------------------------------------------- */ while (argc--) { char basename [1024] ; char const *name = *argv++ ; VlMserFilt *filt = 0 ; VlMserFilt *filtinv = 0 ; vl_uint8 *data = 0 ; vl_uint8 *datainv = 0 ; VlPgmImage pim ; vl_uint const *regions ; vl_uint const *regionsinv ; float const *frames ; float const *framesinv ; enum {ndims = 2} ; int dims [ndims] ; int nregions = 0, nregionsinv = 0, nframes = 0, nframesinv =0; int i, j, dof ; vl_size q ; FILE *in = 0 ; /* Open files ------------------------------------------------ */ /* get basenmae from filename */ q = vl_string_basename (basename, sizeof(basename), name, 1) ; err = (q >= sizeof(basename)) ; if (err) { snprintf(err_msg, sizeof(err_msg), "Basename of '%s' is too long", name); err = VL_ERR_OVERFLOW ; goto done ; } if (verbose) { printf("mser: processing '%s'\n", name) ; } if (verbose > 1) { printf("mser: basename is '%s'\n", basename) ; } #define WERR(name) \ if (err == VL_ERR_OVERFLOW) { \ snprintf(err_msg, sizeof(err_msg), \ "Output file name too long.") ; \ goto done ; \ } else if (err) { \ snprintf(err_msg, sizeof(err_msg), \ "Could not open '%s' for writing.", name) ; \ goto done ; \ } /* open input file */ in = fopen (name, "rb") ; if (!in) { err = VL_ERR_IO ; snprintf(err_msg, sizeof(err_msg), "Could not open '%s' for reading.", name) ; goto done ; } /* open output files */ err = vl_file_meta_open (&piv, basename, "w") ; WERR(piv.name) ; err = vl_file_meta_open (&frm, basename, "w") ; WERR(frm.name) ; err = vl_file_meta_open (&met, basename, "w") ; WERR(met.name) ; if (verbose > 1) { if (piv.active) printf("mser: writing seeds to '%s'\n", piv.name); if (frm.active) printf("mser: writing frames to '%s'\n", frm.name); if (met.active) printf("mser: writing meta to '%s'\n", met.name); } /* Read image data -------------------------------------------- */ /* read source image header */ err = vl_pgm_extract_head (in, &pim) ; if (err) { err = VL_ERR_IO ; snprintf(err_msg, sizeof(err_msg), "PGM header corrputed.") ; goto done ; } if (verbose) { printf("mser: image is %" VL_FMT_SIZE " by %" VL_FMT_SIZE " pixels\n", pim. width, pim. height) ; } /* allocate buffer */ data = malloc(vl_pgm_get_npixels (&pim) * vl_pgm_get_bpp (&pim)) ; if (!data) { err = VL_ERR_ALLOC ; snprintf(err_msg, sizeof(err_msg), "Could not allocate enough memory.") ; goto done ; } /* read PGM */ err = vl_pgm_extract_data (in, &pim, data) ; if (err) { snprintf(err_msg, sizeof(err_msg), "PGM body corrputed.") ; goto done ; } /* Process data ---------------------------------------------- */ dims[0] = pim.width ; dims[1] = pim.height ; filt = vl_mser_new (ndims, dims) ; filtinv = vl_mser_new (ndims, dims) ; if (!filt || !filtinv) { snprintf(err_msg, sizeof(err_msg), "Could not create an MSER filter.") ; goto done ; } if (delta >= 0) vl_mser_set_delta (filt, (vl_mser_pix) delta) ; if (max_area >= 0) vl_mser_set_max_area (filt, max_area) ; if (min_area >= 0) vl_mser_set_min_area (filt, min_area) ; if (max_variation >= 0) vl_mser_set_max_variation (filt, max_variation) ; if (min_diversity >= 0) vl_mser_set_min_diversity (filt, min_diversity) ; if (delta >= 0) vl_mser_set_delta (filtinv, (vl_mser_pix) delta) ; if (max_area >= 0) vl_mser_set_max_area (filtinv, max_area) ; if (min_area >= 0) vl_mser_set_min_area (filtinv, min_area) ; if (max_variation >= 0) vl_mser_set_max_variation (filtinv, max_variation) ; if (min_diversity >= 0) vl_mser_set_min_diversity (filtinv, min_diversity) ; if (verbose) { printf("mser: parameters:\n") ; printf("mser: delta = %d\n", vl_mser_get_delta (filt)) ; printf("mser: max_area = %g\n", vl_mser_get_max_area (filt)) ; printf("mser: min_area = %g\n", vl_mser_get_min_area (filt)) ; printf("mser: max_variation = %g\n", vl_mser_get_max_variation (filt)) ; printf("mser: min_diversity = %g\n", vl_mser_get_min_diversity (filt)) ; } if (dark_on_bright) { vl_mser_process (filt, (vl_mser_pix*) data) ; /* Save result ----------------------------------------------- */ nregions = vl_mser_get_regions_num (filt) ; regions = vl_mser_get_regions (filt) ; if (piv.active) { for (i = 0 ; i < nregions ; ++i) { fprintf(piv.file, "%d ", regions [i]) ; } } if (frm.active) { vl_mser_ell_fit (filt) ; nframes = vl_mser_get_ell_num (filt) ; dof = vl_mser_get_ell_dof (filt) ; frames = vl_mser_get_ell (filt) ; for (i = 0 ; i < nframes ; ++i) { for (j = 0 ; j < dof ; ++j) { fprintf(frm.file, "%f ", *frames++) ; } fprintf(frm.file, "\n") ; } } } if (bright_on_dark) { /* allocate buffer */ datainv = malloc(vl_pgm_get_npixels (&pim) * vl_pgm_get_bpp (&pim)) ; for (i = 0; i < (signed)vl_pgm_get_npixels (&pim); i++) { datainv[i] = ~data[i]; /* 255 - data[i] */ } if (!datainv) { err = VL_ERR_ALLOC ; snprintf(err_msg, sizeof(err_msg), "Could not allocate enough memory.") ; goto done ; } vl_mser_process (filtinv, (vl_mser_pix*) datainv) ; /* Save result ----------------------------------------------- */ nregionsinv = vl_mser_get_regions_num (filtinv) ; regionsinv = vl_mser_get_regions (filtinv) ; if (piv.active) { for (i = 0 ; i < nregionsinv ; ++i) { fprintf(piv.file, "%d ", -regionsinv [i]) ; } } if (frm.active) { vl_mser_ell_fit (filtinv) ; nframesinv = vl_mser_get_ell_num (filtinv) ; dof = vl_mser_get_ell_dof (filtinv) ; framesinv = vl_mser_get_ell (filtinv) ; for (i = 0 ; i < nframesinv ; ++i) { for (j = 0 ; j < dof ; ++j) { fprintf(frm.file, "%f ", *framesinv++) ; } fprintf(frm.file, "\n") ; } } } if (met.active) { fprintf(met.file, "\n") ; } /* Next guy ----------------------------------------------- */ done : /* release filter */ if (filt) { vl_mser_delete (filt) ; filt = 0 ; } if (filtinv) { vl_mser_delete (filtinv) ; filtinv = 0 ; } /* release image data */ if (data) { free (data) ; data = 0 ; } if (datainv) { free (datainv) ; datainv = 0 ; } /* close files */ if (in) { fclose (in) ; in = 0 ; } vl_file_meta_close (&frm) ; vl_file_meta_close (&piv) ; vl_file_meta_close (&met) ; /* if bad print error message */ if (err) { fprintf (stderr, "mser: err: %s (%d)\n", err_msg, err) ; exit_code = 1 ; } } /* quit */ return exit_code ; } vlfeat/.gitignore0000644000175000017500000000124412237004745012742 0ustar dimadima# Mac OS X Finder .DS_Store # MEX files *.mexglx *.mexmac *.mexmaci *.mexmaci64 *.mexa64 *.mex # Python *.pyc # Other generated files and directories VERSION docsrc/version.html bin results doc build toolbox/mexw32 toolbox/mexmaci toolbox/mexmaci64 toolbox/mexmac toolbox/mexglx toolbox/mexa64 toolbox/mexw64 toolbox/mex toolbox/noprefix # Xcode vlfeat.xcodeproj/*.mode1 vlfeat.xcodeproj/*.mode1v3 vlfeat.xcodeproj/*.mode2v3 vlfeat.xcodeproj/*.pbxuser vlfeat.xcodeproj/*.perspective* vlfeat.xcodeproj/*.xcworkspace vlfeat.xcodeproj/xcuserdata # Visual C++ vlfeat.suo vlfeat.ncb vlfeat.vcproj.*.user vc/* # Emacs backups *~ # Vim swap files .*.swp # Opt directory opt/*vlfeat/vlfeat.xcodeproj/0000755000175000017500000000000012237004745014226 5ustar dimadimavlfeat/vlfeat.xcodeproj/project.pbxproj0000644000175000017500000045152112237004745017312 0ustar dimadima// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 2D0E8A7A1786D18D005419DC /* vl_vlad.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D141E2B178376CA00E2958B /* vl_vlad.c */; }; 2D0E8A7C1786D18D005419DC /* libvl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D1EECD21603E85200C63DCE /* libvl.dylib */; }; 2D117999178C1EA900311182 /* mathop_avx.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D117997178C1EA900311182 /* mathop_avx.c */; }; 2D11799A178C1EA900311182 /* mathop_avx.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D117998178C1EA900311182 /* mathop_avx.h */; }; 2D1BC0F6160DF170009E8DD3 /* covdet.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D1EED211604FE5900C63DCE /* covdet.c */; }; 2D1EECD61603E8E900C63DCE /* aib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D732E7E0CF8C2E40099B03C /* aib.c */; }; 2D1EECD71603E8E900C63DCE /* array.c in Sources */ = {isa = PBXBuildFile; fileRef = 2DFA36D212F1A26D00E808D9 /* array.c */; }; 2D1EECD81603E8E900C63DCE /* dsift.c in Sources */ = {isa = PBXBuildFile; fileRef = 2DE5B37D0FDC2BE9008CEB1D /* dsift.c */; }; 2D1EECD91603E8E900C63DCE /* generic.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D732E800CF8C2E40099B03C /* generic.c */; }; 2D1EECDA1603E8E900C63DCE /* getopt_long.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D732E820CF8C2E40099B03C /* getopt_long.c */; }; 2D1EECDB1603E8E900C63DCE /* hikmeans.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D732E840CF8C2E40099B03C /* hikmeans.c */; }; 2D1EECDC1603E8E900C63DCE /* hog.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D85DE1414CD78BB00BDAE4E /* hog.c */; }; 2D1EECDD1603E8E900C63DCE /* homkermap.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D519081115A800C0079E222 /* homkermap.c */; }; 2D1EECDE1603E8E900C63DCE /* host.c in Sources */ = {isa = PBXBuildFile; fileRef = 2DD99E900E59EA8E00CE1DA1 /* host.c */; }; 2D1EECDF1603E8E900C63DCE /* ikmeans.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D732E860CF8C2E40099B03C /* ikmeans.c */; }; 2D1EECE01603E8E900C63DCE /* imopv.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D72EAF00E48A42F005DAA47 /* imopv.c */; }; 2D1EECE11603E8E900C63DCE /* imopv_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 2DD99CC40E58A86B00CE1DA1 /* imopv_sse2.c */; }; 2D1EECE21603E8E900C63DCE /* kdtree.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D765BAD0FEC076700D08578 /* kdtree.c */; }; 2D1EECE31603E8E900C63DCE /* kmeans.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D4EB0BF10F3C1E800ADA534 /* kmeans.c */; }; 2D1EECE41603E8E900C63DCE /* lbp.c in Sources */ = {isa = PBXBuildFile; fileRef = 2DDA2307124BD104003F6A9D /* lbp.c */; }; 2D1EECE51603E8E900C63DCE /* mathop.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D732E8E0CF8C2E40099B03C /* mathop.c */; }; 2D1EECE61603E8E900C63DCE /* mathop_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D13EEE1100A511200C072E8 /* mathop_sse2.c */; }; 2D1EECE71603E8E900C63DCE /* mser.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D732E900CF8C2E40099B03C /* mser.c */; }; 2D1EECE91603E8E900C63DCE /* pgm.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D732E920CF8C2E40099B03C /* pgm.c */; }; 2D1EECEA1603E8E900C63DCE /* quickshift.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D765BAF0FEC076700D08578 /* quickshift.c */; }; 2D1EECEB1603E8E900C63DCE /* random.c in Sources */ = {isa = PBXBuildFile; fileRef = 2DD302780DE33107009443C7 /* random.c */; }; 2D1EECEC1603E8E900C63DCE /* rodrigues.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D732E940CF8C2E40099B03C /* rodrigues.c */; }; 2D1EECED1603E8E900C63DCE /* sift.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D732E960CF8C2E40099B03C /* sift.c */; }; 2D1EECEE1603E8E900C63DCE /* slic.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D94E6BC148E48440089ADA5 /* slic.c */; }; 2D1EECEF1603E8E900C63DCE /* stringop.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D732E980CF8C2E40099B03C /* stringop.c */; }; 2D1EECF01603E8E900C63DCE /* svmdataset.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D1EECCC1603E1B100C63DCE /* svmdataset.c */; }; 2D1EED1F1604992B00C63DCE /* scalespace.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D1EED1D1604992A00C63DCE /* scalespace.c */; }; 2D1EED201604992B00C63DCE /* scalespace.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D1EED1E1604992A00C63DCE /* scalespace.h */; }; 2D63C3A917969032001C6AE0 /* vl_liop.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D9A805D17745CB500B9A9CD /* vl_liop.c */; }; 2D81B9B11735666E000706C0 /* libvl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D1EECD21603E85200C63DCE /* libvl.dylib */; }; 2D81B9B717356697000706C0 /* vl_svmtrain.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D81B9A917351EE5000706C0 /* vl_svmtrain.c */; }; 2DA47BD41792E6C700EC02E0 /* libvl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D1EECD21603E85200C63DCE /* libvl.dylib */; }; 2DA64CD917329C2400276F3D /* fisher.c in Sources */ = {isa = PBXBuildFile; fileRef = 2DA64CD217329C2400276F3D /* fisher.c */; }; 2DA64CDA17329C2400276F3D /* fisher.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DA64CD317329C2400276F3D /* fisher.h */; }; 2DA64CDB17329C2400276F3D /* gmm.c in Sources */ = {isa = PBXBuildFile; fileRef = 2DA64CD417329C2400276F3D /* gmm.c */; }; 2DA64CDC17329C2400276F3D /* gmm.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DA64CD517329C2400276F3D /* gmm.h */; }; 2DA64CDD17329C2400276F3D /* svm.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DA64CD617329C2400276F3D /* svm.h */; }; 2DA64CDE17329C2400276F3D /* vlad.c in Sources */ = {isa = PBXBuildFile; fileRef = 2DA64CD717329C2400276F3D /* vlad.c */; }; 2DA64CDF17329C2400276F3D /* vlad.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DA64CD817329C2400276F3D /* vlad.h */; }; 2DA64CE11733089000276F3D /* svm.c in Sources */ = {isa = PBXBuildFile; fileRef = 2DA64CE01733089000276F3D /* svm.c */; }; 2DB3F05D1605ED2300862CCA /* vl_covdet.c in Sources */ = {isa = PBXBuildFile; fileRef = 2DB3F04F1605DFDB00862CCA /* vl_covdet.c */; }; 2DB3F06B1605F3A100862CCA /* libvl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D1EECD21603E85200C63DCE /* libvl.dylib */; }; 2DE607611785722900E1A24E /* libvl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D1EECD21603E85200C63DCE /* libvl.dylib */; }; 2DE607671785725200E1A24E /* vl_vlad.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D141E2B178376CA00E2958B /* vl_vlad.c */; }; 2DE7563D16D543A90016C1DC /* svm_dca.h.disabled in Headers */ = {isa = PBXBuildFile; fileRef = 2DE7563916D543A90016C1DC /* svm_dca.h.disabled */; }; 2DE7563F16D543A90016C1DC /* svm_sgd.h.disabled in Headers */ = {isa = PBXBuildFile; fileRef = 2DE7563B16D543A90016C1DC /* svm_sgd.h.disabled */; }; 2DFA2399173B7D0F0065603E /* libvl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D1EECD21603E85200C63DCE /* libvl.dylib */; }; 2DFA23A1173B7E730065603E /* vl_gmm.c in Sources */ = {isa = PBXBuildFile; fileRef = 2DFA239F173B7DFB0065603E /* vl_gmm.c */; }; 2DFA23A4173B7F1C0065603E /* liop.c in Sources */ = {isa = PBXBuildFile; fileRef = 2DFA23A2173B7F1C0065603E /* liop.c */; }; 2DFA23A5173B7F1C0065603E /* liop.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DFA23A3173B7F1C0065603E /* liop.h */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 2D0E6C4B1003E0DF00F0864E /* float.th */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = float.th; sourceTree = ""; }; 2D0E8A811786D18D005419DC /* vl_fisher.mexmaci64 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = vl_fisher.mexmaci64; sourceTree = BUILT_PRODUCTS_DIR; }; 2D10471316D54C45001677AD /* vl_test_aib.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_aib.m; path = toolbox/xtest/vl_test_aib.m; sourceTree = ""; }; 2D10471416D54C45001677AD /* vl_test_alldist2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_alldist2.m; path = toolbox/xtest/vl_test_alldist2.m; sourceTree = ""; }; 2D10471516D54C45001677AD /* vl_test_alphanum.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_alphanum.m; path = toolbox/xtest/vl_test_alphanum.m; sourceTree = ""; }; 2D10471616D54C45001677AD /* vl_test_colsubset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_colsubset.m; path = toolbox/xtest/vl_test_colsubset.m; sourceTree = ""; }; 2D10471716D54C45001677AD /* vl_test_cummax.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_cummax.m; path = toolbox/xtest/vl_test_cummax.m; sourceTree = ""; }; 2D10471816D54C45001677AD /* vl_test_hikmeans.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_hikmeans.m; path = toolbox/xtest/vl_test_hikmeans.m; sourceTree = ""; }; 2D10471916D54C45001677AD /* vl_test_hog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_hog.m; path = toolbox/xtest/vl_test_hog.m; sourceTree = ""; }; 2D10471A16D54C45001677AD /* vl_test_ihashsum.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_ihashsum.m; path = toolbox/xtest/vl_test_ihashsum.m; sourceTree = ""; }; 2D10471B16D54C45001677AD /* vl_test_ikmeans.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_ikmeans.m; path = toolbox/xtest/vl_test_ikmeans.m; sourceTree = ""; }; 2D10471C16D54C45001677AD /* vl_test_inthist.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_inthist.m; path = toolbox/xtest/vl_test_inthist.m; sourceTree = ""; }; 2D10471D16D54C45001677AD /* vl_test_maketrainingset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_maketrainingset.m; path = toolbox/xtest/vl_test_maketrainingset.m; sourceTree = ""; }; 2D10471E16D54C45001677AD /* vl_test_mser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_mser.m; path = toolbox/xtest/vl_test_mser.m; sourceTree = ""; }; 2D10471F16D54C45001677AD /* vl_test_pr.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_pr.m; path = toolbox/xtest/vl_test_pr.m; sourceTree = ""; }; 2D10472016D54C45001677AD /* vl_test_roc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_roc.m; path = toolbox/xtest/vl_test_roc.m; sourceTree = ""; }; 2D10472116D54C45001677AD /* vl_test_slic.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_slic.m; path = toolbox/xtest/vl_test_slic.m; sourceTree = ""; }; 2D117997178C1EA900311182 /* mathop_avx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mathop_avx.c; sourceTree = ""; }; 2D117998178C1EA900311182 /* mathop_avx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mathop_avx.h; sourceTree = ""; }; 2D13EEE1100A511200C072E8 /* mathop_sse2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mathop_sse2.c; sourceTree = ""; }; 2D13EEE4100A539200C072E8 /* mathop_sse2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mathop_sse2.h; sourceTree = ""; }; 2D13EEF8100A5CFE00C072E8 /* test_vec_comp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = test_vec_comp.c; sourceTree = ""; }; 2D13F028100A6E8800C072E8 /* vl_alldist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_alldist.c; path = toolbox/misc/vl_alldist.c; sourceTree = ""; }; 2D141E1F178376CA00E2958B /* vl_demo_gmm_3d.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_demo_gmm_3d.m; path = toolbox/demo/vl_demo_gmm_3d.m; sourceTree = ""; }; 2D141E20178376CA00E2958B /* vl_fisher.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_fisher.c; path = toolbox/fisher/vl_fisher.c; sourceTree = ""; }; 2D141E21178376CA00E2958B /* vl_demo_gmm_2d_twist.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_demo_gmm_2d_twist.m; path = toolbox/demo/vl_demo_gmm_2d_twist.m; sourceTree = ""; }; 2D141E22178376CA00E2958B /* vl_demo_kmeans_ann_speed.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_demo_kmeans_ann_speed.m; path = toolbox/demo/vl_demo_kmeans_ann_speed.m; sourceTree = ""; }; 2D141E23178376CA00E2958B /* vl_demo_svm.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_demo_svm.m; path = toolbox/demo/vl_demo_svm.m; sourceTree = ""; }; 2D141E24178376CA00E2958B /* vl_test_svmtrain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_svmtrain.m; path = toolbox/xtest/vl_test_svmtrain.m; sourceTree = ""; }; 2D141E25178376CA00E2958B /* vl_fisher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_fisher.m; path = toolbox/fisher/vl_fisher.m; sourceTree = ""; }; 2D141E26178376CA00E2958B /* vl_frame2oell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_frame2oell.m; path = toolbox/sift/vl_frame2oell.m; sourceTree = ""; }; 2D141E27178376CA00E2958B /* vl_threads.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_threads.m; path = toolbox/misc/vl_threads.m; sourceTree = ""; }; 2D141E28178376CA00E2958B /* vl_svmdataset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_svmdataset.m; path = toolbox/misc/vl_svmdataset.m; sourceTree = ""; }; 2D141E29178376CA00E2958B /* vl_test_printsize.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_printsize.m; path = toolbox/xtest/vl_test_printsize.m; sourceTree = ""; }; 2D141E2B178376CA00E2958B /* vl_vlad.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_vlad.c; path = toolbox/vlad/vl_vlad.c; sourceTree = ""; }; 2D141E2C178376CA00E2958B /* vl_cummax.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_cummax.m; path = toolbox/misc/vl_cummax.m; sourceTree = ""; }; 2D141E2D178376CA00E2958B /* vl_demo_plots_rank.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_demo_plots_rank.m; path = toolbox/demo/vl_demo_plots_rank.m; sourceTree = ""; }; 2D141E2E178376CA00E2958B /* vl_demo_slic.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_demo_slic.m; path = toolbox/demo/vl_demo_slic.m; sourceTree = ""; }; 2D141E2F178376CA00E2958B /* vl_imreadbw.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_imreadbw.m; path = toolbox/imop/vl_imreadbw.m; sourceTree = ""; }; 2D141E30178376CA00E2958B /* vl_demo_covdet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_demo_covdet.m; path = toolbox/demo/vl_demo_covdet.m; sourceTree = ""; }; 2D141E31178376CA00E2958B /* vl_plotstyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_plotstyle.m; path = toolbox/plotop/vl_plotstyle.m; sourceTree = ""; }; 2D141E32178376CA00E2958B /* vl_ikmeans.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_ikmeans.c; path = toolbox/kmeans/vl_ikmeans.c; sourceTree = ""; }; 2D141E33178376CA00E2958B /* vl_det.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_det.m; path = toolbox/plotop/vl_det.m; sourceTree = ""; }; 2D1EECCC1603E1B100C63DCE /* svmdataset.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = svmdataset.c; sourceTree = ""; }; 2D1EECCD1603E1B100C63DCE /* svmdataset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = svmdataset.h; sourceTree = ""; }; 2D1EECD21603E85200C63DCE /* libvl.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libvl.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 2D1EECF116046F1B00C63DCE /* vl_maketrainingset.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_maketrainingset.c; path = toolbox/misc/vl_maketrainingset.c; sourceTree = ""; }; 2D1EECF416046F1B00C63DCE /* vl_ihashsum.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_ihashsum.c; path = toolbox/misc/vl_ihashsum.c; sourceTree = ""; }; 2D1EECF716046F1B00C63DCE /* vl_aib.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_aib.c; path = toolbox/aib/vl_aib.c; sourceTree = ""; }; 2D1EECF916046F1B00C63DCE /* vl_ihashfind.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_ihashfind.c; path = toolbox/misc/vl_ihashfind.c; sourceTree = ""; }; 2D1EECFA16046F1B00C63DCE /* vl_kmeans.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_kmeans.c; path = toolbox/kmeans/vl_kmeans.c; sourceTree = ""; }; 2D1EECFB16046F1C00C63DCE /* vl_sift.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_sift.c; path = toolbox/sift/vl_sift.c; sourceTree = ""; }; 2D1EECFE16046F1C00C63DCE /* vl_alldist.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_alldist.c; path = toolbox/misc/vl_alldist.c; sourceTree = ""; }; 2D1EED0016046F1C00C63DCE /* vl_binsearch.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_binsearch.c; path = toolbox/misc/vl_binsearch.c; sourceTree = ""; }; 2D1EED0216046F1C00C63DCE /* vl_cummax.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_cummax.c; path = toolbox/misc/vl_cummax.c; sourceTree = ""; }; 2D1EED0316046F1C00C63DCE /* vl_dsift.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_dsift.c; path = toolbox/sift/vl_dsift.c; sourceTree = ""; }; 2D1EED0516046F1C00C63DCE /* vl_getpid.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_getpid.c; path = toolbox/misc/vl_getpid.c; sourceTree = ""; }; 2D1EED0616046F1C00C63DCE /* vl_hikmeans.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_hikmeans.c; path = toolbox/kmeans/vl_hikmeans.c; sourceTree = ""; }; 2D1EED0716046F1C00C63DCE /* vl_hikmeanspush.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_hikmeanspush.c; path = toolbox/kmeans/vl_hikmeanspush.c; sourceTree = ""; }; 2D1EED0B16046F1C00C63DCE /* vl_imdisttf.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_imdisttf.c; path = toolbox/imop/vl_imdisttf.c; sourceTree = ""; }; 2D1EED0C16046F1C00C63DCE /* vl_imintegral.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_imintegral.c; path = toolbox/imop/vl_imintegral.c; sourceTree = ""; }; 2D1EED0D16046F1C00C63DCE /* vl_imsmooth.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_imsmooth.c; path = toolbox/imop/vl_imsmooth.c; sourceTree = ""; }; 2D1EED1116046F1C00C63DCE /* vl_kdtreebuild.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_kdtreebuild.c; path = toolbox/misc/vl_kdtreebuild.c; sourceTree = ""; }; 2D1EED1216046F1C00C63DCE /* vl_kdtreequery.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_kdtreequery.c; path = toolbox/misc/vl_kdtreequery.c; sourceTree = ""; }; 2D1EED1816046F1C00C63DCE /* vl_simdctrl.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_simdctrl.c; path = toolbox/misc/vl_simdctrl.c; sourceTree = ""; }; 2D1EED1916046F1C00C63DCE /* vl_tpsumx.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_tpsumx.c; path = toolbox/imop/vl_tpsumx.c; sourceTree = ""; }; 2D1EED1A16046F1C00C63DCE /* vl_twister.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vl_twister.c; path = toolbox/misc/vl_twister.c; sourceTree = ""; }; 2D1EED1D1604992A00C63DCE /* scalespace.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = scalespace.c; sourceTree = ""; }; 2D1EED1E1604992A00C63DCE /* scalespace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalespace.h; sourceTree = ""; }; 2D1EED211604FE5900C63DCE /* covdet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = covdet.c; sourceTree = ""; }; 2D1EED221604FE5900C63DCE /* covdet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = covdet.h; sourceTree = ""; }; 2D27614810FF6B3900D14D9E /* vl_imdisttf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_imdisttf.c; path = toolbox/imop/vl_imdisttf.c; sourceTree = ""; }; 2D289FFB16D53FC200E81844 /* svms_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = svms_common.h; path = toolbox/misc/svms_common.h; sourceTree = ""; }; 2D289FFC16D53FC200E81844 /* vl_maketrainingset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_maketrainingset.m; path = toolbox/misc/vl_maketrainingset.m; sourceTree = ""; }; 2D28A00816D5435E00E81844 /* vl_lbp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_lbp.c; path = toolbox/misc/vl_lbp.c; sourceTree = ""; }; 2D29DD661608F12B00E74DF3 /* test_gauss_elimination.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = test_gauss_elimination.c; sourceTree = ""; }; 2D3E1F2C15FE93480035AA1E /* license.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = license.html; path = docsrc/license.html; sourceTree = ""; }; 2D3E1F2D15FE93480035AA1E /* plots-rank.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = "plots-rank.html"; path = "docsrc/plots-rank.html"; sourceTree = ""; }; 2D3E1F2E15FE93480035AA1E /* vlfeat.bib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = vlfeat.bib; path = docsrc/vlfeat.bib; sourceTree = ""; }; 2D3E1F2F15FFE6110035AA1E /* vl_hog.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_hog.m; path = toolbox/misc/vl_hog.m; sourceTree = ""; }; 2D3F063417838CF100B27808 /* vl_slic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_slic.c; path = toolbox/slic/vl_slic.c; sourceTree = ""; }; 2D471AA710DD2C7900FA4182 /* test_threads.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = test_threads.c; sourceTree = ""; }; 2D4EB0BF10F3C1E800ADA534 /* kmeans.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = kmeans.c; sourceTree = ""; }; 2D4EB0C010F3C1E800ADA534 /* kmeans.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kmeans.h; sourceTree = ""; }; 2D4EB14D10F3F3A500ADA534 /* shuffle-def.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "shuffle-def.h"; sourceTree = ""; }; 2D519080115A800C0079E222 /* homkermap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = homkermap.h; sourceTree = ""; }; 2D519081115A800C0079E222 /* homkermap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = homkermap.c; sourceTree = ""; }; 2D6007FF1115C1FA0020963C /* check.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = check.h; sourceTree = ""; }; 2D6102D0111EE22C00470F4C /* bin.mak */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; indentWidth = 8; path = bin.mak; sourceTree = ""; tabWidth = 8; }; 2D6102D1111EE22C00470F4C /* dist.mak */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; indentWidth = 8; path = dist.mak; sourceTree = ""; tabWidth = 8; }; 2D6102D2111EE22C00470F4C /* dll.mak */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; indentWidth = 8; path = dll.mak; sourceTree = ""; tabWidth = 8; }; 2D6102D3111EE22C00470F4C /* doc.mak */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; indentWidth = 8; path = doc.mak; sourceTree = ""; tabWidth = 8; }; 2D6102D4111EE22C00470F4C /* matlab.mak */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; indentWidth = 8; path = matlab.mak; sourceTree = ""; tabWidth = 8; }; 2D6102D5111EE22C00470F4C /* octave.mak */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; indentWidth = 8; path = octave.mak; sourceTree = ""; tabWidth = 8; }; 2D624AD60FF9306700DB3122 /* test_heap-def.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "test_heap-def.c"; sourceTree = ""; }; 2D66AC5D13AE05BD0060594E /* vl_aib.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_aib.m; path = toolbox/aib/vl_aib.m; sourceTree = ""; }; 2D66AC5E13AE05BD0060594E /* vl_aibcut.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_aibcut.m; path = toolbox/aib/vl_aibcut.m; sourceTree = ""; }; 2D66AC5F13AE05BD0060594E /* vl_aibcuthist.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_aibcuthist.m; path = toolbox/aib/vl_aibcuthist.m; sourceTree = ""; }; 2D66AC6013AE05BD0060594E /* vl_aibcutpush.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_aibcutpush.m; path = toolbox/aib/vl_aibcutpush.m; sourceTree = ""; }; 2D66AC6113AE05BD0060594E /* vl_aibhist.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_aibhist.m; path = toolbox/aib/vl_aibhist.m; sourceTree = ""; }; 2D66AC6213AE05BD0060594E /* vl_alldist2.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_alldist2.m; path = toolbox/misc/vl_alldist2.m; sourceTree = ""; }; 2D66AC6313AE05BD0060594E /* vl_argparse.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_argparse.m; path = toolbox/misc/vl_argparse.m; sourceTree = ""; }; 2D66AC6413AE05BD0060594E /* vl_assert_almost_equal.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_assert_almost_equal.m; path = toolbox/xtest/vl_assert_almost_equal.m; sourceTree = ""; }; 2D66AC6513AE05BD0060594E /* vl_assert_equal.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_assert_equal.m; path = toolbox/xtest/vl_assert_equal.m; sourceTree = ""; }; 2D66AC6613AE05BD0060594E /* vl_assert_exception.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_assert_exception.m; path = toolbox/xtest/vl_assert_exception.m; sourceTree = ""; }; 2D66AC6713AE05BD0060594E /* vl_binsearch.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_binsearch.m; path = toolbox/misc/vl_binsearch.m; sourceTree = ""; }; 2D66AC6813AE05BD0060594E /* vl_binsum.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_binsum.m; path = toolbox/misc/vl_binsum.m; sourceTree = ""; }; 2D66AC6913AE05BD0060594E /* vl_cf.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_cf.m; path = toolbox/plotop/vl_cf.m; sourceTree = ""; }; 2D66AC6A13AE05BD0060594E /* vl_click.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_click.m; path = toolbox/plotop/vl_click.m; sourceTree = ""; }; 2D66AC6B13AE05BD0060594E /* vl_clickpoint.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_clickpoint.m; path = toolbox/plotop/vl_clickpoint.m; sourceTree = ""; }; 2D66AC6C13AE05BD0060594E /* vl_clicksegment.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_clicksegment.m; path = toolbox/plotop/vl_clicksegment.m; sourceTree = ""; }; 2D66AC6D13AE05BD0060594E /* vl_colsubset.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_colsubset.m; path = toolbox/misc/vl_colsubset.m; sourceTree = ""; }; 2D66AC6E13AE05BD0060594E /* vl_compile.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_compile.m; path = toolbox/vl_compile.m; sourceTree = ""; }; 2D66AC6F13AE05BD0060594E /* vl_ddgaussian.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_ddgaussian.m; path = toolbox/special/vl_ddgaussian.m; sourceTree = ""; }; 2D66AC7013AE05BD0060594E /* vl_demo_aib.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_aib.m; path = toolbox/demo/vl_demo_aib.m; sourceTree = ""; }; 2D66AC7113AE05BD0060594E /* vl_demo_alldist.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_alldist.m; path = toolbox/demo/vl_demo_alldist.m; sourceTree = ""; }; 2D66AC7213AE05BD0060594E /* vl_demo_cmd.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_cmd.m; path = toolbox/demo/vl_demo_cmd.m; sourceTree = ""; }; 2D66AC7313AE05BD0060594E /* vl_demo_dsift.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_dsift.m; path = toolbox/demo/vl_demo_dsift.m; sourceTree = ""; }; 2D66AC7413AE05BD0060594E /* vl_demo_imdisttf.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_imdisttf.m; path = toolbox/demo/vl_demo_imdisttf.m; sourceTree = ""; }; 2D66AC7513AE05BD0060594E /* vl_demo_kdtree_ann.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_kdtree_ann.m; path = toolbox/demo/vl_demo_kdtree_ann.m; sourceTree = ""; }; 2D66AC7613AE05BD0060594E /* vl_demo_kdtree_forest.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_kdtree_forest.m; path = toolbox/demo/vl_demo_kdtree_forest.m; sourceTree = ""; }; 2D66AC7713AE05BD0060594E /* vl_demo_kdtree_plot.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_kdtree_plot.m; path = toolbox/demo/vl_demo_kdtree_plot.m; sourceTree = ""; }; 2D66AC7813AE05BD0060594E /* vl_demo_kdtree_self.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_kdtree_self.m; path = toolbox/demo/vl_demo_kdtree_self.m; sourceTree = ""; }; 2D66AC7913AE05BD0060594E /* vl_demo_kdtree_sift.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_kdtree_sift.m; path = toolbox/demo/vl_demo_kdtree_sift.m; sourceTree = ""; }; 2D66AC7A13AE05BD0060594E /* vl_demo_kdtree.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_kdtree.m; path = toolbox/demo/vl_demo_kdtree.m; sourceTree = ""; }; 2D66AC7B13AE05BD0060594E /* vl_demo_kmeans_init.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_kmeans_init.m; path = toolbox/demo/vl_demo_kmeans_init.m; sourceTree = ""; }; 2D66AC7C13AE05BD0060594E /* vl_demo_kmeans_vs_builtin.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_kmeans_vs_builtin.m; path = toolbox/demo/vl_demo_kmeans_vs_builtin.m; sourceTree = ""; }; 2D66AC7D13AE05BD0060594E /* vl_demo_mser_basic.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_mser_basic.m; path = toolbox/demo/vl_demo_mser_basic.m; sourceTree = ""; }; 2D66AC7E13AE05BD0060594E /* vl_demo_mser_cmd.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_mser_cmd.m; path = toolbox/demo/vl_demo_mser_cmd.m; sourceTree = ""; }; 2D66AC7F13AE05BD0060594E /* vl_demo_mser_delta.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_mser_delta.m; path = toolbox/demo/vl_demo_mser_delta.m; sourceTree = ""; }; 2D66AC8013AE05BD0060594E /* vl_demo_print.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_print.m; path = toolbox/demo/vl_demo_print.m; sourceTree = ""; }; 2D66AC8113AE05BD0060594E /* vl_demo_quickshift.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_quickshift.m; path = toolbox/demo/vl_demo_quickshift.m; sourceTree = ""; }; 2D66AC8213AE05BD0060594E /* vl_demo_sift_basic.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_sift_basic.m; path = toolbox/demo/vl_demo_sift_basic.m; sourceTree = ""; }; 2D66AC8313AE05BD0060594E /* vl_demo_sift_cmd.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_sift_cmd.m; path = toolbox/demo/vl_demo_sift_cmd.m; sourceTree = ""; }; 2D66AC8413AE05BD0060594E /* vl_demo_sift_edge.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_sift_edge.m; path = toolbox/demo/vl_demo_sift_edge.m; sourceTree = ""; }; 2D66AC8513AE05BD0060594E /* vl_demo_sift_match.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_sift_match.m; path = toolbox/demo/vl_demo_sift_match.m; sourceTree = ""; }; 2D66AC8613AE05BD0060594E /* vl_demo_sift_or.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_sift_or.m; path = toolbox/demo/vl_demo_sift_or.m; sourceTree = ""; }; 2D66AC8713AE05BD0060594E /* vl_demo_sift_peak.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_sift_peak.m; path = toolbox/demo/vl_demo_sift_peak.m; sourceTree = ""; }; 2D66AC8813AE05BD0060594E /* vl_demo_sift_vs_ubc.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo_sift_vs_ubc.m; path = toolbox/demo/vl_demo_sift_vs_ubc.m; sourceTree = ""; }; 2D66AC8913AE05BD0060594E /* vl_demo.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_demo.m; path = toolbox/vl_demo.m; sourceTree = ""; }; 2D66AC8A13AE05BD0060594E /* vl_dgaussian.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_dgaussian.m; path = toolbox/special/vl_dgaussian.m; sourceTree = ""; }; 2D66AC8B13AE05BD0060594E /* vl_dsift.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_dsift.m; path = toolbox/sift/vl_dsift.m; sourceTree = ""; }; 2D66AC8C13AE05BD0060594E /* vl_dsigmoid.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_dsigmoid.m; path = toolbox/special/vl_dsigmoid.m; sourceTree = ""; }; 2D66AC8D13AE05BD0060594E /* vl_dwaffine.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_dwaffine.m; path = toolbox/imop/vl_dwaffine.m; sourceTree = ""; }; 2D66AC8E13AE05BD0060594E /* vl_erfill.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_erfill.m; path = toolbox/mser/vl_erfill.m; sourceTree = ""; }; 2D66AC8F13AE05BD0060594E /* vl_ertr.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_ertr.m; path = toolbox/mser/vl_ertr.m; sourceTree = ""; }; 2D66AC9013AE05BD0060594E /* vl_figaspect.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_figaspect.m; path = toolbox/plotop/vl_figaspect.m; sourceTree = ""; }; 2D66AC9113AE05BD0060594E /* vl_flatmap.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_flatmap.m; path = toolbox/quickshift/vl_flatmap.m; sourceTree = ""; }; 2D66AC9213AE05BD0060594E /* vl_gaussian.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_gaussian.m; path = toolbox/special/vl_gaussian.m; sourceTree = ""; }; 2D66AC9313AE05BD0060594E /* vl_getpid.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_getpid.m; path = toolbox/misc/vl_getpid.m; sourceTree = ""; }; 2D66AC9413AE05BD0060594E /* vl_grad.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_grad.m; path = toolbox/misc/vl_grad.m; sourceTree = ""; }; 2D66AC9513AE05BD0060594E /* vl_harris.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_harris.m; path = toolbox/vl_harris.m; sourceTree = ""; }; 2D66AC9613AE05BD0060594E /* vl_hat.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_hat.m; path = toolbox/geometry/vl_hat.m; sourceTree = ""; }; 2D66AC9713AE05BD0060594E /* vl_help.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_help.m; path = toolbox/vl_help.m; sourceTree = ""; }; 2D66AC9813AE05BD0060594E /* vl_hikmeans.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_hikmeans.m; path = toolbox/kmeans/vl_hikmeans.m; sourceTree = ""; }; 2D66AC9913AE05BD0060594E /* vl_hikmeanshist.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_hikmeanshist.m; path = toolbox/kmeans/vl_hikmeanshist.m; sourceTree = ""; }; 2D66AC9A13AE05BD0060594E /* vl_hikmeanspush.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_hikmeanspush.m; path = toolbox/kmeans/vl_hikmeanspush.m; sourceTree = ""; }; 2D66AC9B13AE05BD0060594E /* vl_histmarg.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_histmarg.m; path = toolbox/misc/vl_histmarg.m; sourceTree = ""; }; 2D66AC9C13AE05BD0060594E /* vl_homkermap.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_homkermap.m; path = toolbox/misc/vl_homkermap.m; sourceTree = ""; }; 2D66AC9D13AE05BD0060594E /* vl_ihashfind.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_ihashfind.m; path = toolbox/misc/vl_ihashfind.m; sourceTree = ""; }; 2D66AC9E13AE05BD0060594E /* vl_ihashsum.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_ihashsum.m; path = toolbox/misc/vl_ihashsum.m; sourceTree = ""; }; 2D66AC9F13AE05BD0060594E /* vl_ihat.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_ihat.m; path = toolbox/geometry/vl_ihat.m; sourceTree = ""; }; 2D66ACA013AE05BD0060594E /* vl_ikmeans.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_ikmeans.m; path = toolbox/kmeans/vl_ikmeans.m; sourceTree = ""; }; 2D66ACA113AE05BD0060594E /* vl_ikmeanshist.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_ikmeanshist.m; path = toolbox/kmeans/vl_ikmeanshist.m; sourceTree = ""; }; 2D66ACA213AE05BD0060594E /* vl_ikmeanspush.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_ikmeanspush.m; path = toolbox/kmeans/vl_ikmeanspush.m; sourceTree = ""; }; 2D66ACA313AE05BD0060594E /* vl_imarray.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_imarray.m; path = toolbox/imop/vl_imarray.m; sourceTree = ""; }; 2D66ACA413AE05BD0060594E /* vl_imarraysc.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_imarraysc.m; path = toolbox/imop/vl_imarraysc.m; sourceTree = ""; }; 2D66ACA513AE05BD0060594E /* vl_imdisttf.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_imdisttf.m; path = toolbox/imop/vl_imdisttf.m; sourceTree = ""; }; 2D66ACA613AE05BD0060594E /* vl_imdown.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_imdown.m; path = toolbox/imop/vl_imdown.m; sourceTree = ""; }; 2D66ACA713AE05BD0060594E /* vl_imgrad.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_imgrad.m; path = toolbox/imop/vl_imgrad.m; sourceTree = ""; }; 2D66ACA813AE05BD0060594E /* vl_imintegral.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_imintegral.m; path = toolbox/imop/vl_imintegral.m; sourceTree = ""; }; 2D66ACA913AE05BD0060594E /* vl_imreadgray.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_imreadgray.m; path = toolbox/imop/vl_imreadgray.m; sourceTree = ""; }; 2D66ACAA13AE05BD0060594E /* vl_imsc.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_imsc.m; path = toolbox/imop/vl_imsc.m; sourceTree = ""; }; 2D66ACAB13AE05BD0060594E /* vl_imseg.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_imseg.m; path = toolbox/quickshift/vl_imseg.m; sourceTree = ""; }; 2D66ACAC13AE05BD0060594E /* vl_imsmooth.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_imsmooth.m; path = toolbox/imop/vl_imsmooth.m; sourceTree = ""; }; 2D66ACAE13AE05BD0060594E /* vl_imup.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_imup.m; path = toolbox/imop/vl_imup.m; sourceTree = ""; }; 2D66ACAF13AE05BD0060594E /* vl_imwbackward.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_imwbackward.m; path = toolbox/imop/vl_imwbackward.m; sourceTree = ""; }; 2D66ACB013AE05BD0060594E /* vl_imwhiten.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_imwhiten.m; path = toolbox/imop/vl_imwhiten.m; sourceTree = ""; }; 2D66ACB113AE05BD0060594E /* vl_inthist.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_inthist.m; path = toolbox/misc/vl_inthist.m; sourceTree = ""; }; 2D66ACB213AE05BD0060594E /* vl_irodr.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_irodr.m; path = toolbox/geometry/vl_irodr.m; sourceTree = ""; }; 2D66ACB313AE05BD0060594E /* vl_kdtreebuild.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_kdtreebuild.m; path = toolbox/misc/vl_kdtreebuild.m; sourceTree = ""; }; 2D66ACB413AE05BD0060594E /* vl_kdtreequery.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_kdtreequery.m; path = toolbox/misc/vl_kdtreequery.m; sourceTree = ""; }; 2D66ACB513AE05BD0060594E /* vl_kmeans.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_kmeans.m; path = toolbox/kmeans/vl_kmeans.m; sourceTree = ""; }; 2D66ACB613AE05BD0060594E /* vl_lbp.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_lbp.m; path = toolbox/misc/vl_lbp.m; sourceTree = ""; }; 2D66ACB713AE05BD0060594E /* vl_lbpfliplr.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_lbpfliplr.m; path = toolbox/misc/vl_lbpfliplr.m; sourceTree = ""; }; 2D66ACB813AE05BD0060594E /* vl_linespec2prop.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_linespec2prop.m; path = toolbox/plotop/vl_linespec2prop.m; sourceTree = ""; }; 2D66ACB913AE05BD0060594E /* vl_localmax.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_localmax.m; path = toolbox/misc/vl_localmax.m; sourceTree = ""; }; 2D66ACBA13AE05BD0060594E /* vl_mser.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_mser.m; path = toolbox/mser/vl_mser.m; sourceTree = ""; }; 2D66ACBB13AE05BD0060594E /* vl_noprefix.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_noprefix.m; path = toolbox/vl_noprefix.m; sourceTree = ""; }; 2D66ACBC13AE05BD0060594E /* vl_numder.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_numder.m; path = toolbox/misc/vl_numder.m; sourceTree = ""; }; 2D66ACBD13AE05BD0060594E /* vl_numder2.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_numder2.m; path = toolbox/misc/vl_numder2.m; sourceTree = ""; }; 2D66ACBE13AE05BD0060594E /* vl_override.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_override.m; path = toolbox/misc/vl_override.m; sourceTree = ""; }; 2D66ACC013AE05BD0060594E /* vl_phow.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_phow.m; path = toolbox/sift/vl_phow.m; sourceTree = ""; }; 2D66ACC113AE05BD0060594E /* vl_plotframe.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_plotframe.m; path = toolbox/plotop/vl_plotframe.m; sourceTree = ""; }; 2D66ACC213AE05BD0060594E /* vl_plotgrid.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_plotgrid.m; path = toolbox/plotop/vl_plotgrid.m; sourceTree = ""; }; 2D66ACC313AE05BD0060594E /* vl_plotpoint.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_plotpoint.m; path = toolbox/plotop/vl_plotpoint.m; sourceTree = ""; }; 2D66ACC413AE05BD0060594E /* vl_plotsiftdescriptor.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_plotsiftdescriptor.m; path = toolbox/sift/vl_plotsiftdescriptor.m; sourceTree = ""; }; 2D66ACC513AE05BD0060594E /* vl_pr.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_pr.m; path = toolbox/plotop/vl_pr.m; sourceTree = ""; }; 2D66ACC613AE05BD0060594E /* vl_printsize.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_printsize.m; path = toolbox/plotop/vl_printsize.m; sourceTree = ""; }; 2D66ACC713AE05BD0060594E /* vl_quickseg.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_quickseg.m; path = toolbox/quickshift/vl_quickseg.m; sourceTree = ""; }; 2D66ACC813AE05BD0060594E /* vl_quickshift.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_quickshift.m; path = toolbox/quickshift/vl_quickshift.m; sourceTree = ""; }; 2D66ACC913AE05BD0060594E /* vl_quickvis.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_quickvis.m; path = toolbox/quickshift/vl_quickvis.m; sourceTree = ""; }; 2D66ACCA13AE05BD0060594E /* vl_rcos.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_rcos.m; path = toolbox/special/vl_rcos.m; sourceTree = ""; }; 2D66ACCB13AE05BD0060594E /* vl_rgb2xyz.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_rgb2xyz.m; path = toolbox/imop/vl_rgb2xyz.m; sourceTree = ""; }; 2D66ACCC13AE05BD0060594E /* vl_roc.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_roc.m; path = toolbox/plotop/vl_roc.m; sourceTree = ""; }; 2D66ACCD13AE05BD0060594E /* vl_rodr.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_rodr.m; path = toolbox/geometry/vl_rodr.m; sourceTree = ""; }; 2D66ACCE13AE05BD0060594E /* vl_root.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_root.m; path = toolbox/vl_root.m; sourceTree = ""; }; 2D66ACCF13AE05BD0060594E /* vl_sampleinthist.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_sampleinthist.m; path = toolbox/misc/vl_sampleinthist.m; sourceTree = ""; }; 2D66ACD013AE05BD0060594E /* vl_setup.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_setup.m; path = toolbox/vl_setup.m; sourceTree = ""; }; 2D66ACD113AE05BD0060594E /* vl_sift.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_sift.m; path = toolbox/sift/vl_sift.m; sourceTree = ""; }; 2D66ACD213AE05BD0060594E /* vl_siftdescriptor.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_siftdescriptor.m; path = toolbox/sift/vl_siftdescriptor.m; sourceTree = ""; }; 2D66ACD313AE05BD0060594E /* vl_sigmoid.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_sigmoid.m; path = toolbox/special/vl_sigmoid.m; sourceTree = ""; }; 2D66ACD413AE05BD0060594E /* vl_simdctrl.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_simdctrl.m; path = toolbox/misc/vl_simdctrl.m; sourceTree = ""; }; 2D66ACD613AE05BD0060594E /* vl_test_alldist.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_alldist.m; path = toolbox/xtest/vl_test_alldist.m; sourceTree = ""; }; 2D66ACD913AE05BD0060594E /* vl_test_argparse.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_argparse.m; path = toolbox/xtest/vl_test_argparse.m; sourceTree = ""; }; 2D66ACDB13AE05BD0060594E /* vl_test_binsearch.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_binsearch.m; path = toolbox/xtest/vl_test_binsearch.m; sourceTree = ""; }; 2D66ACDD13AE05BD0060594E /* vl_test_binsum.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_binsum.m; path = toolbox/xtest/vl_test_binsum.m; sourceTree = ""; }; 2D66ACE013AE05BD0060594E /* vl_test_dsift.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_dsift.m; path = toolbox/xtest/vl_test_dsift.m; sourceTree = ""; }; 2D66ACE113AE05BD0060594E /* vl_test_grad.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_grad.m; path = toolbox/xtest/vl_test_grad.m; sourceTree = ""; }; 2D66ACE313AE05BD0060594E /* vl_test_homkermap.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_homkermap.m; path = toolbox/xtest/vl_test_homkermap.m; sourceTree = ""; }; 2D66ACE713AE05BD0060594E /* vl_test_imarray.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_imarray.m; path = toolbox/xtest/vl_test_imarray.m; sourceTree = ""; }; 2D66ACE813AE05BD0060594E /* vl_test_imdisttf.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_imdisttf.m; path = toolbox/xtest/vl_test_imdisttf.m; sourceTree = ""; }; 2D66ACEA13AE05BD0060594E /* vl_test_imintegral.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_imintegral.m; path = toolbox/xtest/vl_test_imintegral.m; sourceTree = ""; }; 2D66ACEC13AE05BD0060594E /* vl_test_imsmooth.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_imsmooth.m; path = toolbox/xtest/vl_test_imsmooth.m; sourceTree = ""; }; 2D66ACED13AE05BD0060594E /* vl_test_imwbackward.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_imwbackward.m; path = toolbox/xtest/vl_test_imwbackward.m; sourceTree = ""; }; 2D66ACEF13AE05BD0060594E /* vl_test_init.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_init.m; path = toolbox/xtest/vl_test_init.m; sourceTree = ""; }; 2D66ACF113AE05BD0060594E /* vl_test_kdtree.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_kdtree.m; path = toolbox/xtest/vl_test_kdtree.m; sourceTree = ""; }; 2D66ACF213AE05BD0060594E /* vl_test_kmeans.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_kmeans.m; path = toolbox/xtest/vl_test_kmeans.m; sourceTree = ""; }; 2D66ACF313AE05BD0060594E /* vl_test_lbp.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_lbp.m; path = toolbox/xtest/vl_test_lbp.m; sourceTree = ""; }; 2D66ACF713AE05BD0060594E /* vl_test_phow.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_phow.m; path = toolbox/xtest/vl_test_phow.m; sourceTree = ""; }; 2D66ACF913AE05BD0060594E /* vl_test_sift.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_sift.m; path = toolbox/xtest/vl_test_sift.m; sourceTree = ""; }; 2D66ACFB13AE05BD0060594E /* vl_test_twister.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_twister.m; path = toolbox/xtest/vl_test_twister.m; sourceTree = ""; }; 2D66ACFC13AE05BD0060594E /* vl_test_whistc.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test_whistc.m; path = toolbox/xtest/vl_test_whistc.m; sourceTree = ""; }; 2D66ACFD13AE05BD0060594E /* vl_test.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_test.m; path = toolbox/xtest/vl_test.m; sourceTree = ""; }; 2D66ACFE13AE05BD0060594E /* vl_tightsubplot.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_tightsubplot.m; path = toolbox/plotop/vl_tightsubplot.m; sourceTree = ""; }; 2D66ACFF13AE05BD0060594E /* vl_tps.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_tps.m; path = toolbox/imop/vl_tps.m; sourceTree = ""; }; 2D66AD0013AE05BD0060594E /* vl_tpsu.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_tpsu.m; path = toolbox/imop/vl_tpsu.m; sourceTree = ""; }; 2D66AD0313AE05BD0060594E /* vl_twister.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_twister.m; path = toolbox/misc/vl_twister.m; sourceTree = ""; }; 2D66AD0413AE05BD0060594E /* vl_ubcmatch.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_ubcmatch.m; path = toolbox/sift/vl_ubcmatch.m; sourceTree = ""; }; 2D66AD0513AE05BD0060594E /* vl_ubcread.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_ubcread.m; path = toolbox/sift/vl_ubcread.m; sourceTree = ""; }; 2D66AD0613AE05BD0060594E /* vl_version.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_version.m; path = toolbox/misc/vl_version.m; sourceTree = ""; }; 2D66AD0713AE05BD0060594E /* vl_waffine.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_waffine.m; path = toolbox/imop/vl_waffine.m; sourceTree = ""; }; 2D66AD0813AE05BD0060594E /* vl_whistc.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_whistc.m; path = toolbox/misc/vl_whistc.m; sourceTree = ""; }; 2D66AD0913AE05BD0060594E /* vl_witps.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_witps.m; path = toolbox/imop/vl_witps.m; sourceTree = ""; }; 2D66AD0A13AE05BD0060594E /* vl_wtps.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_wtps.m; path = toolbox/imop/vl_wtps.m; sourceTree = ""; }; 2D66AD0B13AE05BD0060594E /* vl_xmkdir.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_xmkdir.m; path = toolbox/misc/vl_xmkdir.m; sourceTree = ""; }; 2D66AD0C13AE05BD0060594E /* vl_xyz2lab.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_xyz2lab.m; path = toolbox/imop/vl_xyz2lab.m; sourceTree = ""; }; 2D66AD0D13AE05BD0060594E /* vl_xyz2luv.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_xyz2luv.m; path = toolbox/imop/vl_xyz2luv.m; sourceTree = ""; }; 2D66AD0E13AE05BD0060594E /* vl_xyz2rgb.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_xyz2rgb.m; path = toolbox/imop/vl_xyz2rgb.m; sourceTree = ""; }; 2D6DD0F4100F5E5E006AE152 /* test_mathop_abs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = test_mathop_abs.c; sourceTree = ""; }; 2D6E381A149CE4B5005319B7 /* vl_slic.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_slic.m; path = toolbox/slic/vl_slic.m; sourceTree = ""; }; 2D6E381B149CE4ED005319B7 /* slic.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = slic.html; path = docsrc/slic.html; sourceTree = ""; }; 2D708F261493C5540079605B /* doxygen.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; name = doxygen.css; path = docsrc/doxygen.css; sourceTree = ""; }; 2D70CC780DDE1135000A23DE /* mexutils.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.h; name = mexutils.h; path = toolbox/mexutils.h; sourceTree = ""; tabWidth = 2; }; 2D72EAF00E48A42F005DAA47 /* imopv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = imopv.c; sourceTree = ""; }; 2D72EAF10E48A42F005DAA47 /* imopv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imopv.h; sourceTree = ""; }; 2D72EB080E48A934005DAA47 /* test_imopv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = test_imopv.c; sourceTree = ""; }; 2D732DE30CF8C2CB0099B03C /* Makefile */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; indentWidth = 8; path = Makefile; sourceTree = ""; tabWidth = 8; usesTabs = 1; }; 2D732DE50CF8C2E40099B03C /* aib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = aib.c; sourceTree = ""; }; 2D732DE60CF8C2E40099B03C /* generic-driver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "generic-driver.h"; sourceTree = ""; }; 2D732DE80CF8C2E40099B03C /* mser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mser.c; sourceTree = ""; }; 2D732DEA0CF8C2E40099B03C /* sift.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sift.c; sourceTree = ""; }; 2D732DEB0CF8C2E40099B03C /* test_getopt_long.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = test_getopt_long.c; sourceTree = ""; }; 2D732DEC0CF8C2E40099B03C /* test_nan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = test_nan.c; sourceTree = ""; }; 2D732DED0CF8C2E40099B03C /* test_stringop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = test_stringop.c; sourceTree = ""; }; 2D732E7E0CF8C2E40099B03C /* aib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = aib.c; sourceTree = ""; }; 2D732E7F0CF8C2E40099B03C /* aib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aib.h; sourceTree = ""; }; 2D732E800CF8C2E40099B03C /* generic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = generic.c; sourceTree = ""; }; 2D732E810CF8C2E40099B03C /* generic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = generic.h; sourceTree = ""; }; 2D732E820CF8C2E40099B03C /* getopt_long.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = getopt_long.c; sourceTree = ""; }; 2D732E830CF8C2E40099B03C /* getopt_long.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = getopt_long.h; sourceTree = ""; }; 2D732E840CF8C2E40099B03C /* hikmeans.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hikmeans.c; sourceTree = ""; }; 2D732E850CF8C2E40099B03C /* hikmeans.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hikmeans.h; sourceTree = ""; }; 2D732E860CF8C2E40099B03C /* ikmeans.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ikmeans.c; sourceTree = ""; }; 2D732E870CF8C2E40099B03C /* ikmeans.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ikmeans.h; sourceTree = ""; }; 2D732E880CF8C2E40099B03C /* ikmeans_elkan.tc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c; fileEncoding = 4; includeInIndex = 1; path = ikmeans_elkan.tc; sourceTree = ""; }; 2D732E890CF8C2E40099B03C /* ikmeans_init.tc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c; fileEncoding = 4; path = ikmeans_init.tc; sourceTree = ""; }; 2D732E8A0CF8C2E40099B03C /* ikmeans_lloyd.tc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c; fileEncoding = 4; path = ikmeans_lloyd.tc; sourceTree = ""; }; 2D732E8E0CF8C2E40099B03C /* mathop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mathop.c; sourceTree = ""; }; 2D732E8F0CF8C2E40099B03C /* mathop.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mathop.h; sourceTree = ""; }; 2D732E900CF8C2E40099B03C /* mser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mser.c; sourceTree = ""; }; 2D732E910CF8C2E40099B03C /* mser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mser.h; sourceTree = ""; }; 2D732E920CF8C2E40099B03C /* pgm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pgm.c; sourceTree = ""; }; 2D732E930CF8C2E40099B03C /* pgm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pgm.h; sourceTree = ""; }; 2D732E940CF8C2E40099B03C /* rodrigues.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rodrigues.c; sourceTree = ""; }; 2D732E950CF8C2E40099B03C /* rodrigues.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rodrigues.h; sourceTree = ""; }; 2D732E960CF8C2E40099B03C /* sift.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sift.c; sourceTree = ""; }; 2D732E970CF8C2E40099B03C /* sift.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sift.h; sourceTree = ""; }; 2D732E980CF8C2E40099B03C /* stringop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stringop.c; sourceTree = ""; }; 2D732E990CF8C2E40099B03C /* stringop.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stringop.h; sourceTree = ""; }; 2D765BAD0FEC076700D08578 /* kdtree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = kdtree.c; sourceTree = ""; }; 2D765BAE0FEC076700D08578 /* kdtree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kdtree.h; sourceTree = ""; }; 2D765BAF0FEC076700D08578 /* quickshift.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = quickshift.c; sourceTree = ""; }; 2D765BB00FEC076700D08578 /* quickshift.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = quickshift.h; sourceTree = ""; }; 2D7AD0800E38911C00783252 /* formatter.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = formatter.py; path = docsrc/formatter.py; sourceTree = ""; }; 2D7AD0810E38911C00783252 /* mdoc.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = mdoc.py; path = docsrc/mdoc.py; sourceTree = ""; }; 2D7AD0820E38911C00783252 /* webdoc.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = webdoc.py; path = docsrc/webdoc.py; sourceTree = ""; }; 2D7AD0830E38911C00783252 /* wikidoc.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = wikidoc.py; path = docsrc/wikidoc.py; sourceTree = ""; }; 2D7AD0860E38C05800783252 /* web.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; name = web.css; path = docsrc/web.css; sourceTree = ""; }; 2D7AD0A90E38C18600783252 /* aib.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = aib.html; path = docsrc/aib.html; sourceTree = ""; }; 2D7AD0AA0E38C18600783252 /* api.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = api.html; path = docsrc/api.html; sourceTree = ""; }; 2D7AD0AB0E38C18600783252 /* download.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = download.html; path = docsrc/download.html; sourceTree = ""; }; 2D7AD0AC0E38C18600783252 /* doxygen.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = doxygen.conf; path = docsrc/doxygen.conf; sourceTree = ""; }; 2D7AD0AD0E38C18600783252 /* hikm.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = hikm.html; path = docsrc/hikm.html; sourceTree = ""; }; 2D7AD0AE0E38C18600783252 /* ikm.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = ikm.html; path = docsrc/ikm.html; sourceTree = ""; }; 2D7AD0AF0E38C18600783252 /* index.html */ = {isa = PBXFileReference; explicitFileType = text.html.documentation; fileEncoding = 4; indentWidth = 2; name = index.html; path = docsrc/index.html; sourceTree = ""; tabWidth = 2; }; 2D7AD0B00E38C18600783252 /* mser.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = mser.html; path = docsrc/mser.html; sourceTree = ""; }; 2D7AD0B10E38C18600783252 /* sift.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = sift.html; path = docsrc/sift.html; sourceTree = ""; }; 2D7AD0B30E38C18600783252 /* tutorials.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = tutorials.html; path = docsrc/tutorials.html; sourceTree = ""; }; 2D7AD0B40E38C18600783252 /* utils.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = utils.html; path = docsrc/utils.html; sourceTree = ""; }; 2D7AD0B50E38C18600783252 /* web.xml */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 1; lastKnownFileType = text.xml; name = web.xml; path = docsrc/web.xml; sourceTree = ""; tabWidth = 1; }; 2D81B9A617351EE5000706C0 /* vl_pegasos.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_pegasos.m; path = toolbox/misc/vl_pegasos.m; sourceTree = ""; }; 2D81B9A717351EE5000706C0 /* vl_svmpegasos.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_svmpegasos.m; path = toolbox/misc/vl_svmpegasos.m; sourceTree = ""; }; 2D81B9A917351EE5000706C0 /* vl_svmtrain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_svmtrain.c; path = toolbox/misc/vl_svmtrain.c; sourceTree = ""; }; 2D81B9AA17351EE5000706C0 /* vl_svmtrain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_svmtrain.m; path = toolbox/misc/vl_svmtrain.m; sourceTree = ""; }; 2D81B9AB17351EE5000706C0 /* vl_version.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_version.c; path = toolbox/misc/vl_version.c; sourceTree = ""; }; 2D81B9B61735666E000706C0 /* vl_svmtrain.mexmaci64 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = vl_svmtrain.mexmaci64; sourceTree = BUILT_PRODUCTS_DIR; }; 2D85DE1314CD78AC00BDAE4E /* hog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hog.h; sourceTree = ""; }; 2D85DE1414CD78BB00BDAE4E /* hog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hog.c; sourceTree = ""; }; 2D86B1090F24CC9B00E625D6 /* vl_aibhist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_aibhist.c; path = toolbox/aib/vl_aibhist.c; sourceTree = ""; }; 2D86B10A0F24CC9B00E625D6 /* vl_alldist2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_alldist2.c; path = toolbox/misc/vl_alldist2.c; sourceTree = ""; }; 2D86B10C0F24CC9B00E625D6 /* vl_binsum.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_binsum.c; path = toolbox/misc/vl_binsum.c; sourceTree = ""; }; 2D86B10E0F24CC9B00E625D6 /* vl_erfill.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_erfill.c; path = toolbox/mser/vl_erfill.c; sourceTree = ""; }; 2D86B10F0F24CC9B00E625D6 /* vl_getpid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_getpid.c; path = toolbox/misc/vl_getpid.c; sourceTree = ""; }; 2D86B1100F24CC9B00E625D6 /* vl_hikmeans.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_hikmeans.c; path = toolbox/kmeans/vl_hikmeans.c; sourceTree = ""; }; 2D86B1150F24CC9B00E625D6 /* vl_ikmeanspush.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_ikmeanspush.c; path = toolbox/kmeans/vl_ikmeanspush.c; sourceTree = ""; }; 2D86B1180F24CC9B00E625D6 /* vl_imwbackwardmx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_imwbackwardmx.c; path = toolbox/imop/vl_imwbackwardmx.c; sourceTree = ""; }; 2D86B1190F24CC9B00E625D6 /* vl_inthist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_inthist.c; path = toolbox/misc/vl_inthist.c; sourceTree = ""; }; 2D86B11A0F24CC9B00E625D6 /* vl_irodr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_irodr.c; path = toolbox/geometry/vl_irodr.c; sourceTree = ""; }; 2D86B11B0F24CC9B00E625D6 /* vl_localmax.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_localmax.c; path = toolbox/misc/vl_localmax.c; sourceTree = ""; }; 2D86B11D0F24CC9B00E625D6 /* vl_rodr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_rodr.c; path = toolbox/geometry/vl_rodr.c; sourceTree = ""; }; 2D86B11E0F24CC9B00E625D6 /* vl_sampleinthist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_sampleinthist.c; path = toolbox/misc/vl_sampleinthist.c; sourceTree = ""; }; 2D86B1200F24CC9B00E625D6 /* vl_siftdescriptor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_siftdescriptor.c; path = toolbox/sift/vl_siftdescriptor.c; sourceTree = ""; }; 2D86B1210F24CC9B00E625D6 /* vl_tpsumx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_tpsumx.c; path = toolbox/imop/vl_tpsumx.c; sourceTree = ""; }; 2D86B1230F24CC9B00E625D6 /* vl_ubcmatch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_ubcmatch.c; path = toolbox/sift/vl_ubcmatch.c; sourceTree = ""; }; 2D8E1B551371FB23009CDE11 /* .gitattributes */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitattributes; sourceTree = ""; }; 2D8E1B561371FB23009CDE11 /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; 2D92043C13CDDD860004DC40 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; 2D94E6BC148E48440089ADA5 /* slic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = slic.c; sourceTree = ""; }; 2D94E6BE1490E4120089ADA5 /* slic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = slic.h; sourceTree = ""; }; 2D9941F410ECD04F00502DF6 /* heap-def.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "heap-def.h"; sourceTree = ""; }; 2D99420410ECD6E300502DF6 /* index.html */ = {isa = PBXFileReference; explicitFileType = text.html.documentation; fileEncoding = 4; name = index.html; path = doc/index.html; sourceTree = ""; }; 2D9A805D17745CB500B9A9CD /* vl_liop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_liop.c; path = toolbox/sift/vl_liop.c; sourceTree = ""; }; 2D9A805E17745CB500B9A9CD /* vl_liop.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_liop.m; path = toolbox/sift/vl_liop.m; sourceTree = ""; }; 2D9A805F17745CB500B9A9CD /* vl_plotss.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_plotss.m; path = toolbox/sift/vl_plotss.m; sourceTree = ""; }; 2D9A8060177476E300B9A9CD /* vl_demo_gmm_2d_rand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_demo_gmm_2d_rand.m; path = toolbox/demo/vl_demo_gmm_2d_rand.m; sourceTree = ""; }; 2D9A8061177476E300B9A9CD /* vl_demo_gmm_convergence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_demo_gmm_convergence.m; path = toolbox/demo/vl_demo_gmm_convergence.m; sourceTree = ""; }; 2D9A8062177476E300B9A9CD /* vl_demo_kmeans_2d.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_demo_kmeans_2d.m; path = toolbox/demo/vl_demo_kmeans_2d.m; sourceTree = ""; }; 2D9A8063177476E300B9A9CD /* vl_test_gmm.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_gmm.m; path = toolbox/xtest/vl_test_gmm.m; sourceTree = ""; }; 2D9A8064177476E300B9A9CD /* vl_vlad.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_vlad.m; path = toolbox/vlad/vl_vlad.m; sourceTree = ""; }; 2D9A8065177476E300B9A9CD /* vl_plotbox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_plotbox.m; path = toolbox/plotop/vl_plotbox.m; sourceTree = ""; }; 2D9A8066177476E300B9A9CD /* vl_test_plotbox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_test_plotbox.m; path = toolbox/xtest/vl_test_plotbox.m; sourceTree = ""; }; 2D9A8067177476E300B9A9CD /* vl_impattern.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_impattern.m; path = toolbox/imop/vl_impattern.m; sourceTree = ""; }; 2D9AAB2E1769B6A300AFBCFC /* test_gmm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = test_gmm.c; sourceTree = ""; }; 2D9AAB2F1769B6A300AFBCFC /* test_mathop_fast_resqrt.tc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test_mathop_fast_resqrt.tc; sourceTree = ""; }; 2D9AAB301769B6A300AFBCFC /* test_mathop_fast_sqrt_ui.tc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test_mathop_fast_sqrt_ui.tc; sourceTree = ""; }; 2D9AAB311769B6A300AFBCFC /* test_mathop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = test_mathop.c; sourceTree = ""; }; 2D9AAB321769B6A300AFBCFC /* test_rand.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = test_rand.c; sourceTree = ""; }; 2D9AAB331769B6A300AFBCFC /* test_svd2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = test_svd2.c; sourceTree = ""; }; 2DA21722141D48DA0047E7C7 /* vl_alphanum.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_alphanum.m; path = toolbox/misc/vl_alphanum.m; sourceTree = ""; }; 2DA21723141D49350047E7C7 /* vl_binsum.def */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = vl_binsum.def; path = toolbox/misc/vl_binsum.def; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.c; }; 2DA47BD91792E6C700EC02E0 /* vl_liop.mexmaci64 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = vl_liop.mexmaci64; sourceTree = BUILT_PRODUCTS_DIR; }; 2DA64CD217329C2400276F3D /* fisher.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fisher.c; sourceTree = ""; }; 2DA64CD317329C2400276F3D /* fisher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fisher.h; sourceTree = ""; }; 2DA64CD417329C2400276F3D /* gmm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gmm.c; sourceTree = ""; }; 2DA64CD517329C2400276F3D /* gmm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gmm.h; sourceTree = ""; }; 2DA64CD617329C2400276F3D /* svm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = svm.h; sourceTree = ""; }; 2DA64CD717329C2400276F3D /* vlad.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vlad.c; sourceTree = ""; }; 2DA64CD817329C2400276F3D /* vlad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vlad.h; sourceTree = ""; }; 2DA64CE01733089000276F3D /* svm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = svm.c; sourceTree = ""; }; 2DAF7CE3139918EA00FA0D07 /* about.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = about.html; path = docsrc/about.html; sourceTree = ""; }; 2DAF7CE4139918EA00FA0D07 /* apps.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = apps.html; path = docsrc/apps.html; sourceTree = ""; }; 2DAF7CE5139918EA00FA0D07 /* compiling.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = compiling.html; path = docsrc/compiling.html; sourceTree = ""; }; 2DAF7CE6139918EA00FA0D07 /* doc.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = doc.html; path = docsrc/doc.html; sourceTree = ""; }; 2DAF7CE7139918EA00FA0D07 /* dsift.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = dsift.html; path = docsrc/dsift.html; sourceTree = ""; }; 2DAF7CE8139918EA00FA0D07 /* install-c.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = "install-c.html"; path = "docsrc/install-c.html"; sourceTree = ""; }; 2DAF7CE9139918EA00FA0D07 /* install-matlab.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = "install-matlab.html"; path = "docsrc/install-matlab.html"; sourceTree = ""; }; 2DAF7CEA139918EA00FA0D07 /* install-shell.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = "install-shell.html"; path = "docsrc/install-shell.html"; sourceTree = ""; }; 2DAF7CEB139918EA00FA0D07 /* kdtree.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = kdtree.html; path = docsrc/kdtree.html; sourceTree = ""; }; 2DAF7CEC139918EA00FA0D07 /* pygmentize.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; name = pygmentize.css; path = docsrc/pygmentize.css; sourceTree = ""; }; 2DAF7CED139918EA00FA0D07 /* quickshift.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = quickshift.html; path = docsrc/quickshift.html; sourceTree = ""; }; 2DAF7CEE139918EA00FA0D07 /* using-gcc.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = "using-gcc.html"; path = "docsrc/using-gcc.html"; sourceTree = ""; }; 2DAF7CEF139918EA00FA0D07 /* using-vsexpress.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = "using-vsexpress.html"; path = "docsrc/using-vsexpress.html"; sourceTree = ""; }; 2DAF7CF0139918EA00FA0D07 /* using-xcode.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = "using-xcode.html"; path = "docsrc/using-xcode.html"; sourceTree = ""; }; 2DAF7CF21399190700FA0D07 /* imdisttf.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = imdisttf.html; path = docsrc/imdisttf.html; sourceTree = ""; }; 2DB1A28F110CE32F00E02BD8 /* inthist.tc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; fileEncoding = 4; name = inthist.tc; path = toolbox/misc/inthist.tc; sourceTree = ""; }; 2DB1A290110CE32F00E02BD8 /* samplinthist.tc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; fileEncoding = 4; name = samplinthist.tc; path = toolbox/misc/samplinthist.tc; sourceTree = ""; }; 2DB1A2A1110D09B200E02BD8 /* vl_quickshift.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_quickshift.c; path = toolbox/quickshift/vl_quickshift.c; sourceTree = ""; }; 2DB3F04F1605DFDB00862CCA /* vl_covdet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_covdet.c; path = toolbox/sift/vl_covdet.c; sourceTree = ""; }; 2DB3F0501605DFDB00862CCA /* vl_covdet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = vl_covdet.m; path = toolbox/sift/vl_covdet.m; sourceTree = ""; }; 2DB3F0591605EC0B00862CCA /* vl_covdet.mexmaci64 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = vl_covdet.mexmaci64; sourceTree = BUILT_PRODUCTS_DIR; }; 2DB6ABF214CDB7B500A27D16 /* vl_hog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_hog.c; path = toolbox/misc/vl_hog.c; sourceTree = ""; }; 2DBD0AA110F78FEB004DBA31 /* qsort-def.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "qsort-def.h"; sourceTree = ""; }; 2DBD0AA410F7A48C004DBA31 /* test_qsort-def.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "test_qsort-def.c"; sourceTree = ""; }; 2DC75D0B0E4B4FE7005223E7 /* Makefile.mak */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; indentWidth = 8; path = Makefile.mak; sourceTree = ""; tabWidth = 8; usesTabs = 1; }; 2DD302780DE33107009443C7 /* random.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = random.c; sourceTree = ""; }; 2DD302790DE33107009443C7 /* random.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = random.h; sourceTree = ""; }; 2DD99CC40E58A86B00CE1DA1 /* imopv_sse2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = imopv_sse2.c; sourceTree = ""; }; 2DD99CC50E58A8C700CE1DA1 /* imopv_sse2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imopv_sse2.h; sourceTree = ""; }; 2DD99E8F0E59EA8E00CE1DA1 /* host.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = host.h; sourceTree = ""; }; 2DD99E900E59EA8E00CE1DA1 /* host.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = host.c; sourceTree = ""; }; 2DD9A01F0E5A296700CE1DA1 /* test_host.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = test_host.c; sourceTree = ""; }; 2DDA2306124BD104003F6A9D /* lbp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lbp.h; sourceTree = ""; }; 2DDA2307124BD104003F6A9D /* lbp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lbp.c; sourceTree = ""; }; 2DE5B37D0FDC2BE9008CEB1D /* dsift.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsift.c; sourceTree = ""; }; 2DE5B37E0FDC2BE9008CEB1D /* dsift.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dsift.h; sourceTree = ""; }; 2DE5B3A80FDC3471008CEB1D /* vl_dsift.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_dsift.c; path = toolbox/sift/vl_dsift.c; sourceTree = ""; }; 2DE607661785722900E1A24E /* vl_vlad.mexmaci64 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = vl_vlad.mexmaci64; sourceTree = BUILT_PRODUCTS_DIR; }; 2DE7563916D543A90016C1DC /* svm_dca.h.disabled */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = svm_dca.h.disabled; sourceTree = ""; }; 2DE7563B16D543A90016C1DC /* svm_sgd.h.disabled */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = svm_sgd.h.disabled; sourceTree = ""; }; 2DE765220FF23EE9006347E0 /* kdtree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = kdtree.h; path = toolbox/misc/kdtree.h; sourceTree = ""; }; 2DF4565610ADB9010083F316 /* vl_homkermap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_homkermap.c; path = toolbox/misc/vl_homkermap.c; sourceTree = ""; }; 2DFA239E173B7D0F0065603E /* vl_gmm.mexmaci64 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = vl_gmm.mexmaci64; sourceTree = BUILT_PRODUCTS_DIR; }; 2DFA239F173B7DFB0065603E /* vl_gmm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_gmm.c; path = toolbox/gmm/vl_gmm.c; sourceTree = ""; }; 2DFA23A0173B7DFB0065603E /* vl_gmm.m */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = vl_gmm.m; path = toolbox/gmm/vl_gmm.m; sourceTree = ""; }; 2DFA23A2173B7F1C0065603E /* liop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = liop.c; sourceTree = ""; }; 2DFA23A3173B7F1C0065603E /* liop.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = liop.h; sourceTree = ""; }; 2DFA23A6173ECE7C0065603E /* vl_threads.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vl_threads.c; path = toolbox/misc/vl_threads.c; sourceTree = ""; }; 2DFA36D212F1A26D00E808D9 /* array.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = array.c; sourceTree = ""; }; 2DFA36D312F1A26D00E808D9 /* array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = array.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 2D0E8A7B1786D18D005419DC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2D0E8A7C1786D18D005419DC /* libvl.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2D1EECCF1603E85200C63DCE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 2D81B9B01735666E000706C0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2D81B9B11735666E000706C0 /* libvl.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2DA47BD31792E6C700EC02E0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2DA47BD41792E6C700EC02E0 /* libvl.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2DB3F0561605EC0B00862CCA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2DB3F06B1605F3A100862CCA /* libvl.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2DE607601785722900E1A24E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2DE607611785722900E1A24E /* libvl.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2DFA2398173B7D0F0065603E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2DFA2399173B7D0F0065603E /* libvl.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 08FB7794FE84155DC02AAC07 /* vlfeat */ = { isa = PBXGroup; children = ( 2D8E1B551371FB23009CDE11 /* .gitattributes */, 2D8E1B561371FB23009CDE11 /* .gitignore */, 2D7AD0870E38C15700783252 /* doc */, 2D99420410ECD6E300502DF6 /* index.html */, 2D1EECD21603E85200C63DCE /* libvl.dylib */, 2D6102CF111EE22C00470F4C /* make */, 2D732DE30CF8C2CB0099B03C /* Makefile */, 2DC75D0B0E4B4FE7005223E7 /* Makefile.mak */, 2D92043C13CDDD860004DC40 /* README */, 2D732DE40CF8C2E40099B03C /* src */, 2D732EAF0CF8C3950099B03C /* toolbox */, 2D66AAAE13AE03B20060594E /* toolbox-mfiles */, 2D732E7D0CF8C2E40099B03C /* vl */, 2D81B9B61735666E000706C0 /* vl_svmtrain.mexmaci64 */, 2DB3F0591605EC0B00862CCA /* vl_covdet.mexmaci64 */, 2DFA239E173B7D0F0065603E /* vl_gmm.mexmaci64 */, 2DE607661785722900E1A24E /* vl_vlad.mexmaci64 */, 2D0E8A811786D18D005419DC /* vl_fisher.mexmaci64 */, 2DA47BD91792E6C700EC02E0 /* vl_liop.mexmaci64 */, ); indentWidth = 2; name = vlfeat; sourceTree = ""; tabWidth = 2; }; 2D09A29813AE081700C79C6A /* demo */ = { isa = PBXGroup; children = ( 2D66AC8913AE05BD0060594E /* vl_demo.m */, 2D66AC7013AE05BD0060594E /* vl_demo_aib.m */, 2D66AC7113AE05BD0060594E /* vl_demo_alldist.m */, 2D66AC7213AE05BD0060594E /* vl_demo_cmd.m */, 2D141E30178376CA00E2958B /* vl_demo_covdet.m */, 2D66AC7313AE05BD0060594E /* vl_demo_dsift.m */, 2D9A8060177476E300B9A9CD /* vl_demo_gmm_2d_rand.m */, 2D141E21178376CA00E2958B /* vl_demo_gmm_2d_twist.m */, 2D141E1F178376CA00E2958B /* vl_demo_gmm_3d.m */, 2D9A8061177476E300B9A9CD /* vl_demo_gmm_convergence.m */, 2D66AC7413AE05BD0060594E /* vl_demo_imdisttf.m */, 2D66AC7A13AE05BD0060594E /* vl_demo_kdtree.m */, 2D66AC7513AE05BD0060594E /* vl_demo_kdtree_ann.m */, 2D66AC7613AE05BD0060594E /* vl_demo_kdtree_forest.m */, 2D66AC7713AE05BD0060594E /* vl_demo_kdtree_plot.m */, 2D66AC7813AE05BD0060594E /* vl_demo_kdtree_self.m */, 2D66AC7913AE05BD0060594E /* vl_demo_kdtree_sift.m */, 2D9A8062177476E300B9A9CD /* vl_demo_kmeans_2d.m */, 2D141E22178376CA00E2958B /* vl_demo_kmeans_ann_speed.m */, 2D66AC7B13AE05BD0060594E /* vl_demo_kmeans_init.m */, 2D66AC7C13AE05BD0060594E /* vl_demo_kmeans_vs_builtin.m */, 2D66AC7D13AE05BD0060594E /* vl_demo_mser_basic.m */, 2D66AC7E13AE05BD0060594E /* vl_demo_mser_cmd.m */, 2D66AC7F13AE05BD0060594E /* vl_demo_mser_delta.m */, 2D141E2D178376CA00E2958B /* vl_demo_plots_rank.m */, 2D66AC8013AE05BD0060594E /* vl_demo_print.m */, 2D66AC8113AE05BD0060594E /* vl_demo_quickshift.m */, 2D66AC8213AE05BD0060594E /* vl_demo_sift_basic.m */, 2D66AC8313AE05BD0060594E /* vl_demo_sift_cmd.m */, 2D66AC8413AE05BD0060594E /* vl_demo_sift_edge.m */, 2D66AC8513AE05BD0060594E /* vl_demo_sift_match.m */, 2D66AC8613AE05BD0060594E /* vl_demo_sift_or.m */, 2D66AC8713AE05BD0060594E /* vl_demo_sift_peak.m */, 2D66AC8813AE05BD0060594E /* vl_demo_sift_vs_ubc.m */, 2D141E2E178376CA00E2958B /* vl_demo_slic.m */, 2D141E23178376CA00E2958B /* vl_demo_svm.m */, ); name = demo; sourceTree = ""; }; 2D09A29913AE084500C79C6A /* xtest */ = { isa = PBXGroup; children = ( 2D66AC6413AE05BD0060594E /* vl_assert_almost_equal.m */, 2D66AC6513AE05BD0060594E /* vl_assert_equal.m */, 2D66AC6613AE05BD0060594E /* vl_assert_exception.m */, 2D66ACFD13AE05BD0060594E /* vl_test.m */, 2D10471316D54C45001677AD /* vl_test_aib.m */, 2D66ACD613AE05BD0060594E /* vl_test_alldist.m */, 2D10471416D54C45001677AD /* vl_test_alldist2.m */, 2D10471516D54C45001677AD /* vl_test_alphanum.m */, 2D66ACD913AE05BD0060594E /* vl_test_argparse.m */, 2D66ACDB13AE05BD0060594E /* vl_test_binsearch.m */, 2D66ACDD13AE05BD0060594E /* vl_test_binsum.m */, 2D10471616D54C45001677AD /* vl_test_colsubset.m */, 2D10471716D54C45001677AD /* vl_test_cummax.m */, 2D66ACE013AE05BD0060594E /* vl_test_dsift.m */, 2D9A8063177476E300B9A9CD /* vl_test_gmm.m */, 2D66ACE113AE05BD0060594E /* vl_test_grad.m */, 2D10471816D54C45001677AD /* vl_test_hikmeans.m */, 2D10471916D54C45001677AD /* vl_test_hog.m */, 2D66ACE313AE05BD0060594E /* vl_test_homkermap.m */, 2D10471A16D54C45001677AD /* vl_test_ihashsum.m */, 2D10471B16D54C45001677AD /* vl_test_ikmeans.m */, 2D66ACE713AE05BD0060594E /* vl_test_imarray.m */, 2D66ACE813AE05BD0060594E /* vl_test_imdisttf.m */, 2D66ACEA13AE05BD0060594E /* vl_test_imintegral.m */, 2D66ACEC13AE05BD0060594E /* vl_test_imsmooth.m */, 2D66ACED13AE05BD0060594E /* vl_test_imwbackward.m */, 2D66ACEF13AE05BD0060594E /* vl_test_init.m */, 2D10471C16D54C45001677AD /* vl_test_inthist.m */, 2D66ACF113AE05BD0060594E /* vl_test_kdtree.m */, 2D66ACF213AE05BD0060594E /* vl_test_kmeans.m */, 2D66ACF313AE05BD0060594E /* vl_test_lbp.m */, 2D10471D16D54C45001677AD /* vl_test_maketrainingset.m */, 2D10471E16D54C45001677AD /* vl_test_mser.m */, 2D66ACF713AE05BD0060594E /* vl_test_phow.m */, 2D10471F16D54C45001677AD /* vl_test_pr.m */, 2D141E29178376CA00E2958B /* vl_test_printsize.m */, 2D10472016D54C45001677AD /* vl_test_roc.m */, 2D66ACF913AE05BD0060594E /* vl_test_sift.m */, 2D10472116D54C45001677AD /* vl_test_slic.m */, 2D141E24178376CA00E2958B /* vl_test_svmtrain.m */, 2D66ACFB13AE05BD0060594E /* vl_test_twister.m */, 2D66ACFC13AE05BD0060594E /* vl_test_whistc.m */, ); name = xtest; sourceTree = ""; }; 2D10470C16D546AC001677AD /* segmentation */ = { isa = PBXGroup; children = ( 2D66ACC713AE05BD0060594E /* vl_quickseg.m */, 2D66ACC813AE05BD0060594E /* vl_quickshift.m */, 2D66ACC913AE05BD0060594E /* vl_quickvis.m */, 2D6E381A149CE4B5005319B7 /* vl_slic.m */, ); name = segmentation; sourceTree = ""; }; 2D10470D16D546B8001677AD /* plotting and gui */ = { isa = PBXGroup; children = ( 2D141E33178376CA00E2958B /* vl_det.m */, 2D141E31178376CA00E2958B /* vl_plotstyle.m */, 2D66AC6913AE05BD0060594E /* vl_cf.m */, 2D66AC6A13AE05BD0060594E /* vl_click.m */, 2D66AC6B13AE05BD0060594E /* vl_clickpoint.m */, 2D66AC6C13AE05BD0060594E /* vl_clicksegment.m */, 2D66AC9013AE05BD0060594E /* vl_figaspect.m */, 2D66ACB813AE05BD0060594E /* vl_linespec2prop.m */, 2D66ACC113AE05BD0060594E /* vl_plotframe.m */, 2D66ACC213AE05BD0060594E /* vl_plotgrid.m */, 2D66ACC313AE05BD0060594E /* vl_plotpoint.m */, 2D66ACC413AE05BD0060594E /* vl_plotsiftdescriptor.m */, 2D66ACC513AE05BD0060594E /* vl_pr.m */, 2D66ACC613AE05BD0060594E /* vl_printsize.m */, 2D66ACCC13AE05BD0060594E /* vl_roc.m */, 2D66ACFE13AE05BD0060594E /* vl_tightsubplot.m */, ); name = "plotting and gui"; sourceTree = ""; }; 2D10470E16D546CF001677AD /* image procesing */ = { isa = PBXGroup; children = ( 2D66ACA313AE05BD0060594E /* vl_imarray.m */, 2D66ACA413AE05BD0060594E /* vl_imarraysc.m */, 2D66ACA513AE05BD0060594E /* vl_imdisttf.m */, 2D66ACA613AE05BD0060594E /* vl_imdown.m */, 2D66ACA713AE05BD0060594E /* vl_imgrad.m */, 2D66ACA813AE05BD0060594E /* vl_imintegral.m */, 2D66ACA913AE05BD0060594E /* vl_imreadgray.m */, 2D66ACAA13AE05BD0060594E /* vl_imsc.m */, 2D66ACAB13AE05BD0060594E /* vl_imseg.m */, 2D66ACAC13AE05BD0060594E /* vl_imsmooth.m */, 2D66ACAE13AE05BD0060594E /* vl_imup.m */, 2D66ACAF13AE05BD0060594E /* vl_imwbackward.m */, 2D66ACB013AE05BD0060594E /* vl_imwhiten.m */, 2D66ACB113AE05BD0060594E /* vl_inthist.m */, 2D66ACCB13AE05BD0060594E /* vl_rgb2xyz.m */, 2D66ACCF13AE05BD0060594E /* vl_sampleinthist.m */, 2D66ACFF13AE05BD0060594E /* vl_tps.m */, 2D66AD0013AE05BD0060594E /* vl_tpsu.m */, 2D66AD0713AE05BD0060594E /* vl_waffine.m */, 2D66AD0913AE05BD0060594E /* vl_witps.m */, 2D66AD0A13AE05BD0060594E /* vl_wtps.m */, 2D66AD0C13AE05BD0060594E /* vl_xyz2lab.m */, 2D66AD0D13AE05BD0060594E /* vl_xyz2luv.m */, 2D66AD0E13AE05BD0060594E /* vl_xyz2rgb.m */, ); name = "image procesing"; sourceTree = ""; }; 2D10470F16D546E3001677AD /* clustering and indexing */ = { isa = PBXGroup; children = ( 2DFA23A0173B7DFB0065603E /* vl_gmm.m */, 2D66AC9813AE05BD0060594E /* vl_hikmeans.m */, 2D66AC9913AE05BD0060594E /* vl_hikmeanshist.m */, 2D66AC9A13AE05BD0060594E /* vl_hikmeanspush.m */, 2D66AC9D13AE05BD0060594E /* vl_ihashfind.m */, 2D66AC9E13AE05BD0060594E /* vl_ihashsum.m */, 2D66ACA013AE05BD0060594E /* vl_ikmeans.m */, 2D66ACA113AE05BD0060594E /* vl_ikmeanshist.m */, 2D66ACA213AE05BD0060594E /* vl_ikmeanspush.m */, 2D66ACB313AE05BD0060594E /* vl_kdtreebuild.m */, 2D66ACB413AE05BD0060594E /* vl_kdtreequery.m */, 2D66ACB513AE05BD0060594E /* vl_kmeans.m */, ); name = "clustering and indexing"; sourceTree = ""; }; 2D10471016D54711001677AD /* features */ = { isa = PBXGroup; children = ( 2DB3F0501605DFDB00862CCA /* vl_covdet.m */, 2D66AC8B13AE05BD0060594E /* vl_dsift.m */, 2D66AC8E13AE05BD0060594E /* vl_erfill.m */, 2D66AC8F13AE05BD0060594E /* vl_ertr.m */, 2D141E25178376CA00E2958B /* vl_fisher.m */, 2D141E26178376CA00E2958B /* vl_frame2oell.m */, 2D66AC9513AE05BD0060594E /* vl_harris.m */, 2D3E1F2F15FFE6110035AA1E /* vl_hog.m */, 2D9A8067177476E300B9A9CD /* vl_impattern.m */, 2D66ACB613AE05BD0060594E /* vl_lbp.m */, 2D66ACB713AE05BD0060594E /* vl_lbpfliplr.m */, 2D9A805E17745CB500B9A9CD /* vl_liop.m */, 2D66ACBA13AE05BD0060594E /* vl_mser.m */, 2D66ACC013AE05BD0060594E /* vl_phow.m */, 2D9A8065177476E300B9A9CD /* vl_plotbox.m */, 2D9A805F17745CB500B9A9CD /* vl_plotss.m */, 2D66ACD113AE05BD0060594E /* vl_sift.m */, 2D66ACD213AE05BD0060594E /* vl_siftdescriptor.m */, 2D9A8066177476E300B9A9CD /* vl_test_plotbox.m */, 2D66AD0413AE05BD0060594E /* vl_ubcmatch.m */, 2D66AD0513AE05BD0060594E /* vl_ubcread.m */, 2D9A8064177476E300B9A9CD /* vl_vlad.m */, ); name = features; sourceTree = ""; }; 2D10471116D54831001677AD /* utilities */ = { isa = PBXGroup; children = ( 2DA21722141D48DA0047E7C7 /* vl_alphanum.m */, 2D66AC6313AE05BD0060594E /* vl_argparse.m */, 2D66AC6713AE05BD0060594E /* vl_binsearch.m */, 2D66AC6813AE05BD0060594E /* vl_binsum.m */, 2D66AC6D13AE05BD0060594E /* vl_colsubset.m */, 2D141E2C178376CA00E2958B /* vl_cummax.m */, 2D66AC6F13AE05BD0060594E /* vl_ddgaussian.m */, 2D66AC8A13AE05BD0060594E /* vl_dgaussian.m */, 2D66AC8C13AE05BD0060594E /* vl_dsigmoid.m */, 2D66AC8D13AE05BD0060594E /* vl_dwaffine.m */, 2D66AC9213AE05BD0060594E /* vl_gaussian.m */, 2D66AC9313AE05BD0060594E /* vl_getpid.m */, 2D66AC9413AE05BD0060594E /* vl_grad.m */, 2D66AC9613AE05BD0060594E /* vl_hat.m */, 2D66AC9B13AE05BD0060594E /* vl_histmarg.m */, 2D66AC9F13AE05BD0060594E /* vl_ihat.m */, 2D141E2F178376CA00E2958B /* vl_imreadbw.m */, 2D66ACB213AE05BD0060594E /* vl_irodr.m */, 2D66ACB913AE05BD0060594E /* vl_localmax.m */, 2D66ACBC13AE05BD0060594E /* vl_numder.m */, 2D66ACBD13AE05BD0060594E /* vl_numder2.m */, 2D66ACBE13AE05BD0060594E /* vl_override.m */, 2D66ACCA13AE05BD0060594E /* vl_rcos.m */, 2D66ACCD13AE05BD0060594E /* vl_rodr.m */, 2D66ACD313AE05BD0060594E /* vl_sigmoid.m */, 2D141E27178376CA00E2958B /* vl_threads.m */, 2D66AD0313AE05BD0060594E /* vl_twister.m */, 2D66AD0813AE05BD0060594E /* vl_whistc.m */, 2D66AD0B13AE05BD0060594E /* vl_xmkdir.m */, ); name = utilities; sourceTree = ""; }; 2D10471216D54938001677AD /* utilities */ = { isa = PBXGroup; children = ( 2DB1A28F110CE32F00E02BD8 /* inthist.tc */, 2DB1A290110CE32F00E02BD8 /* samplinthist.tc */, 2D1EECFE16046F1C00C63DCE /* vl_alldist.c */, 2D86B10A0F24CC9B00E625D6 /* vl_alldist2.c */, 2D1EED0016046F1C00C63DCE /* vl_binsearch.c */, 2D86B10C0F24CC9B00E625D6 /* vl_binsum.c */, 2DA21723141D49350047E7C7 /* vl_binsum.def */, 2D1EED0216046F1C00C63DCE /* vl_cummax.c */, 2D86B10F0F24CC9B00E625D6 /* vl_getpid.c */, 2D86B1190F24CC9B00E625D6 /* vl_inthist.c */, 2D86B11A0F24CC9B00E625D6 /* vl_irodr.c */, 2D86B11B0F24CC9B00E625D6 /* vl_localmax.c */, 2D1EED0516046F1C00C63DCE /* vl_getpid.c */, 2D86B11D0F24CC9B00E625D6 /* vl_rodr.c */, 2D86B11E0F24CC9B00E625D6 /* vl_sampleinthist.c */, 2D86B1210F24CC9B00E625D6 /* vl_tpsumx.c */, 2D1EED1A16046F1C00C63DCE /* vl_twister.c */, 2D13F028100A6E8800C072E8 /* vl_alldist.c */, ); name = utilities; sourceTree = ""; }; 2D28A00116D540D100E81844 /* statistical methods */ = { isa = PBXGroup; children = ( 2D1EECCC1603E1B100C63DCE /* svmdataset.c */, 2D1EECCD1603E1B100C63DCE /* svmdataset.h */, 2D519080115A800C0079E222 /* homkermap.h */, 2D519081115A800C0079E222 /* homkermap.c */, 2D732E7E0CF8C2E40099B03C /* aib.c */, 2D732E7F0CF8C2E40099B03C /* aib.h */, 2DA64CD617329C2400276F3D /* svm.h */, 2DA64CE01733089000276F3D /* svm.c */, ); name = "statistical methods"; sourceTree = ""; }; 2D28A00216D540DD00E81844 /* statistical methods */ = { isa = PBXGroup; children = ( 2D289FFB16D53FC200E81844 /* svms_common.h */, 2D1EECF716046F1B00C63DCE /* vl_aib.c */, 2D86B1090F24CC9B00E625D6 /* vl_aibhist.c */, 2DF4565610ADB9010083F316 /* vl_homkermap.c */, 2D1EECF116046F1B00C63DCE /* vl_maketrainingset.c */, 2D81B9A917351EE5000706C0 /* vl_svmtrain.c */, 2D81B9AB17351EE5000706C0 /* vl_version.c */, ); name = "statistical methods"; sourceTree = ""; }; 2D28A00316D5420800E81844 /* statistical methods */ = { isa = PBXGroup; children = ( 2D66AC5D13AE05BD0060594E /* vl_aib.m */, 2D66AC5E13AE05BD0060594E /* vl_aibcut.m */, 2D66AC5F13AE05BD0060594E /* vl_aibcuthist.m */, 2D66AC6013AE05BD0060594E /* vl_aibcutpush.m */, 2D66AC6113AE05BD0060594E /* vl_aibhist.m */, 2D66AC6213AE05BD0060594E /* vl_alldist2.m */, 2D66AC9113AE05BD0060594E /* vl_flatmap.m */, 2D66AC9C13AE05BD0060594E /* vl_homkermap.m */, 2D289FFC16D53FC200E81844 /* vl_maketrainingset.m */, 2D81B9A617351EE5000706C0 /* vl_pegasos.m */, 2D141E28178376CA00E2958B /* vl_svmdataset.m */, 2D81B9A717351EE5000706C0 /* vl_svmpegasos.m */, 2D81B9AA17351EE5000706C0 /* vl_svmtrain.m */, ); name = "statistical methods"; sourceTree = ""; }; 2D28A00416D5422500E81844 /* features */ = { isa = PBXGroup; children = ( 2DB3F04F1605DFDB00862CCA /* vl_covdet.c */, 2D1EED0316046F1C00C63DCE /* vl_dsift.c */, 2D86B10E0F24CC9B00E625D6 /* vl_erfill.c */, 2D141E20178376CA00E2958B /* vl_fisher.c */, 2DB6ABF214CDB7B500A27D16 /* vl_hog.c */, 2D28A00816D5435E00E81844 /* vl_lbp.c */, 2D9A805D17745CB500B9A9CD /* vl_liop.c */, 2D1EECFB16046F1C00C63DCE /* vl_sift.c */, 2D86B1200F24CC9B00E625D6 /* vl_siftdescriptor.c */, 2D86B1230F24CC9B00E625D6 /* vl_ubcmatch.c */, 2D141E2B178376CA00E2958B /* vl_vlad.c */, 2DE5B3A80FDC3471008CEB1D /* vl_dsift.c */, ); name = features; sourceTree = ""; }; 2D28A00516D5425B00E81844 /* clustering and indexing */ = { isa = PBXGroup; children = ( 2DE765220FF23EE9006347E0 /* kdtree.h */, 2DFA239F173B7DFB0065603E /* vl_gmm.c */, 2D86B1100F24CC9B00E625D6 /* vl_hikmeans.c */, 2D1EED0716046F1C00C63DCE /* vl_hikmeanspush.c */, 2D1EECF916046F1B00C63DCE /* vl_ihashfind.c */, 2D1EECF416046F1B00C63DCE /* vl_ihashsum.c */, 2D141E32178376CA00E2958B /* vl_ikmeans.c */, 2D86B1150F24CC9B00E625D6 /* vl_ikmeanspush.c */, 2D1EED1116046F1C00C63DCE /* vl_kdtreebuild.c */, 2D1EED1216046F1C00C63DCE /* vl_kdtreequery.c */, 2D1EECFA16046F1B00C63DCE /* vl_kmeans.c */, 2D1EED0616046F1C00C63DCE /* vl_hikmeans.c */, ); name = "clustering and indexing"; sourceTree = ""; }; 2D28A00616D5429C00E81844 /* segmentation */ = { isa = PBXGroup; children = ( 2DB1A2A1110D09B200E02BD8 /* vl_quickshift.c */, 2D3F063417838CF100B27808 /* vl_slic.c */, ); name = segmentation; sourceTree = ""; }; 2D28A00716D542C200E81844 /* image processing */ = { isa = PBXGroup; children = ( 2D1EED0B16046F1C00C63DCE /* vl_imdisttf.c */, 2D1EED0C16046F1C00C63DCE /* vl_imintegral.c */, 2D1EED0D16046F1C00C63DCE /* vl_imsmooth.c */, 2D86B1180F24CC9B00E625D6 /* vl_imwbackwardmx.c */, 2D1EED1916046F1C00C63DCE /* vl_tpsumx.c */, 2D27614810FF6B3900D14D9E /* vl_imdisttf.c */, ); name = "image processing"; sourceTree = ""; }; 2D6102CF111EE22C00470F4C /* make */ = { isa = PBXGroup; children = ( 2D6102D0111EE22C00470F4C /* bin.mak */, 2D6102D1111EE22C00470F4C /* dist.mak */, 2D6102D2111EE22C00470F4C /* dll.mak */, 2D6102D3111EE22C00470F4C /* doc.mak */, 2D6102D4111EE22C00470F4C /* matlab.mak */, 2D6102D5111EE22C00470F4C /* octave.mak */, ); path = make; sourceTree = ""; }; 2D66AAAE13AE03B20060594E /* toolbox-mfiles */ = { isa = PBXGroup; children = ( 2D66AC6E13AE05BD0060594E /* vl_compile.m */, 2D66AC9713AE05BD0060594E /* vl_help.m */, 2D66ACBB13AE05BD0060594E /* vl_noprefix.m */, 2D66ACCE13AE05BD0060594E /* vl_root.m */, 2D66ACD013AE05BD0060594E /* vl_setup.m */, 2D66ACD413AE05BD0060594E /* vl_simdctrl.m */, 2D66AD0613AE05BD0060594E /* vl_version.m */, 2D10470F16D546E3001677AD /* clustering and indexing */, 2D09A29813AE081700C79C6A /* demo */, 2D10471016D54711001677AD /* features */, 2D10470E16D546CF001677AD /* image procesing */, 2D10470D16D546B8001677AD /* plotting and gui */, 2D10470C16D546AC001677AD /* segmentation */, 2D28A00316D5420800E81844 /* statistical methods */, 2D10471116D54831001677AD /* utilities */, 2D09A29913AE084500C79C6A /* xtest */, ); name = "toolbox-mfiles"; sourceTree = ""; }; 2D72EA930E4776FE005DAA47 /* html */ = { isa = PBXGroup; children = ( 2D3E1F2C15FE93480035AA1E /* license.html */, 2D3E1F2D15FE93480035AA1E /* plots-rank.html */, 2DAF7CE3139918EA00FA0D07 /* about.html */, 2DAF7CF21399190700FA0D07 /* imdisttf.html */, 2DAF7CE4139918EA00FA0D07 /* apps.html */, 2DAF7CE5139918EA00FA0D07 /* compiling.html */, 2DAF7CE6139918EA00FA0D07 /* doc.html */, 2DAF7CE7139918EA00FA0D07 /* dsift.html */, 2DAF7CE8139918EA00FA0D07 /* install-c.html */, 2DAF7CE9139918EA00FA0D07 /* install-matlab.html */, 2DAF7CEA139918EA00FA0D07 /* install-shell.html */, 2DAF7CEB139918EA00FA0D07 /* kdtree.html */, 2DAF7CED139918EA00FA0D07 /* quickshift.html */, 2DAF7CEE139918EA00FA0D07 /* using-gcc.html */, 2DAF7CEF139918EA00FA0D07 /* using-vsexpress.html */, 2DAF7CF0139918EA00FA0D07 /* using-xcode.html */, 2D7AD0AF0E38C18600783252 /* index.html */, 2D7AD0AB0E38C18600783252 /* download.html */, 2D7AD0A90E38C18600783252 /* aib.html */, 2D7AD0AA0E38C18600783252 /* api.html */, 2D7AD0AD0E38C18600783252 /* hikm.html */, 2D7AD0AE0E38C18600783252 /* ikm.html */, 2D7AD0B00E38C18600783252 /* mser.html */, 2D7AD0B10E38C18600783252 /* sift.html */, 2D6E381B149CE4ED005319B7 /* slic.html */, 2D7AD0B30E38C18600783252 /* tutorials.html */, 2D7AD0B40E38C18600783252 /* utils.html */, ); name = html; sourceTree = ""; }; 2D732DE40CF8C2E40099B03C /* src */ = { isa = PBXGroup; children = ( 2D732DE50CF8C2E40099B03C /* aib.c */, 2D6007FF1115C1FA0020963C /* check.h */, 2D732DE60CF8C2E40099B03C /* generic-driver.h */, 2D732DE80CF8C2E40099B03C /* mser.c */, 2D732DEA0CF8C2E40099B03C /* sift.c */, 2D29DD661608F12B00E74DF3 /* test_gauss_elimination.c */, 2D732DEB0CF8C2E40099B03C /* test_getopt_long.c */, 2D9AAB2E1769B6A300AFBCFC /* test_gmm.c */, 2D624AD60FF9306700DB3122 /* test_heap-def.c */, 2DD9A01F0E5A296700CE1DA1 /* test_host.c */, 2D72EB080E48A934005DAA47 /* test_imopv.c */, 2D9AAB311769B6A300AFBCFC /* test_mathop.c */, 2D6DD0F4100F5E5E006AE152 /* test_mathop_abs.c */, 2D9AAB2F1769B6A300AFBCFC /* test_mathop_fast_resqrt.tc */, 2D9AAB301769B6A300AFBCFC /* test_mathop_fast_sqrt_ui.tc */, 2D732DEC0CF8C2E40099B03C /* test_nan.c */, 2DBD0AA410F7A48C004DBA31 /* test_qsort-def.c */, 2D9AAB321769B6A300AFBCFC /* test_rand.c */, 2D732DED0CF8C2E40099B03C /* test_stringop.c */, 2D9AAB331769B6A300AFBCFC /* test_svd2.c */, 2D471AA710DD2C7900FA4182 /* test_threads.c */, 2D13EEF8100A5CFE00C072E8 /* test_vec_comp.c */, ); path = src; sourceTree = ""; }; 2D732E7D0CF8C2E40099B03C /* vl */ = { isa = PBXGroup; children = ( 2DE7564116D543EC0016C1DC /* clustering and indexing */, 2DE7564016D543CA0016C1DC /* features */, 2DE7564316D544740016C1DC /* image processing */, 2DE7564216D544490016C1DC /* segmentation */, 2DBD0B2110F7AB58004DBA31 /* metaprograms */, 2D28A00116D540D100E81844 /* statistical methods */, 2DFA36D212F1A26D00E808D9 /* array.c */, 2DFA36D312F1A26D00E808D9 /* array.h */, 2D0E6C4B1003E0DF00F0864E /* float.th */, 2D732E800CF8C2E40099B03C /* generic.c */, 2D732E810CF8C2E40099B03C /* generic.h */, 2D732E820CF8C2E40099B03C /* getopt_long.c */, 2D732E830CF8C2E40099B03C /* getopt_long.h */, 2DD99E900E59EA8E00CE1DA1 /* host.c */, 2DD99E8F0E59EA8E00CE1DA1 /* host.h */, 2D732E8E0CF8C2E40099B03C /* mathop.c */, 2D732E8F0CF8C2E40099B03C /* mathop.h */, 2D117997178C1EA900311182 /* mathop_avx.c */, 2D117998178C1EA900311182 /* mathop_avx.h */, 2D13EEE1100A511200C072E8 /* mathop_sse2.c */, 2D13EEE4100A539200C072E8 /* mathop_sse2.h */, 2D732E910CF8C2E40099B03C /* mser.h */, 2DD302780DE33107009443C7 /* random.c */, 2DD302790DE33107009443C7 /* random.h */, 2D732E940CF8C2E40099B03C /* rodrigues.c */, 2D732E950CF8C2E40099B03C /* rodrigues.h */, 2D732E980CF8C2E40099B03C /* stringop.c */, 2D732E990CF8C2E40099B03C /* stringop.h */, ); path = vl; sourceTree = ""; }; 2D732EAF0CF8C3950099B03C /* toolbox */ = { isa = PBXGroup; children = ( 2D1EED1816046F1C00C63DCE /* vl_simdctrl.c */, 2DFA23A6173ECE7C0065603E /* vl_threads.c */, 2D70CC780DDE1135000A23DE /* mexutils.h */, 2D28A00516D5425B00E81844 /* clustering and indexing */, 2D28A00416D5422500E81844 /* features */, 2D28A00716D542C200E81844 /* image processing */, 2D28A00616D5429C00E81844 /* segmentation */, 2D28A00216D540DD00E81844 /* statistical methods */, 2D10471216D54938001677AD /* utilities */, ); name = toolbox; sourceTree = ""; }; 2D7AD0870E38C15700783252 /* doc */ = { isa = PBXGroup; children = ( 2D3E1F2E15FE93480035AA1E /* vlfeat.bib */, 2D7AD0AC0E38C18600783252 /* doxygen.conf */, 2D7AD0B50E38C18600783252 /* web.xml */, 2D7AD0860E38C05800783252 /* web.css */, 2DAF7CEC139918EA00FA0D07 /* pygmentize.css */, 2D708F261493C5540079605B /* doxygen.css */, 2D7AD0800E38911C00783252 /* formatter.py */, 2D7AD0810E38911C00783252 /* mdoc.py */, 2D7AD0820E38911C00783252 /* webdoc.py */, 2D7AD0830E38911C00783252 /* wikidoc.py */, 2D72EA930E4776FE005DAA47 /* html */, ); name = doc; sourceTree = ""; }; 2DBD0B2110F7AB58004DBA31 /* metaprograms */ = { isa = PBXGroup; children = ( 2D9941F410ECD04F00502DF6 /* heap-def.h */, 2D4EB14D10F3F3A500ADA534 /* shuffle-def.h */, 2DBD0AA110F78FEB004DBA31 /* qsort-def.h */, ); name = metaprograms; sourceTree = ""; }; 2DE7564016D543CA0016C1DC /* features */ = { isa = PBXGroup; children = ( 2DA64CD217329C2400276F3D /* fisher.c */, 2DA64CD317329C2400276F3D /* fisher.h */, 2DA64CD717329C2400276F3D /* vlad.c */, 2DA64CD817329C2400276F3D /* vlad.h */, 2D732E900CF8C2E40099B03C /* mser.c */, 2D1EED211604FE5900C63DCE /* covdet.c */, 2D1EED221604FE5900C63DCE /* covdet.h */, 2DE5B37D0FDC2BE9008CEB1D /* dsift.c */, 2DE5B37E0FDC2BE9008CEB1D /* dsift.h */, 2D85DE1414CD78BB00BDAE4E /* hog.c */, 2D85DE1314CD78AC00BDAE4E /* hog.h */, 2DFA23A2173B7F1C0065603E /* liop.c */, 2DFA23A3173B7F1C0065603E /* liop.h */, 2DDA2307124BD104003F6A9D /* lbp.c */, 2DDA2306124BD104003F6A9D /* lbp.h */, 2D1EED1D1604992A00C63DCE /* scalespace.c */, 2D1EED1E1604992A00C63DCE /* scalespace.h */, 2D732E960CF8C2E40099B03C /* sift.c */, 2D732E970CF8C2E40099B03C /* sift.h */, ); name = features; sourceTree = ""; }; 2DE7564116D543EC0016C1DC /* clustering and indexing */ = { isa = PBXGroup; children = ( 2DA64CD417329C2400276F3D /* gmm.c */, 2DA64CD517329C2400276F3D /* gmm.h */, 2D732E840CF8C2E40099B03C /* hikmeans.c */, 2D732E850CF8C2E40099B03C /* hikmeans.h */, 2D732E860CF8C2E40099B03C /* ikmeans.c */, 2D732E870CF8C2E40099B03C /* ikmeans.h */, 2D732E880CF8C2E40099B03C /* ikmeans_elkan.tc */, 2D732E890CF8C2E40099B03C /* ikmeans_init.tc */, 2D732E8A0CF8C2E40099B03C /* ikmeans_lloyd.tc */, 2D765BAD0FEC076700D08578 /* kdtree.c */, 2D765BAE0FEC076700D08578 /* kdtree.h */, 2D4EB0BF10F3C1E800ADA534 /* kmeans.c */, 2D4EB0C010F3C1E800ADA534 /* kmeans.h */, ); name = "clustering and indexing"; sourceTree = ""; }; 2DE7564216D544490016C1DC /* segmentation */ = { isa = PBXGroup; children = ( 2D765BAF0FEC076700D08578 /* quickshift.c */, 2D765BB00FEC076700D08578 /* quickshift.h */, 2D94E6BC148E48440089ADA5 /* slic.c */, 2D94E6BE1490E4120089ADA5 /* slic.h */, ); name = segmentation; sourceTree = ""; }; 2DE7564316D544740016C1DC /* image processing */ = { isa = PBXGroup; children = ( 2D732E920CF8C2E40099B03C /* pgm.c */, 2D732E930CF8C2E40099B03C /* pgm.h */, 2D72EAF00E48A42F005DAA47 /* imopv.c */, 2D72EAF10E48A42F005DAA47 /* imopv.h */, 2DD99CC40E58A86B00CE1DA1 /* imopv_sse2.c */, 2DD99CC50E58A8C700CE1DA1 /* imopv_sse2.h */, ); name = "image processing"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 2D0E8A7D1786D18D005419DC /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 2D1EECD01603E85200C63DCE /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 2D1EED201604992B00C63DCE /* scalespace.h in Headers */, 2DE7563D16D543A90016C1DC /* svm_dca.h.disabled in Headers */, 2DE7563F16D543A90016C1DC /* svm_sgd.h.disabled in Headers */, 2DA64CDA17329C2400276F3D /* fisher.h in Headers */, 2DA64CDC17329C2400276F3D /* gmm.h in Headers */, 2DA64CDD17329C2400276F3D /* svm.h in Headers */, 2DA64CDF17329C2400276F3D /* vlad.h in Headers */, 2DFA23A5173B7F1C0065603E /* liop.h in Headers */, 2D11799A178C1EA900311182 /* mathop_avx.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 2D81B9B21735666E000706C0 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 2DA47BD51792E6C700EC02E0 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 2DB3F0571605EC0B00862CCA /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 2DE607621785722900E1A24E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 2DFA239A173B7D0F0065603E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXLegacyTarget section */ 2D72E9C90E4765D2005DAA47 /* make doc-api */ = { isa = PBXLegacyTarget; buildArgumentsString = "doc-api"; buildConfigurationList = 2D72E9CA0E4765D2005DAA47 /* Build configuration list for PBXLegacyTarget "make doc-api" */; buildPhases = ( ); buildToolPath = /usr/bin/make; buildWorkingDirectory = ""; dependencies = ( ); name = "make doc-api"; passBuildSettingsInEnvironment = 1; productName = "vlfeat-all"; }; 2D72EA220E476C05005DAA47 /* make info */ = { isa = PBXLegacyTarget; buildArgumentsString = info; buildConfigurationList = 2D72EA230E476C05005DAA47 /* Build configuration list for PBXLegacyTarget "make info" */; buildPhases = ( ); buildToolPath = /usr/bin/make; buildWorkingDirectory = ""; dependencies = ( ); name = "make info"; passBuildSettingsInEnvironment = 1; productName = "vlfeat-all"; }; 2D732DBE0CF8BFFD0099B03C /* make */ = { isa = PBXLegacyTarget; buildArgumentsString = "$(ACTION)"; buildConfigurationList = 2D732DCF0CF8C02D0099B03C /* Build configuration list for PBXLegacyTarget "make" */; buildPhases = ( ); buildToolPath = /usr/bin/make; buildWorkingDirectory = ""; dependencies = ( ); name = make; passBuildSettingsInEnvironment = 1; productName = "vlfeat-all"; }; /* End PBXLegacyTarget section */ /* Begin PBXNativeTarget section */ 2D0E8A781786D18D005419DC /* vl_fisher */ = { isa = PBXNativeTarget; buildConfigurationList = 2D0E8A7E1786D18D005419DC /* Build configuration list for PBXNativeTarget "vl_fisher" */; buildPhases = ( 2D0E8A791786D18D005419DC /* Sources */, 2D0E8A7B1786D18D005419DC /* Frameworks */, 2D0E8A7D1786D18D005419DC /* Headers */, ); buildRules = ( ); dependencies = ( ); name = vl_fisher; productName = vl_covdet; productReference = 2D0E8A811786D18D005419DC /* vl_fisher.mexmaci64 */; productType = "com.apple.product-type.library.dynamic"; }; 2D1EECD11603E85200C63DCE /* vl */ = { isa = PBXNativeTarget; buildConfigurationList = 2D1EECD31603E85200C63DCE /* Build configuration list for PBXNativeTarget "vl" */; buildPhases = ( 2D1EECCE1603E85200C63DCE /* Sources */, 2D1EECCF1603E85200C63DCE /* Frameworks */, 2D1EECD01603E85200C63DCE /* Headers */, ); buildRules = ( ); dependencies = ( ); name = vl; productName = vl; productReference = 2D1EECD21603E85200C63DCE /* libvl.dylib */; productType = "com.apple.product-type.library.dynamic"; }; 2D81B9AD1735666E000706C0 /* vl_svmtrain */ = { isa = PBXNativeTarget; buildConfigurationList = 2D81B9B31735666E000706C0 /* Build configuration list for PBXNativeTarget "vl_svmtrain" */; buildPhases = ( 2D81B9AE1735666E000706C0 /* Sources */, 2D81B9B01735666E000706C0 /* Frameworks */, 2D81B9B21735666E000706C0 /* Headers */, ); buildRules = ( ); dependencies = ( ); name = vl_svmtrain; productName = vl_covdet; productReference = 2D81B9B61735666E000706C0 /* vl_svmtrain.mexmaci64 */; productType = "com.apple.product-type.library.dynamic"; }; 2DA47BD01792E6C700EC02E0 /* vl_liop */ = { isa = PBXNativeTarget; buildConfigurationList = 2DA47BD61792E6C700EC02E0 /* Build configuration list for PBXNativeTarget "vl_liop" */; buildPhases = ( 2DA47BD11792E6C700EC02E0 /* Sources */, 2DA47BD31792E6C700EC02E0 /* Frameworks */, 2DA47BD51792E6C700EC02E0 /* Headers */, ); buildRules = ( ); dependencies = ( ); name = vl_liop; productName = vl_covdet; productReference = 2DA47BD91792E6C700EC02E0 /* vl_liop.mexmaci64 */; productType = "com.apple.product-type.library.dynamic"; }; 2DB3F0581605EC0B00862CCA /* vl_covdet */ = { isa = PBXNativeTarget; buildConfigurationList = 2DB3F05A1605EC0B00862CCA /* Build configuration list for PBXNativeTarget "vl_covdet" */; buildPhases = ( 2DB3F0551605EC0B00862CCA /* Sources */, 2DB3F0561605EC0B00862CCA /* Frameworks */, 2DB3F0571605EC0B00862CCA /* Headers */, ); buildRules = ( ); dependencies = ( ); name = vl_covdet; productName = vl_covdet; productReference = 2DB3F0591605EC0B00862CCA /* vl_covdet.mexmaci64 */; productType = "com.apple.product-type.library.dynamic"; }; 2DE6075D1785722900E1A24E /* vl_vlad */ = { isa = PBXNativeTarget; buildConfigurationList = 2DE607631785722900E1A24E /* Build configuration list for PBXNativeTarget "vl_vlad" */; buildPhases = ( 2DE6075E1785722900E1A24E /* Sources */, 2DE607601785722900E1A24E /* Frameworks */, 2DE607621785722900E1A24E /* Headers */, ); buildRules = ( ); dependencies = ( ); name = vl_vlad; productName = vl_covdet; productReference = 2DE607661785722900E1A24E /* vl_vlad.mexmaci64 */; productType = "com.apple.product-type.library.dynamic"; }; 2DFA2395173B7D0F0065603E /* vl_gmm */ = { isa = PBXNativeTarget; buildConfigurationList = 2DFA239B173B7D0F0065603E /* Build configuration list for PBXNativeTarget "vl_gmm" */; buildPhases = ( 2DFA2396173B7D0F0065603E /* Sources */, 2DFA2398173B7D0F0065603E /* Frameworks */, 2DFA239A173B7D0F0065603E /* Headers */, ); buildRules = ( ); dependencies = ( ); name = vl_gmm; productName = vl_covdet; productReference = 2DFA239E173B7D0F0065603E /* vl_gmm.mexmaci64 */; productType = "com.apple.product-type.library.dynamic"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0460; }; buildConfigurationList = 1DEB919308733D9F0010E9CD /* Build configuration list for PBXProject "vlfeat" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( en, ); mainGroup = 08FB7794FE84155DC02AAC07 /* vlfeat */; productRefGroup = 08FB7794FE84155DC02AAC07 /* vlfeat */; projectDirPath = ""; projectRoot = ""; targets = ( 2D732DBE0CF8BFFD0099B03C /* make */, 2D72E9C90E4765D2005DAA47 /* make doc-api */, 2D72EA220E476C05005DAA47 /* make info */, 2D1EECD11603E85200C63DCE /* vl */, 2DB3F0581605EC0B00862CCA /* vl_covdet */, 2D81B9AD1735666E000706C0 /* vl_svmtrain */, 2DFA2395173B7D0F0065603E /* vl_gmm */, 2DE6075D1785722900E1A24E /* vl_vlad */, 2D0E8A781786D18D005419DC /* vl_fisher */, 2DA47BD01792E6C700EC02E0 /* vl_liop */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ 2D0E8A791786D18D005419DC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2D0E8A7A1786D18D005419DC /* vl_vlad.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2D1EECCE1603E85200C63DCE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2D1EECD61603E8E900C63DCE /* aib.c in Sources */, 2D1EECD71603E8E900C63DCE /* array.c in Sources */, 2D1EECD81603E8E900C63DCE /* dsift.c in Sources */, 2D1EECD91603E8E900C63DCE /* generic.c in Sources */, 2D1EECDA1603E8E900C63DCE /* getopt_long.c in Sources */, 2D1EECDB1603E8E900C63DCE /* hikmeans.c in Sources */, 2D1EECDC1603E8E900C63DCE /* hog.c in Sources */, 2D1EECDD1603E8E900C63DCE /* homkermap.c in Sources */, 2D1EECDE1603E8E900C63DCE /* host.c in Sources */, 2D1EECDF1603E8E900C63DCE /* ikmeans.c in Sources */, 2D1EECE01603E8E900C63DCE /* imopv.c in Sources */, 2D1EECE11603E8E900C63DCE /* imopv_sse2.c in Sources */, 2D1EECE21603E8E900C63DCE /* kdtree.c in Sources */, 2D1EECE31603E8E900C63DCE /* kmeans.c in Sources */, 2D1EECE41603E8E900C63DCE /* lbp.c in Sources */, 2D1EECE51603E8E900C63DCE /* mathop.c in Sources */, 2D1EECE61603E8E900C63DCE /* mathop_sse2.c in Sources */, 2D1EECE71603E8E900C63DCE /* mser.c in Sources */, 2D1EECE91603E8E900C63DCE /* pgm.c in Sources */, 2D1EECEA1603E8E900C63DCE /* quickshift.c in Sources */, 2D1EECEB1603E8E900C63DCE /* random.c in Sources */, 2D1EECEC1603E8E900C63DCE /* rodrigues.c in Sources */, 2D1EECED1603E8E900C63DCE /* sift.c in Sources */, 2D1EECEE1603E8E900C63DCE /* slic.c in Sources */, 2D1EECEF1603E8E900C63DCE /* stringop.c in Sources */, 2D1EECF01603E8E900C63DCE /* svmdataset.c in Sources */, 2D1EED1F1604992B00C63DCE /* scalespace.c in Sources */, 2D1BC0F6160DF170009E8DD3 /* covdet.c in Sources */, 2DA64CD917329C2400276F3D /* fisher.c in Sources */, 2DA64CDB17329C2400276F3D /* gmm.c in Sources */, 2DA64CDE17329C2400276F3D /* vlad.c in Sources */, 2DA64CE11733089000276F3D /* svm.c in Sources */, 2DFA23A4173B7F1C0065603E /* liop.c in Sources */, 2D117999178C1EA900311182 /* mathop_avx.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2D81B9AE1735666E000706C0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2D81B9B717356697000706C0 /* vl_svmtrain.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2DA47BD11792E6C700EC02E0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2D63C3A917969032001C6AE0 /* vl_liop.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2DB3F0551605EC0B00862CCA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2DB3F05D1605ED2300862CCA /* vl_covdet.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2DE6075E1785722900E1A24E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2DE607671785725200E1A24E /* vl_vlad.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2DFA2396173B7D0F0065603E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2DFA23A1173B7E730065603E /* vl_gmm.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ 2D0E8A7F1786D18D005419DC /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; EXECUTABLE_EXTENSION = mexmaci64; EXECUTABLE_PREFIX = ""; EXPORTED_SYMBOLS_FILE = "$(MATLABROOT)/extern/lib/maci64/mexFunction.map"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; LIBRARY_SEARCH_PATHS = "$(MATLABROOT)/bin/maci64"; MACOSX_DEPLOYMENT_TARGET = 10.8; OTHER_LDFLAGS = ( "-lmx", "-lmex", "-lmat", "-lstdc++", ); PRODUCT_NAME = vl_fisher; }; name = Debug; }; 2D0E8A801786D18D005419DC /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; EXECUTABLE_EXTENSION = mexmaci64; EXECUTABLE_PREFIX = ""; EXPORTED_SYMBOLS_FILE = "$(MATLABROOT)/extern/lib/maci64/mexFunction.map"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; LIBRARY_SEARCH_PATHS = "$(MATLABROOT)/bin/maci64"; MACOSX_DEPLOYMENT_TARGET = 10.8; OTHER_LDFLAGS = ( "-lmx", "-lmex", "-lmat", "-lstdc++", ); PRODUCT_NAME = vl_fisher; }; name = Release; }; 2D1EECD41603E85200C63DCE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; EXECUTABLE_PREFIX = lib; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 2D1EECD51603E85200C63DCE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; EXECUTABLE_PREFIX = lib; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 2D81B9B41735666E000706C0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; EXECUTABLE_EXTENSION = mexmaci64; EXECUTABLE_PREFIX = ""; EXPORTED_SYMBOLS_FILE = "$(MATLABROOT)/extern/lib/maci64/mexFunction.map"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; LIBRARY_SEARCH_PATHS = "$(MATLABROOT)/bin/maci64"; MACOSX_DEPLOYMENT_TARGET = 10.8; OTHER_LDFLAGS = ( "-lmx", "-lmex", "-lmat", "-lstdc++", ); PRODUCT_NAME = vl_svmtrain; }; name = Debug; }; 2D81B9B51735666E000706C0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; EXECUTABLE_EXTENSION = mexmaci64; EXECUTABLE_PREFIX = ""; EXPORTED_SYMBOLS_FILE = "$(MATLABROOT)/extern/lib/maci64/mexFunction.map"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; LIBRARY_SEARCH_PATHS = "$(MATLABROOT)/bin/maci64"; MACOSX_DEPLOYMENT_TARGET = 10.8; OTHER_LDFLAGS = ( "-lmx", "-lmex", "-lmat", "-lstdc++", ); PRODUCT_NAME = vl_svmtrain; }; name = Release; }; 2D8E1B7C13720C55009CDE11 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ACTIVE_TEST = test_host; ARCH = "$(ARCH_$(ARCHS))"; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ARCH_i386 = maci; ARCH_x86_64 = maci64; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_IMPLICIT_SIGN_CONVERSION = NO; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO; CLANG_X86_VECTOR_INSTRUCTIONS = avx; DEBUG = YES; DOXYGEN = doxygen; GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; GCC_WARN_PEDANTIC = NO; GCC_WARN_SHADOW = NO; GCC_WARN_SIGN_COMPARE = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNKNOWN_PRAGMAS = YES; GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_LABEL = NO; GCC_WARN_UNUSED_PARAMETER = NO; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(SRCROOT)", "$(SRCROOT)/toolbox", "$(MATLABROOT)/extern/include", ); INKSCAPE = /Applications/Inkscape.app/Contents/Resources/bin/inkscape; MACOSX_DEPLOYMENT_TARGET = 10.4; MATLABEXE = "$(MATLABROOT)/bin/matlab"; MATLABROOT = /Applications/Matlab_R2011A.app; MEX = "$(MATLABROOT)/bin/mex"; New_Setting = python2.6; ONLY_ACTIVE_ARCH = YES; PATH = "$(PATH):/opt/local/bin/"; PROFILE = ""; PYTHON = "MACOSX_DEPLOYMENT_TARGET=10.6 python"; SDKROOT = macosx; VERB = YES; VLDIR = "$(PROJECT_DIR)"; }; name = Debug; }; 2D8E1B7D13720C55009CDE11 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; }; name = Debug; }; 2D8E1B7E13720C55009CDE11 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; }; name = Debug; }; 2D8E1B7F13720C55009CDE11 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; }; name = Debug; }; 2D8E1B8013720C5E009CDE11 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ACTIVE_TEST = test_host; ARCH = "$(ARCH_$(ARCHS))"; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ARCH_i386 = maci; ARCH_x86_64 = maci64; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_IMPLICIT_SIGN_CONVERSION = NO; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO; CLANG_X86_VECTOR_INSTRUCTIONS = avx; DEBUG = ""; DOXYGEN = doxygen; GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; GCC_WARN_PEDANTIC = NO; GCC_WARN_SHADOW = NO; GCC_WARN_SIGN_COMPARE = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNKNOWN_PRAGMAS = YES; GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_LABEL = NO; GCC_WARN_UNUSED_PARAMETER = NO; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(SRCROOT)", "$(SRCROOT)/toolbox", "$(MATLABROOT)/extern/include", ); INKSCAPE = /Applications/Inkscape.app/Contents/Resources/bin/inkscape; MACOSX_DEPLOYMENT_TARGET = 10.4; MATLABEXE = "$(MATLABROOT)/bin/matlab"; MATLABROOT = /Applications/Matlab_R2011A.app; MEX = "$(MATLABROOT)/bin/mex"; New_Setting = python2.6; ONLY_ACTIVE_ARCH = YES; PATH = "$(PATH):/opt/local/bin/"; PROFILE = YES; PYTHON = "MACOSX_DEPLOYMENT_TARGET=10.6 python"; SDKROOT = macosx; VERB = YES; VLDIR = "$(PROJECT_DIR)"; }; name = Release; }; 2D8E1B8113720C5E009CDE11 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; }; name = Release; }; 2D8E1B8213720C5E009CDE11 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; }; name = Release; }; 2D8E1B8313720C5E009CDE11 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; }; name = Release; }; 2DA47BD71792E6C700EC02E0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; EXECUTABLE_EXTENSION = mexmaci64; EXECUTABLE_PREFIX = ""; EXPORTED_SYMBOLS_FILE = "$(MATLABROOT)/extern/lib/maci64/mexFunction.map"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; LIBRARY_SEARCH_PATHS = "$(MATLABROOT)/bin/maci64"; MACOSX_DEPLOYMENT_TARGET = 10.8; OTHER_LDFLAGS = ( "-lmx", "-lmex", "-lmat", "-lstdc++", ); PRODUCT_NAME = vl_liop; }; name = Debug; }; 2DA47BD81792E6C700EC02E0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; EXECUTABLE_EXTENSION = mexmaci64; EXECUTABLE_PREFIX = ""; EXPORTED_SYMBOLS_FILE = "$(MATLABROOT)/extern/lib/maci64/mexFunction.map"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; LIBRARY_SEARCH_PATHS = "$(MATLABROOT)/bin/maci64"; MACOSX_DEPLOYMENT_TARGET = 10.8; OTHER_LDFLAGS = ( "-lmx", "-lmex", "-lmat", "-lstdc++", ); PRODUCT_NAME = vl_liop; }; name = Release; }; 2DB3F05B1605EC0B00862CCA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; EXECUTABLE_EXTENSION = mexmaci64; EXECUTABLE_PREFIX = ""; EXPORTED_SYMBOLS_FILE = "$(MATLABROOT)/extern/lib/maci64/mexFunction.map"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; LIBRARY_SEARCH_PATHS = "$(MATLABROOT)/bin/maci64"; MACOSX_DEPLOYMENT_TARGET = 10.8; OTHER_LDFLAGS = ( "-lmx", "-lmex", "-lmat", "-lstdc++", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 2DB3F05C1605EC0B00862CCA /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; EXECUTABLE_EXTENSION = mexmaci64; EXECUTABLE_PREFIX = ""; EXPORTED_SYMBOLS_FILE = "$(MATLABROOT)/extern/lib/maci64/mexFunction.map"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; LIBRARY_SEARCH_PATHS = "$(MATLABROOT)/bin/maci64"; MACOSX_DEPLOYMENT_TARGET = 10.8; OTHER_LDFLAGS = ( "-lmx", "-lmex", "-lmat", "-lstdc++", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 2DE607641785722900E1A24E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; EXECUTABLE_EXTENSION = mexmaci64; EXECUTABLE_PREFIX = ""; EXPORTED_SYMBOLS_FILE = "$(MATLABROOT)/extern/lib/maci64/mexFunction.map"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; LIBRARY_SEARCH_PATHS = "$(MATLABROOT)/bin/maci64"; MACOSX_DEPLOYMENT_TARGET = 10.8; OTHER_LDFLAGS = ( "-lmx", "-lmex", "-lmat", "-lstdc++", ); PRODUCT_NAME = vl_vlad; }; name = Debug; }; 2DE607651785722900E1A24E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; EXECUTABLE_EXTENSION = mexmaci64; EXECUTABLE_PREFIX = ""; EXPORTED_SYMBOLS_FILE = "$(MATLABROOT)/extern/lib/maci64/mexFunction.map"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; LIBRARY_SEARCH_PATHS = "$(MATLABROOT)/bin/maci64"; MACOSX_DEPLOYMENT_TARGET = 10.8; OTHER_LDFLAGS = ( "-lmx", "-lmex", "-lmat", "-lstdc++", ); PRODUCT_NAME = vl_vlad; }; name = Release; }; 2DFA239C173B7D0F0065603E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; EXECUTABLE_EXTENSION = mexmaci64; EXECUTABLE_PREFIX = ""; EXPORTED_SYMBOLS_FILE = "$(MATLABROOT)/extern/lib/maci64/mexFunction.map"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; LIBRARY_SEARCH_PATHS = "$(MATLABROOT)/bin/maci64"; MACOSX_DEPLOYMENT_TARGET = 10.8; OTHER_LDFLAGS = ( "-lmx", "-lmex", "-lmat", "-lstdc++", ); PRODUCT_NAME = vl_gmm; }; name = Debug; }; 2DFA239D173B7D0F0065603E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; EXECUTABLE_EXTENSION = mexmaci64; EXECUTABLE_PREFIX = ""; EXPORTED_SYMBOLS_FILE = "$(MATLABROOT)/extern/lib/maci64/mexFunction.map"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; LIBRARY_SEARCH_PATHS = "$(MATLABROOT)/bin/maci64"; MACOSX_DEPLOYMENT_TARGET = 10.8; OTHER_LDFLAGS = ( "-lmx", "-lmex", "-lmat", "-lstdc++", ); PRODUCT_NAME = vl_gmm; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 1DEB919308733D9F0010E9CD /* Build configuration list for PBXProject "vlfeat" */ = { isa = XCConfigurationList; buildConfigurations = ( 2D8E1B7C13720C55009CDE11 /* Debug */, 2D8E1B8013720C5E009CDE11 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2D0E8A7E1786D18D005419DC /* Build configuration list for PBXNativeTarget "vl_fisher" */ = { isa = XCConfigurationList; buildConfigurations = ( 2D0E8A7F1786D18D005419DC /* Debug */, 2D0E8A801786D18D005419DC /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2D1EECD31603E85200C63DCE /* Build configuration list for PBXNativeTarget "vl" */ = { isa = XCConfigurationList; buildConfigurations = ( 2D1EECD41603E85200C63DCE /* Debug */, 2D1EECD51603E85200C63DCE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2D72E9CA0E4765D2005DAA47 /* Build configuration list for PBXLegacyTarget "make doc-api" */ = { isa = XCConfigurationList; buildConfigurations = ( 2D8E1B7E13720C55009CDE11 /* Debug */, 2D8E1B8213720C5E009CDE11 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2D72EA230E476C05005DAA47 /* Build configuration list for PBXLegacyTarget "make info" */ = { isa = XCConfigurationList; buildConfigurations = ( 2D8E1B7F13720C55009CDE11 /* Debug */, 2D8E1B8313720C5E009CDE11 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2D732DCF0CF8C02D0099B03C /* Build configuration list for PBXLegacyTarget "make" */ = { isa = XCConfigurationList; buildConfigurations = ( 2D8E1B7D13720C55009CDE11 /* Debug */, 2D8E1B8113720C5E009CDE11 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2D81B9B31735666E000706C0 /* Build configuration list for PBXNativeTarget "vl_svmtrain" */ = { isa = XCConfigurationList; buildConfigurations = ( 2D81B9B41735666E000706C0 /* Debug */, 2D81B9B51735666E000706C0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2DA47BD61792E6C700EC02E0 /* Build configuration list for PBXNativeTarget "vl_liop" */ = { isa = XCConfigurationList; buildConfigurations = ( 2DA47BD71792E6C700EC02E0 /* Debug */, 2DA47BD81792E6C700EC02E0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2DB3F05A1605EC0B00862CCA /* Build configuration list for PBXNativeTarget "vl_covdet" */ = { isa = XCConfigurationList; buildConfigurations = ( 2DB3F05B1605EC0B00862CCA /* Debug */, 2DB3F05C1605EC0B00862CCA /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2DE607631785722900E1A24E /* Build configuration list for PBXNativeTarget "vl_vlad" */ = { isa = XCConfigurationList; buildConfigurations = ( 2DE607641785722900E1A24E /* Debug */, 2DE607651785722900E1A24E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2DFA239B173B7D0F0065603E /* Build configuration list for PBXNativeTarget "vl_gmm" */ = { isa = XCConfigurationList; buildConfigurations = ( 2DFA239C173B7D0F0065603E /* Debug */, 2DFA239D173B7D0F0065603E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; } vlfeat/vlfeat.xcodeproj/xcshareddata/0000755000175000017500000000000012237004736016661 5ustar dimadimavlfeat/vlfeat.xcodeproj/xcshareddata/xcschemes/0000755000175000017500000000000012237004745020643 5ustar dimadimavlfeat/vlfeat.xcodeproj/xcshareddata/xcschemes/make.xcscheme0000644000175000017500000000406412237004745023305 0ustar dimadima vlfeat/vlfeat.xcodeproj/xcshareddata/xcschemes/make doc-api.xcscheme0000644000175000017500000000415112237004745024577 0ustar dimadima vlfeat/vlfeat.xcodeproj/xcshareddata/xcschemes/make info.xcscheme0000644000175000017500000000407712237004745024225 0ustar dimadima vlfeat/data/0000755000175000017500000000000012237035722011661 5ustar dimadimavlfeat/data/river1.jpg0000644000175000017500000155713712237004736013617 0ustar dimadimaÿØÿàJFIF´´ÿâ XICC_PROFILE HLinomntrRGB XYZ Î 1acspMSFTIEC sRGBöÖÓ-HP cprtP3desc„lwtptðbkptrXYZgXYZ,bXYZ@dmndTpdmddĈvuedL†viewÔ$lumiømeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ óQÌXYZ XYZ o¢8õXYZ b™·…ÚXYZ $ „¶ÏdescIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view¤þ_.ÏíÌ \žXYZ L VPWçmeassig CRT curv #(-27;@EJOTY^chmrw|†‹•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿÿá~ExifMM*ntˆ(2˜‡i¬CanonCanon PowerShot A70´´2004:07:17 14:56:29‚šö‚þˆ'20220‘.’ 6’>’ F’N’’ ’ V 0100   ¢^¢f¢¢¤¤¤¤n¤è2004:07:17 14:56:292004:07:17 14:56:29? k _ ­ ô ô ÿÛC      ÿÛC  ÿÀ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?üÉRmãQt0íM¸bІDÂŽjE‰ç•CòÇô­+Kã¸9‰qï^ÞÊì‹_D3K´–¢[’Iaß´áz¦`\Ÿ,Ýé³Ý‹±¹xˆtärjÜ}@ƒÞª>ÿP’JÖ,\ÊnîG– ªô÷¢KyþÔEõ*í¥ºÚÛFóŒ3vÏjÔÒ,åÖ.BÅÆyÏSM]jG™Øv§Ë©ºE.v|Ìk×>ü1Ó´É`º×*m~Þ™õ5›áÝ4›]Ð,m>ÒT‘œqYÏá/|Hº†–[HÑÈó `0ÏjÂU%'ËMÛ»=4ù^×g¥ø¯â ¶ˆD[ÈC¶ï_ÔžÕçV”!û¸;÷g¡ oâ–åýB—[[‰oKUá%‚ÝNZžÆ/¶É¨Ý±uEÛ· {âº+{µ]G!X£„d¢6Fz‘\Ö¡å­£CåŠ#¹‰ê}p:º»htIhŒ-Vc,ì—-À)Ç›ýž‰0dŽFŠ/™ùëìO¥lhvÖÓ[-î­¿tó0‰Hì8é\÷ÆŸŠ6^²ûƒ“y2ù?€ý*ãñ(ÇVÉ»\ÍêZÔµ˜î4+¯°Ì‹÷ˆ;Sñï_3|N×585¹by0IÜ žÞ„W³·öŽ¥§éö¦êXhi”cÌ“¹ÓŠó¿øRåïn$¶¶ ˘ä¹Íváaì§ïœx›Ô^éŸ%̰ü<†ïUp$äª¯Žæ¸ïøK¤Õo„+#-žÜ”#9â½Æ­ðøµË)cØU@Û÷ÇzómKK‹”A vœk²Š‹rgk¹E#rÎHôÝE¡Åºæð‚3´g“Y¾.·µ´ž[´&R3¸Ÿ™¿κí3G´‹÷²$@…†ãéßÖ¼¿XÕäÖüM5ÌŒ|ÐH=µ])óKC,G¸­cVÛN¸¼°—ìÐypÆNyÁ8¦Ï«Çk¦,z³¯Ÿü!G8Ö¬\jhÞÏvC3gŽIµ[Â~ “Æ~2‚/9Õ°]Š3‡v s]\×}xÆRj1Z‹ h_ß õ—¸Éˆz½·Oð߇´«Qáûy$Òe@ÓË4 ;‘õíߊìôš/†¼#ö½.ÂãX½;\ 7F%eõ¹æ«üOÔõë¿Ìuhíš-‘ZÀøäŒ~Uå×ŪÒP†Ç³O °ôÝõg*¾=ƒÆ:çö'†-àA2˪ã©&µv‰ è3ž=ëºý˜nî¬2ª¼î'ñë_BiVÖ»âOx“Å m{¾ÓçÐíÃÝNÍ ¶G˜Ù$œ`v'¾koá¶§xÐËhÒL²LêÖòo¿‰\¹5Þ›mg­}d<Ñ¡ä¿*Ø?{Ç_z‹SðuŒÉ.£áVu¼mG d~ØSÎÞ#œâ½EZ3Z»yž4°ó§+ÆÍv5|Kð³QðŽ¢·Z2M+[œãŒújÓÓßO‡À7º–¯ç³ÁµÝ3´»SÓ8<Õ½ãDÉ¢ÚZݼèò$ÆC:ŸïgíV’Î_Kq} Â²Û<¥L „4¤ Ä•_@FMrÍÎzMmÔì¢à¤œV¬¹¦jvsø~ݬ,äÔ-æù¥$1´g§Zõ/‚^2‡Â^ûRÞÅ´¡·YÓk+»àïaË¢÷öÍq– §ÙꞸ´†æä‘#n,¬ `ëÆ08ö÷ªz†±xzV½ohö—ÉŽXÎÀŒ~¼vë\•j®X³ºJ¥ó3ý¯~0]üNø€$½¹·»µÓL‘Âmcò ffù™WߟLW˜Øé‰}¢M{¨HðÀ’yIžL²uÚ>€ƒ^ÃðO\ÛÚè/!ˆ–âIÜvÁïÓ­s>øwoðÌ¥¸ºRÛPñ¯îRSÕFz°“î+ÑÃÕ§N1§¯cËÄQ”¥ÏÑÿ^§gè³EŠxÇ45~¦»ibëB._È î#·Ò£Ò ’I"n7àNZ»a§ÊÖOg\ iDjO”ãv:Ï5.›n³ß†¸\*r õ÷ô¯ {6šl»¨AÞpAR?ƒ§ãTï,ÚÙ\Ä‹#óóNiš…û.£,mærBÇZµjéxê.K¿—È<ä~=ꚃ^ó¹_ÎŽÆÃÌdÆ "¶rzR2ýª=œcÍ+ƒ’FñïïF·§ý¦MÊ[9ÀÚÜÒX ¨Û”¨ç-Ðtú¥k]²y_b¼Ï2 kq€zóìjô7ìТ\ WqÆÞ€úr38Øê3ÃéT„òÅs(”(Œ;éB°œFî—9¼„ùÊ>CŒÿJÖOA¯i›´0²j¡ÿÔÈ~øö÷®VÏ_ŽÚ,7>[á¹éøw5~ÓÅ-¥_%퇜²Àw Þæ¡Å¤Úf´¤ž†Ç‡í$—]K F²ºòÉB0þ÷|WRÿÆšžíN{hõ¢ñB# · ‚Ap€*¿£ëqüxx†»koc{mOu2ñK›3|ŒÏ>› ûÀò†q’zœWK­éú¿Äªêº½œhV*¶>B\¼j©Ñ²X³n=º¥t°/‡íO€ou_ys«öÞiÎÒ¦Ÿ7S]/Ä fÊçBú¹þÈŽÁ§»Ki—åÔŒO†(ÝãìN9ÆA¯7ˆTëJZ÷=:8oiJ“×±æ^ðv±¡ê:®›áÛ«m>À q4Ó»y†1ù«“´o#ñ5ÑxVtðÝŒö×·0YévòÛ^–k§à—É …bvªü$÷ÍfxÅšÍæª¸ô©ªùZsH«?…nyOůƒ—ž3k=kFÔ´A.¥ µµ’ºÁ/”«þµÎÇbÞ¸šà¼ áGRñªiQù†A9ŠVøB¤‚C‚<þUôŽ|k1øCªÀ­g iV«¸·I;Ë©6‡T—M¬;ç=ëÏfï1|7kÒ–ïy¨ÜΦÂ9QM¾æÝæ<Ç©# ¨ç<ã4«MÒ“Q½¶9êB ¬y—¯r=Á²|–ïRñ{Ï Go $y’;c9îëÉüO¨Ï¬k³\_/’Óœ°;˜L’sÓÞ¾±µ;­sDMvà\Áz_Î.£‰8±ÆNN3“Žõ‰ñ»à½¯Ä¯ ¾³à¸F™qj²J –0ê%’ð:=r*(âÒšuw}{ÖÃÆ´)è|¯ÍmwÒH|¸g>õ³“æCæÚ‘×#©¨åÑ$ÑõY!Ö#1OnA*=G¶¥»µ²±ÿG")ÎÖç?Zõ›Nܧ$Ÿ9if²Ü4—¥_Êê cóõ©uHšÊo2Ðð@ù9*G¦;UÆœ¤O"§˜óvcåúÕ9/‰šeóà ª°äÛ4®ÄÔm¹5í”V*W`2.xþço,OI O¹5²ÖÓj,«'™#¢‚ȧhúÖ­®‡–jÊd,O4ÓI WžˆætÓmmhÓ)Ìäm8ÏNüW ~ΟÇÆˆ:uŒ’Ý[Z\N¨òÅwŒ’Ø$ (ŽO¥cøWÀ¯¬]K&Ÿ —gw ˆ=IíéšúÛöxð.¡ð{Á_i-¦µÖ·+¯Ù®6Ç:F¡Bàœí Ù=‰Ðâ¹±˜¥B›q~óØèÀà^"iÍhŽf¸ôݯÄè­ÿá*·Ô%±Ó5I.¬í„¦8‘€RòÐåúç®1_Yxà†‘ðÆÚEÓ^{k(\M$` 3Ii[c’OsÚ–&´(¯d´·OóîE 3—ïe׿Q|+á=Ä>ЮtÛDoìke²†öä*´–{¿Ÿ…ÜÌ>` `­éº®‘ã¯FÚ$š]õýŸÌÓµ¡|8n|¶<(è+ZóPðÖ¨·Œmâ‡N°·†öæ+Ökh`±GpÀrÀýθäŠá4ÿˆ^Ô¼lÚoìÿcå[ÆÆ[ÛÈ-qd…@Ù ;[Œ"qɯ1O™µ­Î¹Rœ•äìvÞ7[}6ú%ÓõE²Ôð Q¥Îùf‘†‡øS;¹ï\GÄ?ˆW¾ðÍàHR÷T‘ä„Oä¯,ãkJØí-µO®3Ó5Í|_²¸›ÅÒÁâMHЭ®%M[Y»Òc’Ú]rñ”ªsË|‘€¡ ¹ü¸oÆšçÇOxKÁÓ}«G·• –ÎFx®å $oæ’ž0H'çÀê*©Ó”’{ÿ]Ê% Y_Eèsÿ´þ·{¡Í>…áyâ=ZÊÚÒ fU-sFâIÜc­/qÎ~lV‡ƒ/uƒ¿³Ž¥â_Šb½½¸òá;|»‰™°b3“¹œ“Ô UŸ†>·øÕñþ-oNŠè×­g&Ù0—“ˆßË‹ ÝÝ#18Ò®_Þh¿uÍS[¶Ó—RÓ“PkO6ID"ýÆ‘cn{ 亠’+±J<ŠóäsN>Φ».‡5ðëNø‘c}®êÖ© i+«Áµ”r|—Òª*þí9o¼ cÓælâ½ö®ÖŽ“á/x>kkûë„[ÝgXµ*^òe—!>\HBàgæ öÎx¾-:FŽ4ï…÷gI–hZ-â íØbLõ»-Œq´rk•ð‡5{? ëzÍýÔ’|­e!bÈ¢U8•wyÆ+OgÎý­ì—Fsº²¦ÚZß©µ{ñßÁžžûFGvc[Y±ÞÀ`©ÛÐ.ìÝxîkÉ|wñSÑ4¡i ú„+—¸ª½»ÊçrÇÇÈ€`’O>´º¯~Û`žŽÙaÓd/4M€²… ÍÜ[~Öl-5ù'ñUŸÛwÜF!ÓnJKgêÁØç®Ñœg$ Wl £ïJ7<ú“æÑ2ÀÏ jÞ&H§ñ™"×IÍl·.ñ[Êí¸€"–,vޏªß5·ÓmKÒ5!¦;½åÁhV?µ’¸‘‡™°qµIçnq“^Á­x·Ä’iÚ”ðé6±gÔÛˆ¤ ’ÖEÈbªvŒý㌕Á¯žhÝÜøÎöÞÁ+9PB„…mÊrðzÌÖ”×¶žŸwbeîSw8¿øšc¦ÙZiÐÃj°Ã†xó¾ã%Û'ðc½àõ„kት–Xoå‘l¬c‚Ž6åÏûÜ­yz蓤Ms} ¢Þ"±ÏÞ=5è³þ…yñĶ6B)›OÑäû\À!!8 qœô⺫GÜzœtîæ“,üRð>³%ìw3h“[ùdÅçÊìÒNÙûî„b?E#ó^ƒðßÂ?5Fm,\kòL ¶…mÏ2>3¶9û¥³Ûô­_ˆj‹àÖ²¾{e{y™¥½·‡ÉŠ6É*ÆbÆH$“œ˜ÅVøMâ™/ô‹ëŸ¼×+È€Ý4Åã‰vä²¾wr0}놥_iFÇ£õnJ‰wƒ|[‘d÷_¬$“ÅÒÎl­mÙJ%s™$‰{£nÿPy®ò?Øë_ñΟö½f©y¨Ïö‚D"`is»ŽÀ’}k_V¸Ò>|2¶Ö,¸Ö(hW7šƒÙhñ]%åšVK€²ƒ–Þ~æ0 “ž=ñ[ªòŒo×¹|,^Xè‘àþ;øuá½bü=ÑÛèMݽ܊’ÛHÀ¬Œs ÁížÕwá–½‰ü+u§éÒ hLm3Â×ãS“ʧå\‡ÄC®ø‡ÄP[¤‡í:„†Lá<ÖùI=A`Ö…¯µ‡wÓ}„bÒù7ª·Ÿ !ŠœŽyw¯OÙμþ.‡‰‹TèÕ÷5îv?¼au Ú\|?]8C…ž4cçùƒ ä–ì@â¼’âÍ‘™nRMÃ<<û×µêW³ÍªXë¾ 4#ŠæÞ,; ãLdÛ[åZ>(ðJøÒÃþ$Vp5Φ’¦UPY•U¾£€r:ö«¥W“ÝŸßþg<àæÕ¶±È²nÊz1uÅzç†> h6“\ëZÜó}›J¶ó|¬³5ÃFâßÅ‚>QÇnµâ7BOêbicÿH´”:«½ƒžÝŽ1ø×«|Pøé-î§G¥ [Y¤Ó£ºÅª‡O1‡*?¸ÊsÓß4V„ãQ(uÜT&•ã%±« ÕÍüZ†¹ã·ótøn–;h' Ø¡‚²)ÆqÊž@8ïW<)ÿÄï]K)O†Î?µ‘(m°)$E!á¤;r[øEEû1ü0Ôümc4þ$ÕdÓt‹køç¿icG@ äƒß°3’sÒ½) |O¬Ãá«7GMH¦› ÙY#Ó£Eýìƒ/#ù“×zŒq\•gxõ_èaàß¾÷fWÁŸx±¬b†Rîù¤kë€Û¾D6ýîFÐ}~•ÖxãTðÁÿ ßëÄCu«Û7—i`“0fÏy6àǽt¾_ üøãèñ}·Q›K¼i ä}‡XcŽÝz’^G$ž¡Oáð¦½âGQµšÖîy$„ò3·261’{ô¬()âe.FÔU—©êÔ£-59êÙSâ7¿á2ñÖ¨¨bódß-´vî}ð=SIøg¢jZÖš“j~"•âHâR i¸ù$€ ù‚–Èä+À¾|(¾ø™â¨Ñ¢”ivî²ÞÈxUˆ•Ï«T{Ÿjû»áÍ–—6™£êiök‚ïqç;f˜Õ28Uô$ŸZyUEFšG._EâjJ¥M6øïðIÒ¬RXî$ƒíd[¤`2ï;†3ípß~ŸÃre“cZBDjXüò+í*{‚*ïÅÇ↬pníï%–+†oãbXqè6€lÞ°¿f?¶šn¯¨hþ)B"Öísov¤ï‚ò7VøêC!ú Î5«GÞíŒÃQH¤{oŠt|ð]¶£¬É;k Ñ"ÚÉ6Ý…ˆW—Ü‚ž•òŸÄ¿†oâïOs£*âYDˆÉ¸Ì‡ø·wù² }ñ—Ké6)k¸¾uŽYƒ’ä€þ®sÇ¿Ùú Ö‰á¯B.6G¼½ˆå7™›#ý^ÓÁ'ŒýhÂâ;IJîGF+ ÓPÙ;YßE¨”ã=ûµM«ë0%³"±$úv¬é¡HÕyß&0º ªÚ~“öû¾T}çþ•ôŠÇÉs[DY‚e»•#Km’8«í'™*¬#pŒà‘ÐûUË{ôËr qÔ ŠÞ2˜¸ÛÀVªÉé°KDVk±»i/ÆÑŒâ»¯ ièö¨ï–âO^1í\ß„ìD¼º¸ÀU"½+Ãv->PŒåsȨ­.Ec§ »³¡ðn›çãÏPÒpY½+Ò|=iösiµœt–¹ –Ú3 ƒ3gêk¡K¸¬€1\‘ÈåQõ¯µNmj’P‰×À‹&ƺl8L¢×>µGPZå-thÕnX|Ò§ðzóYšoÚu9m›—/3tDZ­K†/Ü[FFÎ]ÏCéšå³‰i¦^²´-*8m™¤sÃ6I,{“Y~&¾x¬|‹5f¸Ï¿zÛÓÎËviNÖq¿Ü•ÏêVG]Ö8°û\I8â¢÷•™JRnÄw1µ½¤pßÈžUšÇw Ç#ÿÕ^)ªøWTñ?ÄÁUÓíäÝ› ž§Ü×О!ŽÎâÅ죷!¥M’19üjâõ›;]"Þ8¶¢ÊØòÃ62Ó­oBª¦ùí¨§ETK™”4]Úwœ¡ó®%Üu•‹âÍnÓÃz-åΠѨŒmîÇ Íd|IøÓ'‡ï …Óm¬ 2‹‘…îIî xGŒ|o¨x—\šæöf‘YËD€ü¨3ǵ:SÄ»ìŽzÕãF<©ž§ÿ Û,nÅÌ^k–1Ç‚¤Ž€ç¥céšdÖײɦÍlV@ÞÜ©ÏOs\¶‹ã;í&wxÙK“È<î>õbÓÅóżAÖBs“^’£5¤O'ÚÆZ³¡}RkËiRÞ ÷*Ò:àc¯á\-©–ù˜òKc#½bÏÄv—^H¯^(̼ÉÉЦ™àïi·„·z´RG¦Ùá¤ç,3Øu9¢#JîIšËíåÀ«iðýüAaÄ“Jbd]Iǰ÷Å{¯€ÿ°þhëcÇoªÞ¶ÙD!d’(ÏUfÏJ‚ݤñ¯…OøU¦¼v Vf—ÇRI¦èÿ/´©†Ÿgc{âÍÅÚÉœú¨Ï'ÐóëוuÊÝ‘ëR °ú¤wš†ª–¨§¼²$CçŽ/˜1Ç:×â·ºÖõÈtoÙÅu;B“K0\}›sAÒ¶a)à- Aö$bFÝÊ€;ûàYü}¢éújÖf8ãÔÛ0ÆI.2qœõÛé\Aé©£jRÔæ~>jšà]Ãß e–5µ šŒ±H‰20áÇ'ëY,n­5+{ŸÉXhðËõ²‘ÇñýkjìéZºK «ûÍfaçY÷ù!¹ˆÏšð¿‹á$ÚjïtÆÉÞ9ccƒ3vrkZå&¢—Îڜէ)¶õfæ·ñÂãÅšDm*¢ZÈðds¾bzõOZÇø¢úç‰ô{_µ[Në«„Uc‘ÛÊ|+°¸Õu»…Ó¡‰ÒËÉ$Ñ—Kuþ÷sÇö×ÂïÙÖMkàö¨ß,¥® 7±Ý"7G-²3å‹mÉ^¸ú×V!ÓÁ(É+°Áá烓ØðµðHÓué¿e¸¾…ŬÒ6í²¨ã+Û9ÏÐu® ø·XÔo4Ý?K¹§ùŽ­8·ÌSL@MrAp:t£ö¢žkOèzO€–bÞ²C’J½[#o?(ƒ5æ~Õ-þøÇMÒu›Éõ ä¸ê æfÑ"+¸G9ÎîXŒF+šúÏï;ô7­8áíl{§‰¾3_ëzv‘ |8ñ$3Í£1ÜÍ b #έÀg=ñ_6øçþ+Ñd–ÿÇÖºU•Œ:‰vE‘òIlŽíw°æ»8uÍ3GñŒW^ûh¹¿¾O.Öý>Ï“ÈÙdþèrvã>¼â®þØãĺåÅÝ÷ŽüAem6š‘%Ž…a¨mÔ€­1…ø‰ È30 ! ŠÓJ4J;÷ÜàÄוtå'w÷~‡iž#û6~ß4—?9Äì7`}+N=ZòÍ#¹·…äDmÆE\¢žÀúW<÷ªc¯Ê ¦m¬1ê}óŠÞø{ã›ý é ´-ínx‘ ¬;gpÁšï$ÕìsÑ®áÔ€xÒòâáÅð H9 ƒ`Ïp;è,týGQ깞ÒE÷<à{u­+ãcKݧ«*†(óÖv]Ž'Oýnt*ÛRñKÝX[Τ\8Ušá²§ ‘’6–8Á'Œ×ƒøžÞ×FñuÝ–‰ÜVêÛPNCJ8¶2}«Ô{{Guسœ7‘ž /¾ â¼ùîŒdJËå…àã¹÷©à’E>nàœmÇ-S:j¢³F°š¦î™×x«â¶¥{ñæóXÕ¯oíDʱI/F2BžBüÍï^Ÿ­|6±øá$¿Ð¢Ž60CÀIãù¹÷ãŠð ®VmËrc`#+¨ðŒõ?êQñ–`Æ';þá\õ(4—²vhÞ9eg³2¼]ðäx~ðýB*¾¡%$úYÚu¤Åس¿ÛÅ‚ùÌ:Ó?ã_HÜ|`ð7¾Ç¢ø÷Nº´šãvÛäEÃï`çžâ¾/þÌmáé¡á)ÒîÒE-‰‰¸Ûž P1ŽùŠtqú¨VM>ý>ó*˜K·:NþGE£Ka|à ÷öË÷=r+оÞ[iwÚ°Ô£ˆ¼¶,àmVéž{ò0'ÌZ­Ö·w‘·`Ä„nÎãž­ïÛÝ^þÏ:¶—a ÝÌBë~œç€qœñýk¦½HòòÉÚäaéÍKÚAzµ×„4ë$fÕíw.±1Vù™€  öô®VïáM–´eÿ„}Ävêqºe!‹w8QÀúÕ½Jñ®š¥íòOnºThòÅ ù‹+ ùc×§õ•/µkj!¬;i¿2^a s–¯°ÅyÐö‰µ jwÊq•¹£bD±‡þº!Wý:R¡£šEÆ:ŽÝñ\4z°Eò¥÷(À4/œ¶}+Ø<[§ÙøÂlº¥äik;’åT‹œpV`GN¬;ÿÙÂÊê9o¼>—J`qµ®å˸ÛÁ(8ç=1Ç5ÑGÛ¨õlµT´iìqZÓ»X¶çr€G•õ¨a¸[ËeÃ*îà`@kÛ´ïƒVÞ#Ñ’ÕàÕ0‘4qÊ­À˜žœŽÙï\¯ˆ?gËòY4³†'hSÂÈ=3ëÖª8ºmòÜŠ˜Ÿ<òÙåÔ"ÎÉ-À$Fâ§úŠ‘ì¿úÇÉ#,Ä}ê½s¤É¦\µ¼ñËç-»¥Ko¯—v0î3´ŒŸjß_CFÏS"ôYK2œsŒsK«éM ûE›ªñŽ2~•£5¾QÚØyx#¯âi‘fPMÒ“:Žãï{Õ{Gº¬­s<íºT Ý·‘·uüê+m.d¹—Ê,Hˆ¿ÍÀSÛ<÷÷­>tŸ"ªmÁlñù…%Ê‹Èw"™:«×ÐP¦×B-$jxs\›IœhJð*`£ÄJžzò9ü+蟅Ÿic‘¦kŒ¼lr~U8êsŸÊ¾i’éåF†î=èƒsdr£×ÿÕV<1ñëÂzÈÔ4fû3@Å ÔðW >µÍˆ§*ÊÐvfôf©=kñ7ÁÛ¯ Ú]Áá{¨!Žú_5g‚ Dx?ÄW8ç5⤹ñìÛ…£ÇjUDTœŒ3žXœ…}ð·âñÀv÷Ú´!®s…xò°HÀ‡Ö¼ïã/ÀIïm仸i¦iÚ…œís%º¸ˆºàŒ`õääNkΡŠtêòÕø—Wþg¡Z„kÓ½?»úgðËâ«eàðTJ¿b¹XnÝ!,aäy|ÖÎ@s L É®Ÿá>™­~Ñ7ºñŒ¡°}Mº~n!1‹¼e6¢ôQ€Aò‚OSšæ¿e;Ø<ñHiߣ›N–ñJ¼·¨Âê¤*²Îv¨=yÀ¯s×|i%ÊÏcg«£ÂÛT?gkm„‰Œg ?Ýü¯QÂM(êõ¿¨a ÚÖ÷]×µmO‰$Ô®.dÎÖÖñ*Ë$B)GÝdðWØb°>)|@ÔüI©‹#k5µ "i,ä “©ÆUã€;wèÞ)ÔI¼Ð¬lb¾3øš–ÜÉ ‰m­ÆW{ädØÀÀë“Ö±ß@}•ìXí¼Ÿ*+x-ƒº¾A%¤O$æ±¥8«JZ•V<®Ïæqü7'„ü_o£ë?i½Ð¬lmIº¸Œ•Y qÁ*¡þ s> Ðtë_Äúœ7W:z»~æ^I§ç ….îÌpæ¾¥ðr[x³Á³Zê,—Â"EÑeßc€#¨UhÈ<׌ë: üø¾.t)¤¶Ó㤖UhÔ’#^„1ø×FµƒZþdW¡uíWÏþ-ïÅ‹í 4ÍWĶŒÛH–Öˆ8lÓi@UGÞb ó¸‚O5Õxëâ­×…<5­3˜4­8ŠÚ2fãWw;P4‡ˆ‘Fx›ŒàcžsFûgÄ?+S›H¹ƒÃöp$¶2ì²29]ÒÊr0ÎH7®_ö«ñl÷1[i§N´‚ÊBüÒÎ@Ï™ÈôÈã$ŠQQ«5¬ýL§ÍN<Êç˜ÞøÁî4–u;ÇÊ»°O>•6­´sÂ÷Â5Éà/_Ç4ÄÒîîÓéL£*q–úUí;ÃÒê3BçyÛ‡~<óŠÕ¶õ3Ku%ÅÚêÓfÉVÒP¼ºžVÇ„¼9q©\ýš8®ev"8|¬f?ìõ úS¿áD›ËžhaŠ!æ2‚O>ÙþUë²]¶Ý{YÖlÕ¾Ïi§Ü[B&@Ë4’§$`U Ç8Î1\•ñQ§(êtaèºÕ:‡?gŸøCü#smâfwƒ]ƒv öÊßèñ+ª$,ã|Œí¶4Ë’{ ô]bÎ=w]Ôõ--í–->Í¢Ó›{xWäeT–gÞ€ã'aÁÇ^/Å>9Ô¼9ð†þIuY-ü5§Áes¨ˆ‹QÕn!-%Ì0ç¡•Ö5ë»Ú½?Áúw‹þØIà{ÛRìDQj`²Gf²Æ@Q±C1I$<’ãŽ9¯­YÔ~ÒGÕF ‘ä_4hÿ´è´ÈÞÖó^¶•·@Ê‘År|¨•ˆv!$£!Xúâ¿gÙ?[×--õ-bÎ{{ÙÁ¸yO’Õ3òªýæÞàg¶Ñ^á |ѯuA«][,i“$׈­bŠ6R¢$.Ì2P‚åC7&ºé|{gã -eðÔºt×P»Ytù<Ô«1XRGUÜd1í pN3MâùcÉKw¹ÌèóûóWfß‚47Â{6)Jñ¸ŠÞ@‡ÊQ€Ñ‚0sÏËß=koíM¬C+ø„F‘^ É•Up0sœ“ϯ_Jó?Fñ·Ž×\ñWš.oíÌmek&û=,¶pev™‚©ÀKdŽ8í,u}rÝ5†Ù<±m‰$'÷ýøì:ë\SMk&Zn:3—ø÷ãŸ^ø4Ÿþµ¾¹i;½NóOYNTp»“y!äu݉>`j‹ávwkãX5Ÿ-ັ·{+{t“v¥Ó™i $îlsÒ½UÔH_¶Û›—VÄQ¬g€X Ûzלb¼o㇂õoxzÁ¼?âXü7c¡Ý}®yŒ2Ëôò1Tódn ’GQ–ÝÚŠ{rÅ%}Û7sU$¹ÞËC}Wñ¿Æ;Éþ ëwSEdèX™Ì±XÛ+ ­)»‰P¬A;³ßÇ~Öþ&MRîÖÓáþ¯$·S†·†Æ0ñ#ªnYÅÂà© | ç¥&±ðãVÕ¼uá«nÿÄö7„j÷‘>赋@« F0¿0R‡nAQÒ¹}Á¯á{(®¥4­¹Ç xKÂ)o¢XÝÝÞÍ}([–¹ÔZHmâÚ«!HOÈŒÀ`u'ž¾Aâ{ûuÖµ‹­*ÊÎÞÖÚÏìÈò’ë!mª`Œodz œ×sñD·Õ>"]ÝAsy—ñF^IªR=ŠW9ù¹Ý€z“Íp>8ðõ¤ŸÛG—R¶´°·•â¹»–±–Ý•ûßÝã©éÅN¶“lìÄÁAòCs]´Tø‡àûöðv¨Zhv/·4r «• Æ@oSŒ±Çœ×wðÀÓxGI{$’8a¶›ûCR”8_²à(H÷‚>mÀap~nœ×ð‡ÄÚ|B±°Òõ“B³ŠæèË~ÁsåFY¢ñ¸±;W«1PzW¡~Í:uï‰õ-z_ï²·°‘Zëín‰öÜ£H[£ ‚9$1¢½IòÊ i¾¤Â8rÎo[ëc3ãÏc±Ö5ü,Ó!¸žÝѾӰÒSóV0æ¸ x7[ºÕ¡Ðî ¿Ñí.¦†K©eFÚÀ±V ¸+=}«Û¼#ðóÂ>ˆë:]äðêÚ˜khgšð\´Òî º©3|§­bjW¶z¢³¸¾Ö^úñ¢kƒ<ûEœLÇÁo•¯|VTëB䊻êßs²ªueÏÓ¡ëWbø‡¨ÅãO‹ºˆ1h‹®Ÿ¤$éJ¡r²¹oeYG Ç5ç_¼Miâ-~æ8õ(/[BU{EžÞY ‚l0ØänóÕ8̉òäú úÅ~+µÿ…|e²†GŽXAŒ¤M+Û²8g‘"1r@Á<‘€0+À¾1ë°h6ï ø~âãA²žÖMnýã®u=Aƒ <‰fQò+ •@<´É«É¥/i5u¶Ç»¡E5½"ðçˆo<'ñ®¿ÕfŸM• ¢B‹íôà+Ø|gá_øHoìu©¤c×-̈’¯ ¼ˆF[œ èþx[Âð‹_xŸW°µ³Ð¬$Pš¬Ñ4×7·!|Ã?Cû°HEQ€ “Võ¯‹º4¿ 3LðújºEÌ>¾ö¹¸"d-”áN9 ÐNy¯™4]ne&ïEÓj€IÏ8ì߯5ï 'O‰¶š•§Š&»Aqg3C}o/—ºdQ…=˜œŽ•ª2ƒçæÐä¨Î|²ØóŽ>Žd³¶¶µI4Ë”&Îõ6´…º죔㚥ðöi½ñm¬÷º$vßn[vóA2…ÏõïSí]§ÂOk~,h–_!¸_Ý¿”Ry1ïp áH=±]Ô~9¶¼ñ.©&‰ö{ôÒYãNJÛÂÅ™²?¼£†÷sÅΔ}’×ûݦ–§31¾(|.’÷Á²¾‰©Oae¦À"–Ýe24¬X‚nc#±ãÞº?5Û˜"‹\»¸7÷r#Ý+±o³Ûð3IÆ;œdzb±|'¡ø—âïˆô­7AÓ­­ôhu©^´!6ÌJðÃx^ÿ6Nxï~Ònþ´ºœ×¶×ÐÞ_Bú’O- …X¶Ôoùk+ÊAÚ0=°+‡‰•:\º_ñ=>Uš}Ë~ÙžÓt?†šg€® cVñ]ÿÚ–+UE§ÚÛ€c,#,–å‰b}+ÓöÒt裸ñ_‰£XÁxäš;rmÔ®?å¡aÇ>™ë^çâSEøÃñÖÛ_ø„’i–úzI²ÈγyQ;•¹bNÆÀÈsÚªÞøãÀòøžúëNð¾ŽÞÑœ‹kÛ¸$V‘È' CrY†rûõ¬ð¸Ú´)¨A»½^ˆôñéV²šºG‡üKoí‰ö_ÿgˆ-tíÂ(½Œ±K°Ïs1<‘×ðÅw¿õ½á÷„m|7¢j·º¼^ŽÙƒ€ÌÀ• a‚{÷¦økÅz–©®jž-ñm•”óê]+J&Ƀ0æTp>ìC)$ã5æ?´´Ï ø†xjXm ê’ÏÏp2YKIRqõÍhï^¤U¶ß­ßvÈr5'µ ñYÕ/»ðŸêÀéŒöº×3§k/a}lÈæZ̬…8$†ƒïŒWw­_Yx–Ò /éw³ßÒl231µQF~¹¬ï|.Ô|!lâ+fƒÝåNÓï‚kÙ¤£8òíùŸ9‹º|éÜú‡ÃŸá¸ðæ¹wáûaqe§Åwa¼E·K&CŽHm¥¹ö5ç?u?2=ÿÚ-õl™®Þ90¶îÚ@êFA>¹"±dï7‚~'i–ÂeŽNu†VÜ~NÒIè3ëë^×ñgZ3ꓺÙ&«wxÅDh®±"’2AQÇÝÏ>¸¯4ž´©Z÷Ôö0¸ˆâ(òÍl|˜›®ÝXƒ=ê奪ÄÙÆÕäu¢ßNI‹3/Õ!wq²0}_Z“z~㤓ûB`–ª}§Þµ´Ý*->1¼n”sÎ¥ /Ì>÷Ö¥¥Šß+ùG8;f‰I%b£'vXÐíÚY•›5ëÏò®ÓCÔKÌ©nªú7ÊkŒÓ§’Úw‡g–ƒ‚ÄV¦¨-ˆÀv ¶wÆkluRš†Ç¥iúÛ Po#–Sú{Vœz†¹r?ÝÀüÉ7CE®WÁöêÓî—1AŒã¼ŸZô‹Ä 1àd‚¸j(ÓésÐ¥jŠæØÔ¾Å¦Åm»ÕíŸz½¥3c”|¨yç?½÷¬>%Öõ ’kh>gŒÖµæ§æEåéÀ³)!Bÿ®&­©º³±§¬ÕÕ #Ö§Ó<8Ú\}¨’fðAÝŸcX:wˆmtûøaŒ‹‹ÉFHQŸ,w&“Å^6–ÏN¸ŽÍ1l«Ÿ1åëÏë)©Y(£xÅÁ93Å¿m!¿{+HÝî£Øþ•ãž(ñV¯ãŸ@“Fð]»lb<¨Áëì1Þ»"î?ë ýˆbÛÒθàÙ5‰/`³žk+Ù¡·¸–O”CâÀt˹ô®š0&¯³)·Q)7¡Æ|pðôž)×ßJ¹{ƒol‘Æ¡z…?­yBi2Y^›kèŒsôóÍ}UðãÂ+ éuw§¼(Ú¯>Oíê®=)á8½¶Ö­íDÑM$¡ˆÜòqÇ@:WU,W²½4¶9ka¹ÛÜòáDŽ<êP#ø¨`¹±·IPà„ÛëþÚx®ãŸÏ@‹À‹†8…cYø1-tYn•$y™¶¦Èêê§W{ÝN Òå–›šf‡gw-­¬21¼³ýã#9ùGÓ½{u¯ƒ®tý"ÒÈ5ºIy –f1ò®Üö\Äšä¿gß½ÅÅ­Ï‹íe·Å¶2Í3® (Çl‚OÒ½”Eiguu± í{?άÈY#,x=¼ÜeGÍÉ}wBÝYÔÃ0°ÓV;UT1ÀráUµpzÞ«¤Ý¶µY¡<òoÉÚ ÓÒ.ÿ´­n¦’W‚ÖÑŽ\¦Å!z‘ž£µp>%ø…¨\ ËÛX`KO4A )¸»c‚9Æ;ó\M»XUêݘ¾6¾¹ø£vÑxrFK{‹”€«C î<÷Æ}¨ñ†lôë–Õµ5Ο¡Â‘Ú@0œd÷$œŸJ«¡ëQÝé·úœS4ºt,ZYWl“1ãåN™cÀúûWcáÇ|9ŽçÇÖ)­Ã•†Ýh?.ï^•×g­²ýLF“K¯S”Ô~%ŧ¼W(#k… qǵKr~f<“ŠðßéVþ*øåx .¥7 C#¶àYºãÐùW¾øËáí–‘àË›ß^ÛY´NÒÛ™˜n‹•{žõÍyŸìÑ‹ÚoÐA%ÛÌ—w¬0KÀàúšÚŒáM¹ÁlsBŒ«5N^¬ô_…Z_À¿†jÚƒƒq}q 2@çsê;˜÷V%îO'¥}ðóöŒ[o„«aç,“_ÃŤR•Š×O‰P TA<êkç¿­ÇÅ{¿ÚK5½„SFÖ®Ó²¡ÆÐÃ;Ž1’9'ŠÇø…5ÚxJJTOø_ý2îI%ÌçqsÖV$Œ(÷5çΓÆüoVÿÕž#ØÒ厷c3ãOÆ[\Õõû[ËíÒO&îÞÛÅ#®p¿ß‘ˆÈßéé\ïìûð’OÚOâtU±Ò¢b%½¹ÉKX‹c?1ÀÔúWW‖·^ :Þµ4šeœ¶Q_%´j%šgaÊ®â6³dž+Oà/€<3ð×WmKâ5ÿˆì¢tH汊ÜÇ}âÄI µ¸Ø2V½<:… mGFxÍJSæž§?«üÔ4ß^ê~ ¹Ô­´ÿJZÂñâ2´².pÇܨê8â¸gÃ^&ÔÛZ·6Ú†§©Û#]êÓÜ––uEÌ’ÊìHàççÓ5÷‡Ãí[Ã’hðÞ•‰tm=Þh1)’?Þ(< À*ÏË’01^â='Âþ%ñƳ¨D·±ZëGÏšKgTÊ‚wṗœOJçŽ+Þi«š8BNÛ3ä«+F˜#ºo‘ùí]u¶­g=ƒG¬Ùm@Ÿ¹ä`Ý2°¬y,äNñíÂHä2v†8ß %6ö1ÏÇ}‡}õ8êsÐW£?y#ŠšJm2-EÕtf›QÑ¢vÂ?ß;š NoB=~•UŒ~ħC¿y>ÏsÈÌ~yÀç>õáo‹0 ngÒå{¶—p±«Êp¡›¿º×_¢|SÓ%“û/Æ0Oe©ÈÒR[p8ÚOÌ Ú:W¹ú«šÂJIÆÃõ[s¬øQaD¿¶¿Ó%[‰…ÌÛ”Œà²ŸâR{~µÍøÃJÖ5=.+‹“‰!y ‘çòÀ*xþs+´°ÒítËaÃR¶œ•‡}ÃJñ ¸p7mè0F9ª:¿…µïøyg𘧂ÎD)E<ðßÁ•8z{æ¢3ä•×âuFõŽç–êºe†“áÝ2D¸&âø<¥]8XÁ }ÉÆ=®?Tdµ¿‘íM’04‹€ãG}+Ñ4?Éu¦Ý·ˆìîâ‚Û-ðØã°ÆÕ'šÂñ‹¨Ïá›8V"ðÂcæ`;qòçøpƽM^÷9kR¬âqºo‡&×5È ŠA½ÌÉ’€[b“ó6''®1]‡ÄÑg¼Z„×Íi'‘o é‡H€$  ä|½FîjçÂKXt»³¬kgQc0ŽÞ9˜*ËpT²Ž}ÎzV?5©üL·öþ,··}aîLÏv9ê¾1Œzuªœù¦—c:pQ§~¬Ãÿ„ŠÕ´o"|M)ÇoΫA¥ÆÑ‰b—de¹_îÕM/KjA®vtäÓ-¯ÞßÌVª—9\vë}‘Ͻ¯¹¸u 9"h$1¿BÔÈ4È®˜Mi. €ÊéøVL23oÜA |Ö¦‰4wqÇ»;€þÒ…£Ü{îh¯‡F¦Cùƒx8t#úQooý†Cë —^S'RµËØ[3¦NÈK~yÔ—Q>±¢âø—E8Î9ü+6åvºX«õëªÌ³f>ª gËõãü+Ð>üTñ'Ãè¬aUY-QɆ)c%e'ŒôþF¸¯hk«Eý¿uqm¤Á’ÝMn¦!P•XÕˆ ŶŒŒdöÅzw‡µI¾[¿Ä«3$j›ôÉíeQ=ÉxŒžZ&âUN3æ2ŒíÀ<ó–'‘ÂÍ\ß «¼ŽêÛÞ ø ÍZxcÅPϲdB¡¥¸SGU—§lVƧáMWEÓ‡Ú¦ŽBðˆà˜E˜—=€2¼œã?Jñ߀z†ƒcqªË¯\ÝˤZi·²É–ÞTPSh=Ëajôÿƒÿ4ïÉs …üºd6ñB™Õ3*Jˆ÷aI;AÃ9Çœò«Ñ©KHÝ¥ßôêz©N¢×s™±·Õ¥\êÚŸÚR²G8Yì7—’0HÏ'òâ³¼A%­…­Úkú]»ßyRKö©Ẇjãn;9Çï~×|?ã+-ÕŒÆE‘‘óÃ#Ü™©ÇÁÁ®wůæÒöE¤%¡Y¤?f–)¼Õ~UzàÆFNk8ââ¥i+:ø‡šø›âމðÿLMpZ]¼@ bUÝ ŽÄ¹Qôã§CýÇÄhn.4äŽÊ‘v¤\<¤žzuu'¶+«×¾é~ žÒÞK+›XÚE¸žêâÝc‘×iù6Ÿ”Ø'åV|3àM/ÂÿhûTW³ÝÞ¬«fžr¡R¼«p0Ÿ—¿JêU(ò¶¾# œú¿ÌËøak©Ãý‘I×î·“È yQýÒT“† 3’;W¦øŸN·“S2ÚEL³`¸8 ñßšä¼0#×m¦Ó§½âÖDJªó mU ¹ù³#cŽõoHñmljui"˜-»ˆRm¬ÁB•P¤û‚2k ¾ü®‘Ñ®V`øÿÀ–Õ›Á-¸Ù'ú‰¶†\n»œùŠòh7^Õ|›ˆÚ?,eXƒµ×Ø÷¯{ñVÓKlò»KjèRUbÌÊê R9+ž}sþ#Ò£º¶kU Ð |±<¤)VÉõëœWF³§¦èçÄÐö±œt®LfÛ{Ës|>)ÓÒOCÛ¾#~ÑðjzŦ±ª@-¯/5m<ήnA¸Mà…U;Xr+Ó-<1¦[ø~ßPð¦£n$‘$‘eûDY¤L€Ì Q‚K‚¾(ñw/™ñú1 ¾Žd´E‹Í¸ûL±C%¼xº¬‡,Q´ã$]øuáëŸx Ò&•⻵ghSk9‹a³´œžFâA$ðUIû:J?’7„#R\ë~¦Æªʶ:ä00¹In uÿ«´|ÝUp#Kq¥ÚÏ©"ø›F°½‰¦GÝ7ÍndRUœ?ñléžüã®+̼{ãÔüC,·„‘Üi*U|ü%N4à˜œí9Y7ɯñ ·8W*µ'ªW²w–‡%|KŒŸùž5âÛ»]BɆƒmq«Éå¼²cÀnUãÐTŒò²ØDã,F7ô¯´¾%þÉú/Œl£>Ð|?e}uª(–ÿA³+n û¢‹ <ò \äb·¾~Ã_§Ž~ɳ®ñX’ãÆ—ÓËöæO¦§ú=̪À•hÙ×N3•Éô¯zøqðÚ‚ßÁÖjÂ6mBeÖ#RáTÄ#F e6»”’I­­Sá•Ωñ^ fßS³]hVgk ŒÇ–[³dlüÝלõÅÝ9tÛH¯´KwåZâ[›t ÖO’BŒ /l ƒŠùìnqV­[*š¿²¶9RZ?‘ÍüBøà/^Ùëž#ðý¯†í4Ø<Ñýœ˜µÔT³(ó@8@J–àG³õ½BÆÛÉá(á¹²h„‹iü|leqÃ.ÿ®Bœ×ªx® t/NÒüE=ž—ö­]REjÅ¡Wæ–7K“ƒ¹SšðDñµçŽeÓŒc}=•¤ MÍÔjûž8×å ÆÒÙ‚·Ý m•z¶U/eæÏKIÂNnÿ3¨ð—ìçÅ/…óin¤·šïXµÕ. #M+¶8ˆÇ9o1‰í¸‚½¯FðŸ„R4øü­:Ú1¾ŸhcUìsëŽý«Ê>.¯ãËã/‰WKeáqhš]­Ì²­³Ÿ0íLª>YPÙÎ1Žäûm¾¤×:'¢\-܉òœ"«1ÈTgrrzâº+ÊIò·òì{T—2JKc矌º9ñö©¨IñƒGh¼¢\<~“¦NßiÔ6¶åuùB±Ã`ا5¿á—Ue“O³¸Ò¬åµ‚!¢Í½–Á€–äp8?1ÜFkÐåk CXk› Ÿ²Ï|í/ËúeÚÆÍ7'1DåIàg:ó֜ڨhZQ]¤ALî‘×üzVŠ¢QQåØUÓ“ÕüŽ/Å ip[˩ƶöö…•ÌEÊáˆØ£ÙÁÜAî8­}:ÇÊðRbyÖycIIÞ»—\+ž6äw5ÙË'îã‘$€œ+€ApÇhÎyÈþuæÿ´/Žm<Åy{q0X"P–ÅHVÎãÉÇÿª•ÝF£Ì9!Í"®±âi,¬åŠöa%•ÅÖ<ÅàB:…ÜzŒä g<ýkξ&k·xR4Ó,õ ›)ÞE1Û ä¦TpxSÏÞ¸¯ˆ^ñ÷ˆtõ1Œä£dʺ×ÃHt×Óôí. ìt Íq#ʧcÌÜ’ª>ûdzÕ_†GYÐ~.^Ç¢ÄF™ol„Èñ•ŽR2B.qÜd‘ì+Ó¾#x«Âßãn—¨ˆ.´å\BÆ!BÁ‹ô\ªãw®:ÖyñݽÏĉ4¿@÷—Si÷:•Ô`ª, ÐùP¶ ù#,T…à’¤€i{KÅé«þ®(Æ3iK⿌:‡í㻽?YˆC¢Ú‹¹lïb…‰„"bl­ƒÎGÝé^ñ#Àòêºmª^Ãf4ØÖ¡.Ì‘Æ>âŽ8b2{Ew¾³Ô~èú¡Ü‰’ÞæêâöGÿZØaÀ$`gùué~2Ë¡x?H†ûâL) w†´XaVk¹Ñ~ûÇ»" @Î zÖ#EÅÁÊ„åÍý#Í4O¯„¾iw_Ö6¹ºK;H¥Rz6ó¼÷'Žâ»5ž‘àÕ‡ÀOݬ²7Ûì  mE5Sx8*ÎÀ`qÐzÒêþÕ~1øCmzà]èQÜÉ{e$˜wnM®¯žAcÉÆzé~ ü ´ÓWXp^=Õgºup؃9AŒãî¶ßâè*¥;©9¾»tÿ‡&TùUÿ®‡–øüZYè×Z›É‹æxT®XÛ³†q0ìÊŽÅsÝÎz òÿˆVÖ÷šU”ž“Í€ÀB¹,$=P“ŽG§AØ×¥~Õ2Òm¯ïtï =¼PÜ…Ä Ì«Eƒ÷@žìÕÎkÞÔ5_‡~K óÊ“NË(x%;þèù˜ãòU­ð÷ŠŒŸV:¶”œ"¯+²ÏƒåñoÄ› {6òïEÖÈ›ƒ´2¾Š7±nÀÚ¾¶×>èþý™$ø¢n¢o6îþäJ#?2³³ä(SÁ$}j†Ÿ§Ïâ-rÇKY®Iò¢ á1“œdà(êyÀë_B|ø ‹Áo%¾Ÿuynh®öðÊ£!·NÖ ŽÄàã¥oR:1r{œŠ´ªO’Úh{›MÑ<ogâ‹«ˆLð-ÅËŒ„ Wi6UG3Ú¸Ï ü0?|=ªjÞ žðýÅäP_ê2DívqJdò-ØòDŠ0*‚G½^Õ|mmá›ý/F—]µ¾¹Ö Ë}y©á.¦Â6Èã 2ËO šæ~)øÇÄ–ž„ÞÝ7NtKX^H¼öi6±hc…>s¿ó6€$^55¢z¾ÿä}’—òžaûNüY»ñuk†æM7÷“N±ŠÚM‘Ël¡yp8,FsíÅTø3ñU|3ðrö}rÖËWzŸöpµºRÁ?p²,ä1nî7g!”zV·¿fíWƾ4‚ïÄ:…¼qêÊæþÒK´9Ue,¹›v矨Üü}Æ–ÚGÃë[hÉde…|ϳÄPŒÊ¯²á€ÃIÏW­ËF0TÞûžLªÎ¼ÝHì:ñÄñ|A³ŠoÁªMyýš‘jvPÇ•-¿'Ë\nÛÎ; £à_ kÚ¦—ãx|½RD¾3kÁ€À•*|Ó÷23‘Ž {œ?u/ Z.à[+O hãk¡ –þ`Ãï¼`á2A8`µç,ÐõÏ |F7ÆKåñ6†Ðy…¥)lñ°pW §l…x%IÀ žqJ•xI8FÚyêc‰gz‰žggáS×îeðõôSqæ‹e”C•ÜF6žÀwˆ&·~|^¿øI¨(žÂí,Ü3˜äÏîWqÎ1ÁÎ2?†»[ÿêz—Œ’/Ã¥hÚd°ªË|J\]DÎK|¨à¨ 8é\¿Ä¯OàŸjº¶ÞÆbH®f†(£vä1 £!†AíÒ·uuÊýïÌâWÏsªøÁñcÄA¶·Ò öWJš”¢éD’$MU ¸;T_Žà}+€·øO¬ëZ%Ö³áÛ«‰è_ÛÅ.<ÐI=W‡È9ÁägÍtòë1êú.“¬xz[•¸cF¶•×`‚1÷ rN'G\×{à?诈Ƶ%´Ú}Åò ;:;¥’8Ò>¶076I!€=òk“Ú}^>ìN×8UI™_²ßÄEø}à?é–Ë-ÔÐG6™Ëm{7?z-§ï+6N{`ñÍSø—ñFú OMƒâ›ˆ<Ï6K[+,BrØTPj“Œ—=ý+{âÁL’êº}>úD°ÞDŸ,ìÀp8#¯·Zƽø^$ßµúh°ù§Fœ´>t„|‘ùŠ2ŠNyPxÆüI³ñ-çŠuíf@÷Ò[‹gI]ä³…6Åü¸#€¹Ç&¼cÅ:޵ãûy¤Ôžñ#34H`.=“ÇJÞ8Oikh1šÞç¸|ø'Çï¶zis«¹µHí!QšŸ2O˜ƒÂÆŽKøîkŒø…á‹‹ž7ñ-ׂõK-:ÆÞñ§šâë/ Fb¡™Æw±£Ö°¾xÂçörK›«8üýsWÒ¥´†RJI§Ã1Pîþ'Q`O­u~øKy¢ü7´ÿ„>͵/xÇ:†§HûŸÛö‰K¨°T±)\òq]*?W›qzh—ŸsšX™×‹‚ßwèEuà~iƒGø_«Ku%ê%Ω¬’mâTÜ@ò˜áŠà¿k˜ø£ñ+A¿šÛFðf‘5Ëù+^KÁ–\Z!ÑTñŒó×5è¾!¶Ô¾ø:âÝšÓÄ:ýÆÆ–4Cw‰^0r3Œ ü×à?‡çÄ!–çâf±§é—pÂò­¤ðŸÜà‚¡F@?xqšÒžî¬ßÏ¿ü†µÔTRµÍ_€¤¾±Ôµ]’µ>D,&9•þmÀúm#ó¯tðÜ÷:6“"ê qªM jð6Äs»îÕÒNìö¯ðž•{âM{SÐn渒ÓOoµZ.âæWù‹‚F~cž‚½®îî?½’+ΰD мÞY|ŽªzwõÇÉ‹S”Û•ŸùPjœ,|{#=ÑÂHÈç¥jéÖ"Î&žØþ*tøÁ+ºNœŸçMiåóùÙÛœvQ_JîôG…·fí´ @ÌäG‘‘Ç4ZjßcfKeÄc«ž úVl7¼DNÄ‘Üÿ*ž–s‚ÖàqK—¹Nz+ •ïn¶AÐ[©?½uþðÀšU3©a×øk/Ã^hæ l¸-ŒŸZôï h%#¾ùãÏJεEdΪw‘sBÓ…¸M ÂýkvÃ+%²3ÈØÞý– µ†A"ÛX¯›1à·h‡½lÚéÿÙV¿¿mÎÜ–'©¯2swÔôtIXŽêþ?hùVó%gÔ×ðMœ—vŽÓÈiRœãÝô®fÓO:·‰aMdyÐÌÿ»sóí]¯‚‹I$é£BcˆÇæ-î}+ ´£w¹ÑEI»£DiVš, ˆã72¸Ç$Ÿ\sCø•Âhñ][ ™|S7u¸ù³7Ë»ý”aFp+·ñ ÞmŠDñÍ3|­åŒÈäýÔ_BNyŸˆ/æñ7Š¥ÐÐ]ÛÜÀà_ÈÀ1N9„œf¼Êm¶ÛZ÷:ZNWHÍøª]kšm¸–;)0nn³åÆO#Œž˜¬Ÿ‡¾^·£ß>ŸÑZØïŽßÏ;žY6©÷=zŠè¼EhšåܺG‡¡2Æ5ÈÄpç©8êEz†¼„üke¨Á ï<Џ;€<ô÷5Ñ)Æ2N÷}=±ø+eýeuâ©áhtøÌœ€ª%=†>ð€~µ<Ísqn·z$â5•|‹u!R(ÇVùAŒúœÕ߈ú©Öoì´û7Ž(•Õ]Êã®1Øýk‚øñq4Öz=¾–òÆö×K4kmîv• ´uçÓŒÑÊ¥£}Ìy\o$¾GûEøVñÖ»¡YNR(%•¼¿/W8Ç&½ožÒ¾x@½ÖL¥ÚÍoöVÛ¹ÚVÔìå³ëœòq^5/ú^¹åüCw²•.74÷یª;à~µÝMñKð¾¹.«épÏ#alŠæ"3mÜ äœs‘Ò·©MÊ ’z.Ã¥[ê©»{Ïï9ýGAÕ|Kâë—ÐoN‡¤K>ö¿i‰"Gî``NÄxòsX^5ÔíüW¼ÓaXµô‘ oòb$o–å‹}ìŸ^••ñƒÄ¿ðŠksè¾Õ®/ôË+…™|×_-9aµxì9ç"»{ß ßÃ…¼7â{+tÕïæ‹ZÔ# Ròf¸Œ¬1$j~a´îÚ#8­mɵ·Oø'%8ª²f×~ 'Äx7M¶ÙWRû,ÁŸäcn™å±ò *œÓøùñ;Uøm­Ãe¯Áj4kÔSu}%°‘¤}™Mü¬ràŽõæß¾,[|&ø™&‰áýÅn<-³§ÎkŒ$›O ó8ëƒ\ÇÄÚ÷⇃L»·L…îd•·É,ê¤y€ôEå°£¦NI¬áiÊÒº"¤¬ÜQÓhß´,úLJînmîe·Õu´m2âÚ²!$`=ë¡ñ÷Ã+Í2ËN}óc_دÚ,-®d: ES¹äg-»¦sÐ×—ü6ðºéºµÖ²ÑF¡ží<Õ*UU»nÇC]m§Šõ-+Ä^Õ¦µûZÚ¶´¯¸ˆB«öYÖ@:e}*«ÅÆ\°yxhû9^jì›LºÑ…Œîš–²ZI3ê÷UòÀSqâMç'9ÈÍdéçÃÚf—8ÓuýÂ*öÂEaÈÇ=“ƒéZÚî§m&ƒ4”O½yšúä´fO·Hp¢4_¼e‰ÇWë7šeäÃ[²V¸–1%¼Q.À7qóÈQJŒeU¾i4ub'ÙJ>§C}ðŽëI±Šu´K‹9”<2Çó–dŽœU ="ßS¸Kmvq¹8w(NÁÓ8 çô_ˆÚ—†¤Ab× Õ]wÀÉöé]ŽãÿøÇijŸ ‹`#ýÞ@]ÍŽI¶?jêæª•¦®¼Ž¡¤ ìføÇáªøœ=ô^!Òç6‘¤#+ìA…@6àqÐu«>]ü5Óíï4-TßÛ¸Mß»ÚÃ+Û{¯lû×a¥\i0ÆmÄI©Ù°Þј•§Þ à÷ô®÷F¸Ñ®´‹dÔ-­"Óí2‘Èãç,Nnby®Z˜‰Å§­—¡¬hÆ¢ºvgËÚ®¡ óÍ{eÓ"ÎÝŠû˜qß<‘ïW¾Ù/ˆôx{Ã2[Bb… â’N×'ë^»ñ_àÕŸŠ4V¸øk¤ZÞl¶Ë4pï}æýüwÆy¯ðÞ‰0ð†¡áß ‰5to «C$jY 1Æ€ààt®Mµ&y[~ÝÒüÇ¡¯YøáÛ¿ éö‡Jš=OHkŸ.6.ÀBèRH¿!“ß8®WøŒõ›Q¥.esr„ˆáf‘œ–Æk²DãvLàÛ²Ðà4è¡w™/¤(û ÆGBÞ”Ë<%áCgaÎFr=kSÄ~¾ð®¦ñk¶óÛÈ„…ó©qêê*œr(’¾a]§ÐJ8$€Ç Œt¦xká¶­â/(øio¬Ij°²MfLFÝÝK4e_ì w¸8®>ÇGv»··óZáå â6êO}koÄÿ¨ñK/ƒµ{¶¿{g³»š1¢¤ª¾dhÝJ’88¬œ\^^ˆéŒ®¹¤´=Œø£EýŸ´xíîM·ˆµ=R6îî·¤g€Lq’uèsÓŠíõ¯ÞXiº\:T†-Áƒ[ŽZ7G.¶îMã/† dWË:õíî¡¥¬¶–ðÛØÙJ³Ec!‘†8g#-ëŽIáÍwÄ^*Õ’8æ¼»Ô.îSÉîZy@ù"<ž0è8ÉS¦¯-úPÆËáŠÐúÊÿãÈðï‚àºø‘¦E¢¼³ªÍͺIA$(ˆ0 È9bØKXµcªÉ7„´E{8¬ÒkXáE,GÞ,X¹9*Oð¯ =s^SàÏXüUÖmßâ¦`mô{IåÔ÷1„9+´­ÇJ÷êºuׇ ›JÔ¦²ŽêDX_k¾Ý¡ñÔ(èq€9⼚”–ròëøªíkeÙœdÞ:·ŸÆ— ·G|2a¾µhƒ¤}ð zΓñë q§ÂÉrážEˆ!ĘØÑ>ï<~4¾0øå¦O®Ø¾±ÎÖ—’Ú:¤¦‚5(¨âAÃŒnÏ®sÛžòæûIÑïÓXðù¶¸/l$shàLŒÅŽâŒTò¥FFIì+U>Uk\ÆQ„W1Þî)õ+)/¯Q5âê§Ê2üàóè9çé\÷|ÍkËÙ0[_¥€…ßwÌ£“ƒõÁ5¿pš&©©h±Ü¤þMµà¹šfbÄ‘÷BàeW,yÏséW5è.5Fs©´R2³¬P¢…* œ‘ø×5\Ê»%K4yÖ¡g.£Gq¥<2Z]_C FìO4… Ï#½?ÎñwÁÛD¼º²+'žÑFJ‚wtÁäøéZú΃6¹öÛ-cOc,¨ðÉ„U2Y¾ò°È÷ô­Ý6{}[N´Óµ+Ïi*}¡å(|õ9sÙ·²ÿõë¡U”=賞POI- ñŒ|!%”›]æ9 œíǯåY‘ä›i´c€W$öâ½Ä? /n|~¶³Â–-3”ˆÊÂ5‘GpÄá=‰íéV›àv¬%1éÞEÎA?$‚CÇgÒ½(b ãïKSΕYµò<úÌIlQ$up~ù$áO·µPÖõhàºH±ÈíÀa]ˆt ï¶Õâ–Ô£a÷§Ì? ä.4Õ’a$ä3d•?ÅJr—5œv³³jEkÛénX° âGÁQÑj[(‚ZeP>]§Œ­Egq ^”ºÎÐqòñ“ëW-섎VL²g ŒŽ~µQºêaÍ/Co¾»ñ§o¦xnÚ[ÍCQq0 Ý#1éóŠÆÖ4 VçGñVŸwcworÖòåRTÆå2¤‚ppN:Weð+Ý ã«iz™Ñ¦µf‘'ÈÜèT†ŒuåÇËÏO®+ìø ÏH7¯‹í­5{õwº´¶¸ÓÄßÙÒ¾98.ʱ|Äd`õɯ3˜¼ æåæÓn·:HÆ-[_/ò>ðχfÒ.;HžÒX‘°0?1'u<çñ¯]ðÄ][éÐiúXºÑ´ÂÖðI¶KË#ù²³04ŽÝÛ QŠö­[EÓõßø‡Ä6—‰©¥½¿ÙàHÂÛ êL’‘·ýÈÆéZ—©âÇKoÅ©iñÚJÁí´³ ~a$ŒÈÀUˆ2€HœW™,æ•h§(k×]‹¥Z’Z»3ÅÀýgÄWšþ¥}-¾ƒÎæŠ ¨–YåA!Elnù‡zì´oÙßÃVYjš”—-y«ngX ù@/ŽN?† wÓiþ%ñ°×ZYÅc½`1ÍÚgIúTíRI-ƒÁ®ƒÁ³uÖ­ñnkA¢éòÞ‚Áï.É—*¹•§„d)ÈÇ é^e\ʬ£+/#J¥J¼ðÛ¾Ÿ©ƒàZüðÄ~øp—QƳ´ÓmTÈÁس7\¥w>ñLJZÑuK]cU¹ºÊͤ°ù+· #Êଌs÷À8]ˆ|!ðëÀÚ”–>&¿ŸX¾‘žÞF°@žtX ApìUT‘“œýÜz é4o…:RKŸiñè@Xù+©_êrI„8-#&à ð«…\e†ÐI¯7Ù©Þz§-ßsª†Ó›|þóÞßç±ÁY|5ñ¦»£jCEðö³qm©Âiú$8†DêÙžR®XÚ0XcšÛð„®þê?ð|LÓàð½…’ÛÝÛi]–¼*s¿ £Ë\Œ õ œpqüsÿºðŒ´þBl´Í'M6š»ÞF°¼ó´¥0¦rÜnåŽr1Ò»oxÄ>>×­gMÕmåF¶ó5œË÷$¡S÷× zõíWìß'¹w¾¡J®\Ôáw"+‹Ø4ëÙuømgµÒ…ªßGp"¸—l²²)Bë·Ë]˜J…9êyFàÝ7Â+×îüarú÷†5MF;Ûý<Ìl£ò¢icI"Ä2áq·$(Mmøãâ“ü.¹Ô-ëU´·¸³Xä -íÀÿ¿¹MÀ”FÃîS÷‚Œu¯8ø[á9µ? }®ã^[“ÜS}¹Ðù—ó7HÄ$ílü –ãæf¾ Εdío™sƒÅ.W¿Ÿèu¶ï‰|AûPZizoÃÍ.Ïž Ò­ öÚz7—5ã0 è[æfW©c^"ÿ¼^g×µÍ #F}ôm7C·3LeŒ•C¿ÞŽNÔ-œ7Jö‹¿¾¿ã”‚Âce½¹:µÍ»}­Ÿxè¶Éb®6ãæ'ÍnøOጾ)ø†}Gâ¹ðŸ‡|± YO1ûuÄl 7*K@~÷ÌH#<†½•ZQV•¬z4pªœR¿ÉþØë³xWLƒ[Ò ‡Ã~¦µµTóo®Ä€M å–P¦4ˆ ƒÈnk°Ñm ÌÒêv2éÖ÷#ÊŠÞ@«"sò„åd$‘·qéï]݆‰¤èöú_…ã†ÚÎÎt$yEF•Ëu~§9'qä“\¾¿âƒ× o±• tòÈzœzâsæ•âŽû(¥•o|»-=“ObÝWy%š^xË6O±ÏJ©m¤‹=6D˜ˆçºŒ 1u8ùC€*¡º:…»<2"²Læo•W ¹Ç®3€{šš÷ÆVº&Ÿq©jå¡´Y£´X«Í4™±rsò‚GBhÝJj+r]WZ¶ðÞ‚‹¨º.¢·E›2Èàe¶ž»‚äñÈÅ|Íñ_Ä÷?µ]gJ»³ðZA%Õ­ì³5Ç—2mÙàg{©sÜŽ¦½{ÅÖÚwˆ<[áýWĶ—"Ýaîëf]— Fƒç‘Š(>µ•ñ/á¬×žŽ ­¶˜ßÚ\Z¬~ZÅrí2y¥†æ•–2A'€®ª S|Ò9j~óÝLóŸxÑu9!xü§[¿2I†6(`9POÞ%»þµZñª5kØ_ky7fhbòÆdÚÅ6\žGJå¾jöúMÍüWw0_2e°·¶ˆ°Ê%$ðàx8É\ö¥øðÛYÕô«{_Iý–59â[–o–èÛ¦¡„•obWûší›NZô¨¹=íÐétr¾$±Ó´ý.{›Øo!7“Ïf!fÁÎb,ÊW <œœÖV£k¢Ë«¶%V½œÎV—‘ÂåFÌ86÷ÍcÅ«Ù|&ðnm¬ß¤:–¥{}.;ÈšþÝy$¶ÒW’È£#– qŠÁЕÎþÔöz÷ǯŠÚ€–4…­î¾Çfä(KxËs*¯Ý;É8Q W¬|1ñSüñ Z_ÃíWÞ…à¿¿»¹Xbš}¬]HÚL—o”½zWâ‰/uûJørãà ´ëÒÆ6Î…>Ùo2e·‚yE;d+ÇP)P›„ãÊ´W=MjRÖÒ‘è^𓤥§‡l`vƒLF¯œþL{”y„UŽæäw¯ZÔ4;hé>#ß¡ZÜBª>Ë!/|0ÎÄž0T ü£ã'Æz,º‰¼S¦_>³ý…+¬zMxþÒ ð\‘ò¤a$bFx f¼‹ö”ý¤|CñûÁ^oÏœð»ž8NÉ"™ÐŒ媪„ ää³SŸ>%¨ÃæÏ;Iaï:»tùŸ´‡Âï ·‰å½ð·5Ýæ¥t°ÁmrèIÚQYÏDäpv€I8ëÞÑÿáVü8×tï,7Oá›üJ «ƒ‹,6›ç`äæGƒó/Ä;8ZÂÆôÌѲ‰|Ë&Iq»~ìþÒCûMÅyû>Çáÿ +[ëÆ¸Ô£}Ìሠ*9<¯©ÇVÀÆ =®j”ã+ØÓë4a[ÆÍ£Ñ|7ûR¿†´o.êÎKQX#Š Aö¼[ЂdhÊsó sÇJñícPø‹ãëä°‚ïTÔu ™.(AwvrNG¹®b;ë‚C[³¤C$''€ëô¯­ÿf„ßð¯üws=Ưª*ý®‰^HùP<¤óÜ~E.}«cO½£ß¢<ébÝwì㱉û>~Ívk¯XKã¹á¾Õš{•eómtõSұሶþ€šê¼Sñîø_VÖ ÏŠåÒÃO41îkBøX#q€8`ýÈö¯žü«ñÃú†<['ü#ÚG„"ºiïù®s4’JO€R {¨Á'Å7<\½¤—º¿­KN8lÜŸ—Üi~Õþ¶»ñ‡¼wà`ÜêZôË©%›ónªÂ@^˜ÙÐäd~løRš…¯ÃígÄ?/•¥6ií2É)¼•È]ñ˜¡_˜¯R1ƒXÚ÷Á­;ÄžVѼU§ {‰>æÉ0¹½v‘³Ð1GÍÏ+Ü|_¦\|7ø€¾;ñÕÕµÖ£Ž(t› 5HôehB=áViÑåí»ð+i¸Ó§7w鯡Ï)N¬ùä’²ï¹Õx?Iáþƒ¤Éâ;)¯¼M©Ë};M‹ÈY•Á"IãpãqÎàâ»7ãøWYŸNac§O¼nw³<·×¸òaJFW –o½ÔžqÚÏŠ-ô;Õ›ÁÚ~£¬=„íw?•pÒ\ÚÛ´{|¬|ÅæË1(Ê[$)~ü'Òµ ãÅ_$Ô¤ˆÊ;gº{Œ¤yQ‘Ê åŽNOSŠó8Îî£ÑšºþÍ/fŽv}h]뺅ÿ‡õÙ.uýEvÝiÐ@n/áØÌ—Mò¢ð3òqœWs ý·Ä:Í·Šum[½V.H¤¹7Wq–ÅÀ"ÆqŒœ7®£\ñ®áïÍið×H±Ñ4‹ ÷7s;­»\4Œ1E÷ß'–r[×9¯ ²ñU¥í§Šõ\ÊF³°‚_³‹f2• '3; È'5ÛB/Eeé©ËŠ¯Í¬¥vixWÆ÷úeæ¥e¤›;@íIË\AEãÌRr$£ÐpzW%âÇÅ‘O¨ßFús™ 1¼Ž]w¯,Ïnã½sú7Ä‹oé÷g ZÙ)¡˜Ç/œÇ÷›7‚ é• Éâ½RÑ´‹ZL¯¥3èÚªÉiAK¿”³ƒòž9ìMwÅ{Ýé~§j)Þ7Ðå¾x’O ÛêV¾)†+Ý"í1•wEpÑ’j¿û,;`W¦Zx"ÃÆö°i I4»û¦hdÚ¦Û O˜¤F#§Ðšðx>éu[–²[·û‘¶€ˆ!çx Ç'ë]¯Â߈+â  =徃Z¶ºól¯-Øù¡_ U¤!gä`šU迎 ˆU”_+Ø÷+ëVðf§ö!¯A5ü–QÅv²\ ·| áºa±¼5{i®øFÔGñfÝŒOwöøÌwbe );@ðØÁéø×áÏ,^ þ×ñ¶«ý³4W/±RL$À[¨¦ìHã‹?hË¿xªi¤Ó­n.J€Šë*‰Üäe0@FxÍpÆ”œ­_^Ÿq×R¬uG¶\A¥x¦XµM+SÒj©€%QX2Bƒ,Tî< å¾-øgÿ ´humWMQ:=§“cÎï±»ðwÈ£ïØfÏS׊ÉýŸ~<ßx“_Ñ Ò¤³³–)Ê[;¥fx‡Ìí"FàK®1Œœg Ýøáñ{Á^ ¶Ó´ïx‚MWVŠLÝC-£ÃK„mq†ÈÇÓµT!8TJWAN¤¥MûÖ<³à?ÁÙ>;x—\ñWÆ»èô­ÊÝîçšfÉ;Ÿ–(Pú˜^€ W©ë>)Ô5Fââ;G³ðåÜ aghŠð¢F"$rSäÉõ'©ÅcøýnüjþÒn¢û6 ñD¿;êãÌw•xؾUƒÞ¨|@ñz\©‡Ã67r5¡fX¤bå]†ÕU`NžIö÷­ªsUšoä» F1mk}ßèXñ—ˆí-tÉVÊiàYãdŽ8~O,tŒr?¥y«Oâ_‰íPê0Û²²BÀn9Ýùùâµ®<9ñ ÆÑiZܱ[Çoq4I67a~è-±9ÀÏ5µð·ÀÖþñÃiÒjÊÒ7iDÛcS0…:ðIü­oª0m½L+Mͨ·ÃsiàêÓ‹ .5 Í7dŒeóB˕ګÎ;‘Îõ¬ïj_jñ™âŸ=e‚%uä£I?ÝéÅuŽ;£w©é‘ÃbDßé/Ü?s¤cæ5ØéZ*Z/”uaÌ×5\DV‹s®žÏS+Ã[2Ã7øÔG§µ¾Ø¬‚‰Ÿ°9Ç­^ðþ‡ö÷ÑãÎW>ÕÕé^µ´VpˆåØòx¯:­küG£ LÄÓ<<,íQ‹H˹Ÿ»«®Û‘,ÎKdd¨ïõô®ÇS„iE¾ÒYOÌÀç¾;W3©E¹Ã®ÝÃ'w¹=§3¹ªKb+H{fÝm›eÚ!HULŽGÓ®ßÃVÏá¿K#CÚÝ›óqë\ƒ.aìËfìâ(ˆwß÷ryÑêšüq“ywn¡SäUæB?+óvå¹ÓE(«ÞÇ/­x¸ê7µ´³Wº˜I’ŽïŸjæÿh_øma·´™Zævı2f8: òO½hêúÚh:çö–ŽZ9挪K°¤ô òߊÞ6¶ñ,Šó™oî–CçÉ!Ã3~ÈUÓ§í%Æ79±5”-êÙCUñ‡ˆ5%UÉàD¬h7zÿ“]/ƒ<'âoŠ:¥®à-6;4+É$gb'?y›¥tß³'ì‰âß c_€hú Âýûƒ‰%^O8÷¯©m$ð×Á;ÂðA à cÀfnù8×f*µ,+äI9vÿ3JttN«Ó·ùœ/ÃOØ£Â>·†óâŠ[kúÌ­¼÷1¿_•OÞúžõèþ(ñ<>Òá‹NO±Û„ ¶!ŒÃ¥p×÷Z…ç´uk”¸P¢4±+õ#зòªZÛOâû§¶¶–H¢ç}ÄçžÕåN¥LC½I’ù-¶”`´ìºŸ‰"Ö×÷q-Ä$ò’ävÇzó sD½ºñóÂê.äbÁ"!™Pp3ïíô¯[Ñü/e¦hÎQŠ’ 'Þ| ~¼éõ  Mtš Q½ÝÄŸëTea\}Äþ½)Ò’æ´B¢Qê&›ª¾ŸiåXù©%’y$ÃçY[#vGñuúVWü·zƧ-Ì×72ÄæFgÝó‘ê9Ï¿ZÛÑ>j^(И^ÜÝÙÇtÅäb€É·'Ï×ðÍtúÍì¶‚ÎÑ ˆE‚€±¹sZN|·IêK—*¿SÏü;©iß ¯ïdºŠhÏÙüÉîró•ëÀïë^[¨~Ù׿fm3ÂlзœÅæ3c͌ǀxçßÑþÔþ6ÿ„À:ÆŸe4i#·X˜$yÉwÏBzJòŸÙá.£ãmV#ee#Ç?ÌÎÃh€ž={âºðÔcZ2«S¡ÃRSEN/Ôî¾xKÄ~2ø¡oq6¥¥èÖNâæbÓGfŠ /´rÌx’EvºÄMBêÞ𽙀ÌÁŽ«2O #qŒžqë]߇|º×€àƒP¶Òl¤Óæ–òØ@ùH¶€ªÏ/ñ–^qØŽ¸À¯"øßã­kÀ¿.$Ð{é5èiö²•vRFé0®ÀôíÈàõ§*ª´”]t„l¿¯Ìã¿h] PñÅ éz†—adð´ïyq鸎ü1,ïÀ µ NìõàW1ñân–úÅ­Í¢3êÖvBÇ|Q”Ž0só–'%ÎzŽÀ®£Ä3jø_}§üG¾i¼S©Ü}ºúWa,¶Q–%ÏL“Ô ò¸¾¿ŠîB\ëvÚW ¡ (ÛåÏ “ÀžõÓI)%ô]6«|×݇ Øë>/³“ÆÂx-Œ‹2åO—0 8sÙ'ë^áâoYiþ<ñ³ðcXQ®]i2´O=ê‚¶ìÕ7Ê‘Fß¹5æú3ê^ ð%ïˆ|_hך=¼Ë¢Ø¡fX¦•ѱ‚0J&21€Hô¬ox…tÛ³^NÑoTó%fÉ)öë§©­zÍë¢ÒÇD%ì`”·zœ­d_H¼þr“ùœ°}ážüæ·>_CáýQ¿´`IŽõ¸ó%¶$|•ÚxlœuúVˆoZõ? t;«_ Å=ì‘ÜiVòYNÓgºÄ›x1£«ªwlç"¼oZŽÎ BF·Žq )ò'²ã© ŽH ©¬p¯™i¹ÓJzËcq¾\üOÕ”iZ•¸ÔE¼BUyæ?”€Äã‚3Ü×)â¿…Óø>õcñ¤ÖwJÍù0»×ý®‡ðªö3º†%´¾»‰É!Œíè·§ëÍnÍq ½¬×°ÝY¹röó9}ŽFÝê¤ðÞ„{Wo=H;]Xää£%xîrz§Ä»Ë=%wŽ¢À’+½€É$‚øÎä8?)ô¥øwñJÎrK‹ºMûG—HÔ™û”=œç?žkSã_Äí'XÓí,¦ðÏÙõVP÷œí"KáE\íeÛƒ¸Œó\Š.2ä¶ŒèœÓÞèê¼Añ'IÐÒÃMñ½§ëÚ|‰‰Ú,À±€¨ÛCÆÄäsü«šÔ„Ú5½ÕçÃË6¸¶wR"–ÜL®¼ä#óœc?×ËãÓXµÜ­ö‹p°¸,9%K ¤`z ÍžòúÊõck™ZÛq1€ÄÆ ;V« mÔÍb:³W_×ì¤ëöÀžS=³À0°¦?½Ï#'u|õib`¸XJaq¹3‘ó}­t¾ñ†µ£ëki¦OçÝ]¨¶‰™Ûx,pœõÎ:Vsí]7©ÓKÍîÍhVø‡ÿ e‡›s㸼żŸpí%HqÊŒté\ÈÐÿ¶¦’MþZùDV¾°Ñ~\x¦Öâ×Å£LÔ¦´µ2ÜËóü¹¶q-À#¾ø5ðŸÀqü6]^]s-ıīn-D’Gïâ烅ʜŽN+XøE4×¼¾ãW•T”“¾ŒùPðÜšdØÔad8ÆàÕ}ÒC1{Ü”PÒ¾ÀÖ4/hÚ·¼=ÌSÞ=šÈÛ³*†y@*ƒ'Œf¹}ö]ðωµE‹Åö~ ÒnmYî×N 4WÈ »´Ò ÄF3‚OQZ,Êœ—¾­é¨K'ª¥Ëiæ|Äú¤ŽÌê™\üÄŽ)·×ÑMkò,©3q» 'é_Fx–Óᇆ%½Òü#¥ZOªB¬K]G-Éù£BeÊîRË’#½yÄoi0ëh|o-­£¶ÎógpA.ёȕ7Ìlö­(âãUÙE¯SŸƒtÕã>ku¼÷ y­æ:¶vj³e~÷7L’± rsïÚ³’AäKŸ¥H޶£2¡7\vÙdõ<ä×S¨ðî±&Ÿ¨Ë=°É °±ÀÎqŸ^:Õ©'2×§½ÕeóyŒ¬Çdà`ú ç4+—‘¤ŽÞOõ¸1À#Ú·4 ¶Ö"‹W0Ãjî ™<ŸÏ§ãQ$¾.¦ªVit;‰<y Ék%õ¼­ou¶Ax+pŠÀç##†ʲ~+xºÇÃZ­ŠøöóR¼¶ݽô€Âm.·uUêØàolA]Ž¿ãHt$æú)àºU¸D´œ=Õ¾À2ù@,d àŸs\OÅÓs¬­–§«›{‹}EZKIã„DÒ %réä¡ÅrBN¤“‘×?u4™§ÌnÕ%vmf”„bÃAÉç®FsÓ½zF±â¯ø@ü‰ðãR¸½Q’g»º¸Aæp˜U\åTa'ï`ñK ilæE?p¤Êšî-tÅÔm>Ñ?˜Ö¼#Kü³8ÏòçéZV¥Î•öÊÚ¹SÆ·Ø/Œºd3AsåérÛ˶Ñó«cî’8ô­?øûGÅñÞøi…»im$3·Ì–5BÎG@ †ÛëIâM.m.Þ?#-¥Ê‡·¼x³¼ ‘ú‘×åñW>Nòx’ôƲ† #öÉnŠïÀQŒ²wc9ÛŽÜŠÏH¤í±jò—-÷=·ÂŸ¬¡»ûrŽôòÉ™¢fVÈlf ár+Ï¿d¿‡ø­ãíZ_‡VöÖ’iº¬‰–-ÁŽWy ¾âpãå8V$šÎ•âÛM[¯ùž¤p´©Ê1£«ó[žà>;ØZxvææMBµ¸¶T)"@îŠAí.,w*åz’+çm?á¿Ä_Žž%¹Ô¬îcÐRw™­-å%š Àá¢VEÇ þð´ñšúúßàÇ…ô_›nÚ¨µG’9cÔ¤2E ò¤vP½6þïî«:Šô;C¨xnâÒ&;hö[[åF3÷„q¯^ví€>µ¾­:i]þª°‰ÙW#ç‡ÿ°ÿô;I¢ÖüUjóÂDP_“$¬ˆO͹åf9$z s^›á?ÙÿÆ>Õt©µ-[@ñ–‰f–ñØßÛ:}¿åÞð²=3òó´sÆ+×V('{y›ÍExÆX‡Q€`qÓÓ“ÈéVáº6ê³4j¤.Ð7nÚ3ëúþ4ªâ§YûÉ}Èëx¹tùŸ>üdý“µ_Š¿$×ü/ x3Ã×Ð »°}ݹuBH²ÙáC(8=kê_|RÔµ]Xi–]®¢ö)keuq1™í›fÒòFªÛ€B‡ÆG&¹Xo¤™ mÍ… }Ϧ>¨c5Æ B™öÄ»JŒ“w ç8ÁèGZ×ë•¥Kéèrÿdᮤ¢î¼ßùž4ÿ±VŸ‡ôí>_ê[l­á¶’ê(—íWìŸ;¼òó3±,ÄsŠì¬>hšf™­Ý´÷qÁÚyö£n?6Up~lcéí]Eä_cÉš@>lcüâ±/näOöÒŠ¥÷¦d$ uã< ¦xŸi&­}ÎH§{1§xfÞTðÆ“§i¯3Ëkn‘žO' y­r×>0¾Ôf¼†[x¬^;¶ê.yñ>c€6’2çžkK_¹Ûb[¾ë¿o™³Üò>•…ª] è—r®¹<ŒÇŽ™>¿LÕG]XÛæÐ­«j±H`‰£%®÷Ê8QÏL¤‚}°+”×u‘j­ ŒI¨¼eÇçRëdj·öòèñ7ÎåC pÉ$#޹î+—ø«ª¦DNñGæn*Úqž =϶q[Âf3Ÿ*±5ÍìæÎÊêGAr«Ã2‚&'+êG ú®†Ú=¬r¼kâFL »,@µÂtÜqÛè+OÔ.u-gOKŸ.;xÓU%˜p±Gë]f£q}qdíVv÷a ªHÞb Q‚ß/n+FùtG?2¹ÌØ|*Ôµ?Í ÞkQ5ö¢$if„4$ÛŠ&:/øA%›ÅtŸ¯4O‚ß Y¾&jE Ã¾TùBâæ^ŒÃ v°L„ÛÁ'ŸZܼ×4/‚¾ þÒñÌv¤‰n/g3ÜÊÌ8a°™É8Ú2qŒ`WÀ_¶ïí¹«|cÔô¸¼#$Ú|zjÆuÉ–ãfJ·”åŒ@§'’h¥J®6¢„>êÊ•Zx(sý¯È­à¯ðÿÅy£Ð'’ãO½D†9æ· ÆÂfhÃ(uVFŒOs^ûá›K¿kVÿÚÇï’$™Žâêz1# `p;q_hºåα¬ZÝ-5 iD¶²À› *=zÆsÜšû‹ö`øµ}ã?‡Ö—¿bÚݘ·ÃnL²¾Âòå[‡¸¯[‡ö0R^‡—†Äε[÷6¿j/[ÜxQ¬´È4ùo¢h]qf £¬Ë3¿'Ž1Îs\‰® °ð$Éçßù·¡æ¸œÜÇižw$·Ýy2Up8$Ž85è?¤°ñ-•ÝÆ‚Is|—Ÿ½gˆÂñ‚Ò°ÛÃ;m 6䎂¼wÁ~'ðü:‰›Ç2jsèºuêßÚÚgÏ}0Ž`€À–ñ‚ÖFÎÒ¸!w(ÇS\t#' S;ªKÚMsjI¥ü,Ö~ ø ôo‚—Ñj–›‚ê:„SoKÉ@d|œFvŒ'CÄõoÙ›áJü(ñbøJãSƒYžSW¼qj<¹ )hâ_˜–£~[Œó]“ãM7á?‚ìg¹‹JÓùÒÚÐ4 ­½µÁIÔŸõÛ63u$G¯ð|š÷Á/Ú[S¿ø£ªÛ‹-jä\kv— Ëöm.Þé&x·ñgEùÏšRÎuªTr„t_‹g£‡ÃÓ5Qîºyw)j>Ÿö‰ø»{ é÷7º/‡.ï§–öXá!¥‘ܨ pÄ€ýø{U_?Ù~ø¿á¿ˆ?Zîïú¶ºm¬WòDo.¥´'Í@Š@16ár6õÈ®#âÄ¡ðÏâf»ƒtìËý#ÄÚȳid¬Ñd?cŠA˘Š1€¯Œbº¿ÚóI´ðχôUµ´{2}7̶¼Ud¸|I+Æ>g™°zîSÒ´‚—=;lÿ§s¦s„•X·vu£âäu×/ä¸*$‚áÎ"1òEæK"ü¸fÁÝÀ¯ðßÁmVçĺMŸ†™59ö¥üÒ|ée¦)‘‚5ÌØÛ>QcœÁ5Ëüø]â‹í®á=LZÜ–TŠêI‚}Ž6ùK©lçb³0Ý+Û¾5þÐz&—áCÁ?íïm|9¥k2Øk|Ч’XºðùÚH' rzšÞTå…Ÿ%7Í'¹ÁO m.jÛ/Ìç?j¯…ú–•cq4׿oµmRHf‘­VׂóÎL:c œž¹¯ŸôÍìmÌP†0¦1“^ã_аø³\½’{æÕS¹{¨âdpÚ{mŠ3ô'h@ô¨4‹qà]Fù´™5{ÖC6$d'%f(Á'<Ÿ-zg*P´—èy˜Ç EHòHéÿeßÙ?Ä´§ˆcƒÂh!´†U3ÈYSË "ÜýÒÇ?ì×Öþ*ñß…¼­è~Óous\Ôu`Ôµ-걤Ir¸—œ0@yèFÜ\GìÝñïBý—¿g cL—O]ÅÚ¾œÍÄÒ·ê!£l*°Eçlyʯ',Mx/Â?êž:ñF‘c|×:E‘…ÚãRxO•aon–Nz•QÀÏ\g½pW«<]I'îÂ?‰¾K MN÷›ò>¬ø‹á{ ê’ü?{;»‹íYcžöø,‹kmÐ@‡É…^z`ŽkâÌvöþ¹Òþéú]Åνc9ÕŸÞÚÀ$byHÛeRíÜï@ÍÃñßCøŽ`ÐþiWÓø?ÃàCw}u<0O4av$ÎYƒ ¥=:ŒûWñ§â ÷Œü;¥i>‹û+F†YåñöHV9³(K;ö’ÎÿgVóøŸæq\Œå$š>Çk¯i;>Ÿ×Ìê~i¾ð~•žÏOÔ®Ë1–(Ëg"†SäHÃæåJ†ÜzÀ®ká߉o/¤ŸÄ<°Õoîu LÚe¤ ÅÌlì ̲aˆùT~èí€+gág‡/´KëMcÄÚ<«mk`cд«Ë”·ŠÜy¹PcAу+ê Æ95kÇkW::j~$½Ðag2]‹3²óQYÌ{ˆ #R2XŒzt®§ïKWwßüŽ.vÏ¡?…|fO‡WEÐucg/›‹Ëyû ¶³4ŽèÛÞ@¹É…;ÅºÛøkV‡A𤕾‹¤[¯dD2}¢ëøVVû n#vP@É5 ¶øsá STׯîUcÙm§ËÅ ¨Ø %ýXn¯Ý¿ oŠn4¯ü"º}WÄAoïmJGrQšk]φ’5WÍ?t<ƒ €3ÉÚz±¨¶rÜáïô«²wâÍõæ•bñm-ˉïXçt‘–Q“Â1àW‡k²húµÛaÚê1ZÚi­&áÆþŒxÚFAÇ9ÏzúCOðÞ™¢üòí WñÙO%М¸rÑ’väõõ¯ ‡Ãš×Ä+­ZïÆ‰,I<–Á)‰2ÂôUžI®ü<Õž»[õß2I¿²ŸÀíOâÆ™âïm¬tØM¼×W3óYÆ\&O%Tè3ÍsãÂÿØ÷Η4zÃhw«à‡çŠ8äýÚ¹*C0ep™ÄEs5+ݾ¼mSʼn§ X­59æ•­u(0È_9(…RÜ¿|sÞ¹oxjMK-JÔu=BK«–еiÆ#'$3Ç!b•#‘×¶uKë««Kˆì>Ã4{ŠÙˆ$cæ¡™w§Ï)Æ{ñV£ñná[m"ïÅúN¯q Z¸‚édG?Ýg„6‚ sÇwÆ2pwKõ:Ek4s~$Ó-~xæ%ð^¾§Ä61Çx·£FðL¹2ÝÛ“Ós[ŸôÏ|}ŠÛI¸ÑÅŸí줋ûBÎé ·¿¸2’J¬@à±\“´sXŸ¦ÕžÎÆfžÏU´ž/6 ë;bˆÁHUÈË\þÁiw×ñ=ų„½±ž;È/ú©P‡NìÀd;Šß’U!Ï{ß×à%WÙ=Óûµ¼hÚ?„¼/jž.•îd²eµ’â(•&Ô%DÃ,yù6ÒÞÜs\>µ­èÞð=·ˆf;*õû õíVüC⮥§Øø}6æñvüÖRü±F3 €3ü=úW_ªi–zö‹>›wst#—i­Ó*ÈØù7p¤õÁÈÁÏíÓWŠÑùp¸Ê1›VgÎøh.ÂLcbsø­uÚ„a]EÒL±‚Oc]E¦–«˜PŸt"áú×C©x1Zäy¥UŸ».+Ñ©Š”ž›*69ètK{¨bŽÊæŽò(ý뢴øl‘î5"ùN‘¨ÈükbËE<(šlaÁ`H<`zŠƒÄ~7 nº¹¹X"D G´äŠä©[•û§DRŽå‹Ý2ÒÂÎ!n¨€¶r§ns\®·ñVãL¹û-‘·UäQÎ=I¯9ñÇ™5’;7Ú›¾f‘ìyå÷ŒoµRaÑ-.Kœîi[æÁô®%WY/¼‰Ô¶ˆö-wâkµÈó]ÛŒùœqÛë\þ·ñBB;h1}­yÖðçT¾Ô]RêT€ï´ò¹ï]ä~‚-)Sl« ½+nw'€x÷ë[:¤µz’¥9+ñ½í‹¼­N+˜ìfB\"–y: uçšÎñŸÆ]BÀÇ[(Þ_\ÉŒôc^— |%º´x嵸s”ÖðÚõ‘’6´Þ˜'¿ãSÙ[=Å•¼!â(êòòþ•VßH»º‰âŽåäÓæ û-yŽÉît*N^GŸÚhZµ½½Í…ƒU˜C–Uþ ÍœŠí¬¼†mƒKrà@,rª¯©§ÛëMÒ ËÅû,`ÇöX?xYúÞ¸çŽõy¾#Ô—í—ˆ"R DŠ7mÞÏ œ~S©9è´F©B çâÇñ/ˆµÄ´ðËÛEg3˜fbÌÇÇEÀÒè 4 èŸm×ç3^@A *Õ°{}kkT6š@èb#†@åל3tÈ<’Zâ~$øîÂâ;½.êç.èå‰ÎñŸ¸HàgŠÒ2rŠ„?à˜Î²Ž±GO®øâk‘:#,¢o”M¬KŠäžÃþ¥¾‡F•vs…s09“nJäý⼓Øq\GŒ|Y{©C,0ÝÛØiä(¸ŸvÉ:”qÁÇjè4ÿjzž<–6Íi¤[G¶ÚïÎ ¼8 ÿ{ï»°êy8ëÍi* ™³%.dí«<ÚëáÒkš“]xŸP‹P‚ÚBn¢³ÌXã\“ºFn'¹=ëÑ´ÝnëRÐ"ð÷ÃÝ M$×ó´ËÚ©ùnAÏ`H»óVlõ]#AÒom~¼ÚÁ¦´Q™p‘\]´€³8ìƒ× õŠß­´ïÁow«Z^I´´Ël«ö K“µN2øIÎq]n¤ym¢ØÅÙ;E»§YÜü:´Ñô­NKMÚãϺ½Esy# »ºíÉ;Tp¹ÏjdzðÖà7K]ÚZÏý"Á¦¹óÄQò+8O|g>•ÂüWKÙµßÝßK¥höv6ö±Ä,Ì>mœ|øi<ž•ÂË£Zøkáü$~>dÉ,ÑÆ'ÜÌÜyaâ<ÀËuÏF-.g/ó2«7gb§Ž5ïj·¾%¿×õ9-u¢vò´ÿkfâ$Aü1Œœ¿ïÍqÿ5-/½ÅöÛ”X ®×…•!a˜`üØh®kñ>­¦j’[e¹MVêèÉ6ìmܰ2~vŽ9®wIžH-\Zd;ü¥‰ÆEzt©µ®y¼íI_[ñûH|v‹âÿ…ôø ÛLÒÛ¤0¡EiˆÆï°gž™9+Šözwõ#h…õ¤Š;b¤–-ϘÃ×å9¬?]¾‰ãZÉÚ&Hâù¾þÖ-»gàMz |<Ô5=6Ý<g¨jL¨ iy‘ù‹ûÉH\áw@OlçÒ°TÕìã·~ç|eíãη8ƒúD-ã!ªjP­Þ™¡:^^Ç•s ¸Þ‘† 3•È×í>ýª¦¼ñÁâ"m'M‘¡Ó!žŽKKl»" ‚~`¿ˆ–oJâåøw}ag¨G§[Û¦›ákHõKÛ¨ãóHY¤fCü$°?!ä`q\σ¬>ͨÞO>ù­â)#Ý7E†ÎBžüŒÓŸ%git0)ÂÍlzÝñÖõýjÎ9õ-85«”¼•mÂù¶©†òÙI°¡ŸêOһχ׆~èþGÃk§_ÆrÚ$]1¦]‰" Šì#nò8®#âv¹¡Zü8Ò5]ÅΧgs~^F"ä­¼ÄF¥åûÀrp¤qV,dÔWáìçÅïes}x¶ÂFXþC’nL32Ìå‘„!{W çÍNËm½OB‚q|¶ÐÅ“P·øwkg¨Ø®nIFk‹™ú4Få–sʱ$’Ëß=k¨ñï…ü=á_‡¾Ô”ªAMY…)J>NûZø^"ÓaŸN¹Óâ›xImãºöfÎ0sÔg#µ`]xy?´’Ã[A8 c$ƒôëÏ^qÅL—Rêº?`ýÍÄNX Œ*àçêÛ±TfŸíÞ\ŸldÔíÝžy˜´Ür ±$·BãzÖtùâõz›ÔŒ\Uˆ§ÒF‡#:ù†|$èÀÙàg «cQ¸ñŒpÛj·QI~íd(Y×çpúôÇAZ^ñqÕ¼Uöoˆ­¬¯“tÁbÂËè ›ÈÇ~•Ûø«àŽ…§YC©x?R{Aqm,Æ-å+æ ì‰xù c‚ǤR«V0iO~I§Nÿ ù>=¾©®»=Æð뺗îBƒ¹^¡G=”VŸ‰<¨xKYY´ö[ûg&k;ë|n27I %AÇ?Ê¨Í ^êIk¬Z[ÞB«±£P%;’çß5Þ7ŠVÖÞ Çú8km$V³Á)¶.]ƒ~÷žzz4pù¯òJwRÜíf:§Š¼M…{mþö ’íØ‚Ïœ1—=}GÕ½©uÍ.…Þ1“XðÏ™¬[ÙÄ[%ÓFñ‘¶nÐsÝ}+È-u1mâQyáæ[R$vÙóJ01Œt?{w†¾!Üø¿ÂsÙi^j/+ N8Ìj­ÀF”1Ü@ùˆÇ1ë^n&Ÿ$ùâ´{£ÔÁÖuaìå}:œß…~2Þ|Iñ è÷2ÁalC»XÍtæTBBG#—cމ'©®ÛÀº*ø² ޹q¨Ùé:´+ Ž)±{ÈÊía´ ^OPFkˆøà _ ëÓÜXCçÙ^ÌÑÉ'•‚‹‘¹Ö"Ûœà d ôÿøæ¡¦è^Aus«‹dFL)w20ÀÀ ÁcËV)$éìÿ¶„¬œg«üÏ7Ð?fÍ.ÿZÔõOKyåéwSE …ÒàÝlrªc‘HX‡8¬o|8ÓÛÁÓK}cªi—3Ü ¦ˆIª3„m¹!Îçyë_ u¼?á-E5-*ã@‚Ôù— é ÏÌä r29½lx‹VþÜðôke<0ýªC$ŒÀ±·ÊáÇ(pçúÔýj¤]›Û©s¥O•Ý|„k™˜ìŠ9”ŸÞoLúWÑP­ÑNçÌb)rMØÎÒç‚Bð±ÞN2ç½:û^vñ‚]Ý'päãÖ´µïZøsöRGöRæÝn®­Ó žï»àyXtà\ôÂПœ7Ì,{f´N3w1œe )3¥Ñ–çÄ7­¦ÅÞD|¥ÇÊ6œñŽ+¤ø¥ã[mOÂ~Ñô‡šWÑ#™.%yÙÙÛvÕ_ºª„Xz áVùcW›ÂŽÜFÓ¾jk´ ¦¤q Ê9'ü}êf’išFw‚úæ+£Ž/(¨;Þ.1Ðúì¾ø’?]Ýê·%êZÙH,¸ÏÙd+´3G› ¸|g\n‹¬Eo2Zܪ˜óÇ®,ÞUÔÍa¥%r géÓ5oßV3\Ñ÷»Ÿÿ´<)s¦Ü[Eu ª‘Âf‘˜[`çtcøY°>o¯­&,6zͱð¬²[E&#‘ÞRU†>0GÚ¹Í#6,ÎÐy¥>`AÀ#é]ç…ìôXA†âšÇ\õ°Í*›i02][¨Ï¡èj&•8·m Ušmê‹ß¼>ëþKÛnYäßmqíŠXv);Fznfõ;s^“ð+^ð߈n4{ ønÌxØ”d¨e_¼F;×mw Æ™—ñNÆö{+&݉1í;r­‚rßwõâ½KáïÂ{¨aTÐ4ÍúÁ7…¿»‰øBTò1œöõ¯.µXÆ—-Gªës¾i9&ÿOÖǯøïá¶“­ÞGqá©åŸI¹Fk¨§É#\mûñ PBp¼ä×+ñÅ·_|3 ‚êÂÆÒîê+dÓî¤òå‘F™Éb‚€`‘†eŸ¯|U]ÜøsR‰‘Æø.ÙÇh]ç9\ ޵Å?nµ}2Ý|qá[}sIYc%V飈 —;Ž:ýkÆ‹š²–«ätTÌ¡iCîHÎðÆ“§|N¹wÓ®¡¶¤ßlª‹µÊ…‹ƒ´¶?ˆg9M%íí?Ñk‘=­Ã o.WŸlæù†s‘^“¦Ýø­^Qqg¢)+=ŽÕXï° õp>V-Œàñ^n'eET\ÒßÓÈ*ÍV÷g-_oУã?êúv°º¼oe¨j~˜'-Úá>Hs߀ cœq]—ï‹o£Àž‚2nìã΄Û6iÓb«ù6·RÙùy2: õÄ>9Sá­í~‡J¸ŽòÒ8¦šær¯’Ç]ÛØ39Ý&p 1ÆvÖ®›ã)~_øšïÃZŠj:ŵ”&x|†3Ï+›9á€)Ú¼–=àûô(ÇW«{žî (BÏ^ç¡¶³âßW¾ —âu­­ôšfãYž Ym4í*æBÂlÆÙYc[s3`óƒŠö‡Ÿ4¿…Z¤ú惩j:ÕÒ ibóH‚ÙŒ™fŒÒ.Þ9 c å ~Úé¿ü1¬øþk.+ÔŠYm-‹ùW‹>m­€8’iÚÍpÙ]ˆÃ°»7A×ö ”ýâªCn¥‰Žq«µBŽNI$×$ýßrC qN{ýçE¢êXjŠÃ{s+$Ëö—»¸’EMãpÛ¼íQî009Å_³ø“§[†Žh!M< /QܶVÜW(NW~>Rx5É®«ÄO$KquŸy¾Þbе´sA¹X1ÈÈ Ãr29êj»6àT»´ŽÇËŒ®ëˆâ¶K|J®Äž{sÎ=9¬ý’“÷Œž"Ú­Ü_|CÒ4¯YZø–I¬ÒuÛÊm¥n£yôöǯj꥖1 }ˆ4¨§Ô’sÜCí^¬ø×Cñ Xé2—P±ºŽ-­e*­ÄRÆ9Kò€vg 1šŸÃþ+¶ðTòEKk›xÄþUÊÅv$HþöÜ(àç'52¡Ûrcж¯Tzf e±%æw”`‚O@ô®s\ÔŒü¯ä(êÝ0ŸJæ|;ñßU×uùÅÆ‰j4¬,°ß­›×q ÛØlþéRqž}u5iš|¶ÐÀÑ4ò ›ì‘ÜGç"3}ünÃ/Vã=)û)ÓV‘ª¯ «¦gÜ]\íe¸gt|…d£ 8ãü+*ùHÜÈ ¿§1ø}*{ÉÆò7Ó®HfG3w°?À'åQÎEgÝ]'ÛK,aÕ“‡ØwàŽ>nÜçó§ \º3îŒwVRO݈( \õ'“ŒgŠàü{½Ñfk§·FŒ®ÇåU `SÖ»k»$¼·)s´„f<üž¹$÷Ïâ°nôÙf†æ;©ftVÂHÊŠ1ׯ2y÷®ˆ>S9§/B¯Â;y"–[‡7SD1w# ѵ ŒóŒã¹Ï¥zÊù™¾Î·W_),Õ[#$zz×—ü*’ãÃ2Õ#xËE}l‹2V/ÞÄ(z=I®ûÄsÏ¦Í Ûæ>-·¾pxÏoAïNªr’0„z4|ÙûIx‰¯õ#[ž8,-er³LŒím ÎPd·ß#×'Šð¯|5¼×õui탯n/³LÑ¿Ì$‘–ÜÌq·œúýeñÞ-ûiµØ¬?±u[ $¹JM.x`Sß*ˆ‰Ãœ&¾Søçñ»P×¾"˪¾— 7CÂ\FñF4M£x]»ƒ÷jƒž¹¯[6­#‹k··õØðâCj ÖÑ!„³ƒ,ç?¯¬¿c/jÚ¯€¤‡O¹Ž[)v†’\Ë´±Ú6mÀ7Ä’sÆ1^ —ž¿¶†Ýl/ô¹ÒGšIàœ\ AR(lPyç=zö¯Yýš|ÚWÄ TðÖ¦’i:š£^Ã4Š›¢Ž6‘°Ï̤¶=9ô®üT•JNÿ‰åÒ§%Q5µÏ —D×ÚâÝš%k€HkµÂÿVlc©õõ¬øbß­ÿìb²¾i[Ë{¤w"$Uè\!aÐé׊è|qûWØ| žóÃz-½ÌУ@í”Ï 0b ØŒçñ¾[ñoí;­|\ø»àµÐžh/ŬQ]6m¾èÄ…2 "¬’HT>QƇAÔ¬ïhŸG*téA©¿xõ߈¿á.ñ‘à«[QƒÂ–àÝ£Hež§D/¹ˆ ˜“p=Ï#æ¿ÿfëÏj÷ž(ð­Ü2Çqz©ka$ÓKŽâ'‘›8áXŒã#µs´ø¼eûLê6ךµµŒz†©Ú‹Ëbd)å•*ŽIòÉPÜù¯}¹ð‘£‰ô_XKÐÃÏq3:Æ[9Üv’ŠJ’ÊH'·Jèÿw’·kýû‘í£4àÖ‹N§Èÿ|kñOÄZ>µ®_øÚ ±I9šiÏÞ8nrfÀé_GþÞÞž]Fº}Q®.cgÓÝÜFí,ò"–b¿y³qƒÏcŠô½ÅoàuK”±»¹–;M‹!Œ²r îUËȱãûØê:×Î?´Oˆuû¯è2xŠþÊí¾ÜñÄmå;¢ò€uócnQ=zqžhx‰V«’_ˆðÊ(T“»oCˆðT—ŸDÓ,ÐϦNÁ¢Ë"ÎÈÌŒ›×¨ œqEdhvÐê^2ŠoЉ}=Œ¯,­m§¼qÉó’À cµsžø\ø¢ïĶ€k7û>ÊÏ,1™Ì’Y‡¹9$×qû(|:¹ø—ñRßOÔ"³»±Ž6¾šV‰d(ÊW ÜîÝÐñÁ¯Rü©Î[žT¯¤ilúwÁ_ÙKÁ¿-®õ_^jnŸe¼Éö‰c–æ>~U €í»¯#×{qð÷JÑø¡õ[kh’/í;»æ}2eÚ¤H.$;Aå€pí¯6X™T“¼Ý»køžŠŒcJÖZîìTñoÂÍ3OÔukk‹Ky¥Öî¦ æÞˇePÎ~_—*q: ­áÕïÂKÓ­¡ðµ×m'’ßNž7º¸‡NÞ䳃ûàá–0üÌÇåR+¦ø·âm;ÃqÁ{â›IïôÏE;İ*,ok0e÷Äd dF §Žq^Qñ3âN¯£ø»SžæÒµ«Ëré<,cT±FŠñœîÉ`‹“À\òIÂ…ê[úFR›¤­-ú>4ðÏö'Ú¼?­XYèþ²ºxÀÒc„\Jñ(Ã]OóaØvŒ·u®áÖ«¨j·^ÓÐ{h®®<åʲ•\‘Ý»Vwˆ¼a©xr-#O‚WÕ¯£ßtf\lÚØ|“ƒž€“î+¯ð7‚îôjš† µ²´ˆº›hiîeI䎊1×$ô®ÈÇ–-͜ӪêÚ1Bø³â%߇¦ÓŸPIæ‡R•ˆFX•´$RgŒî1–\˜r*-rdñˆäÖ<]m(µŠ|håÆmÀ ª±… ¦<î#ÜóÆxÚm_ÅÂÛú-¶©>«%ªÅ‰g oee‚Ç·H,Ĺ–>ÕØøªÂÏNƒn¹¦4Ú»¢VÁöÛ[`ƒêIc‘¸m9ÝéW j6”w2”¥/w§SÔ YÓuíNKå²¾ó­¬ÖdØVQ¹Ø$@Ÿ•Bí|¼’AϤ·À/x›á«x2Þõ4v·ß5Á#ˆ0’Í‚G;p r+ÍÛI›J€ë †[©£½h-lîRHÜFª1æ`‚Š}sÖ½'š§‰üðòç[ŠêæJéš8­ Oom5'bdøAœÕVæÞÜÆ–“¼ÕÎwNøq.À¦[˽NÎÚY®å‘Þ;rЬ[.ز **’Xã"ºÿ‚^ ‹H×§¹¸¹Ô˜iú`º{k´c3™²ñƒAçnpØ rq\ÖñŽûþ»8µ :ÞòÓS;ÚÚâ[y§P½Ä÷ –@Ì*®3‚{×u¢j:L>†kE:T2¤‚âØOûë™_ yØ™Jm-ÃîÆ;ÔO›^dWîî¹V¾g_ð)›^øˆ|kk§Åœ.\<áU&v.RCüW’+Žõà¿Ò-Wû;Ä^0þÉêÂeÓcµ÷%``­œ1R0ÀíÅz|/«|Høgf_Tµ°Ò­’_:&Ì ´ÑAÎ ärzSü7û:h¾ð’Ūëv’ÈöþZÖTl—|¹bÛŽ1ŒÔÒœ(Þm‰Ý®EÔòxBÛSÖ'—HšÚÁu¨@† "hî#‡C¿î ô=½àÏÞ‹ ¸lmîa©I+¦“um8‰lï ó`Ë~EäÿtvAZ:Œv¾!ò&Õ¡#ZËd‘Djªê ˜sÕXrGm¼b£“áÏŠ<3·ˆ.añ'†ÒEÛ°×6ØùCËÂ(Á#8­­:[Ayô›Kû{)cg‚IbŠã“epägŽÕ‹qææŽ¦êœ¶ðç4KmÂ+¤ø°^Û]ýªI-¼›‚b·“ bi$m B+—Õ|st^m_WƒQÖ&»0É ¶dÝÙ‹wÎ5Ô^jZ¾’òjZ^¾ÀZùn’DWÎb8rØ#v0H8Ï çµ[éš$:´7Z•¾¿u4AVãhûà‘ódqø×d'3Ejš>…ý‰eÒ¼Cà SH×ÃN ÊB‚N7&Y@ÉùOR@ë@kо]þÒµëtqi:d¡÷¥¯–¤hOï‰f8$|Ù®oöp¸Öü¯C/‡EÔ©â+(§hì¦ùZ?›÷2d’ Ì:t5ïŸ xBÒì¬õ?\%¦¦í7ªûTŠ£"01ÉêHk¥‹ÁÒØÙGOyöÈÛÄ q†aœïþ,ûp:VvŸ}¥Úë°ê±Y¼“ÞB±Áy{+Kt¨¤g…È×ûEþÕ¿ØÖ—¾øuo,Ú³—l›–Í¡—åYEʳPØÞÛžo•~'s¦øQaÍßòA\dÕ¿&†úTI4Ñ)†B0¤“Àô&®ø>ÚÔ3—M„ü…N+¤½·fuéûp¢4ßrÃxIˆ/+ÿy½~+4éËãzš{Ûv6W4ê;ô=KÓ-%µi%O!Gïâ}×éϦ:Sui–±ÿgíšÌy~r 9' 3Øœu¨ï5UµðìÚ¢¼PIl†8Éþ9>è-ýà:ãÒ¼ãÃ~ñ/ÆK‹©­­m$“kjRåVvQü@vŠˆSö·»´PIJéA]¿ëSJÿÄp”qer–;Ô+Æ[Ÿ^{×á÷‹Ç>*ŸMð½ÿ‰58JîĺVÜ sÛÛš÷~ÎÞ±¸[hM¬_K ®%ýÒ(lŒp9Ï\סý£Mð6„ë¢éÖzRÉÿ,áSÌnçŽOãZ{jT¶»wüȯª(¤ç/»üÎ×à¶á¨—Rø³o£©Fÿhz>äyN0îG\ q^û^üo¼ñ¯§ðΕ%Þ‹§XÚ$rE ò£–RÛ¾AŽnÑÏ\kØüAâ+Ý_XYce çÇæÌĶK: üßE5æ´¯¥ë_§ñ6ƒ¦hžhÞfbé­:œG3FsÒ;`  8ÅE7ÍQ:ºþH©U‹Þˆå>=ëvþøfž´E²GK,HX+M…3öÝŽ?.¦°þ êZÃ;O¿ñ¶¢U¸¶W·ÓeL›D$¨ §þZ7tè·|Sñ ~+ë×Iikh ›S\ý˜Éäê>BàIµ”lF$àmõã¥Yø/ðßHøoâ;ï~вÃs«Íl/lt©di7w*‹rÁO–Ê«»g$.Üã¥z0’„—ù¶pƼ]—wýnc|f²Ô~'xËM²øs¦ªù¹»{°±q‚U;BŒz‘Øf¥ø‰áí'ÀqizwÅIšâ=V)$ƒKŽUI"áZæuRNH^zûW­|º»ñ&‰â?ZÛí]Fq-¬q²D×lßÝŒe`\n8ÆI¯ ý¿Ç‡®âðü~¾µÕue:†¡oþ²w$.ÇŽ1„T©9¬ã^ò¿1Ô¥¿VxÏ‹aÓÛDµŸLÓ¢¶óî\ÞØ6ƒ°zŽ¼Ö ZlHàØÒ£ mnàzŽœÖ9¹vØ/]ÉíëŠÓƒuÄìeèpãê¦ãmO%AM»š~ÑV÷Å–¶z‚²-Ô錠’ªNø×Ð|O©ü%ojÞ Õï´Ý>ÊÓ¯o!ŒÌÞ\ä¬P„CºC˜Ô|¼ÏbkýŸ´K¿x¦ ~êFµhã“ìó˜ÑÝ¢|GV ÊãqR Žq\ÿˆí5Ÿê"i­!´¾Öµ½­˜IÌÒùhb rrÏ‚ý9ÎqÍaVN¬¹¤4 ‘Ûè>;Žïö[Ö¬tËK„Õ(Ó®/¼=¦êñi·éùK­rg^wò5E ‚@êkÊ#ñÒ|3xjåcžYM¼f(Jðì ,Ù9'¨à ÕÔ/µR[ +«¹ZÞý„ʤq’UY±¸±qМñ‘JPæØjnŠjǬøàJx«ÆWzF§â»51Ú=Ä:V™¹‚ÞÙQ<Ì#–qÎyï\ÍÏ„m|1iqâ»ë ¼–Ö,—b[+‰±±bÚ0X7Ðc<ŒW}û>ëiá»™dÑVhn/esy¨Ý¢È¶Ðàœ(cóe\³õ8Æq©ñÇŠÆÿP¼ñ47?ÚZµ­íÅœºÛF-öŸ*’¯$Š®JtçƒÆ9§UÑÕ7ZÉè|m¨øFþ Q¤ÖŒ³Ürå°±¸w •ÁÁ‚¹hf•o¦òJFppÌx#§ë|c‰~&_]éºI°¶ ›{ ÄP_æmÄ–-Ü“ô¬O‰:„àŽÚo Bž4 îlPo €ßÎÀëšõ¨×rŠmZç“_ É'ÈÎOJ×n"·‘-eå‹ ü¤zâ¯.¶ušæÞ) #ˆû2úC\Õ´w:Uã $ÆâŸ#cÚ›l’Ã){9Yb'=/JÙÅ^èTë7¤«),µd‚ó[åR~d?ZšË]¹ÓØõuóm0@‡ÎªyÈ=ë2M º´ö’)xþf@pG¸õ«ºnµiâ;?°ëK+K„IOð{N7ù µ~ÌÔÔueÓÿw¦G?–àÀmÿµQ¹žbˆƒ,’æ2>€ô>µv­tè 7 à‘ó)禢Õ-ìnY+‰á“z¾ÖŒc©VáRš¾¬5º_ëÏs6ÚŸ—p‘ I6ð¦s€Áõ®ÖÎÖâßú|“jð¥Œ1h×|o6±m§­ýçÛ¤xÿ|T(w:Œdƒ^¯û&ø³Å¾?ñ΋¥ê±Á§i ·wW ª-¢!•v ”˜Ç2H®3âO„|eà½KÂQêzw‰¬&ìÍkpÚp«óÈÇ5›û.üHŸÀ-KÉmig®[Ë¥êˆàˆ£:0eùƒoEPGwôÍsUª±¸YºQ³]×QÏ«A¸î}Ÿ­øQuÝ:TÔõ;û™b[™³RA]ÛG?p“œòp3ÞªxÓ^ð§Ã/ZÙjֱ߼˜¢o,¼†T\³ÎT‘Îæ¸ýcâwˆõ-nÏFðhKIµH£žt»ÖeA÷б縭øÁsZøŠÈ|tÓcÔa¾¼’ìÖi#y%KS2’ýÉÇ…#‚+â•­)ן»Ù;6aJ•Zí9»C¾‡œü"ð÷Š~!üdµÖ<nì¦k¨d’;T—D!v èc8Î8å#5ôÿŒ>+ÝésÞÁáA(’ÖE‚8bmÆv|唜îÆrEoø+âE÷Ãk[›_‡Öp[C«LLY9%žF ÉÓBœœzWœxÃãW‡¼Oâ{Åz\÷ž£$†NÔÇi’ømÏ'EeoLy§_K6©r§eüº£Ââ-J W_4þíI´o‰Þ![w³’)æÔ5(ÞEŽ&‘bž2üõRu­‚:ˆ¾*|N°›WµÓíà±·›Rò'}°˜  $–]óÄ™N¼ÈZäõ¯›×ô‘­-Í®ojöÑê¶èéqÊ…ÚYáȕ¨;HçÖ¡ðׯiü'âÝWCÔî òèóØðœÇ …%ßÈùFݹäuÏZºt£ˆçŒ­¹Œ°Žuhý÷=oMøoã{Oðÿ‚äh¯/îdDŒ¼a›ç—Ëäç†aصOñ#ö\°øûã+kûSÓ¬¼#£¤s\ê¼›ˆ¶î]ß:I,ƒ à±è$y¯ÃOŒšü°Úêõ?XLo æŸyö•\ÆchØã>bÛy5§ñ_öè‹ÃþÔ´0iz\r\AsrÈX˜ç‰\áßû¥¤nvj&ëa*òS^ÿÈíŽ.ž-Öƒ»üOý°.®< ã}BÛÄ6 =¡Õ€"9Ô02I#Ô¸Í7áÖ‘¨Ë&™}ý‘«â-rÞåÿ³ãu®›Ó<å—…|`.rA'ƒŠÓÔ|)âOÚ'DµÓõ{wÔ­:Huü˜cxîÒËŒ>`88ëÍ|C&¯áí7Âß &}[þÄ6Ú¶­opÐËr¥~f_›,ìYXáºccÚÊãG–_Ä[œX ðݨû˜ª=Ć5òàrü(.Ùv9Æsœ ó?‡ÖQ|g’ynΙá‡Zün‰ ½¤SÜø˜[A¹’Qƒ³Ìppvä°á€ÍyÇÆoЧŨ®|5¤#'…!]NY|µ¼&RŸ£¡, ‚ÈMz‡;äü1õtæ¨ÇMOª¾j>"ñ'Ä­CÄ¿e:uÖ™*Yi$βZmG%ímíÝ—bê°]È,{ìþ KW³–ïÄ<¢âgx¢¹>d“Œò0¬qǶ1^+ðÁµÍ#NѼGãÍ*ÆêÑ…Óm.…Æ¥˜ÛdÂ2ÞÛ‚ÚNÀ&½cáO›gŠßÄ_ëEµºž%´³ºÖ¾Ñyw–*åb¨ZVÆß™G!}k†²Œ} åUÝŸÄÚ¿Š®5u1i¦ÜMºÛO¸XîeX•ùÈàåˆ{Ú®‘ªxšøß^é¯Ò²ÌÏ‹"Ψ6…RpoÊäñ^‘wð”øŠïR_ÿeiP:Ljա–)¢` 4Œw7Ït®·Cð< $ßc’îòÎCÛ©sˆ ˜§{îny¬]edŽˆaø™åWÞ´ð¿:äQ¡º‘š_&6Šåï ¤À»9$qÐVMïÀÇñÅíõ×ÄÛ_iïX§ŠÕe¸’ ~T ˜Tžvà~¦¾‹´ð|º¼+æòñ|9∮§”¢I,q'ÊY¤lýÕ=³Óšî5½HÁ¬^}´¡KK” †à¬= xãóöÀÕ<+~¾!7³LK´"G€Ê ]qóp<² AÀÍq:‡Å«y-ºi}>Ý|†–FiÙÕvÜI…dUy“ “Æp+¢Úí¹ÍQû'y~8x^?ܽÕð¿¿ŠK-l¡™K±•r6Æ1Ç©õ¯™>2øÿ[ñ¶©o=åã%ÝÚCenn„¶äª°o¼‡ƒÆ8'¥}co:hÞ¸{‹™¼GªéËio46Ûšê eµóÖˆœ+$GÌ*FYFìkÈh:O†¼I¥hÞKÕ×îZ2lÚÝb‘<åUV|§$©Uç9éajµ%®Îð¼\»Ÿ8Çð'VÔ<é¼1šÍ²¿’Ínå‚í8$…!s^­û1êÿðE=—Š$þÍ{å_6K•‚H<Å W ¹ÏÊpIÇ=jÿ‹üU¨|3Ö§·¿Ó¯¥’(]ÑÖѤ‚U;ú*¼àçŸJòŸþÑÑêm$ºÓ,lþÑq pÝ4bAe!lyȸË1,ÞzŒ×¡Í:ðj×]Ï=ÃÙ4Þ‡MûjëÒxßÄzUß…ì/gˆiñÛÉzÑÈBynê"r@Áx“ýð=‡’ø@-¦ÈfI ½ó1Ù8Æ9$ö½ëêo‰ž*±°ñúØé‹w©Heu73•²šä¸/¨§kîf•øÈ½zO‰SNѵ-5Ë­DðêHd¸¶½Š“„ÚV‹).C8W,B£U×ÄSöÒ^Ñ´ì>Xjß þ4øVâèI¤O}sÁysÛåL|¯0+`2€ûºã€O¾º×¾#x3ÃzPOx’ÂúH.å…üùÓÎÔ¾uS L¢±ó `Œ×5‡ûH|¸øÛ£Ásà«›=fÛO’8¬š.‚-ã|*“c-…=>\TzF‡àÿƒ^ s|þ´Ò¯î.ã³Ôîï§™m˜,²¼‡s4›ö Diù0k:õa‰å›Ñíoøp¥c'ësß~5x[NÕ³n¦Ñ®£²w¶r|¨üåŽHùä_ð½°3“ŠwŠg-/Æ^"Ö¦ñ¥–³¡I«y §ªÆAŽßnR{„|˜dç”RF0@Ë!øƒñ#G¸Ð¼qeâ]"!{©æ3§àj3ƒr˜ßV À±­ÿˆ^.ñ‰ [ë^ºÕ$Y —rͨ\ e(NØÕöãäQ–bi{ê+‘Yù”êkî+é±å:ì4 ø€‘øŽæMoA‰üÉ~À†?Ý œ<¯(2ÍŒðqŠõH~:h¾Öäøwû.xsPÔM€([Mš&¶Û€LÂfmÒÆdsÉÏ5³ðgͧöÏüiñ[¼·3 K7·kh-cS0‘U²Ì¨’ǃ[ž;ÕO‡| çAº´Óí®X}¨¼@O.ãµËÎP0ÇÝb9'T­:’Qªïn‹kþ¡JT¢äâ­ë©æ¿¼1ñ3âżú6>‰á½}§Jµ¿3I|λU®LiµØ„`¨_ÉÛÆjo‡ß³‚þØÛk>;{wX´„jzmåÙ{i 0í.§÷¡ÄqÌBdçœtüo§x§Æ×Vž+Öt­JË@µTµÓ,4ÿ*Üȱ™Hšgvßå†PNpyìq^‡e©E}á%ƒNxAq,‘Äñ°r2001Ò0œŽNS­RTÖžŠÏï"U)Íß~‡Ïÿ´¿ø¹¥ñ %¬öÑÌì&1ã%U¢?&N@Ÿ»ÀÆk‚ø‰¦jÚ§¼7¬KlaÕu«Hf–ÕÑSì¸GË}ìíaôÜ1Ö½×â-ö‰â½ìuM {™VÞÒ,HYä$ªGÉÃè1¸õ'5çºV¦Úð–‹£‰ÒÊRò5Õǘ×ÄdžDÔ$*uÇL秦Û\T´ùžSƒ/o¶éî'ˆAµ–k¶ó ª9 ymç¨ù»óÕ|KµÕ4½FÒÓQ²[èí-¬îþóy0±eŠöáw—gv3…™‚Šì“Q}3ÁÞ ×|lc·±º-¯Lî-c…B’#“qûÎH/»“Žq\F±­Ç¡xnmGÄ6òÝøƒÄ›ÚÚY@ó¬ãP Üç«¿9qÀ+ESžZ¡8.[ÅŽŸð£Sм·z¦µ¥ètžQ¾™]š[µ¹ó aæ"1€vZÆñÿŽü'”kágº¸Š=©”¸¹”(ß;n*’9ôžO_ññ ztS]˜I§£òÀ”‡lõbsÏEcP´ûMµæ«¯"Ï · †uwÃoAÐ0ÀÁÁšÑFÚÍþ†j¥ãh/ëæw?c‚æ×üClºÝÿž©j·ÈûaÙeŽ F[h$NNjúôÞ/³Ôf›E½X"/*Ç–µH£'hÔó0ùq€Fp0k#á×Ä ï[»W€t{‹ºí–‡dÖš †Ÿ`Ú†©{… ²µˆ¬b<·Í’íÂŒ±òÛ©ÐøûÇÒ´++ xÎÖîXL†`°y!Œ*‘û¶eûÄ•<ƒŽ¤ž•Á|<Ñ®B»F\/, äWγýŒš‹õÛ.îk+”Ž4·‚ÙÍ1va¶6a•tg Ø®Ãâ×Ãïø‹ÅÊÂæ+­*Í-bŠK‚¢Ò(‚¨Mãpi¾Py9É⮦*\ŠZnîM ŽîJ;j?u_øÂ}CYÔL·& P»BïhÒ)‘’a…2*áTäƒÎZø­¯õK/,q\¤‹Ä6×r/pH÷"nv*Œ’rÄ?|1ñŸˆt(Ɔšðj ne>b,º|H6…e 7’Fìœr fx?ÀÚ†™ðü^FÈmõ Òi‹3„ŠõÜÇq9<ØÀÇRx«Q„c£]Œê¹Õw‘éÚ¿ÅÛ}3ÄÖšGØuYuYây4³å0„ÊCp£s€ªÅ\åp§ëVô¿Þj×I¦hÖ±j—ޱ^Kq*ÄmÜüÒ €®8$œô¯(ñÞÓßÞ_éºýÅíŒj¦v $a)¡mÁ@ c8â¹ üs½Òå[mfv¹ÓAdl³z#<úY<;”oO2VÔúO⢲Ѯ®´mzMÖä|ñNÑ]|…WçÏË–ÂdðÒ¼SÓÚ×_i5½)ôXå‰b´€«çãl’£Pó’yä`f»Ë»í3âN»áãàk›¨${uÍ„”¡PÊÄ’$ÀêÄdÖÇÅ'ðõŽdËqGenzlGûò`g¨¾+ÇÚGmïGïÉêþòœº}ŸÃýñ?ˆnØl~ÃÄvŸj‘YJæ%òþWɈ.9í^gâŸj–úwÃ{ ZÕ"Áºšé‘|ü¸;¶(ÎpXmny&«élzž§Lj|@&†i'm:(KkXC ¬ÅW÷Š2|Íé]ˆ~2Úü=¶š=ÎÆT~úcjÐÏ?c|²äð äVð£ÈôWr0¯‹”ïm»ŸHi“Å=Üg;ýš6ˆ<©ç;˜ýïU¼ñ*ÛÀÚT·|¨w|»±½Éêûzž+æÍ#ö¿ÔtÝ`Ég‹F¶Ç óH÷ïÅwÿ 5X¾8jSëþ7‚:É• ‚W*ŒÙè¼$ŠSÃM.yé¿×sš•UPé¿i SM¹Ó4Qk-ÂDÑUQÄ»°sJò¹îRËH˜‘eŒ’ÒÊ¡‚ƒÓ ô¯Dø×ãm6ãÄwBlV8¡\4j2Í·îŒú` çþxøªÔëZõìÐ=Ó4°À«¸mR07’yÁÇj¼$}Ç'¢ ©Í¤tßü-¿Ãû ‹KI%kÖµØñ?ÛîˆÈn6’@N#Žæ¶ü ðù5½FKÏÄ/gÁ†4v8 tãÔ× øká„Z-„·àÇ$Á¥uRLpžÖþ‰ygþ‹Ìˆó– àãjή#žNKsxQQ—324O êRœkæ/-\˜’Ú öVϧ·Z½q§‰Œo© VŒ±ÚÔ\tö­)µ`mŒ—nˆœ‘»ŒzW+â¿6ªÎttfŒ/ÎäõúZãk™2j&WŒ>'Ãáh<# Iy)Ø7•ìIõïT~xsPšc¨x¡g¸¾šLâ\©Î3ØjÔð—Ù&òõ@±HùQç¤ñ¼{ÔUßø¡4 ñi°¬¯’Òp§Ö­IErÇpŠQ÷ê2¦¥á›(µ‚f̲˜ÆNI'§zñ‹WWÞ1ñZXØÝ3JÓî1u4Qy®~ïó®_ñ&­y©ÆÐ·Ù#µI [«‰&™È!T¶p8ÆxÍpmu6ñŸ£Ãp–pÏÝk>CdÆás´²õþ÷äâ´§NQ”e'©…J’©ÓCOPÓ¯ÞÆM;Â['‡ôõóy 4Å·vž½y®«Oñ4õ¤6ð]Ýj‘¢¦¹HÉóp¾™÷¯8Òþ!fúKs§G+Üâ;[$ ~iã{{úWÐ_tK ø~9¼V±ÇŸõ¡0= vü+ZÅsLÞ”]Mõ/è_­5+;KÿðmÿEµˆ£À.½ã?n¼¨ðíÓXÆÔTP6®8àtôª1É-û¬÷ìrd½€ü«kL¶ìFYã*êß.NЋîEpÉõg|U—‘5œË§[\D— ºI°Ƽ×â??´´édyÑ$òÓ»7=[œöÅ^ø‘ã·’+=-¦™§“fÔcó·RIyƵc&©®[Ëx-­,´ëèžîo;ñ”nû,#«íÙTrsD"›æg-gí] _øŽ_|8ׯE¤—PCe$ñH¨B¸@ f~‹Î`÷¯•ï<5qâoÞë¾7Ô5ÛHõH½•´a¬åd-3±6 qÆk×¾<|VÕn~ Zh·¶‹u£³C{-˜ùíþά;ÑÇÎFH=kžñ?„ôßüJЭµ)5Kp÷(Õ^3ml?Ö1 # 1óœ q×» œ?y.§&Q~ê6þi/ŸƒÓê^2¼¸“P»¼0FÚOÜ®wóG WåÊòyè+CÂÿµ‹ñÝÛ­ËA¦ê»EÕï” $Ý´; ÄJò@Áã5ÄéÚ6¡ñ£I×4Ûk¸Ûê­öhÖGòTË&P±è /Sܶ;Wcñ£Æ£á—„u}áþ¬Ðßéº7,Ï3/&6H°§#<ü«Á9ö4§79EûÏð:ZP‚”–/ů~ø4Ö> ø?zZ]Á›‹ÒrJ’BáÏ*¬wÝÀÎ+ä¯kûÅ7k<¯8Ši"ŽsÖ`©úõÕÿn5Bl%ÄQD7Ì¢…‡ËœVeÔ÷ZÖ§#ê’<“\JewÇ,Ää’}ëÒÃÐTÕÛ»{³Å«VU%r ½+ì×þ]ª¶Ðrªz¨'?ã]wƒ´¡;2NxŒ`ôgÛÆïonø®‡à/ÂÍ/â/š?^]‹x"2Iä• øí¹«ÚüEðWFðµæžÚ]µ–•jèïp³]™æ’' LÙUÚjôÎjëW…Ê÷(ÉÉ4y_‰¾+ݦ¹¤ZéúwØ<ü^¾Ö¼GôiÚ††ZÆ[¸ÝÌ×4ò·3œ ‚Ùã!‡c\/ƒ<%y4—š,fK,,“ùE‘±Ó8À¬ÏÌÚÝÚÍqs-ÌÒI“#ÈXç¡ O'¦>‚·ü+&©á­:â]"vy&‰¢xãBÄDp qžF dÖp^΢u]JZ˜ÞÖ.ü=â[Û›8[Øš»ÔH MÙer°!yèzs^ÉáêºÖ¹à­7IÑìCVû<Ïq 4òÜH¨gbp¨»–Éwæ¿g?‡²ê_ Ô552AuÜZÃ%ÅóÄÊÆNôÞ¤í$t=;oÚ¯Xÿ„?[k i0hâ;¨u[i`v2DB’ÇþZoÜO\¾µ8‰¨J0µÛ]^¥Ìüe›Dðõ‡‡îÔÛ¦¯y-ÅúÚľ`xæ*,x ¾Ã9ì~ñ÷ƒ<µ¥¤z_ˆáx Ž}ö™t8£A,ÄÞòÚL aí?(lŒ›þxQñÄ¿Ooog«Üê¤q´wå¼­ón]ò`“’s‘’£f»/xñ>xçÆÑh:zéž#´:-”^`º”ØDH[‚û™VWœ<œ…ؘI9ÖÃþí%«{„j¾ikd3ö­¹¹ø¢l$·›J¶…î°QŽõb~î{T:^¬5 …R=Ų0ƒrLõÇZíücà‹è’]èop é‘"F¨™qçqÎ;HϽpi“èZ'¸#±5ÙMƦN]o®ÂÜJmî-ƒ‡=˜}ÑíU {¿ \<ÓŒ¤‡ HÈü}뢺xõ«i’%œsØÞ3ÓëS\èËyj¦2|µ*®­Œ©Æ{õ­n‰œemîb^ë–úÕ›}’O)±–ÝÆøjÔk€Œ~ÐnÊ·½VÔ| ­œ’«³Âijq÷êqÔ*—Þ"³Ò·G,$1?<¹ËwÇJŠZjJRrµËÚ”Kajcáä 6„´ËO­ÔžU´mpgo”Æÿë^=MA­êfT[Ý+ɾ„ådCòºöü{Ôÿ uí>×T2AvÖ3Ù°¸™<ÍŽ9}0qE®‡¤¥fEsá²¹{9h¢˜ž<åG¿é]~‹ñ¯VðîmfÖV×–VÒ‰J¦@;/þ·GRÑm5 Rê}hìíng ežo:GfæF$g,Ý23ŽÜóÑEwgw9·ÃE¸ÆHÿ–€~U”¹j«4l”©¿užÕ kžñ¥a­û=üÅ$2ˆƒ´n§!IÙ$m’ 03]σJÕô»k¡p°j +Éw°òŽd`ÄÆùid6:€N1óêï§ÜHm˜£’ÂÇÛ°5ÔOñ·Å6V–²ø~é쿳Žè^ãÜX ä㌑í\µ°òœ}ǡъ.ïsÙ¾3|-ÞÉá‰lÚ7Û+ËGš… v €?Ý$ƒÁŠàtok?µ; ]'U±º±»¸ÆåÛ\4oÊËsÈ*ÀdG<×Cð[ö͸ñ6±eeñbÉ."…„14VˆŒ…œ`?)ÜØ'¦y¯cñ×ìÁáïŠÿ5+=M:ÚîÆù­äžÊ=Ÿ6î;ÇrݱÁ®GRX{FºÓï7KÛÆñÜùëâm°²×¿µ¿°Qt[ØÞæEÓSÕÁf¨è#ù×€:×¢ë?gÕ¼,à+¯êÓA °¬‰­ìm€JíÃòÀu œ·ÌF+ Õ~ø—á–™ªÛküBZ Çæy•ìYGOzÐðÞ‹&…â;[O‡¾'ºÒNŒ#–47£÷>_*Rc;õRG©•xJ+‘íýzá$Ö¾§†xƒâî¿á\éúuµý­¤VÉmöVÊJJ©ýîò»ÕÉfb:t€1£ñ›QøÓãKK?µ†™g®Ïmk„°Ã„އÜK¹V$Šõ¯Úçâ’kÞ5Š=sÖ¾]BÒ7Ž;ei>ו9”±,¬ß?ËëŒ×øƒIÿ„sK²Óu´ø®î\<°ížà›åsÌiÈ9­érI'(ëêa^rsºüнž xÃY³øg­_êB+Ùíóh¶ÏrŠíqµ™YX©ÀqƒÆEGq®Ûø~;4ÕÒĆO-x°ÜAãœzdÒh?/oõ›™4iD“ÚLQ£IhØò€g®Aã×™âo†:µÒ5ÞºÅZ #‰mž&IIç”P“ÇZê¼^’•ÎISÜã^$ðNâ}2+ÏBæúú1;Awƒ&Þ‡Ÿœú§Þ¼ÿÄ ¹Žòa<7ŒƒdR®§ÐƒÐûï|1á»6Ð5‹»‹«GÜÃ9t0Â!}î\0ÉlœLŠÄ_Ì#ŽÖæx¯åiäIn'˜³ð¸b7*3ʜҧ9ÇDîg%tœºžs¨Ú>›4*&Ýç8ÁœûÒÇ<¢ÕÂÌ̈™Àà€k¼Õ~ßøÏÂÏ©è2Û4»¤"Í_t‘…ÿõë\¯ÃO…:ßÄ?Ãáí ÔO©Ü)£¶Á©É#`íA¹rØ8ÈãšéXˆ8¹9-78§Npk™hsëzÑ„Žà?ÙÜ`ÂÇ9¯d×¾2IâhaÔ.ÀºŽx;òìCƒ+:àòÆ¸ÈÆ zŸƒ¿d‡ž ×-<=ñ’òëÄZþ¶Þ\¶34ÛVfІÜpF\Œà`q\íEàχ¿4Ù®>­Í­Õª.öÅîL±J²g3|ùq*¶ÃmÀyðŸöˆoÙ'„«ñ[¾"Õ¾h0\Ó«LÒ4v’@"c:Ÿõ›Pd 6»‘ŽkÞËò¹*‰T–»ß±ß‡ÁÖÇTö•§{oþGmã Ý+à ît äÙÁ0ŠÆ[¹P–‰ ¢à€Ìì€IˆAT‚yó÷ÄOøs@Õ­µ™e¾ÔgÖ5ûX­­--ÄPÜé¶¢h_ß½s倴ŒNH澃Õü-£_[i^øù¨]éo6—§êwV>|#P¿’Rìò3£b(Ù£¶gwE`3йðöoŽVÖ¾2øwàë[!¤Þ =Pñ~%²Ò¡Ž|Ã

)ÙËy¡ÙÞ[韓«ên‰°Ä‹²ÕßåeGl…ç%Ë•îZgìóð—àG&Ô¿iÞxÓÆÝE¬ «»SN>a/æBº²VCóýÜÖ¾¬_ˆÞñG†Y¬ÒÊævê¥Ü;!ƒpcáÜŒmb;:Vs~î7¿^Ÿ#HáéóÚ¤µìs~ø"þÔµ >Â]3YÖôë)í­ô2#Ï9Æs+•ó£EsÕ!2+¶Ó¼m¥M`u FãS»Ó¶ªEq±`€lÆ|¤]¥±È,OAÞ°´ÿkØÛ]è×rë+¨àË=¬Þl6ØRXÇrÇ‘÷FNHÏZ±©µï‹BXx{RžÒñe.æ6å”)eF=c ÆHù€é^4êÊn÷= pŠZÊÆ—WÛ&O<ÎQ˱•É ±^z @è;VUÅè6×þd†™ÒÚÅ•dO0““•NÒ<’§ô¯ ñ·ísá?†1êÚW‰<[áOøMï36•iyæ5–ù¯ŸÞ3lu ÷¹;ºqÍè?µï…µïé“Ow ¾«©4YÙElÂÐIÀeÞÿ2ì mÝØŠ¥JsW³°§UE+/ÔúößQ±²¸‘Ž¦Ù‹ ‡îÒ59.«žã 6zv¨?áli1]@š_Ú/ä2‰-e†e@$ó´`‚yãšùÒÿãöƒð†ÇS¾øÓâ8­äF¸’ÖÞey>d_Xüëœãho›µ|½ãßø+Ž­(°³øWc%¼×—N÷ÒÞÄë+)„}™¢lÀy›9ùMgë»E67ˆijÒ?Q.þ#ié¦Kyw ȼ‹$~`ƒ‘µzuçŒæ¹ÍKâÆ…¦YM$Ðê.ÝÞ9`Œ<Ã-È]Ü:tàb¿8u?ÛWÓ¼/ >§¨ê޵b.¦ŽÆY£ŠX€Ú$bŒT+ ‘Оk”ðŸí}e„Ω¨hú柩êZ›Éqy4rÍl¹$Ûþuà7”£<O$ÕC%“»·Üi*îÑwßÈý3¸ø—áÝ#Ãí¨ÜÜÝÞÚ[¤ÌB©Â7nPs!¯Ëò‚1œ_|Wÿ‚·è^ñ…²ÚxcÉšpLæL¹Ÿ¹”e  ’¤dcŠøóÇ_´'5ËmJ iu)íEÁšÚk3-šJ ýêFÀ” ±ÚǰNkŒ¸ý¤.µM6Ú×ÇYß}”aYíWÎò°WbÈz(ÈàW«‡ÈÔ_5EÍåsÆÆã$ÓŠmTxËöðñZZiëgàíBãU¿XîtÙô‘ EJLJ¤ä…bIÝÏ êßÿlÿ|Lñé7¶ÖšUê³ØÛK®‰æG–Ê1ÆQÜ0¨•ð6¥ãÏíín-k[ñú³4qGgåIíÛP·—µ3Œ’pMKðk]»Óþ(h·pÞÛæþúÂHHY¤bl ŽJãoN+ÑyUòÙüÏ.8ª‘’“w?EüOñ+ÂZІõ¯[ÙéÖÖÂòMQcµº;I.äŒÎGQáþ.±ð¿Çi´kñ©hð]\-ÝÔs5·ö”ÅF$² ›£‹•`P— cX±°oß®©æ£"¼rÝ›;6[™Ùå( î›wN03ŽÞ_«ü?_|A“Æ_ ì–kÿ Gq<ö‘¡Š+ÏÜ<-lîœá\‚9¼ ×<ÔiÆ;;XôjJuk~Ç«|4±mööܼúÉ–±Çr·ò[]ºÊ¥DbpsávovÓ· ut_ iðkC[×n$Ô¡¹¸XQ/­Ö_³¶Ü*«…ÈÎÒw7Ž£5ÂÏâOøCBQ·Ôáñ¯‡ÍÄ-§>œm®4­é‰¾Ö¨‘¨ÆAxõ®áç‰RKM)tMCMÕíî ¸™á»a2¸·9f[,䌠HÛ÷®sûFº^C~;ZÙx‘cµ¼_%u’#d±q€>f_—i¿C_1|Oý˜îôå¼ð…ͬ‰j$veEš=›[åPrÌw ûN:WÔÞ/¼÷³µ¾÷´^¨NÐIàSêÿëW'âÿ K Gª,va¨háVO0å²Üç…ÜxÆx®Ì-wJܬÔ׽©Ãx/Fñ|?±¾¹•ž™-ˆ¹½ŽñÚú_sJòGâ»X99#­vŸ|I¦ü{ð¸Ôþ¼,†ÉîMâ›k{–†h^THŸ‚®?v:–$ÀÈf‹âIu‹v±Ó5‰mÙmahçVµ´ËƒÄ,0æÆáÛyÁÀ®çWµÄ–¢=•µä7H±ÜA¶=ÈA†vÏɵÇ@7dv”Ú”ù¤¬ÇJ³Påâ߉!þηÑ|;­A£Gvâ[Ö·²7’ÆJü€ÚP*ƒéêxgŽþ iz§ÂgÖ<}}ci¦]Jð<°»=»MûÉt$<’ȹòÓ9 Ù8¯Yðœ:nŽ’Ûè:d7÷úLÒÁö‹™t„`|Ø'2` áqÔ —â6“.»¤éÑëÐXÝ)’-–¯’&‰Â¡ã¦'¡æ©KÝ2Ô¹úly·…>ü ½³Óü{qssâm6t¼½xbyÞ& ®±o„ì# Ú9ÎC+¹×?l­;ÄWz¬ÐYŦÜj‹t´¸…."ˆ ûÀ¡Š7Úv¬H[ÛžG‡Yü,ð†…ã}VÏZÕˆh¼ÙÖÛŸ6Ý#ÆäÞÀ$’1<*dòqœWÒŸ þx~÷ÃóÁšdóæ–æöÑMʦåc× pbì^›×TÚæœ›rEDýœ-÷¯.4kh´ÆÕ¬Ö mRvÕì­nIšME‘7ýÙ9ÛÄ|Žp3Ö¼ÿö·ÑaԴ鮼DóiÚ•ªÎ–±¼b ¥”ƒo!6íäN2 ¯MÐM‹¾&ëž0ŠÎâæ=ͥĨ¶ö²Léåbdù§D\ª„@«ÈÝ‘Šò¯ˆ&R¸’Ú[:ò3vÏz/"c–FÀ åþQ÷FÑ‚äæ¹)6ª&º¦µæêUýœ¼"|à=CX.ž=lDÆÌ¢¬s+FŠ5RIW)É8lu+Ût_Gqc 7m»ÜÍk3Tb؃©äô9ÇJÂÐ4Ë;?xrï]ò´?.Ýã[X#ùâØ©D$òéŽ\öäñ̈ml|Eü"R%µ‹:å¼°úÞz—aÊGÎ(9âªR•i6ÎeN)¦nø·áôWúõÍõ¥„7qš7¹Ë[ \æ4A’Ù褨ç®y¡àdñœMÿHÆ© Ï,`·ËfÊç®Y‚¹ÇTsÏPk×´Æþس{r––{·“)æ à `ã993q޼÷ÆÝb*ÆêH­Þîú(˜ÀÞQtbzdFÒ8­a6´{™¯{r—‡u¿ Ûiu¼ɦk7äO%­¤,Òݦ¼K↨¾­ç\Ã~$º6š\.âHŒ4ŽÜ(£ôíëZž×µÍ8Û}‚=j)5&š,í&óX¡b@„œŽBð~µ×~ÖÒÛ|1øwàöÑíöx§]²¼Š8­#e e”ÇÕf&m£Œ ¤ŒšÑGÙM+ݳJ7¯zoD®ïèx/‡ti|%ãˆÉ¹¨ýçÌ þx¿á½¿‰î> ?“ö[lÖeœG,²9ßv6¶Ô‡<¶qšÿ¼9£øWIšê-Eµ­~'ŸÃV—*ÆKYfx#žêãÍ$´’*ˆ>rZúÆ7ê>¶²ÑläŸl~i™òX+¢0 ?S´ýH¼;ã‡l4Qàí Ò[8æÑ¡›SÕ$2‡-urÁ™wñþ©0›FâÎIÎ(Uuf®íèTQ“µŽ/ž5Ô>ügðüzÅ”Wv-6KæC‰,bYX«tá€À Žc€w<ñ{jSê"ïû9d7r,³;¶R"r7cœ(è:óT´†W7ž)*×¶ž¦fsäºE&Ä&n$-Áb¹Fs]¿ð†ï[Ó¥Ö.o^ºWhmlÞÙáe™›b®r2>l“ÍuÍÓºG$Õ×s_áWeÕL’øé‰ªÏpEžŽivR[ç•÷øuÿk$Ó[P¹¹Üf"|¤,8\œ’º¸êkžðïÂÖð‰å{?H½K{hî'¾¹”ÉÈѪâˆãÌHÛ”3’r@¦À`øeã-/5(5mjÖ6¾¹-™ÿ³£*Q 0l}æÎÜu砹䢙pM'͹Úkÿôë]9&øž‚òâKD„[H«º4\1Pƒ³‘Ïà+Áuß[j¾-†{ÝGí: ¶ín-­àh#´„6U);ÑN3黑]ã¹|l·wW:¤økFÖ.Þ$ÁvŒ*–^#$ú1íµâi<Ý2ß[ðŽ‚šŒT±µï›T ^\üÛpèyçÐV´Û‹µÿà§íW)ã>!ñ|GÆQZè Ƈ‘ ©4+{Å1$à’¡¹f«øÓá]–µooáTžÏTºË´¹A rŒ³¹ˆ @Ú?{æ½fÇá.‘ñ3B—Ä%Öâà#ùi"-¼j¬«p8ÎóœÞ´<4«_éqF~ÝœmmywtÍ$á(¡Hpr ½º×CÄ*jé¿3Ÿ‘KW±ä? |Qªh­áû+E›B½yàR€³HÊ·ˆ$cô$ W£|bÕá ¿Ô|S.±qr<ˆeV$Ÿ¼. ýͤ€Äzõ®§ÅÞð´ôÛ]Ym¬/."wmFÆñpQç I8Ë`äÃ5Á|Oñ¼Þ.’×X“BÔ4[k`»lîCbT—9È“<ÞfçÉJ16pqORíÿ€|I§ZéŸØ¶Öñêú}ÐXK+L¿gxÃE¼œ cé¹NGo]ø[ssñ?Àö×Z{ZÚ^[±†æ7>f˘¥mѲò‚A'ê ygÈïm/­õ©ZöU”Ç …v˜4J?vCàäc¨<z·‚5]Pñeÿ‡¼+|ºGˆ.ØÉËçx× Ò Æ@.ܯ$»µrâ'}ÖÝÌš4š³fŸÄËÛ› 6¿ñCKfl,žh£0äH ªÉ$'nÇçgиdׯxÎÐl‘oìæ:ƒ­ÓF€´²n_¼Teõy¹ñ[Åú7ǘuoˆW’ëv6Qɦ\[‰d†³“ŒF¼ck  €A+ŒžßAü×ôÈü?ˆÙÅöT i#L ªÑ®XÎ8ùO?‚¨¥E&úö;yWµäŠÔæì4åðÿ‹<-¥Ç¤§“¨ošúy¿vÖvÊpwÀPp:žqÏ#ª]ÙiºÖ¼,­êêú÷ì×71ž82Å—3xŠî¼I ø·Ç?®o<7 í¥Úâ–áL1É G’ò)qm«Õ}I®Æ¿ õø/üX¶·º€¶•ö·†|1£x;F‚H$·wîØÉò¨qúZù¿àÃI>é/¬Î!‚k󬙖8Hû§¿=+Ö4¯ŒVQkÝ.c·¸‡h_4ðxû¾ü`VXÆì©SÙÒ³J=NúëÆ~}­»i0«àw«žO<oZÜðö˜#Ðç–é@iAÁòŽ8Ú=}+ðn—§q$z|æq¾RÇjÀ§’àO§µ¾ºµ·„¼ùnæ]Eàd ©b†Àîpq^KÒñGr\¨çî´¹µ3¹–âÚÙFSÎ ³^ üª}@··‚WºŒy‘Æ_ÇÒ¶¬£:ÎÉõˆ^ÚK…i! ò„ ü$zó\·‹µÙYn \òÎxÇ=Í_6–ù:jŸ‰Væçì– ÎêrÏãøWãÔ¸Ñô×Mù— #3vŒ¬~ž•ÓjrÚÙé!NȤ$åðrùàã+.OIâ™›¤*%O-‰Ùé¸g×Pvô1šæv8¿ hˆ5™ä¸’æQo´Ã#Ƕ%n¬Üuä×)ã­nÚ]CglÍæ¾âÑ `ã¦X÷cÓè¿"hôô³7m§[.TÏ›‘Æ{ç¿Ï|2øyÿ\¶úÅſۭ´â×OËñts…Ë7B9lz]1¨¾)Æ<îËD·8ß…m/Å9¬5;²²¯¯Ï$€ä4‡¸éê {¶.µÛ¸ÚFŒ Ò ¢Žä§Jó¯ø£û^ëɸtŸT¸sq<ð¨e‰weSw®8?w6>¼ÔµØurôÙé´<ö›ÅÛ»ÑëYWwiµcÔ ”"’ûξÉQ%)û @‰Ay~¿ãTµ=®²†Ûíi+ÜùŠD$D#ÞќƵcßhÂ{¸eñˆÛçeœL“JÞ¬xT\äàçƒ\Ê.ë˜ujt‰•àýûFÔ5Öû=¥¨gt‹%œõÀ=ûtêzWŠüJð­ñgö˜ÒtÿEvC #)ˆÕ#”¹/Ç|#ç<¼×©|høùgð·ÄžÓ2°é×ÍäjÍr uaBŒ9n¼^wãOŽöž²Ô§ð$wSÜë­«ê~ZƦ0 yvØ;±—‘r{±­éÊ\ʤc§NÇ?<môüÎkãLjŸâ^©ýðÚßM·ðõ…ËÆš…œF9uQšêlŸ½óP==ëÂ:]æ³Ú´= X|% B 3É(¨I#€ÒÈÇï>ì`/ g­kxÂé¨ÜcêÓi“Léuy-ªn‘¹À·‡í\r{õÍ~áŸê—éwɧ½û‡¬-Úà_Ë n™”0|  ƒÜêû$÷0¡CÚ6÷¾ÿ×ä"ñ§ÅM+á·‡5Ýᥴ—Ù1Äv#dû<îH;ÉÑy2:×ÍZߊµfôÞë2½ÄÑ·Í¿žžß} ã_ éÞý›u¸þ%ê§‹ü_=¶¶ödeº±o9ž5Ïü³í,Ŷñû¼ùçÍ6öå¾Y ¬Ç i†Q‹“Z¾æ8´¹¹y¶3nçf‰Û2uz–¦”%¾˜4÷ÎK€>¹â‰‚DIl‚ÇvGj»ðçQMÅRê|ô³ŠI¬mŒÇpyèA?‰žl¤¹”có>ŒÖüì­ðÖÚö  ¹Ôî®aûM©uf¸}z„7ã=kˆ¾øÊ|Iã&¸ñ ¥íd·‘ãI›n×U&$@´ÿÀ@ã­n|nð»Áà?^Ç%í̺ s¨\\K•–]Šè°DNc#?ÄÙ5ãf—\ñ¶—¤«I,Ò,{UrÜžqúšà„V&o›S¾W¢”—Èô «TÑ~A¨Â.fÕ"|BÔà¸ií¼1Åup +E±If“ÛÛÀ# O^•¼å~ux.T½Yêß³À°OhšÏ‰#•ØDÍ(†Xfv1¬aÛ†9ÜÅ8 >o˜æ¹­âtµ'Äï A¤-åÝèšEºØ¬ÖÑD{·ójù}>_˜g$Ôž,²ÔÕõ§À=wLÑ~¾‘¥>—â_63!°Ñ”ù¦7{¯3hUVu\ÀÚêsÛZ^ÇÞüJo™j|»¬xy5ˤ³šÒÞ{TbÑKlf€=·# ŽpEszÖ¦ñ'“z¼‘±˜·-õÇq^¿ûMi?ðŠjzzè~­§ØhMäfòÚ$Ï)ýãbJ³#ÆF°À®?Pñ6‰¯xz-É[«}Š—1Úîb…ŽCËmÎ}zÖª”Üà¤ÐIêÒ9½Æm~ØÜ|“çgžúÁ¬x—Á–—k•·m– ­Üã€:}Ö¢ñ7„­´Øà¸Ó®až]ñ\[I¹>УÕOOz›@¾{Òmµ–Ù"€b¸'>üŽâ´[Þ;õv{œÄú ÿ‡ JŠ$·†+ÎÚ«•¥ÍÈ{2êO$nÆ}q]Ü×ÓiwfÛUD•îŸÅÓ“Øÿ:eç‚íuˆÙ vI!ÙP¹´Ô× Ý.ˆ“áíæ“­ÇuaæK¶då¸*Ià#v$ŠuՅׂµä¶Ôíw[¾rs¹Y# ön•ËOeuàéþϧ¢€>üŽ0sœç?ʽ¶>8Ѽ‰¯ ª”q½‰@ݹ<שž´¥î>dô´\©jVÕ|7a®Þ¹kS€)†pÙsÈÖª]øzòÖXî4û© eûò9À?^Õ'“G¸›íZ:(Þ͉;r=ç‚E/‡)šëÄ:Mž8fZ|’r[>d œ1 `íÇL]NŸ­ø’ü^Éqâ[s½¸lBLðÜŒ_”cz€Ÿ)äñÛ4çîó­»ÿ™ ¨ÞÛ?3áí߆^YíuÇ“í×he[{˜~Xœ7<¨UÊቼ è5ÿÙCÏÑgÕ< ªÛÅ£#¼à¨BqûÄ•R«ÆOã—ŸtïÝØ[xßJ1^Å´÷Vîc‘ˆã|«È'®@8¯©>xY#Ðltí#[Ó®ôs?“7Úa-Ÿ*ç*Ød*m8½gœðÐö°m>Û£Ž5!y)ꋟ±§Ã¥ñ>³7ô˶ҴåóL/%·ÛÍÁ#c½Áˆ‚N‹s‘]_ÄïŠ>ðŸÄÛxü+á > àÁò 5e¾‰ps³>ØZ‰õÝs\}Aðn™â9t—½TºÔb†<[Y+Ø v€]¾ènzSü2¶³|cñ«àí6ýÍÔɧ,–×lnB19 tfÁ#*95ðØê“Ä×uê¯vÚ+Ûï<]iT›’nÇ‘|_ø‹à»{ÍBïAðàƒ]žt–]V9äYî¥CÞU`È9Ué_:|YšÎêâí<i <Êù•™ñç©>Ÿã_hügø3ðÒæÂ++¹,t½F{×–æ]"¼Îò3:y Y‚Ì~\vd× ðŸàn“âÚSEðçÃ=2m^ » "’;î®c ï$ ð«±!8'½L§2ÃR‚“Œ´[=ˆÃEU’†®ÿ3Ç¿e‡^"ÓõÍoâÚtà†Ø³FdÈ;” 1eŒ§Ú»ÚëPM3°Þê‘„—W™äòå\Ih‘*ü¹##;÷P ¯yøËªiÖž ¼µøu£i“Ã%‘ŽÖÂÕ™dO0Ÿ-›$9À$œŒ“^u¢êÿn´[oø{Z¿šõ&Ôb0Ûƒ í¡Ëž )‘Ðã»)ãþ·_ëÒ=¯±¬¡É7ÝÇò=ö~ýŠå±Ð£ñ¥âHb¸†á$K½!¥fGÚ®¢7ùX°VS03^¡iã8Þao|tÝgPÏie%â‰yÊd4„Œ,£ŒœÓÛ2êÏÆ? ÿf IFµahíu,‚gr]ŽFÞqµ•sœü¸Ækç}?ö–Õ~ê &– ؘ"o)¦%[gŒgë^|!Ì*T”¤¤“Ñh™ÑN¥Zz¿‡¶‡¼[øR?x²= LÑ[Äwú2É6µo5„PÉX´ì¢$2~RÛ¶Ðñ7Æ_ø¯A»Ò®5KXu ZÅ¡ÚÈÞj³<É?•°FB©'ŒV§Á¿ø“âWaÖ< ¤Üê6zkÅÿúE¼eed,ÌÞdØ+8”1;}kÏ5 TmgÅ—¬¤BÑLÒ»²®ðUØð2Gò¯:X\D«¥Z %²w×Èà®§ˆå âSø[XÓìµE©èw™Ô˜«ÝÂÁ TÁ¥³‚pI£âJü-ñQñ>±…üC£›8ÍÅ´M®9K¥Ø@Ž5nÉ-¸óò€8&²õÛ/‡¾±Ó<1cc©x†%—YkËXíÁ,pLÄòFC0ïøŠúö@·øQâ‡mñÞ©>£Œgf3iÑO.“qk¡'|2,Øá‘ÂuàW¾¡õh{ISitÕžÞ §î9Yy«ýÇÏ?³õ 3ösñ‹<g&©­Ý?Øôø¥³£‘Y\6á¼wABH犇ᗆ¼}¯xÂ+ì¢Ò=OR¨5åÑ–]^_?Íy )Hã:ª… ÙP¾øÑâ}+Eø:4}"=CSðà]Íz°¤2Üý¢bÄUÀ±ŒªáF“Lý—¾QÒºÛsÒÇÔT&åÚÿüc¯|WñN«âoV’æãGµK{}*Õšéæ¸X±+ø…fs:Rk·ý™¼YãeøU§KàMrÏ϶i÷.¾\Œ¥¥.±ío“rÆÌʼn°'kgÎu;{#Áz¯‡´-rÇÁú®­£Eo!‚9R¶·’wO0L˜gº»‘’8—\®IÎ)Þ1ø™oáŸW­<' Xé1_A¡‹KI W"=Ìn˜y%dfp1“&ps]Ï’º‚^G™-ÇÛ;·ýz]i*|YÐ?bÏØÛPðÿ„µ{ë¯kÅg%Þ˜ÿgk{‰c‘Ì’ߺˆD˜ ™|ì'¨ÇŽEñ/Ä_´Â]CŇÁú{yž*ùgÔ¯fh¯.MIWTh£f’5òâ®*±$ŠòÕU¹[ÜOÐõéZ•¯7¯¡û þÌZÃiz_Œþ%[kV~¥¬Ãc žF¢ö¡ƒÝj8>dHÄ4^nÂÎX•àî®óNoÁñWTžO è+i:«O£Oq<·sƪûŒ,ŽùŽeˆ3“†,F21\÷À?‹:¦³ðÞKŸëZýÔö7÷“NÂXÔÛ¼ ¡ã@OWàb¾sñú9ñEÔúíÇö–¡©¸¾w’3çi'%Nþ³Ü£Mंâkȵۄ‹í6é™XW$É# Pã\4èÂR›nÿ×CÓ¯V¥:tÚÐú£À>&ƒâ¯ŽÒï\¶Õôë[«+¥[>žª/.QóutW÷ª£,pp~QÆQãï„þñ@×¼Wá=;KÓµýÅç·³¼¼eŽöäûå@܃÷ŒQÊýÞ„VWÃ_Š^$»øŸ>¥«ÛÍk¢iþ‚Úþ_+G²VÜÉÉ ¬²| e²FsŒgö¥ñö«?Ä+‘¬}®óFÕl-ÞÖþÿi¸¸Ž8•&}ɵXŸ1•€QÛc˜ÕÔå¦íóÔ!ÌõÛærÿþÞi6ú®¡©YO§ÆÓö{ŒÛÎæ$hÛ—BAbPpc^qáÉáßéw7·2Aea<Å} •>P͉*½IÀÉ5ö/†|}âmwÅÝßh^¼°Ñ5mrîÝí{Áä‰á)€•”¸95ò_Å êÿ~!&µ®ZIsgs6¯ \ Â^i%0Kü*ãqùpG·f»œœŽššÄS^ºéûRüOÔ4ËoAð¡ªÇ«xsPOÖÌW(±G#Áá 1ÛHa¼çÊõÉøKãþ›û:\øNKxÚ´‚H|Û’ÓŸÍÆ~Qâ‚*» “áçÂßxÂ6ø]¦™$’&›Rv»³Í#'Ÿ(€TF…Ôw=OQÝsÀ‹|7þß½ŸPÓ—U½M:ÛM†Ù ͼ.ÛL®¬Ù#’Ì«³j©,Ý@Ê1§E8>ÿ3*•’œoeý}ægÀO^h>!×m~OªjÚÔî— j-$»HBds"òèÃ#kc€ÛNs]µ¿Ã(D3(¼LGÞÇ÷øè2+ˆ¿ñÿ‡õ-Ÿ /µÇu§k!@¾$ºšf2Ȳ•i?*¦X À<éxîûá¶»„aÓÚk›?#V·±H|Ù,-d%Â2¯ÎÈ>w`Ç!A<NiO߆ó"t}œ{÷6¾x¯Äþ)ñ5ÓxÏÂQx{í ½’Éò݉Så³üÒœ+sÎG¦kOã/€~ß#2Ú<ºœÊ¦2.cŽêÊØ 3ˆ9Þ $c“׊î´o‰¿ð‰I&«vºÆ’À¨¹†èÃò(.V9—wÈ?!ùøâ¸øAî~%\è÷úF½¨ê(žØ•H’Ò6%csîÀÉl#§zÊ£).eÊe/uh÷<†ÇÅC¬ÛÛx:i¯šWH'Œ»ÛË$™ûãvÐŒ¥xÁã“_Jü.øµ¥x‡áö¥ªYêè&µ‰a¿¸ºtƒÈ9Éôý?Q“MÒ¦ŠÞ}öx¤g4•¤Q¿bí”Û’{ã9ö­cI¸ð„'Òç‚æS1X¼ûyšÒ»AÝgË*’~lŒò;⊴ãMÇ[“NNN\Ú\ùÿ[ø_¯]ëqxŠ]Ö©qp5Dšòq+JA Haóxãw¥{߇ioj^»¸Ñ5 »¸´ˆ\isM-±ŠD0WÛµw1Q»<Ž8®#ã żž¸Ò¤šòòkm/÷ÀD±ï’Ä)ÀÈã6Ü6rMy—쵫X_xªM;Å–—&§Vö°ù^wö„¥Ø°Ã‚‰„·7/Ö“§M6åÐÅÎT$¤š×úò>‚ð-›KðÛøÒx'èÆÚóŒûÈÀUFäLtvssœœ}Mtû_ˆÖ~𩼲oO¹¿[‡óm]³ó ¤ff!c'Í`¡¸ÀÅz“ø[DÒ5‹Sà +a»xd2\HŸ,+)+åô<Çë^*|UwãOÚÇK‹á~˜úM¯‡Úä<“Z#ïp•Æ”1Ïß=ñ\´Ò¨ß/ü©JÑ»w=oÅ_j[[‰õ»%†ˆÏFØYL`¦^B2íŒîcÏ'ÔWxw㾕¢Gg5ºj÷2DåË I#vù²ù;3\"Œ ½rq^Ū|<»ñn…oc­%ÔjHEÉ„ìÊðÙfà9'¡ç¾+‡ñï…oþ^iqü>X¬5ChÖz˜Ku¦åPÉTùÉ óqœ “šõý5`Ðc¿×³0ÎË52¦òì"\mËœõ5ÝêÞ¾ðç…5 oÇÚ\Ë?“ogm'Ÿ*™ ò(Ç]ÁPd“ß’ê’Wþ½ûWËM™ä?´9ü •î“¥ÜJŠ¥®~Ë R’gæ 7:p#æÉàñŠô„w°øÃÂZèv)sâ 6ÜÜÙZÞG,VöÃqÜ’Ë ó 6±Qž;œf¹_hz…¾‚Ú„—÷?ÙqÙæ/)Œ2Ë&ÀÞXó !cü]ÃWkðGß ,çÖ4íu5]pҘ׺#–*»X²–‰ì*£J﨔&¦“:¯‰~1Ôü'á¥U»[ýRÄQAø¡‘ºÈ|µmþZŒî9Œdô¯5ï‰^'-u§øGD{‹›ýBÚÚÞiv“6ïÞ¸KÖóWæÛö ™ùñŸZÊ’÷­t]GÉknvþðTSkKrú޾n!‘üØVô­­¬H*± V( ¥úõ>ÜÜ_³–“à~-[RÒÿ¶î"PÖ²_7ÉmÏÍ„PyèG\÷%›Äà}ˆ,FíÖÒIDaeÚ:tÎåcÜàV>¯à{Ɖw'„înm/¼ƒ…’q .@s ²†b@þ!ŒŽ@²…F›±RnZ\óOê7ÿüX¶ú¥Û˧[Èžeµ#ù†‰ ’W\Õ¼E£x'S²’þA¶`‚)i%‡Ë¸Ï8äñšå~1xo‡:t_ð•Ûjɧ<†âK`ndf;ßnc*0ÚIä׎i–÷ö^%ÒuMnO2]ZXšÁd Ž!ËD®Œ 0)èâ3ƒÝNЍ“RÓÈæªÜ¨öë)n¼{k©x“O»¸¶´¹l%¿ºˆ‹KxÕwˆâçíÚNÀAcÉ® žðm•梺 ºýÌën.¯$º‰í„à‚À$dXÁæ“UËIÆ<»Lñ…½÷‡üo¨YµìZ®ºÞ[È#‘¼ÛhY›Ëg‘ˆWÚÎs¼ª 4”e+ßbã$¢‹>ø³âÙµû«k ÞKÙÃùÒ";È\a²AÈóXß¾)hz_Š#ºñÖ4:Qks$ˆóÄ" œ×6yÊœñïVþ|Uñ$Ößf" No9áHw<Á³‘æ¾p…áy8¹â¿è:垥â8cY,g&Ðá –b‡år nÙ­óŒçØ×CŠ…á(ÛÑœóë}H ióÏ%¸¿{hãßþ±¡`ÛSp?('ÔzsSþî£(I„«'uð§Go x3V:sê‹y5«È :‚­¤ôUHÎ:Žk²ø?­É#Y楷‘þÌ#;OÏÉSÏ`c<×{àËht½vk ·±[_²Ì‘B«-ÇȲmâBªH\tÆŽ+¦øK¤x‡ÃÚÃkšU¯‡´yÖ%´ŠóÙÉþó.2X{œZç©/uÉ=JŒ4’Õ¿ÆÙñZ7~Õ>ÓuÉ*ÚOsçÛÌI·>v>fÊ3ÓØüñ6—û:ë6W:,Óé­«ÂÖ÷iæµÓ\¬¸ Ê®›S+Øòr2:ý'Â×·ïv4˜à’òT+pÞ`…TYT€§yœwÎ3^Sñ&=G]ðýï‡/lµ OLLÙ5´£|Ò¡Ub#pÀVÆ œâ±“–%(JZÔ¥*¾úvg´üIø“%|{Œx:ðio⌂K|yQÛ&×i@û…²0y5ÌxÆvÞ3ðí„Vªöþ"vV–(J¨!‡;|¼ãh©¯aÒüY‚| {~‰oycÃöKuÌÓ;Î2¡A,Ûp)8:+Mö6¡SrZ÷?e£–î -¥)+ÝmidoàPrzwt:'‡µ=VE¹ó‰ U·oqØŽ‚«üNñNŸð{A’óVx¤žõÕn‘ß Ú½Šu*JRæ6©R4ã¡›ñÖÇÁúcI,¸óš8¬!ò÷`ð>eƯOcšã2ê-ñÔF#g–Ùf—äÎ?x×ÜþÃøÇö™“ÇÞ=Õlnn>ÓgèžD¸ó? èÜâ¶:’Óï<êµo¯‰ÿ_yÃüNø“uã­yæÚ3G‘¢³R#ƒ¡yHÏÜ÷®‹ÅÖ3Ià[kûë ݬeî$k‰„ÑÀGÈ»~QÓ%ë\ ºTz¤×ðêÖRÃr%g‘ñ“ƒ’ªG@pFO½vÿ ¼S{oª»]Ë\yioæN ©ŒÏÞ/ÐW©ìÔb¹VÇ9=yÞæŸ€ü­xONÓ§Ò­lÝÞq'—< 3Ncʯ'œ`àžS×è¾ ý³õ¯ƒp›«´mE5}6 ™á2}ŒJ¬ÎÉq½v6Ó’2Êó[ïÝø£ÆZÕƒÓä´ŠX-$10óBe—Ëlí,ØÉ#+‰øÑ¡Þê8¿Ó-¢Ó`2-ÜÓ`b"@#Ô— ‚?:äÄGÛÍ)£ÔÂN1¤í±æßüS­^ügñƒxš{‰_ļ»26æƒ?Ù F¬6d·´‘¦˜p0:×gãû[i<)o¯k7Kë¹&„ÒGœÇœóƒù޹®Q¹—HÓí$º‹ËŠïçˆ÷’}.þ ÂÂÚ(-ÚãeäèÍ<’ܳ|êˆ1' Ć'¥ÏÝÊ4¡¯0¤×'3Z³ãgÇìßðŽ_øfêÞê÷Oߦj—wP:˜&œoaL¸px,ÇG³šñ¿Ù‡ÂšæãËXü'£¤—âÈÏ%ÕìL‚Ós3@ëœmvPžFH$UÙëᮽûB|bK¯³Gw 2ý»S¼¾ß%´ ¼#.yä (út¯¯üImÃËÀŸ "×Üú„—W—7éž«1bFîDj]™"E áxU¿Ù—³µä÷1£{Inö<Ÿáï‡<ãOÄWöÝËmk3º…žñF%ò£ÜXÛCÀ2œî`@É5_ö‡»Ö“ÇÚ&¡ëvš~¡ÜM©\ÏÿØ´ëÅÜ-¢.àmÜ7` C@#²øËà„Öú‡ƒ"ðÞŠþ%Ó/"ƒIx´Ö»{emÐm3,k‰6²ýáW=x® XÑ4/üñfâÛ­5uøÏöÓ E_%b™$¶fNÈþe”(Á̃§JÆÚk_ëp©ï½^ÆgÇŸˆúŒçðß…>kÖWvzˆ6† i–O³ªf;±%ÈgÝßÊ÷9ç?iƒ¾øWà‰çÑmm#’Þxtøm[PI$æ/2IãGEiã*T—à(kÐÿcYé_Ú·Þ:X.ügâ#§Ë§Å.æÛmyÄoR<ƒ+K»–RP*óÅ|÷ãRÿOñ÷‡¼kkqs«A¨ËmpK¼¾DæFY=ܰ'GPZèWSPMY‡4_s‘мKi.½l<5Ýœ‘€w6îø r§û¦º{‹¯ü4¹¿‡KšîÞ×TŽ&»hw"Ï pË¸Ž¨Xt<V¾(|6²øo›se©Z›«Û4¸ŠTóI ”ÎF;[n\šÇÖÿi=GÄ—[g†Ú'[tÕûc+gvü6C3œî$sÇL îçæK•]d¿u¤ˆ~+xÞmzk϶\Mu%é‰Ã]7t©&5wÆ1—cǯ5Ǥï«4¿Ù¬«°7©µX.-ÅÆ•;:FTº?Ë '¯É¦¨ijÖú™?q²Ç<éŠÚ’QFu$æÖ†íƒOŽ859§’óãDÞÊ: õ `àv÷«CÀŠšÊx&k­Q­ãûLÈmö<Þ 1Êà©Èé»qXÚ¦´'Ô¾Í8òPð»Àu¨4O]hZ‡™ b[­ÁD3¡Ù»,>B2|¤ÐÕ§­âÉÒö‘sT’mnIíå>SDá”ç =ÔŽ˜¥ƒÅ—Z4mªÈs”ã^Äûסéß´OŠšÝx~úÇGñ ƒ+g l‘Êrx98V>£9ïÏO4Öü6Ú-ÜÖ>1†{[èX.€c;†2ך•8Õn=J’•;Il2?]®½åjn©(d_õ‡×Šì~üp¹øE­O/‡ ´– ¸ŒSÃ<^bôÏoʸ´½¹µdز$2f) ñg¯=Á²e‰ÁŠW“~I!ªT¹´e»¦ù–ç¾h<⧺ø…áÉæyY—·F!O,€‚Ó¨µ›M2ÓÄIðÖùßLŽ}ñÚÜÛ*\[¯áŒrŒç€Fæ¼SOŠyG“lÆ4ÿm±Ï¯>µÒiÚ¬† -õ<ähÌG pAé\ÿW”¸Î…‰U]¦Ž®ÖÒY./ qJ³´r GßœóŒáŽs[¿´¹¢ñΗ ÇŸdw¼¥„J’vyŸL­s6>&o^Ï/ˆäšóV »æip¡TIÙÀP¯ššo^ÛØ-½Ú´-lJ«©,åXsŽÅqÅ ÊÜ«qÚ1’’=ÏÁ1xGâBKÛS%Ân··˜²Ãy˜F"Þ.W,3Á=…ik¿³>›â™ï¿á¸HµãÚ,ì­.RðÜD,¾[€¤Àn£ kÊ`ø¹iao¯ [é¿Ùa±¸˜w1òÉ<Œ†ÿ:WО ø×a§ü2šîb·z“ D?ghþÉ6›Žs€pÏ湪ûjQMTÕ*­Ùè|áâ; GÀð‹ë ”‘³½%ÇíµÀ$zšÍ“ÆëOòý–EŒ.Úõoøå¼WqvÚô×rÌ û|¯yäFÌtO!Þ¤Çé^mãÏØ¥Á}Æî19&XÞa,{IàFü¹ïdÖôåÎ’žæ)J›æ‹ÐŽóXkºr$•ÀòÝŽw àê)ºGŠä°„­£µ¸, b‡?ÅË5A|=+ZÛ\XÈ’ófÝ…ö5JþYm.™62¬dHåSvÑêqOØÝ÷D*é¯xôŸˆº:¥ók¾†7†x’FÝ0vGbp®8 ¨\gxçšå]«XßhkoÙçU‡À¿,£²±ÐmÖÂ]U‚ÉytTÞÈÈmÄn¾áÒ°Sã½â "Лµ¼Ó.m.®­åBU§@JÜ¡n»£”r;_'Ž+>iRQ¦öOw÷V!T½œl‰ü?ãSâ¶¹mc ]Gý´ñj÷KNòþB…C.PäF{Ö—Å{Oü+ø‘7|u&žëvðX^Ä${2(WøIG”e¸‡z_ƒñéVƒWðt¾ KëÙO»†îéá¾…¤e“k©’Àñ]׈>Ïñ F׬¼/¦Aá–ŽJICÌÑÚZpN#çÀÎî¹±—îj¥Y.þgn k'¹äºÏ5 jzl¾Õ-­Ž­gŠóR0Ðá²_$®C('©ÉôÀXï<=ð{M‡â¼Ñ[Ƕ2l¤á-ÿvª©…á²±¦Hààzœù>/…þ/ë:/†u­&9®,®˜ ¸v¬›cbÐÄìΟº`88Ü@$×sñ³MÔ´‡¶©âmoMÔ5 ­šS š1X$aÑsʪޝÝçšó³õŠq¡ÊÛ×»_#’P÷=׭ͯx—M÷ß§I“M*³[Ã/(ÎÚ,+ŽÕçzoÃ=âgÅŸ¬¤³‰Ô5©0rІl±ÆÎ9¯5Ð~-ê>Õt+ÙÍ«ˆåóµšÕ¦6óÉ—#)^J¦r»’HèkèË…þ&Ñ­ °¾³ðü)ª@ïv¾—$’r~XÉ?6ßâS¹êS–SÇÚZû;ëò9¤çJ Wþ¾e¼;'‚ìôÆøa †Ëéö—}´©ãycõ=2MpÞø{ñÅ_u ;áÖ¯j&Þ1¨F¾L2ZB®¾d†Vf*sŒƒÉü«šøÑñjò?ì#óî-äe6IœZ°WƒÓ8‡9¯µ¿àž¾ñ/Äÿ€Óø›Ç·ðʯs=ÜÖÃP0§Ø3y¯:"ÂI *ŒàƒÓšõpЩBŸÖ'i_¹éå´jc+'WUÞö<’ _áwÅ+9uŸ‰Ÿ µHt›[¨­Æc|A{¶#Êîýà‹T®Czð<ÿâçŘ¼6‘áo†ÚK躇Š:Xº•÷&ƒÊ A.Ue1HŽï’Uq‚M{ÅŸÚ.ßSðþ±=Ï…ìt-iÐRI,Þ5'Ìy——{$uP0+ÈÿfσúçÅ©jW^’æêÏÌv[MBxCƒ+¡%‹‰7Ô¸'¹é¾0þК÷Ãoj%.uçÒÓBÓ4Û:Y`‰ÿ³žæúeEýÜrár¤e€°^Êu#–²gÓ:°‚|«mþ |Wñïí[ûBx#áÇu’ð\jòVêÄ4pérØ™€H@+GËË3ç«(«~ ø=©KŒs›¦ø^Õ-.?´u"–¨è°fdy‰ÄŽù”r¥öTi?eo…w~ øâOüRµ²ð׈|K4––}—}í¥¹ ñÇ…}ÁçcæpR2 PFG ñ‡ÆÞ!·ýŸ/´ýñ|E¤ëšlº4Œ¡eKXÕ !â#;Ú$vÜH# Èàö¥ï{*)+oæÏ2Rm{IF雓Fø#ðÿUÓ®Uñ®¡¨iWòÎ i µ~l+aÙÕùŽP2“ó ƒÂ_ ôß^1µñ®·¦"Ô¬?µ–ÞѾq P¢Å岂áüï)¨9ó“^_â›=Gâ<>.ñ'Ä{ë5‹{?F¶˜´¯su#™ò@-åEeG+¹ˆ<ŒWÕ^ø{âOÙOá]µþ©fc´ðg‚¤€ÜF±3–Cœæ[® ž2_ u!ì}ç/xë÷Y+­ý³¼Qqñâm«øŠÖÓ,íåÔomD*‡RÔn’Þ(V@¤¸0„(T`l#­zßíàÖøIû#xb?D–ú…ÕÍÆ·oh·/lmäs²,I°)·AnÒ°FàØÜZ¼ëöGýšüOo§xëãTßÙº„—–°Úiš…¹ûMüÁU%»`ÊÅBñ·&½ã_€ÏÇÿ‹>2ЭüU¥øsÃúU«ÜêÞKŸ>l Ëy)òÅ +3s»;·XÎqƒôZ³JT¹êËNˆùSös‡GÓ~*iúö”‘<_µŽ‹m4˜.æ¶›È;G˱H ±îTµßø7á“â Û‘â{K]Uõ-Iôý*îÑö-­¬RÈ÷16÷¸‚@J¸êwñ‡Óïüàûën³õK›[·Šæ?.h^ß ÐJÞ"PH6Òbý“þ!]xŸÃGKo.üAo÷QM¶‘ †eŽ5—xɶ:q_<|n׳߀ll5H®&kg‚æ íe ;¿˜Çóe¸fbIŒü q£[÷òŠZlo[PRo]Ï_øOçxûB»ñþ¤að‡mlo|@é,‰.¡,öä}™Nö]ÓB0¼)*8¯7ý¢>![øŸK×<1©j7Z½¸Õb×ìÎYæÓLÐËÙÚnwì!K|̺Ҽ®_^j:_Ù¯µ ÞvK©c.v;íÚ§?îŽõ›$·:Æ‹$7ËžÚh£Ló€ã#õ'5¢ÂITç¾§,qéSå]OVý—ïõ? ÙË{qu}.áË[·· "²jW ´JªOÏæ€ÈUBxÀ­Ï‚ÂÚÂ?i}rðiö0îÔwe]CÍ‘e™•Î!·'ËØ òYƒdž|/Å¿Û6:{Å ÜÚZ^#þ4;wcØì_ûæ½SörUÐ~êzæŸ"‹ÉÌhë+Ìeó‰;IòÀØ!L…È$ kR ©T{³{’T—©éÚwÇ?üÔíçÔ4MGÄWZ­Çú%À›ìÛÆIÎø¤ûÒ¼\ct…û§·ðëüeÐnEÅïÃë¤öYÏ%”rkAÕ¤šKR­ç(ò£Û+ÊFDxP$øgÁÿ…o‹5TñÏÆÔ¹›Á:«ccg§‰‹6µvä–Ò$È% X)€æR¹à磃Á×^ðgÄ SNmOQ×µ/´è·ð-ªÌ—:¥ÌŒöÚb°%„P“(7y`ó窠•“÷¾ó¥{FõÙô(|ðf‰y¥¤xTŸX·Ñd,¤XÄ:uì ‘äFŽ$påÀÚK&y5A´|7×$ÖØøÏDÓåi%žém#[€|À‘WoÞFUwg‡#]n¥hÿüW¯Eà¡­¦¯ýš`†ÑÞm´ùUT¦àì\>ö 9`ͯ4ðçÇoMñ¶±¤ünÕWÄþ$ˆÚÝæéÚ=9˜ó$¦JÚåÜ6ço-º®rm-tëúÖÚr—W§‘¹âÚ+Çî‹g®x$ØÚ¼i ¿0·LÙ/¸o˨ÂFNr$‡þ Q'‰4¤Ò¾'xBÖ-ŸÊK›¨ç1JbB0" €&â`rÜÖ³|W¦Ûø®ÊÒæ×K–òl#ÓàÕìŸ6ð2WibA…Ž\nû –š£áÿÙïÃÞ ¾MÕ¾­¥êÖv¿i¹GxÞAYöFöç9“÷oãÓß±Ãµï¯ø‰‚ÄÕ¡g ÛðQðÇ‹®¯>"C¨]h¾ƒG¼¾–ÕÐÞÜXdQm潦‘K˲3¸±n3ŽxÏx¿ÃŸõr? êwsézLq"”ìá"Ø9Ër2ÁÎqœäW¬ú¿ìÿã½kÃð<Ÿaº`½†x8îc?0 ;‘ê98¯XøKà”׿µõ_ ØC¡ÉsVp(ý‘•I&@D’–fùsòíõªT¹;•ãÓþ Îç)Þ-.fõcüS¦%¤wvöÉÚœ†;o)lÝ °ŽAÈf`Êž8'Þ±>èO‡>?é–6ººLš<Ï+o@ˆ\Fê<¿3%³’r1À5ÞüKñm§‡m¬­üCf×ú‰!ü•£ì͆ÜI]ªA;ˆûüôWºn‘7WÖ"µÐa2¡™JyÉu$²ýåfv ÇÇ´„Û‹]ÌêÆÊÇ·i­|I£½÷ÃÛK)’ð·‘KÅöØQÌRÜG¸s¶FIŽväs\ßÁ-_YÐ> êŸ`ð²OcäGk.ªYL®X’¹c•UÁŽGÌ3€zɼEo«Gª[ø/N·Z%±š;(”º÷l†(¢(ÏÏ$çœ×9ðGC“Â?üH-uk¸þ×¥[#Z¢I¤Œ¶7`áy,FIcŽœrÁ(ÆI­<ît9'ïú«¦êqcö¿ß\ÚiZdR]\ýšbB‚|´ùKJäðI¼×ã_Ä;-zÐ]ëÖ/¢jV{Õ3´Ëƒµ®±µ›©AÐõêW~ ÿ„›G³ŽÃ˶‰‘ËZÛ.Ø”|À{‚<äæ¼Câ—ýKĺ´6H¢êÍnRå70ù€ 3ŸcƒXÑŠ”îô±×uN›åZ³·ø+£éZç‹d¿ðêˆô;y~Òš‘e¥·—“]4™åB‰¢@9/*Þ¹¿xÃ\ø¹má;Ý[W³ð,w3B×BKŒê ¨HËB…šF2@Ec[­?ƒ7‘øÂvºMý¤6òÞÎñÀͺH»dE\1&0NâHl£4ñiŠæv{ùdlŠUUn<} ¬ŠN?„J_†>¹ñoÆo]j óhçM‚ K{«¦H29,ˆÙdÊ«Ãå2nì08©¦ÞËÈÅÊP’G©x÷MÓüS¢Ëc¯ï·ȱ’È\ mPvó¸¶@Æ{ñÍywØto„örÏ[»]Þÿ¯eíŽÀÃÏ̹pzgŽwˆôëÁ¯ÿÛlÔà‘~Éyw)–H¤r2Ù  (Àr~3øMª\ø¶H¯Î©ªÚjPDóÍæ#y·MÏ#c§)·€xy¥I©FÜÖFó§'Ób·‰ÿmÿ jþ*’ÃC†IÒdŽp°ˆ-CoÏ йç¹ç¥tÿhK¿ü4¿_­ùž9a]&[XaAâûåEÉåN{ƒïšó_þÌšLþ$‰µîþdÔ"¸Ae¼GåFÀ•}¹ó+ó€2ŶôÈ2xÛáØx«\ÕÚúæMVåä…o $_¼ ‹4Ò:—UŒ"ˆvã«£ÙP÷lþûÂ5$Ûå¿ÞpÿõOüLñÌWÞ4—POi–Í þ¡sµþÈëH#¶W$ ™‰Ú¤© I –Ÿ |Iø­¤&£ÛOotd–y<˜c‰Hùp»™¤'«''$àqާÇ\xÃௌæÓ!¼œé~'µ·´ @‘"ØŸ0ÅÞ3IòÀUfÇ<š_²wÁ÷øk©·Ž¾83izeœLÂÙ§òoî>BÛU ¹!GÐ’}G´½5îÛdº“RŒáÂ×rüMÔþê>ƒKÐt[{=;Ã3‰ôëÛY%yˆ„ç¯#yVÎ oøwà—ÃÿÉöÿ h¶1ÿd·™óÜÈì$< ƒÃ÷ÆIÇlW†xÃþ ãZ-^?\ZhOz†4’ÆfŽ>qinv; UøçñOA°·ƒK6ÒLñÙ/ÙzÞÌí~AÀèÐW7.!Úë–/Ïó5Ÿ³øy®×C¾ý£µQ¼ªiÿôØ5ËJîÒ¾“æé‹«ZøoI¿µQÖì絊ãI µxT(wT©rÄì^AÚ8'p5ÜÙü<Ölü;©O%ô’kvöÓŠØ4qé"e*#0n(îTæ˜t ×á UÔþ =çŠõ[{FŠÚrÐ^2ÌË ÆNá*Y•N Òœùcdö3”œ’“_#¯Ö?fxô/€Úå¾?‡_[»AÅÆ¥r!]ÃdLH]Ê …IÇ<×»Òt/Û^üLÓµ› 97}¡—Ëž{‚ðÈH(1‚8?Zì~4Kªø—²]xGSÔVÖ‘ôÙ.~ÍI*”¨í’yžÞ[àm[þ/]%î–u ëy~×pæ8Û”Ãö°<ã=kIÔprrëó3ªáh¥æµ÷Å/G­§èW®Ñ•¶šâ6p¬Š¦™!W#;ºþ‚²þ ø"‰V·öZl²"Aˆåe—<«¶ïörOβ¿iohvVzð´Ûjz…»\j0o\Ù¶@Tulcó:í¹O‡>%¿ðMæÈ.¶¹.»(uíóxÎs]0¤ýŸ4[¿™ËV¥œU{ø9ðêãÂï5‰K»—…ÝÒ½œI&ÒÒîÀƒƒÏNµ§ð«Åzޝª\è–qß˧x~òi‚[òöV’n*Îä•ûë"…eà ƒÐW?ð×A»Ó¼a3Þk›i‰‰¦º·“ËŸ bîrÀ(ßרâ´ü>$øyã­ÏL™OŠ:‰³’úâËÉ0["û¶à’V6Y¹®J²æRæÕ›Bš´W_ÀÔÕ¾;]|1{«Û íeUŽ–&¤yVÁÏ8ãÒ¼¶ÿâ@ñ'Å…Ô>Xiºd³éO§IejYfòð\nc™ˆRw޽+ݼ_k>—ãMSDÑ^ëS¸‹N̶…¸X ‘¼hªø Ì2rH€ã\ý–4Ë‹L‹Ã×~j –µbÖÎ v¶@C¸3F3NŒèÅsOK¯_ò:êS«ºhó]U&-¥k? ®Yµ +H¥½ŽÍ~-ò ŒeËùS×µ{ÏÂ/ÚüMðÍ•ÕûÜÙË5ªÛ}‚Û‹ˆÁcû¶›–lðA#¡ä°™tísSѼ$ZL–Híol¹?na¹Y™ Œxã ×MðÇé:U¢Yéñ[FVöà°q•ùÔòp}3ëÒ³ªœãé³òó1“T-8ï³?p<+©Íú’ÂS•=ÿ…u]‰µKk #¸[ÖÍÃÈß2yXàè9è:×#c:Àckqµ‡9÷®«F½²½X㹎o2L*Èœ(oVµ|'¥Ï¹ÄÓ»ç·ÜkErZᔬžCƒŽ¿x7í½ûY~ÔÚ9Ü=®·ilÐ&ìýžéy!dÀ$“†+é´‰Ú#Ÿ/n­½³Øg#Š­c3Ï;F%,¼ŒG†#Û§ãZºNR[žZ« 7n‡ã'ˆ?dÍoàW.´ßxrÞ-bßc¼Á¢HOñîXžçî+“øŸûKë?³ë[éoÍÍÑWiî híÃdl„t c;»×ÚŸðT/‰Z—ËM Ô})6݈<ãó–ÜY7è+óÆO…S|K¾Ž;Í^ûQ·Šv¾^"Ïo…ã¦Ôöäô¯[Wë‰Óõ]kD3öK L{3\Þ ?3å¸ÜÇ%q€ç^)û-øL›ÄZ§ˆD÷N©*“x2ÎË€7tŒz[ŸJ÷»ù–(îbži¬Îý¼XUÛŽ>žÃ½iŒt¢Ô`Œ¨ÅҦɮŸ‹ýŠ¡Tãw\ ô'98¬Ÿx¤´Z4Wâhð6¨ä–$ŽÜÓtý0ß\‹M#PŠãOÓîV¹,Q]U˜`+±9È',}GjÊø·«[èöë§ØÀd/JŠÎsŽ€äƒÍrró4‘ÒšµÈuíM4ë(¦ðÜŸhš`<ë¢AÙÆÖ¯x?áõæ ð^_1•I%Âÿ¹'Œ{ šÖøð­-tc¨ø±ÖÛϵY"¾Hマ8=O¯5·¨x©´Ûo*Qff™øENÌ>€w­'(SVŽäÍÞÅxMøeá»ËA¾ÌÅFÖf¾AÀž§§å_0x“âø®Îûƾ9³‘ÓOY¥·µ»ÅœwÏlu5cöœñΟñÇÅ×^ÓÌgOÓ|«ñª¤¥æ’@²m< =N}9ùãö’ø¯£x~ÏOµ’ê;«øÞ&xå ‹ùNTubxÏÕP ê5ÝœŽ²³›~‡⋲xÃHÕµmfÒÞæÿ[˜ÁrHæM9G;µsâ¼¶Öî÷ÚŠ]éóIÄMœƒóõõ©t÷“M3FÇqv Ï\J‡P¿×¨qËÞ¾’•?fùb´<š•/g¹é~(ͨ붺_ˆ<ë´¾”þýçehÏ^qïþéž&ðmǃ&6ºœ«4·VBJª¹ùXãæ}OJó_ÙAµ¹ø©c©kÖŸhÓ4çóe—kã €õ<ØÝç­}Ç£ü,‹â¯ˆ­u9í+ÇŒá΀6ÀF0HÏËïÚ²ÆrÑjÏN¥ÐNvMŸ>|9ð†½yñ.ÒmnɧtÓ§ºÿIlÅ2ªG!TèøÞÛ~™Æ*¯í{ dží<1¡XÅmö{½*â6øg”–y\ä’I|€íã¥} ¨x£Bð‡oì~[Z^b6ÝE¢ýìÎÒp˜äfbqØMxþðOQø×ñûÄüam|9¤_-‹ß(.åG‚!'ƒÔ®: g׊­Nf­{4bœ#±à´ ô„:=»Öî[R’m§zBSd0“Ó̧ŒŒ€x8ªºÿÂÝcÇÞ)Kèò¹ò‘aTP Š8Np îN}ñ[û/Ä^$±Ñ<4‰ya`â(m‚¼ÑJd³Hp:dÛºŠÇ±×î¦Ò¾ËðÆòÏGÓ®$û+±B³Îì+qª¬KŽy®Êx‡ÝG_Àóq 3nÛyðÓà%ß…u—¿ñþž¯mo I#Kv.Óƒ"*¿k)኎üñŸbød4}[]¾ñ•j5«Ë°-íåµdŽ ;HÀi. P ¯8,Û{tñ?ÝÙh>xü'®ß2 KGArY້Ê‘žýx¯uýˆó7Ó¢|¯»nUÊŠ=¡8¯:pŒá}z5$©{Íí·©óf½¯5æµ®ÝéðǽӼͱ o<€€È3÷”nÁ=3[ß|g¯Ú _â¢ÏGÝ6ÙïîŠþî%õ;ˆtéÞ²ü!ðâçÇÓr±–âîXÁ•`…yiY‡ðÊ ë’+ô3ö øáýÂVñ͵3•Ô.J“n6‡óH`DsHÍéò"¨{ŸR¥U„§køZ/7R£ÐËýš?cûíàDö^"žmÃÆ»à¼Ú¦ÖöÖ£Úª¬Ä2JÇj ØaÓ¿/ã_ø&6¶uØl-üe¤ Úv%ÚV¹Ž@@!í Ù$q_hEp]W©܉"OíùaxÈdl·WÝ“žÄ óÿ|E†ÏR)$M¢yiˆÙÁ·Ç;Kg'ZðeŠ«:¼Ñ“;§8ÓI$yf‰àÝà_ƒo|1à™…ýÜÜ^^Å vÓ»ºÌÊ\¸m¿ìãŠù'öý´µuñ|ºgÆ÷þØÑ4ˆ®5;UQåÞÍ8t[ku“ræ2]Ž<œ×©þÖÿ|Gð»QMÃgK¸:¥·ž7ÀfžYä³À฀£$^wðÓö×¼o è>2ñ6¯¥èVwÓ"AðË%Üñ#Ͱ`©çŒòݽkÐÂSº•Zÿ ëÖç$£6Ô¿áFø¦øïã–¯ˆ|d’xCÂÖÎg†a~^O(H˜4{IÎ #£ q٫ļSÄ=zòÓÁ¢Imd‰tq{*ùÒ=Ã+NsóQ*®z;Šï—ÁZ£xÇRð7‹§ÔN¡stLÈŽÍ#Â2°dn62Æ ã Ôda…[Ó¾è¾ ñ&¿¡x+[ºt¶Hcº¼¸Ø²Ù\+gŽUTÛ°¬nù¨ãå4EªnËäŒc¬µ²GKû3húÂ/ˆ4×··w·¾+FÒ­­ïÚ9LŠK¼Ç•€îeéÀå©hk #Áÿµkêž³ðÖu]"=3O’9vy×1‰ZëU,`2´²y`±ßåDxÍq4 ¯þø—ÄzE¤öbâμ5.¥*·Øk¨Úåöàee'¶e`‘ž#à×Ä%ø»ûV4ºœe†—p<è–vdY#Úep …¤0ù~]øŒÔ(J¥G;ìµ5œÜmÔäüGà ;Äž†ïJƒTŽ{šH®‘<Èç …epyÈbªJô9ò”±Q©}œ"yÓ•òÜBŸN=søWÙ_4àÕÖ†žYçÓ“LO½‚VàžæØ¿Ú¥‡>cHÑd¯¦Ìk埈þÑl¯æ?õU¾ågC+*JK|ÃyRÙÎvà]øJüÞ‡3^e# RÒo¼7u±y­î¡m¦EÊ•>œ÷"–ÛHkû2ÑœM éÐqZÚ[\xªÎ(5é|‹¶ÈŽI~ä¬v»u @8o^µÓê?uû_M}©è×Zu›EË\ß'1…CH[¶ÐÞ¼ îçIÙ½O5Q›øQåwÖqu¾]α7'¿NŸ•Sº»5u6âB’‘Œ“•⻟xM1c–ÙÌöŒžp•QÊ ŒíbW‚:æZ¿µâŒªÃ¦:ŸZÒœ®‰©EûËS_ÁÚå熯†¡¢Ü$wQ# WÇÎŒ0Þ9µÔx‡]о"ø\dj?mµÝ$÷+n]-×LmÉ9ÀÎì`ž¼W+{ ‹=;7W*À’hû¼t#ëG‚¼Kuᨮ¬¦w:móÄ×¶¡‚¥Ú£dg Œ§½EHßUº6§>]Ìß? u‰noaðÎÍz q{%Î'˜©lÉS†ü¤goNxäðÏê©æÙIº\,y µÖi‹£÷ئþÍ‚9œÅXùQ9àn_™—äqÓš-t;MRòM:²]ƘyÇ 1'Œäá~^rqN$›æf2¦žÇ;¥k:t×1}®7M«µÜ¯çÀ­éµ9¦…`"€Æ~œ‘Ò°5ŸÞÚj—- Bæ.DŠAYAàƒ×éY¯¤\&äGÙ&{ŒsÞ©ûÛ2UãñW‰ãMõeÓã•Ý”:¼\ÿZèt”ÑÖb‚T6|Å  #3Á÷®C7íx ÝÙÕdcŒV¾«ç\Zù\Cma–ã×Ò“Š~ìcRQ\Ñ:;2Ûíi–îæÆ8¿|!‘WHÇ@jSR‹Â7—máI£ct¢&K¥,Ppw¢¶67`Àd ŽõÙüÓañ>¯§é¾1½†ÚVòä-´9Û…ˆô±À gš‹~ Ç#Ks£Ÿí(× É ŠÓ¹fùv¢ò¤cOpFN+šuU9Z_ð¸Þqºÿ‚cøô«3P¹ñN§kf„kxe,MÛ±ÆÔœ¬{y®ZëP¸Õ ¦˜&[ˆ\â5”&zƒê{þû«è|=gªø{P´@.¤‹Î{˜JMû·óhëÉ»1Ò¨Üh­i"ÞxfGVA€†]ΧОÿRŠm¾aº•%º5´µ½Ó£Ú f23J®yŒà•{ Zgü!°I#ÜÃ3à F7çÓßèiº7Š/®×Ê×|ár~é æÍz'Ã/é^.¼X5ýU,ÍMÆH[iN®á³…+ýÒyÈÅJš»1Tùž‡‹ø‡IHÔ`•š&\–Û¹ç—òÃwã8¯`øàßø£ÃçÅ3¬Vϧ«Ç7ÚMòy[¶¹lŒHÆqÍ|+ŠÂ·V­’¾ˆã«‰ÄV½6´ìú>ü`¼¶´ð…´mÂÊP¼³Ü2·Âà¶]†U ÏN+#U°½²‰tÝ[P‹[Ö5ˆ¦¸´»Éjá~Eq´o º{çë]犾럾*\êvñÞëÍœ“e»b¯ÊŒÊ¹òÂôçןZÛø3û;jêñ\kšU»ßZê $³Î°°Ê:ç'p Éä p}•Œ„pñ«Q뽿®…F2”9å^—òò*|4ø>º„nµ?jÚ}½ñ´Yã“a,®¥·Fr0Ī®H8RÊyæ¯üSеÍ"+›ÙdMòÉ’kh_|êË‚óe·G<ôàWsûMüDÕ4-]Óì-£:UĦk†‰¯9­Ý˜½:mú×Ç‹¤jk2[]K·w&âêh¤¶m:ÊHʈR2s,ï Æÿ”m `“ëþ$hžÑöæ;MJ{¤†HƲ™Uœ2”ny 3ÕAÀ⿳%ņ‡àÛ;zkk´½¹x·H­qv«ƒÔ‡nr9íPüTñ¥ÿĈl4ýZÊÛM¿ûDV1Å©I¦“>KCû2X†#©Î+ÇÇeŽwmùÿ‘–.šu¹b¶üpøyðÓÅ^9½Ôþ/ëzuü#®—3XϤ¥©—/’ÄÄ3ò°NI$äö®·Åß¶¿÷,ðßÂ}?XÕ.|s¨ÍªxŽãN°x£²ŒG··Œ“™T•&T´œäW”|ðN©ákȤøY§UôÉ$kص¹EÃÜÌ‘ð—…RÑ©þåŠ:¥sàÏ üñ„~øsy{ãÿˆÓD—š®¥qÅo’ ûH†2Ò.ÅŠä(ð=Úyu*qT“oúü ÂB¦ŠŒŸõ±Üx+ÂÒxƒH7^>šî; é^ýmEŠ1¹*àÛ©,t¨73ã,Y‡ WEñ»â‰oþxÛÄ~+o`u¡¡é‹aK%Ð…GÛnT'%˜ÄôdbN07ãÛx³Å:'„-¼ù/4_2[ôRGó±Siçæ—1å 뚟öœñ&‰áO|9‡ÀÚ­ói:<ÖÖQéžgØìõÇ”Ä!‘pdDY$ûCÊ:¨%Î Zèœ#®ç½–QoÞ ùj|Ÿû;|#ñ­âý3YðñŠ+£~Ï5½ÔC}Þž(JKU9Pã8澯á÷Œ|qs¨I jÖÛP’k[uœÚ¢$PDŒd}Œ$ "µÁ!Z@¸ÂñZ¿… øyñá—äŽÇQ:47”šê'ÖîÛÌŽY>fD“sÇ“‘0N8úSâ¤Sx+TÐNmq§iÚf©sä·–ÀKr°6?1Ü6"œ¥³N¾!·.é¤0ª’ùœ'Æ^âÛD°µÔltûOµ¬kmzÍåß+ªFòy„+ìV™Ù¤ÀÞ‘°Aü¥ðãÄöéðïÂÖÖ§ç$Zî¡sŸå¢%żW"(„²ïÏïYƒ,gDJ’KV߯¿ø‹â?í3=Ö­§øŠêKÍ=´=:Õ!9Ô¤VfÛ+ü€àÌ8À\aø7û8è_²Ïˆ"ø—HÓ.Ë+J81¬ ·nओž>‚oŽø±ðÇáv£ñBâ+¸üK¦i—Íb÷+‰#Š nÖ{–—ÈBðÉ'ïæÆ1¸€8ÝSâfãÿÛÄ ø¥6¥s¢jÞ°ðñ¿Y?w¨ÌÒ >ÑoägÈ,.%Ÿ•€äÍŸ_³ŒZ.•ãýCà†Ÿ¥Zj:]æ‹á+Hä‘®b9gT†7”67‹¨òÄ…ïX99ÙÍYô7…(·h;µ÷GÆï^Ñ~xÏ_ñ°Ò<ÿê‰}¤Ckvâ{ek så>S#Gw±P¨]Ä®O,|W[Ðõ«†ž0ÕtK4ÒŽ¿¦\η ë$ÏçE@Fì²McÆÔ pW´~Õ_³W…¤ý5ézØuíOZ†{ˆ£²’MCSšÅíá‰J ˆ›G-#`Ý:|ûqèOðÛÅ>Ó´m[Rmn Í4’Å>Ø£„²«ª? D¦"v’r±¨çac’åO[šâdéÑæíÐñøšÿEÖ~Éã›gŒ«‘J”|-Èpþµßþσñ2ÌE5µ²ßÚ{¥M¡"i7¤çh$Ë3…8þ/ZòÆðÚ®«lF±Ô[<æ7‚b@«€I ù ['¥iøoNÓ#ÔÂheàŠv[Nß<9ãkc¯nq_K*qœ\>=V|Üñ}zž½ûNxþ†ÿ ÓÁº’R^RS4AÂܪþâ61šIÒK™ <4§Œœ×ÏúÞ…qmL­æùlû¶&r žç¶kªøŸ§ë¾#ñ=¥¤–sÝÞ¨h$P­ ß¿äX—$ƒõ'=«3ÆžÔ|©Ocâ»+;S‡Ëó­®ß=Á wã4°±T£Ê­v^&¬±w“ZµïˆZ–±ð¯JðtÛEŽ›}.§Ï*'8Îgã8Ë’F@5é_²§ìß­ü]øáÍL±•F¥]‰%„rÛ+eRI?{îõçדx›Ã¡,]™b¹‰¢ A‚:x¯ÑŸØ“ö‚ÿ…±ðÇ~%ÖìÅ–áµ´Ó¯#·£Œ\, 2ÚC7|è`bÙòÀFrqž2³ÃR”髚eðŽ"´#U¿$sµç´o„ñ‚tµ½Ôe»’Ùoµ¸ã‚ÒxÖå¨ áWä”c’ã¨ÏÊ5‡ñ•gu¥é'KÐ<•#?2É3åÌ~cÀG`¹ïX~%ê^>ñµªøŽæòV¾æ ;—"2U9ë… ? Ùñn¶uïÙÛÃܳÜꑤqË)uÀ‚4s¹³ó'búÚ¹0Ô^1¨÷lìÅâYΕ´±åÊV=2mÎOŸÔOîã$~]+¨ðG$ñGÀoø²úém"ðµÌ[#«4šÔøÌû˜OÞo— {Ž8õºÿ‰í¥«3 =º“ÅwšŽu gàˆð_…´ûace¨ÞxŠöç`óe•”D¥ÛÑ#ýÚ ÎíÞ£5ìTo—Ý>v”`ª.e¢¹ÎE¯Ë©…¸žé§u²9É#Û=x¯Jø+á OÆ~ ñFo%ž•¢êÏ=Ù½šé-þËyöx㡲Xyq ?#(Ú3œ€|³Âþ—Zñ†á©MÆ«©Ï•º®æ’f8îq€>ø¯¥|5áë=VK›}z; øCÀò\ëWJBµ½Ôc…8q]Îïó.FÌŒK(ú†ʬ¬–Æ×Å gÁ"ñl:F›x4ÿ |6ñ4Ëo›‘6¦æÚ@±B ²à³Ç)ðX‘Î:/ƒ¾#Ñï„´_ê–Ö6š*7‰o/¦£ƒB7 `$AdºX£¹P§`°…® ö°ñËXÞÉ™£*ZÛZi¥mä¾bT‡>`]À–ÛŒäìÀ<õ¿> Kà]\ð߀/`¹Ötk%‹ì맬VzEˆ…Lé+/Ïö¯Ÿåw# Ä…'æJQ¥Y]7Ðõ©FXŠ«“T—Üv~;ðþˆe·ð•Ö‘%­Ð6ÚMäZ™ʬ<ò¹Þ%ûƒpAϰðð^“y5ìz” }{w0Ùf–bLÇfË„‰%*;36 bG âïÚIñ—ˆ´øü9žÕäÔUMÝËý­];¢v¼’2â<)ÉmŠî>ü$Ô¾-C¦x¥4ûY’9â]CU‘¦H&V("WiB \1@‘±V´)º1æ“ÐωR—²‹7 •—‡üU£é÷©v×ú•Üúb€¤n±yªÇa½›kQZJªN™î˜‰-Bî8ÉëÍYýŸf}WI×âµe¤]Z8Žãçšíó(!¡A…ÜÈ»’Ûw¶v1îZLjôÍLðO‡ä¼²µÒüAm+G=ª²KEó"G“r«1W8ÈÏk®Å.—jÖvwvÖ²ÉoË2ïDÀ…#““×Hõ®*˜×v–—üFŽ r)Úény|<·Öîï¡ðüVÚ|ÑFðÚ}©ä†™yàp8ÎIãƒ\ï§¹_‡ÚœúT¶–7‘áZK¸U·Æìãàœã=Jí…ãm[þ%’3Ãik Ee'qÜÌìÜðõÍx£Z[o kÓxZîÞ)íPÃÜA!1pì=sœ‘ÅL‹²-)¹&Œ‡©¨xå5=KâM•åÍŽš³Þi¶þlˆäHQb.·°ùŸ' Óñ áH–óA¸é÷ c•B²MÏÞ}¼ôõè rŸ³ÿ_Ã? E¿Š–6‘¯®­mãŽ2ÎÆâiZ,ù¡–D†Ítþ&×ot½E<7¥è—óÚ[¡x/v ÈËñÜŸb*çÍdŒ©ÍÙóJç‹kí|uâ4øô©,å‘%ž[Q³ÌC´*Ê¡¾ö ^rz3^»á?Á}}aâêPYiÚ}ÃérO?Ù`ƒxŠXTî>k‚£ ƒÊ{ r|)ŠÿJ…üqch\«™»@Ë FKq“é^oûnkÚç†~iZ/‚tÉôÿ ê加3ïó&f,Iv ušÑÎsq¥¿ÑBœdåV{%óg´êW×~Öüayã¹´°ÛZ«iÑ[[ÈíÂ8Ú Ç ͹ŒŠW“·<Åÿj1ð.›/ÈÞé­ÉšxþÌëÌQ°GùÇ–CÇ©dWþËZ‰>)êÚi“ÞÍ ÌK5ÉŸ+¥9êê$ žaܪˆÀç;O5ô‹~+ø{ßdðþ£G{âK7‰µYµ@=ŽŸDn³På¥nY¥!w?8©a¾¯>]Ù?\úǽ%ÊŽ‹áÿÄ;«ë;{Û­o®žkVuGYkaB2€TêÛÎ3œd×â½kSð—†mì5)|S’Css4Ê‘®›mÈí¹YÉÌ›H%w6:]O‡übšÍÍíôÉ$bÚ(¯ ®ÆØ£”G³î‡ÈÆ<–äÕ8|E ñ Ü7Ú•µóI¦µòÅö(SìërJ¨húýÓ¨lç×rE½cý^b¡V¥%hOCÈü5ñ¾ïǺkQYi¾ð½þ¥©­Ù‡Û/.m˜Gn[8‘”˘žx/Å/ŠÚçŽo¢µñ6¡9µ´Pb¶ó7Gz°',I9ûÄàWØχ4_øE/®fѯn’ÎÖâ;{=-dŒ3Ü[›†Ž$È@‰<í¤¢“Èב]~ÌÖi7:íö‡¨iº5„JµÌ‚;Ù›‚d‘ÙXùûÇ .Mwa5'&­ØÇ9ΚŠwwÜò?ƒ $ñô:Ž¡k&¡gmx‘6“í:’*—Aû´pÎy¸õ¯¥>xûÂßu 0èV:5Æ©p·rE,Í“18œ1EàŒ†=yë8°üÔijz¯ˆ<[iñ*ÃÆ>"ø_{«ýŸM’hˆQŒ9@ÍÓ=ª=ZÒOIŸ‰k ‰>Í{pјÞ’E`‚fasß‘ót¯/øD¾!øa%¶™eèqê’¬sîg¹›!ä¸MåZ5PŠöà‘_Dø÷KþÕø5}¨øÁ¾Ë¨Þ\¦ÇpBÜL#\yrí)qæâ¼¹·…¨ Ýâúõ=¸(ãàÜU¦¾ï¸ù×^𖾚έª¦•%Õ¤±[\C83ÆïòN3ó"7̪¾ø…¬xË[Óü!áûÛ;uÓË©kR!UºX†YIEÎÍÜÜŽHߨ|TƒÄxw@ÒmcŽ+ssZClAŒ¡0el#np} <Šb|-Ó†©7†.eµ»ñ–§2„°‚LˆŒ ap¸,;‘×è{HÙ©¯CÇ’æÖ/^§ûDèÐkÚt)áÙ"¿ŸDU»¹¹_ÝEsÓ¹$LÅÕYÃÜIla^ká_>·q5Êiï{e§IÚSv Ø^­­ÀükÜu¯‡ô‹mO´Hn|Apº•žÌh˜û7œÊ73Á<À×™ü2¼·Ò>"_4׆8ô¹¤h#pI¸VþîÜãæç=äšè¥VôÜc­Œ±ö‘ôo†5c§Åi ³›Ë+B–66k&Ä·‘ÈTV ‘È8 xíɯ:ý¦1üF¶þÀMbæêæy/®#OÙ­v…PŒÜIÀÇN3^«¬ÂÞ$ÕæÒ¤Ûg'’f‚E˜Äƒ-óg8! qžOŠò؆óRÒ>x‚ÿÃÃý¡§êß٠ϸ¬ ŽL¸ @R$=85ézoÅxUÔÛÆ6S›é÷:´×‘BÉm {¢F´‰Û™w2£ðIçnp«îMÆ1Ò&tç:‹ž{³Ñ~+ÇSjº5ôrD$6·­#à<°ÈÃ.NŒçž+.÷â ®™ñºîâÓH·ŠÚÞØE[¸Q!rt¬s†ààƒŽõéž<ŽóIÑt_iÖOr,.34n¢Ö%”ñç¾ÒUˆ9SÓhrH àprkôGG±·iä–ØI!*#îV ¯‹¿à¨²‡‹¾ üzÐükðöÞêïÃúG„otíPÚÝîÄŃCåÄF[6JœàšÖ*FPŠ Þºœ\¡eÈøÖ?¶•®Mx"µŸRŠÎ'FżƒµÜ…äœ)WÒºÍoÃwþ5cá=R@ðÊ!’`¬ø»yÁ Î1ŸZóøY< ¦è–~oí-[O+Èoœä³°çê{F³âK«9®"Ólí¢žëyuk¶ÌpsnŠ6pn=rkÙ­8Øó)Á5ïêοLÑì¾xZÖÕfŽêáÕ®vhШ۱呎8ùzuª¿|!gâ(|G{e.¥„ªª<ª w|Ã#•{úWÿu?Š~6¸¼ñòOá+"¦êbËò±PßfŒ‡”Œ±ÀèNN+ÛJK¥]è¶vÖ † ±q•%˜da@ tÀ®yþëÞ½äÿh©½d½Ó"µ¿–k«ie¹žÞDwi 4É÷°A<äãÅ~tøûöÐñ?ÇOÝi·ÓE¡xvÝ á QUÏ ç“ó þuúãÍT®ö¬¾RÝG${†å•‚Øàmù¿ñ¯àÜ ¼m©êW’íuQý£oppÜaý?εÀ*u*7Q_·©ÉŠR“IW‡,¿·u«X´¹YVÒ6º’wvŒNI‚øì=My×ío §Å2HStÐïÂãiÁÛÀôã¯|×}á¹Ötˆou}FÒ·µ¡‰ÎÕÜÃæŒŽœvç$úWû@xGVøãÚ&›¶*Á<æ‰]¸bM¤MwFκO¡ubÕµ ðéÓãT‡ùP!y'}Üùƒ†%ÛiÉäœÔÆOžoWÐu+6´VHò_ø2 {}7K¶šÞÖïmŠ¢…y&ŒÀà@ {iÖ±³Öd±ð”k>‹7“n÷R®ùç9Aöxq¹ÑzŒ¬ÝªÎ¿êþ:³[¥û0Òg3"Tq)y0¹Á>bHʹÐukxÛ^‰ìÞ-I2=ì#h‘_ýT¯ŸÜ»³mž;æº$ÒZ¾‡Ðì|á{k=1ÓP¸wI&a)y'¸ÀâÁçû£ŠŸQºÒ¼¢Cf$¾ÕsÍÝæÁf*FB1Ï}8éY"Ó/.»KKˆä © ãfà» Œ–Ç'Þ¼ªõe]Ž|±åŽÈ¡}­I®ž!Ÿ>LÃÌòd_2D\HPwdôäzáþ®¡ñw[‘3¹²ð§ˆ”ëšL×ö¡&’âÕQÕM±tD+¿Ý\¹ùAc× å~[6&ÝWïlxGŠ<&Ÿ~0Øê—ò¦ø^æ/ÊÇöo6-ÂD\0ûT@Ià1‡b+ã·º—‚>4É«@%žùeû SFm]6Эýâ2E€ÂõäW￈٦½©x:ßÃi§Üê;ux´‹UŽßOÒŒp2,ŽÛ[—¡ÀÎæNG±xøáŠõo|1ð‡¦Õt.êçPË› ¡*UmÌåZS#³g§%0Änìúİö•HßËõÃû9kë±òÆÚ‚={CÖtχºî‚‘èº4v²éŽ™Úê)lÆi¸’I]G’7y‹ F79ý¼eâß[ÞjêšÄz¨¼]>5Ø&Œ0Ž.BƈÀ–ÀPЬOÙgöGÖ|iá«)¼F²XiñKˆuÈÀ¸ ¬ŒbS¿1Ù¤'zÉãÖ¼+á]SÁúî­¥ü0°‚®ô»¸´ÍFXâŠ}GfåYäRÌR7òKuUˆ ×kp§©½YÏ9ËšOVyÅ‹·>?Õ’yCÈ>Ùp¿fÜαyŽX¬r˜räó^_pmîî%žÞ%‹Ëácf'=2zÿõ«kÅ^¾³Ö® ×mÖ÷ÌÝ$1B3*¸È•uaÏB+sÁŸ³î¯ãKÍ6Òö´ƒR”î®ËHS?<Î@$B‹’Ï‚©ë¤áJ½‘³«Z\¶×úêv_±ç‹ÿü\ÓõOémý¤¡¿ig”ÇȨÍnçÝó…8ÎÎx¯Yñ'†´GÅzn‘ãÛ­SZÔôÝRCxšÌÎ× pÉ’oÝÀežDO%pQˆÆUOñÂÞ_K£x °iÆÅ¯„šÆž¯¿T<~Ybß6T7#?0ÏJößÙËÂ>ñ<> Õ>+ø"ÿT‡X×nî.þÔSìñiÑ7“msæòwE$k´"º;vî<Õ%í-^út±Ù8ºiSKÝ]{³xü8Òn4k½GÄšxÅÞ"M=&ÓáÕä²KK’±A6í¤À_ÌØª•ãqÝýµ?e¯ |+Öî-¼#5œ燭Öã]^VΪbÉë ²Ü¥'²5ï'Cð…´ú–©­xzHu jk8ôKmIÚÖÂ@T‹«Œó'Yæ°Úe-“Åxߎm¼w /‰5ÍkNÒ¬|7s«Íw6¡mª«}%ŒlV[Ës½ÉŒHëæt­·usP©.~e •)V¢¯Üù#Z·šÛ¿– ‡$ö㯭UÔ4&´Q%º>Êr:ŠÓ²ÔlÞåí.eŒZJì»HT#€Àc;H±×Ÿ^*Χ£Ï…k+”½¶ìŽâ,ª8ÍÈ?Qšö¡UìÏtù/cœÑµ‰"»º1àmãúÖ֫㛉.š;Ç7 …Ž@P.î9ª–”(&+œ’AÉ‚²ì^8­ß,Òù˜Û.ÿ8ÇOâªqRÕtj¸Ç”éõ)âÔ4$w—¶mñà ç#éÍU‡ÂþÖ”i#{‡`+ͤӠšI•$FR‘2ò§#×éںτÞ6AkuÕŒ¶sº‹¨eP$]­»1É‚ccÈ,;A¥Êãv‚ñ¬ÕÌc¡Mj†Þ[Ž]¾V# þµ§ Y-Ö± N—"gý1Šî4 Bñ¶§­¢Ík K#KancVRß)a‰’<‘ƒÈÏ ×97ÂÍNâüMs]¤NQ~V°ê¬€Œ0#A4•t¥ïhÌÝ%öN›Á^¼¶–ɼ:ë$wöxÍa&G(½ri¾Ñ¾‘e à¿IáºÙ,RDÃÝr<EMàhì|[áVw6ÖZÝë ¶&@±#»à³ï89ÎqÍv—š7Ã{ë TÔà’G šŠËld:Yªà¬@må…ÔsÖ¡ÉÓÒ?q¢”e«‘ÎÜéRZÙ¦.£Žèã8L®N:Ší¾ èž$¾ñ²´6·"ռ丕O•‘‚<Â|»@#v løIðïˆõJÊÙcyíÌRÁr²=Š’ç{l²·$€£Žs_Dø á“Úø2ÏPø{â‹ÈõK?ÉŠø–Eà•*¸Ûò>ÖÚ§qç¯$W—ŽÌ©á#ûνÿàŠtè®z’K±óÅ:¿á×´ñ®ˆ.5¢ó@òÍ'—šÅA¸e³°«¸Ç$WÏØÙ–æ--˜:ù‡;¹cפ~З›ÄK¢A¦ÞišðÕê×× #@§ ckup™ÜJžJàdb±~éÒ¯Ç]ÃÇVŽÙuGì ªCóEnŒD£#8!cÕ‡½vQœiÒu#Úç*¿;ÕÝy øUñçágЬ¥ñ>kâ-&çp’Ö鈆U*à1ySÈlŽ¥0këGö—Ôm¼#¡/ÛKÓ¿²m¯,­´ù±µ¡~BÆ€‚ïí\äC˜©<ðá•Þ¡ÛÂKyjηrëwjTÈò®Ñ¦#B8מEx_Ưéÿ|[ >ùeŸL‰4Ø_lsÂ&ÜK‚£P1òãµ|½zÔ3¼DaoMÛÿ#‚UáQ¨Çñý?àŸo~Æü9¬øïWð‡Š´ï ·Ðj°–ÞE#mÄÑðÀG¸d`†ÉUóÃß tI›HH®âS=Ì[„¢_•”aOÌq¹xÎ;õ¯ŸgßüE×ô™|›ƒ¡ØIm{4‰‡³ò‹)$n26æ×®qØV¾»ªÛÙøÂöò×W–þv¡ÓcN#… î<àeÔ 9Çsé^>a„sÄÊv]QÝWW•(ÚÖíþF·Æëý3Å—BÓã“K“YuH¯å€¼P¶\ì*I åÀ'9zW›§ì'âº7ˆ¼wb`–V•¯f…Ⓝ÷ çiäusT³Ô¾6^[Ã¥ÎÐXé.çýœÝHÇy·ÝûÙlgïûM?á}ä1Òôë 5vEÖ¡c|·Ú}Äj²%XŽ6d)n+¯ R8UËÌ—tõ7ÀVŒ!*“µúk©Wá¯Ã;/x#D“Ç7Ou§¬Ó¦Âtòlñ&Qœc‘šÇÒ| «|eñ¥Î›à¨`Õ§ÑmÝá˜Ù´¨°„i¾`cYCà¶9Î2y­Œÿt«]ZËív˜ ŠÅÌ#¡[©»sÓ½}oû0|=ðïìƒû8x§[°Ö5/k^ Ðg¼M&=9í¯/ÚTxcHíd;Ç–™²:! WVWoSWÓ±– ±uG±ò'…i;O|&ŽÿáMÜÞ"»DM>s&`]‰v È2ÿ6p¥€ë^‡ðoàœ)ÐíüSm¦kz Þ¡$ÇÈtA-Ü’† 9$¹ò:p{`PýŽÿd?|ø-¡[|Pñ]Äþ4»ðü>O„F–e”MB$G!J|‘å‰ Ç\⽟à?öÖ©á;¿xºóIžm*Þy­,­5PòÏ"«®Rcål]û³ƒÉýõèÆ2•=ÿ­¢§–VHóÿÀüO$øÃñ&ƒ~¶×õÛaoáÈ£‚m+Îrš†«¨;¿ï%¢DŒ#Éd’0>qðkBñíùûWø~ÚòÚ´Åòuy- ÀµÓ4Üä.Þ3#ÂŽL„çŠóoø)wÄßþÑrÙÆÎÑÛé–³ËTÜNÒÌÃ$F‰H$ãi÷¯®ÿàÿ ´ÿÙËàN›âˆOkŠ5Ûu]VCƒQÒtá–ÒÏæ`! ®ÎÍàY²1+$•,7¶½b—+¯ì¢­¶05½OLñ¯Æ/kÇNÐ ðÔ×z=ôÆçÌšßHc6òF­¿dÇ2„V<ŽÆºoÚi6g…tÏÛZ cWÒ,l4a&ë‹«+î$…Y+Ÿ=žS2r_®UT ×~'„?î5VÏC>0ðeúù097"½ŠF¹œÉÃJÑÎûpIÉ= mh¾%¹Ôüw¥Œ1[Z±Ót›;HBŸNºš+ˆÔɵ—瘩S÷.:ÖNÊ6{n\²vê ¯ø—O×¼S®Áy5ßµ ‹'G2]EsqmbH{‰­ö€c3ŽÈ@@Wq2þÒ%ñž—ñ¯Fð‹nì'Öþ$x:ú¶%¿³íoe–ÍŠ#òç [hÚ1bM„¿ µþÕº‹E¢¥þ›¦èÞmË)- €ÿ¨9*rÂÊU0nIÅhü@º‹Çµ–™âÍnæy´¿ϦO¢C¹Z6’F’+Ë0ò¶r«qnåM¤ƒÃ²n7] ¹cumt9ßÚfvýþ.ØxÏÂJ±ØnX`ŒEå$¥™¤xðA*HIXqZ÷?Ø_ã-¥ž‘âÛï‰3ÞêºuÔ:W‰ÿãÐ<1 É+\G78¤kîgòC MyOíÁû:ÍáÛÍF%ÕãµþÕ»fS,sŠCåÄÇ yxvNqÁëc_Š:f»û¦œšoÙ#Ó¼.›w©ÊªLº…½´ï @,ªŸib ‚l*Kš‹ºÕi#E{Ug«üÑñƒö¤ƒâ×t™<­ê:~¬þó´A­Ò’F¹žâéäR FM*CÜzœ øÿÄ_µoTñ2Mw«ø&ÎÔo¥nŠÚîi…š€¹¼ëÀäzp+´øqý£àIÔ¼MwöÝ@Ñ}‘ %ˆr§$?æ*Žµî¹µcçU%RM7÷Z¾¡s¢ø»Â—1ÛE<¨Š±IºâÒGV!Xt)éÓŽôžý–ü[ñSÄñ¬¶—KozÍ,·“*ÆIbì@sß IÉ®VAñ…Ô/ö¨´¥¼+"Ú 4JÜW<61Áob{׺i?´n‡Âí>MRßTŽêÎ_³#YÜ´k?îñæÈŠ~U :3ÏJç¨Ý8§©­8Æ2Pžß™óçŽlŸáî¿©é:ÃÅ;YLörÁ2±Sƒßž3^¡û6|cÔ¾þÇþ>Ó´ háŸÆ#g»Eæ ÓM‚1 á%.¤«• qÎ@ò/‰%»’îþx®þ×tó YÙܳ3üDœ’y'&¯C¨\j~ „‹{‹ýR"JÊØ£Œ¡;Xn!ÆrÇœV•i{ZVšßp„Õ*êTö[-æð߆ÒMZLÍ}f_aQ˜Ô±P±ìk'Âþ ‘tSjdÿ\¡9äÇÜWSûJÙÅ‹u­Ûi±ÛZõH20†=ųՙÙòxì1Ç<^§ÅåìpĨ=ýj֊熧..¯³­¹•¬^|HžHŒû¦½àþ±yc®_išTsÉ©Á%Œ)ü¶Yg@;åAúsÒ¹MÁZ‡ˆüLSB·kûéc‘á¶VTiv©lr)ê@¯aøÉû1ë|C iÚDé¯_ë–6OV0H Ïr6¬ YùKpÌzkZ¼Š*z³Ž‹›œªAh*—Âò·Äm¡—šþK˜¢…"$·›#B¸ ýö‚>¢¾†Õ¼>ÿ¯âð„//…Žšéi¨Ù.’ërL纒&sqs$ûÙ•åTTÆ[à§ìÓ§ÛǨkÿuè|5kgsž—¼žuÖµt’2ÉùGrmaGBÛ™Ž0qúÿž ³ð.©åü9²>óãŠûWñ5É’ÐôÖC’ÒHK›†” Çqàô®f&4ÔVí}Çn*²”ö¹WSÓ<û!ü4ŸL𖑦x‹ÅZß[ØMþÙu©OœÊ ˜–F@KÈ@‰PÔ׎§í'®~Ê^?~#ésø‹]Ö5 ýKV¸†á̾}ñ‚vÿFŒ2L§ÇoWT0ÛŠâüUûNxfÃãý¦±áû=v(/î’êîh6¥ÔLžDEšNdØA—Ì‘K³n €¸¿µ KGøËãÏíTñDÞ†ËSÔåºOôkY§È´´fVCµjFC(Á8<žháÝFMoßúÐô©ÕŽJ{XÈý®¾\xCâF©gâV±šþÎMÝØ¢ª\²v€ÊºÛ—øj×ì“ãÝ[ÃV£inò%Í„ªbÉùä[ŒÆ!_‘ʨtgcù‡@ÈÙðßn>&þÏ>.ñ&¾4ùï­ìÒÊ+xãýäw­pÓ;F¼Ÿž6w'Ï©õ_Ïkâ? èÚïÃÈmô+®7ê³i–ènnQ"æŽ[ƒîƒîk¢5yi{9Çm?J5jƼ_Äz‰nu}à~˜|M¦éWZž©m,1ηö`P ’¢Xå±û¾ à’Mx·ÆMVƒYÑGðÒ7ˆ4ëˆîn>Å+ÊÖö¾PFŽmÇÊEUVe ‚9É8­ ü|ø“á=d/…¬¯MÄ¥#Yl”FŠrÆ ü¸$žpLçšô¿^36?³œ÷Þ8Óv½Ô(gÓ"½mÏ+†Ú¦a‡Àeƒœð8Öq‹¤Ö‰ÜÎ÷÷f¬|åûIø’ûÁ…ݕѻ˜¬k±š$ùXFDnJŸBúᇵw~1hú‚Vë_KM[x“Pµ·³iUÞ Såç*çilr nÀ&¼•?Ã+¯-ͱյFËHœ4Ì»dh¤‘ånI.8ç#½uW? Xøs¬üB×®üÈõ}.òÆÒÌÂHnqqHåŽ<© ê7œ s]•iÇ‘Eé©Ë 9Î÷Üõ/~Ð^·ðsXkº–¯mâiL%,§ÑL,cÎñ+¾6! ‚ džÃ½IðÇþ­#ÃÚž¿áÝE^ÿNörâçÊÆå’*L¼Iäg<ñ_:ü8ÖíüZói^#¿´Ò“R†KYµKøãìèÊvä€\ €0¸'+Ðe‹Ãá&«¯xsâ-Â[ì´š{K‚AŽà¢ác+ƒó• ¨é×9ï„°Ž„%ÈÝ÷ù}ÃhI«Åyÿ™ô‡Ã?§ÅÏÛx—LòÙ-nVÊÅ,ftWvò2<“±Ï9lqŠôŸ‰=Ò<xNµqmDc¸’IÙ¥óŽ#ÀOO¼0IÁíó§Áß èZ¥iànÓSÖ5wŠæÕ¥¸ŽÖÕ1w `AÚr1ÔÐ ïµ­çS"ò(õMnhã3MyÐi`.lj ¨'k/Ì͸“ÍpU¤§/wdzxzª”dõìSã=ÕÔ±xVËU·$S[ÊV;IdÉæY9MŠI!—>Ù®MKм i¢jšÚŦÒûl£Ü³K+´Îò±8Œ¹$–Á-œVô/Àþ'Ô\ºÔcÔ¯ô{¢²¬{vų̈Äa>Rršì¼Cà]'KÒîlLݬ%ã6œæ6師-ò(`Hê2}-B4žâzÜ–¾‡Ÿ|ðE׆|â-JÇIþÁ¼µ•¥·°2¬ïÁ+¾L‚~L2Ùb;V~«ñÄ5'¶Ó#ÖµGThØÃý›paU%~e’_¾pxÇòN+м¡Í£ë2Yj2YiPÜoF”lÖI/âH]O8ͰÇõÏ¡è°\^ß=ö»¨y wr=¼rá®Ð`HúuÇ5¤ëFíËcš7$×_CÁ>#{ÉŽ¡aÅÖ‘a;ßÙ[yw·äãɶ>[WmŘ€d‘ÛÇ?i%žþ/ YxÏÃZ4]­Ôq!Ó›löhNæŽ$ 89 œzg‘ö݇‚|9ý†‘ëw…®P*¬‚ßÍ•‡ *ÆbTsÔ‘\wŒ>麤ñÜø\Ø=È„q$Cl6åXÉ9ë–ž&”jsY³Ñ†§³i;3Ã<=âO©¥¿ƒn|eáé<œÚØÝ}#Ž2á#võ.ÌÌHf,ãÐ[ñ‡ÂÏ_[i˧i:%Ì©Iuu»2-ÍË.Ã6  T(8ä×§x:ÚÏQÐt½6ÊÎÒ+K{$iïcO4ªVBTç¡8úæ¸ÿjZ†§mµµµ”±Á¸{ˆî•ã†}ÇjÇ·ï€ã‘Ôž4gÏîéú™,5¡vïúõ=>qquwkv:f™kˆ¡5Óa³û 9PG¨'#Œó›/I®êâòÇí±Ã,ŸjNS^e­Xx+âf“¡ôñœ±O§ÉÒ,°N¯ 2ä*q-ó*öâ¾j¾øSûFi1%”q.¢ßg‘ žr•µ¥¤­â¥EbÕ¶›, J˜Ì‰˜Ûêò:ý¥@t¦¹¹Ô2 ÝÁeBÀþð¶* Á'Òµo®¥™v µY9a×9ìNzûVsm³{UGÛunYÎâ7Dž„Ÿ~ÕwW8`å-zš-ŒsÝI±ˆDq*°Ê£_N•£¨é‡ì-¼ï‡…}Äõõ¦x7K†úà5Ãy%Nwm.yè?‹œf·u3uÁxžë…m½Èè1Ž u<;•+œŠö©ÈÙù7ûQßèþý¥¼_¤x&ÖÊÞÓN–(™J´»\Ç—“Ìs€Á‰G ¬»m j’îÚíÞycÒížùÊvuæ%H>Õô‡íoû éþñ­ã›Éõ=jëQ¾{›‹[ˆ³°aÆÍ˜P©Ž7g–'­xΕ¦ÁepgšÖA¨](x‡øåÝzüëªhªq…ß2Zžzƒƒ|Ïî4ôiÞÑtÍ7WŠHl^4ef’ãg—J `ÜrÇêzÙ3¥ji^[¼†".÷lvÜ)-“· ¤`c¨ï\^¯m&‰+ÅfÓ]:ÄÒ]1_2EÉÝò“ÈÇËÐc°â²ô/ ê_£Óíü< Kno¯àAöÝHwgÜ@ïМúÔ^SØÝûÎñ1ügwwñ§âYh×)¤Ažá2¤›ÜæR3…$üÛF>é¬ÏÚökÓþ#|¸³þѰ³”4ñ3‘D‚}Ø 껈ã+Ѽ9á{? Çy6ƒnö²ës%õÓª«´d¡1¬×… ÇL“ëY¶úèѵ5³×%³M»¹Šù/9‚°#  ”<ç>ÜUÆ~ÏHt2Œb£ï8øëöñ…áƒìRi6!æ»)8Þ®­ÁÇ‘ÆÞƒ5å$Ó¿áfxÁm´+k¤¾N1‚ebU” ž¸A´cxr×Løq§#í c³Ó´¨ÄQà 3¼kÇ$uÇ<õÅtÊ×ßS)NLÂÐü+a ÜíaåÜÁf,é Â4pöÎ@xÍ|ÿûCO­¯‚î/tך= ÄÚ¯ö•ôkÈþØæC„u®ÆPN3Ï-Í}Ao¡[øgÂ:”×WFäÜÊ|Ë‘ƒÏˆáL}W#…%~U89xKöx±øÅák;/ý¡´Ø„³6Û‘SFí¹¤Â;"° áòHôè´ä—4µEÆòI3Ç¿f¿ZÅ¢¯ˆué|ˆ^I ½¹¤p̧<³n܈«Œ’zñ^Wá?Çá½;ÄöÚÄÚ…°¶¹6ÐÅÂ9ÝÒVTF£6Bû×Ô7õ¨~0jš›;­'Nðq‚ÒÓR’vI›tœ4MÔ¶ùNŽ«é×Ô¿fØûL°Ñ¬õˆÚ4¬÷_ÚKm<ìM¬èìCȸÌÎ$ pÇn~l0Gw¨ö}F­(ÖiZ˹æÿ¿a[ÿ‰…5‹óÏ¡èz=ªË”†’þFI$Îļ mÀÀïÍ}w&¥…!ŠËÃöÁl"R­ö»p0¨ylnÉ=*ö¡ª[XéÛÌŸe]£ ŒÏüx5ÎA§[_Ã%î´Òl91Fï -Ôùç‚r8äž+ίˆx‡ï+.ˆÊR­dK›g,—örGݘÀ,Ò”vïòœÇSí\¿Œ¼Fž Ñ®u¶£{ “«b5ódV•€]Ç8#q=k¤¿vÕ53ý¤ÀF’¢¤Åw @2SpÏOzòïˆZôÞ:Ô^ײ,w3%­¬3–-,Œ³Bãz¦H@3ÇAÍ(S»²fNRnÈÞøiá¥ø—ñõMr o'Hš9 `„@ž¥1¸•ãߥoxûC–ëãjjZ…­ K¦Im>¿æ¯›oüQB;‚°%ŽnOA] ¦ŸðãÀï¤è“Å<6¤C,JÞ7ÚEîǯ<ò;V4Z¥Ü:cùÄu5ÈЂTm°¨ÆâŒ7«Œ‚ÜR“ç•ÖÈ™Kh®…Ïi’iºÍÄнÃÚyR³£[éÞ%ŠÏK+Â5gF"BìÛÁÏ?¾q‘Ž1V|¿ x.ç@mj#pºƒjš™ˆ‚5™ŠË1BIÚ»F>éšóï‹ÚDñ^µ¥‹V–ÞÚõ£Œ7+ªÉþ9*½Ž{׫MF¼ÜZ:jÒú½58»±º‚ßS•mä󠀈ƒ£å]@ÀÚGlcò¯·eïÙëNø§ðX×µY|CªA¦O¼; [1ÛÛl"I¤fò·Æ0¤ž+ÂÿbÏÙ^Û㌱LRâ×ÃúUƒ6§|ª°47å$d·‰åÊJœFYð )8Å}kû x?øËW±ÒÄrGá)-‚^½ÒI}s+ùÒ˜‡Ò«…9-Ò[+<|£¸Eê°¼Ñ÷¥Õlyì¡û.ßü&ñÞ—sûK@ÖwvÚ|w÷l·D½¾(…å9DÉo¸î>b®Gö­ý©<_ãO‹sø7á­ìºf­§^ÛéºÌWk§iñª¶Ût·2°M„L»æ@¸1·>“ý°¼jÿô+íwPKÛ˜õ;²·–Øå!i#UÛi&Y°%@8WI9ÇÃPøóPðçˆ|OªÿÂ5¤C©jšdٽͪ›}6 Èð$¤«HÂd‡S×$0•Wíoo¸ÏNx†œ´Šìz·†gðÀÏÙóUÖõgF—Äš”7rC¦YjŒë%ø-+²Úž%_5ÇÞ(HÍn|'øß§~Ìÿ ü ¡x¥bøËC·º½Ö8¤2Ë’}Jm䛫¬¤ËueÂðªsá³Î±{©_h¾´°µ“@Ô5Iou{™-|Ù§·æY¹ºC o¸g÷…†NN+öŹ—Ä´ Þ&Ø’ê-öðFÖ\GÔáp¸{ƒUR­SÙÉèκì´Jk_ëÌæ¼i&‰ªêÚÊéÚ{­òë“ͯ5Û<×d;eTFìÌD†EÆ Àæ¹½?ÄèsÇo­@‚)df/bÙ<}+Ù¾xRÇáåó_|HºKk}RÑgŠÞB±1EwWwDÜHÊ‚[ðá¼eðõõÀÖZËaÌv.„Cövd~LÌ`ÛÉ ƒœq^¥9Æ>æë¹àba+¶·} wzZê×3¦›jgŠ5ÝæFžb¨õpÉ“ÆOï\þ·¦G¦ vDYB—¡ ’åPÚňԱÃcYZØËiª´ª–²‘„ SqåqèOå]sZ„ŽÜù„[Ëet «{ØŽ•n\»’“å0´ÝB_ ¼Pê0Zµ´ü¿œ¾j*·ÊJ©à0°{k»Ö¾(è–¾¾Ò|7q¯µó\“¡X²–Ž  µc+¿ü´!·£d!eÚJçÄ—‘^Ãm9‘A°žÙÏÖ±¯—íp²½àkx› Ï›w$b3o¥eR ·Ä'._…µö­á˯êx‡B·¿µ½ºq$i!ŽçH”E³avË|¸¸ëÚ¹ÿŠbÐïfO‡×í«­šFÓ %ŽwUdŸ,aX0!—¶Em|.ñýžý™mâ)mv[ad€3\î£ÃÉ'òêŸù¨Æ´=ãåËß ¸€AskåË&@“ú¶àýßâ5.£¤yvÒÌÒG#ZF2«‡s0ÃùWÕ?¼EàÏü9–k¿ jZÇŠuìÛûN8[݉~úp>DVÚ`y€{â¼#ã—Á˜þivWúγ};HêÏdÖÏlûNSÊÆå(ß)$ó‘Ò¶§æø•›9+RTŸºÎãöfñño]½Ó¼y©Ã¤=ň°Ž[(±s*ª™r»#ÚªãÐØÍ} âxgöð•–‰ˆ¯l<&§É}uqåÉ#ƤF’6<`\àó¹O WÄ¿³—ˆü3¢üuѵ_‹ìèV¥šÚØ6û™”©Œ9R”~rëü@?)lýe«üFðÏÆÝ~'ñƒ‹}xWžòy Ë<–V') FýÞÊóò¹ý)Ë‹ÙÚí-¯åÝž~"MÙ;Øù?ö†ø¿uñ›âöž©qÁi··cUò! òG‘÷”uÿxúšà†¢m®ÔÍ3ì`pOAíî+ëIÿg?‚Òü;Ž}'UÖ¤Ô'¸’Ê9æ»>dGwË åüªW’0qœ ×™|[ýŒ›Nø…¦èŸ õ u4Ô÷Œ]aN*~Spê6…a–Ý´`u¯W.Î0œª”#($¾Ò±Q«¹bmü*øl|Cð'BÖ´ëû¸dÕ.îa¼ƒí #e+rRõ>õêžøCÄmS@ð'‡­ô’a½‰äÕV'x¡,’e®dXËŒ’9â¶´ÿ€ÞðÝ…®‡à½~ÿC¹¬6sN ú‡pªª¡v‰ 6ì¶x ; öÙoáíÇÀ™üM¨è> ¶¿¶¶‚}9§· ’%ÄR´¡G€»@$1_Jñ+ç4Ô%V-Ú÷I«6vá¹9}¤ö_{8¤Ò¼#ð;Á>%Š;]FK‰®?²Íå‹I-ž¨¬HWˆ±Ì8t «p@è ãÄŽ­¾#Ü òé¡Õ¢1ˆQ "mQ‡"EÁÏ8ã¨'5ꟼUªø“Ä6zG€là:}ùžêöôÛy?c’S –\!{| g­xÖ¯­·†týwXѦÓn5+v’Òïû;í©2©e2†_õX`¡TᛨȱÃ_9VžòóÛäaR¼q5®ô‰ì6þ7оø]mt«„¾—JÌBWz ÏÍ—=I²xöíYv¿µÍ~DÕ®n†–ºÈbÈL¤°XÇFb<¾­iÁû/js­3C‡MÖü7«ÞÚ\®±¦.lá·Ke?<ànÎ_ql6àT)'SáÇÁÁâÛ|9±¾)Þ¢ö× ³,°Êޱ–1«®ì…'‘‚J^U€£AÊS÷¥÷˜ý_šwjͽ—örøXþ½·ø‹ñµµs}«ì»HbFàT…8$ç ⾬ð¿ÄÖøÐ<5¨M}¤>™¨AwåùÑÛOuz®¡|°OÍ#—v䃴žÃ_ý ~è°øGÀ~ ðŸÛìamB±žMÆp¨9u`FÐŤbyÈñ\×ÅZ~ÊßôßøSÂúgˆî<>±éö÷Ïž9^Ãûñï&U'†€q[©óm¯e±öùNØJ׺H÷_‡>Ðþ0x^JMIÓ5…Ž•q-˜Šk3‚¤8BKüÁr¬H9< \|â/ éØÛøjÚ{ ‹”¸’ÔGÉ*òãFâ²åØ®ìík…Ò?kÈ< áÍÆÒïOþÌH†5TÕ{›Ñ¿Ìr©°ËºYNÁ.#€“áO@ô5Ôüd}ÞÑ­ìu_øEâƒP¹’-Í2@bƒíWsñ¹v¬ÁÏ9# p+ËNvFé:°æ_Ö…ßÚÂ6þ ðE½¶«£Eyý»uWO`eÓZâ]dʨØGÞrà‚*Ÿìåð‹FoØ›^_ƒ¾!Ô\Ùëi.¹ +41]鯑â ã*[Ë^Ž äî¨%ø®|tø•à¿ xFÂ=:=D›‹›ôµ’Sq¬Í$WF7ªÈL?/EY0Xã5Öþϑ賖‰áÏX@š¾Ÿ¦Zx£U¾‹cCpi­í ‚AÄŽ«M£ž0ùÆs«' OÔÒç”4Øó=[KOxsD³ø)m¥–½Õ­¼=e<Š`¿Ôž •3ÝÆ¤yk¹I‰brD¨#?2~×>$ÔõŸÜÙø†{9ôÅ»¶¹°ne‚Õ­­f²XѰ ƒæÉêÒîÇÑZ†5_|]øcáoÝÃ/Úl¯u«¶t2ÿgÈš´76–ø'ër¯·ïšñxXø‰âiV,ÙêwÖáa"¶ÕZ;Ù¸áTÛ{·nF3Ûƒš‹Œ¥±Ã¥*Šin“G¶¸ðÜZ”—h“Íz"–Ø}øÆÌ—'¡Ã޹5»ðßÁ׳ërË™¾ÃE¿ÕQ`]ïòƪ†Å&ECüTÿ|-Šˆ ðÿ‚Ödu–æ5ÜàªàùÉ»¦Q‘ÈÇq^ïâK_Ù/áÿ‹üEâ&ËM“Æ^LÚ›,"HÅ•­š•iÎK͹-!;YŠ’HÀZÊ+M[ØòpØWRV—MÏ—5½Öù‹Pb]ðFÌ~œõÎk¤ÑõgÓ´;A­KºÎ9µ²0W(ÿ308àœç’8¬ß‰ÿ u/%œÞ-½ó5KËt»¹äY$„H¡Ç˜ËÀr1^Äã²4™ÀGçï…Æ6ƒ‘Ç…uAó%c‚·¹7¦ -wO†ÓR’}1Õãü˜‰*’J‚À žƒ§=j+!sgã¿ j^,ŠåìaÔm/öŽe·¸I%Î3‘^à ZÚV‚šÞɤO)Tƒ¸ãŒc¯j©ñÀšŸ‡¼Oi ÃÎñiRãËa:&æ8å€ûsÐó¥ÓÑîqUŒ“çèSøÛâ´øŸñ{Äzý¬ÒWR{¸ávû€ýÕ÷Lj®[óÉuw-»£=Ì“ˆãG.Ä…U¹$R» /w©Wf ÁH ƒœŠï?c¿¯ÄOÚKÖz‹jp[µæ³{h.¾ÉçÁim$¤´½UVSnÍ·–gF5q²…šÑ#ž¬½½TÖì馸¯|:¶²šê$>#¹·ym¬!™Lñ®ï)Át°$Œ)8#Ú½»Á?u¿é¾Ö¼Qâ»KÆÚuÙ­-äºC¦’ ]Ðþõåì®9 ž=Oû2xïSøéñßK!ƒIÓ¯e²’Ku‡H §[…MÒ4vùg #rXnË15õ·†þ éþñÖÆ ¨;ýbxÝÚ«+;CnÌ>BÜÅNÐĨ'òñX‰FÎO]Ñêa°©7/"_„ 4Ùà…>&hÖÐh>tÒ,1äÅjªeÂ`W;¶ïnB¾Bž¯“ÿ࡟´Ô_­47š¥ôêͨêºÜ’N¤Ü\ùë @ˆ¡›ÊÈÀ ¡€\ƒšöŸø)æ¤)üJÓôKû¥Òm¤Yn¯5‚Kƒgo ï‘’ð]ÏÊ‹’ ǃ÷‡‚ðEŸ‚5Mf[/ é–²hÚ‰çM-åÅÍÉšwU ™^&TÚ6#3¿M„z†#ÙABŸÄÿ#ƒ) ë·:‹Ý>|øeðÒÏörø­â_|d’Ö=C–×ÿÚmq#ZÌbµYÐÛÊ›K²˜ŠéŒäWÐ:/ÁxÿfÿÙ ÃP×VòÛÄ—÷pêòA!66¶ŽG[xP9V2…žN~Wé·æOÚâ"xÃã”:¾­ÚK:Yÿhý•Á0þó÷‚0°’0IÉ,õ/íñƒMø…ðZ—Â÷WW7eÏœè›3ÌÎv<•UØ?„S^uiÕ|’¿Å¹êS§EÉÒ²Ij<øã-Gâ~«wyceá½?KºŸËµ]Nü «©2 »– ¤í!%¸Œ×Ž~Ú^>ñ.¥ãKêviö¾ºÏvmØ4“¯Íˆe¼¿0ÁG"»/ØßP—Kýš´øêÈÿgjqÝÚÉ|óª5¼V×ÐMK»º3>W ŠœíÈoøãñÇXø½­ÝÜøžúêò5-öEÜíQŽ\‘ß5éÒ¥ûë$´< IF“o©ÔÝMáñð~M/N³§Èe±Ôíÿv“)ŽáˆÂª©|àî>œT^ñ'ü%^ žrñÚ<÷y·pRá—”'˜–fÁ8è?KÁñÞ_èwwR‹h­aÓòŽ\0PJó—<‚ "·þÿdˆw–ú¥ÄqÛ5¼–É:1òŒ¤©VlŒíá¸ÇR+ªKš2O[jq)»ÀÄÚ†âélô£/Ù$‚-¬Ë–,Wëžyük¸³Òô­#á¥õ¥Þƒcu¯ÉsžÐK)ŽBB®¨2H\±'* àðb|ß{©Yë%­–Ÿi`‘[ÛÄ·‹,²‚K;ÉÞ]Ć9c滿xËMñõœFÞÓ¼A§[ÊÚs[îtIÜÆßs BW%AÎà1PæÝ5¿™»Q§U¾ç)oàý?@¶üKefšÆ¥\ÞX¤Êš„Š¥½ÁR»]YÃsÚ¾•ý”hk|;Òô==odÕ¯çžæò -ç[K¶!bC.ÝÈ“!\î!N:5xž‹ˆf›Uµ‡L¾ŸMÔ|ØÙo.¼¨äŽBÛ:ÞjÈÎäpðr+WDø®|!ø­y$–žk¨æÖ£Ó $SD:ömV.0Ü“k’¼=ªk™JJ K±ô¬2Úì˜jvu3Xb ±UÔ3±å›'ŽGÀ~0´ø‹=æ· ZÚiwwM„¾YcnÊIUFmaùùƒt­í?]Š×Q–O&‹ñHÈ· âX—©c#Œ‚z>œ×‡.’ûŽ÷_Úoò9xâßUŸBÝI§Øj}—ȺG‰îKDè®ÚËü¼ (+Ý|/à^ÎçG›ÇWû°˜AŒ‘ +çÁ2ÄœsÁÉÉåZ÷Åox’òÚãOšÛUkiã¸{q˜’%+¹IÁ‡<õ­Š?oí< âK=ÖmVþÂÖOÍ ‰›í¹w‰£Ž5åH]¿t1à¬k:°”­­M°’¥‰TzŽ~)xÁá_j×E>Ø×1Íqz±[ùˆ¡Ù†Ôž>o½: ·¨xá|MàÖÕüâ0Žcy㺄¤>\DeCHÚ›€ÝÜžy¯‡¼!ñ×O‹ÅOâû}@L÷1\ï†8æ˜KB¡óù0T`áõ½ò=+ľ-ÑæMsÄ:7’£[ »Ãùkµ‡š»@$°û…Æ@çªàåIEHôiâhÔœœ4±á¶‘ªxgV´O³êKáíNK›BúöåKjð2†Žg :DZ6àä’AëÏø;ÆÛ‹Hüs|l¼;w<úÀ“kNÒ2Gn®U£?;}ÕìF9×1ûDxk⣕§ø+TÓ|A¦é–¿aŽ6å`{ì1vwG”…É= ô¸¯…?µ¾¡àèÓOñf}~~Ô·ÖïešæiDf …ݾeË–d†Æ3]‘ÃÕœ9£gùüÎ|F&•9r½û¾óé)´›/„Ú¶ž(,ºþ«oÿ—ªÀ O§ÜÚ]J"EVó]evÊgy9Ú6òHPr01\ð¬éI¹+÷èB¼SÓ£>dÓ|o{ã OºšÃR¿¿‘P˜" “ ª²™ƒy{ۮߛ!…q /¼@š¾¾úÜpÞø–x¥šÚíŸ}´ØFwºù3Ž@mÛW¾ü^ÐWÂ~?»ŒYGe½wZ¤’p2¬p»¾oáÀÎq^{4‡tm4iÚA’X/ATl²FògaX—}ìÄØ\ àí§8Î6KsÇÄR•8=ÑKÄ?eд=EæTÔu[”YeÚÖ°Ý1`7D~lúò¨ÜkwA×c»ø•h³è×6ZƒÆPNcÜ‚ÈVwØ&3ߥ3ÇÓÉ'låº[©/[>L¦E–ÖŲ<¨Ê¨ùÜc'p<û ¥lö±øù>Ө귷2'œ²d1¢d.àp¤‘Ç'88§ËxèŒÓVÜõ[Ëi,¼<¿Ø¶¶wwÉÉn×Sùpù„ò7  ƒÏ#ž;W„|kÓu‹ØVÙ!-£Ás“©BÑÈTƒÜäÆG¸êkÒ|âäŸÇÃt—76º|‘%uo$“ÎÅËeÛhäŽqœÖ‡ŽæI¢}Vý ®˜÷- É-¹xÙ»F£?6FIÆ+ rtåmΘÃÚEÛ¡óïÀ¿‚Oªü`Óõ½2T¾Ñ †éî$‰ÄmÂ?–"™ùc·g!¿ ô-wàΡ¬ßMªëqêQXOahÞeŒÞJÌËæFÊ‚ ('g¥w—>Ò¼—GY¬µ×ì÷3[¢>Ñ÷䕸ÜöÅvžñ½Å®—¡Z\jQ,!IîDvá¹mª9í÷¢¶.J\É])R©.Vìß–ç‘ §Žüikþ§êp˜0ä$ÒÂFZ4'çT#$×éT<7dŸ ~«xwIû~ uϱZAsw°ÃÜ.pw’»Ž8QÛ½fßáÕÖ¥¬ê–¨ÓM"îKo.TÄXR0ŽØ$·$à帠¯6ñ/Å3§ê‚ZÚè§@¸½ˆë ¬¦÷fͪÌr\® ?w-ß5J·´£¿b!‡xwy-{Ç_ tÃzuŸ‰5¨ÜAo棬Á¾fL’`‚UK =kO†’|-×-g´º¿¾kõ{,qÊÐG6’¬2êFFìgŠÌøus}âÚc¬-Æ£sl·sÃn„ZAUŠ<ÿ ƒÁ^ù®ãá·$ñ‡5 gl·táÕNeÉkcŸ•NqÁ"­:ŠMÝîp¨Ôdµ¤úv=:4þÑ¥§ëòi:¼&Âà[´-†y#óÏ÷G­v—^%Me̲Ãm>6™$lG÷‰^xRH5KźM÷ÃÍvïIºy 2ùï$F#nüìnH|³8ζi¶ñÚøfÂòñ­g•¼–ÈÙxÇ© ä†ÜÄ󎄞£=”¤ê.dŽHÉE>cBj:׉nm|9¥Bllî$Šâæ}×ã¹ÄN‚x%¶Õµ >ÒͬåŠWk­èsnß0ƒ÷˜à/b3“ÅbÝxÖ×NðÝ™Ñ÷Å%Î"[dl´ƒæ_—¸›'pÀÇ5­yá¯ìMüirÛÁâ8" ´R>Uãï3S¾â¤WD¢©«ÛR=¢Ùjv^Ó¡ÑËÉ>Èu BQ;ÝÜÍhP:cå#ò VÖÞkË;”„Í 0g÷‰DR:zãß>õÃüÓ|Eªis¯ÄÙ¥:–¡:O4wRy†× „2q#30P2 Nè—‡?µ´è/­â¸ƒOµùa +¨Œ|Ï2€zVrV•¤õ4–ªëcέ´ø.Ì׉/ŒVžY–ÕQBË$€]ªã«1Ç##v}ë ÄWZ}þ£uñŸw©l6âÙnKEfI;ÎõnFåεÛÚhŸð°Þ{¯Ç†Ýµ •„ÊÛº@GÞ cïÁéY8øq¡x#E´ºÓ-ͤö· QÒ±´íA5Q=ì+$ó¼­ $ŠÊZ?4 +~b‘·còŒð+²‰Îž«›rÕ ûE„sN“‰„¥RDBùÏNAÁÏjµo¦iÚ±wÓíZIy3”x×…Ë1'hÇ%€ásÅEãíy´­$Ÿ-¥t›Ë@²a<Ó»ÇÇùëYZÞªI~º_†^gš7wz¼ËÛ±ERP¾C ;¸wâ³NOS[tf_ˆ>Ññ[°ð¦—geyo5Ú6¥5¬m´[£ÊŠØ,ÅTeŽ÷…{ÿÃ߇Ÿðˆ^éÓ܆ƒJ:ÿf¤ì¡~`¨¨ƒåÚ¹ŸrGZÀø û:Úx.ÎtÔîÖq¨k«¦iaŸlƒ%‘×Zœ(ÏSǧ«ØBbº'RžIʘ€‘ã &a‚ª=Èë\ø‰¦ùÕJŸ*¿Qš‡ }fêöÚÞÒ CQi›z™^4Vx¾w€Š2G©â˜t-@n¦‘ÀÆÊÅ•8Èê0AíÜq\kÞv±r©§*,M¬\xï_–ÚMÐXXÊÛߌ¸(è($tÀÏsO·óúäÈörÁ)GIJÈr¥ ä`L(ÂŒ÷ÅVQŽ–ZV‰ =ÆœYã1üò!mÞcŒñÈlsÐrzTž!¿MÑâ}RiøDMûœFÀI÷Àž#ƒ‘Vâ¬sÊvØæ>$xî-;H}?O¾+q"äÛÊ]¡8û¤`mcÝ3Æp lüÒ­<Æ©®¤§\Xã[ky¤¶Ñ²žFïâ|“Ô3U~x9õÛ¹üYñDÑ*3 hT•žã„Tdã<×q{r5KöÖõæ?dIcû"=¹cQ€œ7däsØsTýÅʾl>÷+éÚ] ‹§5œ·ªgœ´D¬“’QùÀ%°‰†ÇÌÁÅYÓí w–õãûUÄàÚÍ'Ù°êUŸ,LŒsƒœÇi5ZæÙ¤¹²ŽÊöþê‘cšá¢Ü¾ÐpÀ›Žž"®Nn$‰ï~Ûö;9­äH¬<µ{Œ~špèw*ü¸È ƒYG¯a%}KࣘŠñã1ÞFË>qsfd”8Š?3+b@È8x¤¿žIn¶‡"iîw`Œ-Ù¤»Viœgå*¦Xx rM[Óõ›»o ƺl³Ü°y¡H¦7UÜù8Æàx8#§æ_>=ëúš‘|ÑfÕ|E o4ÒœÉR²[E`ÁùØ”ädÖm:’Qèk&¡¤ulðŸÛŸá¼Zž«áÏ|—Íñ†›Åö³¨O3Ù>­µ¬‹%œ…ïT,«/“»iòð} oŒß²ï†/¾ü3²ø‰ý“¤[èIÏ}am#/Ù¢Ë=‘U-òHÎÍ$¬#ªFC\ðOÀ3á_Ëñãmä.n¢}Já˜É,z {Œ‹ ÿ/Ÿ$U¶¡ƒ¸‘^)ñ‹âOˆiŸëZ‡â‡BŸRó µÓmC¦-¥$¼óΊ2ÒœºóÅ·pkº)¤¡š¶MJRPZ½Ïý°l<;áï bÖ+këú¤²ÜZÚÅ‹h­‘¶F±'jæ5çŒî$ç9¬Û/Ù?Vø¼Ún«ªx~`&7ò[,ó^ÊÒˆ£H Gß&~B[W'9¾®“ö K=x¯ãt÷^%Õc¼’ÂÖò.LG¾Yd‘Aò4±Uä(f 7¯ßj^ø;¯Oq¥Åe¡ØøŠh4¸Ì˜ XàVH‘…EܯˆÆ‹9çÖãB+‘Þ]ú½hF ûG#É|Wà­3ökø8<j[J³×Ñìíµ)"ç «,÷rçä!AåÒªÎ{OŸþø[àÆ¥7Âü7·ô‡Ól®­- ­«n™$3)L‹Œ†8äeEy‡Œ>4èÞ4ðƱákû¨¼AâgThîlí|1]¹f±Ní™"·qˆÁ]Çkí5æž/øuc¥xöQkšD^ ÓuVÖŽ¢a®,2/œ!ÝΘÀ ø°q•XþñÙ˯sš”Ûr“Ù¿í±¯ëfÓuM_M_^Ûi¶¾N{¨E6¯¢Ç¿Ï¹XduRÁÖ@WRƒ^qñïP»Ôdð̺¼1Y\ÙFÚeãE0¸†{„Ë"–`‹ýÖÏL×kúÖ£âϯKsÖ°^õåpcgóImÊ?„œ(ÀQÀ WÙÿ²À›OŽ>·ñ'´©—Oðæèôû#±Ô.ÄXgò€ÉS¸n—æ,ÅÇlW©ì#¢¤öG5,BÅÎI+Xëô¿†žñ…ô+=KÂòiú„Úzܼȭkg êà€–Ãk’#;ÌŽÛIÀL€HðO‰_µïˆß­µ-ÎÇVÒ4È ·7êHQŠ»'3&ï0–RG<¯§tÏŠo øºÿÁÿckzEÒçÅÇäÛ¦âÍ%­Ñ™"Ç–­µŸ,_ÍpwVþ/¸øß®ÿbèÖ¿ðŽ[Û¦Ÿ0“É:Ï*•n\¸(£nwI5æ§:sö—ô¹éS©,Gº–ˆò›Ï„šŸÅÖ÷ß5éÞЮ!ºÔïõ¦{T´ÓšR ¶0(ó7ÊIU†>‰Ü:¿ø›Tø«­_i°ðî‹á¯ Gqwoo ¡ÍO'—'ÍÒµÔøáÞ§ã}ê_ \éöVVOè'¼XÊÃ?"?ÞiÉè8¨¬K›+Ÿk–câ–³k¥ê—–ÑÅc©jŒV AäS%ÆÌ9S# ü qZÒùßäˆøÆ¨èz¢ÉmÖŸy¶×£IÜÁêŸnõN«KÝÑ™('£Ùu)kV+o¯\%üvrü¾tVñ7ï#©9‚{޾•„,lŒ²Eq+´Î7"0+äú.z5jÚøÎ:âÆÚÖâò]íÑY\Û"! u•I‰ •ä`k;Z»MtzÄIó ±Gò8ª‘Ÿ­i 6sդ׼¶05 2]#P‰ãÏúƒ¸7cÈê0kÕ<ð.÷ž‹]øw® —ms)‚òÎE&2§æA>Sß ïÂXéë*NÑÜ„ÆY]±»<Œz6M¥|BÔþ_A.–ë+!2ÛüÎR*;A¶;õªªœ£h»35ïjC¹·ñÀ Ç{ã«ëHF¾%˜¥Ë²]ÄÃ*û'x%x`Csœcšà~#èÞ!Ðô*îuÕƒ]$·1‰ÉP“ÁY²wnO_åY^5øµâ_‰úM´:Öf¾´³/öH®2Àăòñr=y«>ø‰m¤Áio¬Ý^ìÔ…(ì ‰ ÉÌyÇ“ýEd¡(ûÖW{ŠRŒïe§C‚„Guwo2º‹•—å+µòp÷¯±~xêÓÆ_³Lwz=˜…ôþ̺KÈH®g4ÅÀÚCpd+Ʋµó½ïÃ[È$›Cð®‰y©ë2Kº4~w¨T!€òø%·‚nÿ¡ß³W‚l>ü,ƒÂj÷Zk¸F]˜ºóÌ1#Ÿž4i ùœç“^ãaJŒcËy_kþ'ŸY¨Ý4xhý“y×ׯ}l%“"f8ÙpT|Ä1Xç=¸ª° š»ïª²óÜóªRS|Êö=“D¸À &ºñ…áº+-È[y°ÅdæÔ;GÄ¿*±?ÄA×%û+ø“Þ:ñˆ¼Mâ-/A“W°ÍÕ–‘}ª\ZÜÞ˜Ð1U€¬ù6°Ïès]Ö§ª^É ^ÛO¨`…ç…X”<½Ç*ˆª07Àë]ìðþˆZž«â«Ë­_K’;HmáµBÍ’<Æ›(Š]þùÉ`:U‡©LšƒÙ-On•«W„ î’=+ö)ðÄÝ{Çß|wûR¬³_ÝhGCðÏÛbŠ)ìÓ{ÜLÖibhäŠ&’àÆL“â¶©{­øÇàŸÂ¯ø†ÚçÄ—/cý«6› Œ“Ú´HÑ”#Ì_,LÊ›r6Ãîíf/k70èñ,úÅÞ§Èl ¤Òã»H’C8*žQ*€Œ¡ã8>3ðçþ á¤h¿#ñîµKÇ–;âÓ¯m!ûŸ ˜Ê=ͼ|” ®ÑäõÚ9$õ©§Wž[.ÇßaaìèªpÑõ0ì>$x'á·Ã‹ÍáB½†•£%åµ£ßØì½Ž(xÆÔvE_‘ÃKßtç>ø>Çâí“k¾"Ô´™<3l]CW×2[ÛF™¦•Ĉ¥y?6Bœ g&¶?iC¡jZv­áƒ¥®ªmäXQ– ³$*Ìå‹#åžC—WÚX‘Î/ÂÝéºNá¯i÷šnƒs&Ÿý¡=Œ…Õµ¼ÌÞT®A>CHñ!p ‚71®šs\ŽR&tœ¦Ž«F¼ñŽôÍcSפÐ4íão%ÑägšKÌr¤_¿]QSåà)b§"¨ê> … ð¾›PüL´×uù/â—Êœ>Ÿ ŠÑU1¸æ6‘—§*àÆ¥okRN;ic×ÃÓt¨ÅIÝîp³%½õçÁ3Ç:¬š‚ê:?‚­´o _F‡÷Í}5Ì`@H6ì[ µ[¨ÍzM—Ãm;öQðg„|á­~Ò{ÿÜN3ÑvœWÏÚ·Ä ~Ë^—Rf×´K›ý•“Ë )uXW‚«¤eÛ’á±Ôšè£IÉÙ­­øœµñï«0þO}ã?-¿ÏüVö©ŸdòÌŒ-—c<÷.dYcŠ6ÎH €Nuÿ¼q£|}øÓ«ê–ó˜¼ð¾ÒÃHÓ”Eº;›d½– 96!MÃ$͸Š"Tt?ì­ãGøcñÆý"¶ž÷W¶¹²‚Y¶•°{ˆl p é¿=«ÇVºð„uM v[ØÞÜ[Ü^@P$h‘œüÁS{|¹ÆNHÍzU`¥+­ÖÇ“B»¶½wô øçâhu½_XÔ<˜-¡ÔfyRxHUú*ä“ù’kÎü>[T½¸–ÐlEPön9­Þ¦µ%¿™‚`À'FãÓÓÛ=ÞîõÍ”¾U”`| ¤ƒ‚{dâ½,5% zîx¸êîu¯ÑwÂÏÁá-üñù“ZÛÈЄ…›n#ì@ÁÏ88ààã‡âŸê¾0¿êww—.d)%•¥%{¼nÆHü©ú½¤^ExÄK.Nã õ²—Êy&†Qò‰“´`ŽØþTrZ|ÛŠUyáÈ™J=2Ma‚mæÜ"$/Ü'ŒŸP3ŸÂ¾„o„º¤·pi_¼8t]WS²YnîÌ’ZË“!XÊ»±mĈÒã)R0 ¯+‡]O‰_’÷VO°Ay{Ï*ÊY-!W]ƒžHD€ëÆ+î_ÙÞ.ø‹ñêêÅfþ͵ñž«swªÁ%¤sê ccöX¬ÙðÂfg/<›‰e¬1•åN+›bð#í¾½ >ëz'ì¯ápŸô¾ñtLóYÕ%Šâæ?9ØÕ¢, Œ€¡bŒg$òIõ¯ G¢/…Òçâ|Þ!Ö¼KâwÅÈ·`¬U ³3=kªÕ~ Zi–š•çÄýP’yîá­m9a©Š-’¨O(¦ÜcsmýàÌߵLJõ?xßHðݥ泬iÓèrM©jZ”RË–GݲLƒb\JÑ’¥B®àUÅ|Ô¦«ÏG«ê}+$Öç#ûoè_Ûz׆ü ¢½„6˜¶¯gØ1V3ÁÒ0ýÜÎÀ²ƒ‰qüDŸ”eÛHÖuˆ|oymq0ÙAj¤’Q:¾ÆÜ@ ê œŽÜ×Ô>?ø®xcOAá]f{½2ç}šÚ](ÜÀÄIZEâE}0ÙeUÀÆkä8§ŽÛZo좱M•‘Ѱã¢àý?#^ö_ïS”?áÏ5$áWf»ŸVønóáö‡áÍoQøGáÍcÃ~)ñ=•æŸbÚ¬ñÌm¬Ðù“¸`ØŽ7Ç‚H<R|vø·eðÛÃË®i:‡©j:¼¾K:æ8cwE áa*åø<‚+Äïüu‰æ‚ãJ¶šÆŸ¨Z4+q¿Ë–ET‹fz&7½Î1Óž»ãž©,?³_Ã+ï³µô:lZF¥"•i^H-”Ñäg¹â¹êÑ|ëŸ[»^EÓ¯NJ=¯Øñûír?]ËtØ vï3lY‹`Óôí^Ãðû]¼Ô?fmWºŸs­xŸÅÜÙxJÒ'E6H‹›Û©C2îd’4Q“†n~^ž_û=ü×>/xÂÇOðžŸsw¯tm-›cB­ÕŸ àž@Ï®+ïþΚwìïu§Û$ï{©ézTšd—«…†âyþÑ|Ђ‚Æ þ¨v®œW%ª}ÈópÒ”åíz­=O–>²}š=¶‡ç䈢“.2rÎÍ»çÇ@3é_6Ý$šÅóä.%cŒq ¯¬k›[ÙËá¿ E a,w×˳(q·ÞRRÃNà2kÆü)ð}`´»¹ñû^Ù¦û*¬I¾éœá¸ÊœòqОÌ$¡ìÜžç6-ÉBžÈæ¬õû¯ü-‡G•íc³Ô/>Ù(Ó$¬¨‰ÿUœ°ëÎ{WG¡xŸ‡Ž8£2DªxùHÚ_•yk×l5=WÅ–±Z_Ësfn`ÓCûÜ_—08sÁ­a7%¦‡é¸YïÅXµC_Ô"øu‡áûm0Cb³ÞYµ ì1ªù,d"F‘×n(SÔcþËš›Y|I¶M2áÌW@+,@$îåH!Xréë[þøe¤|pø§á-+]¼»¹»ñ$Rj´Ë3 *ÆL²¼Ï#;¹á˜|«½BŽ™æþ%xgJð—Äí[OøzòéÖZuÍÄZOŸ.ñz#˜_’ß1 ÌrOËÚ¥IG÷}XæœâÚÙááoˆÇÄQê0ÚiÖÚuö;ÜIk9>mâ I¾öýÎÜ>éÀÛÍXñ.¹áƒs—q”wú±—íM_¿†!’/œœ.åU ˜l¾zs\6•¦êºv«¤xSœAi—-ô×\¤¦ÌÛ´K!»F‡iAP»‹`žÃ<‡Å߉iyñ@Óì’ôý–y•eþÑšIZåç—9q}˜'î§ŽœjŒg+DêSj.lö‚:¥¹ðV§øíZDZýÊÍ:Kº·–DÄ2\ÆËÌ|Œ•FN:Ö¾“ð»ÃöšœÞ‹DÔÚæàÃ,‰s'—}tÒuóYwmù]±˜¨žoàýûTº¿ºø©_èú´÷^Ådf‰ q(e mm»úgåº_Ùgâì–?<)àÿ<Ú5êÉ"ãB&ÔîÈrŸhWm¡ ÛTX¹¨pq”šzþ!¨ó-QÓü[³û.q!¼¶ÓímƒI(·UU˜ÛY±Ê(ÛÐq×9­øGÄZv›¤/€®-㸴ê/¡e¹ÄjZbášMçoA‘U¼Guqâ}t4Ë•….’Vk;B±Ü}Éù‹Êæ:`Wc.¤nµù®g-a´æ;UFLT ±I žçk59XÝI_SÍ-?dµÖ~-iZç‰u$:f¡§¨K+†k „Èc%˳ªsÄZô«/ˆºˆ¾%Mm­Ýééyl ÚÙ:Ë w# M˜äP8Ø.­fóá•dVxD ”mÍØdõù°8/Å¿ Ù~ÓžÓ.tIoôøL¦í¶Éo+  £"Êû`@Áª ¼'®iŸ.¯5{2+A¬°„f’YmÌrÎ[ØWN(Á§£]lÉ*Ž"·ëçØê4]u}.A§-ÅÍ’ÂŒÞlpÄêÎϽV4Û™03óc;ÔäóTü7àíSE¿„ZÛèú|O,p-½öé.”mg"GŒœàc=³ÇJëou»'N‡R…#[9GúÕ%C`“»ïdmúgóÀøâù|9®%þ¯¤j·Öï{µí·Ì¹ÌPòÁ! }îIÏ¥ûG{A]µi5îêhü&ø5yñ U·Ô޹oý“§i÷w²]ªƒFù×±*p>îG;°>îkÅ_ÛW”Äò™&̬V2  ʨAÝ÷C1€k+@´±ðüú„Ò(Þgi㲊7€‹¿smÎFáÆO5ésøB{Ÿ\]xjyµn7šH'QäA œí뜚óoÅâ{moµIt[¿IlVo³:à!Œå•£‘ž8É99¨¤ÜÕ›Ðèœ%ËÌö<Ú×âv£ªxŽšœ`²€Ï¨¼qìˆË&BC½‰;vŒddŽÇKÞ ŸFµÖŸWg»K¦Že,-ÆÊF]YGðz ætoé×zU´švq<ÆÚ'€K;ˆÇ©||£‘AßÑmü9gsc¢Ûë 4òê’Ëq©Å#¡?$Sª'œ(`3’kyòÇc*SRÖ[¹÷¬7 ²XÚ5rG};þ5Ÿs¯H“ÌÂI!tT¡Î}‡§Ö°“^x-ZVueù™[«})ÖÒ ¢!ãø‰P~µñÕ›>î¯Bv¿ì<»†_;þ½= Æ5[wLžÇž*¤q$¸ r?¹ŸÖ¬ˆ `y,N{µrêÙØ’±4ÐÉ¿tË1íÐ H¶!;rAü)î$wxüݸÆXqRmf-ÉŒ†´îG“¥ûþ½hé³Û:­»HwäíüºVHµýødUÿ’}jc¸›8úÔÂMlÇ()+3Æà£)ðÎhúÚ56dL áÛ†sè§‘é“_3Gá½sÅ–6°ø²Ê *W·ŠåÌ´J»~ í8$|ø=…}ÏûFøiþ&þÎÚ–… Ï§Å¨¾Ùd’ùEÆÛÈUB2Ä.9 s_ü:º»×|fnmî k1¦·–ܤ5á,‚ˈUB6ïsœŽsߪ©JQO]Ï“ÅÒ¶%©hŸè'Š<#o™&³§}¢æ]!VæÑV°O*““oвtû¼ð+¢Ðî.îôë+mÆåíxÒÙ“ ʱÜGú¼1aƒ“’y­+}ZëG´^‘p²\Ø]â0D+y¤sän(ÇA­O Øm¾H hn®aLÉ2îŒeqÇ'?{'Ëo£D-±UŠP”Cª “ߑӠÍsԭʬ™Û <ºËVE£éKakŠ«ö–2³åˆQÉÏ®xÇãíZÑ4QÚ¬×rDŒ™[h=€ïÎ9ª~L– ˜É¦ŒüzuuÎ9â¹OxÚeÒ¦NöðB«¾`€°èE“»ûW*•ýM'¢(üNø±a Áöhî˜çr¶íã×Ó#®:ŠÆøU¤Æmæñ/ŠXÂv)Œ»Øi0½¹'å¼ÛOÑŸâ­ `ÓÉ甞26 ̃ߓÓ8ãÞ½Õ¼>š$›O-…¼ÅîÌqã1¨ìK Äœ` ÙÇ’:n`•äÊPØì†þæý&†O³Êæ)8*zÈÏ¿$ãŠÌдkŸÏ¥ÝøVM*);»ìU Œ0£©b@\tÁϵ_°Ó[≠ü÷ÆO è²½¼—1þëûNéX0Z”É ÊØàs¯à¯Ç©Àöfök­69šê)  ysó*¨0©€¹ç zÔ·RTmkN¶ÇM›VÖ$:F‘§»J®ÿ»†5R2Ç@ €9Ít–z•áÖ¤6þTV.è®áݘ»åã°+“œ ¥©Zµ„P£^§™s4—.¡Zeµˆ¶ß-xî©ùNq‘ê`¾[›Á¦ir×V‘4’_]Z±_'£ePK‚Á‚:dâ£[Þ¶HÓ×c¸ñÜ¿ÛNó»ý ˜Nðc 4›pv9\•# ðj-KQ:¶›«{¨½ÓI?ÚZõbK+²û<e@È* Èê0NUˆOáݧTµX‹Þ2,.+©‘¸‚% /æZøŒ²iÚF‘g¦,¤K‘¹D˹L€‘‚åCmCƒÉ#橺ÒeJé4‘®ÝÝx›ÃòÙøTk/´»B—•i4÷uA§*¬UPr2yàWðûöuñÂú޵‹] LW“]Šâš_Ýâ1taI¸†òÀi°¥Þ£á]nÖs¨[Z¨»Y—28ÛÊ 0t\¤dò€1U4˜/n~Ó}q—¥ˆÌ…ƒîˆ9ƒ ßÂ0yÈêÝW ò—N ½®Ê¾+ð6«ñÒãIÓæó-uHÂêPB¨O•"” î$G…?w9#ñ5WÀŸ³}—Ÿ ¤ž;é1["j2:ÌÚÜ€°¹WýÜkåï‘€!Š…Mz…4D¹ºÕŽ6·Wâå‚ßÉLn8 ( ÉÚ>¸¬oˆ7W>5O³i]Œ¦ÎHJÒ[¸‰x!Ü0râC‚ÌÃsûyÏÝG©JÂÂÿiŸ8øß[Ö¦ý±|A©ëú•ÜÖZÂÚ[4&Ù´‹R-Ò2„âE_5À\.åËäœëþÓ|3ðþÒçÂúœrÜj:Hmb„ŠåDв9$ìÜÃyMàáJà‘ë–ß ìWÇ÷7úwÚ´.Ë|»ZÚ,F`2¸å›8$îù‡ Wˆ~Õßü+¥ø«Ã—~.ŸYÓµ_ëÙÐë1F³Ëo ‚Y¥€ùƒb[4q9sÁ9"µŒéË’28›kµÏðׇ´]3ö†½ø§©Åc«M£^NÉæÔÍ¥´I„¶¸»ŽHQÝ䄞BdJͰg$‹¶Wí/à‘á­q|3bž"ñO…Œ6WžnŽmô¨'œˆšPØ+#ve-• ²¼í)ñg@ø=â_ ø?áš_Ù¶‰©Gsª—ŽE¼@RP‚DÁdÈR“$¼«âv¨úÂ-,øWD¾Ófñ†©=ÕÞ­4¤ÍâxJ³ÏAAOjiÿL¯ûü ›öøÉ¥éú„wm£ÛÈ·ÒŸøö¶NÛȳsÜûb¿N5iß þÉ¥øOûßN¶³6ÖZ{LDÄ –°Ë1,ʼ¼KwãÈ¿f=2Çö~ø¤økJ†ÂoTV½×®µ }Š]³Ë)º ùH§-^¯¤xGOñ^§¤xÛÄZ»C¤5¬0†º‰‚Ë"“!Uc%T0 îAŽqÌ1 ¬œ^‘Ž‹Í›Ð¢Ý5 }wgðëá–µª[éZ—ôK=F2·níò]Ë´fv|’n{pví+‘ÆN}fÏáñ=ÔðëÂÖC5ý½Ì·œíX\KåÃÇ9Á>Õ‰‹mºÒJ»„…N7x#¡Æ :ÓÄÛiè°£G*6õŒrr_[蟰$zçÇÂÿcñ7€<+¬iW7ñjWKn×a¡XÕÈrÞX•åóçðGyû ~§ín5_ÞÙh~Òo µ×Ù¤¹mXÃ"ùÑÛÆŒA_—Ì$…g×­õš‹n[jqÓËñ<É.§Šëò¿ˆôض ²ÉÝàgÛ<~U%µ¶ª%§k§ªÜÉ1L÷KqLXmydÉPm¥ø}ãòšûëö-ð®½ãRóĺ%·†ü ÑÉqéÚÃ-ݰtFŽV[€8ÀeX€uÎæ,ÀŠà¡ÿ‚mÝøšÖóPø=­jÚ†œnÚÒÒ×PÑZÖy±üFàHž½"»qXSÇQ~ëvõÛð:jåe 7Ùðö•<†ÞÒ;t»Õï#(ÏenŒÅ¢g+œ¡8àRøÇþ •­|.ÕîõOƒþ5Ó5k}&x˜é—É–¥g0`ádQ!ÿ«*ç‘É¢xº òó«úhT2ÜJ…çóþ¿çioÚ >Iõ‚Þä  H E~é íÓ9ô§é×ðø–Ýtè4×Ô/µ&źXü¬²»²<äçåèq^¥ã/ÙWãgˆ¼p÷~5ðýÍ¥õòÍ{ª\›H--VWùܧ˜»°œ"ŽqÛ"½«özø àÿ€ž!»Ö“U·ñ6½kGnËnPiûÓkO³sÿ|)'€Ork“šRÁS¿Å+h–¿‘âcULµEkþ'ÅW_ u´°»•4mZxôÉ<«Ù¤…,ß¶ÈÀ‡h'æÇ†¶n8ËDÃåÚ7ÇÞ¿PÇÄøsB‘Ù[IŠÃ ÞOV¾b¡,fVÌ)»$Ú¼³ÁÞø]ñsâ=Ö¯=ލ >æ=CUÕm.šßOó¦± v„©¸9™cŽN>}"µ?iV›ù~·8uÊ›üo³¸;ÿq¹†X®ARqžsØ|¦+S8Äûi.D»vó"xÚ‰E¤üÏ,Ó¾"X|/¶ÔZ ¿¶*j è‘ׂ™5ü{ðãá÷ìuðÏDñg†oõCÄ~)ì£Óu+u†M25BMÀ*NèË,s’Ø=±^½t(>y&ä¶=©E^M¯wsÅþØ=÷Å />(Oo=Š¥¾ÉD¬)Èû¤à†µzïÇ/Š)â=%¼‡Ø­žIîÎ1ƒPxTv»6Õéƒê ÇVÛž¤ù‹þ |vÖ>³ðö´×úi•®¥´YV8<ÉP[‰¤R%feY"Qó#‚yÛÓöœñ‡Ãφž×|9.­›xÂ&ŽM‹—Ö«æ¼±,¤€B÷r5-foøšåü]á«]XJ“Ú.«$ww…ÜŽ"7g P¬ÁA²(Ÿñ—ŽçÑd—âGÆ­kEÖô öâëÃ~…ä·UMÖ³9Âc•·†*ÈÇ}8sÎ7ÙWÉÉe©ÕøcÄz‰Ÿ*5¥\[1–%Ëc¨$“Ž/âþîÇ>IE93çïÿ­¬ MX´Z߉uyD6ú¦­‰´Q$‰™‘Ë""ä¹*¸ßýŸqE(P©UŒ‚Åœ)É9§ F0÷•ßCZ±ö;êp¿¼95kkªi:”:©¿kIî Îèß ‰"¨ûŽÊ¬"ù‚…cÒ¹Ÿø¦îAgây¿²íãÔ ¼³Dª·à‰N „Ü¡ ¸àn%Xµu:žªÿ!½¼ñ•­ªÅ¥-½³Á#\©¤r³õälPËМ„× ¥$Þ#•l4ë«Q{<è ©DkPÍ)“ó)ä0ÉÆÑß9ªiµË#šWZ£Ñÿi_Yx‡à>¯¥h ÚŽ½­K—n®é²9eÞbòÁÜ#¨œ’ìrAà~-ð~¯ñ;öŽðEÕÝþ…¥6™5½œ—%’ e·ŠE‰à‹åÇÉ/ .z¯>ßâo†úZeµî·v4Ø¥uY’öI wӪǀ¨+€H X+CÅôßø“áÞ™e6‰is¥_K …µË¨Ëe@™X 4…Šr ç$’1XÓš¦ýÝÎç58¤Þ‡Ï_±‡Â]R? üBŸNÖƒAίá+K×È{½NDóå‘ñ ŽÙ%` 3ª¡#8SÐ|0ø}¤xKø]¥MâM?ÅÚõ­è“N6ÖŤ0µ »HdÞÆλÁPÍ&vã8Ðоjº¯À‹'T—Z¸ºñg‹Ãz{I6Æ‚S«bâI#_–0ˆ%•9ð$žÆ>Õþ|AÓ¯>ÙSSšÊ[aâk»UtèH9ŽÖÔ—`mÒ’X1Ít©ª’z™óI+$Ž;öjýî<#ð â_‡ü%}lú׊l5=nÞòêƒN³¹Tò´w uäÇWv^Ü`ÉÖooðÞKu[ËiôÝgO–î´Hç,Ih€çi}„oã*@kîx`ðçÀÙÛQñ´ïø«ÄšÆ‰io5œRµªDš“­±S õTwfÎì''ð·Åi>ñ>0ÚË Ô‘=ˆ¹7'|Æ2ãc×v;Wfn­I_ÈäÇE:QfÂýûWǚė–Îm4êúÅ´j Ýs ¶Ñð@,K“ÉÇ jχt+ÿøÐ¾ŸÚî%¿S.ðTfÏ'ƒŒU-Ä÷ºÎµ.˜ëd—PËo"'%bqó¦1“ž€júƒGø©üý•Þ­<6z»<—7¶±‹˜äg(år @‹÷— pç#­wV«ìµv¾ÈópÔ¹öÚú³äRZGñ;Y—ÃÛÅÅì‰o!¸@0Ï… ÌŒ @+­ð‡õßÚ”:½éêÁqŸ ÅÌSlE.èr¨¡gR­Ën8qÇ|P³:6½Ü[61óìÀ‘YáHä;]¶“óCÔÁ¯ þxcÄ:…mlmã¶<@Òjº¶§. ýù °¡L&“B©Èù²U=®«¥Akêy)ûlL’Z6xßZÔ?°ì¬µ&’X>Õ-Ô"æg‰‘ñ•ãøÛÉ8ÍvŸ¼&|kâk%¸´ÕÇE.õ³³{³Ç¼h!7©)b3´ã8¬¯–¦xØèlñØØi‡‚ùd /úÔrã’OQ“^³ðçö“~èÚ‚îRúÝ-nïµUÞ"ߨL6ÆÀ<à $ 0ÜÓÜšu$åE8õ"„c E¦ôG’|0ð.©ñ_ât¾ø}f÷wšÖ§w ´“GoåGæHCÊòTT„|‘¤NýR¸×‡ÁOèšÃí4xªØ[[èÝÃpÓ4· ß;,j»²NРà1lWæì¥w­üsÑlü9 –{Ƹ¾¿ÞŠÑÝ4i%Æéþ1R@êX¯µtÝZê M> h5‹´O§jw*÷ÒI¬âEf+¶F¡ÀàÌýå rØíÁÕ\ÒºèjxÛâÆ?‡¯ë^0ñö–ÖòÌŸØÖ¯ºW¸ó µ/qV0‡?30Éê¡ñkö”оÜÛië¿ øžûW·´åZÞî‰RK²›8°€c…kåګ⾡ñcæ×ÀºµŽ“gnr,€£’­ kŽIYX°xëÚ¹}Û]ý ü á¯xëÅéÚŽ¯s ±½¹2M Ä[ÛiÚ8÷‚T¼àæ¸~¨œÞÿCÔ†1ÊnÕ­Ïþ ûDGáv‡}àK5Óôÿj70Ú]¥¼p>§`˜æÜ¨:ùÌ©¿‚Dgë_ iú“K®j233,RG H=ÆIüð+Ü?lMIðßm<7á‹“=¿‡­#ÓåW æ$˹ß{Üï\•ð¯8é‘ÌmXº˜ç' z¹e^=O;6¯9J1ŸDw_5¯Û\i2øÂMNÚhµ›Q$–!B2/+/ ªp[À[¾+¨øû8ÿ…›«ipù‰ca©I§G¸„fÝ.ÝÜ)ÉÈçÒ¼¦à©#Kpp1G yç󯼿e‚v¾—á_|:Ó!×|EsnPK«–qd²)\Æ•iЪ(Á C?~»b¹hÚ¤ŸÈäÃU•[ÓHÓýžüw‡UÓ~#kšÜ;Þúáb‚O™à€·™pI`ÞKÅ’ÜäœàçU|ñå÷‡?eµ«ËYƒi²‰ïåiÔyå×ÌÛ"œ–‡œ‚C|ü`â¾R°ñËj>1½×5»e3ík‹ãsrÍ-Ì“;8ã…BƒËUÏZÊ…Üå̶4œ’¢¯Ôèd³÷ÂHþÊÚÍýܺ{K<žDpAjëÀÈ%ŒŸÄ9ÀÆ0kŽñƒ'²ŠÊþíå3\³ P¬­ UB’Ë·%ñžÙÁ®ûá/‰!·2ÞëÖüh“6¥eͱŽK‰2¡@g/Áاå’xÓ~ÑtÛïKa•c¨Úê6ú¬Z+§B0¨>\ó÷‰ÏZµQÓ©Ê”c:woc–ø ñfûÂÚ…²È°]˜X¨‚V‰û{ã?áÍzçÆ?ŒºN­­Zèßô«}sÅ®Y£Ms¢Ü±.³²ùÙËÔ^+Àô-w¹“S’u•®¢ûqo(Ãå£9PvÀ,qÆâ»ox®/B`×.4ËmH.È.î œýÐŒç«tÁà“Žx¨ÄЧRJV7ÂMÑŒ¯³ùžÅ}ñRí|=âÕ5»{+¿i²L|FÓÉuP'0$kÀ<ÇJÓÒüeðöÓ@™åžîÃVIÂâ&’¸ 1М‚ }Àuù¹®wáÿìÂÞÐá#ºÕ-ï4¨läû]«\ªn9[¾OÌw8ëeµ©×Ú¢i:¶«=µ¤-œI0šâÐË‹gÊø°Iç‘^l¤¡&¢îtF‚’I/O3è¿ i >Ž’ØÚ[[•·ŠÛ}ÝÁß:*‘yḢk a{œç,ükOh_Ñ´=VòwŽQ­Œª!±´M¿½w“‚q÷Fî¤ñØVç‹ô][]¾ðu÷ƒëñs㎧â–ðÔÔZm¶‰ªÇçÏt®c‘G!»0%ØØc¸‘ë[¿> x'Åš–‰JZèSYCuo{dËv¿g–%(æ4;°O*½p ÉÅuª„’š²}ŒiaãZ C{uý ?h¿üNÖµ=!´ùD Rétýñý•moˆ »´qcz²¹†:W¥ézîÂÍ#Ax¾ÛsyæYέ,p„Š >ct!Œœdô${ùÆ©£MáˆtHô¯%íÅí¤Py÷vlæå£ÂÍ(Œ·îÙ°N@;}kµ_çü9¹µÓmnîFó<˜bìÂGÝÉê ÉãÒ¹$¡V)-}45r©†¯»±§'Ã…øyjSÃ÷:}Ä)å\Yªº³ƒbŸ-AŒ/˜3ÉÜwšóÏ[]è:¥°ø©wa¤M~é;\‰ã/($—gä˜ûåsÀè>ø‡ÅZè–ºM‡‡4{$а˜¥ÜR€OºÐ ;J7™ÎY±ÁÁ8)Òt-wMÓõ½ ŵº8™aµóþ^çNŽ>`@¬£9)8ËFuNÒ’pþ™gÄuÝ_V67zw¾¶Óž˜å\™Ç2©>c˜5—ãŸY[|8ñúTGX¶Ó"m<³ÀžlR*‡•Ü£’Go,õÐ|>Ð.Å~!Õoô x{C¶kë­Jçkà’Le°0Kn=Àãÿhﯭµá¼–ºM¥„Kq¨›SLÜ;_/Ë,€²àƒÓ*©¨©¨%êi J¥>y«[oò=ÓöøÏ¨x·áN³6‰e½¶“Oþν™$…H]¦IX e¢B2NœšÔøëà¹'ÖôŸìi­áytöv’Àùq%Ò®]»Œóùdø·ìoûAè f‰g–ÒÆKÏßÚÊ°ÊÆ`Ògz9äÆìpHðHÈÍløªÙ|WàM;UðÕî§:i·— <¢ñÎÌ¡E\pXà°ùŽÕÜO$äâá]¸è®þ¬éær¡RŠm™ã8üWªIPHï$Û„ó÷ÉŽJìÇ8NqÞ½·àïÃ/øXóêÉ­µ¼QF!gŽí<Ÿ³GNÜVbi#' È W‰xăÄWZ¡­Dðk·:³-ö|é"æ59ár1ÔôÅ}ðZÇO·<5ãKÄ‚maåOµDV†Ö $î ‚Ë‘È_›­kŠ“‚÷w<¼-?k%ÎÏ`ðý;Rð>µ¥øoF¶–mý Ü]«3ñ·‡~ëš^™áÒ,nå@}äþñŸ;Kƒò퓜ç ;À«VV‚ÚÛ Ä2pM ,‡ ËÉñŽ“ñïǾ)ñµŽ…z–7·ÞUÅÄä˜^ä.ï*~GÈ¥ƒ(#×­V ¥g;>U»è|ÖmZ+Æ~òßÓÔèü­_®¥®`–°]ÎqnR9£8 »Œã"²ãøËwy©]YÚi6òišDs½ÕõµÐV—Ë$wã`Û˜±c×ÖŒ~5C¡E¨iº7kzm¥°Šä¾×‰Ñ¢*ÜáUx(d<ç€5Î|(¾Ž½¶¸-t’±Ou9‚å˜] ]D~pÇÍ Ããk`aº’1ï ¥ÛZJ÷¼ŠW·6šÅÝ¥×Åè O·å]>æÞ&FŒ9wáÛ%·’ÍÀ8¯Xñ7ˆ-þøZ;kùci5ö:zÚ]ª­•!D[0‡#o¿˜ðίw©^hv)e¤âÇKÓ¬VR×*ÎK'%9'ä¿ÌNiö×5_jüF)¥XÅusk§ézR Èb¶¶7ó¶‡%€RéŽpÈ$—º”y´ßþRŽîGB÷š]¿„.õMƒA²Muk UkSä&5[20UÀøîkÈuKø4–MYᵑuÆ$/,0îSó"(œ‘¹ÏNk²øŠ×QZê+¨5¾›¦Ío?™rãâ9 ñ,¦-ª7.6‚oR›ðàG™¦[ë3Åuá©`8±ÔH Æè™À+¬Å”©`ø8îT-¬Ù¤àäüŽÁ?³>!x‚òïM“O]8ÍÅÓQ‹`U»2㜓^°º=·‚¤´Ó|'owxd‘æYäUtà†—Ù:p2yï^∋©Y\i¾ Ó×ì«’XàÄfE)¹@=rTpNI‡‡"Óͼ°ýªKŸ1$Â…$îÇÈ@Éœc=½êå^U¶B§I}•§æQðÞší¬½…´VðÆÊòÜîlÊrÄ+ŽC€yì8ÆMoߥ–…t°Ãk(kìòÆQUFAÎxÆ`œÒßO>ƒ¤Íwsnï V4I—yÝ€YC`.Ü“´ö®Edj×·z•ÈG2Ê]˜|ƒ³ùqÜŠÃw¡³´W™™â-rÏUFQ8•%e)4H—æÊ®sžI`zçŠâuÉ,n|A-½ÕͰžÅü¹áVHCà•`=NNF0¿]g£Åo-ŒNVx7H2»˜‚få~NÜ`zâ¹x´E×µ9lmd†ÚÒâ)•dˆ€ ²¾ÏñcÔ‘Zҵ̤݋ ¼9Õ¾©{4NŸ¼0ÄòÄ­:cÛÈÈÁ yÛÉëÆå¯‰ä¹ñ*i¾†làˆ¼÷R:…—Äp[¸ýëÇx$ô¬¿ ø‰¨Ieà5Xl,kíBßh„I]‘±ÏÌq×ä–®£IðÞËTM;Î]?Í’îKœn’RàH”’U2ª0IÀîy«ï¹ÎÝÝÙY<)/ˆá·ŠÚúîH²˜ã\€d¨èÜ©'×·Zê!·MÉ}>"-£m«hìŒ`íííÓµCwÅÞžQ~ߥËy$ndû}ÐUPHÉþ”ÝjàÙÜù¶7 ^›“U8èG^™9ã­K“nÆW°º”‘iÚµÜö‘JóêIžMß,>ˉŽ;, “€ON.>Ÿ¨XèçÃ^Ô¡›S¼Ô¡}JV™Ì–öÈûŠÄX.wɼñË`1…woö‘q,Þ¶«r-ô¸-áÚV/2UY6‚ÙWE%ˆ$8 zŒgcDðÄ~ ³{ 2òK‹>Ñ`E‘ òY´nçç‘ø`ã%Wæ$·¯2ô¹¢—*¸ÉZ]7@°±Ð™ãtšáà”Ç!u18q!ä¢ãžœtæ–)`´Õ­®öÇ$™JÓ"¨m€&W‚ø!Àê{ tú‡ü$%ímŽÛ±n'Ti ËqÈ|“³x®1žÕ¡CâS üw—–63D±þÆ©%ÆôVá°É¼ïù“‚9©©h­GB”§-ÛÃK{4öÇ›"<,i<ÎÛ‚‡nwIã¨ã=G‡¬í¦’¬ÄÑZß"¥$ç6æÚsm##¥ðÁ‚½ÔukK&¶†û‹mW·pËÉtÁT Œq’A—má«_ß\Ÿ[Ë{c"”¸—Uo´[ÛFì2›yP„©"(ÔŽq;ÎÉ¥8Ãn¬‹UEñìïû»»+¨˜ªÛÜ3E4d ¥«÷†@#`c¬÷>Ó´ûñ«k³jmEü»x£‰”@áBæ_,ùÀÝŽõ¢-¤Ó´«ë[Hî/šîÞv½¿’Aº9pD‡F[¦î鉴-^ßSð³h¬±#ÈðÅ4W?iIqò31ä©È9˜wêk—±•Ió2­\鬃̊Ín¦KxîRRidû ° ’ÌÜàç ãÐü‘ûUÝÏûBü:ñŽ‘¤]ÜÞêšd×ú\â1[ canc€¡¼ÄhÑ›å`¬In•ôþ»k.±áhí,Í¿<+5‹O yI$e–'rHuo— Œ7R+㿎^ŸDñ—Žo¼U¨/†|ÖM3u©ñ½áí[âWĤxGNˆ?†®çÒ˪ºÃl«;"f-ì‰9Üäã#ôÁiß"Ðiþø¯ªM©ÝjzýÊxÆ7AK€ï†7œ¨ýä˜ì;· ¨®›ö›ý 5/^h¶®ï|QiªjìY˜–y´ûBá~ÐÒ"*8öã É$ö®Sö¹ð¶½ð»á¦«¬­ä'‚ü9á«Ù#Ól"Kk­BõgFµe·Ï)M´©[—Î@_øñ3SøÃáÝMøáyõ?™•u}VõVmÙÀbóGŸÝ+°Ê“–(9åûŒ~Ñ;Å>§¤«ÇI/{úûª>ͨøgI‘u‹ˆKÆ.ÜAÓ«ÈÈîáB¹p„×ûD~ÒúÕìº/gGÔWÆzýÔb¸ŽU¹¸Ž1$sÜî»Dm`Áìgn0+ÖN½ÀhÚU­÷´Ë[m ÈMm”ÌcBNض‰ ©aÊíùˆ x¶‹yÿ ë½­i‘o—ÃÖk7‡…†œf‹q!’;KHÈyª»Ry$eàÔr«8 ÍÇÑÚX©¨Áû½Nëâ÷Ç=Oá‹áX¼m¢ZøŸWÕu¨ôØ­®çH%´ó£coz° w,ŒQP¶<µ NN=ûJüZ»øà-DË©jž#KËÈ­îõ!µ»I8ò_qä³D7ÚµáúoÂßýŸYø‰ñZÂm[Å÷÷ñ¬¶Pé-;ÞLéK8ØTÃ$ ±”åU9ãNø¹ãUÿ„vÃÂzLuÇÄ+á—„´ë‰SW‘®|·3Ï,›š5L,Œ²îGÊ޷ɪêï©~Î4ev¬‘çÍ«Åáϧ"øµä>/±Ñ®4ÃÂË©ÞÉ?Ù4ö9»EtXL®Ùßߌ{¤_´høMðÖóYѦðчHZÚØº½Ú[E‡ò|¸›k—j…‹sA8¯,ðÝ߄Njuí{û~kÃ×qißiwÆïn¦1·–T•2<€#0Éí^¡ñî·ðËá³áwAÐukíZàOo¤\&£#M¨8ÇssJÏçmFFùƒŽU”j>F¾IS©:qÑÛñ=2ÏöÀn´ž)ñïÃ÷šž’ãGðÕÞ›mì^c€ˆè@x&V „bîÃÁ߇º,¿5Ÿ|IþÒµºÖ®’ãû'P¼GYïŽàf¾ò6«Ê&5c·ŽTðwÂ}‹UñOÅßè­âk¸.´ÈfÖ/mš%Ù ìåZ_´6Äg·`Á#'&ŸáxƒáUŸŠ-µ¯øN_O¨Oö¹4Éæ»3*£I¼,€¡Bvƒò bÎpk *pMSV{ÃRªàÓ”ŸÚËÄCIñ]׈~#Å7‰ãžÆ{mLÒlž4‘1c$[0]NR0p‘Ë|~/×Ã~"ÕFЯ_Y·²Ž)ôû=DÝÛ•}§ÎFV$““8‚€0*?ˆÿo¾)x*úÚ›ûKÍ^âÞÞêÒúö#¹¸?.â§XÀ²åW§ùoƒ|r<7t–©m\–k‡@×6ÀÀÎÜ}àQ]¸L¹{6¥Ôòó ëù*-;žûKü5ø•á43âç¼Oà½I¦¹³Šõ–hÐL#ˉäEså|ÁÛvHÈýö#ýŸ48,-}/íðx[Kðþ—&™§!–Ý$‰-Œ>BᕦóÇ'å`CnÅsã¨âqXwBºïgnß;³ÌÆàRIÐzyŸHüRñއ=–« žÆ'Ù+ƒÃÍ#»;«•ÁûËòóm#Œæ¹ÿ>=øaã-ZÃEø­j.'+ËÉ º†q¸Q¬°:òØRÂLŽ8>^-^ÆÇY…–úÜkâÌvÖî#ó•À>çmùX©9×Ò_¯~ Z|(Öµ]íZ—‰tûì@³Ü/¬ž9r›p$·y>˜5â,±åtœ¥y_kt9°˜w†“œä•¶¹ÓüHøoðûÇ~.Õ5ÿ Nd“H…´æ}JXþÓå¨viœàÊâGX€pOËŠñÚÿÅMñwÅú>—ãmSÒ-|?¤ÚéMÑŒŽÖÒD]ÚGŽ@ÂFÌ[r‚#½;ÀŸ´‡´–eøQ¥—†ÆøÉpó¤r,plܯ$„• X çÉÎ<Ïâ÷ÄcãOZ=Ç[P‚ÆÔ:Ú5›°{.Â[’ £ FÒW8ëëçåËñ<•#îßvõ^ˆˆW©VrŒölîÿeïéž ø[ÿ ÊéÚÅæÙÖÖf2ù*.]éwÜ €W©5å^,ø‰uáïÚn÷^ð¬zN‡%¼`°H|¨à‚`Ë.Pð¡Ãœã3šú?á6±¦|6ðN¾,fµÕdºÔ£šÒ)m/.5Ón%ÀRqŠòo~4ðçÄíZ9´ÍÉ·ºÔÇêáDÔ\îPVOá‘É8\EygSŒ©7¹¶²ôæë¨î–Æ€îtoŸµË MÕe0GçÛ[Å6åÁÞ‘¸}¸-÷ ã'ƒ^ñ“á¶¡àE¼‚âÍ$»ŒýdS“ºDHX™0á€ó`‘Q~Äðïƒ#Öu{t•õ¶<ɾÜ[ $©+ËFìc<â»o_Ä×0Ùé—W×:ÅÍ‚êú­ÅÁB—7N7y òÇÈ9,rr01]Øü-:ue+».ýÏB¾^Ö¦­íêz—üÂûÁÞø[¨x«PÕ´äñ¾¤gŽ ÆF·Š'# ¼ $ÙžI ãƒU¿iŸxŸÆÚ4šç†|s{àíGND¸ÖãKE½ ±ËÜ:€ŽYA‘ˆ\ªàã ö?±컣üSýŸ´ïkÖÚ¶â « bÓm­î( ‚ÚIRÛt?ÄXùŒ{Çžq^Y}¬ºïØôam<]éz‹¬JÎñ“ €ƒòÂ_ÀÈ ‘šµË­¹õ8:ÞÏo‘ÌÁ=þ iú_Â[KâTûZ&TìݲL‡Ê f¦œIZ>¡V¯²ŠÒç¬êž'mL¸²×`½¸¸Ö-þÆ’e ì™…Ææàšä>üDñ_ˆ¾èvº€´†çÃZΛvöþ]Äw–¡ˆ¶ )i-£TvóÌË´o1›öް¸Ò~.±¤j7Ñ˯Bú^’³gt78–YYb6€0:dÖ_ì™§_xGáÍœÚåÅ­Íæ±j`7fÖ®¢MðD U`4‘»’Nö=sƉZFUj{ñ{—†ôøká=GžKd‘BÇ}åÛ{¹ä˜ây0<²ØÛü`1ÀÁÏâ­~ëÁ1¶K{ v·Ô5‹[au,…ã„´¥Yäˆü¢!¯“‘À9Š÷ßÛ¦£¢j±xe‹Os#ÏçÇq“5ÖÀ² çê¿/9që^ñ÷ÂñYx~ÕêæÜDë$Å® ;3 ò!XNtEJjNì™ÆëFuþðæ&»ð i÷š^†4ÝELðIušr«|ÖØèòN²lä(QÇ—ñrÈêߥÕt+yt}sÃcÏia˜½ÍŽʫ;÷LÜ•¶×qð‹I“Åú7—‚;M^òîK™¬¢^Ãg½a·æ8Joªã«yóÿÚêúBËTÑ-.5GĺP7qE§¬©41È£dqº‘±ü¿6ðJ’08)Z¥º‡4•;­Nßöpøaðÿá­®·ãÍN3-®¹=åÕÕɆ$º{’Ì'’GåÖ9[ ¼;Åv_µïüCðì–¿×F,R4—¥lmL(wm'ÌFyFF;×™|ñ6“ñî»i¦>¡®øRí¡»šhmfW¢Í¼ X$¨¨o çAçv/‹Ú“ðçX×¾(Ú^ÛèZ—­¤ö>M­Ãà©weR$ ûp»‹êÓîÛèuPjpëvyïÇ/ˆ^¿øMâ;4›N³Òõ„GÓ¡¶óÚÓV’;Õ–Y#’EO5÷ºŒÇÙÈ“_›8ÓgÓ"ë/±¡hwfÃMðÒXͦÁ|ß)7ß½ÍähwO"¶"03XŒg¶’iZÄaiûÊÕÛ>OøGû'ÝÞXÜüJøà"³ð?‡g¸‘,5æ·›ÅrÄ’,6¶ê 0‰çòÉ”/BMz?į‰ž)¹ø9á?ø‹T–Öü áý2ÖÒÚD†+½T Þî{h‡Êv †.Ê~ú('ŠÛø·ñÄÞ*ýŠ´IüQ5õÝ—Šoîu+©žs3GZ„ŸfB˜Ç€‘¦¹è2j¯Å¯ÿÂo¥éB(–ÞÓFˆÇe‰bdIB3‡Û÷ŽTrIÆ8ÆH®oMñ:‰’Êi ¿t”9PŠXu#°<Ÿj÷ å8[cå± Q©{ê}]û3ü$ðÇÁ/júž£e¨x¾çÃ2\XÙB<ÛV²¸eÌ/å  cåŒ÷5£â¯ÚCÔ,n“IÒïo/m š{ó¥³ÚfQý¼ò¤E›vÑÔ±éÅy¿‡3{ë\x†K½EâO>ò8žW–@¨3½Ì‡n3Ð’ ã?M~Ö еøsOøkuyÕna×V%¼xäófÅ´vLkn±+2ƒò«î8Ý]±’¡Nж­n‘hÇŠ­f¬¾ïÈñIüGsâ?4wö×÷šU¥›AX“Z4j¼„r<² º31Éù½kÒþÞØk~.º×|/£uot‘ŽâHÖ[i"T Bå6Ž>£<šÜø[û6ÛÜjÞ)>3Õ,tévÈ.no.æ'òD³JOÎÞa!ˆbÃ$`óÀxz{/ øã_ÃÇ]ð x¦»O²ÜJX\–P6«zÃ##ЫӬœ!º<Ú¸*´{-®lIàíZ»–{= hdxŒérð,‰,«! ÈŒûÛ¸ïƒ\w¾[éšî‘$QË6­âKˆ Æ‹l¶±†!ÞæÝ”2» „m;}zâ½ÀÚÆž¶÷Þ,"ßì1Koj¢ô»KfdUŒ}⤞¼ç$ú ïƒSÛÏñ½×â”ú­Þˆ²Ks3¤‹F\‚AV} ŸºéƒP«4÷ØÂqæôe_ÚoâU§‡¾Gá?ÛßAc Aq­]FDq_O"%»¼®­Üœ ò‰|<ÓoµÏx¦ûE³k‹ &¸¸L’“(!‚Ò8\£,Ï9®Ïã¥ÄÚãXê¦Îk§ñæ§u5’)U´+,AQÈ8b$‘÷yõ©¾ xïUÒ<1ue%žkª Rc§Æb»¹¼H6$bprªÚ1Î9浂ä¥{jÅ8%QFú#…ðÄ ¯_Ç:«Û£ÃGæ6Ä;•¶H€àc ¯ë’ÁáMÂâjÏÄ2j6f"™ŸO}Ȫ\± ³6wÆT0ùX6 \Þ…¶½§Z¯‰KÜjO¦Éyö“÷-Ÿ-å¤ß(àœÙä‘ÎMtЯ5é¼÷ús¶¡BÐ[ÜÜ\¯–&,&,Áûû˜{r+vôæhçiE¸§¡™ðò]bû]Ô5ˆ/&»<ÄÚÉôïöìŽ|ÅU ²Æ³…ëÏi®ü&¹³×´Ý_áÍí½ÂEÑ’êæIGÊín€@ÁÈ`Éí\G‹üG‹>%ji² ‹{ý@»Áþ[m v$N@ÚÛ’{’ݱ^Ùû*ëSêZT0é |²‹â—åb,¸v OÍÏëƒXÕ”¡h‘ÑBVnœ¾méžÿ„«àâEâ >úîÇÍš(¢“ ÈŠs#íùÆÓÆHãOJá,4­wLŸKÓüv“ & ßéZuûŠˆåwG\½€rN ¾‰ñ>¹}&‹$÷:´ðjó²RÙ¤‰%pÂ)¼´p9ÈÆraÚxicÖÙ^î<…’1iréq‰•w–4 ºãFÊTíÁr¯½úóƒ‚V#øská_‹˜#ÔlµwÔ£ s}?ïoI`#<ŠÁ^1·î¨RÄ‚<×ûS|Ô´ï†×ºì–šf«£^,÷z5çž ÒÛFBÉ „cÝ&0 ÆÞzð= ÄÚÎ…gâ-*YÚØCª¸KºGç¦p a”ÊpI,3õ®âGÀëOŒÿ/,> à˜'˜-ù¼–ÆéÝpÏÄæ7CÈÚqŽ çšT**sRmüÁSSÒÿðçÏ>Ôu;ŸÙ¿ÄbâYM¼ºÜVR2ÅVÝYâLŒª¡;Ë‚ .>ãû&|Ô®>XkÚV¥Ÿ,¯vªÐ›œÀ²±+„ˆWÂóŒóå?¾ëßnïüªx´KKåœi¯ Î.n¤ÂHÑlkyq¯ÌÇiÂàrM}IãïÙ“Æ^4ðŽ‹àß%öàm>áÅæ¼… µ³h”‘Ew™Ÿ…F÷+]تÔþe®¿#Ÿ N£q—/Ã{®þE‚×ðx›\ø©¥EÃ}wÿÖŸ<™¼½°;¶îX(ØU~QÏ£³ð~ñF÷O»×e¹Ót²$’kÝ?T–%,G–"hªÀœæ¹]HðÁifÓ<-©k:ö«g¤Il.uGJ·%Lç!3±\FÎsÏ¡é~*²ñŸ§LúGÙm<;qlYU¢Ø“IJ 1PÆ0¤ŽO¼¶Úm¯“éùž¬*Eë&Óê¯øéÿ,5oO¦èm«&¡bò¨»Œ˜#²W\î0¬~P0w/!ˆÅzÁÿ€úwÁŸ†cIÒä½Õu;öžòâúX–0dÁ¢¢ðT+`ƒ´q¡yo~<\^x²ÆÓÁñi s¨4~N”—¢¯Í·í.ìc´‘’N+¨Õþ1ê:7ÂKUÿ„–Kì/î,¼—‘¡ è¿w¹™B‡$–ä3œªª¶Mõ4ÂÖ„ë¸SÃÃ0I«Kcã (l–ÐËusdKÆT†…ÛTç¨Ç*p+;&~Å÷§_÷ã'ö#ÈSÖR ÜFâke:˜{Mµù—´N iùà?€÷ÿ çÑ`Öô» ;Æ[ÝP´pLn¤Ê©C¸‰>P €ØçŒö×þ$¶ð„ä §Î»íÞâešâ8¢‰á‚ 8Y€Ûq–{ÖOƨ~܉tHust'(¥nFwŒ”F?(LàrIäž+Ôüw‹<®[xj©é2Eqöð#’âbÛ¼ÈJ“ÝHã8=+i'Y)=On4ª%±ê,Sư¦µkÍ‚"ÆâÁfÀ#iÀ* íÉÍeüeñ&ðwS”éójúÞ©¨ÇÙôè£<ä’£Yˆ$³6=ëKà~Žžð&— h°_Æ-æ“i¹¸tšT34ÎPXüÄàeF1Šìï5»M$Ou~òÛ¤1#ù„"åšM¤py$n+–R´ßbéɺzœŠ ·ðõäZ–¥*>¥ªÙ$R¼R2ÜÝ+¯IYXµ‹©ÛÁÈÇÍ~Ôÿ¯¼Yû7j2ÜÚÿfj¢tµÓcIâYìÄ#“ò‡v—,à`€«ËqŠì)§‰­R]59丶–BDé,ŒÍqÏ8Æá´ð1€H¯¶~x¾ŒV^ñ;,–¶*ò߯±‰bH¹Œ.vàHŒ£=v’@Xèr¾xìqP´*r·ªØù·ö¯ý îìŒ_ þ X¾¡¢éÖ‹c-ÜVªjz ‰Š@À¹Ããgð¼| ý—ü9¾«q‰4{çñ>¡öåv²¼¶–62Elâa+BÇ n# 6ô÷σð߈<]7‰¼ ê¶¥u&R±†O´K%DO""–þÇl×eûDhZ^»á_Jøá¨o4Ùt†²¼kci´ù¶+D#¸R@eÊ’Àà õ=9gZ6„²ëÝžü(Æuœ§¢JÉ/Äüøñe¾·áˆgâ'Â;›WLÖÇ›}Ä^t®eÍ8^£°_™Já¿Æ«é5M|2ÚDmôÞUÆ—«ök4³åHÒr© mÈãPŒd€ã¿ j¿²gÅ›{{½_L¾k5ìe A2¹â –K+¯cpäŠóoø»I³ñæ©u£-Õ¥ÅýÉŠP’y¶òDN陯eRÀml€AÇSêÊ’ª¬—Mùž>%ºSiîB¬—jíaè?­h@§fæUÜ8æ«›p÷ãR£5ºbÛq'¾1Šùw­ÏªO›@’Ežä$ÏJ‘ѦËFŶðrp,Vá Ý9"N§=GqpʹxÀ¬%xšG² k3$Ÿ/±$öúPÈʺƒ“€zS­ƒ6|œã=;U‰”CJFW‘Ž€ÖR‚jæîn-&D,Œ¤,KϹë_7üqý¦t?€ú†±e{âygÕ,"È\ $–íÆèÑb3\ p9'¾“‚ý¡Ú-À œ±'¯Ò¾Rý¹à›ºí=ñJÛÅžñǃõ›˜„Z¤‹kö…½*0²¦×B’…'¡\g ¨§ìÕH¹».¯s D*Ô²¦|ÚŸµF½â„úN«ã‹[Ä?Ù+«yªµšÙ%ÖKc*]W*78a÷›Ò¼›ö†ýµøK¨[~ÌÞðï†üjš|–º^¹<-,öò8Úd’L–|Œþ8â½c0”éÝ«ík/óü*ÙLçyó+ÿ_#⿃‹â‰3ÍâoŠÑÝXi:4fw¶;Â^ɽQIG嘳Þ¤‚<^çá¿iÿ­mnuû34©ªEygW„M² ‘Æøá–2¶· ã¥]±ý¾0ø3IÐÿá*Ô4Ï\ý¡¾ÚÖò0X¢T ƒlŠ2=U@_ös’VÊêmOÔZŽoMbRÚâ ÃgaºM¨-ñ—RÀŸ\z§×©Éû­yXàž­j‘åH½áßêZ‰.¬~iúüZ˜ÂÎâúÂK+©Üÿe¨ÙÔÃpËg®üDñtš¥¥íÇ€õ;}FÉa dcÞ\£IY•— €C §'€9ç.>+æ´^Ód71»Šæ0‰áŒÆZæ0>i#B_;ÀCÆ3Éÿ´\]gVÑn­í5k»•³¶·žÐÃu¨E‹¸Im¿+†L©` g¥[¦ä¹¦´ßÔÆÑãð—Âú·ÄO G/Æ[ ’\¼˜¶òT¾KožL*¨!:–9k«ÑÃøû¶¾]:=>ÐMœÖèÄJ¤í` áÎFpM-Ý„g¹µû¶ž†Ü¼ohv&¥> dq,pà±Â€sÎk¢ðo†µÝVòÞËW¾Xc¿°ß‰ŽŽ7$’À€'ž ÖršÝ+#Dœ´èEáèþÙÝ΂ñÏoxìc¹TùHTe ŒðPŒ3É'‡ôÑ£_ÝÇi$Ñ<ÌÒ,­).ŽJÑG`@RI;s‚+Zi³™ÍKY ºK‡~ ÷¯id•‹\̘àî?3à‘œúŠŸÂ $†Úhldû‘2K<ðÈ7\8-™Y‹ì¶sò¨n1[žðí®½yåÀcb³#D³Êñ†`FÄõÍsþøŒ¿¤àßïmƒÃ¯—ÏÆÉÝœÀª?ÙO_Ôf–ïT6·VqÇ-£Ê†ÛhÎX »üÒîçÇZ‹ÄZ²xvîîk›Ø¬mÚ½‰°*D?4a·‚và03ÆZ®-Éù˜NërvàÙè‰ ÝàÓdóbT)Ü@EÚÃp ×wJƒPI%·–÷A•n“QÑ‘J0*påq¼É´#È$d¹ø¾òÃÃÚ]έâ;VŠæÂ0>Ì»žRøÜÈ~c‡È'æ ƒ‰<4­¨jZv·äK¥Åy¤ö3á§—æË¶Ø¾ô¡•rX¶@#Œrã±)-{›z~Ÿe¤js^ »†ææÝXÏ 4S bDˆœþìí<…996y¬©dK1!)mö+­þcLC”‹ ‰è2x9Áš³=ŒÞ)²¶_4â I·Á´À†Gc»¡8PB…=O¢×„0ÚΖVñ4«$),)7’¥¶â»e“f@>äVr¨ÖæÔ¨¹½ÇÝøkUkÙu= m*K“ [²\G'Ú`îÉc.ªìÃ|Œ¡HÇ9®Š÷P‹KÒmn|K}ÄVSJžAŽX>ÐFA^C>ÕÈ?ÅÇÐV×ÇRð¤wÞ4ÚÊ$Y{†·Žf ò"¼g– ´¶xêe¥Ž¡â«Ë ’Öæ+FíÚSia>N¸#r~jÁ~óCÐmR$ ™uÝ î[[H.íI¥Š=ª¾k ©U J†,2cHÙ7Ø4)&dÌ×s±v[#e" ‚ 19Ï&«›èì-nt‚Åîn")5Ó»«A6õÜÀ`ùœ¸)ÏSлDº—\i!Óí'6Šê&ß)I;BX(ÚNO¨4œyt[EÛ}Í–k› ll]Â-envÌ¬Ž¥^A‚1'Ÿ^µFÃWÓ4Ï È4¸%±´±ûTA&f…bù™žC»’„î}ÇŽõ&¶º¾“,V_chãXã³A —r<ÉÀœg+ÉèjBýôÝ5%º•gˆ!‰'Wù¥uQ¼£ ¸úEEùtêgëZî‘q¦Ù%ìÏ$Ì’["Ë«(Â9Î1€0P¥x7íðÂ×ãÀÒ´¯D©G¦ønX ;L}BÚæáZÜ$6ØŠ?)P~gU)'±ÎÍ׌æ•l,üáé¢\I=½ÚÞy‚êØ;ÅË$˜xË)Ü2±<ÞSräµhßW¡à¾&ýš¼Oãÿx‹Zñß‹<6-¼Si† òîF³…Ö[uŠ&!&”È 9+)QÎÎbøk¦jŸ²ÙiŽ‹}£xgÄš¨¶MFÎÎ;›ËX$·þq¼»g¤$.È"U.A_›×~YxgÁ:ž›àŸÜzÛL‡Ìfº¾k©š?¸|©X·Ý>R´®Ç@ çÎü|Óâ¾ðˆtÙ5Í*K½>CmiedOÚ4ø%|IjeR,°gEl)û£8=p®ÚQkO¸äœ!ÙžAÅMæ -WÇz£Ç¢A Zfˆ¾’!z’Z»âÑ®^7i2ggf–Œ¸bE[ømñ³þE´Þ;ø¥â®éš¦©5嵿©e-Ÿö1?# ¡\;€J¤qíÜʉRMs”ÚgÂ-wÂvo«ÚØø5'z~™o^\\^À_.I€Š2Ò‰fݸ€£ªÔµ¿ iÔÀ7¸úŒŒg×õmNQo¤j?ry­ÚUt¸»@<¸Q6î$•;Ö¦šZ\¬=NEhèV×?m‹/üÔ¼Eáýmôÿˆ »½Ôí‹O%Ê«´1Ϋ&DeãÚénà   £oðÂößþ!iþ7ø¬ðjz¤¯%ήmŒ‘Cb³Û·’“J¹b@J/BIºíWÃÿ4ËÖt›jp&7ØRf:ám™¤¹½•¸w&i Œ| ‡ñCÄþ ø$n i·ÑÛE5ŵµ¸Ë·˜IûÆ Çi…ƒ._#Šª…4ã®ßÕŒkÎJ\Íži⯊מ%Õˆ?jHm/¢ºÓäŸDµÊÃ$s) b˜ð^2e#\ƒÉEü øT4/‡V3|>6w7úÊ´ÿé· %Å´I¸Å"ƒýX`Ã'…矀m¬µ_k¶Öî÷3Èâ#6ùç$àÍË1${šû+áß„ì>x[E—^ñÆ™cªx¦P’Öõòiba¶ÚÖg“ÌŠw«Hè‡å;Bðk« qŠÒç- ûI6–†§Äþ-ø©ñOFÑþê1èzg†í(®- [é–*Ã÷Ó˜ã$˜ïÚ0ªÊFâi|]ÿÿ´ð…ðö¥qãéóC)“QŒÇc£Ãï¡…pg°Qß!›våÇ=^{â[í3S¼7šAÓ'½ž?²íÚ¥¬D‘y ïBÍæu·%OË\߯‹šG‡,­´çÔu?èïZM½Çö}Äh—’L|ÉC»F[2æbv$Ï•WeòKõ;œ£N:G¼ñKþ ªøcáÅχ| Öº¼ú›ù·ú¥òË­ É6éU.’N…”®®3×åÜðGÄ©¾8|:-¥øRòî÷H™&Öu kÙ’íšGbf ´eF$6ÀHîñ7À–š•ïŠ_xwÄž µdV&â rÉ‘@.Ý •X±'muü!§ü,ðÖµ¨x[ÄzïÚ¤/­´k‹…³³ÔœF HïíÄo(”ç…êq^ƒ£O’éjyÐÄÏÚ;½¼)ª]O7†ï4Øå½ñOý‡4ÓF ä,mÞ.˜ìOzŠæá¾ê·'â…>ßò‹È-µU–ÊwMÄ,€í,»ŽA}+éïÙ–_ø…µs]Õå›TM),,ôû×mÃ\\;G²ÛåVm±ó¡?( sãÿ§ñGã=ÚÛK¦ÞërZ´wߌý¾6|O—ÀV^ø)grnô@^Ûk{R{t÷¸-¼ªH!öïeOöŠð9¯¤þ5|1³ñ橦üCð=¼bþ=9·K˜äm¤WLÁƒ+(í‰3Ú¼ödø×á¿ ü|G{ hòÀì/Œ—[\j¡›ÊÂü€00@Æx®ëÁÿµ~Ž|?u£øÆÞêÖÚúÔÆ#X¤G·fK+óEÎ÷ÎG¦¯d­ªüOªÁÊ4©Gš}5>Zñ‰©~ÒúU§ˆVâ8tMßP¸Ô,ÆèB¼OT‘Ë…Ã’Œ.Õ$)æ½ÃÁ~¸Ö¾Å½ ‘iÚ†œºMì–/™`o,«K§ú½¥AE^gœ×1‚†‘­]x#áŠZCWÔ!Q Öɱ*5Ûo¤ýÚ+ˆmÀ­Íá…—ÃmzòÎ]YkUÒŸJ»µ¿›û9­Ò°÷oåª/óHIÇLnçªU"⢶=*oÚEo¹æŸ´/øãÄ:–§«Á4V¾€i‚K†:|ºåäc{MûiQœ±t%Çݯ‰ÿd_YøsöŒÖ¿·ìn„~9¸¶Ñmî®Ó$ÓD÷Ê’Ìg¸%·¥t3ÌIç$Ñï Íwªx>Îêæîѵ'kk{bï@•|Ä(?|H)#dí]Àdí¬Ø¿g]WÆž%“VñÓ"Óžö$}ЭÕÔ›1#( 6ôçqÁ箼=d¤žºXucí$”]šgÌþ$øÿ¦øGÁþÐí&ÕëÁfM:{yíòJ^I’y–ª€ÙÄŽWœ ×½þÎ?o¼5àoê—š|Á|A¦Ï{©ë73¬oog+ùñBˆ2xŠDÚS Á°HÎGÇOÙ‡Á¾.øá7…îµ PÜjW–÷6+dËD!Lñ—›UØŒcæpkÑîþxuu [êZC\_ØØI ¹VŽx¾Pp6üÛA\€w¦àÜuŠ•à©r¥«#“ÚTÕ¦‘wÅÚ}χ,ncð¬){< .¡ ‚ä9y/ÈaˆV –,¹ä^+ûLh»¼¨kSéI©]M{ òÊÒ‡*Ò5E;T¢•%ú¹<Àö=jMHøŸJR–¦\Gs5Å’Ù ËÜ̈âV8òÃn9“€v€Gæ?¼KŸcuÐ_éÚkÙÚZ_´"ÀrÛs’Š8^Ň\šÆÓLÊm6É¿g[¨ücð—O¶º¶¶¹%$0Ï?úÓ³7ïFImÉe$óÎvà?ÁßuŒž-‚âÓY½Ñô [Ë¥]i7[¼««™BF'˜ºï’$q¸9ÆæaϯðcãŶŸªø‘X 2ÓIŽKèo§•BÈÈò XãÈbYN<’ƒŽ+×þøúSំ®äÔcñ ú¾•¬Ò-º}ž4¹%mD¯€$1m,¹à•9ƒWˆ¦åb(%Q4Þ‡¡ÜÝ?‡"Òt¯i:n¯¤K›v—_Ú À% ÔG˜Ù‰FÝÏU5ÅxËÂó~Ñ¿ u] k ê¶B(ñy<ÀØë ócVP¨£äÜœ ëü ¤ÛÙjÖ´zjÇi¤°Óm§†é@yY M´+üÛ¶†,Óœp2,.ž5é1 .køu«Y$mjIŽl¡v!írNé ;T•L0Hš3qi#¥s+Isâ?xoá6« x^æµÕŠY±†âÞ¨”U,¡° ]Àã{b§ 3]‡†|M£¯…‹x~ãN|ÐÉgˆ¶ñÉ ¤–ò2Ép’± ¼ãnJŸÁÞÐáÑâM#F³Ò¤±Ô. 0c¾â8ˆÍ$ªd,prÃ!r@Å^µ¾Ò¼;¦(ðäÐi÷º¢Gs-¼¨Ioæ\@ê,á†Ö’p9ÖU.¬îÇiIݽ㇉-ôo è÷0 ™Ÿ]’;Äk‹i¤·¶"U&M¹ˆ•*ÛHSÂçkÊ®4øþ3K¤ø_âõÄz·…´Ë¯í;‹h/?o k±Ø²á‘\€g?;7U¯^ø»¦Àž#‹DûV£s­I$É$“ K9™0 ü²Ø0pKqœôóæ¸e›âŸmifð_ëVड़ÂI¦ÕÚ0Åà-nP¦ð‚6'#<ÖøxûEtŒqTš“8¯Û#áÞ©¦þÁþñ5Ö‰gáÍ3Äf»HÒmöÚxi-Öâ1h[®Ò&$/(xÜkÉü'ðâûáOìâ¯x¶Xl%×ôX´ýË^]HÄ3²Gß»i9}„¸Áû¡5ñûN|¹ø~Ö—7?Ú–·sËkh‚qb±"É *I\1‘UI `òOB|¿ãïìÏ7ƒ¿fmlxû.Â×LÓì´q ÈâYcQqåÜg 1Rd·›ÐUF³¥N¦—³¥ CHvØüÑñ5ŒVº@–ÝÉA•Æsœð¬ 7C“[K)ä søúŠê|g=ĶÚM.øáŒEì gØ{õ95ÜþÍž¶±ñz×ĹðÔPºU´3BC"Çol± Ò¸\.N¸¯®§USƒ›>#†u«Æ*÷=Óþ&ðßì³û!øvoéM}­ø¾ ;Wµ{~îÎR\˜üÅåL0ãåRÀÀŠÈý·nÏŒuoé——3Z[ÿi ²´yÊYX‰#ädÀUmP / œœOñÿí#§ü[»Ðtßh—Z‡Š"×ÖkX5ä€i33ìŠsòå¡Siõ5™ñ£à׈üi«ÚëW¶“ÛÅw­cé6+2Ms2Ÿ]]HÊqfHFrC£98¯.Š\Î¥Wi6z•è´¹(ê’×ÔóOÚö|·ø­iÆ=z9µ;Û{=•òåå'oš£ÊÜFÒ9÷«Ÿ þ#üAÕ¾ êÐè®n|;oj Ô®/˜mR/ž(Ç œ@Ã`°À¬¯Úã@ñ¦ñ*óPøŸ%ÕÀÔ¥Û˃äŽ(áCä‚DD¢ #'qËI®[à§Âˆ~+xâÏI›VM*+.éÚÕ§•v®â‘ĤfÇÝgšô¡ïÒ÷ÚhñçzuU•ˆ~#ø•¼Ma¤*^µÃì™ä‡gü{»È¦óÌ„à6ON‚½«þ ýö‡ž+Ôµ]bâí/î-SH²†(|Ó,÷ ™—mc Kà(ÉôËÓ>x{Å¿<-á…ê2Ú[ÞÉo¬kרÝvÈÛ¤*‰û¸–4W\)n£$·_Ѐ_<;à«;m{ú^ž’K}$ZSX€°Â"gfqó»ñ‚IÚ»ŽÒÌ1Å‹ÄÂ&•õùðó¯UEt2¾|;¼Öü[¥Íá½NþîV¿&ösiËÃ6é‚(TŽ%—ËU “¶RÄ·9Ùý¤~#øká…¼MṤðî§=ä1Ûi6q[È’Ù΄·’×reî§eÞÇ)ÎpM{÷ìÍð¦×á6›<¿5˜fÔ¯&ìm¡_ÜB“gd#p̬~bC`dð8¯Žà­CG‡Äºh¾1šêáZH¢E•œÉU²Z,®0„„“òóó±’ÅWTßÂ}¦‡Ôðò¨ôžçæ'Åo \x_â]ý®¡qa{$W,¿h²›Î·º–‰È—$€p:VÇ„XëÚ´Qëú¼Ö"u?•$å6å–5Dääœ8“]_í ð½4;] 6Öü5}}§éŠÒC¥Ïæ•f”‘Ò(ÚÓ¨'qà 8®ƒà/ÂØ-|5·—Uñ>å’ÇGO% ž,ç̸.ÊÈ¡Cµ'sŠûÔ‡±^ZZúÄŸ}Od²°ð¿ÃÙjþÏÄš“k:ίfþ'ºSº5ÜG "Àe•ârX‚sÀ¼7âí?ˆüW­·†,-´ñ¬ÞÇLŽÖ2–f‰b#l ïv9g'ÐZðûˆ:÷‰uíÎ…áÉ6¸™Õ®cŠ% µí™‘šRvãh®Kã…áë¯ Ëkð—Áº®ƒ6‰;K&­=ã\Ú\Ùç]ó‰åÈnJóò¨`¹¯6“„j{é·ø/ÐõùªT¡hËËÔ‹À^:ü·èÞãíÑ)e†q)büç''ÍýænœWC­aáùü+â=*êúøIY¬ïcY"BÛ Ÿxy…qËŸnþwû?i7?l&Õl ñdZ…Ö—¤?Ú&d“y™$ˆ"­»qÈR29Ͼ£ñŸí¾èVÚî„öÒhÖºdÁ¡Ø˜ÏÙ䌩…J¸w±•ßj`e[wNn>îçûÉ)#å_Ú.ëÂß ´uÒüµëkq­ÅýüÏ+ɩݖ±¬ÌY<¼ºI5È|ñeÌ7h:´Æ ýÑþ[]ì±…¹±ã¡ö®Ÿâ§Šu/ë:Žüpö+{§Îf±…£)±™Á\!@$ ¼ŸºU±€kSÇyãyµ?ÚÓ§»S–vÿ)ܬÿ6 |ýˆÜ:+ºŠN6z˜b¥(ÊéYt=wPøàÛýF/ Ê­gw$‹ •W"JdG7Èù¸c‚ÅzGÂ=ZæÃྭ¬?üMì]A#Æ¿½óeKv“oRêò1n[)è8©àOÉ©xÉ|=<“Í,Úli"7U›+`àn\(‘ÉÉÍv_mEø7}oà½:ÎËφ ¯&8Eºœ8]€ƒÄ»K`Œžpk’­VýÉ#l:S|Ìïþë­…¬/¡•!Q°ki!Œaà•Ô(U”‘ä–R@äòA©U–åú’O&¾øa7Ž¢¼Ð¾"ÉBÆÕ´õ¶½‡æº‰Ø€(•#`Xœd#uGâkžøµugãWÆ/‡¼%¨Á£Íq¡’öSÀ³FÒ–q$ê¯Á#hÆy1[ É.m¿|5Æêqòôgk¨ü_³ø·ûRÚøWQ{k};[M¦¸—bxcU†“zA ޵è?5ÝkÃ2Z.“h×·:^Ø”íY#Te+e,œOJùGö9Õ üg³žÈ¤·1[^<–²DÌb´Š$·NÄmظD!ÁÇJúöyŠO‹Ÿ§Ô4_&êÚØÍdŤ ¨c›ÊOîx‘ƒãŒŽçŽŠ´•&£Ñ#‘×uªJVÝÙß¾ JÆöoo«_F·Wwk«¾ùвª±!˜àœnøßöðÿÂOzÆŸá?W:†¥}ub$Š|˨B7šäexS.3„,É5ÝéúŠþH&Ô­¬àC5¤«b8ág"8ÂLÙ`ÈK1ÜqŒWütøo ë:–o£êÖÐO¥Ê’)ûo”‘ñ–fV ZGC{'ÛYXj¾/²—SKti--!u.Û~c#»S¸<äãÁÅ|Û©~Ñúf‹âZi.Ê‹Eû]½ÒA½n-ð›ãN…Y@` Ó#<×µüWø…e4zÿö¥¥ž¯¢i°žêvŒÛ‡ó6€x,Ãp# u\_øëá–§ñU7>‰eWž+M> 9Oí‘Äf+y*«Gú½}sŽü%.oÿ‘äb_¸Üwgé…þ"ézî¦]ø~Wž[8£im”HUnS+(Æ~f<ðEsº–§µÕÍÔ‹«: ä1FÁ‡ß,œàŒ `ô$W ¡|H½øY¤ß[ÝÝKgi¦*Ë:u™l…RŠ˜I]JàäœOž;áÅ --¼Qã_ë7¾%_ùOf÷ ´Pá¡òÉ!1 ´u W¤ÓmliÕ%Îõg¨x+XÑü7âóa<ŸhѦiµ[¸c³BeºVTS,›Žp òªñ\wí ûeZø_Äú‰¨›ù iÕæŸ ó%±D4²™61tPÅ Æ3¸óƒ¹à-6ÓJ×~ŬëD²æ6Ž«çÂÎÈòœ÷ûÜsX?ÿ`;-kÄ׺Ýοqf—5Äwn²],£8‰`„=9éŒöÖœhºŸ¼gT*J4Úƒ÷¿CãOëÉãêZr =:[Ù.[°#f;±øgÐg€+êoø&n­'ˆ4íF Bk+›dYYÚ)óР…Ë$>›Œ‹ŽcêkÆ‹ý§?j+-À"ð_ÁíQ´K½.1¥Û‡žM>òíš!!òfÒßt xàÔZ<º”ŸaŽÏBѵ]:ÎÖuˆå±3Þ„Uß±ÊÊÊ»ä}À s.Øøg῵týQ>ñ|—‰=Ìò\jz¬aû÷Šy“#!1®ï¸:ç®Çâ?Åöø?á­ ÂÿVKFžî;!·fÔµœâIˆ s"€ìÒ3€Ør1‘^ â”c¯¿©õ&ùôè|-ûoü@ñ[ü;ѼKã›;ï &µrº5¾•yz·÷°ˆâ+µUXÈ· ¢‰•™¾c·mxÇÛ/x¶Ï@Ö>«YÍ«iË>§beó›xµ€ÏÝW0^}sÎ+Öÿà¦ß´w„>;Ïá-7¸¾½ðú\Ás¨¨ešd%|¥_çI ÆÝÊ pM|±y«-™‚`ÛC¨Îî ùf¾ƒ¿ujŸo#ÊÍj¨VVí¯ÞJk ?"uaWSÆI>µ“g8|’K1ú}*v¼Ø1#}ï_-;ŸCtK,ò–ÅËmCÙhŠ#íLõÍGÿiBÍœÆ1DËf"} Ï&¹'ž§M6ú—–_"j%äÜNsëRºyP8ŽGN•_y ‘øVs—+FÔ•Ñ]÷IqÓÒ¡m¹ô\}sAvò2zûМ ’Ea6¤kØ$à)ÇJav Aâ‡är\R´…ñɬ›±¢CC‡qæ ' â¸‰ßt/‰í=Ƥ×vWòư‹Ë{‡PÚDYØØ'<Šî·+¯Î{Tw71ÛFÍ9HÕKzVrn ™hÉ©Ô,–‡æ7ˆ¾ê? FxG†¯)Aè^ø[¡ÞÇ£iƒâEí­Ö­s(Ð<@2Èy¾R/ÜÀ{@tüclluë[íUnßC_´¤¢=ÒM!FŒ(Û‚ó‘Ôð*ýޱ ­öf >Û~.$µšD–5X·t;•ˆ'#%N3ë\v¡â]_Äþ)}2Î9…›§—r.›ŽÍ ¯A ÆâÜýì(i·ª6”¯±Ðk¿{8žÇOµ½º2ÅÃ]O%’’òµp£€@Üx÷®SÆ ±ñm”’xbuûE¼²ZÅopÂÞipÇo÷øaŒsÎqÍr^9×lü34·.mtÛgÚª]ÄþZgÈåÌ››7n%‰$ ¸ªß³ÂÝwÆ~-Õµ}qÙlu»H­n¢’PÑZ?ߎkl¯Í ˆÆ½„°è+XRNòÚÆNNnËS*ïZ“ÄsîÒ§»Òt½6D7†áI.ÿ— Là–'8^:“]þ—ðûK°Qy­;^ý—Êv³ÿy38ÝU€à)·Lf½_Ä_ìàÑôÙ´»C{y§ìÜgve™—•.ªA ç“\¯öþŸ«Ë¡[[Ýkú|ÂÊÞ)ˆŠ5à ìw0 £$61BÄ$­L^Í}¤ak¼×.ÛK†´Ó5'k›ëXâRúˆoᔿ!BŒqǺMnÊÞêÓ|§ZZ3D‰²8Ä,Ë!G÷Ws8ïZ¾ÐuÏø6Þ «éõQœ­åÿ±É3ÈÛ¶F¤€¨£rsŒç&´µ»Ý#Q×ËP¸ŠÊm68Úé-ã%™\…Ê÷]±Ðœã'¡&±ueÌ•ÊäIx³ÉàÛÛËyt{ fmmÎ$Ô&f$§—ÐâHÉ8ÆMŒ^3o†š<çŽæ}>ÓOd¸‘æ‰V-ÁÄÈç rA.3À5Óx§]‹FÔî.µJ ÊBÖ¶ZdnYö†&2OÈ7ÃIn•ÉÞIŠ-/õJöîÖè]ÉÄ­n|Ém‚ª˜âO™ÁrŸ0Pr^ˆ¥-NzŽêÆUÿ…µ?‰þ.µÔ¼]¬Ã…gdDzu•€€%ã8(L„‘$b2ØQŒ3|Ç-¤Öד cÅÀB Ì꫟˜Q‚AÀT|§“W|O¥bŽ[ÂÐÜZÎ÷6°G÷ü³e !Tîç€T³¾麤š3êúÅÕœ‘Jël–à†äâ¹Ïj×Ú·m4¯ÙJºÍ©ûT–›ßJ”€ · È­´c‚]½+tÉ´—–¾»6³Ç·šó|fS.Ã1åYA=1€ry­¡k˜ó9G}KGN¾‡[›Oðô‚Fñ–˜R&Š6(,Üc‚8ðqÆ2Ý&Îÿ[·‚æYL¶h⸖F³¶Ih‘ˆ—wÈôï<”¶6öV¸Kx£Ün¢ »ç I' …%ÇÌÅwGz[¿Ëáëwq<—Š«OIF_›äŸ-r0q’e9rìÝä;SÖᷗ˼†xíìf@ÌâAmˆ±ñÉb@¯aXúb¾µ\Í,qjW¬ÆO- Nx8_NIR5_ú<þ gµò'¯£ÌëlîÓ<”’PÙß&ìa à‘šèn.4¿G%·†¦¸’6G@Égª©Ùå\‚«Œgõ®m:+MËzµ¾ea£X¥µÚÛ\5ÁsÔI¼½ªKôGÆ@Ï,3ÇZñïÚ S¼ñö6‰áNÕ¼Kg0¿²“PHÚÓM›aH.\À4ØpK.q…Ívõí߇|4±Çm{©éå®ÒR ;|¸vB@˜)TËdŸ›•ÎGâˆÖ¿¼qâFɦh–£TšòIQc)%dÉ5ÉÚ ƒ•rI«§ß2"­E‹c”ýœ?g»Ÿßô_ |P¾“X×,çšòâÞÍ.£3\©‘É$mHE*>WP¨É«_¾!j_&Ó`³}>ãÄ~'K‡·KË´‹h# ŒÑÀs´+¶@x Xž!ý¦?°/.´¿ÛX[]ÛÜ «Ë«t’V)(ÌB¯™pFwn ±.IÝÁmσ×Ó']gÀž´]vx‘õ+ké™o-!‘šP— pÁY¤SÉp+Ô´¢ÝJ‘üŽ:µm"ô9ÿ‡¾oÀás¦]išeέ‡sy“¤H²Ew3J J×sò»@X·?*â È<[aáOx»ÅÚ·‰¼Bïj‡.­­¬ì4 b-M'É €UÜ»¤2Ì0YAŸ¥¶³ñÛkŸMæ‹§YAö;y-n‰Õu+©U…#Q»·!ŽQ´®âWóÄ/ÚÏZ}KÅä°^jÚŒÐÛê[ÔK×*¨ï"ù€íÛµv"“<+HZirõÜɽnúŽ¿ü9û&ü%¶´×ü=asâI´x¾Ã¡]®ïì¡,¬²Ipä1iÝLŽTíÜ0FkŒ²ðÍŸÆóbaÖ4µÑõ­$W@¶Ô£Ž]&Ùdß-ÂmÂF#󕌅ƒîÈ7_øûBk_/´)/ß̇Aó¥´µ.ŕԇrØ-)*ïd|œ“Ÿ§ÿeß è^økâËÚƒ[Òtk©ä´»º²»hlÞÁn6ù2À™2˜R£ql('5Ó*>Â.£Ütë:¯]üÏ<ø’~xV¸½Ñ[\¼²²†æÒXÔáÕeFôJ8T³ó`¡ç&“⟃â¨þÎønÖw1ÚˤnÒÉ47˜†^2NÄÚt¬ÅNàNÖ¬¯Ú‚ïÃz†“m£üÔ¯m|;i©NñÇq1 w1"!<ÕIv9ÆÐ ‚xnè~&Ó¼/ðËMð×…šÖÞÎx’úûVŽùÞîþé@/3ìÆw*Â~P¤ddóQ…à§}|ÎgWšN=>F÷À7¿ëÚ_Â/8Ëmov—Q½…Þ»}j×WZ´¤,²-¼,G–5E`W'qn߈?h/Š’Ï÷Àï IáK ûW˜y/ úŽŸ)å¢#0TAËäEbÌ21ÉÎudä¥kô4‚ŒwügOø9ñ: (|5àëK© dK›™|LÐZO¥¡»Š(­¥b-Î÷:+bà`yoüAmàCâω>#ñn¹ã#rÉö9LÙéÌFé °åSjÆV2@ܾœÆ§?<¨ê÷·ˆu>8îÝ'}fâM)Nó’Ó Ú²TŠåµO ê¾*×E޵=Þ»uåG šiª÷Qƒ‘à…ùb9 ­áM¹{Í}Æ3›i(ÇR‡‡t-KÅZ¦‡à7}Rã];nmãŒ#gxe2cäë—€ô·†?g¯‰Þðõµ®½£éž.בV->ÖæYæ‚ÊÙ›™&ؤ@AÏÎÛ‘¹†*çìkû?ÏðsÄzÿŠHeÛ3€EtQN1NÚõÿ‡9g{ísÐüioá]Ý5 #AÔíî-¤…¥µÙ4¤d¿CŒ„ƒò’Esš-¶•¯YˇٴËÈ”I$>QlB·lð9ÉïÍjGà½SÄ—7qÛÙÞIkl ÅÊ,DnD'÷Ž œŒû⻇.õ©$¾ð%®¢ºKbâ SÌhܦQ g©ÎxÎ}¸®‹¤›os$å$’a¸À>üæ­¥­Ï‡§ÚF¥íäËmdu89àýÓõéVÒhÂíJì–þâqh%Ña’ág'h—åe?1^¼W£üÕ´™§]#R” ŒÑÌ%Š*îÓ@8Ü0 ŒóÉÎ+#ÀzÞ¤¶±¨xâ[K»ë›IXa‚fªlQ€f(>œW!©hÞ.ñŸ‚­î|G,ú/‡Ý`e•<è à í+ÆO8f¹ªáéâbâôó:%)É(Ísy_hÿôÿÝZj¿ üféŒo$Óm›U„Á%®Õó%ƒ…ž@#âºë?ÙßÂzN—¤Úi´ûëýU.®îõ)n`¶°¹™yÛ\äÈûÝTbHÏJù“HÑü}åèšf•}6§i¦Ü]Ekî|ئ[` >o(ùTŸ”¶Ñ’2;OøÛ_ð\ÖúgÄWIuý9äi-?tÖv‘¸@Lm•Ö5ÜÒ6©ï“ád:uUXÔ|×òÕvz~FñÃÓŸ¿izÝÄo|?ҙﵭ+U×bò¢öñNÓA¸‰ŒOÎ219Õ¿‡Þ4Ñþ"xunô»ÁgyôWPÛ4ks`ß+nBÜîþC×åù±^ ðÿÄÒ5&Ö|W¯¿‚Ýnæ‚mA"693)VÉ.Ŷƪ‹7AƒW¦ý³ü/ðóC  é÷Ú„ºÔv÷öó¢Am¹†eÎܮ͹'æžHäÍrêµZö0n_‚JÒqQ¾—=_ǧx²âÓÃzïâm3E°žöâÆÄÝEs|#ùÒ ¦ÔÚ¥df ±#Õ˜îßi³þ©ñcör±×õ¼k¥^}°$k}qmhc·ŠOšx·/™ä2’¹*¼A®cöGøícñ3ÆÚ…Æ‹ iZd¶–²X_I¨@/-­íî„•Õ6»å‘”˜qó WÚú§kãÏê'PÔçÖõ B嬢µºA%Ðn ³’yŒq´–jûÖTe3í Œñ•m}Þ;ótß9¼qÂTó˜áP"€óƒÍ|ÿ'…5ý âRø‹ÏÒŸA³³W²³±³DW Ä'š6îVÌŽwŒ·ËžGYµ½Kð톹®|JÒµÙ5«ûÕŽ{ ;‹‹‘,ù*‘@mxÊÛî¶2î|‹·‰ŒµwÓ±ëß´ýM>ÂæÉn Ún¥ –WÁ˜žéŽœ|å¸UùŽ3YzÎyd–qê«ö[–xÑhÞ6VT\}÷;’3ÀÉÅpž ø“gðÄ¶Þ “U´Ž kŶƒL"L†FA hÄž[˳1}™ *|cøÈ5í^Óð¿…u½úNœ¯z‹cu°›ˆ®FÎÊIw G<èy­yfçk¹Tå'rÙ3ÂÚV…ñÃNtškÍ/Xb{}BÔÒæ9?yi—Éa!ÆÖ1«db¾šðF™oñƒIPº°–[;ß(ÚÅorm`—Ë%ÊÛU!Æp2+ÁÍ~uhbñW‹|.±qrJê3^jÊ…mRi®.â6 ˜ÛË2|®ÙàWéOÃߨøhhš…àŽÖÚb¤XY@~Ïi¶.D &ãÜWÍ,3œŒ ®`¥NÒf:n¬ùb´Üêô½*âÏXŽklm؈•$cy›U–E8ÎPŽsŹü?¦Ïcw©D–ßjya¶„d2±gب3†c¸‚N['æÖµ§„¼Uÿ ¿Ã›¹¤ƒÂ:ü^yí­Öí ’Ú;‚¯\(•cyÈlsŒövþVñ÷Ö"Ýu‰!¼&7I# Év0Àn÷ë^l_6êǧ8rí¹%­Å´º„v÷—Vßi¸—̶I@‚Æüw%GÍŸ|×5o¯Ýêwº­ÏÙíÙ´ç’ÞÝÒå®dËcÌÆv®ÒŒ2só^ñ_ƒá`ÞÜGåYÙHöWZuÜaTN¨Ñ/æ+[{ `t®SÄ—1xfa¦+IÓíóXmšÀª¥glá8$ò cŠÞ1M-Ng9uZi7úŒzrÞkv–KªZ1¸UBf·•ƒÈÍÜ’Aíé^¯è’øSÃVÓøöÓLûZ«‰ï.á[O$³M,‘¦Dxerß/â½ÚáfÊ$¾|-*Co°V¶pFà “³Ù9=y¯1ñO†ãñ¥©Å¤’é×ʹ rѦÃÎã‚¥€û¤ßÐ×U)r½ êÇÚFƇ¾/hF‡ ¨±M> ? ¬·2¶éd¨À›X$¾ÈÜnGÎüƒ^ÃûrxÚçÄŸ 5ÝIIšòëF»¾‰¥…âaû Zh¿ ÒMwY»WŠ bŠï,¨…Š­†Q‚wnÆ9¯¥jÿ h¿ÿg«3@x¬‡56Há·Ú÷:¥àT ,Ž[1¤Ld”08ʪ ÍZÿ‚jþÈ^$×þ'ZxÇW³‹þÝ H™×í^æy£m <©@hä)‚YHœÖÏÄO€S~Ù_®î³8¸ß‘4½L(ÇØF\É]Ýžk⿎w_l4m+Ä‘]xG³ÒVÒ{{ù\n¼Ç>l3¯ïÀÌX>:×–iÚu¾‰{ö”¦UŠá#™÷m;C ÌØöÜv¥[ðF©uc>¦m¢ ç>Ü/·ø@8Ü 8'8Éõ«Z·?†k'R*r]l}…ð7â´>:øÙ«¶‰á»[¬–Z^…o ‰…¤yæJ! !C$­»8ܧŽqõwŽþ-i¿`]^]"ú] «k ŽŸö«Ø&¸gÀ8ÜìîÞbüÙlšð¯ø'ÿÂMC\øl¾0Õž;»ÝNÚx<=ʦÚ[…}³½q* ·Ì œW¾ø[ÃqøáÛÛÞx¯PÓµxݤŽþ #ŽóÌÃ#mË1 mo›;×Íæ„ª8®‡Ñdô¹i{Iuzz~&zƩ㿠éC㕼V±Ë·Vö”º|™Ü»Gq2BÊ ¡È*LˆÜüû{x’×ÂÞ,ŠÇM𮩠E4‹.™-ö«&¦·p€±9†gÀtRTp22¯¾5³g«øjïÆKâV×4Í2KwЗFê—¾S]²Äæ¹› fîq_Ÿ¶¿‰µ/Š:fƒªxÖî(%þл±Óô£)’æÊ8öù&@¦@/RA8¶Êi¿i¶‡FmU*³¾‡ÎÞ"¸iíŒ/ 8üñ^‘ðMǵ¶¹2ÛÛX5¬7N¯¶K2s±3Œ„$îàÍp·‹’µê(€ipAÚ; ÷ïØÏá=—¬µ x'»“XÕîáÑí­­Ê†Š9ˆY.Ã09h¡–vŽ1žõô•Ú…97Ðøj*S«úžs¦ëº¯„µmeÚêµjo&Nfk=îöòlë†eU Є;x©u ÛÝÂ×+m36›qoË ñ²AÎW;S ¥²ÃÆO‘ñkψ |TWð’ÛÇuöŲi<·ž{ï¹Q]—d1(zöÉɯ+ñÌ7? ôØôoÅYiú¥ÍÊCc`Í{jãrÆZèq&R9RªNN~Zú'àWŒ"ñ×|/yâö»½±Ó´XÌv6„GÍÀa¾âã;K0pävÊYËã‹¿MH¥ jVžÏ±â´=GFøgâ­gÇÉäÀ¦äe.\ÎR$E$—Ed*àmã"¾qP[ Þ41‡qp…eÜÐ6rAà‘ÆJúWã7…´½sáLjô¯ m  ÜÜߤbóí,¤¿žÊ²1 †$áAã À¯™×À2É¥‹ÿÛÝYØLá"–hÙLõ HùŽÔÏÇ‹¹tFóOÒuí·Q£Ë"4EY˜ÆBˆwA–»ñ_ÁÚŽ±áɵ #Mµ1Ý»`ŸSb¿# ›å~S³…éÞ»Oáýö¡yoåí«Án Û«M¼înP07(?62~`QŠKÝPˆ¤ž&ÕÒ[KDÝÊáæXäƒ!T |ØÏ@z滕e6ö<¹Óå”›ëØò‡ÿ_â?µm[ÃzÕÌ6z¦—&•¬ˆ#H&– –5¸²dŒÝ±Š2vý༜uú÷ö{ðÄÓn“N´µ·ŠúÓ 6Q,ÌÈŠVc—f'†b+å¯ëÚ—Â?‘jÚèÐøoÇ"ò<»}“Ãv¶˜·‘Ëá`ž4 ‡9$6 ?BxUõO‡Ÿ²¯‹|Wâ¹Ôu+NKhÍÛs²@BðO N0Ç+¿‡~ƽϋ_QðÖµ¦ø?íwÚ•ýߨ öÞ\¦Â¦Yåmà®æTjƒœ¶N$y'Š?gIô(o¼;m⸧յ‹ËKýZ;¤Bö0³‚°Æ"vÀ©`äšæ>xªïàß…ô‹kH'“_×oæÕõ8à—Í ®îc¶L¶Ìî9nx½ÀšyñÕþ«uãjëG“V3º‰ƒ˜†V„΄6ܹ_âàdàŒjQ–¯O¼ô–*”×*]tÿ3†×|-©[|;ñ^‘ªjú_‡|,g"æb‚êT €áƒ&I lÈH9 •­ß|VOYµ”6꾺HSFºË4PAk R ™|àó‘´û׋|sðƒx›ãŸ†|9 wPøZ·[ ¶Ž!û\klå™P¹‡–`—'°®ßm§„ì[Vñv«—¤iZSX[HK]> £zÂX »SÇJìö_ Ÿ]N:õ½œ8+[õíúžiñs\Oømìæñ=î—msä(¶{)%û@RÀy¥1´+³ ·ROÖ½ª_…wýŠ(Ö/d³µ‰óöøc1þò0ÙU2VSÁåO"¹ŸüÓ<#¬E¨øsU0ØÝ<ÐXÏtc{`Í·±a);rŒ£9WCãoZ—ÅßÚ.ÒæÇQh|!àël­g¶tsþŽD’€¹ÍšidÜÝ0ƒ¸ÅU©k=õm‘íÒºÒ Eݾ§Òß| Ÿð³µ«áýÅÛ ››™f%Ìq*²< »c €'®Iô½PÓüS{k ÜÇÄ–Û®æ€òYÁ²Ý`p}«'À6> øöot‹MOÄ3>¡¨3ʨmÁÉX&lx$ž­ùUßÙà–œ|g¬k–77Ic«ùwwes‰< Ó«1  ä=|‰ÕNúìzôi.^yk)=ñŸÁš&‘ªÛ®±ªßÚÊ%²}†%·¹vR§hÏËž¼¤íÎ+¬øi´?uY®–ÃEƒX‚{{ë6±j¬I)Ucæ÷÷“Ìs^—ûa|/Ò~èööÚ%ãÞh Gh§{{ˆíÎÑvà¤Ø”©eaÊÇâ^ñ·‡<;®^itW:æœâ8õÇ”ÓíÚ#°`#'Ì%qÃ(ãÓªrU)%¸«ÃØÔ„å¡éòþÑ´#Äž ÕÃDµ¶’æÃÃ6²´ÿÚÒ*ÃÎf`Š’ã‡aÂã“—ðÏ㭯ĽûÅ0hz—„a±Ó¤¿¸ÓmåÛÊ>Ðab±L+¹pņAC×µywÆ¿XjÞ%ÑâÓ|?oâ-¶ˆÅ%Ä6öqBKm܈O#•ùAÛÈ\kм-ª|iK=NËâ,ß ÚËÃrXÞjF¼2DŒmâ¶|¬¬‹(ÜÛ‘8lŽpqQޝWçoøs·–W‹¦·þ¿®§x+þ ÿŒthõ¿ŒëâÍ7ÅZ•^Xé6‹-Žj²k R¬L²HêÛ±» ä5óOí¥ÙjŸµÁ£XËeh/Z8ã´J )Êapr#öþ·ñ7QÓ´;{;okbâåÆt½!â6¬‡s3<’DZ3(RÞbºFÐ0 xîµðÇGºðž£«üV15Íã3éÐé×Fö`­!ÙçÎìw2‚GiËOëÈãÅaý´$¹}öõ‰û ä±° øÁãWáŠK’­qò©çj÷>õ‰c)†ÿ÷îÛO9'­n-×Ê .{w¯ JúžÚ’±=Ü…YDdŽØ©¬f6«½¶æ©[ÝŽIF?Åè*Â~÷úv®i=nm¥™7šelÏ’Z¤¼™p=*"Ë·*NOR£€ 'ÎkšM7©Ñ<Ë·‚zp(ž/n9çÅ ‰ˆÙ‘×¥,²^@t±–¦HØ‘Ç÷5"[7ÓžM0ƒ¿÷x'¶9«ÒB J#¸¨µúö t1®fõ¯…à³_m ð†<á½Rò×[—T:”óA¼P¤1ŸÝ8R7±óCã8] žÀýç6é%Ý+23JðO¡ðçíÿ“Ô¿h‰úˆl<|4Ý>öí§†ÆãLûP±£Ux£e™N .îG~ø¼?²U£:ò´QçãÕzðöt»ÜùCöFý£¼p¨êÕߌcŠKm&ÚÜY¹òJÅ$‘PS>~Lôá}‰àý!¬´ß[x×ZÔN±oyºJnVkKIÓlÍäB‡÷d±Ë+öåþÎú÷üŠûRÕ¿h Ýil§¹dÓ/<.Îð2œ'™;8)J± ÉÉ"›~ÜIã¹n5/ \Má{OOz¥«ˆ­¢×,î/’)7ðÎ$e‘dhÑ”¹SómÈ?EˆTñ/Ÿ g­lx‰J”½•M$}]ã o_Ðmµ»î­ì´™mÓ÷6 Vþu„ùs¼Œ yûвF¸EwmçÇ.›Døo0ð ºT¾"ZXݺ³Î1h™Ô 1 „ †]™?xf­¯ÄÍ{C×môßAa¨hŽ×wWêW(¶³È¦$X¢•²4Åœ©taû§^2¦º‡ZL¿MozøsCûFc³±ŸhKÈI·J2›Q†Ý„(,CqžeO•ûÛœ•’ùš> øKgâë;3®DßfI­ƒ_eî7+º9Ut&—ž¥™F2s‘]ïÃËMW×z…çˆu+k« ‰V+=>;av£íg–Só<¤Ð@_RiúÿŠtí#O¶Ñíoç{ïF×O)½ʳ‘ãÇ嘪̬BŒô†k¯‡ð^ÏöùVêo§[ÍËqw"–Ê‚ÊDdd÷ƒÍDäç~Ãsåz“{ã­KHK눦òíìá3´Ò8ŽN¡·€ñ“Ðs×¥dϯMñ7ֺ߅áiþŠÚda$`Lïó8SåÁfÚ ¾Ö‹~Åm¨éqŧèª%‡N!µ@Þb‚¨JüÆ2ÀñêkÃH÷úV¥wnºÍÝÜlðÇmz‘¥4ŠJ$#å`nŒ¾ Ç­}­jšy}:öæEDŠ9‘™Ûz Œ2ImSß8¥øqe`Ö0êdšŽ¥²xŒ-ÊM¸»[ dŽqŒ`gŒ é_§?;nÃàð,ZµëêÚž-Ž´ö±Û,‘Ý™ZF"g+ÏÈ‘©l±ÁÚ­Rñ/‰ôk ©Öu 79ëmsu±/¶Cµ2xp¸Èƒœ’E_ñL‘xkòêrľ(—O¼}VÊ9fAûÅʈÕßä“â^­poáŒéðA²öí§1/‡ù¹ÃŒÁ8¨±³]Ég¡‹±;eBƒ#ðpFG5˜ÞÓ¬îl¦»±‹RÔ,@·ŽCv1ùcÆÂÛK ÅÛ%²è(§'®Æ²¨ ¬¶-ÞxùtBöI/¾Ÿg}ŠÚÉ¥˜±ˆ€t¹t種›NðS^øPM56+±yÉ(£%òbv uQߥ&§ÜxrÆòêÂ0—*Ei tÒ&K0$ ç`|€0= _Å7©Áu§É¦ÞG,wmryðI¸*3ª© [qÎw0íš¹;¾X™y²¤~Ñô ËO ÜËoª£FÒÎÁ>ÑïÜÛœ(P2Ã…è)š‡†m|=§yº$R’UŒ^F×âÞ ….s$.£{`Ù´„c ¤ºÓÃ+7ÚÍÌ%£Gj†IÏVlªÈc€XòN©îf…¯ÄW_cÔ¯¼vÀ¹ (*H>iÈÆCžÙÍhn›»,Iâ/³¥ÍõÙ’{…ýôl1‘“<¢¿tŸ”p;zòs¡uawqcæEi iDŽÂA#Ÿ—;Ź˜1èVîy/îd’þõÚôÝy׌î'˜Ìd™ÂãbŽvä.l(«:þ­?Š%µ] ,‚ä;ÜÜÊì«ìŒ½8ÜBŒâ³5 zÚÛJ‹û2î5BVx­Ëç¬A[-'ǵ»»€ÏXåMÜÕ¾¨òÿ~.¸ÏLð$vWC_Ô™v_¨ŽV"ÆIÔ’"BŒDÆ9,øÏö¥ñ?Šÿi?Žw:^¶ž&»ð¥­Ý­¬v±;Ïc5»¼÷sÚ©Ù«•Žó>hÈ,dŒý7ñŸSÖÚ»q-´Xaº&åX¤r7Ãîôbê3Åx·Á_ƒšƒßxƒÃ~$Õ¼Wq3Ú9žøHZ$¡ä˜[Ä੸`ŒÒªïÆÞ7f½\PN}O7MÊIt64O Xü3ø°þ ðmìþYíí®¡¸¼†î4½¼qåÉ,îà ¢79;ðªN9¸ßŠ_¶·Šôý^Oƒ—ºMýôæ+x$`a_2F1«³eJ»<Œì­µ`µSÅŸ í¼7¯ê>ÕSEñ=¤5ëëŸ([Ü›i"Fž/!i%ˆy8 3Œ­r^9ý™5ï…î-Hœí¯Šu[Ïü0×|7 º¿Œç·¹ñd—wÇÍŠ;{™fKHÎ!Œ$/!fÛ– Î0+Å Žþ*éÖɨéú—ˆ£mNæúöåbŠÞ"á$–aŸ•‰ÝµÉÀõ®ƒâ׆üO£øÃÅáÎâ]*ÃZ³µÑlSR‰£¹“O°EòÊ9Ú¯ÊK 2ÛOZ_f/ˆ¿çø‘á[4:iK‹heŠHÄ÷lÈÞcF$R¤.[¯<œc®ˆÂ *¥íê9ÉÆ\¼»e×Ãßxãçü%û;Ïgªê2\F×:œòÉ}-Ü‘£L®øÇ˜ˆâVnÇãÔ¿j‡Ÿ$ñ•²>“<2xšÒ ™5òè-lîHgºIƒ·—D6áÝ7²X—~ø/Äÿ ¿i K«èÉ«é·1]*è˜%¾£G±å‘XÈw\)É“_¢´»®7Âh¼-qqá7Ôü\‚Y-<ùJ²¸T;· ø„|9a¥Ís}©4’\ßjÞTïpcF. 6ˆƒ¸(XîÆ Á\×á‡wÞ1½Ð£ÓìuKÈ!iŬÓm¶!wÜ0áƒg$ë]T ¹Z¾›œÕd¥$Ú=ŸÀÿ¼9ðÛÃvZ¾­ÙÝêÞ*’bÒ¬¥¸itd]Ñm8´p¼ŠûÓ†z°äW«~Ð>Ô¼!á'Š5mWF´ñ: §mY¼»½Q‹…bë Œm,ÝGZñ³Vµá½&ËÅz}–â}oF‚á"Ðnåâ“$iipUJü«‰pKºd;@­vÃâd4Eñ>´¢öÛQf–ÚÖhnÊe›Ì˜p±º|£åø9¬%çu$tEéªñá¶—áŸØYøßY»‚Î9óEm/¨Ü?˜­2)Gq<…ÃÉ;‡5êŠüðöÊßQñÝ]_xŠÓûKMÓ-Ñ.šg„ÜÝ´@`±GT TmÉ8®{þ? ø—ÅLº>‰ucâËûëŸ6h-¼ÅŽ#–WVʇÜq…#¬×ÿ üM© NÓSÕ,¯|+{=;O†êö[¸â´–x!– d\´à£©%¥Þ=†ÓU…¦£yÇV̱çvz_ þkŸïôO xcI³kõ¹s,¢÷.»žE —Ž%;Èã€rØä}iû^hš®‹áß Áð nô/èÑ\ùqé7åÄ—¬ì"–xU‚È«ÉÝ÷A#pÌþÌ:Ň„ü‰¼1áëM"÷Ä×Q‹›0°Io« ¶Ë{)T“Ì$¼ˆ .ÓåcœÔ_þ1ê6ÃH±ñ “UñV¡xó[Yi·Ã”ŠRòÉã ü»@@FÞ:Ôr«%¶0iµ{žeð]Ôu®u/iSǦYÆ’jš’GäËmn³!vù€ ·#, Ñéÿ|=eàýgûCªÞjÓÍ©ùV®žgT ;¥[ ÌWûÃîšï¾(ɪÓK×u'H×l­E¥ÐŠÜKÙàd\ˆ  ¨‡%ÈbÄ‘_9i‘}‘5íB[¢¿žØNÊK{wt$F ‚>b8ŸZ¸ÚwV¾†ï‹<¥j°É¦MCg¹XH_ÝòÃηº†ç»ùkÂßîoþÅaKo§]B%‹Ph‹[20b‡wË´6q×é]GŠÝáíGÁ^-»†ÖuUšW.ž^0¡Ÿ˜„êIíÒª3”±-'-QÊ[øVoê6š…Èhû<Ë 0Üm 6¡jú áÇöaÔ¤· ­åü7Q\Ë4‘›y™XÛc\±uÝ÷ŽÖRGáúåî©öY$ñn‘ ‰,£"("H×krÌ[±œ€Iëè{Ow:Þákû¤’ïÏ¿žÖÊg¸ÍĦÕ77šD¼¤Q»áG  •fåõ5¢“‘õÐto ê¶–z-›¾¥¦Êdp×^L%bÞlÓXàIo—å Ò¼§ãίiá_†º4ÉÍù»3Ý]=Ã3m;â ³„ʳ•ç‘\$Ÿ bµ·ŸÄ—Zψaðä·îf¹þÐKx/ÉV"7Vs̯bp+{ï´Íx—Æ>“ízR­Î‘ý™tª¶^aÛp$ Ø& ²2#rw¶ÐNó¬ÛN÷±ÙÕ–¾4þÇÚLàÑn.„P¬ŸjŠæ„g/8\•9ÎùGuá?gI~èÖ«ÞFloÄÑÇ:00þí¾÷0Ïn¨ÆAÍwß~*jRøbÃÅk·bÚŸka=¹6³ cæ2Áe?0Áçµpþ*ý¤®|]¥¢ø¶X|A¨Î’[º]£:$2ŠûаnJ„P$WeZÚêŽz²¡QÚ:2§ÀOŽº—ÂoÛêZ%ëJ¦#g:Ƥ¬±±kÿÀ•yê9ÇSŸÑØ“Æ^"øÉâ]]Ñç´Ñá|ÛÝ,ݸŠê22¯˜¥YI2Ú ³`ã¿&­¬î4ËK„ŠGXgˆ—Çf÷ã5÷_üö›‹Á?µ/üI¿Ÿû]Ñ[Ëo0bÂâ)¬ãŒ©`ûî!à\9®WF²úÂK™ (J¢•D´ê}ãñn×Áo¢Þø‡â.›>©yrÖúnŸs#ßù¨ ÜçËŠ5;~^8@ÿ;s]ÏÇMcãΤKá b›ÃrÛÿjKö—º†5Kv_ߪɒà«r¸¯'ý»õ ï|§x‹ÀÓ[Üév±M¨»O±#‹ a@—å\³ Ú<וþšgŠü{ãÍk]ð}õΉ“£ ¿²†Ië26ï³Áº>r Ë)qɯž=oh£ÙxšÊ´cx¾ÇÑQè6‘Èš›êâå7Ýêw7›/ò±!RŠGœmäç`ü+Ì5?xƒH¸×­µMNÚöKŸ*+;˜îZÞ-d9 ¥Ã¶àWs¹äg5ö™ð§Hñ÷ƒlµG‚óH×µ+hò×Tq²HªQUŠŠ‡qÈÍyw?f­VX§½€p#¶ž ­ÚàHìæMÃU#U%‰çö©Rä•ÞÇ£hÔ^gÇZì³ãü]½ñÅŸmô‹­tžÅ4ˆEÜÓHÙAnO” \f7ߌà“Ö“Ç_aøAs&´ßñ:Õµ-¨ÅjD2iùܬ%&ذÊÀ•ù†8+Ó߯w¿ ¾*Ïc¦iö°ˆ’E®UUùv’£h$ª©Ãmaêk富> ñä¾/Ô¯ô KHšñ57¿Šégh–ë|`.ÈHe‡o$.~f9 wî§WÚÊ*RIzu1”ðé¹=M¯ÙcƾoŠ-æ»y{¤xRÆ+ýg쯗u¨CºÑ"9 yÎy-Aë[¿·î…¦?Ãí&òÜ­›O¨@Ö–VpÛà ´OŒ×2`ù¯,ƒn@Ǩ¯øqàoxÿ⓬|Im=ÑF®Dˆå`%°Ê»@9ÈûÌÄõüøuâÿí_[Í¡Zi ¤[à Óe³º2›Ç™²¨ð¬e£|o`ªÅŽ2ÛzÓmü®IñæÛ\hí¬u‹Ç¸Xd#Ž-‘ó 6âw+|Äd‚G½r ç?³ìÿ¦KñNÎM'Ä×MÅÅÍ•œdˆ±û8šOà‘“fc2¹Ébã_´ßíãa¥ø‡ÀöŸ ¬–[ &K{ë‹«Ï–û]-ÉšwSû uDçCü&#‡s›5óÜ¿kìé§Ws×u?„Úå´+$ŸØúî¡¢bEµŽám„ì°y^?ž7Ø@™U8®E¶‡àV›âfÊÂÇJñ‰`04·Ó¬ª¾q`“˜ÐmÊÎÄŽXÎEq?þ<:î/kZä’jzÄúœÖm•måQ* ‘c\¶ñ ¼ƒ³ñûÅ,ñŽƒeºu„z´¿d†èÁÏ,±†39Neh¶,¨¬À)* ôëìªAû)=:œÍÆQubìÑõ7‚~#h^ø xkáWˆç¾Ö’Þq©ÍjÉsgy+mûW–a‰@y' 0òË ÍwÁ_,©¥ïò# îSoÏ;0iÏ;ÝFjo†¿¼%­\ßÅàÍ2ãE°µ“XšÆ+cúeª¹†%žVbÓÊd +Dv°|c8& Gã ñÅ„ú†´]wÆ+¿•íl¬4dˆK§Û«"²‡*+a#nó6– 3Ó–4š›v;•hÕ£sÀµÏÙóÅúÈÓ~ ü$¶Õ¼y¤ÜÆuVXçÔdi‘Â[F_€›·±#8àþÐß¾*|mñhËá-:ÃúrN¶r«i柳ÊÅ"Gn±»ÈD«–f“-óQŸhñÁMKáf¿áû½fëDð¥Æ“¤^›Xnõ‡Kt‘ÝXÝ$¸!–܆Q \ÊY~ï-´ø•à{o‰Ú•dž¼[«ø×^³ÒþÇ k}6ÌÎñÂ’ý©–8МHÌÊ»Ð.ÐÃÍÛ KM%íµ‘Ç%ÝÝ®|¿ ïôkš-ÂM=î)[“d¥ÕFp±ÆÐ{nÆ}3ÅA'Ãk‰uW€‰Å㑵n#hÎÎÇ}ß|s_s~ÆÞ)ðšxcâ>·¯Æº‡´;¨´è§Õâ2>¥;¤\Ëo´0˜uQÆíÙÎÍxŸÿn/ ZOâJ Yk[_E&š5}±F¶‘ÊÆUŸ`$~ì8ìqŒ×zÆNU9vGÔéÊ›r•£sêø'gƒµß„ÿîtÏAruµ9îl£•%¬ b ÊIå]ÑÉúàð44¯øž+Í>ï]°½²2ÿgYj-ÖÓHâæ7¬<²»T¹P¡ÉÇCT~|PÕþþÏW—ÅÛï²øÇÆ÷r˜4Eehlm瘋+r„²ta·•i†Iï뿼E¨ü;ðõ†—¬ÙYÙëQNñª[´É’̪<Çeûʼ•Á\nÛŽÿ9ˆnUe9-[> j”iáòíñØü0Ô'þÚ¸Ò-u)EýÍìÂ@¶ª±*Cl¿ep²`çåYÞaÍ|ñâ­ã}An¼p¨/¢R>U‡`71Çr@æ½KöÅø›{sãØøŠ{KǾԞð\ÚÌÞTTD˜Œ·3¥|õ®ÞÞ^DÌŒ²,êÛÛAÒ¾·+ÃòÓR{Ÿ)žâ¹j:qÛó5µ ¤pý©‘ÕÐLç<õ<ú_öqøvÉð ýKÄ£DºÖ5x…‚É'ÙŠÄ’Fߺ•™ûÌ0$Bœ ù“âGŠZâÏG¶Ò­´ö[ & in!/p˺_1³™\°¼8Ï ç?bxáDW^ðE¾ŽÖZ ¦›koªj·[Ï AÝBm`3#[®`r+«QF’Rv— ¹·ƒ†ûÜ7­:-6 Ÿ¶èÓÃ-ü3¤«k«ÀÀGæBªfVØv¯–X—(sÏbkCÅ-¤k:ÄZ?…|G§Gv?`’cÛuŽUp~R$0ÁÉçµs~1Ó.¼2ž³ðREuc¢Xµ¼³ù«$r2Ç/"“ç I €<±’N*ù®×˜¢Þ«±×ü.ýžtÿø_»ñ—Š­5]7UÓ­à6ÊDbO ;»yŽÄÉ+pAPPÄ ð‹Ÿ×ã\×:uˆû.c/ÚtÛvwš[RƛؤùlÊHÅvŸ´m¶·â­R_ ü6Ótû½>T¶’ìÛBÖfDE˜àíPãGZò{¿…w¿<{Ÿý£§Þߺ¹34ÂГ’²ƒƒ×8È®š4Ü›«)kÑñ>⤖ŸæUø1ám[Tñ…šèyŽy&b©™_mkêÛm]¯|qä]Æ4öÒƒ»Ü@^W–Ä/Ã9!9à»§ý˜> /4ÍRõïö)"Tó!·kwfUÝå¡—9]Ì2HÆk§6€i„¶²‹H®PÆóFYÓåÚ¹Éfå€j®ïYâ1J´¬ºôè{$äÑ©{¤ÚXéqN°‹† 3ö¢CÇ–ÚŠ¹ rAÙ“Ðuë[6±ÞC­µÃÛIrá®7d¾øPP°c#ïsÖªjº~“£Ã¨øƒM{o ¡3ŲéYT €`¹ §$÷Î{S<3}ˆmn¦Õ’ 6¸-ÍÐs,9åœäœaFzúñ]ï$uÂIØÙÓ¼-a©A{šEw-£=ôm;°?v18@IÀÎÜž™z¾³{§ØêRjÚ­ÔVz–™ ¸¸’”Z©VW–3Ô 0Ç÷¾•©âizW„!µ×¯`²ÒÞÝà™VDa:´!BsµŸiaÜ Zà›ÄVúîN©ˆ­´È·‹¨¼¹v©,7…|+³ »Q¸^¸È¬Ôy™Ô§È“¹¡â[J×K¼:p¸ó›6DI$Œ  ,ƒw-‘ŒžGk‘_ê~%ÕÒßZ¸“L²L3é’ÛºÝ$«’\È„£¡P7È#5êžø€úÇßÞ\j–®^eP±Z#}µÙ3I'aÛ»æ?7W?®êðŸ Ay¢MGµc]þÐÅÄqùÉÀo»¼zãš!' Y"§KÛA8žw㿆>Õ5ODñÓÚImPë0ØéW/»Ê‘0rêÊ •}Àzöâ±?b‹7ž“Ǿøõw}¨x9tTŸO´¿&(‡Ùç"|I´n-–£–à!ÇSR|NðÝž·ã3\†ÖÍ.ž_²y0]ÆgQ˜Ìè–QµÓåÎí§ÔÌø÷áä†3âoïf±±¶—N¸dw6vÍ8Ä@GŒª© –<œŠìQH(ϯàq¹8TU!Óú±Ïø[ㆱûCü]–×ÁÖö^³Ôf—ËžPRÊÈM¤íc9<œò8>§ñâ–Ÿà‰O&o=æ—£i pvzÕ„¿¼5áo…¶úŸÂí'DÒAŽæš'1ÚṲ̂Êâ%òØLnebA~¤Ž™®#Æ­ârßÂÑÿej â{ÛXô{ÙÒÛmŒ2´’´Ñ+ 'î•) ±Îi®ZŽÉh´Õþ"‹SR«'«ÖË ï‹´~µà[Ÿjmü+â/ßNáëTµ1-’*˜Ë9A„W‹b‚ ,wÅmü0Ò<#ãçµñ·Œ®,õ½D ±eµÛo}©¼Ja/!;D6ØóbÏå.A ψß´¯ŠaÖ-ÞÂÂÊÈ›k‰"q{"ûˆœ|¾i\1v$`r9ªŸ>xlxCÍñ6§=ï„lÞ{¸,mÙ¥ŒÉÃ>ظ9gù˜Œî` §í ©Ý;2œçV¤#-Wõù]ØMñ¯â>Ÿý…-å‘Ó.¾Ùu¨ù¡šY¼©ß.HV#%ÝW‚vàb·¼G¥ø4|@²ƒTÔlôÛX¥ƒM»±´Œyúª€+È‹¹²Ç%AŒV¯<3gðÛá^‰¦øgÃ’[ëZÄ—:½ìβ-ÔѵÄByc 1_$‡oºGÚ¼Âýî>øš;¯-–íFÒK˜âóÌ·7IhÜ©ÚÊW Èsé :ÊñØr^ÂWnïô0?hŸ x„é^™íÁe¼0¹ÒÄs~ënAòöü˜1ùyæ½+öUý¢í¼Iaig­jvºv»f¢âhd´+$PE´É$jyŽÁ·À³È‘¢|*ðçÅ/…Å|)áömWÄ]Ôþ!hežX  í¾IKe•Š¨ÚŠ898×û*|5Ö“ã­‡Š>#ØÜZx_Ã7{ﮤlG$b78جHØ»ySž9£öui¸½×Þsâ¡Ë(Õ§ªgÑ¿ <ÿ¿|A­xªÊòãE–X®'û|ÞÖ]­‹Xnì]Ìäç;yù¸úá‡Æ­_Qð.§}á–öÞ Û» $Ó¤óÚX®ÞW1ñòÊð Oq^ð/âÔ´Ïk~ݧYØ_µ’Ûùµm·¡ŒŽåðT±©õZôÏØÃZׄþé÷Í«Â5ýCWÖ.àº>Tª·w“I]O̪‰R8ä‚kÊÄAskå¡ï`æœy“Öûú´÷Ší¼qi5‹5»K];D]çeΟ$LTß¼±œ¡,Fï½…¯„ü7㩼­Ý6—ª_]=Ä4·aÁ•&*Ëç+¾ïœT‘†Ü¯Ñ_„ÖŸÂ~#:UÒx¶âöåLjfžXõµr¦Ò&Ž0&PcŒœŠøö²ðLJ¾þÐz—†áÔgÓµx$–î0á Y$9ŒÛ‘œÆ¸ïœã¡¯G.¨ª)R°ó**TÝEÓúþ‘ô\ßµxnëÅ~#·ðÌ~Òt»Y œÏ2Ï,òÆ"iä £Ê!™q·0$¶'Õ~6øãÃ>ðæ‹«ÊÚž©¤¢ÚÖÊ7U ¾“nÖ ‡>X%‰ Äöù?àŸ‰ãK MQ·Ó´ëxEÄ×÷²–ÝC&Éþo”QÕO+óm×}â/i>.ñsk¯ã˜§²ðÔ ¥és ŒiûŒF34Nï¹Û…XÔd“ž+š¥§y;娙ZÓéý#"ÿOÑ ›„åg{í¹Ã^„ê9Uk¾Ç›üÖ<1ðŸÂrøA.%ÕÆ¥ œ÷ z#7¥dUauËÜvà “Î+èïÊú'ˆ^ÊÊåt½{“©ÛKˆÉ(lDŠ­.X¹%ÎóÒ<óWæ¯Ç¯^øÇãÆƒ§øNålí´Hî­/®ã€«]Ïï*@ÞBȃ¡l.Fq_pü7þÀÕ>øBëá­Þ¥§ø*Ê+»á,7+"ÜÌ-Ÿ—U™bo0ä\óº»ñæ„j·¹ÁNOW?éáM0øƒÆÖ:4‘˜ôˆä’[™í—|ÎÎÛ”'ËåFâÉýâA5Ðx³TÓ4­ì>¹µ²¹ÃˆÙ›÷Vr?Ìd•È.ÃŽ8ç•¥üA†ïÂÖ–Úë—77QÄÐßÝBä^M*‹‚âR‰´d@Ú˜šÚÒ4TÔ†¢Ó[ۣ˴ÑylS;®&ßòùŽ#ÉÆ:+ŠJú¾…7¥ºUÿömõ½ÂÏas¶òB©¥ ÛÓŸ1 ç9ì Kã–žºŠ 6ïRµhL@YJñ0‰ˆ;Wcž™9Ó5Íjšòè:ŠØh)åÍ[K4 å[ÄŸ|¨Xƒ¸}Ñï\—ˆ~)EÄ+Xlt­FM@+Û›5–A°SÌÚÎÀpB’3Ë ¯S.U³zºæ¦u¤Ò®ïmme[6’ò¨û=¡ùd!÷3’›€9<äÔ:gˆ…¾…©£[\Mh¶ö{uŠKb»(ª’íò—‚ ²†?/AYÚ_ÆHüA©}ºx`–ŒJ!,£ÍØCHw-Ó zk9|A E¤kj×/-lî®– LéæÃæHÞX‚)cRØ3‚œ194äôL¨"ž‘suá0B9µ´fWŠ ××&ßý`)qfiC6Y`ôÎeu¶øKĺ}ï‹âÔ.o/ãxlÚk1æ[§34òùx‚£j†äc ž{ü#ñ.—á»Vð\CM¿.a7aãŸû:Ü!&O/pbòÝ‚6²‚IÈ>wà}gRð0“Dñ5¥ì“ê‘ÊaûõepÁÌ’*7dò¥HÝŒf´£j—]‡+tܹ{áKRñ,’jC¬M¹<¶ñˆð&ß2œ¶Ðsœ×{£é¶Z]¦¦º™Ö®-Õã{hæS'Ú‘C 2p¾[Ê6æ |ÄqÖ¨ü8a:­vòÚ[m2I„ÐÛÁåá“…x\Wµ¤V7zmΗu¢Z9…[ʼ[mŒb£Ë9ò²ªÈÆìq’sKs­­„:€Ó¡öÓ2K4ÆC嫱®ðçbÛ=9©ö®)¤µ:iÆ1õ2üG$’ÚGcyªÅqm$Jßg™„¡p²+Û±ØÛˆ8©aÉÏZÊ×¼RúSY_߯-À¾Á Îb± ¢R0dAÆ7=‡Ê÷6÷¯{ce;ÝH»Ï*£eŒ3+• AfùG8ç‘Ut[cs.n.^æÚÖƒ}°‚/´íýÚž~aÛíY%}Irl±£é‘jV·†³›hl_Â$1Û¹Ü$ùñ! †Á÷¬ËØ-KÁy'œÆÒá®·„ Îê¥ „+ ÈT .qÐŒm/ŠþѬø±aß–:NBÖÛH€¤á›åæB½ k’ý ï,âðæ¡¤êóyf[háû<*âଫµY\}À~lg“œæ®1ækRg;-"ñçˆOŽ|9 Z¤š…Â_ηldh¼è7?”¬ŠÀ´FEŠLç‘ãŽÇŸá׃$×nu3§ëëoêZ·ÃO…Þ,ño‹,/çñoŠ 2Ý£Tô˜ S,—F$¼¤"ಕŒ“Ç\ïø-üiu¬xâv§-ûØiC\Ög±½r–Ö¥¥¬ò¬eRPáY¹%CÁ<%¿º¿3¶ÕžæÀK@ð¿Æ›|j]txWT¸žÂ›¢$•åX£vóc¶;ü ì£ŒŒ2NQx[ö‰øiûE|N†ÓE—LÒ|_ êŸ=¡TN5ûC»#R™Ž0¡3òXøCI’ËUÐõQ¯iÚìÚÆºb‡F6Ø 1£ ^F2‚ ®ì€2Mv?>)_þÎú¬×wBúÆDt—zgï™­äù­¤Y“tl²È3·kb â¶/j“û!'kt>œÖ¾|"ð¥âÏèN‰ªÛ«ÿeK¨ê’H©4¸C db\…a„V;Tc5óO‡ü#oà߈þ$ðàµï<û[Všå™Y|ÞRE±q€8È5¹ãŸŒ–?|e£Ïã›_$S5ž“bl¤Žîf(7³( ¬òlÉ2îkâž¿sá/F÷séWK-­Å±°Ém ˜lavãph˜Œ6NIÕRŒáñ;ÜÆqSJÛ£ªøñgXð6»$ºn«‡®ÝÚ›Û //Åõµ«1f T‚b<¸‘U‹0æ½oUð¼Þе¹~&_è’ëvvêúÏK¶‘oä‚‹ïšRNÀD¸bã#qÏü9[KÏ^¾Ñtý.Òö{»c;„S–uIB){Ëw`3Ê>aÔcëþ1øƒ¡¶½'‹®.5fæk+s~¥ºf/”ÅÕKnÊŒàsXÔ‹›µ=¤$’÷‘ÚÉã­KPøƒsoâ²ÑXj"9à‡HÕdžX-ž2È¡—fò㤘##ŽkÜo4ïøDþÚé í4ûMmí>Ñö}núU†-Ê~rU˜ èT‘Æ €3òì½¥Þ¿ŽgµÓ¤‡H·‚}utµœß;íeSµÛ„ŒsŒŒæ¾±ñÆKÿxõ†ÚM÷‡¼'lЯö¦¥lÏwuj—e(%Ÿ“׿ÀíÍN*›…£Ðº-Ms!|pð§Žšµ±¶"6ûD&ÖVg{£VBǸäc5êþÕOŽ,á•nµ+ûˈ¥ûT–˜yd2€Šp ·?0R˧8>sáï‡þ)ý¡-n5¯Çâj¶‘ùºýÃ$r¾š±¨mà±OÝáŠòH\ c[ÞÖõ‡P}«O¸:¾‰$é·QZù+#¤› †’@ÈÚy§;IZ;¢"¥zKF{ˆPx“V,³Iq¨éÚtöj&‰%Z=¥U”«•*œì+Ã6œcx¶[ Äºð…¾…iâïjº½­’\êú|2Ow»l³\Hì¨ç“¢‚¨»‚`^Oð¿â x_â =¬3ê6öº|óYÞMoçOqpê&tv# î6“ÎÑšôï…ZÖ»ð‘°:hµ¼kã(”Or­û‹‡óvÖÀ¢°@˜Îü’Ä×èkmvûàÁ°Öu”×®žå¯–È¢º#ÏäÁ ’Aóä#ÊìTy„ö"²?m‘üco dj¿ð‰Ý +«)!if‘ͺ»Ë¢ÌDê®R%jíÚÌ Rk ²D¯£ ˜g(7cçô–]vÒÙ´ØÝn"e'>}ËïÉãÞº‡^'¿øã;Sx¼© 2‘CÆÀŒpx# µéñþÎz/Œ¾ÿÂAmâ |)â 5¦¡$ÙêF0Ÿhk‰²dF2y‚$‰>è÷gƒÄ2x¾ûì'Sl·ƒH뻄/¨ çk©¸b‡M™Í:SÃZR[ì}Ó§ë:¿ÅS¤Çw;®›ªGÄ!TÞÚmΰÁÜÆO¥bUUR28ÚBÐæ¼‡Ä¿ðV}ÚÀÓ|O¦I«éžzGuerWày` ÜñžØ‡çÍOöž3x¯Ã‘ê²ËŸ¨],léË2³cÌMí„x$Vµ·À øãÅÞ±¥hm§YE2^³êZš®'BJÈê¡É`¥”ÛU@¯?ˆUeþÒù|¶.–aSýÙr´ö>Ýñ7Á~ÒZF“©YÉ<É rÁiº<PU|áÎT1[,s_ ~Õ°·Ä†!Ó~Xß\Zêî&šXÒEÛ#çjƒ¸Ý>R3šú{àÅ·ˆ4ï ø•‘ã†Öqo2O<¶„`ã;#À1*Å›©ä ÈwŒÿgOxîâæÃÃwWvX6Ñ‹«:R÷Ê &DÜìyAŒs_¡ð]éšì–ϯxì«4êΔBb<³+Í»¨CœœŽ+!?f]?^_hºÌ^jRI5¶ßø—Ü@®›dŒ9ʸldîêIõ®•Œr|É!<$`¹Qùuðëöe¶ðoŠ'—âºkºd6$–Iq$·22eK@äå]ó–$ñÉ'ë[ÿxsâ/ÁÝÖ >Ï©xJÂ&ÒäŽç˹ÓÞ c™SLewÂ…þ9¬ÿÚÓö9ñ®…àéu{]gU–MìÐ[Æ.RÉNBùr ÑTäçœäx¯ˆ<1ñ¯Äÿ üAo‚Oh!™!™å;&«+Ž2ÎìT¸×Ç·g±ÅÕò÷xÇÜûϯ4؃MøÍðWÃø•©Im¤éÚåÞ³%Œf Ûëëɤd•ño·“a™Ê’#ÚNãÒøãö|ðOƒ<§|4´ÐnµoxmA‹Nei­–ä¸Y-qó Îä7; 9Ç\OÙçÇwZ†½oâ/Ko¦ÏaqaqwíöQ"0hî¤fÏó 'îíÚ»zWþÏŸ¯#ñŒµ——±Cª`AÍ Ó9òÑfŽà&UcTd¹ês¸å¶¶=ǧ QœÞ»'Ô½uÿ¨ð/Ž¡Ö5½Sñž‰ou-­½µ„¢ì/øüÂYÙO÷±ž@#5ÑMðãLøu þÑâñ­d«mkŸßÚh›Wj”IŽÛe˜ÌÇÅx5Â|mÿ‚˜Ýè?`‡ÀU¦Ÿ®É­M·ŸrËk`öeļËUŸËPqŒn<×ÎÇí»ãI¾Xh6³[ÚPùúœ(~ÙvÍÌÌ(,m9ÆMwÓŽ'ïî˜ýg §ïz›ûTþÚ—V6^ør×}ãMåjºO>ivðBPF76TpœdŒ×Â÷¨Z‰¯˜I±¼˜ã>PéÓò®…R5¹Ѫ ^b TP0«ÓÃ’§œäÆeY³Ê®z¡¯ ÁáãEm©àfx¹×^ï}ŽÎÃÄúÜZkÛèö3^A º¡H‰{I ¼í½ƒé^ƒðÃö{ÖƒâAô]2kè¤ñf£‘ôøß|–Öá²c Æ$ÁåŽH¯QTwRÜú<½¨Ô•9ÊöÙv<ƒöˆð—¿j-2ÇSš=3ÃZ4wrÁapóï½¼O;hÄj6¤ àd;9<¾sû;~Í>*ð_Ç]zËÆ>ÿ„—EÓlõ%´ÕDM0*+íW? ù”·7O þ8ü[ðÏÃÿÛø#ÁW—Ò>æÑ’Ù4P|Ê¢0IHÒ¯soýµ=Ô­ ³µ73yC¬¤}ÀOÍŸâÚÉ®ÊSXzOŸâg“‹Ä,MXÓŽ‹±÷‡ÂÏÙzÛÇ?´/о%»iØÒt‘ŬwŠ7ùó,‚Ù)P3ÝY_´wÄëo„>Ô®ÛW·þͺ†}J÷SµE²¹‚-Ì«irË»n3€½O<3%:–¹ÝA8.khy¿€¾_êÿnõtñ æµ&‹yoi5ì–ÒY˜]ÂÉöX£•˜‹ gû¬Ù W¼èϬkßõ«}BÍ-,)6Èàü§å=@霜è4ÝxZê&ö¥ieýÄj0w–%s— d–ÇÆðe¶£âÍÖæÊK}V]NöxãNa‘|¶lçnÔ}Ó÷€ÈȬªMÔW¶‰ìâ¤å}[8_|Õ>øvx>ÚÙÛÁ¬E‹«ñ&ÝD8É 0"@\³Üç$“\^“àWáÖ‘|º‹RöêÕšhµ+5¯2’#…Uþçœs‚{ײ|bÔt‹kÝüY£]L¿ih÷¼»"HÃÈä«öî‚2Ã<ñšò?xTßøn/xêÆÖÂþÙ5KiÖg’±üÉ$²1nSvÃhœ½jéMβûÇ({Þê0~kZ§†/|L~6G.¨I©\EqÛ9’)V3‚5Œºä×càoŠþ>$Óì¾êZž£2”¸Ó-ĬW#{K•À@ ‚ØuÍy÷‚ì×À^=’çL¾_Xøž/.k‰töžKyâÝ Ì2mÒF`+д_Ú“Á>Ôce¢XÜ\ûyHXƒ'\1 ¹Ïl”[TWèß¡œ®ù`ºñF•¢ê6Úv›ïKÌÈ2Ê `–“;™É“Üà Ô“ÄÚëÙ·ˆ„±K¬ÜLžt²ÆR:£&ÝÌÎ#Œ(¯>þY7í xÂTº²–y~Ç’–kBï'PF8/P+±ð®±¨/4mgÇ÷Zu†aÙ,ôK&óÌbM¬ÓM(–|#yaq;˜öäö.*ûR¨¤ìÞ…‰câË…²½Kù–0ís-ë Ò¡]”È wÁñÀæ¶ü©ØËñÛÛêV×`ËöLk2Ûª¢‡ù†Y·`H ãÖ¨|jñsøgÅ–W:AÒ¤_ÞN—Ã{¾;(âáoXä”ȧnÚ¬O`y=CXºøm¥YÉh­ö¿Y&Ó”y0ÄΪÙl|©# í’ô润œ¡¡Ï^>Î¥Ÿôk}F=KZÔSIK6¸³}©BÈÓŒãËÙÅ¿xeOðžEiüFÐ-ü'ámJêe{ÉgŠ2-ŒÀ\¡Ýò¦â¥rÛ¸®riz€§ƒ[Ю¯ïo¤µŽݾÌÊÌ»ÞL•(¢=ÎGg9¯Ñ4 K׺„þ!KG3YÁ¦«N ©ª‡’C9Fåã;]†Qpª¿!É5ØþÏ=Ô|=âýnoiÚ‰%½XRËG[C4Sܰ©;©Ä+µUUÝ”àòÃE«“\é»3¸ø•ðÓ@Ó<=}¯|1°³Ô Ð[\’$Ó¯w~êB®@’5\‚Yx9®oO¼Ô¼}à]ZÏÆzyµÔí'[}CI»Ûß,êAn3€À¼Üóšþinü©ÛxúãU>ÖuŸíõ;i¡0hfÚyò5Ø<‰(ª#S‡S¸0^,x·ãï…—ÃV–«4Ö¾2ŠA£8gžXedŠU¸| ÅHW$ 1eÎ E¤ôݳå¨ôïæŽgÀ^(Ò¾üBÐ|J/SKðßmVÖ]"ÉÈ“C–xÙžÖ5ÄvêÊ É“óJÁ°¯iðÜš*_Åš—Rê…]l#“OÏ…”º£n1Ÿ1‚’Àäð{WÊÚçÃË߇Äk¾¾Ôµ‹‹]F$2B]Wq·aÈÁ-ž˜Ïzú?öPñ¾™â/†1Zi—S\êºxÙ :…ŒqÁἨ±È̾o]ËïÆj10´T“9yyê~é[õ(üað_Š|DºEå¤Ú|0Xê·SßG0{cr7 '>\CoA¹·ÄñOüOÒü â;½O»ºÒtÛÙWí6ZþvÊë–Ì,~âo ³<`î<œWÛ ÓüuöK‹û™oµ+x]cšbÛ‡K2Œ#OaòçµxîµðB×õã£xÛG¹ÜÓ¼¦{÷iW?3Ž~Qì;b•jÿ þ XZx«Å:\×Zr[ݦ“h²]½™Ô4o2eIWa—8DéÚ½Wâg„døi&§©ø;GÔõýs_¾Šþá­#͈ÒgF`r±Å(„€ P2O‹ø§ÅWÆw×Zý”úV¤¬žeݬ ±²<ͳ(“cn›ägŽv©º¶µ»‘ª6OS­ÿ‚zx3S_‰>%Oˆš‹ XÉ$z}ˆŽX÷4…eg73³Ã'€Äu$èþÚ?´î·ð]#УÔ.4åºÒ}:3g I 3“1yKy‹œ+Á85…ÿêƒQÿ„g\×î®dŠ[û·¼ÛÛþúU˜}ðý3òíU mœ ׆~Ø´ß´žâKˆ®äðõ¾µ¤Ú›7 ;Hîà(GM¬«.sÔeõwS)É]/ò:p˜¨ÐÃÍ­Cô'öðˆ>þÀV/âÛtÓ5o-ΧlóGûØ…åןmç©\ŒÇ"nN>\WÁ¿´ÜZ¤5øM&˜Ë,òbÌTÀ'•`bvGò>¢‚p+õkâ¿ÆM2?j·Ž£é±{³¨´ cŽòWq¨Ú7öí_•´ö“s?ı¨øŽýµ ]j½±›"{ggxöãøIf>Ù"°ÊfêNR–—=\l-„]Ï@ð£ñ߈|'¨xæ!k¥i—pY™ÏqÔ,‚P ã(Àà“°ð5êw¾M.i©èñ-ô+4vúAò`ŽÐck…¸Äqá‹r9=kæo‚¦îúò[Çssá´Á¼+½àPöÌmaž ã85ôg€~&èòø M6í}ªKa ¢-LÓ2®1,‹‚vò0ûH<µÑŠ¥Ë%cÅÂÔv¾Ý¿áÆ©^ëž(ñt’EzÒXÞXÛÄóݾS¼ä0R€ Ë|¼óg‚ÿfO|Q†ëž2’{Ke¸û ”ú\–%®fG1Ë‚ÒÂ'MÄ‚Äðzú%ÔŽ0$Gi€  /êjDÀ™AÏ^x¨ám¬|ÆÉíÞž‡Ž8?_Jæ–úšè‡(ۜӭYƒl1.WvìòZ icn3üXíR$ÀÅó¡+“ƒž‡ëYÞÅ=UÇnbÙã1Ü>XJñQ•1Èç©íHï´ cð¬Û)&OÞ[|£å;zT¶÷Ë_¾»wwëLµAs½ÊŒäu'¥E[Œ•·6p¹Ê…)+”š: êòïSo4ž|ÌUv¹=ÎÀ8V¶£k›$‰äžX‘T‚¼7Ç ~½+›·ÖŽ‹kl*D»¤s‚ztÉà ê#Õm`Ó¢“Pº1ËžSnÊî ¼ zŒ×«EûXr¶xxÈ:uH¯ó2/ ¶µmš®Ðí¸G±OÜw5Ÿ«Ã’‘Z”,…®àzò?ƺ¯èQ%”7Vîk1LS‰ êTŽœ{ýkT´ŽÖ9£µ–ØÇ60¦<°SŽŒþU͉¡dÔŠÃb#U+7ú~ØŸ°ÂohÍâÿøMÓu½^ù”ÜX]M`ª&‘≂Î]ˆ äÉ–é\oÃ-[P×µo è~½Ûêw —ßÙF8´ûkVĤ\(Pò•’¡÷… Œ)rGÖ_·&“¢]|7²´×5¿ìÍjg¸‡b»^ݶ˜BnÎTýá·n㦾jðÿ‡ô_ÙÇÃz¥ÿŒ¼XÓÝk ‰2È–¶÷;ƒ¤VÀ…2¹}‚RŠE}Ó[àª(Ñq¨Û³ÒúýÇ.%ÊU¶èzg†f´ð‡€ßLÔ ÕŽ xdXmÙFKÆø÷UŒd î&·`ñ-ž¡ác©Ë*Èì­öxšÝàyÄd¨|9ùÇÌ£obÙ æ¼—Y‹[ñŽ-4ô¼Ót?øFaŠúêÊ„Ði®Û¤Í¾<§,ºó€I9¼ûƾ"¸±“Ã÷¾ñ­¬Ó¼z³ÞÁ±Ä@’·ÎÌ7nM«•cç*8«ö~ÒÉ3™ÕÓU©ëwßí®4mIž-BÃmšM4·6£xPfrT3ùv¡'Ey$ZÚêSçF‹M¸–bõ­F,ò (º•bÀaŽá÷¹Íh|a×tßÏΩmÂ5›*é—ÖCÎ,VA •™q¹Ü㌓^#âÙnà´º›VŽ/ªéo§¤ñÚÇ Q(›Ì„¿ÌÆTá1ˆù#¿U:W²±„§g©Þhp_iw1Â5m üz„ÑÝg[ßyûIÝ"üëûéT19ÈRF½?àîg?ˆôíJh!’]>VÕ­ÎòÑX\š4Û´˜Ë¬RCœaò<ÛÂSXMâ³á; #“\YÙEgei«Áä[]ÄЖÈ3¶9 ðÞY9ù«Öì¼T¿4½ÂãûNuvfk”óL…EK€„+p3Ù qŠuo­5{Á%Ôåi_xËEø{•ðòêãQ¿‰"+|ñî–v˜‘À.ã~åÀ0rs^ðÚÖÚk%ÕcÓWH–Öæ¼’o:áSËi  Žï• (ÈÁɯ7ÒAøÅâZkŸM–ÒùöñA(·L«½$Øy¥q/È¡‚®“žÏÅß,¼àÅ¿Ðt&×üOá8¼qÙÛE=Ö—<n;äpWr§˜Û@â¥EÆ–Ôˆ{º½Q×|Cð5¥…ö‹sá­2F÷H¶–Ò+›x™¤³ŽvUÄAN#_—s–É;G$Õi<gáß êž+ø‹ F¥oeåbÈȪˆŒÙuPw6ÈÜ’¥¹yÿhÞ/Ó/n.ïlN¯¬H¶×fËN¸´G)‘GšlFª¾RŒFªvd˜äצüKš/As¤ø/V¶·íòÝ_Úc̚ଛ¦Dcƒå` ”ãÏ)·º÷6ŒUE¡åž6×ãñÄÉÏ€.õï5 `º”0[x˜Á¬ ,e²¬Œ‰·ýhßÐ Ý𗎵ï†ÍÕ¿ƒtBÒ褓ø€êïqis0U%·«¶1¸!;yã<ã[CðŽ¡öÛyu{Û{hnc}@O,Ïl®@دÇW³ó4€c (©o´øµ-ÿˆõÅ–ªæÆÁ-D?gˆ Gº]Ù•$ÌxÆþÙ[_ëî*Õ7dÊ×züzÕ”³[ÛËlÒ—1¡•ÌE‹Éò.D_0à(ÏAY_µ²¶í© ‚ü5ÄDü€ˆvŸœ°å²]ƒŒxïKXñ_Ùµ+i®Œ(÷÷«omÈÐÍ4åmPI»VF,øã9êVñ5ôöv©=«OÅ#ÁkÐó•K*—šv$E;NÃÆÒ:}ÚN_a7£h¯¦ëÇ]¸ŽÓÂÖ·WZLKºMzÜÄË5ÖwyŸÞáœñ€Hï]:ÿöd÷VZ²l¹%´ó[ÞùYT² TÈX— ‚F,O OèOA%¦¥>¨;Ím(·Ý1,¡¥1¢‚°„‚w7Rkš”š¥ãê)~ó•e¹¶‘íþÌ¡I,«œ“…ÏOSD¤–‰¥mGjëý¡o-…ýÆ—5éùZ ÓDèá›Ì' ƒóþÿ®+ξ%Á¨¹ŠIຒþMò¦Ü<„2þó$}Ðp Ú8®ÇÆ͆{uub,ç™Q›Anm¤YZ-ÎÒù™T~PFFŒùÇÆ/\Ë=¤—p²2}˜ßÁç‚OZÖœ,“HÆu/«8Ë7[ñÜööÏa#G±±¶U âMÌ+;çå3ÀÆ95ìÞÓµ1ð;Ä6>ŸOðõÕÞ ·ók70<q0¤•|¨‹öG¼Š0GAå_ |-ÿ O‹.ïo÷y7š|r‚ш*®~Läî;Æ0üõìm5ºü½“_ðµÌz?‡O—k¡ºÑN×(Å7*È ³œo F èœ\¦RåšÐŸÅþ1²Öôæ¶´k{]*ÿÎ…?y›òÛšV‘pÃçP¹ÁÆsÅyïÅ/v¿´û#\Òïu4¸þɦ›*ÚEvÊËåÄ7º—!ädc òŠìþ&kº.¶¶2øj=BG·ÓáŽk›Ë&V.ꥒ* ÆBYŽB¨$‘Kâ_‹/~[;Á¢ËâO·Ù5Œúsb…b‘•ŒÌd –Í»!˜:’0Ø¥EÓÙjsÎÒÐüüñ·ƒ¼Mð“ân©á¯x)µ­OY?e´·ž9âVQ#ª¬o D©"J% å ‚»ïü:Òþè“ø/Tø‡s ë¬Ÿñ1ƒGŽ+ë‰îYJ%¦Ù#a%¸ÞûÈù÷€ûÕkªñ‡‡þ!é>&×¼3ûz£Ê»]Í–9lç5ôÆ…áÿÙë_Ôc[0WÖöÐ7Š-§K¶y#·†*äd´’I±R0P¥Ž ƒÀþÑ?³?‚<ñ:OÙøÒ]ïî-äÐmm¡§ˆ˜î ²ž2®ª›ö–*À6åàÛFñm4ƒmDñ[x®ŸxºOö]Íö§#ôù%"f!"B»Šœù˜ùO5óGˆ|MâkÅrêÚœšÁºXÛ2mEŒHNÙà fä s“Ò¾ÃÑtÏ |ºð—‡¯Î¥yy­ÎÓj0³Ü,ßgK8È$'޼Ϥ”e©yYÚKCÑ¿g_ x mN[Kij¶û}ÍΧ$¶ :c0[™b"%‘ÕÇWP kͼgûküHñ&£ÄíŠCª JÞM¡`”"lRÁ2¶ã”qÚ½3âWí-¯|Cø“sáá¢kZ–•£»Éª^2ÉgÜHÞ ,¨ ±>€Wð7âMÇ{[Òþ.Øê:†•[^ÛÇ«lXíeIå`/ðm+Ï^aJmÊ¢º7¥VÏ–›±ÃÇûAø¯Æiâs¦ë®¹tÒÝ\Ý/˜.$ò”Úxl* ‹ü$eAè=÷à'…ï?eÿ‚w(ø§¤˜µmzÚK['º1Ìú]Ò£wE»,²ùÏÞéÅ'Äo‹öŸ âK ;MðΟ•púmž‘¥ªG›÷)’7e\ÁÆö îãŸ+Õü5ñÄþ2ðùµ½·´[ mD°ëºÄ"âÚf2îÌ K$_$Ÿ˜˜$‘Rµ\±VLÍÖ·»soö¹[‘àÁ} G{jž!½þß¾Ô^0¶¶-a…ÞtûÎV?)À-ŒŽŸ3ø(4Ù¾!Ùø¯ã%ô­¥hòëËV%åÖÈFÚ)õi 'Šã¿RkÞöð¬1^êë?…î5?´Í{f‚ØßÂxWŽT•‘H  c5‰ñÏövð‡‚ü'‚¾ Zk×z¶¶-®ÓQÔž+ˆ¢”I Y!>]»[j}Nk–5T³[ñڜޞ‡Ì¿ÿh¿|J»Õ[ÄSFòßêrß¼‘ò:¢¤‚ØÑSåæ9¯2ñEü×ðÄÄ™nX´ýã‘ù¥{¾¿ûøúÏ_¿:Æd±Áwö ¦7±ù’¬aÈp¹~Õ‰x>¼Wá&£©êÉ©Möxtwê –Í$€³U‰‰àŒ•à÷9êa¡g÷ª²×•naü)øqâïk÷ºœúm”: [å.nBÏper«öx±™”%úmO9§ø“ÃâÿUÓl<ÕeŒ`ärsŽÅv¾0ýœ®,¼'¥x—riš…ºÜÇ-ÄIH®8^$$0T€Aë\g„ln¬.š×UYË«YG8`x;¿OzÕNòæFjj¤Te¿SèßÙOà'Œ<1á¿ÍáyÃÕôá©êZ…ìûÀ#1­Âªä™„nUåÈÀ$ óOø’+ßK Âðl. ±%˜·y­Ë‘¼:`E&3)È'ÓKø­ñ˜xözµðö·q-Õ߉ïµµ4·¸ÍÌ!!HbIT€,öðx^À ùwPñêý½æ7+¿Ë ¡Þ¸>ÝëÏ¥ÏV¤¦ÑêU•(RŒ;¯£xn?øvñ¬®VÜZY‹K©PŒyLØ]꽎Iæ½3âÃÿøFÿd Zx+LÕž÷NÖµËíCj3¬R…?¼•…_0&'#€kÅüñ'BÓ¯ ŸV{™KæÄé$+r;Få$ûZöt×´­oῆl¼A¥Gq>¡¨4úr^:Kd!ãw›rì<²´õ)ï¶"œ¬›Ñ^ç Ч6ô×BßÃ/Àv«âlgñ5ãËn.,´_÷rYbt Ë eã;z׈xëöuñ…ÇŽµkTÓ®¥[ÛÉïÖêÚQyYåiq¼Ç`P` •õ߉µ3áþ­ye¡éGLYeŽ­¢’6ÖEÉ`˜â0¾`NHÛ\ޝxvÇQ–}*s¹Nd»Èaq,–¨ÂEÈ!(,yÎ+–5œ_µHÕÇOfž‡ð§áæ š6‘gâF f|T4°ý™WtŒåÙ.ÝA‚p"§Ð~ éºÄ«™<#àøÊÇÄÞht˱‰tÙžFß¹F]'@!ùÂõ;I\µw_|}¦˜í—/q$¸k¶ŠHbˆÊ4ÅpÛ_v2^àñÂü^ø»ã 7Nðàдõ»Óíl ÛûhVå/¸ó7‘L  ÊIç'¥J“º[üŽˆÆŠ‹{màÿX|"м?iñ;Ã^5ŽæÞå&ºñ\mnbºhX¶mÔ) Be‰ç’@Î+ê_…¿´~©ûAhSÏâ[j‘èÐ ÝZpˆÿ*Ÿ,‘’H|l }æ~ ý¢ü©ø’uÒn OelþÝ,ìÒNç*6ž†'j’<šÎøag«ø‹Ä^!OëãûB+ˆÞ}FÞ2_Æî$•àc/Ì0ÌAÂg kçFÕÌäj+w§í‰QͪŒù‹xýàÃ>3ƒŽ•ÖùúG‹4»ÛKÆŠòÅÛ]Ä’aãa‚A åOB¶kãÏØûã¯~.|<šÒÛÄž °û šîÖæéIJI™`Gš~hÁݵŽFFÐ8Í{¦›ñ¦m#Á–/®ki}-0ß^ß$hóÎy^äãœUb*{½ûªÍiF7dö>2ñŒzEê|&ñ$šÉƒQk)|‘™§K¤³BΓ+y{‰ápjß…< á/Ú;Çú®‘ûEx?Á~(ÔRÝn`¸{xÚæ6ÿ–ˆHT“n@ ‘•9SÒ²4ߊ>øá»7â ……ÍÕijHâÒ-¬ªÊÊk«s÷×½q¿õ CãG‡ÏÃ]_IÕtkè¡”¤zªÁ«Ïn yÄŒêÛÆpÛŠ2A'ŠåÃV”§O‘ë×[ 5áZΔ½QèŸü)Æ­wáí¥œž·†Ò9´Ë‹+é$©;¶É‡>æÀ\ãGC^Gñ“þ Mã[Ⱦx×FÔ¦ÜAKÅrÈY†Õs‚»Bö'kwöÆøKb¿#Õþ,ɦCáit‘ †ŒÒÜÚêác*£ºÙw©Èbû·©à døßÆ/ÚcâÄÝN+iÚ†™¦Æ–ÆõF7F$«æL.Kãóì¥Z\Û^wwv*¸ˆë‘Mô]L¯Á ¾&h×:ÍÏ„¿µcÖëÍNÛXFyz¬ra—8$çžHÉÌR³E†FÁ?0Xã]±ÅÖ‹ÓOOê•:"殚þºŸ\ÿÁ5ìu(­±uÝ~ û™ŠB—ºO’òrRùÈ8É9⦛þ ó§øn{[xÇìÚð ɤIÑ‘þ°3˜îõ÷Ýþ ƒâ?…ßïtïZ>«d&pñÝ[G8‚RA%Y€`¤îÀSÐ T´OíË'‹á»“@‚öÍœ3éj­ 7[¶×åŒlxbõ8رxÛEk¯§ù¡ä¯sÍæÿ‚Eø~Ë“j7ÿôÝBäL¡äfÚ5ã”ÜBHÆ@ëÚ»ÿÙ_ö&oÙ÷➬Íyi¨>x®4°±E;^\2¸ó%\íEˆ1‘X·%Wñ^™íàÿ‰Ñ[Òî<yw¤íÝX%ü–î~]Ø„!Û´îù·tÉ"µ>þÏ.“S{σ¿|âå¶½´=½ÓF‡<£á•þ=Zç©Ä»ÂsÐôiJ…IÆTâ›G‚~Öþñ ¾0ñ/Œu [õkÝKû;ËÔm•]ÄH’£.Ì’2¸8$Üã$VŸÁpÍûk‘üV:¤1éú›êVÖ’~úâgm¬”—ë¹Ó%‡=kêOxÄ~°º“ÅV$Ï{H#X¶¤W ½b˜ƒ´ž2F>µä×?5]nÚÊÖÇZM;YYŸaþ“ƒ—høÀl瞵ΫÆ1å·Ìí’*þßfúŸ^=ñ–¯/ÇmGÆÚ¼2(³xö[ÞÄB°'–ɸw¨=‡\WqñVÐþ'Â-iâíFöúKwME-|Ò-âIð5áKmÎF©Á<óô&½ûŸˆw×¶ž?ÔŽ—¦>ž×òYIÆRdÚ¡æ™7I$c#5fïö\±·ž]cÞšºm§—uj²)k*b‰eJ3ã÷Fˌנñô§Aïù]zuæå¢W>Rø‡ð£MÖþ0èÚäsdè2ÿjÚ 6LcXÝÖ£8\³*§Y‰Èû/ìßr|EñKáÿü"³6ÛÅwÖ2½ Ê‘#µÄ1¶ßÞF"ŽE$g<€k›ø“û*êke¥™5MZFhÞíÌ Vg)µçBpQ–‚8Í{ÏÀ(áøqñwÂ6qèö6úF“x±@Ò¾f–%…‘Œ{€$eÀÝ»å,ÄA«ÄÎ1§zï¡ÇCýªu<°µÇáÙïuë“åA;HÚz_DÑ6&Ù èv4¿+`ÃÚ¾Yý£¦µñÆ£oªé±C§ßXjÝéšuÌìÏq+&æšT—h Y@˜®8¯{ø¯sãñm}¨YÅy5’¸U\Ï…X•2±”KÛÈÆGJùâ?íIà›ø‹Åºöw­Åiâ+ß y(<•mHÛ-îYfù¾Ïå…È“œ ¹5äaâêJësô.H_§à|ñ»áuïß [»ßh~ »¿º»ÔüA¨X€JÝÍ1‘#El•Ž5f YÀŸuMº¦±0ÓdEîÞß)8çñ¯¬jߟüð›ðçI´¹Û}ªöâÖÜy×6‘¨ ¹ŽÏ“œs_7h^ÓôOØÂdû¬„Á¯PWòÆr™úr+ì²ÚÙ·-ì|>s:±®š¹Õ~Èúm—‹¾5Xh^ ŠÜÛMi=ÌÌцuŽ% pO$¯>Õôæû:j?<`uÿ5Íý”‘Í$ÓAü…D˜lŠ4Pç$‘ɯœ¿b-SâW‰µ¡ñ&¦=¤PÛºù²Gvå #2žB@Ç$Äô¯°´¿jòøFÖHáE²µ)oÖQ‰¨óbwå3¸Èxüª1²q•ã¹Éƒ‚j^§wáO‰šƒ %Ÿ†"†Ùb)Æ7Û¤¤n#æcŒ ƒÍs>9’ÏÇž3½Óu‹ëëmVyš8L3ȲZ ¾Ð~P@+» ç±è+Å>;ü_Óü[âû3ÃzÖž-Ò·& fXüÐáU—Õ¸|p@ÅdéžÕ~Æ%³ñׄä»IÑ­ä’U’grDRL”l»pÁ=rk–ýç£gDß'»YñÖ« øZÚ=@¸Žhítë«§€_Mæ,VñÒÊÛ¸$†'ûÜg¥x_Åßj~Ð,m¾AÄ32j?j‚ä2È0±4h¬@ÚÁN9ä`Õ]_\ÕüsñvÇÀž)’K¸ŠSâQk§•kXLÅW¼@,k×kçŽ*½æŸaãïZêVwzdöÊRßMÒ„-kqt…2¦VF,›6ÛÇßw®š4½ž³ÕÔÝ‘cáv¯ã_ˆ6zÒ¤´Ò4û›ß±Ü]K#H·í#L^Q;Ææ8À}«ß<5¨Câ]6ÏÂ^ ðˆ¸ðö¥g2I{uË'òÙ¶H­pNH 0@àW…øoÀ¾6ø±q©Øé2Ý[iBê8­ì ϦÚG +–7så à²nf'ny"»ï ~Ë1Ón,t?xœiz4ˆÈª]ÙþfÞB«'<çh$`w‚«(=ÚB åÍuÐÓñ§‚-­u—ðÜİxbêØAv¹ŽYF Œ¡Þ£ ‘°{ÖGÄH Ó$¸Ôü3¡>µ säºl*ÞfOʰË&$å¸ùˆÆ>Q_L|ðœ~ø¤è¾%šæùìî%ûp¾X̤¼ÅYHˆí oצ{äWÍ‘x¾ïMøâOx3[²´Ò¼¨IÁ©…‚mB%n'Œm²[¹#+÷¸¨Wö“i=ºž†' éSU%Ô©ð‡@ok׈üWc%¼z=¢®‰¦^ߢÃq&àV‰Àl Eäùˆ>9þÔðò]?ûoJZÂîs ]G1pUÎÀU7 ¼ùëRxÏÀ¶¾Õµÿ¤:¦µ­jÑ7ÚÒoH6G 7s©È'ŒWx'öbÔÿhOÚÓRðÿЇ‡¬ô»¡eqyj^îÎÍ„[Õ¤`Ï»Ï;³Û»áÉQóIèŽWÝ-^ˆí4ßxÓö´ø…ðê; íô‹ˆu[›•±À¡¾YU¤U AÚÁc$·95Ö~ÑÓØx_Æú–±ã9f¾Ã°E ‹!uò¤vn$hÀ5á0AÝóÁ¯¤|/àH>ØÚøBÏĦÖÊm2Ùc¶ß˜)Þ¬Mº±\刜dןøŸá ·½£|@†¥iW:Š}¯lšF ]ò0Á°G'ߎhâh¦¹v;%ƒ­Íï¯y¤”>2Ø[Úø:<«q¡Ïy5þˈR!ãüƒw]ß1ãÅe~;Ô¾(x›\×<Èœ´±yvâAb²"æwÝÂÆ¢6]ÙÝœ€3šú—Å™¯Ci§Á{ ¿‡P}gg o`Ñ”Æ|Єª¸Q»¾1Ôx~Óàÿ½RÓá¶—§ÏgtòM$”û[1¹¾#ò1n¶y­åŠQƒI_±Ì°rX©ÊÝÏм- ŸŽWÞ’êëÄšMͼq}ºáÛ-g„|Ï 9Ädìä¹ç&¦ø%û7ß|=ý¥ít«k— j°ÝK¨]\Ü(Rp¯»G±C³.0ÍÆà+_Á¿ uŸ„¿|AãßÍ&©i>|6Z<¾DÓEÁÜÒ¸fÜ ØÛÞ¾S×>:ëšïŽaÔ5mFK¨VE>AÿW"ŽBÁÁ\ö9«£Í^êéø›â¡J„}¤££z[Èúö‹ñ­ÿ>.Øxá……Ö¨XÜ‹‹ ;ƒqmå\Å)ßž –'$nù$ç5ÈêÚñÛVÒlü:êZÝöµ%„z}ÑŠØÜœ,ŠÞfìF_,„}ÍËòœñT>+üDðv»à3ðë[Ö-þ!\G²Iµ¢Y–+åA&âÑì0P “ò‚¼ã“o‚þ:øs§Øø‡MÓïRÄö÷¶Ð;º2T•@Y8 °¾kJ4œRkGçÜšõc]Þ ÷];é§|*Ó´‡¯¦xÞý<=ª_I?Ùc{éËb:a.7bÃ6Á!ù†ÓœŠ­ãŠ×÷Ÿ ð·Â)ì<ë™æ]R/³q4†“ˆåf1ËJœ‚ °8È|ý¬/48u];Æ–‡Å‹­FϽÆÛ„–ü) ç ŒÌwwÏc]OÀ?è ñïDÔô˜Qµ­Fì–îÕ­¢´¸J¿æPYʡૃȬ§Jvnjö×ÈÉTŒ"¹:?Àõÿ´©â¯[išç‡­ÿ ßÊðWÄYO„ü=e$zwˆíô›ÍÔ#Q‰ßzЄeßpùä1\c5åßðRMÒóÆú¯àxh`M>Æ8“çHáû€+1Çkê|£üX»Ôgð|=ìF†ÔH$—så]äË~ ÌJNA<äšÅø½ðþÇFÖtË­_ZMRæßRK¸!³B#¸‘P¤hÈëóI;FvžHTë„¢ãÓ¡ìFnP©¿vÖG„~ÉžÕþ| ñmö¹ékª<&-9´ö¹m\,oò¢)%J±ÇÌ6’ß7W­xcà)øàôñg…¢‹X¸ñõŒðÚÌÖ³Ïn Çœ¿» $d´9«_³þ§¥][Ëã›{Ëm\Õå²±´ŠÌ9û:’Q©P1f8<çšô¿è¾Æ7ÏŽî ×t˜¼›Y­„rLúS€ì ˆ»7–`Ø1$€k õܪ;­ÏB„eK’JöüÏ=ñ½ª½î—>áøõ8Í­ô:œ‘¼íµÈ+°ØŽ3ˆŸáÈÁþÑR]hº°Ðæ6º-þãukiÃÜJ»Lˆ³Œ0 Ÿ/H=+Ÿý²|fß>(iéA®4ißÚVWK8ŒBð°þd0å–³¼ñÇ—oâ8ÞªB-ÝÕÈŽØÈ˱ʣ£¨ ¼hÍ(ÔŽÌÃVTj{'³[þ§ìšH0‹÷O_z±…`Ÿ^æ³`˜1P{йdåI¯žjÎÇÜ¥bÎõ‡äC’y>§ñ«qFÊÝ8ÛŽA¬æŒ…œcÚ§¶2 Ê#Lay>æ°‘¯MÉL[HãpÎMJÇÊ7ÐÔKó®ç<2 g©ÄG•Ê]‡’ä1 óƒÞ£W,róïO#rÛA8ÇÒ˜ûL™$åyÅfí1Ä|2˜ÉùrX¢¦Ò'Ý9Ì æ|™#œwÁìj0ÝÉëÈÍ$Ab‘cÎ[9ǯÿª”^· s&iÛÞl½Œ´d¬O»æÀŽFOažõ¡¡øœ‹‰žò„—Òîrx‹×{sÈÇ\w¬ƒ(6ªcrîÍóžÔ“¼ŒQlâØÙ%q“ØœŸÈÖôêÊ $sT¡šI|ÎïLñ †¨ÖÖðœÞ^«ªC.ÁqµT`òØÉŸ¯é¶ãOÁ@\(‘.}·çÒ¹oì+ßAºs¥¾œ #3ÊUîw)sÉù·ÀÀÇ^+ ›Bò,IðôŒ)@"!Æ1÷W³Ù­z®Rœ=èž éBEË={võgÊßðVo‡ÃZý5=B8 Î¥á­RÏTÓî¢>TÚi2yNû†I]ŽÁ¶œàñÒ¿?¾|OÒ|3âïGñ~览ô)l?±&Ö.×Q´‚ê\ ®Zbáca±! ,ÜtýKý¶µ 'öPñÚx¢xôë[­}:C2 $®¤(*ÜÈûv5ø¦éÿuŸi–f÷IhÜÎÐÏl$–ö`û`ŠâRï#\nÆ‚@ªËâª*”ÙËŠ©:Uùâïu©í>4øÍ®x~Yõ™"¸ÕuhåÕ3}Ï}I´W%\´’L~y² +no”` úßâw‡<1¦èòê„W—zÖ³ Kš. b8Þ0I7¹cq¸nÜ}'~x9|Eñ›A³Ô ò!¿dÕ][d–‰o'úB³ n¢9’6¶¾÷ñÏÂï‡ß³Ï‹4hzö©.¿r¶«o£êWJÿfžày…âe Ò•-†vfË!’Mwb°ÑŒ#g¯ ÕKS^¾¬åþ2[kZ²ëö§}pϤèÍ%©µ¿A5¥Ì­ºA7!§ÃîÓ  ןüGøIÿ .‡¢ÉãSª]FÖÐÚ_ÃoiZÖ?šI®'á^Gd]¸ÆÍ£µè?4}[âÂy×E²Óì¦ÖîcŸ÷‘‹í™¹t‘>\CJnÆåažkÃ4ohRxE´xþ!x™.î®Ò9,m4‰ü‰åKƒCÍ‘y‘Ù›`Î ¦·¡Mò©vþ¼Î—3ŠÜú£önÔˆþ%jZ_ÏØ´û‹¨ÛÄz„óÇ$qClÒÕv‚Lkˆ•ö‘ó ç²¶Ö4kP»½ø_©ßùúüš´Z„Ö×7PØ Ls([Dp­ä)É2¸ÏÞ ø«xAjœ¾*¸ž1§j×,&ƒL<,¨§{Ìve†Hðr0ÕÇ~Ó<_®|+òüâIt¸õ;ë[¡¤ÀÞEÞšT.#‰ÑÞ1„Ä+g3,1“ÉVÕ*顨­®¬ö(o¼5¥ø›L¸ÐäÐmlô»!`¥¼v0Ë02Ì’YÔ–ÂÄ‘Xã?á –>&êV÷7QÃa $w“,&§"ÊI–$Rc‹ÉÇ w3€¼÷á·Ãð±õ›½GO—ÁÍ-µ¦‘66>n«ur¤˜fšx·!E‘¥a» bÛŽ=³YÓ¬53¥¿‡ôéü‹%iqgt!YÓ©rç¢üÌFqÅcQ:oMn6Ú´¢nêóØ›ÚN¨è5 xã¶û:Fó\ -"4Í Õ”ðH€{Õ߆~ƒM7¶þ·{Cu©±Ô­Ò2®’à>çy9š î1DF­ÀÎ08…ï-'ž/kך´BaHãü[å5Çš‘HA9uÆÜ¶[.`Œó°YÂVw*iKdqz'€“ÃV³Ou GR“̽X ‰£,ÇÌ~Q’8bã"¹¿Y§‹Ì:^†·5cöK››2&†£™$Ù ¹Ë0éŽ:ãT]Tñ%ö›ª^›‡\Û@`¶ ’68ËìA»ž2ª}(ðf‹¨xcÓê~iõTYŒm"ÆLh\©Eä Ć9ÆâÙlVêowÐÅ®£tYx×ÃzD:Út´ÖÒHlÖþ"—1Fw•’qä}Æ, Q’£œŠçþÕywd’¿l¹;Däí( !wg'$ Žœb®ø—ZÔ¯ìÐé²M™Æ/L 彪¶ P7p¹$aFOSÁ©tÍ MG¹ßkj’ jùä󃌟|c”—S;·¹K\ðÕÒA¨IuS¦µ(šñD…'ˆ»ƒK“ç,†0Jä(ÛÞ¼Wâ[O©,Z-寗q}%Ìp­¼nf™#brï…`XçaH$ãë¾=´ƒÆžÔ,oa6mal—V’Çú¹Ü2DP0!Ÿ,ì¹A=|&mfßYÔ´ >þÞúÓV²¼¿Ó’ÆêÙã‰m €°ºy>ô¬íÑpv™⺰ɶsU’Ž–;Ï‚þ– /XÖÃZì»o´¡ Ést‹îÒêíòáQ €Fr+Õîîá½Ò·¢õË ’(<³¹eÙµVa†aÁ²÷Åcü>ðKxsÂV2=Å•íáolì¼ÿ º#ä¨%R,Á{N|W¬^ßëf”À²G,ÖîbX¡lˆ«%fØŽç*Ê$ G.¬¹¥¨¡î¤aiúuÆ¥rºn¥q=ÍÓ;¹K™ÊlœJÃ8Y»’8ŒÖǽ[ñËí7Á÷PéñjúWÙ ½™$¹‚P¸†gUrwt „â929éZ1\Úë6Þ3ßê2XÛÛ_ÜIÀG %¼˜Kg$3¤—/ÁÍqúÿ‹gÔ#³ºÕíÆÛxZKhÄ™09äq“€îÙ*luæœÕÏ•è‡>"xçÇ~ñ…áßêú–£¢i om§èö—§ÄèŒB$¶@ë´±>k+¸ H滇׎Ÿ¡èþðXžçÁÕ¥Ô5[‚Ê·W÷í8¸DòËy‹m r ¾›Ôúg¾ Ás´ñæôO|øWá?³Øéš}Ÿ‰Ìoæý&Õ¢¿™9I™s•rüÄ‚6•àW£ ©Å&•ÈŠ²vgÖ¶GTøÇðnæŒ:.is©ÚÀ>ŦHeM9Ø%idMéqå+;,j €O¯>œ^&øËá—‚,| ü1û'KÔ®îMÇ›knYžxReݶ?–FaóÊóì?0¸ßÚçâ? ~]·†¼Uuªü@½K›,H¡'µ1,Ë}s«‡) ªÅä«p½7¯#øŸÃÿ¼w®F/æÔ›Ä;£K[QßI³2ŽV(ÄGž@$ŽÉ¯Eý4|KÍq4MCO¹X%‚Þ[ýe6¶;ÎÂJ›™(Ur~n0®yÎ\ŠOshÛÕŸˆ,uÏx’_|‡F³Ñ4ëKmEàko²\¬U‘îLŽƒï9ëYW¿üWñ»Æ¿ˆ>%YÚ^Ëö‡Óí¯ÉEh¡Œ eU%¶ò¶¯'®kºð,:_Ž|!y£| ð;¯¥`^jÚ•–¯‘¢BP»ÓRê&8À¬m+öpÔüAà¿èŸn/,d•cŠIµk÷6¶²Ió*ÅwòÕ‰¶œw5>Ñ­ô~d8&Óga¬~Ò>Ьîm>ßG%‡†Y-­þÇuq9&<ìYva¤Êí^x'â²¾þÐz|?µû_,6:kÝC݇•«j,²–hcë[Нš\D£ïrÄ×> ^é:K7†nD‡lZT¯ªÙM¦ÄóÝ·Ùžä<Œß2©Awr1ôž›û.øßá—ÀÝJðέ¥iZ†¬«ˆu=^spuÃ!Ý œ{\IöUb@RÊ 1$0Í)Æœ#v÷-6ô±Y¾5\|Vø£pö7Ðêš“jÍ䭛ȺYžhšY/î$ÂÉÈš2§0¯ý¡>5j¾<ðýÿ<t f—TÛ(²l…ó$ÁÑ-Âå m廹,l-} ~ËzZxÇG¾ˆZêWqÃs«A¢Àl-­|‚y[ËV’Bq•lƒ `~P+ŒÖ¾xoà­ö†Ú_†4Û¤IõýÙ³yY³yI™åÆöVÛ§ ÝÃR¡ìâôè)ó»]ž{ûF|@»Ò£ð¾‘áyg •Œp·>K9‘S– ‰‚’s´rkDþÌñ.¯×ÄëÛÛ[ÄÓ ¹¥D Ö`H]œaY™W ;@ÎkƒøÚ--þ)j—Ôõ=rÖ[‰P]]¬aä>a8*F çœVuίzך:«ôEµŒ¯U[* $ŒžI'šè¥ÖMtKmOZøÍð‡E×!¼ºð&®Âm/äc}z±½ÌŠÃU°ÂN§$*tç'å÷Ÿµ½Ä÷ºoŠ,žÇSÒfvº·2+Ä‹µ\¿œHÈ' zzŠõKCÕ5Ÿ [é¿&š×]žñ/-ÅäÁmî!*#T;Cy®åÀÚÝÂò:ÏŽß µ­Sâ¶ãý2;{©eDÔµO¼f—)´í– DBÄ´`çTÛ§.^cž¬]M_C€“Q… šÛVÙ¸¹ŠeÚKrÀÏsê¥z_ìÙyÅãáí è:­æ­g«µ­Ž©g¨ÉlÑÌËæD²ª‚£dm#à IŠšä¯´K kÚ|:œp–=¥Åö¡ ™6õܪ!%A%°3ÏZöoØóEо|×¾!k÷ö6ƒP¾¹‡Nûc:YÄЙ"V‘Ô3}‡¯!~cŠªõcÈíò"+ÔIž‹ñçOÕíìÓNð¦§a¢Úi—pN÷R¾&f]ÃÌŒ'–ÄHÐïç¨9)ÚöŸwà‡1ÛÙCá¹gWQo§YŦ6$sÃgylo>ƒ¥c]ÝO¥ˆ-ô]WÚÃÇ-Τ·–Ò›©Œ…YeX•‹Å¾q8`B†sç?þ1Úi¿46ŸQ’ïMþÆ›MšÓOÔçÏ•ßwïvùR†f*HWƒ¸`×›sµ§™%¡gâ׎í|wãíÓÅZOˆåÒá¶[_9ü›X/gwh£•жcLs󓃎µ­dt}ãF¼ÔSHµhÝþΗ-“É•D¥¦L‚ ã·¸Û]N/é7z½Í½µ†™",6©<³K ;ôw˜í§ü³-‚° œWoáhΛ§E®Áà CY×c´û&—öIã>KHB‹¢Ió#(_(`[nµo8¨®U¥…KYjw~/øIÿ [¼×z\Ö0Ù-•­Åå˜ZMĹˆC³ËýØÄY‰ãƒ×øá/‡¼ð¾oøNhîdµZÕ§„£$£”E‰ó6þ€uaÏ" Ôþ Zx¶ßÀÞ!Õ%Ô¼7 ‘†òïK@‹ä¡ y ¡Þ ®æ_•@byÅyÇ?všgŽwf¥¨ÿÂ;~<Û«¸-¤UóQHU8;Šƒ¸6HCÜ óc ×~Í3¾¤¡†\Ò[?ÄÛÁi¬Zø}rx',ØÞµòÏí&§§xƒ]Ô>ܱ·¾…îVÌ!Ń I9ÎTe²O$ú ñ«Ô–*qUR^¿™ææ´á .]<Ž—à>­µ{¯jž9²Õ­ŒºsXÇ!žóÊEf–Cí6Ñçi :€Ò ~Íðƒáއâ†úîmi¢Íoªë÷º„²Ïks§ìy·š7@à(và`Šüýý™ãñ–£ñkN“n¿c«ýšVÒu˜ƒ’Tó¶(ÎÛ”Áí_QÿÁ`?h¼û"êÿ ô‹‰íý‡Ùµ™ÀDk£&Ó4e@ ¤ÛO¸³c½Ü> ­6ӹݗ¸Ò§t½ã’ø¯û]]~ÑÑx“ÄÚî‰évþTvÍh¯iuo.âŽU\˜ßk ó‚ÜñOøYá ÁÚåå¯Ä++=*öÍ ûm²jM³Q“xÇ•&ÖÈÁÛyàø÷ö=ñÅõÖ¥jÿ¼7ˆ<6+{õƒdwg€eLÝ0XAU+‚HǪøïöÜ{ -R8ì§µ:ˆVȹÚNwþ¯«ñÜõÅsÖÂJ…w z»÷ج¥ûÚ‘zŸ¢— ~üIðññ$³êv©gd‘\i³]G$²ªá#¸#sfymÇ=1MÖ¾é i£è>’;½&+fŠmKÕ7âàpé6ãóƒŒGÊç‚WÄ_ ¾3Ããß ié|š~›«Úéæþ kYVÔˆ)çÔŒ0 Ûz×Y©þк¥ëÙ›/ nóçÅ:Üý‘BóÈTa@Î2zœõ¬åY©r3£ûNš·*WgiãOÙ¶çÄz¹ÿ„sÃw¤‹‰ëUšÒ?p,ò»’_q°#mU×á/„þ#øV¼Ôm.5MRÂD·¹‚ØyRZ‘¸î¸Y29Bù{džÃ¡øEûi·‡t‹m2þI¼Ui,âY×Q…\ äG&sÏ$7=kªÖ?n kÑ[ßëºv™u ðy3,ÐG;Àù$áÆ <åÁÆ*êâT}ÈÉÜpÆaàß4¬û|d×´ËëH´M3Y_ëZPÈ’HŠ ñ“ `ý+×>A¬xRãOÕ|YâŸjvfß˳‚ÝK»%<³;Tý×Íz‚¼-ðËÆžñ7‹|I¢ØêèÁoìcÅÕ¤¸sRŒ‚§;‰8?>Û·‹~ê·fŸâ8Ùô/¶é0P…•SjÆ.Ä0ápœÖ’¯ ÒI?VɧhEÔ§$ûÄÚjëáOÁ¢¾ ñ˜5 žÂE•e7€O¶D•JíÚ$ †àb¼³àüÂZ¤°Z|pðõ†© Q†·k[&7±…ª© •Ï8$€1·šÖøEðêöËÃZW†¼qq¡ø»@…¿~×s-ãÙHï–+Ÿ>ÝÌs‚¹ ñÇüOðJÎÂÒðø+Á°Ãu¡!µ·¶E†WŠ9 ,±Ú­ÊKŽ#¥gR‹|î÷ÚÆþÞSJ¢•­ÑŸIh·ß ?i=%°'‚Êò,,6Ú¿‘,aJ:·–Øu<ד|SýŸ5ßÙëÅg\øh/âÓïæ °Y4—1Ê0É~ñpí¹ÎÌp00kç=kÄž+ð°aK×-¤sºÞÝ`MÏýå!\ªÇÔú“Àÿµ¦©á_‚6Wz"^Ü^@VÉ´y-buW1™2B çiÞ9¬êÑ•5Í+v¹ÓC Kq«£]QÅxDÍ®Û\M¬·™m«äþï÷„dæMç–êyêîj‹E-§4Ét;å³n!ž 5-u, È_pÚ¡ƒ”ð§æëÅ/Ä-5;{§´Ùi-”• ìrBã ““éøWŸxÃÅzø›Âºf¢t=ݨA!WmèFì´g#Å|¥:ØÙâ&àôü˜†+õ™*-Ë_ëC髟Ý^øšúöÞÒïUžXÞ;m*ÉÖ1NÒ\…fÀ9f88Çóí—ðKOø³á„½ Ò¼7 k <–óÚ4Aå™H‹mšV#æ˜áŽ;(Åuø¯&¥â ]k-äån§‘îKya*‘€6¨Î?‡ß“\×Çv_:¥¯Ãß ÝA%æ¸ïvuºxçÑ!X¤ónFwHo/Éãvþ¼WN]™×ÃVýòmwÓúûÏgÄUm*x•tÏÑþ èß ¾0íÖ¾)hPé¿4 ÍNöhÄ·3$†9mÞÆÞÝ~drncO,  kç/ˆ~!Oxƒ]ÔŒ6=ëÇ,il…b†4‰SbsÂá@ÇrµíÞ=øWmðûV»×ňáÝònÀm¤·“šð¿ˆºáñÏŒ.ç“ì–ñ:¬*–vâJ À`£¡#>µú^[]bš©MÝ>ºXƾa©Â1²õìzÿüçá£Ïi©ø’âD‰|ï³ÁâöÆÅÝWHà <ni>0|l_ üA½¹Y^ïPh5dao@ó÷#Ú¥Éå†6ƒÀÒ|×mþ|3Ó|,ÐÅiªêVRëK5Ä0eBÑD7mÆz’F&—Eý•<â­3JÖu¿êÚ”ú„ûå±7#MûZhÔàcøQƒ>nµÕ:‹Ú>}ºA5KMÏ•5-jæþñï啌¤´’w·<×sñSÃz_{âN¾¹µáÕ.ob°’;[gb¯·ÍaµŠ3‚zòkéù?aχ:”/t‚ûEŠ"¤$z‰›Íõ8pv»Ía|cý™ÄðÅcà«Íb"Ö).ži5iصd†OÝížc³×¥_Ö©¶”zwhTm¹5fy‡Álo5/ˆ¾4ø¡â*_"=;Kh¢’c|Ϲ®UŠš5gQ#q$œ…®£öz±Ó4/ K©èVúq×.V2·3æé’‚¹Ú*cŽàs“\‡Å}çáwÀÏè5çö‡ü$º“Þ·uò5Ee’hÌg†p»@ù¾îÎÒrŸ³§ý«ñÓKñ\Žlï›z,7Ü ºüÉó1 p¹œæš^ÑJIèL¥ì¹c%«ÔûïÃvï>ž.Zk»‹»XYÖWqÑ"ÝÀ$z`ŸZì~é*ºÃ½ÝÝÔ›”Lë+Yö$‘ÏlŸjóö‰Ðu ÚÞÞÚ>ÒG[d‰@mç§ÊP:g½zÇÀÿx_Åþ%ŽÒëW´CnâXö†õ‰ ±ÉúW‹ˆæåvG¡B)É#_ᡈ¼Y{ö}6ãÃIa$-|otܽÉ[†%" ß1' ’¤üç¥z?Ç'Z¿¶ñ¬^U“0Ô,àÒ²ëDÅ®—|¾Z®ë]žƒáØ5'K{I4Ô¹‚î_´Ü‹&t»µÜLHŸ•ö…ÜÝ ÈÅx?üóU}Wá$êZö»£êv׌ºcZ]µšÊÑ2rPüÈÅ€'·uãÎ¥'*‘Húšx_mJÕ5GÎ×mf¾:ø'Zºñw$7: æ)Õôßøf±_~âÓ\`ÑER´n+…UÝ2Çiä|VÔïŒ^#Ö’ÓO·šQ$·‘>h¢U»"«\ W•ŽÄN¤¹¡µÅ—a%ŵ¿àŽVïöU‹kžðç‡U ²Xé1ÏåIÃd^*>`2Ýx¯3Ó¿fôñ'Åo ê¿´5ıèze³ÚÞê–öÒ!¹˜HòGºLmXЀrç Ò¾×ñGÅû?}®ÃLÕ-5VŒ2^Ê’ÈæÆHHÒ'"0›OÌrNx5à¿nKà onòFqŠç†"¼ízurê5#ÍY~‘gÆSx'ᦷb¾ñž‘­Á¨iQ_µ”.ÑKäL8•Èa‘Еa‘‘ÍZÑä´Ó<3vú™–˜à+™ ÆBüÇ9猞ùÍ~pü_Ó쎿¯øƒàÝÐkèƒÛùåd·•Ë2$Æ ¼’  ðxî~ þמ<ñv«¢xcVmkWÒ´«]‘º¡•Õ•‹Üg*8ÀzöO/’Š•9\ò«Õ¥Fî+Ý]º¿ÐûO±moOÓou[k­9XËŽÄe]~n:Œm?0ã’yÎjìš\vÓË«é–#R”Úù*VUV¸‰z`´Ž¼“Ž•ÀÉûFÅãËåÓJªë¢'Ëù€hñ–]€õ AÆ Xð‰¼Iâ=}*ãN¼µžˆî®ã/ (ì%^ ÓŠŠ|írÉ*¼dÓΛQ°Ò[D¼»Ž[}Kx ó»iîêˆq¹Z'ù˜óýºâ²tý6…óÚçèLÖš´ÂäÞÃËd²7Þ‘âê¬@ ñÖ¼ëÄÞ)ñ¿5HôûK}Výg%¼1FB)<žù#ñ×ÃãßßéÖ’xSO»Ó^ñV«Y‘âp>b\{’9ç¥.IÂÚ¬T¯iÆÅ=[á׌|u%ψnï/5)ãš5õ9‘íâ-•†”lXUJŒ¨Ï¶âkºÑ<'ôÛK’ßLßqtŠ]QóЖÁ,ÇüxÍpžøðÞñtÚ?ÄÍ&Iõ $I£¸R¨½w¨l `jêüA{¯^ëS[Çog|̱Áqm.žÑŸ*¨RvÈqÎðGQÇz*:’|²VFöåOKøYûJÚèZ޽gñ"tÔ/4x¼ÈnËóA$¨Ü˜©d“Ó½xíIã 9µ(„Ö·+jÅ.´4rZ 9¸ûˆ7`/zô= ög‡ö“‚MCÃÛYI${¥ºA"»¸9Î{r++Çÿ²½æ‡¯XÁª|@Ðd:{Æ8æ#flèJ°èzyTã R»v ˜–èµ}:‘Óø\Ñþ|6´¼ðþ¡q«ÛGŒ·ÆÍc–ËïûŽKp>läÇð'Åx‹Ãw>=¹:d×÷RJ! ‰cSò‚Ä~îG`2_nGAíÏkÚG†aðÛ[xêþêå,îâH•ŒR¥Hl¸g ô®SÆþ!ðů„ ‹Àwº’=˜pXÆRälŽ#Žy,2•еøwîrTÌ*N16¢r_µ¿‚´Oi©­¦©qo«YÂmíàŒI"íc' †Ü~R3“Å_ÿ‚yþÇڟů x‡Zñ~½¤økDŽt²ŸûNÈÝÖdYs Q¹Gò@ù²+ŠÇÞ¾_/ÄVÏv-™¤K;Y1Ž ‚9éõ¯[øañ¢M[ÃfÛÂÚb4í€ÀÒ+ưèHäö5ØëÕ¡KÙ~:Y/™ÉõǧWSõH¢ÂˆÛÙ™‰-ÀFzç54äy>ž•J2|µÀà®6ã<ýjÌ$ Æ=0?x54?X§©zƒäûÝI<Õ„—vY€þf©F¸Èïôõ©ãpÌ œíOS\ÓnÆñ]Ë09còtÏ"œCFœ1Îqž£éI+æç?Ö‡bÍ׿cŒ÷'üƒYKkîH .vŸ©'¾éøäpÉæä78 pi øRr­Ð1Y¹]ÜVV%ûYoZžÉ]§ qò‚Ny#Þ«Ç+DŽFÒêp(e ûTá˱ ÅTåFzéúƦ:nÆÛfŒj¢Q±A+È~f¤ êí£ ¼`c¨÷ëUm®B¬de™N@?–jqyåÏ‘‚\cqì`3Åk¤`ѳ½4Cqp¨‰å˜ŠF ^f1†p88^;w­Xu(M„Sxo‹™q¾çF¸9,6±p q\mÿ›2³ÎÆÁ-Î9ô§épÜi)¥¨”]órZr«€x\£žÕÛG+ÚKC‚¶2á£üý¤ÿg?þÔ? ®|!ñu/®ôk‰!¼:]Ù¶¼Œ©ã3!È• u\ŠùCÇðE_ è>#ÕÞB ÒÆÄŽ ‚7H~lœ_\^ø€é:;®‘•K¢Dë´»ãc }1RXN–ú|qjdŒ1,Lìhðã“ÃyÏ_zÕb¥ý›µÎ_¨µ}Wæ~NèÿðJþÎúŠu‰0h:¼2iàÛÿcÞ™¤³’IÄ—RN%Dܦͼ;ãÖ?įŒZß>j—ßéšZx»PÒ¯šå¬®à…S˼‡É2Æ€]gç\«Û¾ZõO„ß´f‘㟌m´W𝄼?¤1Y¬u pîÚË(Ý %Š¿ ·.A8ñêÐ~Ѷ®“=úµŒ]Ûè}ðÃàbY|=ñO~(X-uR×rA}©Éko§¤sHˆ†M¢Q*m…vÆLšô\]üC½¿Ö¡Ô¬ôM>Î{«'ºˆ¼³£Dhà1ÈD¤ÄçËWn$lõÈOŒþ]üvÓ-´o‘O«xSº[Ô´²,à‚8“Ì_´ÜÄÀÊŽ(yü_ÅZÞ >+mR/ˆÏ£èþÓšåtw‚âéìbýÓ[M/ï–$ù,‚L«&IÉä“¿¯OB•“ÛOÈ÷¯‡:d–^#ÕÅÖ¥~¶¶ñZÙ½•Ť{'¸òÃLÖŒÊíòÁ9$Üq“µàùo¼T‹eâ Û½ðõúÝÝIç0@®Z9¤ ‡{˜p`¢îàärcÔ|_g§x“VšÿDÓ5Hâ²²Ó®Äöi.Ô–6TìL‡Ë9>b!û§>ƒ7ˆôßë7Ö×ÚnžÒ"ÉpŠòÉ{<Ô 6‚UrN2àO>e[ó÷grŽÉ¦¤tû[ÆžÂêêþCf°Ç{y½|ÖÞÒä¨xp»‚ä„QÓšÇÕµ¹tÍ<Å-ÕÌÖ×S;;ÜKæ2—bq»²Œd£â-ô–þ#¸ŸR»¶D˜†T,!FÒØÏ,H\ÐgÖ¼ëâ5ïÆ/ÞCðËUµ“SÐ.|«˜"ÔüÛXåW¡h•ÁܨAL ¤úÖÔaÍ¢1”¹}Ôzl—3üwñkøû3RÒ|+-Š´’C)Ù8;†Â놆BnXðý8§ã >9ô«9¡»Ô4ƒ§L±¤ffÌHO&o3¬DŒîãw$d—xNÓ\ðf…ms«Nc’;72h‚ØFÌH(%œŒÊê£h*ÚpGJÃñö«u4w„À­s4fìO^ïTí…8Èb0H'Ógdsô³0u‹ ück$zÍÅõ–§{‹ˆî!Ct w)èŒà0+¥†ì›{ËMQ¾Ã~–)42Û)Oë~3ÖÎ…á6Òy%‹E°‚RÓ±™Ø–”:)dU ¸¤{² £þ"Ë}?…l®gC~Ú…”ÍaN~Ùu)|® P¥E˜äÌqŒtàõ¦°øw­ØiÙA¦4ºÚh†P±h²)&ta†»nB‘•ùˆ88Ó¥)BJÏA®V÷<~ÇUÒ¾xOÃ:¦©†¥ñoŠ®ôûM&m~ݵAá›.U.ïü¹X#ù :„ŒquŸ_ZkÚwÄx5-Cá忉w©CÓ[ͯ.éîR2Ênå’4V…e@eUEÀM¤^EãïÃñ­âøÕ«=üĶóÛȲª ¾hšL”c™ØÆA>}¬ÿe¯ˆ¾&²ðN…5áž8ì&Õ-¯ E¦ BÀ^YXc!÷ámãsVΚ­­µü çMY–c°ø•¦kSøÃĺ~â­Ò)µÔ?´b·„I9˜³[,‚=É‚ S\k>2–æOÏáÛÛ[È‘`ðõ¦§>Œ«Ù¥–AûÂWi.íÎPè}cö²ð×ü#wš—‡`¿ñ6‹¢Åç_G6öQÙÎ_É.&RÆœ%Ü•b`×’Ý}‹ãž½£¤ß®—íòKqši-ìà·B7É=®ï,¾<ÆÁ9^™"¶…GŽ?3’4×MO–FÑ¢ñæ’u±6•£ÿlB×ËæøYYÇp†R&À2EÇ;b½wö¨ñÍÍ—ÆYî|]%ý¦¹¯•g2y‰¤A*ù‘E`R) [>µçÞ<ðņŸâ>ÓÃú´RÁ¨^ {»¯"TŽiɺ@¢hãB•àG$öÚOálüO¡cÙAo{¦"}¶ÎØ²ÎæfXdº”Í+‘’%w5½J‹šŸ6¨ÖŒ\éJ1Z¦xÖ™ãï|XI>iº~—ÌÙÚÙA²m+;ˆ]ÌÙ$’Ǿ+è?ü7Ñ~(jÞ:Õ ñ׃¾ÍŸ•k´²ŽÞÕ°cye}ʬʼn<‚0¼‡öAðôþ?ñÅŽ¦ÄÁ  û,~eÓ3¬¡pwáw‚ dŒ×Õh¯xE‚ßÄš—„/!µÓí§Óô˜Ô‹«Ø¤”ÍË£yq…Û½UA,ɵŠã&q3ä”c ÿ: ¸Ý†ë[×ü ©Oàû øGMo&ÒÆ;vŽþÝ”ß\ D,pÀóÏá "x7Rñ ñ—Úotö…MÚ[¿Ú-¦ÜâÒØ±Pá& M¸ÀÇ$f½ËâÎ¥¬Að=¬üâ }7UÔ-Kýn t­`¸|ÄŠD݇Ž1僂Il`g5Á^ixúÎItÛ+hntÁÙÏ4Ò¸•WbÝÈ€î_™‰b•à rÓÖÅÕææNúŸ7xçâ¿iÚ*ÆïÄVÚn±«­äqYX°Ùe3†ýÚäl‹Ç <ô¯aðßʼn¿|K ü-ky¬ôÍ ín5iíV)a‚Íw4»˜H`ÀK¸±ùPßÔA!wmŒµÿ…¿­üðÊ÷ÄsèúTzçˆ'{‹ÂÓ [™^yؤ—O° ]870!Ýáδl£ÞÅÂ+™ìwºN½¡øl%ׇßÄVmn­ª0Ô- 3Ã.³œ9 †ÉÈlqšù‡öªøï¡xÄ–zu¼w“ý¸]ë†þÉöiªÇÌ+ånÈ$d$€ÀÊ;cGöÁý¡.¿áŠ?[j¿dñfëå½¼”·IåµÃ5ÄŽ`ª˜ÇA_)øŸYŠù®.®Zèß^1/'šA|ãýzgø¨£JR|Í¿wsÐ>"ø·Âþ$KAáË5ŠòÞ%t»‡œs’²#u#€¬˜ óQÛø;N¾ÐÒúÆöæÒõäD’Ùã&3È–aÂŽGÞIÅyF‹¬:òTœ+)ºçÕMuv¿õ (iRXËäǦÊ× îÝÎ:ä× ¢Òå‹1RŒ¯¡ô¾³áë(åÓ|©¤Ìúe›^j¬Wßkk3 ÎÄùüÍÛ|°[ª–ÇÏÿ¾&øŽOŠ7Z?|Eu&“y,M±ü³oy0Â*ÅÊÈÎìH7´„°9Éñƽs⎡u/ÞCaqºQgjŸg…œ€ “ˆÆyë“ë\Ž¡£Â#æ“z’É—Af²]ØQ)#ˆtÏ^NõÏ_š÷4:_‰ž'š×Ã÷>¼Ñ­l5‹MEžüZÈV$1†GÙ<Í뵜vRôÀ/Ükîš[? k66Ö?ØzUñA榃Ox³QÚ²ž°‚ ’Aùõ}NÖÎÚgQrÊ’±8Q¸ÉþèÏ'ë^éð?öŠO€ž1Öî49 Ö„ZMå“Ê3 Z‚ÇäÃt¨ã ‹™÷†ÃšºÔ¯NÑÜŒ>!Êz½ >(|G³øðþóÃÈ5¹>,jËñnµyp–eLÖP ùš2<¶óäa@'´ñ¾£â¹líïç–tµ-*£öb9`½\¿Ø£4iqqq$Î0%šVžW c.ìK3rI$÷®óáW gĤZZ½ÅÕÌ‹¼1!gžF *®9$ñÅ]*p¤¹žâ©R¥Y;-×Âþ3³N³±ø„—ÃDfšê; †âw$¤j3ÆX±ëЊ÷ïÙÂ÷߯uÿ-üŸ|?¬>ÊÌg3³þùiw)ÂyЏR[qþè&¤ø}ÿýÑ<pš÷틬é:œĺëUXeº“91Ÿ,– dÎq]ÇÆ¿ˆÞÒ>h:gÃ{½?CÒ¬Âë»4ùn,%ûK›e–¦ 4™8g-†\+ˆ„Û4Ûî¶;hR”#Ï= ÿ¾>øº…|C©­½Æ›4–6« é?g@c‘0IòÜåʰþ¸‡5æ:§Ã)¿iOi~-Òn¤Ó ñ’ZÈmã¶2‹k“”fû“–³ýУs^ñÏMÖü_¡>Ÿàë­#RÓ4»¨¾Á¥i³2Ëne ûk,3 ^IIcå]ÇoÝú“áV‘¯øwᇅ,¼¥XiòZh6é:\I"}>Œ¯Ç%pv÷$æ¼|ÊoJ2§4¤ßõ¡æfy…Ge X›Iðd>ðåÕ¿„ôÝfkÝ6o1PÈŠš›caÇÈêÀ’Ÿ”ä€+Â?jïÚßǯa¨Z[\Yx“Á’Éq,‘.å%XQ¶†$aŽƒÓ9ô~Õw«og¦YÚSwÇäZ/˜ó!È!³q׼Ŀ 4¯ßáòsáÝÓÅ£o8a(EV¸?̲6WƒÆ ö¬²œ]hÔsÅ»Ç{îpá±õ)¦¥+£êŸˆ¿²àø‹ðWH‡Æþ :ŸÅ[dŽ}j{=ŸgŠVRòÄÒ$h%Ž4Æ`–˯™¾ üHµø3ñNÒûã\Zi7O5”Ò[9/"ªènàœ1óWÓž¸°øMá+˜ô{íFô;—ûMôÁ®'mS¿ÑTm sÀéÚ¾'ý°~(ëßI¡ò—Kóy;pæn½kÑʱÇb%MFðZëþF•±‹½Åf–ýO·g¿ˆö>:Ãckâ øGõɘC$†FXXEœ˜É ÛØò3Yÿ×Âü'â+½Jå¼#wi áÔíí^â3 ¼¤[u!¾@ÆàãÒ¾øUãÛ…°¶[ûeó’`bŒ¤ªèr0G?Ê¾Ðø»àÝcÄŸ ü5½ëG¤M¡YÓÞÑäó~_RpÊ~mÜyÇj×6Áa£R2VWм#R.5UÙ鿳wÇ­áΧ¦iß ¬uûßKö«­U|AªÀlŠs ¢‚#*ü‹|ù99Í|›ñ×⮥ûCÜ?ˆþ)Mmc}²(n´ø‘¹Ž"ŽZ/CÐÆÓq¤¬‘ç¿ þ#'|8Ëá8ì5{B*²‚Uîu(ã¨ÜyÎ3í^ç|1Ðþ*ßY^ »¾eFxØp[®ÕV8ô« <àÝ[Ãpê^/ºº—QUV‚Ë`ŽÕaV>[(.ò@;Œ¥¹#hï]&¸5WLŸMÐtK½WH™7Á¬Cb­¬Øj* þ`nÞû€äôð±øzU¥ÍNMK«ØX<]h$¢ù—ggø5¯ìóáÿ ø‰u]ÛWÓu8PÁ K·tŒ«0ÀY7`©fÏJóþÌ>3´¼™ü=õËK;Fè³y8ŒÇ°#’Ç*½Ôœý½¦ü/Ðâø}wy毈Dúu¤>\qÜÄYTÊPçaÚYˆ,I#ñ¬ÈÚ6©öP{iàGû2K¥I,W‘6T°”ŠŒ¤yÏnpkŽœëá¦Ú›iwØô1T°õRœè¨«]µ¡ògƒt_[øõtÍ@ñ,7’Ûù“Èë®begi)c·£pÆr+'Àþñ·ÁâÚÿ4K˜-f¼‘ä060¨pç¦ðàü̼’5ögÃÿÚiúœ±jŸgx£Ü‘G8ó³‚K)ë“Ó¿µñk_ðÆ—¤iímk§Ùé7NÖÅîšHøÜT.K|¿‰ªYš’~â»ß}O’¨âÜœv>+øk¬|Oø¦Â@±]@ï‚æh\E©ÄêUR¿ˆ Ÿx…9äs^ëà‰~,ðÃËm ân¯6¢|>gOæËåIJ8c f,ªKm•Q€0/ÅØ&·¹§¬¢=:# IŒQµ¹Ç݈Àçupg‹à¿Õ­u1=ɆÍe;„+$¯Ÿ1\ ½A88#Óž V"½os‘F>Kõ9jÔ©m“;Ýãt¾"ðA¾Òµ)l­æ,ò1ÉgɰgÖ¼—Xý¨üká/·Úl­mA¦KT™Ã<èƒÓ®/#8ïé^kã‰7>,ñž…áE6WwW+¦ÂñîSrI¸¨EèYœŸøzß‹þhzÞ»¡øwW†m›+m@\4{ßiÞŒàaƒ¼:Zá°’ÂòʤoÑêÑ¥v»£°ðgí5a`ö>0¼ÐâÔ&·üÞmÍœÁ±û¥•n¬O#ëSÃg鿾!J.-­ïCfb»En¡FL…”’ bêï\¥û<Çn.¯­ô/\݇ŠX/í¦LAVWE îe$‚Ùp¥rZßìc2/Ú/î|B³ê3nóä‰v[D ÛI “ÎâsŽÕ¬18:•9ªI¯‘ÒXµ+=¦üeñ{Ã:§…µ An–šÌH¶ÊX²Û£g60ÊYpqŒw®÷à?ü/À?gA<k}k¬Y½ÒZZMp² …i]‘ÈÛO9àûWÆ–n| e'üU·zš[þê'F bP(ùZFÎ1Æ;æ¼í¾x‹RÐlôÍ8ì•¡–æâeŽIm%\ Ë€ØJŽ;šÓ K yòUÑù[ï:°¸ÉP›ªž¾‡ë'†?f_k¿r#ÑÅw×wÑMv«òPâV Ä‚¥Pø$,ž•ñÀë ½Câõâü!Ó%¹Öå[¡P´,1Û• HùòÒ|¤à7`s_;ê_´çÄ CÀ‘'ŒîeÔÓE¼òìo•ؼl¨beÎG: çÅv°OüßQý›¼_woâ$êZ ïšnDP*Þ,Ž»|ÈæoNëÐÿ?NY$«ÂMY«têzxš¸|Z§ +_Vì}ã¯Ø@ñ7:ÄkâV¡â+KÔç´µ´²ŠÛçtŠIùG GsÉÍ|ïà¯^ Ó|!¯C®ø3WŸMÓuo³Û›ÙÌW³©b73F* ”ùsÞªxËþ §¥èÿ†µà¿øIó$9Q=Ü‘¤c…E%YUNx$žëš7üàí ¢XÙ~ÐÖ'Ðu˜$ØgÐæ“È»V@¯æU=HäzW] >#IF÷{-,jã‚þ•­ÔÞý‘_à~½qx4É|m xÆÑ^¹òŸPYàþ¢Esò*ªà€£ŽkÐüEûi~'Ñ‚|×4Yï§håk¨ç}6êèî_5î-[÷RHÀdAdãµ`ø{Nøa„îï¿eÛ¯ìÍU F¨Jï$¬Hòerr#'î玢³>(|W“EƒÏñe¢êÖ⠇̒5p8Œà6æÀs… È95Ÿ×£)Z2¼»2£8R_~=ü[ø9ñ?öy‚x>%hþ%‚ËÆO¶Cno#’0ÌQŒ±³ìùvœ0¹Íxæ»­xÃźEÖ¢ÖádkïZY" a0Jð¤mçƒÖ¾¯ø9ÿñ¶ƒªÅeq©Ý ;P©gx‚í¾BA$>xaŠôŽ_~ÛxV+Ÿ<%©¼Vkqu-°±¹\¨?#ÂÙNÜz`×t1u!çM]ö3s§(s;Äð(ÞÛÁ4èuI­n,-4È ¸ ìîaRÜ8Ès»9ãŽ+ËþÚé¿ ¼9qãYG–ÿ]¾¬až{˜ š[x÷ 3¾p R8¯¶üyû(ü1ý¦ünÞñž§á;ÞÏQ¹ûGžòÂmiH*PîéÍy§„¿à5ýœ¼q§e¤è^1Ó¬-k ›»­¶qK»‡•ÕÜ4èÖ„\Û•›èS²Œ£ï#ËuOÙ¾ëã»k©u¯A0[7öèö n ±Ä‘6âåŽ6òL×Óþý—mÿd„ö-õeÕ–X|OkªÍ+¤÷¶Óù±¢2¥¼¥°2Üv€Shg9ùwþ Oñz)þ |>Ñu»]ó\Ô]õ[ëËhÎëUxʈ–Pv@\î`¡°§Ê…(άlz4›§ {I^ÉÛÈðÏÚ^ó¿|áÏx^Ø[xÖòé¡×cŽ`Ëuv -ÂÆª¨¹t €[’ÃuyïÁ¯ÚbÓÀWˆ4hu ý÷Ü#Y4ù ]@˃æaUq0 ë×;Å~,k« '¾bÍ36\8Á8zƸ­ÀÛ³»¿Êárf¾²%Èá-Æb4d—¼}ÛðÓS¿ñ¿Ãë‹Oè-¤Ûjî-.Ô™®UЏ‘³Ëg# èp9湈ÿ³¬1ñ¥.Ÿñ\.¤i-ǘ—[Sj$hèÂŒœ·Éæ·?`?kž4ðìªÉo6‰ç/“s4¬ò‡Qµáp2@UÃ(Èœp+Ù¼e¡½ŽµäxzhôY`½U‘™"‘®ãS¬’}å?Nýr+Å­SØUq½'*Ô¯7¡Oá׆,þêºn§ã8­âë‹}«¹1þï ±Fr± ÚsÎy=ÍEûjxæ$øj’Ëkcqw­Ã.œ–ò*‰Ú9QC'”làŽ}ñ[ßõɼ3¢[E¢ê‹§ëwyÛ­í|Ï3aÈ$b2N3éï_+ü~ø?ñoÇž6²Õ5-&;È4¸ÜY.q)¶W+#³gk‡fPIÇaé\t£íª''k|v†2)½5±äÚ'¯éºûÅ©ø{Q,mc»¹*,2†K,ƒˆÖFS´’7`ã½v¿´ŸÆGáÞ·ká+=Z_i‹ í2þð‰e…L@#qƒåî2 ŒÜ q•ö‰ñ„|?¡èÚ­­®sd°Ë!kF†ëUšØ*,ó¾OÚªŒ’6Ž˜Wãox“㦢úŸ‰‰¾þŠaÂÚ…‚Ñf—ÌhË(yñ€IÇW½O÷¶çJÈñq„#'³hûöyÔ|IñR‡JÕ.ä—CE‡ìKo Üyìåp¿ÅÉÈÈä×[ñx¯Ãך7Ã8tÑ{ L.µ}Qt%vÌV±6é\‚I$Æ@Âî­€~ø{ð´ÛÛÅptÝZ]4XÎÍw=ÖÄ%Y2Y@p HnO¼Ûöý°#ø{ñ†ãMºÓô­JÛX‚M÷šs¢\ìbc‹tê2î¡Hd|[ŽþyW–š½¾G^j• óm¿‘…¯|t¾ý”nä±}.Ã_3É4-©\YÉi´À)˜­žýñœ|ÎÄ@cÔüéûCþк§ÅËhVî×û"ÂÚyÝ,ážß!<ñÈçxâÛž4Óï<]dú®‹Ò«[i¼¹§Ž~댂û8ï_¢Ÿ> ü7ý£<7oâoƒ×¦9ô+y±»•A+®! sÏËÆA5ð~»û×›FÖ M~ÃOž HN'I^,aC·ímǹº±ØwRŸ=Y¯¸ò!:”gÍV7OsÚ#ý–õÇÖuÿÛi“,H²Á ¬û•Bçn ¢¸líç>¢´/þ(éwž!²ð|º¶¡¡j8YQÄSϰ+—m`‚@ükèY4íoÅöF [%è›Ì™ æ&+•.à ŒàN+ç†:'ÄoãéÒ~2|-¾k!tcmJîÛÉ œþõnËÈïѹî+ĦêT~òØêª£N*Tºÿ^§I¨ØÞêóÃ'…l—QX¤BñÉ"¬ŒëçkPq×­dxÇö|¿ðÅ­†«á{ÕµÔ&¹;þÝ×ÊCíldðr0+Ó¼eû16âõ×ñ펗¥ÙH.eÒí4Ö¿2¢v ¤a²1ôÅlê~øJÆÏTÐô¦Ö§ÌÕúgìîÀ–+o‘pÇ>Õn£ºwÐoTÕE¡ÀøGÁúßÄm*{<=}i>˜ hkQB¶Ó.~ø}û–ï€l×acÿw…¼‹ñÚ]'Y½uÛ.hÆâË=1ç2Àã°ükÁ>#þ×w§ˆà¹×šw²Ý¶2#ÃH™í¯AœàóW¼Sá›oˆ>3ê^!Hô{Æ.†8Dw0¿tóÈ炽µkûE{[Ìã…uY¸ÁíøÏÅÿˆ6_<"úGÁ} ´«x™ÚÖ)È–ÁÎøòvôàW|Eñûèo—ˆm¦Ñ¤X’âGÔ\FYpº‡¡/<ƒ]ÏÃï k¿ |Q§¾‹%½î“ yK$D¥ÌŒA)æãå*zlç=«ÒüYâ ½3áM¾¹¬é°húžº’$°H«sI±€àS‘‚pFOj™]»5rjaþ±TV·U±òî¿à9|s ÚKs=Ê]ZÆëö{ç!’rϸãc×54S]xRkŠÞÞáaÉ xŠ3÷wmçhÁ<×°ø_\Ò¾!j71üAÒ­EÜÉ6o£Ù¬2”@q„Ææç;¾fÀkkİè_Üëñ¶«¬Í –6’éòG„.Öó’fYMÁŽWGÊkžrŒ_,´þ¼: b¨»Ÿ,x·à%†½©My§½´wz¦ô•â‹8 â §kŽ—ðÒhô ]I¥¿šaW‘æÆåò~s^‘ñö:ø¡¨ÙC.“¦Û\(xÑÒÂQ"[œà´’>Ó´ryÛ56™ÿò¸[?ÄEΩö©cŠM&ËíÑîÚIf‘ty'œŽHêoÑisÔ¿,¶º’RGÚ?j˜¼y¥Ýj>+´²ÐôØ àÉv m¤áyÆö*Âg“ê}‡G׬üCiÖ4w6“€ÈÀ1ô<×Äß¼-k6¨¢ ûôäHaK—²CGÎc·—. ± œqž1ÏÖ|-oáOÁ†®îÞRÊó!¹<ì =±K†§E'Ôý+‰ž!\ím¢]¬Bª>æW óÓÛ­Z.²0*¥ª·Ì8Ïóü+3M»’;Œ]1Á\–ãiõu­O<\¢y¸|1ÚÄ—ß…y4ó=Ewf69¶ž…q‘Ïðÿõÿ¥+;y€«|¸Éoï qŠ|ºxx¤x°Xå69À àn?†Iý(mŒežTrNì`ƒéùvéŠä”z³DÐ(XгR£ß¿òý)sôŸ)éÅ"¦ðå;›vsÐwã§>”ðŒL’»Cçªãÿ®qõ¤ŠºB*`’O¥ p¿7cÎsɤ2–}ˆ þ÷§ãN—+ eR0»HëŸÃך‘ù²T`Ò¬¤cžøü{ÔþQvÜ;qÉ÷ÿ «‚;˜ðÙ‚çû¾ÿ¥YóL–{ XžÞ‡ü(LRVع$kqg Ÿvçe*ÀàáAÎZžhÎuÄeä•V1ÆäveË‘íÀ=j¼¥Ìh nÉŒUˆìM¿]BÒ!srU–&fådcÑa¸'õ®ˆ{Ö9j¾]ÿ‚XÏ&£ö«¨âanåÌ©ùèTú‘œVyЦñÛ\Éoo3-qŒ«×+ê9€q´Õ›Ë5¸{x´È¦’rçÊBv!r]”•ƒÏ^;ñMµÖ·¥)åŽÏj¨V%Øå_(qÇ\‘ZIE;LÉNKX-O¿ü¿]+ÅI–ÔÀ†iS³:€Ò¥¹*Få7Zùþ ƒÿ͇öÓñö‘âÏ„º®áí}­Z×SƒVŠ_²_Ìr¬±r’/+ó 2‘ýÚú¦ðŸ]¥Ý·úATh¢+çåèW ` ÏnjMBõ8CÙ´QÍ»,$ù§^¸Ï¶ gUJ.ñz¢k`ibye%ýy£ñ³ö¤ÿ‚{럳mí5‡7·–šŸ‰4ÕQx§Ã óQŠ„Ê`‚w`â¾yñ'ÿj´¦Ó<¨=„¶ÿØÆâ}=’5š7fVvÎâ§æìGýO¥Ùjk;Öʆ‰U9ã õé‘Ó¥dÛøFßD3Emmg¼¦sˆÈz¹àdžç©õ­áŸU¦ï8]úèq>ÃU•ÜÚòþ®~'~ÏÿðL/‹_t™o|e£éV.ëÍÖ«|Ön0U¿ržS»?†Â~¢½&O‚-ð[âö¼ÖöÖ^Ôm/⸸HìdŽKX¢³¢c“"RÓms*|Ž\àü¸¯ÖUÓ-Ì~Y‰`ul >R¾™ÏnÕäµß¯kÞ»Öä¶±ÄzjÇmm¨Fê³Á¿1‚Ç©DÒl<|£©—b+UJq\¯M7;+ä¸|,éhÖ÷<Eñž£ð±´Í4,2éV— £jšñ2×l“ÊbH™;³ðÐ+‚  =àχ‡ÄO Oi§YÝ ¼µ[¡=ËÃÓ[÷R^¹ÑeX•BxÅ|©ñßBñ¯ xW\¹‡H×õ›Yd»³?`rg©Xæµ™ÜDÁŸÕP|¬Xש~ÌŸµ—ÄONƒÇÒ­äÖÐZÇmctn.ïdU'|ˆ O”Rø 2H¯YÒœ©sÄñ©Õ§:’ŽçÓÆ+¯x&Æ…&)–g[}Iæ¸XΟ3æIQ̃p’ ç¼çUñ„Ú\בÙÜOÃÓÏ=äQÅKÈ @FÅÝFÐã9|1ó3Ó&·õω1øÃËáÿ²o4bÚù¬í;M9IDÌÎ>DØ2 ;£–ãÏ<{â;ýFÊþO ØiÖðÞ¯o:@|³38V2CÅËW$€§Ò¹iÛ›k—R.:¢½÷ÅËóo¡h—~¿ñ;ê—I Ñ$ŽÅ²Œe:˜Á@yÁD÷¶òÊÖð\;ù2™¼¦V*ô_˜ sè:†áöðľò1iá»EŽÂXݦ¤ò-mrÇî Vcn1]QŽ×Mîeïqoï%¼Õ$´šaUY¢µgKtÛÆ +Ÿ— t#­r^'‡PÖt²–×W0G$I,Ne'³2$”œã;¸Ó|gÉñ_ökÈŠVyªÍ2R&·•X!$€¤œ:îëŒ×Yu`Òø›}¼×Õ[ç1*Û€XÕË€±àtã·Zê|°Vê`“næw‰uK•ÓáÔµ€&Þ¼fWXbº¼…vò#V ß2ª“ÂòôÀÈI}gN?ð°ìÊáݦ°Ï!ÿIîß$Ü“Ï$(å8VŸ‰ïCK 7Po™ÄðGv™.e?/˜cW*6!ê7ƒŠ£{÷ˆtËM:;»mGXY 2ÝÌíao÷“i IáQêpNHÆj`i%ec_HÑåÑZKfTÒ…–£ÑXÏ=¼ëyŒÇFÃæÒTipÙ=ÜâSÂâÞHnì//ä¾rþb^¢ÿ¡Í3 Ž• äœ0î{ ¼3máÍ m~ÏKHõI–âq¶I`y‚ð¼{ò1Œšå¼k¥Mc¦é)§I}Œ‹s;Mq#´P$÷]ÀÉ À£Ýn÷9šqv8íwT¹´ñÚœÚ|vê,1,®á£Rb‹ËmEeØ<ùÀ­Ÿ xjÔLn^ÒËí¶ó‹ˆá•£ž[yðTË´* zÙ®\øú×Åúö«,——‰§C¬?›-½«3ܨ6Ä›Y\g~\ó`ëtèôK\†êêÑôýNo3ìñ\ˆ’îv$aPç‘\e”=)Æëšâ]Š–:κ‰ôø§µÑaÅÌ·6E–öY•¸ŠCÂ)b3èBäö¯˜á'ÿ…w¬ë~Há†BK™­í´èĨî‡Ëß#8PΣ,vîÝÇ<ûçÇOŒ÷«àÿCàk}Ný2ÜGg<–É$W2²’¥+ AÃo\ŽÍ|µ¢AsñƒO_ik=¥õ®‹u¢êzXŒ´JîÈé$mŒ†ÄHù#9ÉÈRŒ¤œº”Ôj+ìI¢ü,Ôµ¿Yx›â^¯§x6í§Q¢èú>™æßÜÈ™Ž v 8néÎF2o|Føõ­ü6Òîü!¬^&Õ[þ?m¯%²Ú¹^ÞbýåÀìi7OºTšò¯ xûRÓ‰u ãqss§i°E !Ym˜Œ £4˜çÐcžœ6¯j^ û?ˆ­.¥‚íïßæ9HR°qÌy—9Ï$ö®ÚJS~þ¨ÓS¸z'Á¯ êßo<ÚŒ>dMüÖºuÜè×ÌŽÞI[ÌŒ€®åö1rz‘¯z“â&•ãÏiº‹FÐc‚ßQ’;Á%ÝÑT-¿p¾ó–$d ñšùÁ&üB¹Ô†±o&¦Z‹\I4qˆJ´‡j»…`r§†<Ös—*ç¡¥(ªTx/íŸã 6øiÜÁý›žÊi#¶Ò¬€2?ß’Lt¦HÉá)ÿyÀˆâaòüÄìÐüJ„êÄçRî¦v.Óº0%‰'n $Ð ð®o¶WšÉ’ q×݆¦Õ4‘Š‘u<‡Á¢K*Hm¶°ˆìPzûý+FÇÃ÷L“JYÐŒÀ[…'Ö¦ÑtÏì}Rh5kâ&›´DJ§âzé4¸SI»)ÿë¡^úšëIGsŠRsv‰ë> ð=ð~‡m¨5kë¹cÕ4Ý*)Ö7 w,Ž»×ê±’£;Aå½+Äi?ŠâwÅ+Çðõ£iz\;-¢³4ŒLjÉ#2‚ÌØÜxp9Éîtï¿€¼CáÛ›Ù'bÜø¦úç±ÞßËp&iäÜ«.WæeYõ;¿¼OéYQ^ýÛÜξ±´Q‰àmâûVÓMŒrÑN“íVûÁ2sŒw'ÔÓ|aáå\“ìÖ²Y} 5Ò@Î \ŒïÎpz3^Óû-|ÒõoíM{Ä×ÿføjܽý»Hðù¾`eEg^T3w癯IÓÿg¿ |kñ|¶€·Óô{P×S\Þ*îç•‹+¿øTî犊ØÊtêr¶M:.Iwè|ßðCö|×þ)ëQMá½"óQ@À¬P#ç¡rzúÛáöµáÿÙŸÆú”˦xÃN’(¼A{uG=„r82y ê hñ+„u;sÏJÖ¼ðßÂÿ ®ƒðšKý6Ìɾ;…•'‘cfR²‰mI0§’a¾\c5óŸÅj­~/uZ÷_ñô’C;\Ü<ó´aBòHIbÊ=ø® ˜Å‰’…íþg{© IüOî=Oâ-½—Ž5ý~ßGûFŸ£jš‹‰uºiáß¼f~pH!qœWΟ´ßŠ"‡C±Ótvã[»Š+eYØÍÓ¢…È[XU›fÕ)›Ð/ÍŒs“[šoÄWßZxjÎ++›¨­mbX#Û$NÄÅxÉ-–bE¢iºF…wsá¯êÚ’ISïûK‰.. Šfƒ . œu WËæØí Ž\–¶Íoo3æ§SÚ=O èZ?Á¿˯YÀú}ÕÕ¬h°•aógK‰$íCº'ìÜv®sÆZîªh¥‡Â¯ ,²\Ý-Õïˆ ¨Ygto•^f?3` ¢g¾Ey/Ä-Uü;ãh´ÿ_ß-³\{&JHñð9#§­AâÚóÁ~ÓaðÕ±µ’IZù­WÛºUà#±ùÁÜéÅuàr¿jÔå'+­; ¾±=*ßÅí‚ZÛÆ«©G¨H»´×ÜYgbÁ6€¡Ž8Á£ã‡ÿð€Ý¥Ç‚57ƒÆ)¦[(Óíí—ÉšVVóPºò$ÎKdmQIá?ÚE5Ï„:eíÝ€±ush%6Å¢µ!ò̽Øl*ãäc­qOñ¼2ÚïíÕb’Åo~Ô|û’¬“I(à)õ¬U:¸zÒtãË­½J¹¬O\ðǃ|7à èÏâÛ{yüB-óu|$ d¦Z5àHäAž+èÿÙ‡@×?hÏÏ¡ø;Dµ¹Öô÷‡Eߨ -£{n%{ÅfÊ4b70¡Aó:°ÏÊqù±yñcSø‘e6[SáøYþÕÞQpXÌ@ÃŒŽ t丯¾?à?¼kð×öxñ¦—à½?WÕ5R!{® ²ÿbØÆ6ìHä%pÝGŽd#i={ªàk*~Ö«¼»\÷ò˜º•”¤´µ´=·ö£Õ-þêvZw„´.Ê$°zO“&åØdrÄ0Ãó»85òŸÅÿ‰·Þ7¶UÔï"šk_ô{hŒÂ7Û”&„“Œw-_Xëô oÃÞ»øÜt½%$µýåÞ£}4¬ŠRS„A!¹ívŒ ޝŸü}ÿü×>2kZ¶½ð7Åž ·Ñ"î ¹î&¸™4„´*»Äh¸-! nük†•977k}Çn;G' Q089ȯýŸàox»ÆšÇˆ5[«Í'O¾µÓô¥ŽS¶-¶ñîT*rpÀïn¯`ñv±¡jž¹Ó¼SoÚ±dR˱àLv~N{Æ´«M9r_uª<¼Ë§Rt/x§£EßéSøÓ[‚/‡zŠÞjWŒ‚8C—fÜNT¯lNyÚ&¼_ãwŒµŸ\ëZn¦¬hw²™ÊÄvp¢4׊ČƅÑN2w0ãZð~« øÃVþ+ø;|m5mÔtï=ìØ“?œ3¶<0 Ø·š¾Aø¹â GÇßu Èu› X¦³¾Šgx`Û' Ú{9æž.¶åŠÛ¿CÍ*³jæ·ÅŸÚsO¸ð5–‹¨47—Úm’ØÇ3±g±!ݳ‚ç''ù òí?â~­â6kO‡Öš…Ù¶ŒKsöv’2<àÍÎÕ ¸úñž•‘mðcVŽêI%Ó¥ž ^jÆÊ ެ7c“Áéß8¯²¿`ŸÙîÇáçÁßëzé³–ëW–åÐxvD2Ã`äŒvjöñ”°Ø n£÷¥ê*ø~f¥Ïýšÿ²ËàŸ ^ê¾ÑÚÏMÖu[ëkkë›u_¶N¿–¥~a g¾6ƒÆI®WÅž ‚ËJ½Ó<*$¸žþd’[Ël+ʱƠ±]ÜîW¯EÎkË–&8ªœÉ[D½*Ñœ%Ë%oÀôφߵýÖ¡«ê3iñÜ]Y²È„ª°çËfû¸9êkÐ<ñ“ÄzΓw'Š~ÝZ Óo·»K¥ºb£ª†Üõå^M|åà“ÀzÓì4}>+€¢òâê6ó$·•þLÎí““°p2?žëû-|N{ï xªÓDZë:ŒµÖs5®dÚ"J€YòI(_q\•²z5Üœ#ýw;°*UŸ"—Èó]ªÝÜ gÀ~(Э,ÔA<ÒiÓÍndÉo2i<½ˆ¤cåQ·ƒLðçÆ…ñuîŸo¡Þ½Ä)¸%¬02ý­ä"¨ sœc±'šö]#᾿â±üBÔï4󢲑|¡†%TÅ )&z†làž Eã«ûŸ  »ðÂØjÞD%ÇdÖWcb>0syÎEpKFšåŒ?“Óò*¾ ·ñÿø–øŠÿBñ—‡­m¼s£\éØÄÊðɲÒiK3`É&Fù†98EqƒöR±Ót“[°GÏ5Ì–Â+¸8€åUA«`ýÚõ+ _@ñ¦£2k>MÄ’¬wM5ìm¿çÈPÚÁÔ¡$† ddW¤x#Åú§Â;]:Ó]Õ!ñÝ”J¬Gs*• fWQœFä!#±«†"¦ Ê5¾ëS*qni7oÁüÏuïƒV~ƒX¸ðÎ=ü¬ˆ-Ù±j˜9vó1»qž¸¦©øö|Ó&ñÅ­u TçìÉo›vva rÞ3ŽkëêÚ…üGw¡|}};RÔ.BEýž.ZÚæØ ®6€7+%||¥HP¿{$Ë?ø'gÃx/ TÖm^M=CÜÜCÄw·{]€t*\»GO+YÓ‚”¥)ÁJþ·õ:°1[+zŸè:½õOY|<ÍÙI̱¬"9Ó9Ï’Ì.xÃ>µÎøæßGøóâ-GU´Õ®´¯1~Ë%´~N-‰PŒ‹JÀ$2ç©ï_viŸ°~›aªÅ¦ø{Qap’@dœ4z£Æ¬Œ·LÈ#v!ŽÐ ÇÀ!®âü•œk׺ré÷z^žóy‘j 6îw2Ä[ 1F;dªÖ›½¥ëÀÚy~&Œm÷õ>Ò´h¬¢Ò¥ð~—mâ{;?&Ò;«Ó„#B²NÌŸ9mË€™îô®ãöKøÛã5ê7º÷†ôØÃZÚ´‰,¬@ÿ–›¤3bpÃ9®CYøwà_XéYðôp¢Lîá´›†èÌ\âLçO#ÿIÒ5mb pÖ±»³6@y#R¦e1‘À¾=ñÇìóì}¤h-íŒ2ßiú…¦£¨k²Û¢¶£;>â¶ÈGÊŠT@=ryô(b©Ñ»qÔéź’¥î=5¹ùÙñëá^¹ð³HÒ-̵›ð÷Ã’êú<’Ì1AÁ‘ˆòÆ?6kïÛÿá¿í9ûQø_KðLz¥Ýܺ$²\iñB'–ÇkY„YÎâO6¨7…eØ?c©ì_ÆÖº«¬›ãš{xÌ× Ëó•×` â\Œöë^›ÍcN•ä½çÐùÌÂ%Xû;µerÿüwö~½á¦«}áÝU’÷\Šq>™xŸdŽ ãSå]ÇpO̦0yÛ× gûçÂØ÷Ã~ Çñaâ¿K0¹¸Ôn5$¼[Y²çzŒìQ.O W'à?ÚCƱ¤Yx Aðþ·âèl͕櫩fy©b#‰Ý¶¤A:EOñ;âÄ¿†þ ²ñU¯‹4ÛZŠA v1Å#*dÊ˹6år'#œs^ \DëTrn×;¨8BŠQÕ-_üsãgÁ©tm>êÏÖw:½¦¤QX^!H˜@,¹1º£ñ^/ñ[À<)âq¨xÁZýõ…´IM 0:±À-Œužµ¡¨xƒâ6¥ãi/~êÖ:œw Îe—X‚ d™ñ“ä¨,Y¾bTûz{—†ÿhïh±´ý¥´6óU»v‰÷Ì<ÃàV$P… ½‰Ý‘ÈÅLj8.i$þe9Ó®ß2´{øið?Ãß´wä_¾Ò M R\Jܶ8`Ù:Ålé°‡Â?­¤¾Ѽ¦I¦Ü­ü ’Þ\ÈAŒØÇÎ+KÃ6vž0†þßTðìɦ… mö}BG·ºˆ³+`º2ª€NÕ5޳àfòÅt¸õ;»›"8~ßýœòäÈ$Ž1R«=“ivÔï‹R‚Ri¯3ž3þÂÐxÐÍyð£â&ƒ£ê—7rNæ[f ¹‹mR˜(p1Æ+Ë´oø#¶‰çMw㟉Ò\ÜŸ6[Ë;%x•º±{‚¸=šûÅž(ð¯‡+ñLúÊÇÄÉ*ǘ©ƒ9ò±†m£qR3œFk»ðÅ߇^.¶ðëÛYØi+nc·ŠêÃΜ°\*Ç(,¤.ÞFOS]„>,xW^Òm4ü-,îR; ^ât“xù‚¢Uvbp0xêp+KÅÿ¼=¶ˆž±¥ä.¨dŒ´7E³˜¢pûƒ…VÏ=}ª*V¨ß¼õ#–½ÍGâGÆ/|5ÖÿÄš—Ú|9,…­,Ì€ºJB¤cý£Œw¯/ø«áŸüXŽ]ká_‹.oí.­ü‰c¼º¸€ÌàäîlÇqÍ{'µÙ<à¨,¿áÑ´ð’ȳ5Ëu.Ùmcœ`ç¯Z·«øëJµ·¹·Óåâ+k42M+œýì9Àúd㚪s²»ßð!Á?‹Kî|¥àxóá×Ä-&øRûT‚éã/y¦\C2Y1a“6OÜQ’@É=«èéõÉm5ÒjƒJv?i77le…€ÀòÔäàexëžkøoñjM ÆK¦|Dð†µª(µ–kgKèZEl¤ª ˜8Ý´ž ¨¾#þÄ1|B×YðÄ«+M>Fóîìî-˜4ŒŸ}d“?*t8=óÉsŸ<—3I~4)ò¦©-{?Í—íâ-7OŠ » RðßÜ«GÁ$‰2‚Dd ¨'žN õ¯ Òþ-ß_é-oñJÏoÚ33qæƒÃ+/,:gžÕõÃÿÙØø#Uqámcž(7–ï¶:–¸‘¤ t_,‡B1”c‘Ž z›~ΞÕô›hüM„EšâÊÚ7º1HpÌQ‚FýÇ!@è1êèÖ§ %¯™œ°ïîÝŸ–§åþ›â¿Äx´élàÖKÜCn°Î¦Ú9^i6G;à(cÀb1Ôñ_FxgÁš¯ÃrÚÇÇ7Ð<âk;=gΚ$|©E ^)áO÷7…<5àË]ûIÑ-íïLöåîâßÍ“ÉÛ‚e@íÏW…êô? |bO| Ôõ -ž¯£ÚhÖ»/‚ešB¿uIç%‡Häጃm$’üÿ¯B©åС$îûy’øgÀñib¹Ö £27™¸äžN}Mt¿ôeø»à¹´ÍVAm-¥´‰fàòƒß…?AZ³øëó2¢öݘçÉ*ˆTó•`zb´m®´™leÝgrÉ.­ºO¢¿¦hö´åi.†”¬Ý“?7µwÇ_³oŒm%¼Ñîµ8mf/¾3¶2äxnTœx5ôwÀ¿7?ŪøÂâÜG©Ì·gy šÞT\ѳó /;pI'Þ½«UÂ~#^ÇY·¶†ó «©é͇aÁPqÀäGs\ôÿ|<|E2iÆy¬_@nÑ%¹’Ðe£fB£i#ØûÒÄÊf½Í{™Ã ì¦çNV¿CGâ‰Æ©àíOL²‹SµƒHSwu}ØRäîÆÀØËl푌õ¯'ýœµÏZøÞãQð爣ԴuV‚h-ÙŒ‘“ó~óªl õ< õË¿ƒº¦³¦:ÛIum9šHÍõÂÍ#ª€w 3#ÌHVm9+Ïfý›4¨¹1[øOÙ~Öà ªpTõ`¡rXãÈèEA¥ù"«Ò”åv2õo\ø_I·Õ¦Ò'}vÊwÓ­µ k[­Qw.ùV< „œ&@\’XŒà×[á/Ûè·Óøs_Eydt´3¶ðÁ‰/#1bç ¾Iç sÇŸü8ñ‹5•×µÍCM}Ãö¥‘’;Ùf•B³ï±õcÇ\£‘ø£§èú=ØñÄ‹»{ûkxñ†–8ÊJwyÌ£æ—9ßšôjÉTœ}®«ËR%^¦–tåʺ£ïŸ‡Ÿ4ÿø"ÓQ¾-Ñç’<±´{î3´R7çŒqֻȦ qm"™ap±·ml†Ç±g¿5ùÉáßÚ'JÒl¬oìÿá$„G"\é ¦”³·a'ÊLˆÊT mPFãߟ¤?d߉^%Ó¼ü&º=…†…ûϱ­®Dß4¥‹Ê,çŒ9ϸŒ±¤çÄú<w íFjÇÑÆè²œaY¹>ÿZ‘0s·$ã­VÐïl¼Yh“xbúÞü”ó4ÊË®ä`=Æjs„SFOQÓù×…R›‹jH÷áV¸ÁXÆáÙ@l‚¼ýÜ{ÓÖá ÌŽÛY·avìÏ~i¤=óžôÕ2X:r9¬TšFž U#–=À±#zíîyÿQŸ,däç¯\gùÑ3œ¿ÍÐ{RξQQ´àð9äúš›n‚ÌæË÷2A¹ùxÿ¾±õ54d""pJè?Ï!&›÷‡§ËžÃ'?4Ñ i‰]ÃQM¾ÄÛ]‹‘;“ËE,Ìî×ùV¤wŸfÒï.¢•‹[«5šFy/Ó¯cÔûÖlO ”$g=2Oò=œ#˜÷!Ë*8<”~ãë[ÓŸ&Ç=Xs«2å…é³ÕîÚɤ–òþ¹œDJØÄo™›ŒðÇ9=SŠååšK{hÌq¸Ù#8Çœ2IÚGCøŽêúÙ}®ØK§Kiq,g˜öíM¡9çø~füýjî×ì÷AAGܳ ŠðƒÊ¯#¼ï£g-5µú¼Kgb·ò€ŽÑ8N‹3¬e]±Ž¤8ÀÎx¨4ûèîeh®áq°à°`O§¸ü©uiÞüÃåˆØ+o„);ªí }¹o—±$ж ¦yg ´ƒ%Ûî†ÆpzààW=Y7+§sª”b¢ï» »ÁÇ™§0”òÈdÚ Ž¹ÃwëëPE6ð<«B£Wî¶záyN)Z&û# 7pxqŸ×šYíÄ0ƒg»ËcósÊþUÊÜ®oEY$ZD7±‡€•“8zÛ¯jü‘ý¸ÿk›;oÛcÇË éém©xZWÓâÔmgc-ÛAl©6îžRîfBBì,9jýrŠ@.#>zÈœàäzƒ_‰ðVO„|5ý»üE§Aesdž3õí2\¯‘¨-Û¤rpʧz’JùˆH…wäð„ñK›±ãçn~Ê0OKß„>7Ø|fðw‡µÝoPµÓÿ°­¾ÁöÕÙ{M:1" ‚L3…ùC( –+Éçú¿íg∿u¾k+wáï Y¥Ö¥5Œ en<­Ê$‘›! <)çŒæ°| û$è^ø}â¿Ú†)4ý÷äEm¯Â«;ÅæyóOä±*‘ì@­Ámäpqžlk–~ø{¬øWöñÚìý›¿à§Z¶¿û@kZwÄè'»ð®£¾â-ä5ê™#D@›„né|ÒÈW;v®;×¶ËûFøG]Õ϶k;ZXîl µºÂ^Çæ…Id116Ô†)€FN+â6ø¦xád~0ñå‰üg«è_fK™ õŒ’$óßw›±w<²€¿8B5碽¾øÏ øsàÎ{,ºm¶Ÿ‚´)åôÇO;ØLŒñ|à¬g€¢©QÄMriÜ·‹•;Bjþ‡êç‚þê¾øã;û=_N–)ž )l¤E¹€«âxgs„'p¶îIl áÿuHõÝvC-ŽŽñ^}²kƒqf@±È¡~òî'8#³ƒŽ|CÃñüQøÙ‡ü+©øŠÏÃWÚ !¸D3Ä5™£b¬é¶I« Ãpfã\éþÖ¾%øgUÒ¾9è>³Ñn®$…/¤’öHQVXd¹UO,œ"ÞNÕÜH,TpT‡±mÊÇK¦ª>x?ëð(èfYõ 3]´»X..&mn¬öB²È¼ªI Î7K`æ„ÐﯚØÛbÖ kÂJÇžâ4Ü’ÊO¸¬ˆ.døÇ©hÉ£x’ÏIÓl¡Y5;袎 ™òd»IÊ€Š»,ZFùGÞ¬ýsâ&ŸâM¶wmcê3ÛÊäÏ$nbØÒ…[÷€v©ã­$œ’’1rqM\ʸÔóToøKõëHî^g¹µ´¶O=dYX¢Ìê¶ÆÅ0»ò^Fk[ŸeѼ uý¶úEí½Üínm–Ët2È©Œ®à²rÏÉ<ŒcVO‡ókÞ‚Ûáf©m©_\Ì·‘YÜ`ß¿÷Lã O¹ð•ÿЦÓ-VUqbö9öF’ï}Þdäo'…空'NQµô2…DÓ¶¬µi®Úë^[{kF ¹d±ž-'Å261(bŠcå`FÒ1V¼]g–’YèöÚv¥–’âîHÚ2û¸ðûÄeˆÝî%ð‰4ûÏëÚ™gu éÖPJí=¤ÃvŸ,f'nü‚ÝU9涯üaâMZÞM+J{›È¤ÿFºftò`î€`ä =eð=YZÍhŽ Dð¾8Ö..4-KNÒåÕ Åfùü‹”Þ UXÀiN#Þ"s· Õèãáæ—«ø"ÂöÒÂkýV‚hg{»_&MI"’EP»Øa!ÛË*¿lUè­Ú(`Ãúd&ãN¾·´¹¿½xmŠùç÷—v»ˆ-å–ŒrW%˜X:â Aì5%–ãGŠÖ6†÷C1Gª…™ÑYUÄ>j·™”ŽvFräÛÛ`V‹³fw‹o<9âF ­rö2žƒí“XÛFÑÁ…„`„+ˆâpÙ;„lvüÕÀü\Ö—Çìb¶gÒõ ˜ ¼µKäÅwm¼“É" r“¹€ï]¿Æû1dÇOÑ¡ñ5”ˆÖâÖIa2‘†‘¦*# !«ð1ÀÎQiS^Ñ®õôí:ît1Áo§Jêë)@¡J0$ÆpW—¯ZsXÎñz_S–¿žHõÓxz-;Ã)XìmµI£ºY¤ûRË›;F‰8ŽFw´eKuÇx…IÐo•›Í*ÉXüè¶øY©ü8ñŽŸ«|FÒïͬð@š[‰0—|‘·Ê£$“Ï­}™¯hbõm§Öìt‹ËXäyeÅw„`V%ˆýÞAéýîœà>3xŸOÒ<1wáÏ !«˜N¡‚òb(ìC†9WwpWå@< ×T1ÎjÒŽ»ÞÃÙ=‰ûWx3ÂqÙÍá%u»QäÝiÂtûE¤ñ¦æPf`’y.@È#¶+Î>þÓ#ãgˆ´_ëVÓë-©_>¥ªItØÆ¹1Æ€ƒö·Ê0ŒH<ƒ‘ñá…%ñ”:‹âñíÚ{­/J¶·‘¦òÌnÆ`ÊÈß!2‘ƒ´õ®«Ãæø‡ðv}gUÕîílü[qZnŸi`–‰+‘,0So9;@ÎO4rÑIÉóËR·ÅÏÚºÆóÅ+gáJ×E×ô«”믩hú±f!íÞ(Æå’ HYÓjŽ 0ûÄ€¯5Ÿx{í¦ŸÚïZº’ÞxÃHŠénÀ—`Ë"Œ>1 ä è5Ïø'óÁoo¥x)â77°´ºž½}2Ï™íÛmo D3»ò|Þ0àà;Iý„õË=^ÆãâOˆ-¼Eá› £áŠÚq|±F ¨Šo-dvUy*œž”Ô¨ÅYKó¥3€øqã븼AâH´?êÖžñ iÚViG¦4Œyšôœ³Å€X²€V8®óö¨øû¡àx|? jÒkš–™e¦´’lû,RD žhUB³;lRÛ‚ª‚9&“ö‡ø‹¯üI¾–Ãáö§†¼3lÉe=Íð7{e_=Ý®cʲ¬¤ÂHÙ»h‘Šð/ééwà=hSYÜê^n«¨ÊD÷Nn¢Š8!–$dHAÛ€äŽ)Êš­ÊËÃÔtÓ‰ÂkÚTóè÷2jS@—fè¯ÙÔ*mÆçÝЯ=Ny®’Ñ4fÔm­4mf×E³‚ÀM{©•Š wew®q’À ú15Îø,]]øÞ &Hþ×u¨\A§C‚|©g™"BOðárÇ€2M}%âûmö\ƒN¼ðý—‡5]gAñ húˆ±ti5‹’’†,<Øá]¼²¦K çžÙÔöv‹ÝìsÓ¦çïôB\~źN“ák}Kâ׊Ɯu+1{kÊÑ7G,rH#u'\5ÿ†ížI>Cq¨Ú,ˆ³$Ó´1´CÒL6íùÔ©sónúw,³é’ÙþÒŸ­lüuâdÝ7™¥Ë«ÚèG¸ˆÚé& }¨ h®Š\g85áz¯âO¾·wqöKÝ:#,öA˜ï&4!ŽÕlÆägž”ªÊüïЪü‘vбîðx'Dý›¼9}õÛÛø‚$ ©]ÛÜ ,‰Ì6îs±@e^:òNk’Ð~è¿ôËÑœè襤¢æîòL¬ìî˜gÀ<R (‘žõ£ðGáO‰~0ü3ÔõÙä³›Ã÷7òZö¼‰d¹¼QûÅE˜ápÁˆÆÞI<]·ÂÝwÁºÀ?ÁwàôOiúÄKµgv|Ë(„jñž22cs"’7)Á¬"žÎNWg=,<\Û–‹Ìì<ð…o¾C£èQÙI¢]ÌßkÖ©gÙ µ/2Íò™C£Ö™àO€¾ø_iqq®ø‰u¯ãŽ®-»„®ÁÞ¶ÀÜnYp¤ŠÔø_¯jß5 ËýF,é1Ò*®Ù¾E*ëîdîù@À3\çÅ;ÿxžkŸ µÍ®l§¸Ô/ÖyK6¢,,I⠑ć Æs‘ÍSÚV“\Öîv/fÒýGOм ªß¶«¬Ü@º» kó%¹•à,~i±'Œ’@倕0ÃÊ6’š¿™Ë9ÓÄݨì?ÇŸôm[Á1¤¦Î ÈîŒRêp=ØÀ”ž_« Ž9äó\|?u_xKÒÞþ$þÊWu”«Â>2§=X(8=+éωkmoªË§j>'Óî¾Á4zy»¿€YÃ+œ#,säÆÑ£äþèוx†ßQøC¯ÞÃãÛï앸—ìиq,,Àò܆~\Šä©^¯;IúV?'.d´þ»'ÇÔšßàÕ®³gsmçé¬ö÷r,çΚDbÂB3Ô®Ìcðë^aû4üE±ÿ…§¤Gâe’ëSÔf+j]²7lw-&sÑSwüæ½ãß‚l&ð}új\í¹œÌ(’n\ïÁû䜎ÙÅyW졤/€>.êÚÞ´Kÿci²Åní•#’l(á`öŸv®š4é¼5NwúŠ‚:¿Œß 5oˆštÞ5KMMô{)ã’îw ÓIfX«Êƒ€â=Àb¾mñeâ.¨ÿcrÉŒ©¸òñî%ON \gÞ½Óâ»âýâûMÑï%ƒHצk;Ùm ÷!”-Ú23ÇS€9Éè|Ç㦖Ú^™i [Ëm©Ù9IähZ14x;AÜ['~îxÀW~U'N1ƒÕt·ORœ©ò¥O~¤ó~Ð!ñOƒtŸÉr³47ÙÆŠ£ZÆ‘ÔP0G©Ï5kÂÝêY²°•¢ŒÄÆ€ÍÎp9úW'áï ¶¥ šb¯+Ž8É9çëÚ½ëöeø}ð¿^[½ ¢Ž ÈŒwPþìµÂT€Ì¬bnIÞ¿2õ+¾¥($Ô"»šPŠªÔ[4¾ü4—FñV;ùÒ]$±ùP¡åÝHm® ¯Ëó+pFA¯Ó„_ðP ø·JÒ´«h¥ð®¿ù0[‹0Ö„Û {ãŠ<öîb‹mÀÀ'“ðïí5ñûÀZçÅM~Ú_éú ¦•Å̱…¿’TÈ’à6pÒ¸b q†ØCÆ×ì›ãÝf/h ¨Àn'”˜!TU·d(ÜÄlmÛv¶r ^eZrÅANQ±ôj‘ÃMR§fºŸbxÇâ¬÷÷šÄ x—N©¤­ŽË;òÞlº I„r6àX™IàÖŽ›ñ‚Û]ðþ«m¨XArÞ%³·ÒÚXæÛÁnUY™e $|ýlùßü!v¾>½ñ/Š´[moo¤ŠÖKfóžO-Drá-˜Bäí,pÇæ^­œÿ†ÑÝøŽó@·ðçöüQZ#Û?öu¼’ÛB•š{‰²¥0«µÉŠœ\7„?v¿Jµ×3ÓS´ñ%Î¥¨_}—E´ s£Âïr‘J-VÐígC&Þî(ÎqÅpß@ ePÎêë­|G xRÖæ_ í.öâG™bRVT+ÿ¼%Ì…Ÿ,ÅÈ;Fªü,ÖaÐuè'I·Žm^9,tÃi,i£É2/›;a`óAEòðøB¤“’6Ù*’Qz-Îz1r¾©÷Vþ¾ò–™ xkáÛ=/ön{½STº¹ŽKÛ{Í2u–êYYÝŠ¥QS ™\®æ“ã#ƒø×ákýjÏRñƒôÈ´Û1oåÍÖ»;[. Ê$òƒ.á*ä'‚““[ÐxÒë­,ßmtmBâöW¸£žal»£`Dm©À,<àªõäT|Pxkû6-VùHØÆû”HKpJ†G¯ÝêM:ÔàêsÁ]œªÁ^šŠ25/‰7¾øYáŶk`š¬’5ÅëÅ$H« XÔù€nŠEÅO] ×m | ðí¤ë^ øv-<;v‹ö»'’ki2F~É{˜&ü„ñ‘–É®–?IñCám“iú ÷öBO.K¸„QœªF¸ýéE9€šã¾ümÑÿg‹ö°ð·‡­lµa~×r®¤6òFâpr›H|†$vFª„d©_ŸËõ:iB8wk§÷™Ám#â츚o‡'Öu?iš‹‹+RÙí%}èÌw£crŒ ¶æ`œžhøOÀž![]zÛ\Ó?á·€[¾—ujê’ #šg€nGb@À‘Qülý¥"èŠu »'³³f}/øËmƒÖëSð”ÏÙY½·Ú%¸@%‰Wæ0üă÷p9¾¢ñæ¡.‰oöˆ ½ŠŠA,…–[S¼3œFâN{šì”j`àãY%}¿àœî”ääùÒÓ×Ðð~Çþ.Óü-¨Ãgq ¬RÆóI2Þ³Ï1|ûA2°~@22p ¯aý‘¾ xÀ?ˆmíõøKu»Í트·»c1JÊØÌ6áx#if;p+Ç4Vhé<ôûS&ÔÉ.UІF##å`kÓ¼OûUßø‹Àͨ|³Õl-¡ºžSiçÆ^UãlÑC ³ðÅþðà`òz8Ê»…’Ñöÿ3L½Ñ‹r„l×sÝþ7|?°Ñ$ÓµŸ‡";;íöû ½¤°y ¦S`‰û»˜ú׋éÚü=ŠácÖbÕlµéyc¼ un„… éO˜pz×Kð‹Åš×Æ/nÓ’ö'°·L½´¸Ãy«Çå®­îXbP›Tî,sнà‡7ž!ðƬ~+ø{Ã_iÛt‹ûíN{­FÚ'r4R¢Ìé3,ß4ƒ•QŽN2¢§½WÞ{5èK*vMìy‰>4øRëÄ×–š‚é&eEUY"Ç–¥NY ƒ‚9+\‹!ñðm^ÎûM{¨³ÓK¶%míTÄ#(Ù[p*[plç®vŠŸáß ê_³ö¯âÍ?‡¶ú• †ÂÊÂí˜Kî|Ø$DûT6샹r+7âÂKM:?ø¿áŽŸy¥\ÏpP¼—%Ŭð«y€HT £eF•doœ–(ß?¶6„jCÚAY¥ªZ¿ÔΜç‡iÂzöÒÍ#ê/ Üé¿ ´ÄÒ {ËËO’æš d¹¹iÍ+¾?›/òŒO5&‡â9~!ø¿û<êx.K ᱉–+²í97É=Z3œn# šãÿgOŠrxÓÁòXë¢õM:GD¹š0ŠÞA”8,<Éw€“$Œ ëücðuþ#x»MÔàñ&± êÚJ·Þéä ¿·‘v4f9¦K&Öe#8õ¯2^t­±ö4jF½(?|dø«|ÖobÔtk;ÏÝä—dV¿–'2¹RÎ¥Žÿ7éŸJêt¿ÚÆô+{Ÿ[ˆ4õSöÝ2?&[Ë”K$W #,[–Ü@8è;zœÿ ´ŠlÖ_´ *êÝæ’æÎÉÕ^1 YH¼Òß0ûÂT° Œ‘ÀÆ~ŸðkÞðu•LJ´Ûæ·ÉŠÄÆf ¸Ùû¹B²¶F — sžÚ5)ÓNê÷9#‚©J«’©§b}2?ëÿ åÿ…§§é÷öúµÄÑKh– Hè©Á‘ÐîÚ$òä_c›_Ýëß.Ò{;x.ôÍJP¦ÅB’å%ÉÙ´)9 ôÝ_DxŽ!®éÖ~´Ž1®md¾´ýåÍ´Ê™:•("e'#œcЇKm>çÄ:‡•ökMJõR#tYî„*rR3ÀË) ‘Èn•Ë8Úš:qU'-Îõ𕦇a#xZ÷I‹VrO›˜í³òîIcÝÃrNÕc€85{ágí/­ü†]?Äi›§ºýØò Ä”pí’´‘§‘ŸJúÿâÂoüj»·Y¬5U¹Ù7Ú`EŠòpÇi …d*‡ŒÓ¿Ê´‡ì¬øR‹Mñçö>¯£[È/,µY-R FèJîå”1-(0­»${pº3¾g-_øÍâ²ÚôoR·šýÌö_iÚ—ÄßÚCÄ¿<©ÝëQköÚo‡&qh–« y<¹œàùŽŒv»C`1à`±ñÇÄOˆþÓŸÃÞ´¿œ^IÓµØÐý³hßç[œ¢ –#øYû/Á]j_øÂÞóPÓ$²7ßéðÍ$±ÎòíDmÈ)]àî#û×§øwÃ^+ñÆ”4oŦj:·› ‹ý(JÍ3`©Ù&#eI8l˜kê=bM7Å–í­^KH‡FIô ÑO,-‘ áœ|¤î8$Ö»âëýCµÕm,`“N^áÄW g9ƒîp“|ÐãA–úÖê»Éj8à)Ò÷¢ô<+ßn> .ŸiáètÝ?TLÿd ·W/XÞÀ±o;dèAàŒ v:úþÏ:‚øÃGM_P‚cöxlÕ£”Gœ,¥ÃÎCd§ºÄx³@Ö|-…;XÛÜ[]¯Û¬µMÒGwuûÖ) @ñÆŽJ®îâzâ»øÏZÓu b[Å·Ñç×ÈÐÜ\<—…Ô.è£odÿ–…·žÇ¥>IM_©ÍNQ¥-ü1æ:_‹õ¯†ÿt}+Â3\YDŠËqyqæý†f‘‹•rbýØÜHèsÜW®i¾µø«g¥êZ´öVÚÔ2ªÜÝi€9 2RR2Ø Fâ2qŒ\}þ‹y¯x¡´}{R½Ìcì±Ãm¼Öú–&åà™ŽÆ+½†ð:c$œWH¶¢;›xþê^]Þ™ ‚8%¶ûsHTw¿‡<Œ*¥Ór# [ìš¾/Ô.tÿÝÛ|Wµ HLR,°¾Ï4gÊÝB†Â,Tœø5Å|8¸Ðÿ¶n5Ϧ¨-´ð­˜dW±Ý·÷ŠöÒeÁÆ@ÃrpW¥w‡‰¤>žÇãöodÖ–ñǧ^ÙÜÊ&¸€Å—°Å£eÁa¹˜1 œy€ý 4Í+âØÜøy4¹®eh¤Å±O³ÊËÈ«œ1ÈäïŽkªŸXñ½m Äšõ¦£¶šï#r›f eܪ¥%.6ƒiqÎkѼ«i>5Ž×t›iu‹„’ÛL¿ºÓ…šßK±ÈER<Âÿ#Æ8­¥Á]«™Ê›ªÔc&¿S#ʸÖ<+ ñ¢š¬ëpÊ^Ø ya\TeSòü¤sžzûSu#öxm¦ŠVq³”ƒng'==*[H›áω ß¨Íyi{k.¥wPy Äª±•,ÁCáœnËW>Çá}?NþÍ·šYuÁiãD"&°[w ½È䜜¸ê’4”[ø·9ßxŽMgS‡ËÒïté &3sÆsÎ×èO®+°Õ®.íü ¨:ÈÌßgv‘ú˜ˆÃ`ó÷ˆ'sƒX?ð‹_x“LÓno-íô¯.!qe½Ù,¬p÷VÌAÜ\öRyæ·´ÿë>…¬IñеVè 34ó†8QÉÀëô¯[ýþ*x¿^‹Qºø“kwmcñÅb³Èc2ƒÕÁ$+¢“Ó‚zsœWn<3àÿÚkZ¦©á»”×4Ý‚énmѤ–ò‰a+”9ÁùF9ëֹťü(Ðã¿ð•y5‰‚1¨:Y0ŠÎQ#L…U$ñ¸œSÁ+rêy40ÃÔöŠgµü>𦋪|g‚Mc/­Ý[O Ηo 2•Û"¬däà2œŒéÞ±þ"økYðÅ”ße³ÕQ‘Ð;Ù_{ÜQêæ»?†s¤ÞÐbN3žÕÓRQpåHá¥EƧ2×™ÎüKðŽ“¨x^Ò[{xRx4Ñç¥ÀS ÉNÐÁ€,H$ƒëTôí@]ê¾JZM5„<¿oRªÖÍÀS`©<¯päŠÖ´¿Ô¦ñIÔu{hü=2Ü8›OºÅêÍ0ÉI­æ¸9 œg§¡1ÆÞŽÎêò;÷¸ð^YÈcŠæm〲®èË/$ËŒ‚qQÌíª:,žãu‹{).4û˜cµ‚Ås%庈$-ó;¼«óD@lã“áŠ÷Ú'•màR5b_´KÛä™÷1Ìçdxè ©z|=mâmBm;Æ:¦©o$QyÄYÜ›IçRQV7Þ l¤t~}8 ¿eí\òï¼âOp°ˆÞ[[ˆãŽvSó‚ƒçÜŽ­b½§Å§È§;~çâgøßÄž"ð­–©}áüÜX@«nn$•yaµÃ+ôe à’ÑÐæ¸_L—…R¾¶iíËyÆ;†uŸ`V22ƒ´€I!»ú f½XøÓEñ½áÓô6µ¶±x¤yD‘3 Ï’#YÍÆ@8Ál’OnsÂWzÄ]gZÑlµKÄ¿X ü!>ä—1®i ŒàÆÌ™¸šxv”¹>}N”â¥É«“8ý2KÜ‹çyäó¤Qj/!HÖªTyj9PTA,= nx'âÅǃdîum@ßê𱫸/iq÷W0ÈøU8É daOJ¥â\[ÝÛ[jðÙ><ùí£ ¤Eáù$ŸRqF•ªèÿü74Þ"³þјÛA{y°frâ<ÿ R@î}+Ôu©áaÏW¯C‘ÍSk[¥á/øºð›Ÿ[MÍ,W¶Ò˜¶´.‡ÉÎ2x¯pðÇí#|ÆúLɶ—¨³),ØÝµ‰ƒ^áïÚOÀ‘Øh¢w/§ßÇF)U•ÌŽÍòG21€sÛߥñU®Ÿ§x¬jž¿ŠîÖåvÚ»Ü `œËòlc­qW¼Ÿ=5îö±ëQÅJŠZè}/áÏŠ6-Öe´t‚ÃR½¢‚ƒó IÀã<œfºIB ž~µò‡~"I§ßÃ.·{¿±¸ó¢œÄ»Uö[;‰àqÏô/Â´Iæ‚âÜÞÂàž”žgî¸þ';~‚”:4¹rA<¨#é^eú\÷dUU3»qbÙ~dÓíy*œ—ǧÿªš¡.H®þŸ{ŸóùÓ­¶Á"³e{ùçµ.ÚrÚ/ßrÞÄŽÞÃÞ¬‡<»‰ äš å´vF9®nÕ£¶(K  8€2ÿÖuX"Ô"’ÛXhížêàMy(!°3‚‘°û«•èsÞ¦Óg´–¤³ wt¶‹ Êœ-»£3Û—å}…E4†Ý-ž u=Ó}£x[®Ö …Ï?6ÑŽ˜Ý]–qI_C“›žW’Õ}ÿðÄ×÷°Ø\Çc¶8¾Û“øaljÿx!Ç^zV=–2©’ç.<ß.B{ü¹?†x©,´a SÉ4³"„4ŽÙhK.Ù72¥‡Ö¤º½ó-A–Ò&ðbázœn^˜#œö®ZÖ“»7¢œt_1××KYÌrl#¯å@G>µ,Öû›‘†¸â¡™d9­×EÊ‘üC=G¯CS Œ1,‘2ù'Ìêy5ÈÛ½ÙÕ¨¥b;“Æ¢BL`…m }}kçßÛãö ´ý´ô_«ëÇÃÚ¿…¤¸×Ëb—9‚P›¢ef\ ñ£†9\W¾Ì†i‡HqÆFýt˸rÒ*„@–_^½ ˆÎTŸ44hs§©F{ÿµŸügâW‚~ x›Tð_ƒ/ÂÓÿ¤6£m}¡¨Eþžnß:¶7 œ7ý—ÿfAñ?Pšò×ìz‚˦CL‘Í, ´†NTló´å°qƒ_µÿ< ¿ôtÓ¬5K½T¸Žæ‹w?|pˆß,©ž ?'­|}ñWÁZV³á›Ÿë–sË{ý¥¬Oo ú]ÂÜ4¥w<§ø¥mØØÛÎqò×ÒåÙ´ëRq•¹»ùyŸ)›eò£Smæ|ß©~Ïz÷‹ørÓÄ>Ñ´­1ÒóY"×7©*$Fxâ›jÂÁw#/œå¸r§5Ïø3AÐì~*7á*ê^<³7Zm™Ö.”YÍ}a µÊ9[’ C²soˆã8Äc<0ÇÚ>µñ x{šõÖ–,mQ§[V·Âê1˜ÉŽÜG°†NŒîHÚÊ1Ô×~Óß<[ðÒ=ËöðíÜwÚ®¡oÒÜ¢Ý[Ûɾc½¡ƒåTÁU‘ÌBdO~¼ªÍCþæÔ©N”•Ÿ~çOkñ÷Nøyâ_ Û˧Ŭ¥ÍÃÅ>¯ çŽ Æ A˜±1¿˜8b(#~LšOÄË?Å÷zާ%ïŠõùmï—ÈÔn¦ŽÎÈÝš ñÇ3”¹PrN4|0øMñâgíu®'‰l,ô«ïé±ègS‹ÃžU†RPÊëÍei30Ãd('ŒWCðÿöl“Sø›ªxÏÂúü"þ²¾¸†+‹ÞT“A#$I&ÅÊ‚ÊD¥êÄpMz5(BܮϭÎ*U¤š›Ûæ}Øß‘Õaðmž‰¬Ä²þæÙ$Ûmc€y’ÈÎ|ÅbXL^c㯠øss¡ø>†âK ÙãƒHš4K(Ôƒ€‡(›ÙÛ¯,Áˆï^%«~Ä+øçäêž#ðý‡†¬dˆÞ½±– ‹ûÇxa€Ç‡—\ø "Þ°¿k¯‡ž ý•¼á+_†úÕ‡ˆµ[,[ûB8®5û³¶QMÑŒ8Á@øÆóž8`©¦¯-_DŽ™âíÛSèo…Þ%ðô¾2.Ú~¯im¯YÉwui:ÛI½ãÚã}¤‘…h¶ÌÙc;AØÇ®ÃÁÞÓ¼e­ØÜ^Á©É{ Ä’švû¢%x|ÈòÈ›à`çhÏ'Ãÿa¯xòâá~!üL{ÛÑ­ê²5µõ­¼¶1CrZÄgs•ȈÁ¶}ÕÆšö}zò×Â5ËOjZ‡¼?qs ‘iuq+­ä–ë##<ƒá-(RY²@…ç\e'Ë}…FV–½NÛû&àÒõ ë¡kbï,—º£$æL¬fUÀ Gò¬xÀ_™ŽXg^Ãà á=aïáÖî¤im–Ø"Ü·HY!Ûƒ'UÎx Ǽ¿_øªþ¼Ðu/‡úOˆüO.¨&5XÚIáhäÙÒ4/¶GÄeUCm@Hbps]Ç…|_Ä.-oÄ:eÖŸe¥ÞÎtØõÂÝMä‚>Ò:ðÛ™Aœqƒ^<“‚»ØíŽ»>0x«PÑì Óô¿ÞjÖšˆK&¹‚!u,{Î ¾å!Qr¹$ädr«)àøõ½OI–éÌZ]ž#UšÐ©ØåYX’BFÊX3`÷¬¿\}»ÂwV¾‡Ì·³Yd–×MŸd°À¨JÂ#t´Œ3ŽúÖÏ…µKÍaÿ ¸y/¯me‚[‹[|ùŒÑE(\îu … ƒÉè+JmÆLÍÓŒ¥©޼W.àÝ"ÓULÓoå¾oµ[Èâ¶´Pd1²\(#¡ÆTXוGñóWÖuÍ/MµÒ—VðþŸwgmïmm5-A™$µF^[ °,Ávú Ÿˆþ ðWÅQqãOêrÉ'…´·µkÉ-ìà™•H•¼–ÉXó»,drµÌxsI¾þŸO¶ñ‡%÷šœÆ :X¬åV*ÑC ·€˜³6zœ‹¤ÄâÖŒò›ïŽº¶Þ“ ]N‡P½†ËPA¨IwhÊ+³9åU°Îªê9@xZÖÔ¿µ5}b_èðišnƒáÝT¦5<ÝAVP“,,¬É´©T^Tò'Ö¯¿gM7Q†ÎÛHµÒ´Y®<»‹FµµlñoTž9ƒ P³n8 p9ÆEMsðŠûÁö7?ð®!Ô´‹­b×ÎÔ5;kuóX„²-À)4Ò2áÛ'b8Âr m*ЊVßc%wfqZWÁˆ~íÏãW×õ˜o4©cabéq©1r&x¤i+G°6a˜ÜXŒW/ðÙ4­C@·¹ÑàñU¯ˆnm§ó4k¹B_‹%‘Ñn&YT´$®AçÅtŸüYâýN÷Mò<,öÖþÐ=­³Mss0¹´_ÜÊî©å…(DeÁ ®Fîè|A$ž0ñ¦é›mn|N±Ïm«K¦›¸€`ï$WùD[¢þRNX²ÔQ*’kWp…5+É#ð…ž›ñ{˜&¹ò5.àɶ¼Þ"dþ v‚s‚™ ]Ö£¨iv²¶™@ìIÑÈŽHãÛó³ä‘Èì;œæ°-m4/ƒ>°ŠÏ@Õl4íJ'Cœä]óº0E9ËŸ3>õ±­Ég­ ŸLŠK«]5ÀVY#òî‚ɲT$PåCÛëY7ϲ*+K3‹³¸–ÓX‡WÔ5-CV¶³½%œd8†l € €pF0FMdx×T·Kjööé¾ÅÎ<é'”|åp0I 21ÉÉ®¦]B?\$ú^¥oheK¦$Øó:«îUŒ6ã<ç¿ïâý¾ƒð‹YÑ5»O[é²Ý=ôzDL“&ÔE1&l¬ o$‚I!GRér;]B¥d¤á³<{Á>/_ügh|W¯jzG‡&¶“íN—-;vÊ©A;—mÛXmëÇÊ+gáfŸ§jî¢øgoª\iVÎ宦‰d™í eœ+*ªó6Œæ³> xÜêÆõ&…öìV…:oã>ÀF:s^ýðßá¼1áÇŽé/æ¿’Ô@ò>Uf”–%äØÃp'ÊxùEvâ1”píÆO[v<øâRšR•>ø¤izN‹¤k~Ö´g^µñ»FÙÜZ9†X§‚Ô¸ä!.Fp¡†ãkø–·>Ýslú‘7«H®$¶–LØlnT,Ü®1Á¯[±øSàý/ã>…£ê“Gyi.¤Ž?2;iHUm¨®OP¸lNj?‰^!Ónüc¬ôÆ·´Ö'6âÌBdDAÑÁ%P$x 8 åúä)ò¸Ý³¢¾-ò]?—ê|ûãˆZŸÄk×½ñŸsupâ•¥lD2JÄ©Ð.IÅRÓ<_?‡¬®´kˆæHµO&;à®øã}ë‘üEIb½æ½zóÂúMö­§ßëPÜK$ˆX‹H[É„[€v6ãåëÇz½«xBÖ£*1ŽâgÂÞ\eTâN §sšëY4•ã¡À±~ÿSÍ£ø¡«xÝ­¦i:ž°¶²Ç¥Ïö•ÌñDÍl“CåÄ ŽYHòªBc‚8?2Í·âgÅ$›Âhtد¯XÀ÷mç²! ¹úõÜ[wðàïSB3©6Û|©|ŒkJ»Ÿ*Ѥþ6¸Öõô}jH Ó緉ϙ3Åj[ïlÛ“È*3ל »ñ¢ç[øÍ¤xR ³x‹Ä¾%‚êàJˆtÛ1:GcÊ7Ï Œ‹&KÞT•èiú¯ìâkýgN>Õí5›GÚc¹íØ *àŸ¯rzW»Gÿ×ñ‡Ã„×¾:ø ywªxÎëB‹NI™à’ ‚×(Ò:îØªQÙ¿\‚yÀÖ|59Mz‡Áâ9Æ:ßî>Añ—ƒµ-n览^êMH>mm$l­°^FÄRFß›‚:sÓ5ÕøSáf¿¢k:¾¿œº—ck)$ÃItìÊ¡Qévíf çnäšì>øâ¹¹¾±ø­á[د¡G®Éª1åË4;£‘€ `óŒ^¥ð[àÚê¶:|—ÿd°µÑsöÀÒK-ÅüòpŠ¥„qD»€*£’ ÎI®|n*1æŠw]5<ª¸j‘W¨‘|_®Ýê0ð»ø]!û(VdFméq!bf‘Ç_¼7c¯߆­|W¯Ûø‹Çî“C©\'ÙÒ4ÌiÈë$†3ÕIØ«ë’OjúûâÿÁï‡þµ†Þ -=âÝnZ1!ÙXs½Ô•tÎ=«çŸ þÎ1iš „÷:©}i_ɱòd_-¸ŒÕ¸9ÈÀIÅqód&1Œä©jÔÑ~4#Àº¶ŒúÔ_M%Åŵ´Œmæ2¥Q±Tùœ€ ±ŠúÅÓÆ²Î¡qà2ËRÔÚXãºÓžðIçÎð¡²0­À!HíÏOÞ$»ðGŒ-—Bß›n#ºš7ž1bpÙÏ ½HïŽ:×,*Ï9*I$Sx¸Îœ®š½Ï|—Àžø‹ðÏD´·Ö¯´X´ëÉ4ÑÙ縺·ˆm #üù™@઻¶ôùt/4o jwÚN¨²Z™æûV%´SI&Å+rX¨C媱UÉÂã9ȯƒ¾þÐÛüCÓ/t¨ìšS,Sƶ’Çï ç‚Hä´å²95ö“âO ø÷J‡]׬|}¯Áæù’Å$Ë'öR´ÞnKD¥¢ù÷¥váA⪽´¡i#£.©?‰5æRý©ü9áèôx4ñ,WÜÅ>‘d–ÚhB’Ì aó€6ȯ—´›}Bkf…ÌQƱnmBD ¢©ÈØ7w9Éíß´oÅ{ë:”·3É ñ¥¬qÈ‚`ÄÄylî.ÌÅybzq^%¤xšøx‘äÖä4ÈUÌGpT‰ÔíëÉ•e‡çwg6¬eZðµJøP|C¥|:¼‘ÕâòåO4ÿgI½“Syùɸ¶[i*ƒ^W㯠<¾;½žòîV¹€´¹`ÖòŸÞ#ãêõµwß¾2i:ÊêZ‹‡ˆã•®¬à·gŽGÚ‰U°Àq»xlv#½ix¿öZñOÚìd›cŽLHs ”ÎLl!”óÈÏ<Öð¼çwWÜÞt*b©EÃo#Æ-´_]kZœZT—Z­šZ´¶ò¹,è2c;NsþÑ9íY>ø…«xÃ_‚ÓÄpAwiä•»Òd¢’6ê“źÿ/Ê:ãë^‰¨k:ï|_{¦Égmi´b/>æàhùð^ŠqŒsÚ—Á¿t߈!Óì¼}gáùP«[Û4°—1Ü3’¸Ücã$µOjמqzÅzœj“ŒÔ&ìÏmø+ýeâ {_ øžÔîìãX."F±B‚qÓÉ`09=OS^¿âǨéw>Ké/®îô覌. ÁÎÜ“ÀÉWÉܺd6ÖðK5ªGmwŸ SÉq'Ìz£s\Tµ%æ„—W~¼[›¥ÃÇçŸî㘥³Ã7%žN+N Ôšôóÿ#á§Çøsãí;MŠñdfÊXÚkiw¶à ã”^{e¹¯°ãUм?¢A¤@×V ‘ZB€ {Õ æ+ËpÌ BŒÙh‰Ë07\þjê¾/Xüusá…ó[N‘­ÜA[ÏŒ¶OË•¸ü¾ÁýœhËŒÞm%ü˜îÂÖhµYì{›à|aÕ™yǽyns„l¥©9n9S©ì¤ý×µº3Ø´ß^ñ_õOk²ÞZjkl<µ¼I{¶Ù†aØPœ«(…SïZÞÒm¾x‚âOêWZóØÄ‰©y/-ÓÂTîTÜØ‚¾ÍÑY¸ã<×!âýÏÄÚÍ+[‡í³Æg°(2Ár¾üŽÀ,B$rNHöø‰­j¾·µÑm¡vYŽ¡{ ob„Ÿ()Ÿ-®9ŒrG=MkJº”½Ÿ1ïÆªŒ¹*;·¶×75?ˆ:޳âtK jãO¸žÞI¦†æ%{˜dbKv\þí†}­Ï¹Ív~)±³×>Åi2ÙÞÞèÛgx$9;”°Ì)Ú¤œ18ä}+ÎüIã]WÂ^:ŠÆõm¡b_µCko·×†×eŠÎ6ƒ¸ž•èÞÔåŸOy-`Ô[N–Ìù‰0HdIMÉ 9Q÷IçÔW\é8Yô:©TNýþã™Ô$ÕüI¡%Å–§&© âíVõ ñJ7RЬŒ ©Ép<úUï隆©4ºuæˆôbÐKçW{âÊC@‡gßÁ#œµU¾,j©yú߇u:Ê}Ð+á¸dd9.P1 »pÎ1Æ­†Ô5Éu˜ç·üÃÇäTêËÚSv—‘ñhtñ¾¡`úÅõËÅû¸c…/ "œ„äù` Œc$×½Y|RŸÇven´ÿ ßiñMÕÓOs$áã*›Í„¥GLzWÏß?eÕømñ*HtýrÊÃN‚({x MB¡pÀ*3«™YÂàgÒ¹- â.£¡\\%ÍšÝipH£Ïr'ŽÍû¦ÈgÉã5ÇN½l·-×UÔñ©c1ytœ*ëìÝwã!ÑnµK¯I4—¶ÐFÎ.áòM nó± #ÚÙÛ€Fzs^ªþÓ­ñëPþÍñé—0O*¬Òç´$; […à€Ûˆ#ùWmáˆÚ7ÆÝ Ç"Ök”™.EÆ<– 0Û¤;ÿÕ¨É ô Öd?±±»øõ¡x‹Á%nt"kùŒ¨e™vº´%ÈVÞäɯ{‰¡‰÷¯©ïªÏRŒŸ¡±ñ;Ǻ“ðûIðLJ4ËÉt½æe³»–xæºé¶SrGÊÙ!ýFMOà?…º/ÅÊK-hj¾!ðÜs_Z&¡0j6R;™Œ±B¸+ Î@8Û¿øŸâ\>!»ð˜·‚Î×ÄÙz“î-%ºª \¤k½ÌGvav©bÙ­ÿÙSÁ³ø{ûqþ$Þ躕¤W¦M6eóa[Éš5*Ÿi|a¶ä˜îy5Óì”SqwoÌÆ~×ÚÇ™{»y øÙðÏâ·‡t}}WO¿ñ41F騽ŒâÞâ`X²+ȧæÛÇ͸õéÅ`ü>ð4ÿ5©xçZ¿M~[[±ž&X 'ïÞœ.9Ã2 ‚~•×üuñ·Šg¿&££ÞM¥C©ož %œÊˆ‹Ÿ•—ya»’ õàc¤^ÿ‚…h¾-øƒ…ñöÖ,® ò¾Ò°ki€’ªvÉ–ãî¸&¦¦ÉRt)NÓ¿®è浟Œš^“áðÝýêiï¥ÏÐÝÇ i£ua´.ðÙEއ$õÍQðäþ ñ^¿¨ê,0øJóU3Ë«tìr€IxÖ`pAsÝ»®k¾ý ¿àžšµ}âh5[×K½×3=©»bdʶã;6§åNkÎGìÇ©ø{Ív[{Oi¶Ö*#…ö¤úŒÌ¸dò†0`ŽwîÖqZó;“:Žkï‡5¨ø“WðÏŽŽ‰ñCÔ%±µ·ŽvŠKi"Ð!Ö¿·®5X„©ö¤FkU#o—"+ Ƹ;;»+‹ñ¦©6–ðXèñÛêóêVörHÐKmhª§z‘HŒå¶UTäÖO†>"Ÿø\‡XÖuH´!köP–PÇqºO(¤j !™Ø«æ2¸@‡9$ÕÐuˆï|A»\û]ÆŸskobÚ­µø€ ’í…b¶²¢ÝvîïÀÅ\$´_çúŽx¸©'ë©Ñø{GÒ<7á˜í|s½.§gcý¥a§O©‡¹´ŒHˆ¸lòÌ# Àc& ø¯¨kš¬WZ­ÕÕ´é®ÒXßÝ•šß6YÔ’KçpÉ?*‚ÅkEñROˆ¾/“AÖ´h¬o´øR g˜¼bMŠñI Ú$`¤Õ±ÎXއ°°×|?:[øFÖËV6Nße›V´K¨ x]Œl‹Á &YÆà@À¢1æ•ä6ýÞXžu¢Ã.·àMIïõˆ/ôûvâÃP-§ßÀIUZïȺQ»†ÑžM{ï쟤h¾ ñ¢¿¦ÊY,mmí›ïF©ÜŸnàA;w àõæ¾Ó;x3KÔþ"ÜM­k2Aç‡)öHlí$„ž.¾X;“*~c‚Ýx¼èŸf¸°ñ«o¤5e'œjW©óù±ÛÄ’*–`§$3üÍ’Tá§iÑ ”ã$µó=gâO‰5P×50³‹Oµy{[Ò–ò[¨\J†e_)Ø>‚ÙÙóÈøÂ}[Hñ}­—€Æ›®ê’y“<ø‚Ýí“òå!rNÆbX0ÅEk¬x?ã>¤ÞüTðÔ/¨ÞéžxgaåA'š@èd_,[¶«uäÖ/Œ‡‰®¤Ð§ðäSZ[£_X^}¸ÞX^Çòd‹ÌnT22î8ÛƒMg ’hï’u/$ôüŒmOÂ6z×oõ>þ *ån¬ï‡î£±}Ë• ® ¼’xÆå'°9õ¿èžÖuÝ7VÕm…åî¿ÜÂ,­Î«ydù@VÀe žÆ¼ëTðÞ§¤èžg‹õ«tK6å–XU.- P¾ZyJYÙÙ$ÀÎ8È®÷àjIðóÂ7öž1Õ¤“Kñ7—-•ƒN·6±Dª?} ~`Âù{±…$|ÀÒªìÔŒ¡sì¬Ê¾Ó¥ºKO2Ź'SÓ佺HRÊQÁ…cB¿+…o\ŽõÉüOðE…´Í;W´ûlM©Y¥ÌKyq=Übf]Â&„%B®ãŒîH©ãß ]Ç¥Ûï¼9õõü–ß¾•#Óîáa‘orÌÂ0T¢õÏZ¥¨ü8¹þÈÖ­¼CâCfÞÁskcK¹ÚÇaó6¶ÌÄÈfT¢ô'“¢•¬Ó¹¬èÝÛ¸ÉÙK…mœäq³ðoYÕuj6š–·¡ëÚ[]]FÞÞ=A$V&ibË}ÁŸ™ycÀôr—³‹Kþ ÇÈß*‘Çøþ /Ç>Òì~$4W—>i³»Ô#¶šÒ(U ùP PK¬Ä•,7`Iü1ðÿMðg…µY~ÜÁ j—"IJI70@móJñ’6 €Ù¹™‡é~:¶ñžµýðåm5 2ÚÐJó[ÚÆ]ˆU[E[dJ€omÛˆ=WœçüMñn…¦iÓ&§w,žtÓ\¼r¬“E m±ÆŒ©æ| þñ[jg†½Ø¸ÅšÕ’K=Ï3@µ°Ó§Ô|E}$vÚ¿šakÁ;ßN¾`(ÒÉÀÜö$ à¾/Å$žõ;ô±µ±@‘Xö‰] adšBKz£8Ïá^…¢ëéâ{©¤ñî¬uòä»F’ÑViöªªF$f(€$” f¨^þɰø«I¹ñÔuKj‘ Kï ÙFœ–HøU.i ¼±$Œqׂis­óõhN»ò>nðݧŠ/âš}fÆ+(­Ë<·Z´û-ø_,)È8 ä©>˜Á¯´4=Cð«L—ö6a$A§yàÈYG „’B¤–|Ädô÷®W]GPñ¤a²þо¾˜Muu$/’À€.€*@À$œqšú7Ÿ ßEÑQ×–ÝŠÂ…"Aå¥f,…¸å˜30ÆÝ¢´§‰Tðî\¶]ÓO uȯc–›Ãz¯ƒô4Õobxté¤HX´\;pèÃ8ÜÈê%I´´ïÝü××Ä–KÒÃG$ÞS?šGîŽ7ûÝAÉ#ÜïÄýj/ÿjÙZ5Åì~,†'™<Ç+–Ò‰XÀn)´c‡9æ±,uiüSàôë„xî%"Ef_:IYYix*¥ˆ'ò+ÄÂâLG*Z=ÎŒ,åC¡sï-.a.—nÂ9ÉeŽdØê­ýå?u€Å8ˆÃiGÿ®³|¶ºH[¾J±FêG>ã’Zr¦QqŒöü1×ó¯3.çét¬âÅÛåÀ /\(ïôü©À—pÜEòƒëÎMD%1¡e$–;W×ëM·r¤y%xþß­cÌì]®i+™gߌ²…ŸjžÖåµ ²iÃ}Á\ ò©ÀÛ“Üç·µ&›gæ1V!v‚Ì{Ö¥“O›[·š«l…€–ìadQ´d+Ÿ¸sÁcꮺP¾¨ä­%Ëöï¤[=Ž“¼S\JÓ]º)-Ž@n¼» g“MÒç·ÒÖÞ9OÛ§¸™Œ³åÆ›Pºí Êõ<“šÊÕu}yu§è­½´³Þ>ì¦å<õf#-‘ÇM7PÓá·±·†Wpå[í”vÈ)ÇÐôÏ5´êr»³ŽTÓOFÿ«¿.Ö§ÙO¯é­¨"Å6¼‘¹Ùæ++ÙŸ»óÛ'·\S®Q­Vg‘PH“ y()ú‚r}‰ÅI~&’(mw…3$~L°c“o=9Ç^£¥J…Â:Ý„UÜd‘Ê–ÛÊ2Oqœƒô¬gÖˆèMÇVôý ZVã{´êU 2©‘íÓü 9Ñl¦1®í“Ç ö?Z–Eóm×ì ‹pdɈ¹!—Û=)÷ßgÕ¬¾Ûl.Àn-†=€ã‚8ëX8{ºóûÉ•dȇʔ2í9]«•úâ™,hÛ®xÎqô«ˆ$·u•Ò'F%Z@qêT‘Ò«Å3›²ŽPìË ò:ûçŒãÜÖ/tR¼´‰áVÞ|ÄrcCõþUá?¶¯€lµÄµšö-CPŠòÙ¡Hí‘Öthz¬Ú>ònì]qÔ×ЉÎ’"#6óŒócú׈þØÐXë~µÓîžAµEYstZ[©áÞ-ñåÜþ&¸};UÔÖÇíb{f‚âXn‹)dË8Ú͹•‰#†nsŒ ÒøOñ&ßÄÚ5÷…ì¦M¿†moµYî$,ÇÝ+—ÁŒÍ‚Tœb¶.üOáÿˆá|'ã{)íµ?¶,Öv/Ò3œM÷#!ˆ% õ®K@»ðÇìç¦\JÖwW¢þH®/f¼ s4é å²äª)ûÌ¿6ä}ÚõpÎüÒm«ô9# ss^è§ñ%>&ø3á…Þ—û7G«é~€[\ËžHqtŸuâ‰À,à ØùV' ñߨ×Ö> Ñ#~Ïz—†íà‹ÄÝ]BiåòáÓV@w,q±™1+2ì=ÀÀâ´ü=àÝâ·ÄX´ïÚúç^’ÊÍfÓ4¸õM¤ReUeù^_-$”ǹ›ËSÆÚ8O|´Öìo´í›='Ã+$vÖV“†¹¾“f÷·C€° Ê.BàÉ5å7šw„|7áFñoŽüuoà¿x‡V ¡Yˆîuî’;‘ò»G·d'Ì ¯‘´F+94âà¥÷#¢…6ä¦ã§â}›>?‚#Óàð!Óì|¥ÙNד-ÍϘòê噹;€%°¬k L°UTîµ=l¥£v¹Ýü4ñœšŽ}£j-6±â¡jo’k› ¶’@¢H +(RC¬H]Ø®_ã7‰-<5¿‰õ[íkV0%–“w6–RÉ™T“¹>cŽqÈ$p¼äÖý‡Æoø¯SX¾é^(Öt9„ڭ嬚Iòw2Ážb2ª;ž+›Ôí¼5«x²TxçÄú•©Ã-´ºeæ—%­ŒÆMÞdÏ=¹-Íãæà' +8ÂQwjÁ9m¹Çüuø;á­SÃð†»©Zéºì GklmãåZd‘€ÈBC2»Hä‚HÇ<î±ñ³Á¶úEîðßNÔõ¹l :[È‘O¾ŸoÐ^ì¸iÝÑBã€îí]¯Ä´'ìÿõ½RÒîgIQ•í/tëXÁi!•<ÒQyŒ ™cÐŽKCýŸôO‡ u=XñÃMâ˫˛Ͷú_•gqs.Òþ\$“UÛ“½¾ÿʽMjõܾ_Ò1¬ÝšãšïíW­iº©Ðt«åÒ Ç6òÝ»·ÂgÌyÂ2GÞcŠé.ä”°U㈘Æõ+B’øJ4iÅ)I6raéUŠJMݘZoükU¿±‚ÖÇLÔ½i} :…¯ï#œØùë¹ØG‚¤©ÆB–8Æ@é•jÞË•I\ôëOLÖo5¤‹ì×Vîlä,U‡*dÇ8?Är¿/üC.—¤XøW\‚ßJ¿žuÄ Ôå˜”Ç #Ë ø À;FO¥áÏYüOºŠohO9PâyžÊ7‘–B¦u,ÙrÄœ ×¢^ø7J²ÓD3¦–º”è±E3$°¤€å˜\ºzŒqW*ÜšÉkò:•)5î³æ OC\‡R±ðû¥¥ÝÉ’íâdŽ#ð”ÌÅ[?(ç'ŠÁøeû1kšGŠ<;ªý®âm"9Š­ gB„åÔ7Ì»ó(9$×Ó~¿Ö5[ËMc\g€ª•³’#-·,ñƘUù +®Ö¼¦ø¾ St¥4˨õ8v%vŒm`Åu^s­ELo#æF_Uç³¶¨ðßkÚÇŠ®î£Ô ¬ÚIŸì× æ¤0écªœ¾@xPxüÅŸ±v‹kayu©Ù%캑Ž["’˜ I.I³kÿ _´ñ†¬ß7a¸žîêÃM–[;EPó•ŽÙAZFÇò©ë_Kjž«§ü³ñ*YédPHc“LûB=äe¥òâ…• — sóc óqõêS^Ï‘5å¡Ò²š#wtŽímžõ‚ü7«xoYò.t;Ë‹¸ší¦ŠÍ“# .Ür¨v¨'§zú#áÇŽm~"ê7–Þ7Ñn­t½.é'7ÖQ.Ù[!˜>ú0Íòúž¸ô={ÅžðgãÖ¾0k·;´BD¶ßyaÉò÷(Ç, 1!€ôÈæ¼éãeF*ô×§Q¼ +•Jív>%Õ¼7ª|C×´§›CÔu(aÜ¡¢·ÿV®pC*ä„Ï\W´%þ›àÁ¡èp[ZÙ]›Ø˜ª øÁc³9Ûü ž=zÿùu_‰º´_~O®Çus¶º‰¥Ó-¼” ûû©œ`ŒnÎA Š÷­KöÒümb-¾)jšEüÏ/˜–°i볜…,Üq•ÝŽz⻫bß"ƒ‡,®K-ç…©¿Àø&ë[»øŠ£Ã> Žr;ö3Í4‘ý¦;UÆÝæ7wÇ@àJõ†ÿ‚vÚëzZÉá}/HÓ`ÔPý®îúùlÞ¨VvFbÄ…°÷¯\½øsgðwÃÖúWÃÍ?BðæŸçOusqknÖ÷zŒ‡"8Ô&J(c–lñ…ÀÁ5áßþ8x—À6zM¾·,‘F’3Ir¤ ²`x– 0y±rÄ>Jü®u¼Ë¡ûÏy±¿~éßî#»¶ÖeÕ±áȰ[µªpÊ]˜ç 9۟ƺkoÚ.|²·ð÷‡ôího>Áh^êIï' ¦gy ¨¸nqÆæµðgâÏü.í14oiWÚ…ì†s3.Ë„Y7&'!ON6àÒ~ÑšômY´HeÒí º’6‹ÊRùü° e‘”mä*êQr³œ}ïëï8ëÒTèJ¥¥ØoÀïÚ[ÅgÁúói–QjžÕõ•ìÉ2í2Çò2aHpÑîä`ŽpÞø§¥iÚ†£q¢½Ñ‰åò–2Àùyùˆç¯|äV ?¶7‰¼AáO/VÖe<Ê-!1¤c ໘£Q¹Ü¢äõ;FzT:—Œü+ñÁvSøsÃÖ^•.%¸šÒÂÐ[-Ò#íI9ÜNqŠ·…„]œZ±òõ¹jÇ“ÝwÛätrøÿLñ̺w…mt[­Q“˸kµò9/É'pÀ]Ç“À¯/Ó†«¬ÚÚézƒG¥ßé t«¨#´ÉfÊH¬B¦6`öÈæ¸wÇPèvßlûI­q±' `Û†fÉĹóƒ]ßìë¢Ü¦ƒ¬k7¥ÛX™Áœ•óUIpYù\´öm ûÊ48¹tG`åÌtº7Áïh3K'‹-ÛZ½¹ÚÌ÷’Ûµ;30qŒ犹}âë];Ãi5ã(,†2Б¶6Ž0q€@ºÖW‹LzíÌÑ¥ýËOÆ6Æ@ØÀüųú}k—]Ï\òáaf£{¿ÝôÇøÜŸJ¯gí_4ÛI¥Üç5ïjúÞ‹qr"1éÚtž[†q“3‚Ãbõl(ɱ8Îñe¬6ºS’»>Ù~ü)ð¯‡4-KÆ qiØšmR6k{tIìA W÷‚0ìv´“ÀøßÇÿV×ÄÑé¾ xí¿³üÏ2éSa°X‚‹g®Fã_wx³öˆ›þ=W^ÓŽ¹ šmä±¶Íõ Íorƒo¬wr4Œw.Sf1ƒóy·‹ÿf Ÿi±Ý]iþ¶s ½Ê ¥’Urf^äA½1×spŸ´–‹äF3E•-Ñó_Ãx¯À?-u=2Îò%ˆJÚ—RÈÎBãæ׊ûËUÔŸÆú^—yá­3N²º¾¶ŒéÑܬ~L ³£"4çÌÀ9w‘^iû3|.w‡[ÄQÞ}»MÓU­­%0»e`¡žMø]Ê0Ù Œ×i­AeñI½¹×4û%‚(aM'_»”N†U`¬1½Whu,Aê=g8Õ—¸µG^ õj~^e%²Ô>ꯩ-ô–w¨—1ê1_!†ÆWR¥<¥RYX°]œv9­oÛêš6®tÑ/ö¦mö V9¬nžñ§ŽÜÊŠ¨à;)󄉌z¿Âá½ñô·2ø“KÒõ(^":”¯o¨…›Ìò„Û2¤£#ý¼qÛcRÖ59|%5Çöx4µéþÖKÝfÈ„—˜Hó  0”:V2¨»ëø”b£i+]_Æþ&×ü;á6÷U¿Ð´ˆ4ÍÌjÖàÛ<û|׌`N Ÿ¸DGÀšÕ‚ÇXÖþxzóY¼º¹½Õ®âÆÊ+F¶Êä"¤`°FàˆxÆ ‚j—ÃÝ&ü:ל͠^x^ßÌW0Ka~·YR@¸›åò2[.º>b9é>ü Öü)«Íâ;¿\ø„[Ÿ&ÞÒf[m=ÝH\Ï íµY•É…ëIÉ;û¦°´I-™—â½.Iô¿h^&²ðûjzµ¬´¶"[û«†É–.²*&@FÞz ×Ï_´7Âü{ðm•¦¹¦ø†É|9Mgo¢Cg\uIf‰Ë"J5+ °%q^÷âO„6·Öç\VÞâûxËÂþ!±WK3‚îîÑ \žBÍ+æÈÊã®(ÅªŽ…äô]{£ã¦¹´u‹>¿ÓôYçÒì¢ñgÙš÷\Ó§{[ý8K‚í"FªáŽÅœ1ó$aÏ PþÌ .< â½SÆ÷wpXÉ,³%¬¡ò E¸bx\Þä’¬¤mèkÊ´ïCà›X<-s®Þèz\ŸfiÏfâQ'“” ùXŒò5ôE¯ˆ¬u‚˪júƒM£LÖûá…ŽÉYC9u!¾@B #žI5åáêRöµm7ò>Ç”é*©j¾ó¦ñg¡×fmf9­ôIuk¥¹—Û?˜©ÕdR¬Œ0¼’džÀæºx’ÛÄ>†»2^OtÂìGzS÷lÀc>îåSÜýMxï¼m­xÚE´Ð5½SS»ÒÇÉo5œW–®¹w;_åË*ƒœœ‚G5é÷²iWš\vwVÛ.ŒÝÉ(U‰Qû´\á²ÁG\óÍz.nT×¼uÒ© ¯h•»œµßŽõ¯ü`»mGNφ5{§Éf¢³cÞF|¶ƒ7\•ÈçÑø»ÅqxKÀÖ±x O½ñÙ¬¦\d¬P¬GGw 18 ù³Û5½¬øŽ(àÓZùÖ9CÜHpváRI+À=NkðƇö­G]Ðf‡S{+ò!¹¹HËo|ÍÜ€vÎÁÁ9ɬŒ<î;87i?̃áÇÆûü/Óµ9-§Wßna¹Ó¥LÚ£•o$¶ýâÄöÎ3Ö«é> “Å3Êñ,>huH!ºĈz,c9ÆA²߃Yÿ>-%î±m£x ,¬4{(…•¤÷²I FÚL,Ü.îX†ãœwá¼U§Cqc*D#²ö­m|Ö³4}Uü´ùwÉÊàéÒµTí¶Äª®)Ænò[ô:?øÎvðÏ„Þk¾µÖ| fŽóHÕãh¢–=Ù2¬ÖûãÛ‚… í-ØV‡‡¼wyûBø†ËDñÚÞÙ¶—¾Þ{Ánÿh¹BOÈ’©0W,Nr¦½ÿâPÇðÃBõÕå€TÛî`òþY™ (m¬¹~k:´#'ynyîÆGTì¾GÆZ§Å#á[±c§ÚÎב*›ûs ‹ °uòãØ§#¦IlõzWÒ^ý£|1á>…¾,ƒTžå’âòÒî‚X›dDîˆ ¸üÍÉkøƒââž¹ ñn›=ÅÖ›$ÍE¸Q¹$L)òŽ8$y5á¼þÒ`×4{(‹ÝJ¥$ÜDÎ8'œÀí×çË à§:JÞg‰:’Â)N„®»¦Þ ÕôïŠú\Ëe¾y®þϵŸ“²áŠ…êA\ͯì¡áíÀËáÝ#ûY­ã¾:¤Q½óÉ/ÚÎï0ȘýÞ ®A<šüßøCû]ÏðÇǰÜ\;G$B‚aæAÁnÊŽ?ˆ~x¯Ð‚?µ§„þ'ø7ÉÔ¯.&‹I–¡ór#ÈØ¤®Ðƒ¸’3ÛÒ»pعA%SGß¹Õ–çT±¯’jÒ8¯|?ðýÅε¡~Ðþ#Óín¬¡‚É"ˆ./a@3ûÆŒ¹Ê);y Á¯,ðçì½w§øæÃÅþ=g›À¾A­ÜêM4?lÕ\11Db#Må]Ÿ…Àœ}ƒ¤ë¿ÚâÃUð’ÙYÆ%Žßí3ÁuÄ?å¦9yc ’õiÛ|;Ðü5ý¯†ôÆÃW 5ý¼cÎK€b—‹Û…nrqÁ¯R…u}ëbpÊ¢·OëKŸ-øöÕµ±ñ®©à™uÝeîÖë Á’ò3òÇ—"}Å,_^kÝ|ñ›Âß<%¤xþ-Lÿe]4¥»[C=¼ !.ê œÍÆxâ°.þéšC.¿¤®§–—]Øè·ö1€ç,Ò…|d+Œ¸ï_9ühøÝ?Ä m¾Ïi`“j’È‘Ÿôd‰víØ!P‚q“Ÿ™¸¢¶Ti«ß×CÏSž7QéØöÿŽü!àÝcUÒ%ðâé×ÒÆŽÚ¥š[Kw£ ¨Áƒ#!§×©¯‹>?|A×4;ë]GN±ÔõýyØKn›’€3,м•º‘Ž9¯\Ö~jš÷Ãc2Gmw¬ií “\Âcškè~âùmc^Nc œŒð+ç?Xk^ñ,Ö³]÷0ÊVVBÑá±åŒ:€G±ÜGjÖ…f¯½º3ÏÇâgYE¸Þ/·BÏÃßÏñŸÆ»þê2Z铯›>oE¼„‘–+‘ÈÚ¾µðö·á;»{¯&™«Â9© K}Bæßíí;%²,²p¡|Ù3¡£Gùˆ"º?ÙKö}ðÍׇl)꺶­~/£†Ý¤þÓµ†ØÏ;GÙÖTE‚«Ф±nœTºþ“¥Ã¤]]^ÞÚxšâÂá"¹óy „ÌEy`1 FçÚG$1Yv1Hm=/K†Ò{é ÷Ù""S§ÆÛ¢$Û£nÆÔó ³nùxâµRÎÓÁš–¯ióË rÚ2ÝIrm‹Ü0Z'Œ:ÆØÃm$òsJsŒŸ1Þ¢Ôy-çèRø]¬^ßxcXÔDµÑ–iRîîä¬24Ñ™à!Ø”²îA»vT†­‡ž+ñį XëZoˆ4Ïص­åªCdÖÓ½­äRí-+Í–X|Œ9äô«׈-ô/è6q¶tž'S¼±ó!“1ïIn!ˆ7îÎ20x95kPð¬þ ‚ÆóÂ&óP¾¹¸ƒí+§,CNÉ‹s‹g”bÝ@ää‡#waùþÏÞzr½LEøÐu·ƒtøü:úÃBºÎe kFܪd”oòåÜdÃAÉç :Ú–Ÿcfu‹]/Áבäß$éêÐâ5¡ñû¬ß7Éœ³¶+¨øMàÛ_xÎòÛã–­áÛíQÀ½š+D·dHÙHÌðü²´a#ÎäQòŒ _Š¿õŸh÷מÖµ/‘¤¶i’Qæ¼§<¸eS ³; Û"¶ð7è¡ÆtâìŸõäá9¶äíÛúÐ˶–â ;SÕí!žÖÎ+…K¦I-ÀBŠ%G`UpÎÑ…eA¸esœo…~¼eq5åûàÃ4K,¯$¦ÆÖ5‰ËªÆèY:mߌ6ÿ” è[á>½ ¥¾•âÝrÒc¦iËr4»‘7“²e¸ûA ·Ëó# 3·qPpsTo4û_^› »‹-°Íqpö÷ðÂ÷ÑK RNìÒïšUº…é“[AÆ[jfÔ£= sᵇ/`Ð/5Bam嘾ÇnM‚q#³K4b6UòÂ'̹*Šèµu;÷Ô.¼§_ÿjbk »Ã”zdgrÊÁʰL7P‚TáUrMaÙH~^kÄw¥Î›g;®—qgqqs) QK¼€/Þs"³/˱FrXŽsâ§Št2Ž &6r †#ŠdŸt8<[ªxj;qv°ZT­Ì²É-É‘€DÜî<”%^G,ÙÁÞkü(ð·…‡ƒ,šÛ^»›Ã¶ð]j¥J'&îY8äu.«M a‰\C©ê}ÿðha¼·ý>âO‡^Öu?[]è}õ”¿dHœO Òù¬£Ë*¤å*Œ°vâzŠõŠ>+Ó¥ñLº»á÷³Öŵ©yÖIÖÒæ2<Ë¢)‚Ná•À= ðúËTðÿ‹<+yð¾%ÖžÚsöË‹’» l¸—æÜ¡Êcåo½Ââºoø²þïÄ÷·Wwï&Ÿa*ÜÛG§Ç戆 Ló–ø‚‚ü¸ä·AÅ)Z •Táë#ÎõˉüOa«è÷šNcþ‚’3ÌÎ7Ž0°!½@=k+Iñu¿ƒfÓ4Í3MÔ/eó ,v¸šgy*ªƒÑN9t'4¾3ø‡5Ðu m¨=ÝÖõžI±…óóN mÆHÄg§=ªåœ©.ž‡SÞˆØaŒ~éY¾òžŠBàÐâ®R¸ëSî·êHÒý‚+X€*@ÁF\!îu$Ï f›¤OVŽ=®©+>[¹\/A÷¸íÁ¦ßÝÈm‘¯R3&òDޤôÎq×’>”·Î¶z€–ØmŽb¬cn ŸHãŽ3õ¨m¹s_AE{¶¶¬©5­¾Éh— ¯SêÀÿNô\B#º†r@yW.pÝô« 8ºhdÝF•uî@wüéŸ,Új,&#“Î×rŸUëÇãXÊ7R¶¤Z’=†©…K,§#iûã©ÿ ðÚ.Yl>5èÓ¬Ã5ÔX[Dö¤é—²´üÆÓ¤l#/÷€ËêGEj9,íVúMÊ7‚à`…€8êN8÷Åüh†Ú/ =½ì±ª²X®ôFÎàíëÓ;pI¨„}E.‡6)*Ô­'·â|AûIø*ÿÀ÷7ž(ÒWÊð­Ûyñ+ʱ‹UY<¿!öýЇ† œœŽEMàßiŸಖíãÒ'ðú`žÑcœÜ1PU‚°Ý…ÄyÚ¤óžƒÐ¼Suá?‰Ú…æ‘ñ&ÛOºº·U†in¥vŽY™²XÚ±»…PÀ  (#“šçu¾ºÑ$“áÞ§Œ×“'þÓ€‰áN»­S "œ`Cœp}Œ,TÛT¯w÷|ÏÏ«QtêJpk–ûíáfÒ|D𕦫I ÌHºlL˜ã›Ó¾ g­†¹ñ§P“IÐìÐG7úTc„žT9ÎÒ»Ž3·­vþ(øËuརøsm<ü=Oj'á‡Ãߦ—©4zU׌俑íõ°$WŒ2°–)Ka‚¬cc Ð|ð5Æ \êþ(ñ¹ Oª(±dÒ-îµo ¶ÕHƒ‡’Þ7e`BÅ’~l€2Þqš§ñÏÆŸ¤ðkë^*};…Ií »Ymh“{Ù¤@” ¥v[’MslÉ~|Öõ‰m˜¾·›û?N°ð™•¬PËw×r¤d$›SrB™Lrzø7Âm#WÖþA¨ÁâøG.-D-ŒWñi÷g˜Ê$Ù´®cR*HÕ„hJ/ll䪷¯§s²ø|ÚLþ0¹´ðf±Ôú"¼—ò[lKpÑž;y•pñ(uŒÆùmÞfÓkÔ´ß7³\O‰ôßf+!‘@ÑMgä¡Â¬R3o»cÇr Að·ápðˆl¼ðãDÔoàš#uw$6ª–÷L²mÚÓB1˱ ‹€ bqßüC±¶ð_à GÄzФº.Ÿrº|·ºP{¨ôé”(—qG,Ê›°Sž*êUOE˜7MjqÚŸî¬RÊçO±¸³û\´¸[d$*Dðİÿ–x*?*Ó¾ø½â9âêkè/´›(?|÷v"ì\n ,c+‘Ës†g=ˆBøkiã=%†£"Kk+$¸Ge˜²ü~\Ãg‰¦O…tH¦›SðªË ÙÊH+˜ÙŽV•[xŒ(Øæá³Qé²¶¡âÝNî}oÄ@Ú×Iº¶Ñ·E ŠÖ6+g<„þd“—’lîÎ)þðψc[»/ÙZøRëÂóI3Y[ÚK;M—;OÚd ü¤¸¸ûµœý”´Ræv4r’z«#«ÕþÚø÷ÆóM¤ø‚óí%~É¥êkýŸdU.é:I/—ÀïƒÅrÞ2ý‡lo.ëÆP¥ÝÝ››…Hí|–™±ÉfSÆ@ròLWwàØüA¬h°¦½áûÛ‹-y#kÕ½xá†Ï’6¥»1y   `ã9×üÖõÏéÓWÃz]”¢;KKÈRGº·’2ÑÈ#$6zç”åE]QžsäcTÒF·ccu¬GÃß¹]ײ]=ŒÅ·.d“ KnÏR¢Õð–myñªÙ5jožK$˜­¥±'…r¸i›×¹è;ÕOˆŸö}ñ¯•àíG¶Ó¬7$v §Ä v\íã95öž°¥íºÜdE½|ÃŽJäg…|ƒû\ø&ÓKøÍi¯ßê:n¡wœ¿iÒ’ÖyÂȨUa ón lT#åÚXº¼9:ù…TêOñ±¾? á*YŸV|&×¥ñçÃ}]¹ˆÚÿmiÑ]˜@DaÆvåzòk©³´Ó¼/xš®ž¾UöÑæ´Qåö#eUIëøc­|CðÛþ ãT±·‡Æz~•w=°1l†jY¸À‘¶Ð§€ªÉÍ}¡ð«ÅvÞ?øwg¬ÁkaÔ<{Œ×Síï~Ðþ#‹âš=Ž¡mÿò$¾D–…JÈí 1ÆU@w†‡äG#cÃÿ`Ò¯šYd–âQÈ![å~¸ç¯¿nkÄ…isŸ‹míä°¹›ËWxòYú䜑Èì5î_ìõ þÌQ]FÐɨjÚ“Ët°&jD ¨¶¨8÷9¾;ÕdÔü;©ÙÉâ}6ãhiQYV#6Õ|çnvàöãð«£AT”œ^Ç.:¥Nx¸îþãß~ jžÐ|Kø&°ÖÄj–·!ÀRîÄ0E?êÎÖ^€“‚sé‡ñ"7ñ_Æ OÂßìàžÌk-ün³Ê¹Œà)IÌpÌ3‚yãÖ¹þ;%ŸÅÖ¾"·»²¶ðûB³ÜŽüÛwÇÈ>U!·9R8Ï|W½|%Öïï´KÛý[úµ¡ÒîRþý ŽØÈÓ$[¡',ªfT#äë[S¦ã.w+þ†)U©Zªß‘òW‰¼áûèl<(47JÔæÔa¹ºž;3åÝ£¹P.$C»(S Táv“ƒšç´öÐtˆ^"ðòÙÆ“kO\IaçK ‡r3ÄëÄ!ƒ¶ãÑÀŠúããÃÛ|Ñ|?«Ú%¾­a{w©jw1\«j0,p Uà§6íçǽΠ:€ ùCÅúÖ—àHô‹”Ï ¥ÚÛ×SE”ïß P$tfÃsx­œù“‰òù¶ ¥Sßï:?†¿²^…¢øÓÃòÝ]hs_@Ÿl“M¿Ó“QˆD>æøœª£±Ë8 ÆAéQüMø\4KKkýx¡¶²–ðKq´v6²»H!s÷Ò0ØÜ¿ ÇËÀê ¬|5âÿÜ\j–:tº{[¼¹·’9ZF ƒ€ ¡VFw¯©ÏŒ¾xWKøc£Ýxª÷[š}m&òY&YVÆi—ÌXdˆ¨A;ÆöŒ8Ú*£QÁr¹7c†Z‚Œ™ñGŠu-i.§O²«%ÒI¶æ)1Q 9oÃŒàZÇðç‚õ–ðK[øŸPµ°7»Œí,!B¾`n1‚[Œç=«Ø¯þYXÚj«xdÝpòÛBf-4jT¹¿Œïˆ b¸_ŠÚTÐZ}šx®>Ë<;ÁKi.$]œŒ¬!qÒ»)bÕEìãýzB-¾Tb['÷n½&–eUò·fL än ’OõÓü<ð¯‡<_ð¿Xñ¥¦Ùx“R²–K¨´kÍ;A hƒ>d²ºH‘U9Áë¿ðçö?×¼ai¥«µ–©]k2i²h·VO-õº¥ ½²H¢x^1Ÿ,|Ý=vrñ׆t«­ ›M°Ô†­§C wÚºª!ˆE ÄP V]Îþ|‹‚¨3ó籸(»ËSØÁeÍ;ÔÞq>:øÇ¥|9øIá¨5(¯ôÏZÊ×égýжv¶×Ž¥$ŽÙbÜ][`v9%Øàq^oñCö­ðçü# ¦ZÝß ý^Ù˜ÖFÄo<ä¯ôæ½ïöÇø ¦xæßÀž ðsGkáJÅîm5 RùáÒÄi™-ÃÊw}ž5`6IP;‘ðOÆM1u]OG›M‚ò-3û-#²šKIBݪ³çc‰1À,¤œt¬¨Q†6I»¿ëï>‚RXxhÒ='M{mO÷¶3¤±"î,˜aÈöôåÞ(ñ+j_­%¶f–DqÂ’ä'–8Áè*ßÁçmK×åw’)a‰ r 7Í·ƒ×'þÙþà n<{ûTx"ÎüIO®Ã*Î>a‰'ÚK²Ÿ¾ª°¾TðÀß)5ëѧRn]*«ž1IÞçêçì÷û<Áð×öbÔô ^È“w§[Ms§—Ž)ä´•É1Pè۳à ^{ñ»QŸÄ¾:Òõ?†ÖSè^y-íe¹™Öy5¨ƒÂŽ·Ù–UO(¢¨Â('Býñâ6ju´³õì¹nP0ÎF+4ò·Hm™+€ƒàZ}«Eá _Ãþ4´Ô.æ˜ëì'œE]Ü‘h›fS¼Êb•ñ Œ®d$€Tšù¨Vr«)7¡ìûqŠè.³áˆ$Ö´í/Ãúö– ú•´Ö³Â÷A·²(‚ßË)g€2îf$‚ SÀ;ñÃÆZß_Xø>ûMÓ¢“N¼¶FhcŽ>M¾èò¦@›I`ãåóô7Ä|9 hÚ:ĺ¥¨–)-ôûh`Vkydƒjù;U‹Å•ùŒ¼+1$sÇøÂïRðÿÛ¨RêÎ)|E~ÓGn¸·Ô•ÌiÚ&žä²aµ@íYÔ©e¥Ú3­F>ÏÞÑù;ZøâçÂV·r^ÞÞÚ´WrÅ™"lF eBçÉÏqšõ?‚µE¿|t_‰š]Ž«¤X‰KÉ|ó,î²õaƒä’ªÄsæLà-tß~GãŸhöZ/‡›XÒïæç×®®VKud‡/ocl¤•Ü„ŽìÍžp â»†uMÇzŸ…t¿ Áá}o[†ÖX%Ži>ÕnàÄ$ŠVPb™ l`F ÿ(8®Žxr^[³ÏÃåò¡6Óßæxí%gðºÒò×ÂÛl­g¼Q6¶Ÿ»Yß;U®2HcòŽ? W|š‹ø;JmcÁÞ%)2­‚ÙÛ¶ ˜#™Û˜€ãx#Ú3ÉÍdþÙŸü+ñFÿJmRçGM:à4W`.‘ÌeU‡kcæÀOI5ìÅàñðªkg¹ÔuØ/g3êV7ÖöèUŒ>UX2Y€8Ëœ“Šås£[·s\6¤jÊš•þ{|&ñmßÄïƒ^ûUÕ̉kss¢Ÿ!‰|y0³.<½ª,¼€ÍÖŸð¶úîïXŸÁºæ‘4ÚÄ>ÔÑÆâÚÀ€ä´9Eù[!7àž9é>=ë— ´Û}#àU¦…¦%ˆ‹ìCÎy×%Ö2¿½|)P€–ÆNEqá]WÂ~=¹ñmö­} žßìÓGgqˆç‘g,²Í/Ì1ÞXÁ#&°„bÝÛ²=z‘”R„ÚÜèüáû_ j÷Ú5†‰«X%œ ©éËvË5ËNŽ ¬­ÓfÆœc;M|ÿûMütÔ¡–3ß[X0dd.ÑÒÉѶœ3óÐ×´xÏâMí·Ž4}~9µHtmBãw…ŠYIS»–Þ»”³)R8È#¥yþ­cñóâƒêRZþù'‚ÂXg†yÀ3"ù¨§cmòJgnNIN“µE¢1ÄòÔ‡$¯Øñχ_µ%ÏÆ¯ßøwLŸMÓ"h¦ino’C Â…ÚŸ2ä³)bê2Tdð+×#’ÞmÖ×àà–Ö‡ìö—,ÂT ÆÕC!Ã>yà⺇Ÿ|=®ê­ëø>×IÐ4û‰|½VÍ"’ãVœ;kölÌBoYÜ(q]L^ ½–óFÕ¾\é?ðY]A-Å¥öž¶23n´Ë‘9ÛÈLn=3‚*êÊœ¢¬¼Ìha*Óƒ¦çuøüžü ûfÚx"öÚÆËOÒaÓ¯gû5¨·_,@Ò6[lx!Q˜ç$us^ûð.ûá·‰¼ ¨ø…ìt!­ntËy¯¶û¨VïrÈOÊûÕwarx°­e…^7ñì ácã FôN«ué4Ê„É*$T&í¸=ïÍtžø ¦üMѵèu½ZÿFÑgº'EŽvúSd,‚A™Ý‰^TŒ/ç*ôÔmïøáèUÃËâR™ñ'íÃð¾?iºLÞ&ñž7‰¯nšÓm¬ˆ‚;T]ì—“nu2Ç#ª ª2®['ü!ñΟà…Ê·VÐ_iN­½ÃÉktÒHe}Å^[zñ^™ûr|:øuàmB ü^Ðõ+XÞ»›Lû\!B¬ÖòÆvHNÍÀúWÏ׿4ßxïÃz‚Žl$i®®n ×3ª¡Û p¹Ú÷ˆÅvTœ±£‡ŠÑù;™sÒ¯Ëkiß¹ö¯ÂŸö_/tKO‰–J¢Ô‰-ï¬]­Þ"A ÒÊ Y#€¤Ðtâ½_Ãÿ ¼©i¾uyáÍ%â°4ÛLïò~ê&%·cpqÆ; Wȶч7VÖÑÞ¤÷v qh%eD‘ ìGR¤`¡äƒÍ{7ÁÚwTðž«lþ!xµ‰õ%°‚{y[÷"Lk$MÀ˜Œ½’1Šù8NTå*s½ÑÛ•fNîñ2Õeøgo¿ÁºjÃ%¸2=»:Ḃ ä£!È'8rO¦sZ¾6±ñwćþÖ|c rèÒ,Nó‹Iä©|Àíó¾zmã€3Ï?Ä¿›(ì×ÄšD×Ou²YáíšfvP¬»Sæ'9tî_~ ]xcÃV3iúÖ³ wÉæµþ.J ŸI Þª3ÀÐ×Uæš—GÔìÃrbêÊ’w_CÉ­|yâ¿øE¯¡ø© 1ÜÝÎkxƒ«ÑÛaÂ0*Jó´}Óë_E~η¾ ø«â]sÀÚ„ï§Ei)÷9k¥’!岃Ó¸ô׎þÔ^¿²ñ厳m§»èVVâIÖ¾Y§*ѬH2I Øs‘ÇJê?go\i ’oùPÝé¥]®’àÌŒÊÐc{ £åÉxšÇFѾ*Áu öÓµ•ŠÚíì7° _,—ÌùT1piÿ~(x/VñMÌŸ›P×-ôëä¸Óç-©¶q€4`6r[†'ëѾxkÀú«ßêÞŒC6¼â[µF!®$L¸%]³È`÷5éR¯nÙN¼q³q§(·ø™žøo¥Û5ÅÇ…üMJÑE ¥¿Ù®gqó˜g1ó›áHàðGézoM¯‡§Ó¼˜RÍ£ W$íeO)‚HêkŸO†>ø໹m-..M£6¤ÐûA–QŸš5=dÇ.3Š‹¿i/ øÀ¶Zî¥%õÕÚùq­µœžzÈ,.caèF:zÖÆ£º6ŒeB6jÇÎ_ÿcè>9’ïÁZlúŽƒ?ïÞò=\Ã{¼àH¶p¨ük®ÔþjZ—ƒŽâßx‰cÓpä\,%Ãm;L‡>XÏð•aƒœÏ´øã߆þ/èv_ u½¾¶ŒK4hñËnîÐÈ@ùr9P@ýk‹ñÿ‹åðµ¥ì¿§pÒʲµ½šË¾Û9É0‚ Jí;ƒŽkIÒŒ©¸4rÆ;¹Eoº>-ý dk>ÂÿSðŒVv·ÐK.9ÍÄw Ü´©$„p1Ä`漓Fð¯ˆ< j—žÔ¦²¾dò¾é¢°éÍ~„ü9øýg}£øGÀ××1ªjözké­õËDn£G6±``,Ϫp~éäWÓ??à¦~ø±¢ó\^½º]5¼e²lýØ*ªÀ 7n` äQVú[î:ðòçÒ÷Iu+K·ñRÚéÚŽ¥¡#Á®Þ,¡Œ’Í+ÆÅvŽT&Üã,à šÓ^Ñ~$È-ÚÓ[¶³Ò.åj3YIµ£´AÈgP%.6ÜfEÛš÷½{áÕ¿ÄÿZ^x+BÑ罜'Ûí®n^A`¾af‡ƒ Fá€Á×1ñOáM¦¥b Ñui¦·ÒöØI¤Ãæ:«3$7HvJ£s7 `ƒDjEÙ­ß Sëùœzø3E±¹³µÒìõ}e.<4mm®%™ÂùOŒÝËnŲ)`ß3€f±lþiz$·×_ 5CIIþÏÓâ1ÜGh‚’£ s•òÏ÷«Ð|%ðˆøjû]ñ¥î“¨Ëªý†âUšèȲ@ê™07;" @£h95å·ÍÄÈ-¢‡MÔ¯bþÍŠúQ%¼—Ê¥ºü­#¡ÿVûŽéZÒ\Ú)iæKå廡Ð| ‡þÏiOŠu»íNo‰/ež}1­ÈÔÈcI¢O.I6Ç×q,KsÇ^ñ×¢Ôü-à{ ÁÚ…ôµM9áÊe·ˆÔÉ$›‘™y îÜ œŽ•ÈøGáëÃñØxsİ.›ÜBpÚ…ãͤ¤JË*Ú31 dÚÊÁ†8®:‹ËÍ;â6q ü:Ä2ëpÂL:¬·(—3:ç ÐJꌒ.v’RA$“z¿òe(ݵc•»ðÍ–­ãû_UŸWŽóPÓ†š÷Ú„Âk˜€“‰c·‚Hë¨up¸¨ü;øOi¢kúš]꺖»Ÿ3_Åý¼¶Î–¢HN!òÖ1æIódmåJ…Ú:&ø;§øâ¸ñƹqq¦èqý²îÞ+yíVK¥?´ìBìßëQL ØÆ\uÅXÓ| qa®hz¿…5/ÞÉ%¼‚o·yòYZÂbá¤r ÊÊ-`1ã#Ó ¤¬Œ¥¬¹¥ξ$üGÕ5½{SÒ¾éúÞ‹giYÞj7Ð[iפ3½{¸˜ËdÈ$T,9RIÅAáßkº—Ú>!iº¬öŸÚ?Úh‰á pÌ© $º ÂÝJîEHð§æ?xçÒu¤±ðž£kbmnZFo6òÙî.f‚ݰb ¼‹°T äŽzp>(¿ºðŽ™e¨ø§QƒNKY³4» ›èå’çÏBµ¼d@ ü¼ÜŽW0œæ¿Ïr§Êzééý}çwáËÿÛ|Kµñ޵oÏ«Y@à]ê-$štr¬/ʃ!\!°$Œ m.Ÿã{8­´—Ó­m®Z‚;+Im#ŽÝ·FUî‚ §k“ØgqçŽ;AðοñKWÑ­üMª›2=m>æÑ‘á7+ÇÎn#c ¯³<˵”‘ß5sãW‡/´+Q©ë·ºá]qÄÙpù‘íòÔ&ûtVI»H¼°SÈ j#hï¹\·½¶<Ý´Èô?É«ÚÆ²ê÷ZÚ6›«eXX°žW\î· 0Ä6@à` µ¬øphšlšß´ë'¶Ô5"mì<¥û¼-ò)ŽSó¹ ;%ˆfÀ#Œd¬¶7~—[ðž¹sq'ŠfŠ8´öšê]—Í i®®]¶í!˜!$Á9ùG}àýFÖü!<ÒÚÏsq¦¨‹T‚î?³ÚÈ>Ô¥ «ýÐ ²‚z Ä JPÕê¾Eû­)·¹“âh­µû8­¯í|C®ÞßÜǵŠÙ®&Iv–6d$’7®Ð¿ðâx¿O×þ'Ýë–þ½Ónü+¥ÞÚÝß<¨oæ‹ M"Æ$•sŒ°T#ÔSâ/¯õ[MwWƒE¿Õîôma5 ®lš_*2°*,Hp˜‘U€–Éc‰¼oãÔt;]Oá…ŒÝÝ…Sm©Þ<ó$ÕÀ¶Š5Þ;P–ÄŒ 9S ©=4õó2¨Ôn¤¾ãoÃs~[<ÞzC4vee¶¾>Qv˜A#3G†TY2­)LsÒ\üBÒõmq4û¦} ×Ùoý ¬fd!yKä3„É`¤ q^kã„ÒüAKh| âíKMñ&£l.¯òt–+f€ïFõcem¨v[|¬ü.°³âºúÚÃö‰V+™"0• ÊœDŠüHTλy$®u`¦š“V_‰ŒgRNÓV_™¥ªø>ÖÓÄÖÇ쫤êDÁer\È“ø\R‡Ú3Dw¯Ùƒzî !úV¹.Cm°Ífx/CMÃ:}«Æ7Y'•=PãæéÁêzÖ›ƒ›‚¥WÊu‰3ë€IúkƒïTm Ò½•Év—…•nP ‚:ŸSZzE®Øº‚û·±cœ“Ó5˜’0‘ŒD(SòNÜþ­tZ ´f&ûT„Hûªª3ó{ÕP6ÄÖŸ³‹l_/ûNà[ÊÛ";Ri‹ì |ŽÿOz·Ž-ì‘õ›He¶Ó—ψFûäóY€M™À`dðj­œê®]€êRB’/,€Œgêø'Ð FŒjBv»Ô£‚ÛM$…”£ *vÉqŒú ¹®èÞ*ç—[]²^Oô3|C¨\jWvvÓÙÒ5ñ‘·-Áç‘“’>”Ñ–áä´Æ.# ÙØ;·¦x•^•ãe·T™TÜ$~|²!ÊHFH$sÓÐt¨M€¶½#Í ™mÊ < ´‘:€qžø5Å*srºgu)ÅG–߀ۋ…’s–È6¤†ÎÓóp~o˜ö\C öiE`ÛÔʤ’øÇ:r2)$³þÖ•Yà° ïÚŒ ‚\Ä`}Î=*î—}ÞL· Ç;¬Žß'Êᘕù¹È=*£_3åhÞ;úÜÜ™4ygœõ²0l‰Xc»3 r}?š.ú"ÐÜ#²dÈåsßœqO´I$r\ÉMÇ,2EÇ6y\µæÝ¶¦Ô-¬‡s9TS‘ó¦ì½G3S(èßP‹µ•·ضœÈ›$‹&GPÈÈsÝ\sÁƒUä²\Q´l¾«œ°^Ø'¨í»ÛÞ¥xæC¨GÚ¤R6¢Gãž9ã jPyÓÍw8Špª±…þ¿tx’”ÒM IA¹Ô ÌPG.Ù,½$ã#ž1\ïÄ(uï Ïg«´^TM,žTŠw$¤1ŒŽGµfx“âõµÆ¬ú'Ãèÿ¶µÉ­üà–®žL*­œ»7Ê£ ˜–npSðÁk⎥¦êŸnä]°n“Gƒ n?ÄG-ŽGÍØ×JÀ§ÔvòêÎYb}´\b®»½—|]¯h~פÖzÞ½©´6ª!híŠC ÂC”*…Êý b8®WáL1üUñ\V¿®n-5[KÓ©iÖ©]/QòÕåkyÿ»ˆÁËãæ89çí?Žß³>‘ã†qx{Á¶–?Ø’ý¯OE‰U “Ù\ò]»œ1æ¾+¼ø_q¦xðiö~(Òµ-Ud*,u0–—÷ᢠ–&á¤ÁP ©9­á™T‹ötÒQüYò˜ŒÂÕUæ^äz_Æ‹í â”r‹ {rÓV†=š²ñ¼zs°ù’-»Qs¶0ä` Øæ¼âµ}áÿ \Y>›®¿‹î™„:e­ÎèB.‰AP­°.ì§Þ$üÀÖ­÷‚´ßøH.5/Ë{¤_êPGsr²Ïjq¶H匎ß+ È@n>µÑü=øõíÞg©&¼š&•!•gŠc—1meB]!I#’0¹$°ÇKÒq«ï+üŽJ”#Š—½düޝöøÂ‹ð“^Ð>$[ÝhójZeÝÈxìe{›ˆLC&U8òØ4g†á€y¯¾'ÙÍñ§ÇÖZ)¼‡Ãº¥Ã´~må³Ü¢‚WÃ6+n$8<ž+ìüAѬ<%'†~%ê×+¨ø‹O1¶ÞC2›¬Gþ]™—|d¶¸ÆM|sñ#ñâÛhº®¬Úš;Iu-]eUc„‰fQò‡\f2Im¤ôê+U¯í"­¡†:Ÿµ(¥w±Ñü*ÿ‚}Yx‚úÅ4mdxç[’ëÍÛoÚÛ]ª&õŽÝ%rÆVenY€Uµõ…<%®xcOµµÐtfð¶¡tØ“[»ÜéòFæ'ófÎäÉfîC*îè+’Ÿá‡†ÿgßxFy~Ý­ÿÂ3B¦ckö¬Hól¡äqU=«–ý¤ÿhmgãÏo§ð¶©?ËÙÊÀ€t›‘_ïF­"†à çã<Ú­V©©uÞÆ’,?îºÞͼ{û$xžÃÀÍí-{¥ÜØøƒPŽîå­˜Inï™M²,Jžc³–&0Ç'9èj¶«¢XxB÷GÐ|3àÝ&ëÚdðµÄ©yWéT«Kl³B¢»7%ˆÂõ«(ð³7Âi¬¾k“ÜêZ[ ôøï¤‘¯nц2C,c]ÛÔ Ä xwÂ?Ù&ûÄGJ×üqâ&oáPÒ÷Hö¶öùY\FCÈÁU#©ÅwRÄW»ö­8ô·ù¡?iûµeß¹¯¯þÚð¨¾Üé±øRçF×ÜÝ›ãp×hXåg@Áˆ …Ü@!€â²X#5«ñ3ön³øÍñÞöë[x´û8^Gi i®®B’cZJ§PŒ>q•pqŠÉ? ðwôÝÃ:+ÞÄ—oh¶RÌÓKð¼{› ãŸá=08ªúõ–š·ø£(Iºï}‡|4¶Õ¼ ðóûGĶVÐ?–²ŽçË´;YG—l¤î*~yJ“.$gÐÿg}.ׯÍâ}YWÔ/$[{k\‡Š6PÌò¤ubÈÎ2U—¦kå¢Ô|A~šûÛD¶éäÇçoȬv®ÒNíÍŒõ,zš?g_Œ~/ø‡âû?|%’ÂÏO%¤ŽUù>Å‚ÎÏ„†I2XŒüÌ;šÁâ'н |ÅÔ¨ ¢ßcí[m>ö 'YƒÄ:íåÅÅüojw±}Žo0¤ÊÊ`ç+¸’FIé¹yá |1©Û7…ã‚m>öÔµÛ=¥„hLP…;œ—9ÆÑëÐóËOƒºç…¼¶¿ÛñëzÆ›åÞ$³ÈÓDKɇ†˜e à1$Ÿo$ñÇ‹~+Û|K·±ð6Ÿ}­^E3Fg»·‘íXp¤`C‚d }k•JwäŠV;êVörWެú/âu‹ü@ðÝæ“á{ÝCÃñ™¤ƒíPF€Ü•Ú3»À¸#{eôjÒøðÍ"ðì××7'Q³žÉmd¼½¸,û ò:¢9Áü)tÿMá]L>Kxm´ø’=CHÒ­â)rîÛä+$Žh²1lðix®ò×áß…ÖÇBm¥Et¦DóÑ>P(Dƒa‰·…Ç<ÖueÍAôÔcyÈ¥ŒŠô³¦ér\Aak yuòí™Ö7Çîö.8+ÉS‚ÇZóŠßµÏƒ®’]6ßJþÌ J3*Χî:à u¿5sÁ1E£Xx¶= TÒ ´ »hl‘]-ÐçÎ;pw6Q¸ýkÎ>=~ÎúŸÆ‡VÀ7F£ªÙÊ·v iy¬Úœ;ÉxRÛ ŠAÚôÇJçqŠ’NG6"u«Á:[χ~1èµÇÛŸÅcâ'Š{­B=8­´XpéoX+IŒƒ¹ˆ=p1\Ž£q¢|Ñõ¯]ø“QÔ4}FE{™â°XäÜ—y]ÁX€A §h Íyçƒÿeü9ð¥íÖ£à;ɦ´qˆîvM W`LFJäƒæ<03^Ïàx;Ä’éÞñîÿê~T[ êÅoŒªvÀ]p‰…óŒ’@áN.ž†ð^ÑÅOÝŸÏ_‘î ¾-èImΰ„߯ӯZiZ­¡A3ä+’•Q‚Nyë\oÄ¿ÚgFÔ~Iuc‘-ÃËk U‚„7œŽGúŠñÿÚâ™ø'ã…¹‹DK¨Ú(â[s$šw9P=1Šùßã‰î·¥²ð•Íœ’x•ÕÁEiU,ÌåxQÎ ç¨ëZBÄ»™ãs ÐNßcÜtØ¢øµ jPx¯Äö·Öúv•<öðI+Ëum"•!cÎ@aÎGÏœWœhþÓ#ñ#dMM%™€ÛKhd–üWtŸp«.s‚{w5æ¶ž%Ñü¯i‹osxºØ–BÉ&ÑsÍŒê:ò=«Ðlk»xÂÆ×â.‰m®=¶Û&TJ 8Ç—2€ÈüðN}ó].…WbÛÃ$ª&ž×<÷ÀŸüoñ¹î¾4Äúö•f“Ûaoʲºìaò¥£ÜXÜ£#õì%àÿøCÂ:¶±ð¢óUû6§u–ój×y’<~d‘(H€UbÎ:œsŽ•[âì}¥øóL¶ñ€4ï ØøwQqw¨C¬)°Ö`umÌŸ»]ŽX€¥Á\©"½?à‚|7áO†:÷‚4h­#Ó®˜GpY® RÆŠUÚCœ`9Àn*e8ʇ³m§ò;²êÀÏ–Hëî¼Qki­Zé×WQÇ}u“o I(?*÷àøV…½íÙ?,äb¾"ø¡yöÏŠú‰4]{]±´ÒnZþV–A,ñ\)g1E¼cbÅ6ð¾8®ïá÷ÇÏþÒ~%²ðž½7†žþÝ’Ô6™Þéâ&PòY©É|‘ sô¸!…ucÍió;ðù¤1tÚê}Q¦hV:r=É´²_,4’MötUA,Å‚ôI¯Ö¿lm^ïY×l¾ÏÎ¥dˆúlRZyºnÐÙ/rêÊ|½¿Â§sn8ºM3Áºÿޝ›UñHñ7Šnml—K–;&:u®¡ N]Uí-HÞ¬ß1;““ƒŠà>%|ø‰ðÚ{ígÀözG†t;™b¹¹Ò†mBwËÅ%!@ÛóG8SSïbæïë·âcŠÄÖ“Jвëý#Ð>|Ônä¸Õµ•m2 Û©ou-VK¯*0̧{à »ÖS–+, ªœýv4-ÞÎâOxkM_ ø[K—ËŽæÑ“UÜÛÅÄ!U^RI9rOæ¾ý­üCûCë6þñ·…—LÒäÝ²Ò y#ŠL2Ërí÷ÚrOSjõÛgƒOAp¯<ð*}¡á'l-Œîïmãƒ×¥z3¥4ùe·õت4éÁsGWÜñŽ—×^µ¹·ÒÔû#fžXœ[Ÿ¾T| ‘êEy¾ƒû_®‘â½.=Fo´BÌ“ÀïpU›¡Yº“מ£­{ŸÆͯC^ÑõK¿ío/Î[+p@»rÏ!!œ³­É$`×ÄZ/ìïâ¼},Ú\¥¬åìá¼_%šV•L¸åp:`ô®Œ-:5bÝIY#‡NªªªA¶û§~ ûÅ/‚·:Ù–âågmNÜApŒê¥¶ÆX[%O¯¶AOwmðyôô‡E»‚Ï\ÔÃ=Ã[ od-´ ie<ù@2±RqœžkæèÙuª^F(^<NîB“Y´¢|{ðö•Š-¬E­„“®#Moc ;¼Òç({ào õ¡wðSÄ(´‹Qøsa`ÚuëNa¸ó–4[xvˆ¦\aó0.ÙUUm¹¯5ó©ûrèú³5×Ω£Í$Iö™‡Î™He.MÀüà ŒEo‡Â:Ö©ù—CÉÆÂ¬¯²´Oh›ÁšÃïƒK¢kðÛk>yµÛ*ÚØÉû²Ä‡“’ÌÀ)!¸ÀÀËqå^ý­Tðý½î¥o´×S-ì qdK „S6váY†óž‹øC§¬ßµg‚/õo‰v³§ ÞÅo¡O[&Tm•áuÀ]Üg‘׎õ'<aƒdšuŒHú]º˜œ7n\²±êÄñ’3É­½šMÆäÔøÅ8»¯Œ¯­tM2ëSŽfšUÊ–ufòwg‚ '$ô¬?Ù3ö¢ñ€þ&ŪéÚŒ3Z¤–»áQ—"*Ÿ˜†Æâ\çµ3\ø³¥éþ#¸±Ö"7\ˆ&¶¶R<[@bŽ3ó7SŒŒdu¯¥¿e? õRK¿ƒGQ½ÕV!ö{Ë_6æ7ùž0)’<  o¼OÚ…8á¡)N-ßb²Ìµ©ÎžÇ¸ø áΩà»ã§M7‹´…DöKakmk%¬s+OvL„ÇÂü¤W+ð½¢ø_âÛïülѼ—u¨Á§é }j8˜Oå‘9RÁíÜ ªÇsÀÅ{V‹¨økD‡P×üeo>¬¡õ7±C-ÅåÜ6»•&wȪ¥ 0ë· sz—ÂÍ{ö­×ÔøÂâÿFø}gw ͺ-çñ h©" ÛAUî *„'nܽ\Tj^\ëK3ëql¹Z4¾"|Ö.þè³øoXðŸ„uïYù77²i­u¤Ël®Öˆ ÚxŠKŸ$O­ÞŸ2}”É8šÐÉ,¥¢É'+Üc¥vÚ?…áñLJõgñíö£{¤\dz†ãO’ÚkgóÙ@`[ÌRÌw“€ö¼*nT×3w¿õ±íÍ*žêüWâl¶ ca?†f½·Ó3¦¶±-Š5­Ü…@k8ä')·k3H¤Êòv‘^yàßÙ½|?¤Ý[xÎî=WÂí"ÜKqu{ö;(nBê»P±‘öœ–`ªÄ¨Íu_§°ø2úG†¼s¦Øi—SÛÝYÑ/QšxÊ”gÄJó`©Á µÛ‘œEñn§«_|/Y5íO‹P—Tf{{Û8¤³tŒÑÄ~æÙ6$õE?ÅW._tÅCš¥¤õ8Â:w„üá;ÿ…šDšLPj·òZÛjRJª±—t¯s‘ dMÌ|° ÕσÞ¶ÐtÍj Oâ»» Z9 ‘VKQÓ¼£sË$› ý #µzŸ„¼¦èÞ Ô¼=.¹©x•ôÄ:T·Ö³y—Žæ\ȬP*†åغàãÒ¾Ôþ#|ið·‰5¸~}TxŒí{O·ylX3;mc³w=>ñûÕöG‹K•uãµ±·‹Î±•K3ÜD†]êJ‚—%¶³ç9ªŒ?sIêsájÊ¥I>K:÷Â-vëÖúMÅĺp¶Coi}y¨¥Îvù ˜ämÇ\Þ¹y~Úéž»µÔ|g}ªÞhÍ+] FÑ Ö†A°4M dýÖebGC^•â-Ãü#&©à-A5&šéîo,ã¹JóUd1°%SxÜ’{×›è¶zýððìvðXjª±…×ÈkÙ`—ËÞ‘]Ê$jS$! ’*"ùõ}Š©)&Õî?áO€ÿá øWm§x›SÖîíõÏks{e¶d• ®™Á å\ð@æºÿ‡Þ_Âܶ§>©ãKÝ>w{c¨ÚÆ&·MÁ•"`ª]rw)<äžM`ø«Äž"ð·‡´{Có`†í­.'žö+9ÐîØ]Yó°iQŒœu®GøÑã«Í?IžV³Ôø%–¯gf6%ÜAÂFÒï?/$sPäÜ­ÜÏÛS¥ºÕšoíÔ-3§øˆ´Aá‘ÌVªX¤t‚pϨë\V¯%ÿÂï Oâÿ„×vÉ«½±†áïöÄ÷(ÔÇ`á·Läœm*ÀJò¿ŠŸ²¿Ä {W}KÂú¾—g"ÜJ’G<ÛŽðYÓ2¦W•,8¯BøSð÷Åø^·®5+OÕ ¸–mDÜd‰ÑŽÕØ¿:Ä6F:×]:QŠmKWÐó¡_9?j½Þ‡³üµ¾ºñN¡â[ ŤøºÊÒHŒ’ºÀ.¤*×lØ™B€W$°$Œu&M&oüFøªê–6Ïck¤éþv­-µó[i÷a×,ÁwI¸) s‘\·Œ~+ 3þ$Õ<¢ =>ûUS<èX ¸uÝ$‘‚GÌxû‘_7Ÿ‹º~µªÌºžö­RÖåfH‚eˆ9òäà1Ïžâ¥ÆNwZ$:ù”pª4Ö·Ý´wðUïøoöƒø}á_ê ¯[iš…¾‡wy¤¨ÈöîÃyppd|ïUÎ a_~ʺgŒ<'®éÚÅÿ{¢[܈`{FËt"$˜Ðìn3“é‘íõ§í“m |Hý›âÓ­×NÑìõ W½’km8³Ã©n³l†mË÷Fò¸¯ÿ‚wiº&…áŸ[ø¯ÄFîí’Ök‰ÌfŽO1ØcaPvÀîVõ Ç£,C†SƒÕ|Î…ðp°ø‡£k£ö„¾¼Ñõ=bHî,îd½:ˆÚU·A$ÀªI rW Ó$ןév÷ß¾?xwTÑõ]3SƒÃíöé&‡Ùæ ¤|÷!œï¸{W{«~ËWi” |VÛ“GCb†îYí *§-#€ÌXo›±\y¬ÿ^.cñA§ÝùvpH°]µÂM@¨²†cË—,:W…Rtqr­îÊú[S“WZ?öò9ŒŸ5ÿèZK~Ï—÷Oâ«É.5K}.îí£žEšL%œ…؇e¾P+Õþü`ñï!‹ãÞ¥¥ö« ê6s+›•Ž)`’OîHì©åp Ǽƒâ·ˆü_á­gT¿Õcú4¡`K"<€üÂ$Lýã“‚FŒŒƒ]Gì³â=oB—HñÐôÝÀÓFåI26 Yr];KcÔëÔ1½¿t»]NÎá_Pí ¥ÓÈTî$•ã=qüC®MAª~óWó=Gìñød¥£¶ýW©òÄ(5ÿé-ÃÛx¯îS3o¸XdW<¡»c'vyÎ+Úa‚~0øiáëÏx‘/ŽËçÜÅ/˜‹¼|¤ÀÌyü¤aÞ¸ˆßÓÃßÓÄšg‰õÒ®îP2Åßì±Èr,]—'o=ëèø‘ï´Ü|20éÚEàÝw3Kö–Û½Udv /’0áØœ×¯¥ ÆÖg—„Áû ë«[>èµã¯‹ÖžÐ ½ïo"ù¤ž µKbS _!¶ýáÈc5æ> ý§4­Oᾯ¦éI6­Pý®ê;¸÷GknÜ:å”ȓҵÿiµÅޝý“½Î³5¼ÒÇ#Ç"ǰ ²"¤ªŽw=²;WË^Ð.]/ðÙÞX4R,&ãa½‡½„«¡áwn<ƒŠUpô+«½ûžæ+O0‡4×Íš^Ó/®RIµén¯ôÃ÷ñL CÅA>i€~÷|v5ÎXj^½×â´øYlmn•þÝ(¶‰¦{¤æ@-€$ž}ëôÇãì»áß‹~ºƒN°´ÐuY™¥R³·X¥-ƒµdÚôÏ8©ºÆðD^ n6JH ÃÏLŠÆœg­yÜçÃ:•_²•O“ÿ‚z÷€¼GðÓIøQ¢jž¼†ÞÆÛLšÚ %¯#‰"Q.ÙÄ~Vbˆƒ‘žZåþ5|QÔ<`e´×õY¬ôùîL^u½ÐŠßL^3É…SØ3(cæÿ¿aÿ¶“wÃ÷mk/’#¼WRÁf‘ ñŽ@ àê pžø—â¯:ji¾&²‚m?M\Aeuh‘KÊHÚ\|Ç“ŸlWwÖÝ7zÑ=yæ5(ES« -®»®µË/ü7Ò<;§5Åþ“{k¾Þiïݧԇ–^ 0;6ÉÁŒm?{§·©x0«i&õ=ÃÞ±´»ñ®¡ªxeX&žº\—6wìí|ŒÄÌÑ ¯„”àòH\×›ZüðçÄïŠÖ3ü;Õ5Ë mXɨõ)|×Â2Oó.Õ<ädäŒWSñ+ÏÛxkPøW¤ÚxšÖ)m.`¸Óm¥Œ4£!•¼™tPc!‰V AWSñ{ÄWVöš`øO¥Eqg=Ó3]XtÐÜã˜äŒ2¼=Ç50mÿ_æUXƳå~¿×™Ìxãâf¦YÝë^=û@ŽóRm:8uIŠí€Ý"0ù“{$´í­y®½ût$­®œ—7É*²™²îª¸éœdsœ‘]‰õ(ìÃyǸž-m¯ì!d$.à‡#…'Ôˆ|M¬ip_ï>yeÆzm€Ç?…/h¶g‹šcªÐqöNÉýç×ß .uoÚ#TºO†—:†¡KpâòKË…žâDŽO6(–HÊ$’6Á‡ Œæ¶<+ᆖÿïÆðYk:í®¢.nÂè²[¥ÈØ×1(ô8óϯÇ ¼W'ÂýróU¾Õ$‘n!Ú"óÅ»E'>bÁˆ.xWKÔ´}&ÊòæÖØÛ=Ô’0™no+,ñ·¨ßŒ0ÀëÖˆÖRzìN 1x¥ËWâ_sù§Å/‰ú'ƒõ}^ÇA¿¶‹_ghÜPýžÄ!9f–r²ž€'Ý9šgƧ¼Ñ|!¥ø^[÷ðíòµ„—–ö†X-VXÈUšá\ý‹ôo/ä à¼CðÃ_õÝI¼tú¥Žº$û@ÑœFÍYØcŽ1ô4¿³Âiþx¥,¼'â†Ölïíf…4ùåÛÒ¸a°ù÷N Æ+YNMJít±ë*µc>enW÷£Œµðh_c†ZÌóêþ-´Óì.$™%´¶H匰º`ð|À§‰u+¯jZßkQE%°óÅòÏ5ó)ØñÆHcG—“˧B2 v¯‰WÅâÒˆ6‹aay©Ýê²Ç-еkHªù{(IHSsŠì¡‰QX^!ðF»¢kð‰|ÓÖÖ]BÊÖ]JþâI“û:ûû™a‡{M+¹;¤Û…ÉÜœ¥«z.)8®S¯×´-cú>¡á½&].ÊÈK·E¼9qpð)Ádk…uFlâ2Ê r I>MñÁRhR¯‡|G…uÝU&m.í­.~Ïra\)¶†PUIbÜ© çd“ÜüSÌ:­´Ò›´›LÏ«—Y æ1ðÉ"ùn##o–cÙAÁñwƒ&_øGîï`û\ m$6ÑgËÔ®,Õ¶¬ë*+²¹v Ñcç`äƬ¥’؉i.g­Êz¥Æ…wkcu¡^hÛÛEk¥\C£í HÇÏrÜ$.ø›Ë·€ªY³šëuxgY™d¹’ÆööîpC4‚[/'r¢[ùñ–ü‚=øùcE“8`¦¸IôÍ+ÃþŸK´ñF¡áHÞá.ï•4à·wQò#1¹S!–O¸²&Ä “Î ®Ó^ø‡wwñƒWu¹—ìÿÚq®™¥Ü[-º]y0Ç%`Ë „ò¼KÌpT¹[M™jîãÕ˜)áÝ{N[ˆ–ö9n劭RQ«¨Üd7/C…ˆñ…ÜOB}Oà7ˆ"ñ&‡áý.Õ¬ÞIµ1$ÐBÄùQ!kü£á¶‘ýãŠòx!ð†¡}¯êòX.J®›¢J. †E˜•3IÂùeÝ3Élàó’=À¾¹¿·k4ûm^ÊK‹¹EäÖóØPÂ)AP±äyA*íÀ$1ù¦ÓØÏ M²ih}[m›f 2mìBã9ƒŒŠ/ÍÑ{šBß¼Éä°Æ2ÐU= ÆÜèöh¶YK(ž;—Êo³¤Fca:qÁ­PdÞç,Èd`9(}=û~µåâi¨Ôiw>â„Ü¢›'°²óäf½m½;“þ5ÖÙèbãLŒB¬ »cw?)¤“Éö¬-Mkë¨ÄGˆÈÇÜ翹⻤Æmby­ Qµšcòç$äâöQ׿½ &ñnÇ™â9,¯©Œšsj:tï4Q§Ï€­ï…+ܞج{ÉZæÖûû1Á¶kƉ‰ZIVóBw]8?+©…AŸ›8ý+"HކtÛkA°Þy‚ÉòùóíN³ŠVlÇ ¥7wýÁ+&Ž•„/ó ~àÁíÔ“ù梹y®­mDeÄ“…ò”6âFppGáúV½ö²n.Š[T1C´Æüg±×ëÒªOmÒZ\ØnŒX§¬©·8rÁˆ=ñÁ(Gu#ÑIétT·¸…üöºr°¤Jžk±£‚>îsÛã8Ï&«r—s PŸ´»e¾B7ê;’~µ˜–ée/ÚnÕ«áÉmÇ€}s»—2‹ÚæËÞÛ±«=§‘¢çÊû5ÅÛE2F3‘øÊçø¹íœT—“i÷¡vuŒmÂõBxÉÎGA×89ïYZ·Ží<'e$Úõôv±ªŒ—\)“8ùø˜ã¢‚z{W›§¼Sñyü i«pö×w ñÌЗÅGRàHöÉÇ¡ ;§/u³‹ä½/ës¯ø³ñEø}joµ;¨¦ "g0yrqò®29Ûœ'èp¦ðOŠ>)JÛÆNÞðÍý¢}™-çßw8“;·¶26ôtÍtžø=¦øóVŸOI®o/Iinnf»8Qó(9C gqŽ•Õ ³¥Ò/lm¢»¼Ž˜¢iK:s´íqÔ€Ù#Ôp+OmN5ó{ýÄ*3’N£¿—MŠ~i¾ðõ¬^ÓbŠXc -Ó¨3Π`8Éû¤žëgHó%‘þɽeòwyÄù|gFã+¸œ轪XÚÆ`ušyG˜nî"ùmãeð89Àô柨^µÞ­i!’óIŒecÏð…9v=w”cŠ\‰µ'+²eVIò¨Ù_×èiŸ«=ÝÂÝ(Ò$)ëÏ¿¾zf¸˜ü áäK–ºðÞ’—×!‰"ÝUËtw¯ÖºûßXA$Ö÷Œ~αJL* Ò`}ÑØ’G®+žçûM:”å>ÒÍä…a´–$¨ã«å‰àb³ÄòGø3,4jUoÛ|´±á´?ì1¢xîÕ%°·†0Òne›!@ÂìU|®:qŽ1_7xÉgýž|i%µäZ'‰m®·Y%½´Iyo•ÉIR2o t ýuâÚ ïÄ÷÷:gÂè#Õ$†$·“S$¼0¹f@\¯°8ç8©|?û?è–WWwÞ&µµÔuÛˆÂhÇA*(êQÐ Ÿ37Ý$¶IbrkŠ)9ÏnÝMke‘©f’OËü€¢ø+.§«iZö«p4› &ûÓL’Þ88FBsÈ|©òõÈ#Š–j±Û›ëÁØ·ºå²æÌ,<Îv³©™p1ÓŽE~ŽOà{M[KŽ`C ž`FDÚ08|ÀúWƒþÒ°.ƒñgHÕ‡†ÖûEÔ5 Ì˦̶âêlŒ¶â§ãŒ7f¹+WmétŽ,VBÜoE«£æŠßí¾ øâþ9_í\µ¡X]2’7ÎN@NâsœuÏC^,>>Y|'øaáÝdÛbÿX…^g… e‹31‰8Æ0¸õ½—âÏì¥â/‚^Ô¢±ÐáÔ#Ží7 ÌÉ2Èz|’\‚7pðfã[†Àø‡KÒ¦±µŒÛì[Ôyäu\ªùˆÇ¡t)nµÛ‡åºRÕ=w>O—Öö®RVgqáOÚ¦Öm;š>½o¨_,ð ƒ%¢”¹·„XñÐaqëž•ëI¢x—Ç^9‚_júEŽ•ö„"&™’eŒãåĨA·n3Šòï þÅZ¦¯e«ê÷w1 WQÜmÒÉå½yYŽ"Q:q¸œa$dgÁŸ³ï| âýB÷âö«Ó­mYî,Úåå•[ho&ISäVÈ-€I uë^¬iª>ô^‹]B ªÂKÚlµ>‘Ô-×Zñ~›u H~Ûi ílf‡2EŸË>T®>EÈ ÃpsV´ß†Z~Ÿ«¥Þ“áÍ=õˆÙ®c¹û*y—…§`ôÃ&í¹Ø¤»yù¸óo†ÿµ ¾Ó^ÒûD¹}ÙÒÚÜãÌ@Ns~m¹©ÇÍžÕï µt¸Ôôí6ÃT²’“-ÍÊÜ)‘Ï1Ã!%× òž¹9«X¯iªŽ‡£†œ+ÙÅž+ñ/öðOÄ¿ϯøþÒ¬ê·)vësYZO2 ÆÊ¬|½¤õ¹ÆNy¬ƒ’ø[àçŠá„!°¸ðí77Z„¬Í!|2CrP+©*¬CaIËt¯£ü{¥CªèžW‰Ì¦ÓÎ\=¶Ý’a È?Õäpw8È®#VðîžÞ²Ðü2ÓÿÂ9%£@Öß3x+°'ÜP„³Jpw7<ƒ‡ ’k–úvF¾Â1“pI>çUðgâ|?¼3¥ê2ºiWа–ÚÙÕŒ2"–xÉtbnÓ»‘É¥bëŸé–z+]J—~|Wmuö¼¯Î&~Lgo™ƒ€O¹*ñ?Š4»&?jZeЂxæ»Ó¯®@½fc¹ÈvV+aKsÇjÂPSzí÷O™C]ü4øW㈠¾/ÿbøçJhW­Ü÷d1[t]Øs 8ʪòp+ øÛñçEñ>“-ö™*WP¶W’4¹2ÛÂ6å×lg×>•Ú|HÓüw§ëjŸ!‡Vðàu}B ’¯Ú†H<’ ˜•F`HÈÜHÀàü½ûQéZ§ÅCisðJÞ _ÃóÄ%ŠûM’46)’^  +D»L’}sQ(Æn1—¡Ç[ž'Ü·à?Sø'QW“Pµ·Š$’Vy¢_0ü„¼t<ØV„þ'É£üC‚ïíêu¸7–9Ø—Ü!‡_ʼ<â[Å÷0ÒuÍ&Æx^ÞêYàtŒ†`·ÝLŽpHê8¥Ñü¦êwZ=Ÿ‰|›˜nž@×Do›‚pXõÆÕAœÖ­á©§ï½~óËö’NmÝ3憎iÝƾ¿¶Õ¥ÓnµÕ·t˜ò§»_ã(FYˆÀçpêØkáê^/·ü+ëK»HÎ&(êA ¹Ýr+мð7ÄÚ¦›ãÕìu;µ2O¤™û2€$ ç?+ÑœçŒ×£x³Ä~Òõ½LêÖ±cWU“ʵ¶73<ŠÁÑ»þäd“Æ1ŽžœÔá u[‹R=|T勌\ô”J^ñžŸâû-ÿöœ³¹ñ¹h$smtEPq¸…ØB‡±Íië¿þÉ~î4Ë;;‰c‘¦wòƒÊ¨V<Ƥ)+½±×'‹ø›áœò_épÙÜIpn&¹ .'ê€RIŒ.>fþ"që^w øG@Ñì6üJ¯[ ‡©¨ŸNjþ—WBÐßU6÷º\y·" ùˆE‘Æ­ûÇUCÈ$n\rO?=kž!Ô¼âKƒáÅñ6“a<Ò-5Þr„ü,*Ûõù±ƒ×©5Ï—z…ëj u,ÈE NxÁôÏ Öˆ>/ÂWhÒÞˆn¤Ø‚k™å6I8 Àôõ’ç«¥½N\^1bSöWO¹…ñoâ¶­áû K)xã•à°ÎÒ wÏ5­ûþÖ!øiñµ&×míT¢yi, ÛcÈb ÆQ°ðx5Ïhºf¡as<ÍisjùmÊ›sÏ'=ðàWað·ÇZtZ„sÞ¥•ï†à¿ÌöÌs$ã $!ˆÜIP>^ç9®ªn$ã(ßÌåÂÕ䫨úÏüEûGÅvÒø“VÓ´«Y$f¶·d’Æ$8G\¯Í°†*ö§\ø M@%߉P} [[Å)¸uxüÈã YW€sµNHÏÖ¶£k¥ü9ø)7ˆ~2ÛÚjòµÄOp„:¡!rÄ’Kgå<ñyÍ|ŸãOÚ/RðOŠ$’âíµ¯dݺIÔdåyý=â¹d£YÚœvûϤ¯ŠXFœïgøëñâ þ-ü7äLð[»Ü³czƃ,I'¢õ"¹/ þÔ â_³ë:”×z¼sí˜ »w€|¼çƒŠá~)ülµøÁà6Ö4Í>â8ç‰t»›‹[˜G€0[h#ç98×3Ïì°ÚC3‰ÀÊ„o•@m#¡ä×Èÿ¡Ô<9-Ï•ü.À$ 81NÁ€ù°ç¶îö犇àßöî§âm(Gc¨øŠ8-_QÔ-,§9žóæÄø vnÙ¸ín mNœë%{Xæ†cRå×úì~‡j³Cwtšt÷ð_[ÛÖ*‘f$‚1´¹ä`³MfYøŸU¶Ò„ë0jl¾EŽ+È·NðyŒ¡fT‚‘©ËŽ AÈ£eâÝBÿ[·_èÆöÖ]1m–;‰…¨¿Ø›“ËVÜÑÄ6‘–~vŒpØ®Qø™¬øâ–›ur—_ ÎÒÙõ]@Ü\Ü\Nc,­¬1“;$„ü»Tr%SJN6¹ïÆJ¢MJß×™í+ð-ŸŠ–ÇT¹†•8be’;–Yb‰Ìv÷ Î>b.ó `šð-oö8¬¬¼Gá xWľŸË†KmƒM3¶$äÚDŸ1&?—žF1†úCºtš/5XuK»Ÿ6)¤¹ÒîîbíRO”…„a\–`27mgMßÔúÀ¿4O øƒL—ÇÚÜž'Õñ³gÔJÀ"•@|µ!Kf]Ǩ$Qã+øÇñ—Ãð«Lšl›ÕÙ,`)ž}Ë;ð>d¶ ’ s¿ÿh_ |Zø‚úGÄHt«_hŠ’ÚÉ:DÓp@ò™úIÆp:dgž+»¾ð½á[Ûù~kööz½ÚÆ‚ã\°K›SeDvÞdAe,…ß ¸½¾ZÊ}µ4㤼ÿá¡x¥Z ¬]ã/[Ÿ5ÿÁGÿk[ökñ¦‰áÙ£X¿ðþ¯z×:λ7BòmH1CEq»cO3K(Ú¸Ù ‚EcþÏß´.»ñ?ÂþÒ¾3øsAñߌôËû—–*1< ±F%ÄŸ:Mp&là ¨ 9­ÿ°&«ñ£â^»â_iÉ¥¯ÜD’Þh¾"Uˆ*B±"Úé$H•;)+–,Çïí?dσRx*ã⯉üO¥Ekxöú†ô{?3Ïv‰m ¬VÑ…\1vgf`3¹˜s]þÚ°ÉOYõgiN¥kÅ{Ÿ™¹iá¯þÌÓ\ðׄ-<.AdÔ4˜bÙÉ$HÑ‚ÊÄ ’S]_ÄoZi?`Õ¼C.¹÷1}¾a5ÄŽ°–HŒŒH@qòðxí[ÿü?£x¨¬^#Ó ¿ÑD,e³Š\Jñ,rìî‘'Í‚û²@ès\‡¼7£Üø{Xðó‹m[GÒlÒY¥šíf‡ÊŒ¡[™2ÎYÉŒ>b¤dkÇæmÙê**2N×[v<Ëáïí˜|gâkH|E{âY­—Q†âî=%Ýþܱ"Ò5%cSÎ Ï9¯smÄ6Ò"Ô£fÏr4ËmD¬\2›3òÇ!™x<Œôâ¾üÐ4oizLöײ´úƒiiz—-¤ÈŒRbbÒÉ U!! Px®ËCðE‰mõMEu”Ó5@î’âeGû<’~éÝÔáà‘”ìóqÀ­\£NK¢ï¡•Ï‘ÅÊç’|Eø·á/xÚ +ã†ô¿Úès“aq ‘†EË 8\í\’v'¾…ý›­´;¿ }¾ õ ¶Ô¿|lµA¯…‚©eÛpv.sÈê=«áŒ_¼}ñëâô¶?4RØhÒýŽúêùO·!܇8ÌLB·;‰ëéîß±×À/ø_Ó_ÆÑÞÙ É}g%豤m÷IŠL0“p`Àœ‚3‘YÔ„•>neèe…iV’©:åã-2„ë¯ëºV.¡m®¡gšÚ8¼¡/º•2‘60\’xÆ+˜øE£¾… %®ƒ¤Çá9¤–möòÎNâvˆß;˜ö|Ãäc½{| ó®%i.k*,ÛF ù¶¯%sžzW—~Ôþ »—_ðÌÇE]FÎÚí ¼@ù‹¿šB ¹É_½ÈÉƦå¹êÉ(Y²Ÿ‰~ ë>-ñu¶©â¿,+¦Gök‹)4Øš!S»Ë}Û„§?}‰(ÂõΆŸðö-?W±û&ª¶ÚnŸfvÇ:~ò(äFB$d‘™T©äçœUöøƒ£øSHñ$:ÌÓ^é-ÿiƒH%Œ±Ž7ŽA‘*ã…ÎÑÉâ²øºãâ¢êÿ 6³ª ï¶HÛ· ÿ–‰¼ü§häÏÖ»[ßÚV…ãS]°šú[«³ç]Ú5Ć9‘Àd¨;ˆ¸öÔõn}La9+Æ1ØñY>êâ½^}RçOå€h£N-5™9i\ü˜ ¼2ŽGs^/ñ>Ýþ ëÉ¡x6ÓLÔ´«h³hÖ󬓸Ï^¼.G=y5õ¿Å­µé.ì4y¯{ ÆZ8Û,`•òv†çœz×Ç?fø×ÂÖ¶¾×ôÍCTÓ'šêK¨bÛªA"«$“o#…týØû¸9ê1pЍùSÓÎ盙є¡jk^çqáïŠz~¿¨øvÎNšïD½T\.û…—;Ï’~W Îzàz×_ðïℚ»©i÷Z½…bqw¬$JÖ&r©¶’꣒F6€8¯Žüc xãàïŽtÏ\é}q-¾-ÒÞKÛ`r¡ŒÊŠAR;’89s^Áà¿Ú YÖ4ßãÖ§¢­Â4“ÃmöˆÚÏ û°ì Îá·äsÉ®ÉámîŸõø˜`kJWïCØü6ðߎ~Ýh¿ ¼K1µ¾yoà˜\5ôs3+=Ceœ®I n??>*|ñÇ„~#ß@·“>=Ï–º¹„Bº° + c2`‡YFv85÷÷‡uë-;áÿŸðŽÎÞëm´w퀩¶g.‡ù˜•#å5ó‡íñªãÃØv_tû)’¥¨‘$åTù˜ Ü¡ä Œ-iP›Mst±yœhÊ’çÜxß„U´­ Å3ü@Õ­õ.KÓ%Ó¯n­nØ’Ä?å‘Pªþaçç¥ýƒRF÷Åz~¡¥xkR¸}.g¶¾ÕtÉ&M>MéÈdC˜âËO8$x¦ühºÕ“ை¬~ëS[hÞ -w¨[_-½Œ·Ñ}ã’íc6À>XÕÔ½ Uÿ‚\ê7^øÑªÉ㹦²û£Ã¨Ø\ïLRÑýæVÚÀ7q^ĪÆXy»ôô8–"c]u>÷°ÐcðiZ6®±}¥Y}­æŽ°Kˆ[ÒÝÉoµ&[™‰ÆN+È~6hvþ*º”ÉdŒóDRâòH–Ùí!Ìm€…luîI¯_øEs¨|nðM—Ø|=w,š%èþÍÔÛÊûqc<;Rʹ*¹ô¬_‹ž>6‘ÜÍâ{>E ;²¾KH ñʶ±aÀÏ?‰U$¹äÚìz¸šÅaî›±óoƒ>/é^ø-¦[è:z>‘¨LöÚ¬¨QÃ|»c™"ä°RK(ã ëðOÚ+W‡^Ôô]Z)µm¤—I=¬¬ïnÅ 6.®¥†7+íŒ× û2øßO·Ó¼M ü=ðÇŠ¯u¨õ(®&¼Þn´ñx\yRµ¹ˆˆÆ.I sž+´ý<}á/ÚK\û}±{‰4û«}SPš¿¼y[w ¨ûÃ.ÐN=þƒ©Ò¯«ºKo#çpU9+AÁYÞßðJ>)ðµïþ5ØÍ£Á>“§O0'TŒÂò[0;²c<´lWkAÚÄŒc5é9ÑWÄÿ 'Õ¼C=ÍýÔséè–—Ñ4ï)òX±RHO j¾ ‘µ+ØõK;[# Öœvù-ÏßmÃ(A8Ú¤g½{®Ÿàxßà<ÚO‚%’ÂþÕÑ4¢óyV–*ÿY¡,71瑎àWÇZߎ_N½ž :ÞÕææÌ‘æPT‚CœŽ™ž3[ß³·í+â xÛL·±\ÛK8‡Ê‘M´²‘½H'!OÍÀçiÁ®§†©nx½<μ+ØÏ’zÅ;ý‘þ%_øÃPŽúá£ÒÂ6ۨĒ,˜î± vÈÏò¯ný™c«Ÿ„ÚoÚüyw£\Y½„Ì"xüÍÓÈ¡|âÒ€êñ®p8Sœàã5î·¾2]CÀRj–’_XÝj· —KûÉaCÕ•Á,¡Èï–w®2=FÓÆrÙi¾+ž-îb“í5ú¹ï!bIc*.Q†ÐXGz¬W嶉y#é(à0´çκþxCOð×ì»®Ùëÿ õ Bk¹­žiพcdÁܪ‘aX‚§8Á=³vÇöعžöñv—æÖq-³ÊªæÝ“tàžý+™ø´’\h÷·:¤×¦è:"Gxï F±"£4qJIUàwÆkåø™%¾»k(îí ¡k[»yü¨n%ÜT ck’HOzä•b$ÛlòqµëáêµIµ.§ê7hýâU³Yé7-i¨Í„w£¹^ÜgÖº_‡:­§if/ˆWºn­sk6øÞÈÆ#Œ÷e‘Ûçç‚1_”7?uzN•¯iwÆîïN—>r‚ŠÌ£îîüÇñô§Áø)ýçˆVÏ\ñMŒuôEdÓZãk…C·1úxÏLÖÔéTå»W]ÎŒ&pšµ}ïý\ú·âÿì³áO‹ñ¼Þ$ðö”u&â+‘$Öù`£uPVM¥ˆo¨èM|³ñ»öñ¼As}ðßU±Ödµ•æ¶ŠÚT¶Ô¹(—Ø U¿.+êÿüpðÿƽÛxjñ¬no„bHf@¯)ÎsÁ8ã*~ž•×ëv6Ò¤ìl|È¡An“Æ¡¤É]›cSó(#§Jgf®zSÃaqë™+¾ëCó—Àÿ>%ü(Öu-&ˆüC}åíKHvÇ-¹pçÿ0€ ôæµµÚêÓÅÏý•ûBøz+«V“ËEƒi¸ÜǿȤ‘Ønüëéˆß±¯…üq­%ÿŒ4÷Õ/Òö@ì-u+, ^AµŸ, ·¨5Ã\~Á$Ú‚^xkÄ =âO±jñ‰/‘dÄbiX)pT(;ŽI É8¯6¦j¥éKO뾇•S/Æa•¡&ãÙê|ñâOƒþ¾½“PðŸŠ5+e¼‘»3Ãyi‘/i ÁçsY?á9øgã{3Ce×l®ÞÄö—QAqŒå÷0ƒ‡Æåé‘^¯ñ7öFñ}¶¬ºß‚g†Ò(•ÐÚÜ+Ú3Ý¥$˜Üd)fP 9¯&Ó¼!®øZæMI´ýcNÕEЖ7ŽåDù „vžsŒúb²„'NMÕ“kÒÇ™_ Ë-bÓò>±øû[A¡Hš_ÆX_O¶ºVû5ÄQ¬‰9$’€‰ ƒsŽ+Úìtë ÂK‡šN¥¬çEåÂ$Yâo™ÙŠ•Ý!'qÈçµ~]kšï‰Ÿ£Ï®[ØZ3´KG-ÔÀðp8ºãŽ­‡|Ž<Ⱥ³ ùjFë»±÷­‡‰ãðö†£à}‘î%·›û5íÇnÍÑIûÆGç#'nìó\¦·á¿Yø†ü0ƽá by ¾ÓZìó#üñ¼ƒk£†Ý±ñ¸×9¯™loˆºÓ~'øZýÑîn«o‚ï ó²©ùyÎ0£ôïìùûaxNOYi»»‚KX’›PaæI¸ó#»ÞÍ“»ó]oN],üÏ_ ˜áëûªv¸“~Íþ;ñýÞ­e-Å”ÞÖ£r]¨.¹!dKJ’§¶pkãÏŠ?u_„œüUgŸOHÒ`y­lŽròÃ’zŒqéúUˆ®îtˆ.tN<™·3A¶e»]ß4jYð‡œç›w›«(a…à‘€9VˆÝ· î\góÖ»YüY„tËkMON³ŠÔÂÒo‚{o7yÚ‡Å2l‘×#Þœ§XÂ߉ÉK)9ó'¡ò7ÄŸx‹àïƒt¥[&8£ŒC$DI Ì b•ò6¶IÀÀ!ºv¬Ï€_Ö§op|¬pr8ÝéW4oéúÕ‚[xbÒ9"_Ü¥¬"ܬcv1òóØúW5>F¹c«:Þ•«=‹&ø¯…ü7yâKˆü¥‘D·v—©-Ò;(ß¡”eB±•æ%AãRÇĺœ:ÍýÆ­¬7ƒ5Å”ØL†ý¯.-„eJXÁ ¢˜÷™˜®Ý¼b¹ÿü/Ö-5Ý&òð-ãéÒ@Ö÷Ö†(ì¬æ`UPå„­" ,±Œc!Ü’[zïŠþèz熼{wg¯êzúKn¢É„qÙ(áå’0Û{üÁ²Å@rÄz‰^ûÇg3RåZ¯ÀÂдKE°´Ö|)­ßøìW7ÚD-{|'G…ãi§¾kuTÏy&R¸ÃŒ)äŠÕм w­üdžÂæ'/£ZZ˯Kæ•?4“h×o1vR¢2Å;ȬÉõcFÕoWÁS¥ ¸±ŽÖÇO¶YLӻɰ²3ñ+ò j‚ÅGN¿ÃÁh|Iªø¢ÖÚæÂÞxŸH·ÒnöêWâ(¢G—P\)Q‚Â(·r£ç?1¨’²rLÉÓwæ} ¿ëÖ~ñ¥Õ†½¥¤É§ÜÅöýBȾȇ–Ù´ÍRA ɹŠíÚ6÷5'ˆüA Íã‹xµkxõ˜£¶1ÙÏqm"XÃò†Úª¹,|ÑŽN òq€+/Äë©xÛÀš—…‡£hpÚ̺›êרõ+9nQF.Clge ¼’\œµbëá³­üImá,ºv©fÑ[ÙA©‰ño:¤ÀÇîå,}›¹#9byö©QÅ_Be'¢ÿ‚tž’æmwIÑ|?>Ÿaf²¾©q%„›­lX̬‘Í‚}¾cynPmr@¯Dð÷€tïøëPƒA¹ŸXÓe–îÂòCæÛ‰ž)Aš-áInXÈ ¶@À_„Ÿ³™Ðõèçý¢µ 6mJid‹ÃZ\ ÛG ` ÌÊLžZ„gÈ<³!cØ} ð/àöádðlï¨XNZý®îeW¸k’ÒLÀnrNpX“ÁëÖ½T½’÷u{ž…((ÚU%d¿«~Éy%Ãiú•µÌ—뻼¸W?a‚IrÂÞvÉØ»T]§9ëšìôÏ î‚8,cžkéP9Ù‚ª9œôãò­iy´>tßd½¸hѦ¸·u–i>ꂟ¤cŽçÞ½C𵞤•ÓÌÑý¤ïšWCçNNAž…ˆëéZSËÕyó±b³—…*M³šÑü‘$™gTV‘òŒØ<~}x«)%ŠÉtÚ<Í{4 ËæM–N@%Ê@þêàqÏZ»i [éRȺ„)´“ ˜8ç~Ð/uÆ}¹x¢d–x¶‘jÐ cŽAi²Ë…¨2ÿúëzÎ8Z{m9ÔÌ*îßÎ߇èRׯ’ÓR’;GÞ0­pÃ^ òâQÀBN3éX×v‹{g¹ò°Ç+»¡sèÜŒúâ©Íys$©&¥9 /îþ`8ÉàO»Û ~­$²Ïo$ ˜Ù]§Ô†cžAƒ_;V¢«wcêèaý‚ŒnN¶ $ÌŒ¨Ñ8Xá8æF$œð?:eйÓA»–í–?2&ÚÎf“‘µÎ~R}ꮞ‹.¡ ê (µV9Eb¬}0G~øç5ÃüIý¢´Ÿ$ºÃáq®Ü\NªÖ°ÄsnìAiäFAË`ŽU ¬oŠÊ‹äoW·ùHë'Õ#ðæu6¿pÖÖû˜HÌxrOAÇSÆ+Íõ·¾4ñÑ~ÙÇs0‰§Žþtu²06äÞ1b=Ôf§ðïÁmkâÞ«ÿ ¢ö'°¸Úl4ëY%ZÉvlŸœœ® Î0Fâ»íF²Ò4±i¦Û¬ f#ŠÔç( ‰äœàò{t«^Ç ½ßz_€rÕÄ¿Þ{±ì·ù³ŒðOÀø¥×4ýKâÝÇö滦#M%ÆXÛ@ÌËxÀ\v ëŠôÅÌ—¿h˜F"R±´±‘•B„¡ ýÒ8ç9¢}D躵à¶>ošD€•‚Wý¬ w¢ÄÅ æFÉ|ãÃoßÈʨãÖ±u¥UÚNìÙSTãî«+uQoí~Õ:(×o”sœçn óÉõÆ*³N«áKàí$xp±c'¡Þ¤s¸žºSµh§‹_ÓlåhbkK…k¹<Òwü™Âמ„ôÁõ¦I”Š8f­-sp3Áˆ¶B¦rG?¥g'fÛB†±I=?à–íb6°«à‚#yeè°e`£ü{T‹q7$Á(ÙB†ó6îÈÇ@  väÖ¹âÛ hwwÞ$¸ŽÞÖ'GŠG )Þ¤ÁˆÎ}zq^g©|UÖ>#]¥—ÃYmldÄ?Ú€ÿ­ãÁd‰—'Œ(o¹œœŠ ÛøPÝ7'©ÚüHø¯£øÐBHŸÄQ,Ñiö¿¼¹º¸ ±Äƒ¢s¸ð0sŠäÿáÖ~1ßÞIãÆ“GѬíZî1Oîà€ÀÎr¤àŠJóƒœWMðÛàÔ¸rÉ.¥wyBîvýâÆÙŽÈPª:Zô{Oÿi¥áº„°òÒ(ÖFR‰´pÛIçô>•¬i­à®ÈEF>ôŽ3Ã~ ´ðôSÃáÈŒbÆ;ß,E÷Cq€ƒŽxÀéíW-ìÂXßln¢I0Bñ’1êÆjýäÙzô ír÷lcšF?3(L.ÑÀUàp{š¯pK§¹ÖbA·sFˆKù1„]¨]ˆ$ñÆ>*±¾«FuR›væWLlº¡»¹ó¼¹3¸‹€6ôÈO^j¥ÅÄS3K‘@o”o$'n•b[sos‰ ó敉ÎÔQ€ÎñÓTâ¶ÝiòŸ,*žXúú渧̴{Tù7[µ})u(åMIRT/µã` ‘ïØŠùçâoì{eáÿÝxÏÃV3kè±·Ú4y.b¶‚4;wó´…,Kx g?IKBì—u€À›8ÎßëN·UoÝJ¹B¸a ÜèA§Bn•Dâg‰ÂÓÄÃÞ_3áýfxOâ¶Ÿ-î4{}ÞYµ«)í¥XÝ[rÉ‘•óBþ]ÀŒôÁ=—Ãïi?µ½TÜZI5î½(”5Ë2Ç8 ˜Ê AT1Ž n8ä“_QëÒîîêò¼ç oÈN~b§É;Aç¶+ƒÖÿfKróéÖ·¶òJðLP]¼qî‹„BŠvíÚJ•Ç ×¥ti«J6<díÿ ÜùËUýž´‹¯Š—7PjòJÚuÓÍÞIåÛÜÛ!RŸf(¸ØÔ}£vàyº |mJCðÿÄ󨵼…Ö&e¿²¶–Gó%YBO’¨ÅÀÀ,@èAè³5¶•«ßêZ$ÊËv«Å­Äò8’ ìûUÎ| †j2$à á®Y¾j2äÜY)•[Ý2&O/»Š¼„h'$sZSÄÁìïåc‚y\°¿Z_×bÇ‚|>žñÌz}Ö¸5©µ™Ž¡o¶Â8v|;DU!79á‚‚¤ÍtÊéíçÔ<5¨É$…ÁŠv•b’KèÞMÉoo"å© ä²±ÁÈ« Ã:Ìâw=í‚æG¼Hä-=ÅãJJ†YN|ÅbQ¾PFq]_†üCÄ6Z¾™qh!á­éKí X¹o—i<QÜ×b«ì8Ó´lq^7ð\þ;ÒŽ‹í’iå··B@'çvv\œ¡KcžñÂhú³üvñ^¥á·‰FÕ#¸ŽÒþÏCdµÓï‚)VûFX¶\Æ~`3Ö½£ÄZ5òø†-#D¿†3fÿh¶En–HÁ]ŒÀ°pÁ€ûÃ犵ªéV>.ð%–«¢ÍpŠ‚;¥kò\ÆYˆ¼c~$âÚ; 9Æ ÊÚÿ_yR§:–Rz.øoâeÍÍœz½.Ÿo ô–RI¨±ƒÌ•w"ÈîDd°ãçŸìû¡xcÇö—~%MSL“PºÍø–pé“–12© „99<Œg5õ6µðj=SÄ÷ž+•uyt óöÖŒ3­Í·™ûÙaò6î‰C¾rã+–ù€Àf«àá®üE²ºðO—¦èÁáo'P°%d•òä<¨`§þ+%_ؾf÷Üá¯NWN}úžâÍ:óEðÌ—¿ 5ë{:ñÑšÒæÙ–kr8Þv ®F0H±Íz—‡¿gïü-øR5ÛÅ/ŠKª[_XؼϪ¢‚6gq1b ê­ŒgŠô«Ø»Jø¯âKýkÃúˆµ“Ož <Í"8c[GŽ@XÔ•˜° ù`08è{_üH°Ñ4ÝCM¿Ñõ{;m>úæ kÄ >Í+É wK‡Œ Ï&ð{¨â±•T¡înwÐÁ(ÍÊJ×ÙÿßøïZñ_ôÈîõÍ_ÒumU<› î´é%—P+÷œE>RÇ)àñŽk’ð/€µh“êÿ!–áõ¨fµ°’Î`žS+…g$üà êzWÑÿµ7Ä_^ø™t?ƒþר4ëW–¶=«æAš&_¼‡ïÁÅEûK~Å> ø{à&m$j°ZZý¶þÞi 7L?xbUÜUNäÝÎÐq’hwˬTnyøŒ3¼å¶ÑòÓ|BÞ*xôg´¾µDäÆðÿ·óÈ÷䚟Zø[}skwŠô‹ÉbÜmâ•Ä¿&âc펣'#ÝCá_Ä}iÞã¾ñM圓ˆ•ZÁâm̹'9$àzæ»+†~)ðÇ©¯ÖKíO[ðÚ½¥î˜C8³^YcÜÍò†$ä€䌌÷{ñŠ»Whõ="Í¢Ô£Ši/p,å áUvã.r]°6– 1JuãEÚ_Ú²¤¢¦Ÿ©òŒ>êë¥Ú‰æŠ8d¶YË[ÄÑÆ±8ãæ<è1×"¬üøã=VWµð‹{n÷Ò™-YÑ—í*̠ɲNSž `89â½Ä_lôˆ­¼:‘"´ªöÑ[›† ¸pÙÎ[Žzdã¥{e¿Åˆ|+á‹[];PþÑ–ÎÔ[(…†dÑ㜎zŽk²ƒr§ð«7¥È§ :O•X¹û?üJñ/‚ôWð—í!g¤HþI¦Óîná,ªQâ(¤pNö•™~SqÆkÀþ-~Í7?ÛY“H½@¶†`—wHgpÌ…r>by$ô®—ã‡ÄW^ðå­×Ša±Óͤ_fˆT Œ ^§$s“Ë•Ÿû+~ÓÐYj:7‚ü}áÛ SBM@ÞÊ÷¶…¥³šG ¸ã,«†@ç õâ娪¾H¥c®5V"JUuÜÙø1ûêÞðô)kâxÿáÔ4¡¨ë nö m‡a»É–BÌ1À8Î8渌~Ó>êD.¢nHØD‹qí / [oÜíû¶ù°rkìˆ~Iá¿ø­µmCûN;Õ“OÓîm`3¥‹4€Æ%Aƒ´m\ƒž­|Óñ3öUñþ Ô¡ø©­i1iúù:»ÚNÀ´^g—xvÜÑç g+?kSðGÄ?èz†£/èµ)5 JCfO’D¹‘YFëxÊO˜Bà¿wµ~¹þϾÔ~xKÒ~$YxkO×,¬$ݰ‰do81(ó ‡•Âä…'½|‡ð/öcÕ~ ø×Lñ׎/ôK‹ 7ÃÖÖpɨ¾»wTùk_Ý£3aä îä^“Å_¼GcttëWP†½:„qÏ!¦ìSÁn~™ãшœeÉ~¯úF9fûØ‹ÝìJø¥á? \ëöÚˆ®ôÛ›VGk½*8„Ä;«®é2G•"œarON¯AðÕÝé1Ï.§=¦cl–%Æ(ÝO”©ó"D€"³‘¸“ŸZøïľ?Õïüa¬éMfÐÇnìëv-$”a‚‰@e‡Bê+ ø?ñ¦÷á.¯öíÇ> ØUá’á&.6ìÚ$–?(‘Ôs\‘¥R*×VgM Ò›«¬tgÙö߬uCK[l‡@X$²’xÝÞ ¸ò•¼Ïº»ðHÈ8{M/K’Öû )v¸Î‘„A¾prTÎÀ`NsYži4M0Ų=ôi+0¶HÒÀ•Îɹ9…ÉÏ©5Óè%ÂÄ“®Æ*$bÁ@Ã1Çõàä~=ÅjµÑžÚK좆»y ³À­v’_Á4&xí7µ¸VUfEfPÙ Û\f2;ןø­tÍròêÙíîõHšig‹R›÷0Cä+,€±ÄKµv…'Ë‘ŽOuy©ÁsâmªÄ–:³£$1ù¦a4¹*Ãh‚\‘œ£œVˆ<ÿ À5;G·¥7—VfžIfGÉ"U (Tì(x\ÅaS–M©"ã–§ÎrþÖƒF¿¶ÄÂK›u1ŠÚ㹚-Љ–£Íˆ¯ðaC†Ímø.ùi[6Ò¼/{y¡Ùiù¾¾ŽU¶ò/c²ifF‘”ò¢1d“Åoüsý–|=ñ)n_MÕäƒQŠÝXË ’ÓåÄI¶5À]ŽÖÉ<×Sðàˆøà};K°g¿Õõ «¹ÐAþ), RѸíÉ=1Š)ÑŠ¼öØâ¥O­JWLòŒŸ³¶“ðÎÆëVðž‹g£k£5Õýõ¸e·@)$·AÝäß»9 àqœ|»¤Áygi4z†µ¨>£,-Æ@ÿGe?,hç‘À*W‚{b¿CüIá=+ZñÒÝø’í.ÛXr&v(b·µcå:·*Sn@’9çÚ‡ìÇàØµw:Ži«ßë×s%¸,³ÃS÷” ï–g Ó¶ÕÉ%¸ªPDå'w·M<Ã'úÌ”£¥þãåßÙâ ûo>ñDžŽãÁƒR}:ÚëËp%” ¼­:€— p `‚ }¯cgªý‡íwr_\ÿhÚ,ñKck^k`+>îï°p[×οµÃûŸ…¾ÒµoY[éú=µŸ—imjCåH|á YÙ€rrã‘/þÌ¿´æ“â­&-Çš…ÅÒci­ä¹ºŽ;t/!rÇtõÎzšèSR\‹²2À©a¥õg÷÷ô>‡ñ î™ðïÃ&ãÅ2JÁ&0G$ ¹`·ýT•ù$Ó= Vð–·áOˆ‘³ZëÍyg™Ctbk²»TF탵ÄŒ1ÎõñÏÛ/Úi³»X›[H]1þ“$¦5‘ËeiF\ôà`a×kãKïŠ>!ðœ­cgcsmâ{í²ZPplŽkºÇv~ð¬Z–¼^ÂÅÀ’üy’(L|¹ã·×£«îrÛB=Ÿ´’šz™÷Þ°¿ð´Ú^§¡£j61<§P´E·ydf$ˆÎã¹öàg`Ö³®~Þ¶kmá½Vm.öÙA–[˜Ä¿lŒ®æW%”ƒ¸õ £8À®»Oñ•–´Ñ¼°Ç(¼&XfŠE•$CÎパžƒŒqN¹œjp´pmhön@_nTƒÉ^3†ï“éXÊ®¦‘¥jy§Žü{À/Ïyq{¦ZêÌ–ÖpÝ;K - ýa€¼¯àßíå¯x·ÅOø™cn²\B^Ý Ec;¶æY3€0nàæº_‹Þ3ð—Œ<>Ð^ÛO¡2Í2Ù¼yû4¾YÆ 6äVçŽkãï x£Zð—Å{{ký QžÞýͺÉŸfpî0 ÌHò°AêqØž•¦>Þm­lxØÜK§Z1§5n½Ï·þ*ê÷Þ&¹ÓÓÂû’ËR·c±m%µ»”u#or;61ë^Gƒ­|ñâÃÇÚžŠº¾„÷7–:rCk<ñÆÈŸh»òÝšiòxËcinW5Ò~Í2Ð&’ÃKðÆ­|òxjÞm)m«%ĪŸ–Lùò“ÿ-˜úk…øñ‡ÂqøÏW#O]OÄÖ°Þy¨Ñ4·fW”@ŒCo.´’Wœô®Ícx(»þGU_z*|ÊÆwˆ>9iž3ø‡•ñQ”i1_bÜi3= k`3¶vR\•`JÈOwZî/¾&‹uØøQª%ž¡£FI/áŒÉ,E²\HÙRÆ~\Œg'šùjÿà‹thzιkâK9õx¤¹—O’Þ9nD[<ÁT9iàŸõc¨<ä4Í#âž½?ü#Z ©§Otï:Èá ›‡(J±;Bà£ÖºJšå’¿[ž*ÆbO†èúâøkÅ ñK^¼²ñ.”å[YÚÞæò-ß»”ŸË’>8^ü€+Î>:Øx⦿¨x›ÇžÕ§Ñô ]J Ùä¶x.ŠB]Bm̹øeÛòç»/…?²nŸ}ðJûQÕ|/“®ÜÙµ…äËtRIÄŒC:YØgy €x¯4ñ¿Ät𥓋;M'ÃÖöú}ص¿gµµ2Ä[3€áÆc*8aœWG’-8êÑÛˆ”ã Ô^ëüOý°~0Åã DÑü$tÍfÒ}6â=E­åÛÑaX¥*»ãwÜÃvëšÛý™µ-âF´fñž‘­i:¢Io¥™`‘ŽøÑò¤üªFwc<ƒ“Xžðì¿üIªxgáÜ6þ\Vò-º]EV´¥¥e«0óBòÆp¯gý“¾øËCÕo´ëo êúž‹8G¾»·¹Æõ”ËG~\62G¥Š© SŠ´¿Ëþ=T©Çm§gÿ†š,†+ x„Ï žoŸn×nFd°6¾ÃŒa…jx§À·:Þ–öž$»»Ô Ð.$ûbÆ´‹(;"ªW{8Ê@ ~jè<=à]#Áž,Ь/ïâx¥ÒÚ E“¤[£3–?1,vã@û±„;°HÏ!†¼ðgV_ø[– 5¦ž9’´¯"ÞÄ0ù%UR‘´‹æp¥N‰æ·¼]ñB„º—Þ³¹‹Âºâ$pÉo +<{ЬÄm£zH pÅA®k¶<‘~æ®ç‘†¢éBQ©+£ç_‹>*·Óïa†Y¡Y.ÕdT°q43)ríÛÂðFFr1Šó >ýôßjšÄmöâ ‰³¤7Ý_˜Ž¼Šú“ÁóxsâcÝiúî›ok­Gwö¨Íö‘"ÛMêÊÍ´#HëߌQ/‚tè5ýRÒÊçÃÒ4Ž#{mTb Ù=¾ÆQ„.¼°Û¸7cRj1mÅÜäy2Ä78ËÝ<5ÔVw°Å6¡$j†9™I!<ƒœ©9ä}ÍKªD¶‘\'ˆä’ÓQºŒF²‹yO·å²ð Œà+ßeø3á8µ›HµM2mOLI${ÁzÐA•>Q¶6ø•HÊòÇ®IÐêß³/íÁIœt»­WOAwoö»×xn,ò/ï‚F㓜g5Ÿ´Œµëù˜|ŸÛÉ¥$¬Rø/ =¯Á››‹­q_LcK{I š{›ÃŒ2­‘׸Á<“Šïô]Iñf¥yo®ÛÚ\Øj±G…³lFcV|¦I<’ä± b¹+[ WÁZ®ŒÚŒÃJÓ5l¸°Šâ'…£ˆ†¥˜HÉ ?.Žk¤‡ÅÞ¿ñ&¥«hÖ2Ks%¬°Ýj6ð:†$ò¹Ýòœ–(:JU½“Mµ©ô9)ER›××þÉ5jVŸ ¥¼«§¼p‹h§Ô’+©bڹ¢påˆÁÉ8êkÌô©<;­Ú_è0Õ¬&Ö/ïÀiÅ¢-¼ î  UUà‚r+Ö¯¼i2xgMÖü{ ñ–·²Š8ç-#7É1ó2€eF{sÄÃxvùtʼnµëv˜Þ]£_Æd ig #(2qÎ85)óEûM=š´Üeb×{y?ãØoEñE…åÞ™rÍ02H'¹1G;ŒÛ~êŒ`Ú¹MàN…á ÖŸhHìíì-ÒHC$Ïq›Î™A9äã¦+è?ˆš·…(/.Q¼m¸ù+)l Üû¤8ªŸ ~*ø*;/5ž›â+†¶²š]9Ñ ¨ÃÙ¼·+Ëúé\Oí¥>¯à­ßxFk³¨Ü!º—,±$ˆ¸?2‚Ð)R 2˜Á"—77º­ç^ÍÕ§ºÜõCÅÚˆ-%¹Žñ›WÑ¢ 8Š!o¶Q–*\…ÜÄ0޼œ*hÚߎüTmëMšîÎU¸¼M±Ï4Q”\Œ"¨$ ®zŒ6+á ?jèqI*Èñ^JÆÑ¡óŸä¦Ònt ó‘Ó­{ÏìÏñFÏâþ¢–-}u¦jJeµNÓfx.¯/#„H‚ÞlG÷› ŽÕ¤&ê]MZlj„Íiû9Dô?‰_ô/qÞ/ˆô(P²%Èx–‰Veb·aœà¨a´N|³ûEþÆÚ߀Öï'–óM½ ˆ@ÀDF%™^y`öωüoc£Y[_Zé6qøŒh‚ôÃw¶vŠV]êÒ3´€¥‰c09ãžÕþ"Lš‹-ö‘ªhÚ‚Â×—Ëo-´ëIÂüé:þý9!ߌ1‘YÕÂ:Öiÿ™ÕŠÀQ¯Í>~§æýçÁ›Ke—IOì}7OÄ’´cIv¹U‰²7`ÏÒ±“J×tíöëLÔRÚÚ}Â"Ky–£yÀÉþ=¸Éè+ïÍOöc´ñç‡m55Ö®¥ygÖ@[‡GfuÌ*v£ä' Ï­y‡¿b EÒ 6*'·fID±ÆC"ðÊd#‘ƒÛ­y^Ê´dîÓHùœNE^“R‚æô>uøAñ"kY-]¼] xK›×½Ž)ãrÊ…\3‹¾Ý«ß<=û]øïÂþ*kmjãNñ6c O%Û\®QíŒÆ»r$'9œcšâo¿g›¸"k+¨µX,Œì·2XܤF5cà`w6x#¯¥qÞ8ýž+ЛNž »]K£lÒ,÷6SK4ã1”f<ŒœŽµðOÃÏÚ¿â·…t%Õü^Ö—V(Ë´Œñ\NÌ·î³µÕ@ÏR}«½øÿ ñ&’5ñ]ÓÕUg][ÉŽŸ›k(;Opã5Õ Â¿,>ïó7ŽcJ£»NÏúô4m¼VÞ$øuosñÃþuþ˜“jÊn­˜¼ Lr0BÉò¢"» xæ¦ðŒ,5ýV}fêÒå¼5¢¬×z”qÀ–öEZÙ€µùˆýãÏ>À¤czã‘Y¼_> ÓRí5‹=[OŒéë%ˆy-#ó"•¥¹‚3ó21T=p9åtoˆZn­ãë8¼dl¬ôÈc"?²[ƳDû€زmfÁnzW±O *—¨–‹úìzòÅÓRöOs¼²Ô5ž8³‰z£¥1‰ì¼×WÎ!V2٦à ,!0vdT‰B G^ ·ñ æ¹i«ü.Ô5ËÛ‰6A$šÔqÞi–‘²²H©™`Œv¯ï1’ØàÑñ6²Ö^+¸´ñ&³s¥G¦n™//ãŠåDûË &@í»iË'ó^uM”J©;G–+~Ɖ¼]ðï^ñDÚ…­¤÷Vr,J÷I,Qˆ£DŸÉLíc&üyœçq“^¯û0h;>"iúÏÃiµI¢xôõH&Y!6E÷Íqw$Òaf,IpŠXQÓÅø+KÓ|'á_Üx¹í×U‰`×VàÛùv—ñGæùä~÷rghÏ$ƒ´`×û#?ˆíî¾Õ/Ò˲êÎic-”„ª2ÇÌÒ£¯–¹!%³Å]CX«é«gV TW>¯Ð>éëãmWX·®æÕ•m庹v´# !ˆ…Œ’IÇÞã=+«øsðŽÃ@µK=e­ˆÊM ®ßµ9`KÈ ì§$œv¬ŸÚÜÃwoö;‹ˆœBV0Ò;D¤ŒP{c­uzÆ¥wáM8<ëQ4’0g!Ç– ùH$üª¹À-œúv­ðòQ‹›½1¾Ò2T¢ÕÞÅ×H4§ž&uf ½Ã³Fe|ÅŽOËŽ†*oxÚÖÇJ·oí(-&—æ·Š6ÞeE#ï2îòóÏ~N{WøÃ_“V‘¢ñ$r^Ü dó%ù#W#å*€ã c±ÀÏs\þŸ¨2ióØê«çÁ9ÄÞRmyäùÎÏS5ömÆ+ÐT²GY)Ôz­üÿ¯C»oŠË«x}.¬­Qî¤Så剆ÝIûÝzàG·Ö¹í_[ò®Ž·3´òÎ"·r¤q‚B¢ è¹$þ¦°4Û²¶XïMºZöx àº[©ã'¾)×Þ)µðæ É«H±,Ló³Jqµ‰÷ã8 zžÂ¸e^®)¥ù¼pt0~òVõü‹³¼º‹G>¯‡”¹eàĘýk/Ç?4ÚK.­vâq¬ÞI–{‚8Š5å²;ô©¯?Ô>&ë¿àž…0G5µÊÂ/¯ähá.Ňʸ˪I$cŽ™Åoxàm–‘®gÄ·Rë$š “]L壌cb\ázã'’+EF–sVw}—ê)U«‰IR÷cßü‘ÍÛÞx¯ãrYßZcÂþ”±a!qy<}¿Ý'I®ãáÂÝÀÑΞ·hRRD®òÞÍÆrÄûVÅÝ»áK‰²ó·œUAÀú UÛ D@ ØŠ(ýæJãpÆFp}kަ.ušŽÑìŽÊXZt"Üu—w¹fÍÆºFehÎ9'hàãñ©t+6±ºk‹•I8ÏË»ktÀ cƒŸÀúÕ5¸iR9I4…‘‰?{;Ž}€+úSäir¤~cK/— XºIõÈúVqj/@’æNãfßk,JÅ\´aÀVÎì1çx'üEOcªEn®ö-¸'ïxÈ,ÄcùI`ŽH=k>"”F÷&Fž`T‚²;gvMsž:øµ¡x.e´[õ“T‘‡ÙlâBòÞ|¹Â¢Œ’ž4©¹_ÝWl©EIYV£$";‰ä.¢Žãk¬(#|p,¬ 8ÁàWãoŽbæ-[MøyiˆõåD¿˜Cm§ä.Ñ+㟔'Þb 5Îjš_‹þ<ßZÅ­\ÝhÚ}ÖÕµ³¸Ú.!hÃ4ãÐŒT|½ß t¿xRæËF´³²™.0&†ß0ÎáI9]¥Fæ,ÜúŠè•5OY½{/ÔÍh­ýt9/ üÔüm{s«|VÔýï¥+fèE…¸ mŒýìpìÉ ’MzFá‹ Å4vq@cB íbÆV9‚8;@€p8¬]¤XZZ^ùqÅpˆÌì7*"€’;ð¾=ª-ójwQ4‚X£w”ÛB\ÉžL ûß•g:¼Ý“ïcbqöÛu’ÚÌ®•1|ÒFƒ¦ãê{ñ‘V¬.åmQ£°ºxç‚$0ÀÎp޹¬KmJ[1%Ä3#åÌm–¹œ/(=“Àãžµ-·Út¸U^DW©+†Þ½…cÜžsØtpª“LÆT¯¿¯ÄÚñÍ´qÚ}¢ÇߺĬ¼ˆãQ¸Ž~¬ÄŒÿëÙcš]—’ù(‡#xÃmáTœ¬I­¸®"¹ƒ}ëÜ;+nËÀ pHÈàr1þMcµ¹»ýâÀ²NNØÚG#c†Æp=ûшJRRHÏ zqpon¤·–°XJ»§Žc YÔ7N ¨87Þ=3žø¬ ãXÄÂA4O)mí­…Q€ázX‘ƒØUÆãº rðe0\¤m°îcÎ̓V튫çnÓí¤‚ ¡Þ4“ ó®ì‰$'#'Ø®:¯™hŽÚ1åi·r$¸k6Y^Ah IeO2Y$y¨ 1Ǧzg)$¼XnBÏ4¤í 2F:îÇ >¿Jh)Ý–b­nÊÎÎpˆÙùK¿@Üзž~ç6Hr_yI<Ÿ@+–Sz\íŒuÐÚÒµWšQ¾.•~àÛ—RzóëYÒD¨£Ïu÷Ú ƒéÛüõªÙû*Š­œ²óˆ×ëôö¦yïö™e•Žù0«“’@ôôúSe4¯¸B…¤å‰¯­-À„عfeç*GCÛ5OWðÅ–»¦\ZêËnö—¼sG4jUÁ×ÏŠ‘œ©$à3óc§¦)é#ª·’Y±ò°à©ÏëX¹+ó*MÑêx݇ì™imÑës\]NÒÉ, óîdCÌhÂ2±0v„ž¦¼ïYðˆ~EªÇ§h÷Å”R‰n|›kF4Û½Gϲ0%XHÁ= }N˜HÔÈÌxÏaØþTšá¶ÖSʾ†ÖT‹åãRyJ‘ƒ×'>•ÓOÕùž‡[*„ÔT4î|¥a¤xƒÃþûwŽtñ æW5ñó< BHsÔpOzæüCâø?ZºÔtßOòÇIcy·P§˜ 2ÄO=0Á$ƾ¹—út¨Ì--¸m‰AÔ8?J£©xHÕ¥Ž{Í>ÖK˜¥YRWL°Æ{õïŸÂ…˜8½Œg‘KKHù¶?Ú©ü+«Eˆ-fÓ!dY‘µü›‚Ûð#”ƒ¹•IoÝÇÊO¥[ðGÇs­jq[›(,#L,úµ«Å… ¨‰<•|²0àl 6î•ïšïÂ]¶x¯tû9ŒˆQžHUä*F ùŒ cñ¯ñOìtž³[ÏÙÚŬ¯! ³ÙI(•'-¦”(  '窎cJ¦“ºg>#,­Eó¥t»nløŸáÔí®¿‡¼C¬Zjº­Àº…â+í¨g; {€`”‚ª|Gø¦x—àìxƒÄÚëAkcŸÌ8ºi& %ÆXn29m¬A'åè1šà"ñÆ£¥Â·_à–ßİùÖ/¢Í+”a‰ã’1–ÈPH+·î§äÿjûŸ k×Z/‡.®­"‰¤¸¶ÀöÏ2o ²[¸ÊI,qÉיּ§gÜòkN4œ/sÛ>ØÇûx ÄZÖuªø’õ%Ž+uaöx¤Bp‰¹†öl28œ]÷Æ_ºßÄ)|-gðïJX¥‹íº¡¼ÒO9 ÌMˆ¨.C ƒ^UðßâÕÖ³á«}?ǺF±®êãP].’c4©8óX*&ZGÚ^A‘ÆÜq–5‘ñÇÁ>$Õ¼G¤GðB}^éµ;™-ÎrÞÆ»öÞ ì‚ÿ.ÂD |̇*2œïm}Iu*B 1òùɨþÜWÞðìúeü6ñkP[«HCºÜà\"î#Ëʪ”à¼:ñŸðÓö“Õþ8|jšXµÛ ì-ç2ZéË"¥Ä’ù?ÂŒw4cž™Ã.@ä×Ë|1÷‰õËo†r^\Üè–â tëhžò{Iª;J`<]X²’rN8ÉþÏ_ͦ[Î%¸x×Í8œ* .Û˜¤c’tÓÀ{fæÚ¹Áex×å—ÂÐñ—´¯ µö›­Iª+#Í>Ÿ,-lb‰ùÄNÇsgˆÕrå˜çÙ°Å­^|4ºñ‹ÿ ÅÌqÆË¥\Ç'Û¡”< °Ÿ8‡Çw8 _„ß®ügbö¿ uÉ/õ+JHhÖÆÇÍuXmR ÞdŽFOÎG¾n1N¶Óá_êwžÓ<ËsâÁr5 Ö›ísÚ//pa+[¤ŽR@+‚HÈ'‡-$zNQm»ÜË:_4ïWš…ž¤ËáÍVa%Øo³Z‹KŒ¨¹¹ Y7ÊX É dõ¥ñ7į üFךÂoGc E–ßlšn¶3#ƒ€aÚD8a!8·œšòŠ_õ/xnÜëFÑä†ÇìñÚZùnË Ù"UWæ à¨%O'©òÉþ!xnãÂvVÖ±n¾¶in6–Érø$0o»´.0:äõÍg8¹+òéúž}LzéF+™/ë±ß|Uý•-®ü\|;¶ñÇ… O±y`Ööú„nLF9]§t2òsƒ”`Wá†Qð÷ÀÏøoJ¶ÑîˆoÖá­9#–[þ$ÞÝ‘PÀy88î¾(|Cm=áÒ|!¥Æ—â{xo®u@Íom ÌíæË]Ýó q\§ìãk¯éÿÃzÆ­{ÿ¼³rþòÕÄéÂAwwà ݬ‰.§ü‘yÇåDªFåJ±÷£Á?|?ñÓá 6~Ö/õ›OM3_·±´h/.‘¼ÁÑÿzWÛºC¹€óLð¿ìÅ©ËñïYøñûÄ~EÔ4û]/OÒ”2m·BI–mʤ3»F;òÜWÑ?u_†ÿ,¬tÜøcEŠþOô{[GDü“Ç]ļy®zŽšz½N˜ÊoG±ñÿÅØõ'Âz^³&Š×ñ¦ƒ¶ñ,‘ì2JŒYÛ{3á‹pH"¼?ÄײEy>©û¹î²¶àð éЃ÷‡í·ãÃþ­-Õ&»šX|Ù-ö´%:º‚xÈìkó»Ä:¾ ÞRZGu$×rý¨ùð©â´í%¹ÛÙ^ÙÄq ÷RìRÃ÷d*…gàì$d}.Jm¢2º×Çcê/ øsOº¼óA¶»K“m¡U8ƒ€'© =‰=+Dê«df¹Ôm冡Täàl“ŠÈðÄߨR*í.°Êñ±‘²ªËÀÝÎyRñÅžoˆ ¸žuKp…dnq‘ž0 䓊¬=ZS‚×T}Ul=HTvM¦Kâ÷W…æÔî¢Ý=œeü¸2ƒÁ=óžžµÉê†y…Â=«N"Tˆ7T‘òzç?CŒu«wÞ*›[d]a"¢•Lv‘‚ À\ྠèF:|¤×žüOø·i&› ðÜ×ÂÜií¬Ëuo–H­Ù4•©$1+"‚É?ÂqÉYÆs÷ÕB‹¥MÊ«±³¨è³h÷:„÷±é¶ú\\]½ª´¿g e„H…Ë€2ŒŽÏ¯øûKÛüD xsÃÚ¦¡ Ÿ‰¬-u¿í{f1Â!˜Œyû ‘•¿. O”m²G“üiø»kªx~ÒòÒòËPÒmmȆÐ>ôÓåò [™ƒ,’“æÉ‚NÝÌ[iÚ xÞ“ñ”Ûé£MÖe‚â ‹wââi¼UV#jí/'½ZQÒ)\ð±9Ä)TäåÐû†‰ö^2ð´ú÷ßÜÛ‹Æ“N²E¬AîüˆÚUyÎûØ ÆOlŠƒà*Üx‹ÇºÆ¥ðëDÕ4/Þé¡õ u'·û|—S†FP±1|’ 'E‘ÐW=àÏÚRÏÅ´Yf:ì·:³ÿd­½ƒËrêJˆb†YâAöH˜$xË …Î1“^—áKøŠíÕ´fµ±·‡ÉWÔ®f…µ¼—o4QìdQ.–o,•$ƒT¨ÚMÛòýéÔU”%U¶W,^ßéž*ø|ÚO´ˆ5Xµ{1jÚ15¥¬ !`³;ª¦FYãb¹VÆFÚò#û.ø+Ãþ8ð·ˆî¬/n4 E­ô> Vx2‚á¤-1Ϝѩ{á2ãÕè øáªüI¸µð“iæÂUv¿Ö¯LE-îˆ`ñ)†Eˆ¨Ž@çRzâ¼öŸø¡­K{kue#5Ň›qo ÏH‹ à‚v·NJ€£îãŠP­&Ò‹ÔÇ£JŸµåÿ3éwñ~™ã Ëý¤$ÕT¤jm%Á‚(Ã,~S' ÷0BŸ¼;â²|'ð;áþ£«‰4-5t;ç•'šF³1]3™<Ö9a»i*77£væ¼àOÇ8júgˆY®Í„Ú8ŸS¶†åÅv¯‡*¼aƒ±²NN:⽪M^ѼIoe§[\êz Ó#¼½¾iâ@^ef1¬aË6[ËVßÎ\áH¬ŠMu6§^#xž³á¿€š%§‡®ôÛ‹‰®bÕUâyao.TFù‰Ü§88<þ¹­Ÿ|8³Ð<þ‚ßP·Ò­@…DÚƒ¯ÛÔwÊQ¾á,~SéžõæƒÇSøOY³QÒRóLµ‰ éŠõ-%²ãÝv>f;[áÇLTŒ.¬6ëúÅž¬/tß ÝAµ„‚D²xDŠ·a.åWØÆ,Õ‚š÷‰¬<"“ØIuâ{ûËØ¬µ9íCXÁcmŠ ¿v"wgpù·1ÉÆì¼U4^Y5]L¿¹’Ö ‚ÚÒV’HY`ò™ä©`§†ÆF3QJŒ½çtÓ5fy/…þEðD×nüg¯ÜK XÙ‹ˆ-¬¡‚;˜ÓÌ %·V ¹ ä‡ cvHãupÚO„ü?¨ü/ÕuÙ¬_-Ymd܇wF ;nóßpBŒàòkÙ¼Evþ:ð-“ZhžÓnõHL0[joGV´­ÉuÊ)àž3Œù‰> |BYt˯kžѼ b[Û™ì˜8ä_ÝýŸäv"_“›$k²4¹ãîíýnyøŽX®U·ÍýÌù§Â´Îµá/‰SØ[ÛÞØ\ǶâæÞH¼Ó¿#ja¸SÈÇ×"¾×Ó|ñâ^KM3ûJÕ,äÉ[…YmáóˆI H»°êXàŒc œ×xËAð§„¾Uïw¹†”¨©FRmçðû⿆¬Õr˜àTîløÈ¼ûâ§Æ‹¿‡údZi©iw Ñ]Ë`×,–ò:‰vòOÉ‘Á'ñ\ê…šV¹ÑˆÇû슴DÚÝ·ŠµqበÊRE‡QŠ@ ¸™HÂ)<‘Ò¼·áÓjQêÚÌ_/~Û§$QHÉɾã¼1S’Ã+=k²·ñþ™ñVÖ  E´‹Ý?}Ô×'LkÏ´eʬQüÛÈÃO¦H­Ïƒ_²W†õï‰z•爼O-µ¶Éž(RÖ;‹¶fx¡E˜0Dù·6ÆO5èQ¥%~gÏJ”êÔU!¥Íÿ [xKÅ?µm_À)¨kº…úªÁk ŽêJ"¡)§îÁÀ,N2I&£øMñßFÕ¼q©éÞ$Ò¬lüOhÌ—wæÎ1r²¦[Êyd :íÎqÎ5ÍøÖ÷Ãÿ|E«xÃúÛèW¼É{ª›?µææ%‘eT;% Àƒ9*AÁ¯EøÑñÀ¾;ð†ï¼]&ŸâÝ+ZÒ¤ÔÒkek˘˜$ adnl¨óZN“æ¼®ÿÖ§†–’íÛ[œÇ‹~2xƒÃ*»šþêc¶åÉ÷ò¼çé†ô4ï þÑÞµãm:/éL[Pº(ú‚°–X÷À°ë´ž˜®#ÆÉiñâóMÓ<){‰s¬ÜÜYCi«ß2ù¢/æE À9R ¨È8¬ à¼:·Œ¼5¤üÔµ}OĺRïÖìR1lÚ\%¶[¼RJØ•œí`žsU ›¶ÞG§‰£[™»DúãÆšÇŒ´{ûwWñsáM>Â}OP²žÀF!HX‘‡ÊŒ[7'±\f¾/ÿ‚˜øÚÚÏAðï…< â5{‹ôKÿX[Oor-õ1 ¤FIR4Hc,|¶ÈS–<×®øKöƒø{Æx+HñÝæ¯47—yy ¹ƒF²–± Ý@Ÿ$Ò8 oÜÉÚ§h¯‘i¿éÞ2ø×®ÁáÈ¢Öµ«ïÉ}?ˆ ³Ú­ãÇ”,qåD«ÄAÀÜÊ«žy®¬.RÕ…z²Q}íÕ÷þºkämü]Kötñ•-½ô×Wñ õHðCàb0:°Áç5ú?û9xÚÀü]gC´²Ñ|Û¤‚õe‰™$ ß;•鸂xïŠóÏØ¯ö\Ó¯¼/þ)XKªø·XS%·—t‰Ù‘~flÑ2’Ê@9aƒßŽëâOˆl<3ð‡û?ÀVðÙÁ;BÁ&2‰$l.áŽpTíּ݃<ν:tå;ûÝú–aÞ»z5ó<ŸãçÆ‰ü?ã]\hWKyøWð²oÝÜG¢ÈÑ,1™šDù#¦9ê~nkéy®ntÏ iºMœ?d‹6öîÎÏ9EmÁІfÚwc±à׫‹¡,SR‹´V‡Ôe¹Dª¥N.Éu<Å¿µ•ç„íOÑ­ïe[éŽic+-÷”¶.{ƒÅt??iFøã+È#ñ,::[–æÀéÏ#M 2– "‚b+ÓŸ¥{l†÷Uð«µÜZ`Õ&¶ÝkÓ¬ÑÎs‘惸lóÁ¨Oð³Nðô‘jÚŠZê:…¸7ÍdŸe’êt\yNÐI9,~^4é`©SÛs¶9%L-DÕK˜^:ñV£s¤iºƒÞÊám5Iÿ´.äŒIl±°fTƒÎÍòðûFß\VOˆ>2ß[kš“f–š>µ®IÛ´Áâ!XØÉæ`’«‚ĹàpxÍt_¼7Ľcã [>îÂ5A&›u2Ý_Ã"¡òÂgƒÊzÂø{ð‡Âÿ³…ޱâ¸Y¼y£_¥ÿˆ5;—–æÂU13†yrÂ=¸ùúmÀ®Út餹´·ãêLòªò«S—_ør‡Æ†zG‚´.>øêOxÇM°aŸ}rn´Jøº34ÎW|J µÂm9â×ìû)kzþ:ñçÇ¢ÿÂEy«}®ÒÆÓ[kr¼{^æã|bEa!dŽ;U ,zyÄÚ‹á}ç…l¼7ð“Æé¬ø£_»ƒEÓ-t‹7™îÍÍÄI(yö…1ªrÍŒã÷‡†¼U©Þh+u¯]ŸøH]JZ Él¥Š†Ç#s&c<Ö³ÄTQ´o©ìUÃÒhsGm×SâÏ~Õwß|u'ÂOÛÆ|Xúê,RÆäÊë·2΂4Pœ {â­|\ð׉¾ë:%·‰´SÄÚ~µ«A¦7ˆ¬#µÓÃJ¢g´Œ#]íò£«9#"½¿Dø+uàO§ÄðÇÃÛŠSµ„z¼v«Ùµ?(ÎÈ<•†>µ©ûLêº\zš<}¥ KP·&··žXä¶YHŽD8L•'-òñƒYª”•¡êÿÈ®ž.¤ª=Z[eêfü_ñâï ÝZê·ë/›¦ÿiA*yQÞFw…}™@1óÏÍŒbÝq_&ø»ãÕdž¦傚—´Ý¿hø'þ¯àûýWàî¡êrÿ¥ùWæFžMÛJù7 IÈÉn£Šóo‡³Æ·û0믯üAñt:n§{n°4ÙL‘Û~V îƒdŸãpŠ÷ïٳƗSI«Ùèš²¼´µ+áû›«én-o#ܱù #o`êv„q»Žs]‡JÔ´ VÃâ`Ó­üGwÙn¤Q·ÙÏÊY,Aù˜¹àtª®kõêjðÔ+Ëž+^ëoR÷à ;|:Ñáñ„º^£öø2±ÞÄRââÛk*°ÇÊ~`q*íöPE]°øYoà{rºî¥s™}ëor†ílÔÊ‘(\ì ½šg!ŽFÜ+”ýŸt»M#ÀÖ÷½Ð¯t[pñ%Ü—ɪðóÞü/vònÛxiŠ#‘’$Ÿøy¡KyÄØ¯ôß>?´I)´P'å ÉÀÎíß©¯:ø¿û1x#Ä· ‚|S£Kw ±ÁrYª© äf`ÿ+6à26ƒ€1^èx“ÄxæyõO $šB*Ë¥Ü,æ-Ž7£í,÷À9SÁ#BëáFñ?Æ×­â;,¡³·ÄMn­Òq½]édRŽæÚ*áEI4Î F•H½‰¾-ü(AÖž¡ökM^Ä´X>d‘E”³)$ëÐW™|CÓõ¿ìÁmâM]ÅÔ¬«4æÌ´¬Š1óXŽ28äzWéUƒ!ÔäÖ4É-/4Ý?í1ùZªÀÖó²’@ w°uÊàãv§ñö3Юt)´ýìo¬j)¯e–4œžYþO”*pC9ØÛ‚…=FkVœ¿vþLð1déź3ùŸú¯ö燼U¥[ͤø†ÚìZ¨¶€Z´‰4j̪Òìf.7ù˜˜Ž‹Â_ ¦Gÿ„ƒã—‡ÿ³#¼I¦šëÄSiëå28}šÕLÓ7˜¶ »€Û 5ôƒá—ᦥ©Mªm·’þt—Qk •Y"‡Ë˜ ÁS)&2U7çÔæ¥—ƒ¬!×5Ûç“I¶Ö´¸£¸„Gy¶êiVáþY¤x‚xü¼[íóÒNÝÕõRpýÜtêzT°0¥%)Îú}Å=ÅÚ/…|§6µu'†ÿµÖHµË«©5(`”HÏ"週+cgiˆQ¸ ’:]xFãC‡FÕt±â+û›;vd€6£4)"ù†uwÉŒ±Ê€¹Ý–ar¦1·píÁ8䎧ŒàkN’ÃÑçq»–÷w=L½{;³®ŸQ³²*–«-ÛùjÇ Uq$}xúzÒë^"–ö-óÜÇ8šD+F]"8…á€É=O9À¬É/Ö ¥R‹:Bv˜ÔcœŸ'ªŽ3ÛÒ²n/•nX[Je`¼Çûƒ® ð?JóåVIr£Ó†3—;þ¿ÈÔƒXÓïn5ã3mf1²1`½x “žxÏZÏÔÂÚú±†(ŸdjI»{%Êí=× 8äõ®oÆž<ÑüiêòÁöëâ¾U¼ –fÚçÉtqžÕÇÙøsÅžò/Ýßøwçj“λNr¨F08ÀçkU‡¼y«4ˆ–&òä ›‚4<]ñjÚÓÅSxÁP¾µ­M¸Á½Æår¥å‚¹ÇË“‘Û¥U‹àΧã¨t{W3PÊ÷FÊÚsöKXÃaÈáÙ°®=:×¢xsᦟà¨màÓmÙ"…a·Î‘—#<ç«z¤î5‹›±)s"*B˜ÀÜòÇJÊ®)R%oÌÖ–ÎjueÌÿ±¶·µºò4¸ X£p …^„ñëœóÞ¯Çyo%“#b9‘ÀÏQß§nÄU(¬Eä.rǦãõ5¶žj‡iÀƒ{“Ôþ8Åy\ò½Þ§§ËZåù¯¥¸Öa’u󥳂E‰Î1ìnžÃò«:…í£ØY´ä#Ī…ä²s†-ŽyëžÞ•NÍ…‘–Vó¸0¤ôîzpqTCm#\ëãmœ ’ßœõÇ ¾g.æ~Î/UÐØ’ ‚7S¿ r3Áô!yÏL ÁñgŒtýÒëT×&ŠÎÂÎEùÉʨÎ{ãÐ×âÏòkw§OøQ&—¬HU–âxfdµ·ê-8C…°PÌOÍ?ßSÕ#Ô|ewsrè‹)‚íC¬sÈ&qÑ–ÜÇîæ·tW“´#;+­ÌoøãÄ.SJømlö:È¡n¥VK™Aùód³œnb `Et? ÿgÛ]ÒYu9†§{pâI.%|Ívû·bY7|À¸UÇl×m¦é1xoOX­­F¯$Ò)´í!ùÜž„äç“‘¥:â%¶Ûªíyš9O–Kº*2‘‘ÜÏçžÕê–ËçsT¬¼Ë¶Á-žB‰ ŲÌéйÚp@¤NV µˆjžÞÔã{‚à1&ì°byÉéøúUNàGyÒîü¾l:îV$œõ'¦à%…¨Óü&׺dñ‹¿5Sk¾ÕD'—cŽ0=;‘X´Ü»¤”}îëï¿äIq›Ë= 9¢ž/œ¯ú«b­óúp^´ÕŒÞÞ3ÌsDà¹1Ë=vâo¹Ò-â·’Cl×<(áæ1JÀ¼ŒãZѓ™e²‹¹IÔÉUæšâHx‹àµ<Æ8Ë1ã søW;i;ÄÙEµï ¨¸¾„É&624ÞFâQʶcÞ}ºã $zU œÛgÌ–W,ÆYêÄlOlƒ¥ZVò`Œ[ùŠn¥«¸Àu†ùúðO\Š{\[È\ÈŒ#UJœ¼ õèEc8Ê[îoMòktTŠ`²6ˆr:ãýãÓð¦îÝ™Øä’zŸlÔi"Û7ÛQ ÁvŒGÜ=jL¥¶Ÿ¾Ç–oaéX?t鞤¶Ì¨ÖìA÷äSY„Ë#nÉÎ9?^{SÀBC *xSוF&Ã(ÚÈ@äúÔÜ´®î9rÀ»°yç¯áMwW$¸ÁœQ¸¸;>Vdžœ­¹ 0àätü)y »tÑG#1GTqNO§ß›€=òzšsÂv€üuã>•Üàz ™D¤®ïq¹ç¸ÛúRI‡ù—œu§°(Û€8''ëL# r9æ³•Š²#’Ùæ)qƒ¹A®âŸìûáŠðù^4ÓiæSoÄ †ˆÄy»YKCŸ¼™ù‰•ß¼eTþ”Â6-’CëÅU9ÎŒ”àõFpôëEÆHð½sö]×´Æ×Â~&´Ôì, …WNÕ­dí$`’Êp7$dgâ_>xãK¹º³ñåï…ü-«¬Muá [O½fó5'd¦âßšÜ+ ”Ã3`cŽ~àh€È~ýk3]𧈤µ]E^h GŒAÑή»pù¨ÁëÍzT³:œß½WG—W*ŠW¤Ú×Ìø*×CñÇì] Ö¿g¶KYõ›?²\\Ë'›y¨ÌÙóåheå#‘ã%W(D=é–_üm§ü‚ß5 ÿYÖ›RÕáó¾Ë%Üó@ësmæ!.r£ï¶ØÎ9ŠúóÄ߯5­vhfÕõ ôóoö¡¼µŽU_Ý”‡i3 Q–\!³¸œ×Žjÿ±Åņ½¢˜âÁe»X¦¶ÑîSÌ1*¿™(7—}ª„`1óšõ£ŽŒ•ÓIögÏâ2êÔìÚ<ïöz°‡á¶Ÿ¤[|šÖúöòyeÒo`†VòÙ¥FGÎé° ò…Oʹâµ4 ~ïXñEý÷Á[,êißj—Q”]ÙÃ;EFgy›ïGä´›KÔÌ6Œ¨®oÅ_oãÑÖü) é±²±Ôà†[nQ*ÞK<$F„Hv³8ÜyŸ ø±F‡U‰-tÇÕ,ÒešÂL,V±OL®åfç —ÏzΦb“æ–¾ŸðçŸ^¬°‰Óžúêkø¿Á·^;Ðt˜<]âÝ+\Õ-´‹xôØ­®¡‚å§WŽ2.üÜá<¦yKóPOçž ð^ð¯ZñL>+Ô,õ omç†Ù —-+ä©”ÄJ2T¹Ïøýào ø¯HÔí è+—Æ0yzft¶Ú¡´y|ØÒG…XÚÇåS'b1»1ÍŠM6‹o¤²ý¡¬|Å™…³Å êYÝ|Ò@P0y(=Mjèµ%½µ–£yy&ž-¢˜Ü´i啚cDm gq$®õ8ï]Tñ´¤ì©ßñ8èû8Trôœß´f¡xå¦Ñ|; êrCp޶j² ÆŒ'ÙâHåÌQ4™FãŒü¼×ñãvŸ m4¡qö«ÛKÙolí4èIn%Ø0ïìås´'=Ïü;ñšøÃãšç…ïu™í…¤›d_&5tYŠŒî(z*ì @ãšèH?𕼗7&} FÑ\E;`JÜCýæžk‹©ÒšåûŸc¯—/$Ú¿‘É/ÇÝCUÕ#ñ6«{n—†v, Ý“Ó#Ø~5kIñN¶øjImÒ+–Þ¿×ày§†ÿe¿xÿWk:Gö4÷—Öñµ»L‹5ÆíÛˆ¿ˆ¥¶!²NW×ÛµŸ |,økáÏøÚ[9/oîtëKkKuiu/³ ™®]Ë9;7…bX*»8¯šu÷½ðNŽþ!7ú·|A¥Z>É­õTyRm×Ï*n<Ã"2(-‚ª3ƻπÕ¯©¯[ísCÐíŸC´¾Õd2ÙZ_"~íD¡TÊÒIh×äÀÀ-ƒNñÄRåMiØ2éС&èëßCÖ@’Ú)#Š4pÎÏ*ÅÛÌ X«‚+Ï|{ñóY×uUÐÓÄVVRkZ4¯ksj!­¯“‘4ò¦2Yå>Yùny1x³D»»ñlú-Μ÷²_ØY—ÖvÑX%½–b¹’@ªÞlŒ%˜¬SvÅ$‘ã0|B»ÓtMCÂþ—¥ê1xƒÄqhºƧh‘ǤÛÄòEq¨!lMçnÄ~XbÍËÀ¬ð¸{»µ¡Ý[Vœ”w_×cÛ¼UeâxVÎÃQ×tÏÞx^êÊ/¶]4Ö·š…ÂÉ-Å´;³ n! ©ŒÞ|ÖÇÇ6:çŒ.ï¼y­xG@¿Ó-mÍáÓ5Y_èu$f;Gó6¤ìNÒWqï9\ kxšæDÕµýlÚk+×üMjt%šsoju[£ò”Ní $i—³-¸äy ´ðö¹ðSà áHðýêCwýonîµ8nËËkö‡ùeC,yËœÌ ]”Ó”»'äc[’å–¦¥ÏÀhu‰í7Âņm'F„^Ámy¶I-áuxų•Á3Ëõs^QâOÙkWÔ|[§Íbo­n¼GwéúœMÙ„,eã(«ò¶Ç\tåÀ5ÞëŸd¼ø‘e¥x]µÔ/`¸š]cX³…SLˆ*‰¢‡åQ–WfCåWbc½tž5ñÌúv—{5õåÅÖ©n%’/ì‰Ä6ºµÃ¨ÚóÊ~p (np à5†Þ¾§‹ˆÂѺu%ʯ|UÕ¿gm~ÛÃþÐ5ë-ST:„B :ÙnU–ÂJ°[³ª¡^ šB8#ïsÙü6Õìµßk6ˆáÔâÔbÖ­£qt‘[ÙÅrƓʤÈ%qæ–Øv‘”È _=ü ýµ¬&¿ºÒ,k¶^%Ô/%»Õk»»ˆLD O.(]–hŒŠŽ¡—Ió^cñ«â†t]·¾"¶ŸT€Già±£k¼vp=É+Çú"¼’þñ£W+դ݈¾/Ëேšf‘ðÒâÆçÅZL3OwªÝÄc¶k©]íåZ´«½£CˆÈ9Ú ÇÈþ"ø)ñÂ?æ¿ñ¾®u Ý6ê[Åž;U’ fåàÜø ÊB…'•'­q{%9ó·d‰©Œ´}šÕuO§õý#Э´ï øP¼U¶–âYQ<ÔŽaGv0&E3‘ƒ)Œýý œW±üðÿ‡>%øZ{¿„º~¤êöFWkíB(äkwGÜˆè ˜ '$cyÚ›r ¾Zø“àEyz|-g¨n±Šð]¤ 4²1P Fˆ Ï™#“øŽH¯oý>xƒá7„´ûïjÚ‡lþ ­¦Ÿ"OhÂKD¶&àó&óY0ïœç‚ jcµT¥ÍäyØJµ]g‹Ýôÿ#è üUákûW›Ãº†•«ë Ùìöô¦El€¯ÆX)R0)"µ.~3h·>ÕLJà×5 :ÖKIm<:––»âÚÕÁóØ“œƒž Æ8¯”ôø‹Wøá ø–ÖÞK‰,¼DnäÐm¬]-§X¹X€sóD²ylpňö5ë? ?iŸÝ|=¹ñˆ4 /ÄÚÎiêÖš5Ø"šæëišÙ%*¨âÚ~pJÇ€½AŠtg7R×}f…fß¿d¯§ôÑ욊­¼ ¯_YÏcpÐÉ´Þe¸‘îcq…i†ð±ë±™±È$d`רé?ں䶟¯ìü1mºy¥¸[Íâñægc¡XlÙ¹rFÉë\ŒfÕ|Y§kËáɵk  ˜Æ›4‘„¶žÁ¢S*>{ªº¡‡Ž×'qðcT¿Óo’MbK«y¡v‘i0¤…Á8xÍc+ÂvŒU'MZœ´©9.ú/»SÕ¡ø[­ˆtýWYÖn.Rm®¥ D&‚v‚VòSt‚IãUŒ€F¹Œf¼ËÅ–%ðÆ±¦è?¯í’ûijɭkjdž´ØÝˆF¸Ëü;8³mÏ$óÖ~!Ô<3ð"ÖËÂöÆ‹¥)÷I©ÚGP¶…¥gškxÙ »v¢eÚ¹'Áàì¿h»¯ |^u_†^0Vš<¶úmܲî½×@Å廩Š8‹ •2}ÕP ƒÕÆxŠŽ>ãÓÏúÜúïÄz†±Â=_à߆lµ±ÝÄ&=JÝf¸†$+倮Ä.ìœNÇPEq~6Ö¼uñ|Yhú¦’š5Ž­Þ‰­-/E´ <’¡Ì¢IFœp}kÎdOk?Æ‘ãè[H¶û˪ÚÝÉ*o%bg1ˆÙ”A*©*O€ ö¡ÖlƱá‰þÁ©Ÿ#Ïö=.ïM¹M&À:¶Ã-«m2\L@Q+Œ¢¹$zóÃ+=_¨éÖXs'u³jß~ÇDý£õïƒ?³×—¦‹Ï\ø‚k“6·.‘$v÷âk½ÄÍö“ºÌGÚ6ä¸\)ùMy¯À¿øOâ^5ð wºm´7q‘¡j:ÍÃ^̦2§Í¼‡n$}áG#°ç¹ý™cíkþÕusÄ-sã™ç…c™îe‚l¦ÕJ¶å¤ÀÏ^·N<·œöþ­câ£%Jí§ãtyçß ßéί¨k Õ¼E¯ U:a@M…ÍìêÑ_B¾K:’6(Ø)µœ?ÊxúwÆ^ Ô4ØY|8ÕUøUái?´UÊn˪éÚ>—>ý»ý…9Ó'1 Ì[ÔG$á "†a¹ðHÜ+Ø>x>kj¯ÄOOçMv²í¬eK),cXLj·½1`K.ô Ê¢á²ëï> ¶ñç€;·ñ†“g¯êwº–$¶²ks+ v¼Qù‘‚~RXN~cÎNkéÿ‹éÞ¶¸oí+iž8­tT`#/àS$òÇn.3Þ¶f/†×¿ ¼=y ¾©sÞ5Þ™2°{;«x”"<*Ûd‹ÌUÞw6A9Ìâ1’”UYJÉic\>Ú«E»=[þ¬z?ÃmV=+À×6Zk4w>'s“ØÃ-ÂhrÜè"hÜ«mç±aéTuŸh1é¾8þÌ¥¨êQÁccçÓÉ#|Ç{´Û¿ÙîH®'QÖÓÅ7ðiöwš€×u¸ô‰5í6ñ¤[˜£˜‘J&Ö ÷·½ñ±­ÊšÙXô¸â·‘ÐÆd0F$–1»j–*K¦Aüõ®OEøBÚ·4}SBÖ.4KÏ^Ǩ& Ù†ÏS+ªE8ÚJÒFqÁTªqµŽ‰ÔÓ݉æ_ußüø©ñ]+÷>Óµ(<ÖFÙeEòfŽ>X#¾å“nÖVA¹vÃßgßÚûÄ^6³›þq‡ª]5ÃÙËoϸ"2(WP§çæ_LWžþÔµŸÚºÃºÅ߇|!ªh-uª‘Iö½7$oS ìIX;†r@éÍj|'øk¯xÊ-Wâ¶¿a4{~ËaœéÝ(‡dr½¬¥^>p\‘šub¥K›©ÅSܪ¹V}ÓöøÓ£kFÓÃ-s£¯‹£…[ ’yd”´A"Pw(R|ðñŒ‘Ò¸þÍ÷ ôxžÿN†Þ–òGÓtIæÑB¶è€WÐy´m^ôßÖ¾ê>0}TŽÿí6Ö}ºfŠé­îoŠ”wõ2úvæ¹ +ã·‹¾)^júÆ?ϧéÖúžõÒíÌÖfþËìáJ[( ¿s2HA¹Î7 ΄'.–FXºtqQ䨽ݾlÀøYðn}GT¸ŸâDÚæ…áãbÐB‘O¨÷ˆ¤ÏòùyÆ{¼ñÁÑð§ì‹yâÿÞCá웋yæM—_ÚjRMã??”4˜+€£ø†R/xCÁž!ðŸÃ<'â ]þ"CªZÚÚ^™V {§‘Uœž«Á#q]ïÁŸ:ÇÁ?ÉâoÚ ÇTñ÷†n´ÙÑ´M4qs0P¤ý˜1âM’…QÓ¨¬\jSªÒ’ågÈÔÈ£JO™^/ïÿ†<¿IýŽüe7€õ–ñ„îôþÝdÓ ’¸–æc‡L¬A™¿w’A ‚§8Å{×ìÅðÞ?Ùëá¥ö›â;wiõ%ŽòÔ^]Ú$ Z9FY˜)TìmÃ÷®2ׯ¿>!ØÞ^xãÄž"}ú.´*úÊ};QµBR9%ߘ" ´D¯@G&½–>°°—ÆÂEy¥iPÉ WÒ^µ°¼4)eRrF'nÒÇ$UW’½¯#§ Td•(½5½Ê?´7ÂÍ3â§Š/›Á:…ö™­é–¡aŽæT\n“À£¨UÈ#Ž0sä¿g]gÁ6Âþ%³}cN°0]Ø]¨þÑ’ù•¡Û*2ºæneÁqôߌ5Ù¦øk÷Æ ¯jº]ŠÿeYYéºt0ÜÈ«³<¤—Lmå”|Ä2œç5ó^µñÇÁþ,Ô¯›P²Û4ÅJjBV2¼hÌwa•¶ìSÐqÏ5 ¸%}GŒ16ççý~û-þÓ— <}¤éþ):£ëq;-Ì0(ŽÙl8å6Ð ŽvŒš÷¿‹?-~ idüUÓ4ëý3_W–ÃW±ÒXçܠRQØ–9,È>mªÊ pG>#¥êšWŠuKë{ 㦠äÍ5”‘*ÄÃîîÆæ^ ÊŽI#Òh? ^ñc^x}Šl·¹~ê,’Þ\¥9È Œñ“T´ïÇà:ÖOÝêVgPÞ‹©ÝÖR]œ[ù*Ø’<•û¡G$íãèߌ4/.šú›I=½Ð‚Ì4b@K!Î&Œpn’œœb±vqksÞn5,gxyn|%à˜uH|Ey<,ÂÖþ)ôâXƒî2H~î¦w08àn­}SÄÒiº|Z¦”4í^-`® ¸žXn†ÝÇÏT;”àÝÊàqYÿñ%vîàç&®ø_F¼Ôt‹±£k^-èa[ˆWQ0mìªä0dätô÷Ífx -ÞÊóC¸±´ÕPù‰¥ÜÚË ‰ß*U¥ )+ØbrY7ÂZ¯‹á•µ”Kc{râk“…MBÙYH‰fsÌ 6åÛÀçŒQ(ÏHèsNºm_cè;)mΩu¡ÝÁ%ÄVî7M4ÉJLYùV>ï6>LœU/YÂE£Å ›Ô[õ„ÈóÄGžîªÅo;‘”HÏQ‘Y^מßÂí'ˆ žÐÙˆsqs§—t†F`'™@p©¿'j^ø„ðx7S1@ÓÝ7™l5p žDD,p7©8œ äuÅú¦£¢jÞׯ/ÖÛQ¸[‹°ÞEmªUX†\@@Ken9É"Ô×6º.æQæ“K¡ñçÄ„:߉mü?©x›]³µ[If!­.Œp°`WÏdî…JÄlTÚ¤gE~Xh‚ aßÅ6z”R]H·š…Äæælü™lp4r óYƒ¤kÎíÆ¸ÿ†:¬^,Ðïu_Xk¶úDiý”Ó[Kyi ]nR5ÞO–Ê…˜.Õù†®~jzÞ­k©kÚö³y«zk˜¯®$hL®­0‰#uV ùlqÈ×T¥(ÃÝ•­åÐs³øc¾ÿðÅ‡ß ´oµhñÞÞJÆ2vM*Æ;]'PjòâVReHEù[?ÌÛˆZ£â§ÃÛ}JßÃV¨·z•ó‹Ûu‰FZ`AòŽUNçš·­Ûø¶Õµì-ôÔñ„qÁb‘H$º[8qó Š@¤1;$¸åˆPNÐn|Nð?ƒõŸ‹ «j×ú‡‰5¿ .tCDdztÒD‡lhÊR3–;YŽvÖ©Ë8sMòõ1©M$/Ÿò7ÿfÏ^jz¸»ð§„ueŽØ6›ëIÚIt{3\Æ’+)iÛí}Â-3Áv±ê·)q~-Ö)% á$ܹ܊Iàp b¼öð,^ø[p/­^Ú Bct&…XéR¬ìÒ´É26ÐpîßxÃ]‹~6Y轞ðþÐj·¬‚#‹,°íR–è Ã'ƒ’+ld%R^Êœl—SݤãF)ÊWnÚ-Îã[Õm¼3£¿L©m#":6O É9ï\ ßÄ=kâ&±&•ðËO’ t;õIà5ƒ±[ïÔÇL1š—Bø1wâÉ$?æ‡RóŸýÆ=Ë @ÄŽsxÉÉüzz‰k„*-"Hm£l1‘…c»~x¹¯9ΖH.iwèvÆ•\G½YÚ=—_Sšø}ðVÃÁ–°\ø±ß[Õ¦ä]]¦÷W •À=0sÆqšì¯®ÇŸ¤®Wî‚WÐ…þïµ-Ä lí™H£0ä¹áyüp*¤ÇʸŠÏJµÑ%¦™ù`§`:ÆxôÅqV«R£¼™ÕJ”QrMh›1¸@™Qßhéóš­gl÷®e½S£˜Õ1ÊúŸó×ô©ô5µIï-axãû$C8â]ÀdŒð1Œc¯×5vÞËgÚíîãH-@";€ø‘×”Q’3“‚Çß*œ¥ï1Ê´i¶–å;uŠõæKG2"€<†8Éôæ«ÜßDö0@có™Ü°ò—åG™ºqÏšæ¼{ñgGð&•äÍq $CȶVYßœne‰ãå}+ÍàÕüiñŽþÓM·FðÖ‘;ymÀ7£g„þ‰ë:ìi¶;KBXÄÀiUÏd õ¬ø_®ü`2Mã)74È©.œ’°VÝǘÀî¸Àù¸Ø¤à|Úé¼ðOGðeÍÂÛ$_貓˜™‹1hù‰,ÝùbyŒW~K½ƒI§°“÷¸ÆÖ<_ëƒõâ©J4~vL¯%vÌ-ÃG‚¬#°Ð-a FIŽÊ«Óž™­Èf†ûQ1LÞYTï&DŽ€úôŸ•3ìð-ŒJ‘ö£³ck^ ž2xïF¥-¾Ù$Ñ퀆l‘Û-!ç¨é’߬œ¤ß4™I¥¥Ÿ¨“HËRÈvC*´d ¬Á‰zœcŒÒÚ[}”[Iu¼2ÊUœv)È'Žr?¥A+ÍkÞË>r„üÁz.ìƒôfAow¦_iÖI%Õ­”’j #±´ˆ ÛþØ\Ÿ»Ošâ0±âYc·r¬Šx—¯¦ÓÈôÍE%³Ä²A¢O#A Ùq, RG1ÆAùr¤~¹pj+MŒæ¯¾ãÞõF“,гÁ{Œ [\€%õ öÏ8«K©ÞÜGk S¼˸ŒmS!-ó'§;†:õ5_T»KëmRöã?gÓ¢-Ü2I6íÎH= yúôÍZ¹ÓäÔ €I­ÝÄbâ8Û;W•$ua޽óéM©]ò“x·ï®¾½ \ x ëÅ*£MäF‹–` ýà@sÇáV¦¶Kyï-mÝÚŸ5±Ã.þ…ÏnAüª m2xZ;‡ùÙ@h‰€9R¹è1Ö«ÌúMOH¼ ›ØÐL¼ï;\:–ú•ééšÍ$´‘³÷µƒ¹z{XÙd¸¼bd¸s,x{ /–€q×únɨb6ë3A|ñ«À¢I’Ñ©À8åÍ:ãPó$µVÙ$¬I6ãåŠ,˜–÷ãò¶RÚé•ͤ Ü]"e™I…$£Ûc®i>Vî^ Í›¹²Šæ4¿R¾s+msÈ~Í“ÐuúdÖUÞ›d ²è†ad× Œ®ÇŽNJžH=ê¢Ø]_\›mŒ“˜VîKÉü|ƒŒ¬c±P:TÖOjš|ëlQm!&C,‡ŽÌ ëž=ø§R\êÎ(šqQ|ÊNýWõøbè´Ø2IrAÜžp~SœÈç”È™a@UQ¤~O\{`ûR6uŽáºi”‚ØÏ‘¦*O³¸0ÄAÛÄ¥ä £±ë\»=¸ïr&DuÆdwß!n<Æ zäâ›s†í¤jíÀÝÏ9#ùS#y/ š{qrÈRT¡z·J–Dxîæ„2© ä–>3Ž>½*ÝèÊÐÜ4pÄÌ„ÆÞØúö neP22Áâ»ñÍ)òªQjÝM°Ü+V*Ò’>5ø ð[IÒü=¤_ç>ƒäZ WÄzŒ e:3¦Ó…B¬·˜ü±6Иù ¯AøÑâ»í{à;ø÷Àìu-U¿šÆ2öIÄ—öãÊžâXcAµdhÉPsÀäײüFø üMá¿…ú‹p¾$É-¥üÒCj“63pY2å—jà„ cšé<à$ð*¸%Åü‹q{`–¨`I6FŒapc'$œ“YÃC’ªìÙ8¬‡éºqÙv?#þ5þÐá|M}Å4É3#D@oÒðc“ŽxÅ{¿ìmûKë>3Ñth6ÃZñž±â´Ù-ã«eÛ[iÎd˜É6U7QpxÓ>1ÿÁ3õߟõi>i’èž²Õ&Ýê®°Ët¤’Å",›˜‘÷qÀÅzìíûx“ö}¿Ôf¼7¬>­j–rK2¸–Þ Ù)Ø 0X+exÆ+Ò•|%|ŠW—‘ç`rŒNó(;xÇn©àÞè2EeÆ« þ˜÷'RŒí›}ËÈO‘YʘãÈ\•.Gaá-COÔíÇÄy4ó,WvóÚZ˜áºŽâBñ«¬ìëp…”¢…±¯Sø›á JÓJ»þÅÓE·ˆõ{íZgÙ¢†êÁmäXÕq£J’À` 7wâ¥Ö<'­XÜøŠv°×4=.V‡OÖí4X ”bAåY _)NDŒI,6ÖÄN²_¡Óˆu`®¶^BGñj‡^m&ÁâÔåÓfG¿PÍ/»ÌŒ>Z=ªT:(Ž•Íè:ÕßÄ/ø!¾øIÒ´ÿhWdׇGÚ.^@ÓÇpe))Ì„GZùçÅZÖ©­O$ðÏ¡¹¶Ž)Zxþv ÉaüD}ïqšÑø¨éú'/§´ñ*¦Ÿ¦0òÅÁòVâL®"`~MÙÎF3Q‡©('Q»¾ÇÏÃ)Ô¿ËCè©´Í?áÜØ­¸ÓãÆØ>d­´…y åç$’[žMy_ÅOKñG_‡²_jÍw*:[Ø/Ù€\±D$36AéÛµSý¡|Q©ê^·¼²¼²ø‘s8ºß£Â’ ƒŸ|vâ±e\â‡îõ;{¹4Û æ¹¸Ô ÆYí=pÈú䎆•J¢u§#‚¥5:Ú=ÜþÈ¿³¿‰¼W©ëòxƒHžÏúqÛ¨nÈFÂ'rÁÈî ÎIAÈë‘]ÇÃ]_ÃÿüJ4ÝMÓ-týt’vŠ!U3IŒcÊ?bÄúW»ÇûRéž.–M;RÓâÖ/õV[©>Ö‰åÀ¨¤§ÈqòŽ~R:žµóoÇ­Ãzž¯¬ØÇM| ‰gpÿ¼’f!NP¹Àç ã½gW*òNöè¿áŽÌEJœg†•Ú1¾!üGŽ?Þ:ÏU½‰#7[mбć!ÏBüÍžÍs_ þ;ßxßǯ§¬2Þ_jËkiyäIñå‰9+’€¯ÔóÒ¸O|_¹ñ?gáö¢—×–I%Ô““â%lªŽ8R8ŒŒþ5êŸ <uŸ¢ÞêþœÜEKq«´ªÂ\²*Vã8*l×}* ÚFý®y˜JÕUD÷ï~‡Ù<®|>Òm´ÍW»Õ§’J2 ì´‰0?zÄK£’É®ÐFk³ðdž5uøw¦hßõˆµ-I»76×oÙuæîYD|˜° ’ÝkÏ®oóÂÚ%å¶¥}Ûi/n|´ku¶·:ÇågËG“j†c’¬95SÂþ0ñ·â ÿOÕ"·•ní72äÑõm¸lÏ& É ÷é\ÑI5j¿#î¨ÓF½œ}M«ÿiSZ¯öÔV1Ý\_]5©šÊSvA™¥k†“s‘IÆÀé^?âûE½Ò5]SÀR\Csá©¢Öm­>Íæ[É,8x^HÌdózŽÄ3Åz'‹|W¨ÜxšæêÂöí§°‰Ä i–C‘"îÀŒ’ ŒáOLÖ5–’^jï©KwjÒÌŸf&ã{ÜÏ  €IÈb9èí]0ùÊò=Xá(F<²Š—›ÜÝÔ§¼×< em©kWš¼³Åö›—†ôÀ󼩺GgIWwbJ uê*þ¹« ‹;MÝîá´˜GvÎÛ"]£›øÛvÐ@ ¬ëÏù7©< ¦8äl€B|»OIR=èðޱaqã;íNÿûJ9ã· "Âc¸l‘ºH6ª`œ’qÇAZ{)jÞÇ©N¼hÇDyGŒ¾.?ìÖÞ9Ñufè?Ž´»ÍkN¶W¶ÔT,bÞÖ1“™UTnF8ËUÙ÷ÃÞ,ñGÀÏë(ÐuHõù´¦W·$ê;•3$°ùqˆÆØö*0.Š18®â¯ì¿â/µG†¼yâOi~Óü:°Iµ¶5Ëéì³ $¿˜<ÌœrW¢÷¯«~é—øá©êv7ºÞ¿kâë \_GEaK·$+ sÎÖÜs€p)T¤+_V|öcGëS”mî÷üÏüUûG 5Šá¢ºVŠñ ‘Ém+ÈêJH£à©ÎzçŠú'Á:±ñwÂ)®xJ¿²±†Á$YWì¢\´›%¹/æo˜d‚˜Úº¿ˆ°èšß‰g:Ÿ‡­£¿²•~зp‰ß )"K®>eÝŽ¼â¼ö?ëÞñ²Çqñ/é×—ål,|æ•ä;²#UÆFAÛÓ¬)aÕ:|±V~§“K.­BME^/±ÜOûx›Åæ‘›åiºÚ‚êhîî¤aÀ•IÈ@2ß*‘‚['5OãüÛK°¸´×|mâ]3í2Æ#º·1¬Ñ!q‚ìÇh@Ì>^¸õ­Ÿ øÿÇž!¸‘5½jcn]Khë¢&}±´fUÚã(Ùã–ÕÐüjÓ›ãN“ÿŽÌ³ÜYÊ‘ÉVë4bUóÑE!%›`lF ÜàçÔ§OFìËžU›|­¿¸è¾þÍÞÖ×I×-¯¯qoçû5âÉm4v£|Ã}ÜŒ÷®Ãƺ~‘à›ˆbðg‡4ÝT» ¾[‹¹DfEÊîäe°r^Öüû>X麷‡~Ï`þÒÿõë÷ž3žãÃöorñÉ ±I,”» ÁSó.GãÖ¡ý‰|9ñYø™mªü0¾±OÚÆŒÃS·ÞnनeÊ6 qŽ23_d|=øác­Û¾•âäKÝRÂy­nM͸WI |££Ž’8‡^k¦]rßLºŠÊòÛû9`S"E+1’@—KŽs9"¦œÕ4ïÎybuT¢õ4´=#þ_]ZÜê7Ùä’# ’ÅKyjˆüsŒ Ÿ­xwŽ¿fo~Õr]xŠÎïYž9ØÃr–jm¥GI0Ã÷ƒ Î:s^¹ðÃÇPøÖÎãP´Y"i¾ÅÃŒ°$`G̹8¬›ŸÙ|ñç>'x“P³†( \iPÞ°µ.Àr’8ÞÞy¬ùyš±ÙV’’örW>ý´Q<#ãËo‡¾Õ5…ÐüId/õ›k¨c…ÌHÛ-¢rà”¶y8k×|7àm#Lý˜¼?kfæm7ÃPB×±›±rby÷_„É«Ï?j¿è_ÿl*×ÁZ™×5MVámu«ybìÌJ Û K¤æpÊä;ã‚ÔÚׂô]M𮃥Ëg§êW ðCmöqökÙU7I”Ä3E$ŒåNN}yñÑ“§lu` ùåÊ´Kb¦‡i­xtÅ5µ†QoÛÛAgµò¡,¢©)½I<“_4ZþÖÞ3ñ×íâ ]kw^ÒþѨ\ꈤ±HÊŠ8Ì2FJíq+ƒ»'Œb½_ö·ø–¿³Ÿìål>h±ëš¿Š.î¢Å³KÄ3E"Ãr›T°Ç#=ëæ_Z7>&|+¸Ñõý/CÐ,â%Η-Ë‹•DÕÌYs¹F9Î{²ü;³K= ±õ£‡¥ÇI?[Ûþ ™ñ›Å^ O ë—~ Õ|OâOø‡Ä/h5ˆR-?z"‡†ÍW—á<$dàã—øAû |6ð‹,4¯Ú ExãYÓηuÌåm4[i ”ŒFŒ ’wƒ’Tq_Wx?àŠj~Ó`ñTzAŠ'–&Ç NÝçù‡ 9ñÓšóøoÄ?5ß&¾uwQaom,Ñ¢ªÂ#gxÙU ¡á@=rFk¶2µãc8`”áÏV7òwßÌèüe%…?fÕÐôqmk¥Ù˜öÄ‹‹{D @Ú{(\{qšà?gïZF—4úƒu]?VÓn%}*YRä<7“ ˜É#.»ƒšôi'Ç'Gðÿˆ!º—ÂW¢Km^ñ#AŠù,“í¹Ø—#‚x®oá?ìà?øÃÖ!‡XÑ|(·w°5îŸö¹¯¯.î7I"×ôë^æÁ¥ó#\Ý[‹‘ ŽXÆç#ñÀ‘>·¯Ãuö›m5cuQ,‘G;€bˆo)IÀÉ Ïj£§Eªiík5Ŧ©¤Áp¦DžD*?¿#†yZ9Z‘9Gáfã|A²ðtwZ~±«%Äšk¤ö†(>Ë%üNdìGŒ†É9ö«ž*›Nø©ã+]JY¬¼ÍMuÓ®¬ìóZŸ,³>ã÷Üå—%pp8ï\ö±hþ'I5%¹G­ÄAA0$e C¹O^˜=k>ëTÓ¯¨5ŒÑI¦YÙM5í¤I“$l0»^NàÙÅw¿¼q éš¼W¯®I¥Gd†÷ɸ´H%I·¾o•È*£iÉœf¾COÛ—Rýž?i¯é5Ëø>ßVŽÊ½¸IVÆ(r­$¤E¦M¸–0g“Ò躋–)6¿­Ï6¼•hsÞÉ|–½ÏÒ†^*“ã¾¥¡xT°µÿ„bVh4–³»‡SÓ%FPP%Ö%ݹXqÊÝæ¢ø™ñoF†FÒ5YuO±¥ÃLlnÃyQË’BùRà³ Hî1_+øþ 'á KÂØk}íÆ«ô·q[Ë+]i¢hË'„°óxÞY#a8窿³—íMûm~ÒQéÚÞŸ5„úŽ‹s®Ý\’©sCåG2+33È¥îbà ªsއū–TiÎJÉwÓî8qtè)Æ¢rÚËþõ¦¥suñcáF«©Áâ½6+/gU¹žòåçR2Æaû2 <¥\>Q”—¸ÆöF?·Ñµß ^Ùií¨Ã-Æ»y´µ`§Ùmâ.@ ùÛŽ•Þ|øCaá_>«âï Ü5½Ó‚?ôaw9بÓ\¸Ý"FÀùBžužø¯§Ûj$xûÆo42ù×â »†$rÑà)Àu甫MÅF(Æ4âãzºž­ü'ð‡¼H‘i6ÖFG¶òä½K׸’ux×cÍk(Û¢¨ÌhKd.H ÖOÂ;[öiîœ./ï¬uYF§ci{.Ȧۘ–àÜ`uS´Æê7cZôo‰¾)ñ߆ü`×^Ñ,¥Òä·i¬.u˜ZJ&$+ÆŠûÛ ÐA9õ®ÄÞ—Åš^5µå¤–¥ŸR²Ô,r@æÞ%˜ä‚Tõ㊧^tãi­Í% S·'CÊèwÞ ð-ΣfGØÖešc~œÏ•ÈåG$ ¼ž;šâìþ Ü]ézc_é:5ôÌ«2JÍb«ḑóÃ’ã8>Õè>?UÑ~'ádÁhµIm|Dúz%î$†PÌë.—fÀR¸ÀÛÛ߃\%­Õ¬H÷  º´–IíßqX¥YW ÎÜ ‚2CqÐÕÿ ü8¿¸ÖYüm=Ö¡¢E*4$ïÌi·æ;úuç§n´—m“]‚]Nõæ´ÚXäa4e=9±®iÆnÛ‹>uÍcOÖõÍ ~'Šïìñ3Ldis,þh‚êvð«ƒÉà]ßéÚ‡ˆmïµ{›‹˜t8Lp‘;AöiVF’%3)2„cÎ*xÏL?‹ZM§ÄmᎫ}o5ƒ&Kp ©Œ ÊœýsÚ«|)ðµá¯ Ý]xöóTw¦ŸP¶t€ª“!Œ( “· è0OZQ›§&ïëÐó\§*‡«xkÇ«Üê÷÷:½ÅÖ¡ ÆÏÄkuXâe‰Y¢m¸rŹPûŽUmsÇ¿m½Žc¯ß4ÒGºÝeŠ}ñNq²ÆQqÈÇZÄñ-¥ßƒeKiÖêoÝϨéñ¢ÂÀ¨;ÏP£æûª{`W7mñ;Uð‡Œ4°LKËm*Ix¦nydèTíσƒJX¹·È‘èÖê3{ë¹èþ%ŸT»¾Òí5)Y/õW›Îi÷Ïo2F›JDÛA9ivÖÏÈ=k"Yî“Ãú†Ÿqw§Ü¸A l$Ë6öŽk“$Œ[ ˜)Ifõ×ÜøñíìomåµÔí4{·û<–NÉ!·¹uft‰‘‰T9 yÆ:s_7øÓâÞ—à-jÚÛÆ¶×ŸÙéw´¿d'ÌEÉ ´tŠØ Püö×Cu-¯Èu)Î’SŠnåèµÆ»x]ZGrבwnæ 0[®Š6àÁK€¦ vƒ^wÆ{¥’ÛW²‚=Bêâæé"õ!,`¡ÈQfÛ·%ÈùXV‡Å߈þ%ðåµ<7§K{%Â,öÇGÛ][(d1‚êªIÞàãä««ñ­ÎàýÔøÇPþɲQ˜,¼?•v¶ÎцƒÌB†*»€%Š“Î ¯vpW´žþe:\êЕ¬Tø7{}ãb=;Ãn³¬›ÙEö ÖóA Ãon|ÇPHÃ9%ݸ ¯]µðv‹á=ÌköÖVëu9’öÚÂåÚ=BI¢{s%¸W»rfˆ!¤ ò:OÇ Yx‚ßÀÿ ,4_ ßx…>Õw ³5å±$“Î~ò7 FTÅ]gÁïy_þÙñ'[Õn-mtÆÔì!¾µŽ(u U£òˆ1“+AÁ¨Pà îã±:tlígm0¡V«P½—ò=kÃÞñæ’ÚþÅü+ ZZý’Å"!dh‡#U;c¶€É¯Rø}à-7áΓ€†HÈÞøið2Íß5Éjß´/†4O0^Ë:ÝFû*(yåËmF¤°$ƒ€qœàf›âOÚºU­ŠðA}«.Û(n™!óÀë¸ìÁqG:ð1ÄâÛvvì©ÃÓÃáb¹]ßWÔõ1ÅÌ堇ή9ïÓè*íÝ®ŽÁ$¼2€ë ¡9“#=2¿7â}«å]Wþ âOE{wáÿ Ùk‰itúp,'²“ÎL ª’rÓó¨;¶ñÔWÎÿà¬_|={ªEkáÛ¿ Kp°Ël.´éÚlb%,Ó M•ÁÎx`Mòú“·*Õ÷dKMÍEÎÈý&ºg¾üæUȱg<ñ“Ëv¿^ÀuÍ\µ¸†Þ" ªù€‡™GÌÃ@ç¡#Œö¯ ýŒÿiÛ?Ú‹àeÿŽü]6•¦Ë¥Þo±Ap|«Eò×çbØÞÒŸÞ0g¿|wÔõýJ=á¦-ÝÌÑ…7¬A³´cÏ, ýæBϵsUÂÔ¡QÒkU¿o¼ê••Óg©M«é^ðüòxžþ+Dµ,Ò ïÆ$œ€z¼ÓVø·¯|M‘aðuŒú.™qÛ¦©:æIT¶Á òà¾ÕÏjþø’, ñOP—X¸iæå<´7 ÈqÌv,üŒmWu£éþ]¬ ¥Ä ;‘…Ì’¶Iç9oÇ5' jÉ]þÆ““æoCð÷Ák Û«êšË-q+†•9É,ã$u µ{Ew ³Á6£Q±·7°yPÙÛí ¦F$¾Ã#Ÿ@}*ÕŽ–/Y,Ù`šBw3ç÷Î:lúv‡áRèæÖmîMBI-¾Ç*­±¸Cö‹× —eA’-Ç|œW4\ê;³y8B6ûÂm¬t>ÎvŠ6Kq=Ì¡·4³’s‚:Œ`ïš±ao,vûi * ,C’{`Þµ^ÒÂòîöêûÅ"ÞÏçX,ôä—÷Áxýã`Ï'®â¯¬o‹ ‹+€dBJ·]£ÜŽztϸ¤ã.mQ*IFÑe;›§¸gge(1òDèI÷ê3J'kƒöM¤A,K#B s‚úœ=§j·‰¤LÙ »ÆêGâ8$ð9æ¡@t‹Y¯Ï(6F)$9è3Þ²S´´6Jé]õ‰E®­Ïq ÔW^HÌy"\r®¼ç=áQhÍaz“«:Ü#X)@2ç“ÆÇÒ¦òßì1NÀH!ECƒ†RI'ÌýjÅ´ò_Æ÷¬ï#8X„c#¡8À ž±W´¯c8¤—$Ÿ—õ±hJ¶omˆË\_£J°ÆIݽ‹±|àp§Žx§RV–!äˆ!w3F„ŸÝVlòØ9b3Ï+y u4€ÅöYR K© ¤ÇûÌqòö‰ix³ë‘]Þîo0y¢Ü}Â[œ°üóÒªR»³(¹mÐÐÓ¯ƒè·¨nhnSnp»T&zõûÞõoÚœ¶~(»¸¾ò'MØ•Ø(98Ú < ‚;aª]Ïq©È|Ò,'ýW'*í‘ÀãžµF÷_‰4‹ ‘2€àcžƒ‘×Ó4œœÔ#S™5aúN­zº¤zœï©ëK!{«×Q·ÌK zûµfþÙt/Ïžé.µeKÙeÉ"6+·“é…àvä÷«7á5]]Þ RTùš9sòÈ0ÊÝÏ_²­nV Mö¤L0È §a˨npNG½g)=¥¸éÁ;5§—õùî,ͬÓÛÃk‹ØŒƒyÇ”ŠpO¾I\rÀ%Mírqº\Œ|¹ì?V±ŽßL–Î %+²³LÛ‹©s’n½I?Zͤ‘¤nÞºš?è ·/÷¬»#i\ n $’£µUÔôØîl£0fAÈ¡v!q’O6ãôíIo$Ð^ ‹ ÷âG@÷ìR>U_@3Ò‹=0ÙžåÍåìë–w&A#>ÀmëUΤ¯bRqÕ»_‘^ J ßêW™’UµAÊŠ"ªSŒŽþæ’Ò8„SÊŧ¼VíÉgB‘ØJšÎV[ꊘíØÀÊË÷vÈpG¡$u>Õ_GÍä÷ROû˜à“ËŒ¿!†>ðçYM½™´jÂjs¾“¢Á$[žY&XX0ªÀÙÇlýAª:þ¦ž/g¨\Aló8šY$aûÇã1<õ«Ït5&û:&@RÍ.xb8ß¿5ã¿´O‹ÄÞ)þdzÐ`×î qX­„šŒ}¹¤C!UŠQ‰ Ç#<úTR£í¤¢ýž²;w㎫­žŸg-Ü×7ƒO`ŒìåÙ°±€¿}°@­ox»Fø—áA®øPƒVÓ.dwî› m¬‡Ð©§Ò¿8¿fOš¿‹~0øêÃ㎢è÷RGæ‹YíL²$qM*Ä…Þ-ʬ¨HùNÜŒWI¼uðÇoðÄz³}®Ò_ëW–éýgm!8VDPÍ;².ØÐƒ°‚ÛF+Õ«•E«'©„1±•šÛ¹ú“-ÍÉeL© ÈR:ŒÓš5 <²>\’{µxßÁÿÚÇBÿ„zÞOˆ:¶ ¾¶é-ô2»Ç±ã RvÇî˜:ÌF ªçóèÓüWðö™¬ÛXMªÙ » ­ â@@!VLlÉcžExÕð“¤ÜZ=TSÒ&Ø€Dë,¥°Ç#¯ÓÛÞ£s0|.žjfýòí8iÑ0ËéÏSééjQk‰£0`Á?ÝJäq¶†ª]È@ Ê3jŒ.P™8ÁÆ}EY,»$¡ ‚§ÿrV$äõÓô¦Á™’6`óéjž;_ìXqs$—lPQšLžãŸÒµ„dµfs•´!‚Ê=y*£âŸq¦Œ‚÷‰Hé€*V´óWyÎXòpAÿ UÓe¹Bb_0.wyÈ÷¦¡}Ñ<ýnVŠ>fb„žzzUجüì;t+œuÿ?­Ri °« • Ö£Psœ6àzwÍJ’‹ÑÓš½ÍmnÒ#¡EÚ@]gP¬‡Ôr}+ F3Î>•d"˜w¬ªû؃Là¡Âò}h­'QÞÖ 0PM^äk Î çŒSÞ6@çÎsôö¦[_C™™•ö@Å\…lŒ œý{SïmÒ é£¶·”I±diHŠV>„÷ ã§•'ÊÚ-Í]!­órǧ>ôáŒç'¢™%yƒdGÞS`ÙãŸÏНt.ÔfHã¡ç{vzwõÍM’cl²ö{—q9 síŠ ämec¸©¬•®ˆ‹pmÉQÜw?LÑ{yo¥Ì°ëWÛ¾2¶Ð !@ÏLäøÕ*ZhL¦–˜¿ðƒiY“P].Ì^Hi„`±§·ãÖªx¯À~ñÕ´–1ÒàÔb¼Œ¤‘\[ïÀì[·^3øW[³{)„Gðãùþµ$¶O|ʰÄ0¼’MSŒŸSƵ•ºŸ7øóþ ©ðËÆ4š}…Ö,Š>Ÿ9T_m• óÛõ,úSÙ¦'BsȇQÖ°õ¨çµ‰î-Öæd‡ ÑÂ…Ÿ¯ äj¯iV6W<ùåXÞJšWí§ä|#ñþ Uâ_[Coc}¥_ZÚ–ð›Ù`Ž5É<¡FîOzâþ9|6ñgÀ?ÚÛx¡íì4MÞm÷©¹aʳÊ:Žç©í_£šV¡uwåBιåy=Ö¹¯‹šF‰ªè†ÓÇ1Åyo#"•“bï}À 猒GnOjè¥Z¬ä õG—Šáœ-H¹Sm?SòãÃ><Ö ×u+­ Á7ötC  »†gq`Ãåû¤1^98â½7Á_²Ÿ¾7­”ÿ-l]ÚE$ê—wIËb⌇ä0s;gì_øIntÛý;E·Ó4ÆŠYÁmf'|çø>V%C|Ü‚}qUgµÒ>xuu&³–k»Œy·29–{±ÎD»ŽK®=Ž;_INœ!ï%fytrQÖr¿¦‡Ï¾ÿ‚{x#Á“O{­XO©jóC,.÷F8 w((Öà¥{gš÷|=ƒÄQÛhº]½ª¥“<íó ½»;䃟â<óÔñQkºÚëz\×öï%Ì—y8v89;‚)Á(#œœv£â€të[­Pñv¤)%µœGæf‘V9Ë[ç9àrp§Z¤ù¥vz˰Ô£ùž7«|O¿ñ6§â+­CA¼K[>ÃÃÖ6÷‹sw­I>ß:!ˆíÏšï÷Jdçô6±ãm3úE½ž£od÷P¥½Ó\I åT«( TnË»»‘•9õ¯$Ö|¢øPéÖv:šé­ªEqª$kp¿i¼{‰¦•¤CÆy‘º}Ð#¾ øcaàè~ɦ\ß²Yˮڎ¢÷WAÜôVv'8ƒÅeJ/vìzx©%IM«~ƒs¯hW¯á«{;™în”<Ó…“„Ü:žAÚz’)šž¦ÛÎtÝí’,  âýîà;²Œ0ÜOb=BÛGµèSÀ¨ŠÒYUÀ30ë»=HêEyˆþ3kQéÍa$s]шÛ÷ÛÁÆIF[ØÛ F¥is-æ|ÅLÕ©{»Ö«¨?†ô¥ðÝ™½ÕaºØÉ`Ë#FËóõaû²=qŠ¡£ê^ ¿”®“fÖ7·Åf¸O.=…Tî;‘Aätÿé<ñ'Äðýü÷°ýœ –“ R X> 1ÈwVm8<žFkLÒïßF»–(.b˜+^\Gö,XF®Bâ@r«°®r[‚£9žŠ°tdÒ=|-ooMIlG¬¥ÜrÄÖÖ¦æK8Z{™ã…QamÊ‘Äà·ï1óà’sŽKâ/‰tï Ce¦Þ,Út±$WM-Št”Œ:'‚x ×8Æ+"õnuM3­}¢K{{•–hÖUòãRÛNpò076@$sÚ µ×,tæ²·’#=•³n²¯$’KuY¨ãõ¬í¥­s¦ ›Vt ¶Ž¡+øÂú-?ÃúgúMÅæ¡tÂêT$•*Ç%É9UǸÎv£â[_Š×éZ.• áA˜ne±0ý”+1i#Ú¦`ø=NÜ€"¸ÿCªêÚÓ^ê)pï<òÛ4‘’¶¶ÊIŠ03Ëmàö'(ëZ^§¤ë72ê:{ÏxÒKop†6ÞŠ«þ¥€HÆ,H<×µüXø®|IðõõÿÄK™åðæ¡jRâÏÃΉ€ŒwÂ\†äÃ`rF*ƒ¾ ð¹×N¹ákœOªLÂâÊ{Þ_S1 ¢ž€8¯D AáßG‡¥ZØhÍRÚÖUŽXäY>e˜œžKsŠÎsM§mH¡Bww–Ÿ×cÅ?c7ð}çÁ;‰5…Ä:׉¯%µH/mRÞæÞÞÖW•B»Vv3<+Gjò¯Ú¿â‰lµÅø¡xŒËqbaŠÒÆÊ ìžmÂ#Ø2±©$¨° ÎpcõÜãÏtÿBháaI^Z¾ææ¯®Úi÷Wö¾'ž Km_lçm”·Ò¡•‚* ¥ˆ9;Šààƒšò(ü_i5Ü6^•y©] #µscÊñE’<Ç$íPyÝÛžµÔ|@еmSÃÏ¥Ýý¢9.àH®'µ¹+/—Œ‡pFFåêz€k“¹×/?g€zNðÚjº—‡mš)ê<·ZàÜ1!a‚gÆãŒÄãR£&œ¿J’ººzy›öÖ·º‰/D—Nt¨m™JÛ0y$‘ˆUË‘·ËÁmÛFáŸjƒÁmußkzg‚õ ? M¾»4r4d»~#·çæÞ$ö/\×Aâ>æ]D^xÂëI²²…#‘neÅm`$PFZfÁÎ=1Üô6ú†|Eàøµ¯ÝYÚÉy&ˉ¼±oo©ÜÄ6<²Ht™cU~G¢S4éK•^׿SDÔ®´»Ñ}¢9‚æ¼Ëy…d‚L“½H?{ÞªKm>¯w$ú“‚ë+ˆÀ±$’@I=sžkwÃhñë7«vö²YFX@÷6ÒKÀ¦#!‘ÆîØäV=º dmEA%_iˆ˜”dü˜Él„àýìv­ù¤ÓQ^„Êú±¢òÒÆþSw}>¡0Ý!2œ/;¨8™¬ëÿGa¨ïîÀ¤ÿè¤EˆÂƒ€›³Á9ÍPø£áùü0°ÝëÞ~š|†xžx/Œî МGs‘Šù“Ç?æð••kê¶ÖQùÖãìrLé382–ÇÃ7gšñjUŸ,ÝÚµ§ªéÜj3=Û(…!m²:çÍ ’qÎN{ãŸ× ¬2­˜¶Ýœ³g¹ÿ"»búž¢ZÜÌÔ§{ýV/2â6Ý…)¹#Ó>ßʺÉõÙæ¶ÖµIaû:‘gEö‘tÜ|¹Ýˆ×®3×jý¦Âr´ú‚Åæ"6 ba •rÛ†À, ŽBЇLÓ¼ÙY¡·(6˜÷ ¬q’§wŽqMÊ6»2wkSCRÖæðýö¯«øÚH5P=¼WvÒÜnº‘Qch²¡dP¸?)sÚü"^*ñOâ›{IÓfWG¸H ¥¦ÜH8`\`aOáZú–Ÿ42,zü?dX—rH`$Æ2ª mÏ#ëPE¥ÝêÓ[¯ÚÅq!XåžQ*ÃûÊx]ßÞÇR3\þÍEó"%îÆ4þ M7Ä1ÊšuÄ.ÒEm4Öª²HŒ7‘qÏË‚FÅqÿ´¿ìçmñ—àÄ6ž—áô>1Òo>פÈPébäme{{‰b‰Ê’T6@eLäZÒ¾K.«lº½ÝÆ¥2ÞGc+Þ„í[~8Á裊jxÖ]3סqÅ“Ì.%µÙ™#q¹ÁþrF}*á6šk¡J*¢äz£àŸ|ÔõÝr÷QñÕž‹áßÅw ¢YÙ\™í$‘c;•¸H‘v .àd£=k×ï¾kŸüaðƒVðœW’xWšœ×ÜWQù »së²14x9c­zæ±áË/ÅfuýÂùcœy 5¦ý¹ÉÛós€H#=LU½jnK)í¬µmBÒ (ÃCG±¬êÁ£ Ž™xÙFèHW,X[רêFë¡çC,T¹ÕôjÞgÔžðöš4˜´¯]Ü5–¡—“i·vìÑ_‚ìêDŠê¥ŠõÀoš³lõß xÅsuÊXȨð¬qB’¹‘‹o¶ŒœyznÆ8¯&ðwˆµ‰<4×c¿Ó|I¬@!½°Ñ.d¸¸Š˜+•9ÀÜ­vkžð~‡¥\xÞêææy¡KHã¹-su ™'HE®È8äçšùé*ñWq#Xà)Ο*ZùƯ‰š‡?á×4-&ñ.¥8³ÒÄÉ™&·¼· +í)ì En@ Œ*œÿ5Í{ÁÚm¤>+ðÕ‚kñڪݙ­å¸‘Ôîò†Ü”p܀ת|GÐǺ\þm5,^ݤYnmYMØnÈ#ä K`»ß5ßéz߇üOyq,ºež¡yè%¹TÚ®$¢dîÆ0¤Ž3íQ:±©Ê¹vóÔ•„„#Èæ“ô1~x®™}j]I3c£Œ–ÚUY²\m+†ÎEljZ±´¸“OònŒÌÞh¸ò‚°ÚÌ£·^ Vñ¯Œ´o þûZÐõ ÒÃK§J&–5ÁP€T˜Æ§^ÜGþ1é>´s£è7ìâêM†i$‡í°ùä8êq¹z޵tp’ªœ ‰ž_&—$—õêiê0Oë–vº–£|#¹%È­ WP ´2TÄg ö¨îôÝ_Sñ&ª—3›Í&úTGïí_¶ÙÎAž9ùÿ€>"Ñ|O­jš­¥½÷†î­Wl©ªÏæÇ6íÎÞS$‘°0;â½ãI³q6øl(¤Ua#¶Ó2â˜Ê‘‘Ãs\Rœ°©ÁÇï5Ãe®³wüO¸ð–±¦|/»‡Âp¥Î¿j [¡;P'÷ÒYv ààU½#WñÞ«ðÿì_­4øn.w)‘o\˰®Ð²¤|¼´p+Ü¡ÑLPE—>ÓµToú{T×VPÝ®'Š7ÉysœzÖ ù¹¹QÝþ¯Á»©Yž/à=.ÃLðZhâ Ú ˆî'å6,T Ø»p3À®CÀ~ñ=—Šo¯%Ô ˆ”6¸)ö§ùdd ¢4(÷†ìg8Áãé4[b¤[ËcÎíõ+§]>ÛÃvïn–Žò\ÞF&HfIcl–ª\ ÄŽÕ6…à«=Bî[]]­´Ð­Ôp¤Ì<°Hù×’9Ã/CÐסéÚ]¾——aÆ„’TsÉäþgšx´¦Þ± uÀ ´d *âçQZ:”2˜Ói·sñïöýµ>#x{Ž®â *;ãåC©iVÐ=ßÙð©ŸæÁã=ˆÏjó3ãÖ£­Ú‹MKX»I¤c ’W.D„m2ù¶’¹þéÅqVÚzjÖ·-}ÅK„9èTÖt1¶Ÿx^h›÷`gxèkô:4c•…uÚO™ŸGü6ðýÞ¡ámOí ¼Vò\Y¶œ#™n'ïò$€è̈Ǿ]¼zW¸XÚj'¿Ñ|igã´³ñ»²Ò´{µd·»¹™ÔªÂ¬Èrˆ¥ØŸº‹Ž®kã= âN«§é‘Úè÷rÙÚ‡7rÂŽpò(ûŒÃƒÜÖ—‡þ-ÍáAk}y—¶»·\·1ƒ¶9FZ#>aÈ WZ›÷t5¥‰µmýñsâÕ×…¼m…t[+Mo÷núÞ¥%ȸ¼¿›aS½Á,ìƒæÜ_pÁR"¹ÿé'â¯Ä7ÃZˆîî¢Õâ[í7í×±·…ú5ÂÄ6ùù2„—œs\|¿|>еâèÖ¿ež{{(oõ[¬ÊÍswxn>d¾gÞ'j g“žrÓÃZÓhÑkU¬z|·¨ÆÙîS°á˜%”Œc úõ¬iE¨ßª*X§F\³nÛé¡÷Œ~6kŸnï<1á&Ôõ]_ÂÐEö&kDŠîÆÎÞ&cpòI»äÀ\¹É`ØÆkÈ|YñŸQðôsi~?7$6¿ÛMµúÔ.çWKùÛŒöÊ©ˆ|¸<òšù‡Nø‰âu›kß@Þ$XâÔÝn]ö4“xY$S¼ nJƒ†äÊ¿§ø†_IþÏÔgÔ`¹Y-.c§—†ÞÆH9R2xÁà“‘ gÑ—õ¥R)Æ÷ì}3û|g·?XÏcg{m¨´]ønÖ8à±Õ[Î.ÿhg‘D!ܬ:”Eù@Í~–xãöœømðWÒ|7{®=WW¸6wfH‹KbYD³…aCÑHÈùxÏZüWð„Òø~ån•Þ'݉<°Pºg}N+¼ý jkãç‰./å´Õ­ô˜çAa åv ˆwÌ™Üí°Ÿ½…ÀÑŽÁGà®íÔïÂæ.š\Özüì~æjº[j:Ë\î6Ú‰<¡s åI“wòI'ž•—¡ø¸hzêÄŸgÕuY^4Û§ÆÍo§†ÁÃM÷€ Ú '=+óà÷íõ6›à)¼!âk³[J–‡L3_˜*¢h%”ÞF0Ä1ÁÇõoÃÛ~/Mk¤êÿÛ²M<––/s2-%)½ìÚòÆm·PÈl÷\.¨÷¬ ~Oì/Gc¦Û¼÷ÈìÉ÷c˜¶öf*p‹Œ­e[ àß7OÄTñ^Ù'kô}>NÃ,쵌gU|ËÛ*žpÜãÓ>†Ÿ¨_&›n,|­òJVw;€ò°}úç°üj{M;¿Çuö¢u?ÖZlÚGñ,³èséY–„÷wÐÆaŒÇ8*€³¯mÝzp>•Ï(Ê›åk™Óª6—Gµ­÷yÖ‡·ÝÝã)»ægƒzcã¦j¿“ö›Ö{y“í÷³Ìn¤íì'ùu§ÁköhÞ+‡SyˆŒ· H{s×$Ó<nÓøšòÓLŽ[émд¯´íb0¬G ’zÕJ2ªÒH™IE9Iýão%¹KôËdwó·9ùXŽw®:œð>´øM-ãéÀÌÖ›"¹ÇÌË#…ÇbNp¨§kÇû:壸Ýì¼ÀÙF@ä6zvô§AjúlË#ÜÇ9ù݆A>­×“ÏZNé¾n€Ÿ2N=Ú”£I±xd’gžHÃ\3pïÐàzŒÔ2i¿h¾¸ŽñÚþñæ˘Øò <€HP9ëXW^=д¯Zéºýõ©ñÄmskfóaåU™€è¸Èlu g ®boÚI¼ñ¶¥áýæÒëQµ…naœÈn7`á˜`ä’@ JNmhRƒ‰éöˆž«fXDK¹Á]¥{ØsÔÕ;‹%}i[V›ÌÓÔïJå·ÈnxqÇ\Šù—ã‡íÅ¥~Í-î~*êïªYެ˃j¡ÌŠ­¦Æ'-)e*2Ǥ|ýª¼9ûKj·Pø,ÈGïDAÌmÔáOÓqééV“i–îS!œ¼€¼‡•ŒŒáWÛ øàf³lácg<Ó8)3˜UNC‘ê½ð3×Ö¹§&Þ…F)Ç•£C–V:f©¨Ýj†âw¿‘¦Ë¶í¬OFx:sÅS{Ë­k][­e¥ŽÊ× `‡÷hÒ…Á<íÇnäý*ÎkÞ˜A“ÎÞÕ‹âoXøWXÓ,ü_ªYXK«\›[(æ˜Gö—¶ÑýægsÉ$šÒ=×oêÆŸŠu{­oE[ #¸$Ò„ÆÐY®Ià¶>œÔwVi ŽAYD$‘ßÏùW’x¯öùøOáíNM*ׯºv©¨Ø³E.—¦$—·{÷m#Ê„H$zx5Ùkÿ´Ýá̦‡w¸5 >F†A¸q·h˹!†2:c‚öÞ¼+ct¢6‰'-¸9lÞZ€sÈÝ’'§Ä¶—íÕq¡èºßÃσ°YÛhúÈ’Jûp¼¹ºãŒ Ðl€ÌÀ9Æìס—a'Ou«8ñÕ¡(s^ÇÏß³çÄ[kŠÑê~+Ó¯5ÛkÉæxì^ûÌ–Wœ°‰gÉb Š 6Kd““×ëOxÅ?~Ãý–ö^ÔõC&• s'îÚòây£Â"Çä¤Q†Ë9~QÅ|'á[ù¼ªéš¼>D m|”»Ðä ÷kém/ö§oxÄ_ðµ¼c,vVÂFÒ´&h ±¸žnÙ6–>R)ù[ î;¹Aˆ¥Ë´µþº¼g E½¼æþüi‹ÂzÕ÷…ü9ªnYOqÉ­Ì%³T!JK˜Ÿ%T1?9°½8®óÃÿðPoGðF³¡ê÷w)okgsl‘¦ÛÒèbD™œd b®T1 @¯™~øV÷Ærê—6“ɤw7sÌËÄ(€³JãTÂ5W d±è§=kð“öcøÝ¬þÌŸ¼/⟠Ëpc³hË€·– ,|ÈHÁþ §µ~Þ|=ñÞ•ñkÂ:7‰| sö½ZµŽòÒi«Ì­ü%Ý*x ò ‘_)`|ðø_àÏ´Àâ–.’õêo…ŠKXIEi[ m? 9ïžIª—¤µÐŠ6FEæB™àá_¯rjñŠMGWŠÊÎ"ÂY@Ú¼Œãw¦* mâ”ëå|ÅqÆF{šð¥‘š½†C–.ïŽ0p¿4û{ve,Ø ž9©n!gµiLlÜqõ¦y%"Y#Ã*ü¹'ëõ¤¢iÎiPd#`l¼ÇZb Ï¥>D«,c¹-’6àzãÒ›ok^Y”³ñ•aÊò:ã¸éIʼn10øs·± öZ&FÚ¦ B’xɧyïH0®ûpˆ.r~ƒ®Oj¹§Ý$RDæ0ÅŠ¤\Ÿœ ’ÞÝ3Öœ)©=Å)ò­ Öù†fR‹º&ÁbpAëÇ¥-Àß<ÉoX¢*cbÀ™IÇ;­ª}J–`Èo”0Áê2GåŠK‹G¶¹hí!”G©Q±óœãŒ`gê)úmËÄŲ˜¨öåXuÂç¨Ç­)uôÔ<3º‘¢²¹ ¾\(«$¤7ç:Ÿ¥U8ÂQjLš“œqFé’HÊdéŽA?‡JiV†pÓCÁˆäà‘ž~”­u$W±+b2H+òŒãü³Æ–òáïíeÌŒ)ØHÝåÙÂŽäŒ×2ŠètÞz_b¬ÁuÅ; 7ÈÒdlŒŒ`÷²zzUë[»h ÛvŒç®sÈôª÷_¹²y-#ÜÒ(x‘¹+’0 ïS°HÒ¶bI‚ƒár¸úŸåDV¾îá&¹5¹cO¹ŠB¾XE˜£ê)>ÙªxBë@ðìkg3C•>UÄÙ¸Ã1$–cϯéÅ>ÿʵ¾ÓcŽÚ)§(Ï,À23דØzU«ÍaïÙôóä(dJ3˜TŸÄŽÆº!(òÚ[þ§;ROš;=ý zv“#ÚÚZÝÉ%̱Fª÷ £Ìœ—{ÆXäœqW!ðâ]L±Ås#2ðŒdŸN sÖ£d†òØme’0Á†9X‰;Y½2;{Ôd´EÕÙÚ¶Ë#|çtüŽžÕ±nî7esKhÊÈ]gBŸG¹ˆGs$ªö€U@ óÜOÖ³u=)u¦·yֲ݄ éÛà‚A†¶na‘Š$®¹ ð¢’ÈKjHû2’´²ãÜŸÖ¥®ii¡Q÷cï;¿¸K _5Y$M“Æø­ò8ÆsŽ£¡â¶a±ßn{U rKÐîßúTIm¥”ÁÕ#½‰Hn]°FßåYZýý̺s+ÈÒÇÆ@NwôãëÏ_c[¶©+³óWvOOëb]Zøiò—åî€ ¼ãåÏ8ÇñVRÜ›yLé,ÅÊ•x›[‚rXŽ»¾†‹±”·eùê×æØ¼ã—'ÔöÉ:­»ð¢£33Æúõ¿…|)s«ßÏ:.–rbˆç§’zqÓšò=BúêÖ–Þ µKç¾Ñ$¯¹šÍZ3"*‚q¸åPÒ»OÚÅx_ÁÖbè4¦öñbˆ÷6©cÀú~•æ+ã&mmÚÚcy ¼Á§<¿º6ô¹ ààÿ:örªk•Íœ8Ù}ƒ±Ðümq޵-Öð,^H#ŽÛË¤ÈÆ=Ê“÷ƒ dÌó:Ýàš÷NÒËÏ)”9ó!„sëê8g9©õïXO!K»4»h#wXIpY0#Š5 wÂ`+ϯ!ñ®ª‡®'±’Ò@¿f|Ä$}ªq—·(Éõ9äWµ­îpNj*Ç­èøsÆ—ºO‰®ïYm;ûB9†ä;Ÿ3t¨¡T‰~VPAU¼wðãZoÝê—ê6ÐÙyR­öù’,* œÆ8‘Íq~¸{=~àYÚê—7XòZK#À¯¸“Ä‘“³÷€Žº×gâz„í,äÔ¦º:- ¹ÕíPì‘×€ñ–N¡»¯ ŒÖx…8E8ës%)(£RðÉñ݆‘g {o¦ØÇ%Ñh•R8Ãn e ôô®³Yð¶ðïI¿»–Õµ‰T.eBØlÈ‘ÎàH–ÀÆ3\nµâ™¯guýz§Æ JÏIÑ k¢òê—ðÃg`ÐMå,²•có0FI\äwÁë^GàŽpÙxFï_ñV•júDÆÙ¤’ÕUí×;<©=ðƒ<ŽG8¯bñŸÀ»_Úsy«^x‚²ÙÙÞÄëoiæ8ýôWi~ip3šóo_±$úÇ®u»o`¶‰vJî'ûVvƒhÌ­b0çæ8éÏ´ªÆ„lÞ§ÍÏ,sŸº´3/?k­bþÚ‡AžîÙ0´k~tö œ²Ž@Fr3ƒ]÷Áÿ\êšRæú{½EÞ„ÈÐy«´º¤™ù±•'9ã½cxàn›àÛpšm¿çÕ<°..&š´Œ¾þ`ÂFMÇHo¼ê~øY.°Ž§QŒjrb)vHžbœ3*ðOÝíýj*b)Í{±=¬>t#i=;ÃE¯Œ_^ñ ìwšMÔriH-ä’æ'[b\`y.ÁK`€Ç ØÎ G/¬-¦½Óä’D¿>lÒºK".6¨#¨Pz^2z×eã²m*iz-­Ñƒs‹’YZ@ý¡Ý>aŸ—'œ¯ð1¹ð¿V›Gð–§7Äé®.VX¼µYò¾Rè€à!\Ž}ù±‰a(º©]#©ÞÉõ<ïCÒuܺ;…bd]й8+¹±Ó‘ž‡±©c¶ðö§ñ>÷AÔušúÚÖ+¡mÉ$‰ »¼1;Aelß9¬ˆ_µ'…’úM/N¾¼°‚ S-¤&B?é™eRH9ÜûQá;kaªèÑE§‰ hüØÀ¬w2ä }àGÖ«Vx¨F³V‹îlìãn§uàŸ?ìó§kZý¿‡¯õírÞÆHl¢±ýäȪÄHcF+’Ãh<>µáßà ,ñà}>ïá'ŒtÍY58.^òæ!„„°çzíÜzŒú×°éWŸØ¥»¹¹mFfƒnR@`ÀÇ>ƒ¥pí«m§%óÉj¬«ö–bÜû¿tgå9$¸®…F ßNÿ¡œœ¥H¥çuÿèuû™5Íí5ø¬ïm`Ô­o,…¬%DÄÈî®Í€]¶’2 )‚kÌ?l‰z=öµâ5•ä‰kcc!"ECŸ5Yc%.F0qŠê.uÛÏj6ë}#ÍN Æcùv‚>S¹9þµèžýŸ|;ñ“àæ©¹,1xÎÙÉÓl¦‘Êñ Ä{7 ™È]„“Äv"¢tc=Z8«aâŸ2_3䯀ÿ´Ë|QñiðÿÄËí:×ÂòÚÍ^_ºÃ ›*oT‘Û†Èh>ç ¯¦~ jšÿÄÿi~±2Z˪[´Ï} (µÓÒ8˜‰C%_“Ë'‡ñŠðm[ö7½ñÍ£Üü´±¼ÖtÛÇ7v7p"G4ɹ|©D•*Kv8èq^sû?ü\ñOÃ_Ú©¥Ô½…­ÌØV·R¥¦œþQÚBHYÙòB’À¸Ím$êÔ䊴|Ï25kA¸OXùªF· ø;C¸Ñµ :ËDƒC¹Ko:(œÁ2¿RŽ~i>n§’+3âŸÅ9ü9¯[Åá[§]]=¾Ó¿bÆŒ¬ÆùŒ§‘Œz×ðãã |\ý›4–ñµ½¼Úœ’³Þä • UòתnL1ÏÝ# ÷«ø2ß\X.%ÓcÔ¯-aÝ“ýÒ<Å œ îÀð¬ž%Óµ9¯“S[/Z‹Ë…´…f(Û‚'›“ò)ÉËžx †|©ë¼´{{]êð˜3 >gU>ƒ¡ëéSŸ>—qqý‡%Èûb²ïSåI('îœzœt©—D–âêÖ)îî${dXV9,™é´œqŒžx®ZÍÁÏœ¡%oÈ_|8]ÒÍtm^æýtøUM½ôÙ•rI1Ñ2IÇoÆ <Ú7öºß\€{Ó|W >.е ýXizL(Œ–°ÎÓ¶Ç!J‡`—q¡sïW>Þ^Ú]êÝôM.8,äU )¼´?6:ü§¯¿JÅñ?ÇxÆäÚÞé3éw±0ŽÚàiÄ.÷pa@Îキ*RQQ¿š2Rör×þÂøSáO‡¡Ýy¢hQCw4rGÎÖU„T2„ç·"¸K߆>;ðv§w§xîææáÈkH#"d”pÈrb)ÁÆzŒ×¹_øtÅ¥Î÷rÚ[X¼LYšEˆç¨f9 =ý2GZ«f.ÃL±¸ºRè Œ;Ë&rÀnä®ÀçÆµ’Œj{D¯§b«á¡VŸ¼¼ôÑž[á?ÚÏâ/ìøR÷âÖŠ5}çl…ì#7Ì9Û2€6#W‘ós[~øÛ£~Ó’x8_i–·³öPnÈär0q]çÃÿ‰vÞ1…RYlÚêKx¯"ki|Øn¡‘r’Âãï/ojøçFÔdžtØímÐÄ6Õ'Œc”H†`{çZô­ã—¾xŸI²ñ,º^“ªÀÐçÝúx‘ädj-ŽR@Áð‚2K8\+Åâ2Ê~ÏÜVkæcm^e-×T~Gi>6ˆÙÈÐL-Ý#¾}êÆ«.¾Ó.³p²Âã ÙÉÇcŸjÇñg‡mõÛ”š <ÙÿU€ ÿhZ4Ë¢[¸žMÐÉæÃѦ#½EzÎ…ûYß[ü-ð7†´k™¡@¹¸{«+‹·¶Òo$’U1Ïv©†väefc±6ªŒSšsƒpvlíÂòU%gnÆï‰~Íká Æ6úlZ.d†ÅíÖ)'y²¬ G–r:íç$á|$Òç›_¼±ðþ§k:Œö7ئ£säZÚLÊ6ÜÌÝ6ġص·=+Ô¿kÚ•~/üa¼Ôü¬XjZ[éØJÖÁY®ÙP¤ÓMü²iÑy>SÆÙË•©®©œì6ÜBs“ÕÇ Åi('ºÑšSÄs+=×CÝ¿i¯ (kÖÿ´Î­ý«k¬ÞD-uHÄ–f4Ù½á8 ƒØckqÏlxûö»øcð¿Ãš-Ö§­C¨@î¹m0¸¡µrÌ’’ŸxÚ^O¦9¯ÉŸ„¿.ô jÜxÇDIàgx¯¾Õt¡ ò„š#˜ŸpÆÖåŽ8Æk×´ïÙ‚ë@ñK[xoÅ·ú>›w¦ôÅkE ¹ Î [•Æ 9ãæbéa«[§åÿõ)f3©¹Fò]V—õÿ€~—Cª·ìÍæ“yi/‡o–lmeäeCoWèÁ¸äp¼Šè¬´ø´5Ž=1pï½£\d@­×§Nƒô¯†þxÚ?ÙÏÀ×ñ\5ñ¶Ž8$GtëD¾å’(ä%c!”œ¹'æ&½áoíï'ŠuæÑ|_avaf ¶d‰&í0(ÂŒ–Bq·$œx“ÁI6黣ڧˆ§U¨'¯™ô»X¶½âI'Õ¨£ ê!e%Lˆ:pÜJÑÓá’ ‹K‹Whc^{€ß>wuëž½ý軆 e–á®b771ªÆ© "UUΣ$úûUMZÿ~‡o”žN£ŽNï1v2yëÐ\êÔÛ×TW3’Jß×ùº÷‹'Ö|_p“Y\5̬ Í*F~ó1ê{lIdÖ2ßË©Í6Ö¶ë ™÷Dá‹;é€0}3L‡këí,Wq˜X™ñò2¡ÿgð q^ûEüm·—\ÒT¢¯ò¡ðÁ¾"‹ÊÛã[ÅX¬.î!Ö¢ICÎížX•Ž- ägœuÌ?oþÏþ.:„ͦ¥-Ñ>t7‘ùÉ#3n2Ÿõ„“óõù|íã^]@Å1™žH0¬ää‘ÛŸn•6ƒ®lŸtQ†ŸnB‘Îqé^¼èÁ«´xÔs*С+~§Ó9ø¹âˆwvú—í)ãkLÓµËGÕ´ˆ,­P¥ÜJ'’±lÛ Êçî÷'&iÞºøâ=GÄø.ÒÕ,tùn£œßÅy(cûµå"‚¬0»Ÿ'¥|ѯk£TÖ ê²LìðˆVF“ áW?uFNàdã­Z¾ñê÷®Òˆ"RÀ‚4p£Ðêrzšçt}ËGOC_®ûÏ™Þÿס­§ø®}nÂÚÖòDVLYÁ|«61ÏëœV~±â–{³O·ÊˆS„99õªÐÝk7:w?8þï¯Ö°àó'¿rà)*ðŠ>µÓM)|Ž “qùŸO^|M}ö]/FÒ|3¥Eâ„Qq}µöFg´Lêð:n&ÛòýÃ#ÏÏÞ x¯5»£};CU•º¶qÀú ~µ“>§#H°Þˆƒ˜âV܃=ñïMðÝÊXxŠq©G4¾rÚvÝê;S§O—™õeÖĪó‹JÉ¥áÝVå™ôÔaåJûÑPM~Á?l+›ë‰¾xþæ?![ÿ>@ýàËOmž¸`L£¾CÆ+ósÂ"Îq ·êìŒ1†*_$g¾0 u^ñ^£ðïâ•âO‡WMkªiÑß[¶â¾[«î\ãøÝaÝY‡záÅáã‹§*]ö~g»•â¤e'£Üþƒ-®nuÍr [Y R¡ž4M¦GÏvë€)f¼·ƒY½ƒBG¹ûžCÂÏ?7|W-û:|iÐ~>|ѼeàÖ’%Õmqpƒƒop¹KˆHä†GÊú`:×I¦_Æ×W¶ñ˜áûfÄ_.ážÙÁ¾´98Ot}„uw[Æ^}dA>7G†qÈ:¿¬E´°D€¿š*9ž=ÏZ‚Ú&ÔNUŒax‘ÎZLò:óß­Q¾º}BõSL–\%Ȩ젓ߞ+ô¦‰ž9¬ïü»–O´äŒaè*uO4+Í!á *½?:v—Z|ó˜ÖYå™Ç,¼çýoåT/o λk síf,Nð½Ž#§µ¶±JMè\ŽÓuÁ’ÕCJ~Q“£ØúSä³)ªB–í#ùˆdrAýß'О:{Št:|Í®Jv•B&ìàcòª÷Z£–‘”ÈnJŽsÓ•ÔA7'£-G†TÎŒ !_  O–!¦µ½ÉìlKJ²HÞ\X²mÎòOAúÒËoª·Øò£˜ ¹÷í‘õ¬Ëûé±ÂÖRÕÕ˜}ÔÏ<~$ÓtKé4ØÑ,¼ÅÀaÔmßÛõïïTªAû©hʤ½ë—l5]A¿·Z\Æ=šZS‚ É!éü#­:Þquæê`BM½ªò¶ë’@zu¬ÝL¨½Å©2l†wmÉì?©Í[»F0ìøk¥ª%UÚË_ëúòEoÔ»c¬F³Ë#lk„8+ לŸ¥nC¡ÛÁ£ÙÉ«JŒœy½ÆG^½8®:՞ɔÛmR¤€21ßÞ–9iÄ· ìÁËoc–úfµ¥‰PÒJìζÔ³‹±»2j3\ÞϤC¥yq•ºndo(8 Î Ķ™ÚØDÀ3Œ—ldÇõ¥¹ºi%ù8S…®Üv¦Ç)³vdd|ÌÝk*µ}¤ùhQö0µÿ?Õ²;¥h; ³ñž§ÿ­Yþ*ñ%§ô+W]YaCÔ³HPqõ#š½q/›", »¦+Í?j_Gá DÑåŒÍ¨ø—V†ÒÝ–ÛÁrÌ:lÚ§54)ªÕWSIÍB-¶pZ÷§±ðÆœž%†Ma’YîmÞ9Adß÷ÓÇaÁǰ¨t-2ÛÆøŽKAº–êå®ä[lHãXí“p“ï38éÅQøáßøGõ› >6¾ŸûB/6Ú8í²LÁŠˆ¢n‡‘ÎAÀã=ª¿‰|5â/ ß[6«ofm¬#É¢™ Ò·ïi[nÔf6ªœ s_YJéG– CÂGU§7«!ð¿Á}KÄ^2GÐ,cÓ´©Înn§wcµÜm*ƒ$5øïÆ> ’OÚ^il‘`†Ôd\I '«;3`m?_nxÕ¯:­JŸºŒ›’o’vgsªýŸ_Å•ä¤E(–5V5‘Ðð“ÐgëÆx®sUð®¢ÙˬÚ]bæøÌWJŽÑ¤i€4äDÜ2_æ$c5_ÅþÕu Kì3Óo,-µÙ¢±Ót‰Â›Á.w™Þx]—yÛÀFùyÎr@½¨x[O‚îûQñ9¼M_D¶kM-â›KEwBа‘†db¹ Íu^WNÿ#TÓVÑÿ^eè`¼Ñô¸ãOhâÒ¤[«ÄŠr÷¨›Ïî° à@èFkV/iž1ð¥ÿö¦­eºþ;¶›R ”±!vF9hyÅaxžòÛÃWvš´óÉw%úÍ/Ùc¿cä;í 5929!‰ÈÏRÄuž'‚é¬ìâ”Oq r,Bç~Ñò[Œã¿^•n‹r¼z¥å Úø/ᯈc¸¾ûaOí M.2ÊP©èÒï ´q´‚FxÇJç¾4ø7þO±Oñ<×—v­5µ½…Ë ňÙÔTwXqó0x¬ø>5ê^×Pè’êÖ÷7· 5á{Ie¶’0J˜Ë6òY>`r0qšà|KªüAñt—ž&»º½¸UHYÔI ‰ÛA¨Ï8À)Æ5+i§)–¤¹”®ZÑ|A.µâ‹‹ÍvÊÂËO¿euHXÉv%ˆ+Ì|,eK$a±½ÅhD—ðè÷’·¹¸Y ³Ú²< F<¹dfl䌀=z‡@ðŒ?h¼Y¯Ò7u.çŒ_B{öæ´î5…ðOƒïµ =®uKÐÆy,Åü¥R4_ùjOÊGqŒbµ­l<¢®Ñ¤¤ïÌ×ùô$’ZM,Æ?³ÇÊ<dŒ`7XtáŽÒ¹]oÅö~:Ôu? Ø>« V6×wönc…d KD²¨Ä§'i#ŽNp+±¸ñRÁõû8í¤Ô-ÒG "…½t®éÚô6V¾µ¾dÉ%ß•0Ž(!ºE²•Ho¼>n:W•‡Ìáˆ|“Vò8ã™PªùwgÌ ¿g]{Ú±‡û~]SMûHxí®#Æ}YÀüY+é; hÚT–rø„–²Ôcš[+pSe<¡¸e‹( “œz«}7Eµ·Õ4×o®¿w7öuÓE½W<î{~)TÒFÞÍ$‹3—µÕ®!¶±ÒæžÎ,'Ÿ½íÌŒ[Ê ·ãñ‡Lðî©/‡¡¹·f’þÝVIp#•TªtÆyàðq]„²GÍ€TÇjMÉ/wVMIMi§™áÚo…äÒ¼I}©Xn›^Õg77­óÎ’»3‘ú³1bî>îzWŸ|[ø]i>±¯iñ ñ6§w Æ¡v¯‹j`YŠm b(9#…àW½êpi÷zîœnu-2æ=CKº»™mcXÞ̬‘ù~zR<1ùÈã€}k#TÐí#”ªÞZÝ4Ì[dUíÂî½²}3[ÆRI7¹š„'8œ7Â]:ÿÆãú…ïˆôöJ«qcpabØÏ/Ú%U#oÊ¡wr3ŽkèüKð†‘a§øÁ¾(K»á–DhX—àó 7XàöÅxOÂ7¶…¢ðÄL%1ì”[5OÊwä1ZzO…í´ZA§X‰/E†H¯YUœ/ $$ç=ÈÈ9‰òÕvr9êRŠvoNÅ›c¤Ý}–;ØÖÒîû &f;Q²@ z6{zg½:ÆÞÃC‚ÚÆÑÇÙÂyޱ°Q(=sƒ‘Ž~™¯'ñ¯†ì4¬!¾û\Ö“ª…O•"¸ ØÀ†ÁÇ8®Ÿ]ºoEqq¦!ž1†G.@*~öÎ28ëøW)rZÛ0è>zqÕ—ïþ*;T3j ,,l%Ú¬IÏÊv©ôÎ7f¸ÛÛøæòêëHš=&áeØc™KÃ#Ár€öÇŽ+åßÚâðÖ‰ü#×z¥ê]<â7ÝäÜ+àzf¶>Ùêvž¿¹×µM:Crá º“s n™\ôÜFÎ8¬!Aª\Íœu*Y¨;ÝŸM/…nZî;tÕôÙZ2Çö£ ¦á’UYHsŽÀŒõÍcøƒÃ÷:mı\4—1¸˜Ø”¾ON†¾NÓ¿j¿øAõkÝ?Åõ­¤³O¼3–/Ó‚¨ù‡ àãœÖß„¿mKÛÏÁ¤ZIo¨éÅÚWyÃÆç#¦Ô9 àW¡‚ÃÎ Ûc«8ÑVmëÜúFñêøE‘4"ÕæHÊÄÍFrž¿ïc5—yâøIb¸½×Ò(/î HžXàºÀ‚ úàg5ž¡¯hö +Zý¢Þ8ˆu*ä`rAäwÎjÞƒá©õ+{h´Ù¡¶žë&k›— Œ}ÒpIÏ©Ÿnk·’¿CÚ„Ó4lsžð|«ã mSN¸¼º¼³>në‹·hà?Õ3m*3Óšênm-í¼5Õψ4·%¼¸ôñ ý¥Æð|ÂÄaÆ[OÑx›áWØ4d±Õ4Ë€†6ž59!!\ǰdeG÷¹ÝcIKËÈtí23övÄÒ±eäzÈ#€x¬ÔÖÑ)Þ×l˲2)”·3¤qù×)ÜUº…ÇËÁ÷çšóü6º¿Ô5 Ï êÞ#‚93p¶hÑ™UW’ :î÷ëžÞÕôn‡ðÎ-C¶:~»öKó2În¡…fL{[å`xÆî‡[éó<“Eñ4šL#Ã÷Ü’Éå*Ï©F–¨ÚH[x×v[Ÿ¾GCÓ"ºëšÕö¸?á&³¹[g³FùgU€À`ŠNƒÇ5±o¤Ïá­—XŽÊó™­î…¸F î¡ÈïÇn3X×Ö6Wì¾-“Uš1 F Ä¬Q1¿qÆIõ®š5Ü> ë`ébÕþæx·ÇOÚbóÃÞ³oK7k Îî^[lºÌ¹ïÎiÞñü}¥KOÒ.5KY¢o(ÅòÇnÄuÞìA×wֻ녾×.™u=?N·NÂ("ˆ € ‚÷ëÍl.µáŸ‡ú^˜­f¶6÷5´0ÌÆ8Ü(#Ë'¯\õ==¨¯™J.1I]žaƒxY(Óc|áM[Àw°Éñ&êËP–æÂÛ~Ç)\>Ì’ œ‚1ýkÔ´=?HÑ,ÐÙùP\ÊÛ§w!¶dqܕϥx^±ñGñï¬$K˘f°‚I1ï7"f%O*\W!ñ¿ã³á}cK—Hg{=^YdÅ[ˆc*¬~ïLðIçë\ukÕæäz·©ä:²GÌϦ|c*øe/§Óa¯0æ|ªÀd¨?Ž:ùÓFý§uQ{¨]ÿeŦKèÅš!0ÎrU‰' s»¥héZõ·Å? i¶±¬Ç«\î’öêWGx'c¼/@AdŒW—ê2üEðòÝiö±[]ÝE)H÷47˜ÇvuÀvôëzè¥ÏNmJ:øl4q’愼Ï_—âÏ…|G¥yÓß\iÓÛÛ$€•2Ïç†ÛÜoLÕƒ¿¿¶üG“=ÃÉssMй€¼æON?­|Ï©|ñ÷ÄøßT0Ë(pÅÔ¬;É)€NzzõO…?þ"x/À_nÒãðýíü· ÇR™ƒ°(ð€»J‚Jä1ù¹4õ=YPª­Ë©ïÿ %ñަ¦ÆæÂÑdùØ,­1”“ÉUEù}óù×%ªhöŽ×¶Z=垣.ŠDsOhYã +à`üÝN ޵åÚ^¡ñQe›NÖ½9ëT..ïRïO›íš•í¤J!Úñ˜#mTd0ÉäBvúÆöáwö™%™\O©mòíâùv|à(*À`žüu5Ç6”’ÂÎæÍ2°‘Žp7½TàžpqN3ìtÅ·¢zfñeíõÔ‘êê( $×±,»FàĶÜ”sÜç9ÅR×¼Zšoެ¯%Ò¦ÕŸÌ•®æ{´‚8£`˜£œžÇ\V÷ƒü!¢kz7Ùüoq+y¤—µ1ykòô}džÎ@ F¯ðü Ò¬­ã{mV¡“çŠY¤BŠ‹Á$8÷ô¬å8Åò´DšNÉI¯ü1ðŸÄéü,‘l7ÑÊ_œ3®ï›œdg§žø9¥|=Ñîdðɽ]:F†âå’8Y›¦r¡9«®ŽÂÎáâ™UŒFË*K £Ý•(Á²FÞ Ž½ÍlèßÅÞ|šÚlQÛ)–{‹‹¡6I¿¿f.{N}hãY‘:pÒVÔ“áf¹yáÏùº•Þ¡áÝ"}6YÒá ´:„¥ÆÃûÔØàÀ¢²“ÉÈÇ=•çÄ |@ÒÏÄÚ3jÒ"²¥ärí.qüC¤¨sØgýãßÏl¿khñü=ñæ‹â°—‚òÅæ-îdfÉ0FNé"Á~C6xëFµâ]=áWø¤Ç¤ê6aÙ„ Ϥýß-$P©ê Ç©Tº¸ÛÌ…Íy/ø'Œ~é¾#¼¼Òõ½:K}R†hð ÜÄALy?½å8ž'hð„a2Çm>Ÿ,‚'w„Yzcs Øíîj®·­¾™4oae9ÔnCýµÄq}”3ÎÕpC•à€¸*„>'›ËK)âD‡yIw•¨9$ŽÞõ·#¨´h©ò­:öìuSkÜH¶ÞÑ•&y‚œì/À?"äŽã’q\î« x—ÀúäÖv3y²ª\ǧ{`¤!œ(ÜýA KÞµëu5œ×I%Æ‘ynv-ÇúàØ\ª‘‚:†ÏLÖºüDžÂý.¼3-å« «6é7C1=FÂAï¸g’3ŠN2MÂNêÑØ‡OðU¾±¢ƒ­Â—:…̬KÅq2]‡`Ä‹—9uÉ#8Åqþ-øáްhg@ÔõÍ*úÆå/R{}jVhµ;y?upÖÒ+.ä’,¡sµA ¼V¿ˆumsÆ^6Ž [ëm cŽY óbò´ëáÏȾXßm"³ ¤‚„dQ«áÛ°jñ‹:¶»ž)†9$$–RF ÉçvSjV=Â>0i'‡M»ò‡š÷ã{{t®|M¦D÷zl:wŸ3õò¿òúó\'†Š å¸D!0ã—ÓÞ´o¼BºpŽKTh¦¸l2í ÀtãÒ´•¥© ´¬Ñw\Ñ Ô¢EµoõRlUFËr:Äšä"ðßövõ•òâf²G÷®·íñCjßÚRG(¬Šß+—õúV]î­e}cqs@e“æL¤Ÿïc¿NyïYAµ©U¹SVFïüa¥ØxGÀ¶>…"¸†Æu×'û4q›‹£8*ûÔn””’äíùU@¬»ÏZEp²ê@LÊ)Ôä`gØJä“J»³ÔÒà¼ko Û öêG¥M«ÞÙG/Í0rÿ3oþ 9yÍ}ºœÖÅâ}>+Ø· ÜiS)I ˆ#Oòk–¹0K¨LÚlR[Ao)ŽÍ¿jîùC7~±¢Ô¡¿»Xïtn7Ôý(2^YLÖqA+Å+rH8õëMBûûdŸ5ÍÖ›PO·*ˆgm„,ýk½ð·‡bžxO¿3º¿#صÆIn4ð’°ÚÜÍÁCëø×Oàï#Ãð³ÜE#8=1êsÍ-!¤}£mèokº}© Ø$·Q +¦ì©ïžµô7ìO¯øbûâNcã->þé´ÉÍˆEÞÂ6¾9ÁÃdíôÆkÀôg]@¼·r"((ˆ§= ¢½àUåî“ñƒÃøJKOí;‹µŠ)'S²5`C±O;7Á9#ŠÊtÕH¸½êÕ–Ìû7ưӯ‚|J6±i„žd¬b‘“9D•\GMåA'5»àÛ+…Ö¢¼ƒLðö­µ¥Ìï4×üÙîf$Ÿ¼O¸®Gö–ý§,¼-à« y„]][nËi„jYctmÞNãó/=úWÏ_þ&k#P>+ø‘ñãìPO$v6wS ÚeU8Y FÀ"t$`äWJ‹Ÿ5ú•)C›—›UÛõ>½ñ®€mW[Õ>,Ø_êÓ\Y}¦ÚÂÚ÷ËI,Ç/$°¤e™ÕsÎH!²k狼6 Æ‹}”­n’XéÖrçËF Wq|’2C`œq\/ˆ?jÛoÝYøŽÎ=R[»Ë¶F±’ï͸{f·‘UÙËÝ)6}Ñ‘ÇCW?fOØë\ý°þ ZkV^‹Nð=õÙº”Ïp Žæ>{k@C3±`ªIPЬÇqa¶º0ØwOÞ©¢_#Y%Q¥5÷ÿ²ïíÝñoáÅ;{•ñG‰ôm6;yï4„Óe”›l÷*¸¤„á™1¸àãô›â÷í-€õý>_ µ–¥&©da†Ñ>S>J¼²©Ä%q'Èü‘Ÿ.Õ¼O¥øBòîÌ]YéÞ¤„Ù–4}J[t_Þ\>>[H€( ˜ °•Ô¼M¦ø_YŠo6‘m{ª2$0ÞjaahA“À¨&•™¶€Ú™v=*kÒ†.\Ê·^çeL}JpTܯ.Èì4¿>#øÏñRðï‡]µ&Ò%õëÈÓMŒvÈÝ dŸ@+Á¿oïŽ?‡…´? x’×B×5KæÕ¼Eâ©O§Á Ùm¤Ã1abȯ&0rAa@×>i•œgâ©«Õkk-3V˜ÙNw+ºÎ–á"ù¤à±I2¥€À"¾vý¥uh¿nÚéþûÚ>Ým£éöwÉ,òYݺ’îKÃ6ÑD‚BÏ+ˆö•U™–´£‡$¹W¯üçëU«Wâm´y~•ñSÃ_µF·ªi>+¹ÔtË­aî<Ýjòü\Þ­»6Í–qóº%\0%ƒš‡öéý¨/þ3ø¦o‡ß!ñF‰á ÜÚ&—§\j¸ÉöE‰Ä†9Ý#3ª–*;FŽ7àßìñað¿ãÞ›ůøfK_jÅ®mô+‡¿“P1r‘E,x1s R@ÈàŒŒ¿ß¼0t{KQ²´²ø™s|ÓE䢧ØÅ¨8'pÙ=²°ve!Îvpê•$æœu‰Jµèê­®§wñÿà·€¼-àÉnìã†}oû65¶Ò¡Ôdì'b…ÚflùîË¿äûª@Çr~{ðÿì×ãoDÚ‡¼1ª±¦x›Ä¿|!¡øbKÛëMD±‹K†"øK‡V7ñŽüŒ| õ«J¥ÞíœÑö‡&ß-»ks¯þ'ëÓ¼Iyz³iîa1¼ÌJ2’§æÉÈã‚8â™á/iº$÷òxªÆÚùn-by3Û9é"GÍœrsŒšµã-ÂÏûwKסw×ìnE½½Ì3æ(ü©H˜2Ž%Ü£ sòðyé\i{[WÛqž§ƒæÏäkX¸Éz˜MMèüÆiž(žKin-ÞE”år¯Œ.yR{nø­(µy5‹ î5LÐ BqY7ú|W,¢E¬eså?1Ï_­G.¦l4iâ„’þïiê9Í[IìD'*nÒe½EžôùÔŽ7ãøõ©hD8Úã“ϵeX4ºr#1 [®y$ûÖÆƒqÊËiyÀ˜‚û§Ú¢^ê7¥ï=w#×âŽ8¤Š@î@Ü}+*}CìöÅ•ˆ9ÎAàÖî§nÒÛºHÀŒÁ¿ãUV+bPˆg,2IôãùÑ ‚¤_1wu©BêNYÎ7J×¹ÔÖÙE´c$cogÛÖ³­‘n¼ñy 8$töö¨äi’ÀGr›šÓß—×>Ô;_AÁ8«š:\·w°¸D,ÊKs·ëUu¤6Zˆ’ØîH3÷sTŸ]’)G”^'ÇRzж]E"Ý¢0a‚AäÑ%+ÞäÆqi¨îvžÔáÒö¤Ò—Y€·ðgÓñ­m_kQ³A:K¬c=Aæ>¼ãó¯?ð•çŸÄØyÉ>•·s3ÿeJn›OjåjÒÔõ!6é¦Òø"ßíMoáw^øyâ«öKo”¾Ò ®|¸µRÇ’~S$b'Qв6y<þŸéšlñ¾Üó¾ Ý[ÔŠþp~ø¯û?R¶’Ém™lš#‡ŠUæ7SØ«G¸¯ÙïÙ{þ ±ðïÇÑ-¾!ê6Ú/Šîm5º ‚e"=âFÀeüÀºN |Þs€œçí©Æ÷Üúü«±4T÷×â¨õKÉu{Ѐ¾Dž\ˆ>é ÀÓ-|>º]²Íó±ýé¸Ç ÕI"m.Úòg’gùܳp£8à÷äu­Ý 7Ú;,¸hgŽxǦ=ëæ’rmHôÛtãxìdj:ŒßÚ1EoI aœƒƒÓŒ}*}ÖO2ãUD{È¡òâ@0±±9-Ž¸Ý·ðæŽocH9žòÙÇ ¿Ìâ–i­mîËYy1*³nù‚qõ÷ö¡.Q¶¦¬Gvg»·6ÑK4QÀîÿ–·±b0ÝÀTºe¼mÂFO‘\d<›¹íïWbÑ šuÖ›ÊTLÅ"ÊO¹î:tõ¬;k‰<ÄXpˆYŒ„gs²)É8üHPji¨²ëÝÍ3@¶n¶°Î̲¾JëŽ:’8íL³µkDx섉aevéZ>Ò­õŽ-¾D*„¶\g£}:}qXúv¾Í3¡V‰ÖS ¤ô±ÿ_Ê›‹åRc‹¼œVåÍnUÔç‚,cÆaÕÉûð1øÓ,ä‡iQƒê¸ã¥X[ªê ö&@+ÉÀä‘Yšö¤ÐøŠÒ+éñJn¥aÄEqµ}ËrGÒ³qiݱ×áHÒ»°åæ»Ì—“Î:U }"m³«Fà±ç¯_¥hÙÜCý–¦ð¾òHüÇo©¨…£ë«q¥ˆã¼È\°VaŽƒß¨åOasʈYPÚ•'|²ðàžÂ£’Áôˆµ ØÌË»;qÛè*Æ«,L$·Ã-ǵºz[ß0Ép· çâFÜ£=‡aíD ¹nòR³ØÌ„h2 %oùë! F£·ãíS² #6ï0öý)ðÌÀ,Wm¡Q?7¥hÛ<75À¾‡o–Ìm°GÌç#¶x¥'×R§QÇV®Œ]8ɨ]§hîqÒ­_ïŽ'[Q–^8Ÿ§ëIc úM䂲 TʨÏLûd —RŒ0 ˆH-·ï·=¥Cж¥ss;¢½µ‹Ïf“4Gnä©÷Ï¥,Ø@¬Çn6œþTÛ˜ÝQT€?|ŽÇèiºk‰5X"]—w™Ÿº=>œqE•ìUÛM¶I ª½ÜMrŒ°¨ÜI;N})u;d½¹gŽX¾ÎNã‚pÃ8Á>œÔþ"hÏÙí¥'|^d™;€<œNŸ­cùí¬Hâݸà®ÜﻟOaTÖêÄAóÚ{žþ8î¤kØ|¤ž¼WÍ?¾:iZGÄ©ôk»MzãÅZmä_j²m>R¶Ö² äwÝVä*°$¡^@úM´‡Ó´+ÉÕ2,ãy¶™vHÜxÏO­|«â_¯ÇÄ—·Öóè–—*„I~aXªÇ·r¶K(ÎAb5èe¼Ñ¨ÛZ¸¹Ç—•nmü7ø„|QàÛÍv}:ßL×[m•½íÉŠ'säLñ °‰þ¨|Ç#=ëgöµÕ|Wá}#ÃQØ2Ebd}KPþÏ“ #‰I}éÎÎ9ãÊ|=äé¾Ò!·{™¦K‰5æ–@òI#Ö/˜-x­|A6ÞþÔøï¨2XJå®îeh‘RWD & #'5ë4¥+ÅœTèsú±í§i‘ëw¶@°H±¹’gB$_-v–Ç HGÉ“žj_‰Z%ÌVÒê>kxfŸd¸ò°¦Ý7aZ$'ldœå”gõ®á÷‹¬u(§ÔSp¥¥¯øØôï=­ÏŒouoÙ‘s™ýŸo™šF¶bª~ÑnÓ1*YÃoõŠÂñÕ÷µ{«½Næáï]¢Pk„ò‘>TPwmTBÇrI9&§Õ¼Sçìwâ@Í"ÜI©1c<øêø”N˜&¦ð¦¿g$³Mâ6×T;~ÔÑM8ÕQy`ØÁ`;q‚jÕR_[Ã3?S²ŽÃÅ?f¹6r¥œžLo0Þ_1,8#ç¾zñLñƤú®Z´%|‘n¥šU ¸ݷ·¯ëUµR våå³²yÒY~Yä;²0G°x ø×©i¿±‡Ä›ÝKè¼ æÅ5°–%MN;{¢çŸõMØvRA>ÔÞ½ ªâ©á¿‰$6Õ¡½Öô„]fÿQýÜ,DïæF‘…ÉÇÉÔt5'ö¶/,V² k„Ã:I‡ åJ–Ï'#LWcâ4ox¬a`S”€AùsÍ[•ÞŒÕ{ñæEX¢·º¸K9.--Òs å–IFC¸`2ƒïÅ:G»Ó5]+M¸†Y£kˆÄ@œ&IÄÎå€IÇšôÏ„þºñ/†-õMp17²éP¢2Àf#¶òàîâ£ñgÃù¼²Üj—3H—cÊ\¢—‡wÞ W#ëÏ¥G·Ñ©mcÉÄ×¼óïÄO øžï\•d¹ìy¹ÎÒ‰Ú¼ò[†èyé[~¹Õ!†ãL2²$©f¸ÊŒ·Í—æÇ׎¢x¶xUMM¢³Ü‘h±£"*1ù’pA-‘ŸáÏzáümñTðþ‰á¸õ{k/®üÛY®¢s0…•NÍ£h$ŒüÄäûäx´°´e¬â{g.sоÝk–×k7ˆeŠÞ2ò¡¸S†`…9ù÷šé`Юm/Åî”Uû„B„åˆSÇ|óÖ¼;áß‹eŠ þYPxN¸‘§• g’·ËŸ™@sŒðqÒ·µoÚÛNðWˆ&›Xž;[k†k}68˜2²€ùwgÃ'ñ»(R7Ê–§~Rž‘mÅ–™qe¡\,ê:•ԻȦõ¼ÅfÝŒBü£° ïY¿t»[¹l5Kßi:踙á׳ˆ<ƒ³%¢ßò‚rFÕÏ…¼%ñ>úÆèÉö­B[£À›#•w ü¹#[Üu¤øù׊¼Oei¢Ú‹=?M½ŠW–ú^f}Ü©<„"Ü)¶9Û×»’5¤íä{£›´c§SJÞÖëÄ–bçÃQXÙ6Ùý»8V%Jå±8r;w8éZVÏö~‹¦OKgý¦áá;˜K;íÞõ `A3Uu-u¾øv[Ý^ÉoìíäMe¥Ä³ÜE7"nfÀ~s‘œT¾&ñn¬[YÞÇökE´@°µØŽ'Wf;‡er *X„Œô¨œ¹]®t»Æ;êöÿ†1tÝ×D¹ŸQѦ¶¿Š÷Ìß°Iò³8,‚PÆH+³úÔšVƒiñÄöZ&§w¤G=«0™n#ž8T»IÚS·h_•Wn@'œfº?…·šo‚%2h°Ê,`e»´Š-ÐÌìÃryd‘rÇ#¦{g5¡}­èÒkWú‡†ÞòK˜šÚeº³ŽUpÉÌ›1ŒÏÖ­¾gdB‹Ùýå] ÅDšûHð–µe}¥ûi×÷6èÑÇÆ+æ£8;°C Jš¥ÿ ._í-OF¹•%‚@Íqku"«lóŒà6s“ƒœ U¯x~ßC°{Cakdšs|˜‰¥gŒ0—fJ㑌dg°$Ö“â›Ñh$ñ5´V6²lso †êó0»ðCŒ9uõΞüÖÔ‡|Q:ÿ _iúžŽÇT¸¼ƒM¶‘LK*‰B`ç¢ÁçÎ=k'Æ?añG„/4Fì[ØK$‡N‰mYB¸8 ,i†æzÖ/‰u;ëÏÝiqËweØòRæ‘.0IÏïü¥½#8È©þxûÀ^µx´xµìÔ6–“ÞÜn’±å˜ËåÈ^rÜ}âk²T¢•Ó%Ê+W¹çz—ìááøRñ„V OôÖIZÑî  @™Uù¶ØñÖ«Øþ˺E·4V_mFÉ W&ViV"@'…Æ'éÅzo…~êšJZ[_ÊúŒöäLg’hüÉ÷þc"u`OÝ:TzõÖ«5Ž HáÂM¨ó ’±ù”çÕHϵB½aéOY#Ç´Øá¾âÛÑñ-CTŠßlßk¼YGÚN•ù¹ç¯\{׫ø àïÃ/…·÷×úg†¬î'6,me[eŠ;WR2äwŒì{VίáçÓ"Ô4Ë»ØüýÙnl23 ˜]êÍýìvú•^MU®íJ]À5UÖ9YLýöeq€xÏ­\âªÆÉ»KMkʵ2aøÙáß\ØÁ¥ÞZÝ<[4ڂܯl·—PÞÔ!ƒ÷ë"“™WþzÆ6¯nçð®¯á׃JÓêæ1-ÔÒ2º²N€–\äë7Eð5šiÖÑ€Ö[ª¸ÙÐñØVV¡{«Zx®âiM0Žiú{õ„G(RAŸ›99õPœdô'N¬é¶¤o|Bø¥mám:àin¶Š¤3£•9Ë;@-ˆÁ$ÿ7<}kȾ"ø‡âÇY_ø†}M°}Ñ[Ï?›! pZ5?S[ÿ tû«¸Ó¼c¬RÛ1žK‹ˆÖT»,ydß÷öÁÅe…¤ýŸ4Þ¾G·‡¼mëæ{-Ξ%½M{Ä‘\½¼Vi Œ6±ÇW ™Ë¹PryÇ-ŽkÊü[sâ»›k›ÍÁ^ñ\i#Oö[\“H²ÒøáZE†@ ©Îrp;æ»Í4ñ‡†¡[cÑ55.ëÀ èT…d(Jàg×±-´˜5_ ÜiÚ™¾I®%Aû»hæ0È!Ìr g°nJþU«§ ;îÍêÒ…d¥$¿3曽WâÜþ5ÐuM áWÃ+L±•þÔú/ˆ%˜_¤©òï3ÕF$PW¨ÉÎGwð«ö\øÑãßgÅšôZ.¤GneûjÈñùn¹NõáÇPHæ½&Ãã_ñ;]ê‰qouiI ¹vÀU mçØ“Uá çÅËy Òô{«Óe"No>Ô"Ž †ÉÎdƒŠÒµ8N?ð+•Òš÷žž‰~Hñ¯üñ÷†<]©Ýè—éi»mÓá^ÞáË’JË„  ä‚¿‡5ÞøoÀ¾,»¼·ŸTÓ´‹- W³]‹‰­&þ=Ä(²LšôÛO‚z®‘eký¬¥¦™³ˆAeu Œœ°Ï`XàžÕ™ãO _ézËC¬À4¨ÐÉ"üÖYòAÚ$¾:sÓ<Ó¤Ô’IÞȬ6'x6t ðÌZø~ÎD»±šâö/>$YÒIhgl Ç ®FÒêãMs³‘±Ìf eļä©äŒdƒÆsÞ¹˜t)uMA¿²Lç|¢µAîãæ'îéVtß •Á“3ÀíЬ[nxê3[F*iÊìï§îRx}¾Úó83G´2Ʊâ?]ÇAcÚº/YjÚ‚o ZfãO‡íÅ3IQ²¥[Žá¸“ŠÉžé4{:lMü|I¹UP‰AÀ'ü8¯PðÚAouœ“De½²òšH›‹V8dϾx'ß͉­õxÝïÑ µx(èõ8W–óí3^¥¦Ÿ/–ĬT8´†F du$Aª³kþÖ-õYö gR·Ã-¼Ä̹Jâ"p9PÜ v¯J ìæ×/u+PÓÇ©~ú[”˜(…¸SÆx¨Î;äšåîüKs¡N"k ‰®VÈÞ² ŽÜõw7¥ŽO¬N=ŽM¸»²ÓZ û‹ËŠCos»#+’2{õÇ^µÐB&Ña²ƒM†ÎáîQžì´—N€¬v¢î(JŒô&»[£iñ"HÛ\k¿=WäTŒ›—€;‘ŸzuÏÃ;-F´—F…­â@kÙd,åvàòqô®Ÿ­F+ÞÐÙU_zG‰rú7ö·‰&¿¹‡Íq:,H¯„'”¼0§éÅ ··¼ÐçÓ¦D‚ÇRD‘Öæ0È2N6†ÀÇ8 ŸJ讦»ð,¶vÑ4Ù­ Àûd1&ÕHˆÊ´ª{ëòüÄ· 5.™âmWСŽçOÔ,oGkµD«œòG9V=xæµWkެ­k]¦üð1F!ð¾•q9¸ûh/e oç&1!*ON98ì@®¦s.’²Ë­Y]ÙJìHyÉÀ:r2jÙñ—‰|%â_µèÚN‡sjÿóÞ$OA‚½Úb¤×þ3xƒÇ63ÄÞ¸×.,0ÒÊê$”¯ñ7ï™…u9=³MÔwÕT®ì¿¯¸Ì}(ø’õ£mGOÒìŠï[ç·&ÈÊY~R‰IlvôÇñ¾¦Ëðø_Pû~¡o±á½µµÄ3.ì6™G\/S[±k×w‹T‡áïˆü¨Óg›m&ÅçåßüLIö¯7ñoí ¢Zx®Úi¾&Ðfá± qiÛùœª§œŽÌçE=†0ZÒ”ãU¶„ªÆ§¿¡xxŒx¡-WG°’þ8Áin1o%¿>lrî”`.Aë€+F+¨¥²–mZ8¬lâÄMra’Fû .F äqœuäV¿†Î©¢Ûý³H¼‚xç 2Û–0bsÁ8­SKH º"XoM¿’̱D’O ·ãaq߃ŽjÔº#IE=ÈçüA=õ´jñ<· ¹AòÐ)NF3ÈúŸo\Õí%õ¿ÞÛ išÕÔ¶1¢Î1pbãäb ­uâ›{k:ÞÇmÔÊŽ-I-*)q”b ÜI\JÖÓüHou­Ú"ùí3Y#f·`x Ç84M[¡žµ»? bÓ’ö·¼»p¨ázûÿkkzBønÞ)c2Ëø±ùbã¥sLžG—>Ž%”†Ã6I>âº]cíèÖ÷m:Ç9·!"&·Ö½ÆŸCóÄù÷z‘\ëÓÛAöm¼‘Äy©†S힣ò­ öšßÙ¡’à5í»†”Ä»€ãžœ{VFž† LC  Ì'î«õ«©Ëk§·˜ (2ªa%Xÿ½Ï5Rµ‘1|­Ü«ã[.!v÷æ1…û˜#éžÕÌAl.ïm&ÞTuÈo›äà=G½TÐRÚ;–±‹È?,e±·ŽÕÓÚj‡Kð³ÍqlðÉÁ÷¿ýx¥)uF”éÇ•©ô&ð…—ölÓG§Jî°ÀŒ3½ðè;y.œSåmÙ~gs¢ýÔßS?ö]ý›üUûd|{ðþ‹o`±Ø__[«Ï,­¼6î$¸-·Ýt÷gëõöP†û[Ó|Gfžo…þð”¢ézƒ\ÀŦù·ÀêÇ0Ddö'!N@ùŸþ ñàßøÁÞÔVÒ{mVÕÆáEÂ[Ý5¼{¤}±ãx\¡ù9ÀÄ?à¤üa¦Ïe”¾!·Ðu¸'}BH„ÍknVG‹Ê’E] ĬFàÅAÏ]*ËÛMRM[õ/ëŸT¦­»ëùj}qâÚ3MÑZÿÆIzÌZ´ }¨nûe¬j±[ÜÉûÎf£c'jðž(ø÷âŠÿ´ï‰ï4é4¨ Ó$Ùp%ÔÏ  ŒÀ‘YLJ ÉÎ+óóá—ÇmKþkµtŽêËÄ…¼S‰'h$6P€n̓÷ǵ[ýXÂ4U ×-ñöñŽ|M¬i3ci~–ybLÐôØì´¸ ›bwv»<®îYŽOð½‡-¡Žx¨é7©úûPþÖÚçŒcð'ìÿ©E|÷­okwqæ(V@d±®Ä‰NF .XŒð2~gø½ûlø«öv³Õ~| }IÐ_Í[ÙŸµÜy„¾S!!Õ~\`¨Î@¯™´Áàyín¬'žmM$(lp¯Pë“éÒ½·à¾‘£ücð'Œu߈¶SÕµ+¨¤º»Œf}>ÉA’~GwPsÆ&œ©*æJë©Ê±”š§¹SöuñçŠþ,ü\¼ÖõŸMa¾”ÿÚ×Ðˆà’ >Ù >Å@‰x\’ã$×ÒŸðQHm~üðÝçÃi4ÝA›[†ÞöÓ"°Ô4Y>¤ð”ÌÎÍ•žNNì‘‚¾^ñ­­—ìë©ZÍà†G»Ö丷°‡P*·zdbHZ;Æ ¥WiÇÎCƒ‚6u"Çí)â»]{FÕ¢Ó¼f¦ºc¹Æã̬Žzæ #µf¶ð¹ç¡NÖíí‘X)ù~`O­wšž…6òÆ]dgˆ|Ñç zãÞ¹ ´2Aö¥‹e—E''o®;V‘ŠØÊnPi²ëk !„Lϸ̪?¯z«s¨ ‹‡/Íb>ÿVÞF±‰Y÷|àŒƳáÔY•cIZD}¬1’À÷È¥ËØn­;9^Æ7t2Ÿ˜v­Èá]wM™ôà€‘Þ|òqøJφÌ\I£º"Îw;qè+VÞÎ})^]=¶6|©°'Ö¢Jè¨Þé=Œ ­3ío31``3‘Û4iòF†A˜炼šÐša¤ÞKÀ-‡tcø@=@üjµ—‰ƒÜ1–ÕiÂö™Çzäš&ÑŒ•‹–6ÒhÚÌ1È ±ž½«iÙŽ³‚YQ—·z£s ·QYÝ•8µ”uôÏ#»â+Í?NÒXÏ*¬Äw6~•É6{ŽÎÈÈðúÉmª_Ao¾_™Š1´ç·½uÓê… Ê’È“8ÎäÃI‡ŠÀÐ#–ò&PÄ‚ Aúâ´ü?}$ºd‘ËÞÙÔŽcŽã¾}ETª(´:–ëNÇê‡üþ Siñ7ÂúÿÚ/RoøI Y麴Î<­F2ÇÉ‚cÕeT|Æáøä+ôRÃW‚M2EÑ%‚Uyêëì7¯æáõì3 -õ$ÝX Ý'Všp¸ü?}ýÿêÿ‚®…Þ# øé忇$Ž+(5HÀY, |ªÓ.h‚3}à‘’<,Ç&Œ”«Pß·ù[Í1F•{)tóÿ‚~ éVó\ê²O /$í¾E… öü…tË£G¤De‰–i¥Íœ “œdýkÂhÌq\i¬Ü/îž7ܲw ¤pAb­XjG^¹òm±æÊv†?ÂzWË/wFµ=б”–ŽÉnB÷Sêdpêù²–&b_~èã>˜‘\c„(Xª¸8ÊýjËhqÆ­$y2™Šÿ{olšÆ‚ãì– :8˜¼¡*>vÎ{z ©÷ºŠVZ zº|Ù·@#|F8l|»~œþu‰pë=Ìòƒ½î{•ïÈVæ‹¥ÅxÜXd`r8çŸJY!0°—2ol`aýj;ÉddEPÑF[ ™ÆúÕ?…/!½½‚H•U·t$c¿æ(‚ævô‹‘ŸhÞT‹Ê,r¼“õ­ ¹Ï_´LÛUpqO×aŽËP1iK傡±Á“ß¹ëÖšÚ|ö¬ê«™ò¥XW§cì8£’IÙêJª¤”¶!¸“hܨØEÚ>ï<ãðÅL‘ÛÿJm$Â-ÍXÓ½xßOã]Á#©îgOvÖ䢯˜ìÁB¼sšßðÿ‡¿·-$J‰;¦ÿÞ3ÏB8•-³A,Ù,d…GÎÊFíÞÿ§R”’R¶ætëC™Âú£>ñ¦¶Öb³÷>Xœ?8‰à~Uv+kI;Æï¼0ǰȪ±\¶©2‘%0€öÉõ'¥kÉböׯ6«¶0sÐöÅJŠzšÊ\º=Ì+«•–ùÝðÍÑöô9þ¹z„ŠÅáHfRT“ޛâ;8áÑìbHœ«0Uá˜ú ÷=j׆,-ÚûS€?êÏ·ò¥Èùš¸J¬\Shäþ#x—Vð·€µKýËûNöEó˜b ˆÕØ“÷±Ž­_2\\ØÝYêÚ¯Š5­¼E®N³ÜáË`·ÊTŠ5DC!%äöú3ãÅí–££ÜèóÊ»@nB4-8™ã;•UF9ÈÜI 9ô¯%km;Oð…à].âÂîÿJ»:¥ö¢pï"¼Lï]§ÌÌ’)b¤(Ü1ÓíeÔZƒ“êpb䛊KSŒñ—Ãt­B KGÒ5.Åm!CmÈ»^7 do06ävÉå¼c¨¤|?à¯_Û ­METa„†ÖhB$¡;„àbU‚°ÇZê®þ!_üMø}/‡â61êP›¦øc]ÈD…I;€}¹à€BŒu9­¤øNñ—ŽõE°Ð,!×¥,>ÙkŒ˜‘8ga´6 ¯|õ5ëB†É¯3—EûÊä¾:wˆ¾Åi¨Þɽ¼.Ë£ Á• 8‰9ãîü¹ªºUôVZ,ÑkVz\K(ùzàüÅz>lôÏ5§ øtxRþ[) ˆÔEqvÙu´“po””ªTîì{u®7Ç¿ü¿sáßX\\ª0¹·m»·–¾p;tⶨ¢ÚKréÅ%¢7tïè“x>ñ‚Ésw)ö?3+i.Ü@äcŒƒÈéÖ¢¶Ó¾Ñáf»¸¸Ó'˜Èˆ–ñÊDÓFØÜè:PØnræ¶~x6Q­.-|Ÿ%­Ç³#&X&ÐAv*w3ž8ëCWÔmõ‹‹}Fyeº·ýåí’F ·H[1˜”° q’ܱÀÅ.N[»“)kÌô6>x¯Eð/ŒmõßÙj-U™tË6y$ &Ò@!8>„wã÷?ŸÚÓÁ#ðö§‘’Æç÷7Ÿtlgê2+௠x^?FÈæÔÆIŠkI#ŒDÄs½]w2€H xç4i [Ô“P·¸ hÊþDÈ~i@8t 9U$HÆ 85ªðéÔM[­öûÏ7‚Ãc]ê]K£OôÛòõ?E>$ü4ðŸÅ eø™e¥ÞÚÇÝ<Ä$/RV^:u¿9/u_ Åñ»ÅÖŸ5Üè«ÙÝ]/”‹;›­æyPËÏ89ÉVž½ñ YÒ`±Ðu/]j–@Ïý<ÌòÄA%pX$x’O¥aø~ßO›ÅU¯ŒµxtûVå÷ËwåÁqpÞYe€çfTçåÇjÊXc-R^k©Y^_,Û“”^ËoÂço¤xËÄž Ž.» ¦’†Ñ6‡n2Ÿ*odKvæ¼ïÆ)ñ±¥ÜÄ/noîHáF!”¸ŽXŒã§'µz5«ÍgÀ:ä~Ôn-moî¥1C3˜Ú,§t¸,UöîÎ0Û³Þ¸¹ôA ëÅw4\»` n„ Žžã¥\Tµ®zÑ=âÒKÈðü/ñŸà-NçÄ73^Ïa<Ö·1‹ŒÜÏÎ^ÈÇ÷…xSŒ‘ë\Ä 6ãÆ¿´èå±¹ðf¥êkgs|’²M{¶"d•Iá‘”Ã'qƒ_V¾qu¯¦š&–íÐ\4ê×¢î#…:ŒÒ¡ñGƒ4›]hZ–™m1ŽìÜ,æëÌIF£bÆÃac ž¸â¡ÐQiœ3Ë Ûk©óׂg«kÁÒØê¾8×%ilḻ·–ú4…Ì®R3äÞÌp[ôšòéÿà›¾(Ö|e£Ýê>+ŠK ¦ŒEu$²Ë t¢g;rÈ ýЧ¯õœþ1Ò~jÖš‹à[lî»*‡ÛÀÈÞ9ãÚÙÿ„§MÔDÐZ<Æw¹ó7æÃ$J€ U€ÚAôéŪÔß»ku±¢ÀS·/êy·Áσž±Õ.ŒP^ϪXÜ‹KëØ<È­&ÄEåáHÇñ2=k¸Õ…¶§mwume<ÖZÅÂZ@—.†Pð°9å‹:œ®KŒZQÚÝ^j²,gÞ‚Qc„D>cœduôÎÅ>öúᣖ!¥¤«`ȱG´œrž§¸Ç¿ZÕËÚÉI•=:rÑÙ £ëRYOq¼–ó»D¦G‘”ðdlî.I`s‘ÐW|vÐ5‚þ+²x‡‰­`®ì$Ò¦šÑ­bÞ [PåeL¤œ2»§¥ñ“ü\ñÄxgö|ð­¶•¥h’ù-âímBÀò”GÝkk¸< *[?+/Cšïü¬êÞÕãÒƒ¦k7:4ˤÞ^Ú_ꣽ[f-qpÏÍ€2Ø ·¦*Η}öÖ±Ô’D»Ô5k_¶NÌ’ÙO˜±ˆ×nÖ`¥y ü¤ÔŽuiuscvÑ[jqà9ÕjmÚ}çgºº¾H¡@ì\Ž»ŽG¯J·á+¹t¿2Èm¸uYæY·M ¡˜˜ÇË…Æ3øšP”iÚ êj—³ø˜û=/U—täXÞÙÙ ººh0â<6ï›åçŽÝjÕŕ׉íšx¾X­.È‚TÜ" ÉMÛyûÙÉÏcšÉµ×sâe†ÆÃM–lkÙ6BÉŒ6Ô۞ؑҺ)~Õ«ê .¯tÖú íf·ƒÏkž›Ô¨+åà@ÚIÇAÍtÇTaWÝm˜7:dº.½9Ôž{™¤…DqC(1Ú–èprxã"´4«-oG¼†ïKÓcФÓAdxáû,’3|æ îsþ³©ïÒº"ïC·ðuä^¶ ©È%òÒÉ´ñ´7*ÜaãÚ–çÆ  éðË}©ËqrŸ$©só*óÀ@NGÐ~UÉW WLçxÚjV›ýNZ]Lx»UÔ_Ñâ°¿¸ŒËq©ÙÀ£íNp ·ÞXøÂþð€@ÍUñG€dðÿ'ðÜRÄ/â‚ œJH¸ÜØ6mäsí[÷¾:YÒe]&òvs¼ÈC½N2¬G$|£åT^”*·£RNÅç€óÝ7Åš®£k ø¾Ê+RÊ8´ûW%g&Ý[ää´3d:sZP‡´w¾¾eJ¬”9R²òþ™<:®¡kç]¢ÈåcÈ7;õC’ƒóZ:ËÙ_k÷Mpf”yb.ß³˜È*áÆIá²F=93“©AtîðÙÆP$¾g@épÇøW²Ž˜æ–mRY¾ÀV(RKDòKaÇÎ::~õ®eíb#YÇGª;9ltßlÒ¼m©­ÅÔ-ö;$´•|›Žûƒà¸w æm¼ ž+µ½¼ðþƒqöF”yé%Ìr[[ã(Ë‹7;KíbÄä`Ôø}ªÌ ¹{Y.£v~òU2ÅÉŒj–ÆÛKðþâ÷í:†·"´RG©ãÆKm1ÇËœ®ïÀóX¸A?u›GUy#â­^éqØü?u–±e:£Mq„ Hq³ïy†zwÎ*Ü^–âÛìþ"·’(|¶3:ïV | YCs¸QšÓÕ¼%¬ßj;Z]%n®£‰-•JyÅÜ*í$`žçÏ5#ë¿ð¯R{=}üÁ`T´’LeÁÝ·‚I;FqŽƒ5„ç<=×uS‹˜RÂòÝØÀ:ޏtÈaŽÎ[9›lñ¶È tT"7E@rrÝr=O¥gx§àžŠûõ Q¡¨ÀÆ8æš"$¶;C‘õlH'ŠŒ¾.\[¼:uÁžç>JGÎäqåx8õ®JÇãZ^IâŸ;L³ÓйžXœÇv#ÓÓ äÖ¥TÓ¶ç6ujZO…üI&•tñh©ÉE qn×–=¬«’ØÚÈÎîyÇ5ÌYÜøËÃZ¾«y§é—¶Z<Éhš“êR,/!RûZ2VëòüÃr3Y¾ñŸ‡þ&kAàˆïnwâ#u wœ pß ç°·5Ðjÿ 5=.ÎM2ûPº¹µ¹t[¤ÆâIel™éŒñÓ»}¤`×7SÜ””£Û¸ÿøÓYÉiaâ7ó×l—äM¹ î;\dcn^œÖn£âßÃâÝsJñ^•×V‹ouså3Ä¥U”’em¬£ JÛ“C±ñÄ)­üº™Ò´&?h—RXâ;ÙKã7– Iù3‘ɪZµ•Žœn/ É|òÏæýªâ´0Á ÈAëÏz¯iMË•o÷JQŠ[~ð¥Õô˜Òí4mfþ[y')w»u¸_2ÙTJ”‚6÷9®‹Á±°1Á­¥æ“je6P2¨ì¸ÀlñÔSøoÅ:€.ã¹–Öá›RŠH$Hâ>}šä|ŒŒ!ˆ{WUªÞhzý€‚+™R&* KjÖó+…Ï~F:øVrœù¸í^…¨|S³Ô›ì÷šm¨·#åfˆÞ€Óté,58£¼Ñm!ˆd ±ÀìsÚ¡{¯ToÉ)«Å¦ŒJ·¾Ñ¨IÙ ‰?ç½\ñ}õÆŸáÛvÓlÅDg;Ï©ªi–úV¸épë vUŸàãò«:½êjöðGq4$aF\ã““Ò©«XÁÔVièËŸ 5óy­[[ê®–pM"¬· Xœ`9 œwé]þ·¤ZÛ@óiwßÚ³ý¡‘#Ž=€ 'ksê¸8=kÏ4‹Ò,¾Ó|«µä,Ü(îGøWSàíRáµËk_¼sïšXoÆœ³Ç,8äg¢q»Mluaå¬Ù곎¯©AñKLµÒfºjr‹ãŽ?5•ŸŒùg!±‚Np¹í_k|9ø]­›ÿ ê~wµÐµI¡¿¹hÔ\]Au’uÞAeÞ¡Tœ+³ŽJ‚GÉ_héß üOgð¢çMO5€·ŸW»S»\ܤ eb%f8wr*šòÚ£þ )ãkß^øoÃ>&··Ñ<*òiºuΓ¸ „–6–Gb‘‰##`$ €î9Àó±Xg‰©t=âiRª¿ø'êůhþ#ŸLÑd–++ÍŽÛíëšpghœóFìp¼ü _ž¿·í©áÿ‰²xÏ¿t_Üiº´v_ÚYFµžÖÝ×EnŠZ+%H‡ÞÛÉ,~S–ù·ÂŸ´ßˆ!¸Öä­Úê>!UK½Idh;NAÝŽ§˜`Œ UmÆWÚL:……äÒÛk6Xß4rsy¶^9Ot'ð:xN^ö§=zô± ÷n×þ¶¹Çi^(–/·ªÆ$û|I›Ý8s·¸P}ºU½Î 5È%ñÄvv12¼ò¼eÕSp,Jõ`9“Ó¾kÜtÏøVÇàòk—‹Sñ&¨©e¤i¶SJ¯óÈ`ûT©39óÔLí…ÇÎ yÏ~·Â_‰öÞø¤–’Ïe¥Î±m ‹rÖ+!ß%œè8ˆÔ'h™>nxëUW;Ils}^T”}£Oò:Ú3Ç^ñæ¯b<'¢ÿÂ3¥xV¢iš:bØÞNžZM.©©gÍÊìˆÊ›OÎ;ØçÇžÑ<3ã=+ÇSù1øžtK62ùI§ !¹io™ò ˜[eËîbkç?ø¥|M¯jšì-æ£p÷,ʼnàœ"ä’p¨$à(«_ÀÍÀµMFf…¤-&Ç ‘œ·çÔÐâçMǸ©â# ·QWf߯ÝwHñÄ+û‡’x•4i­­ã[š)îZtJÊÑ“û†eGEc¼npØùTQ–u¿’Æ5¶Ž(í¡håh†¸ÜKorz‘÷GN8ç­{GÃ_ØŠ?ˆ^¹ñg‹5íÁ ³^[]j’¹EVdxûÞ_˜»ŽuÅ:†þ¿øá[¿Ú3ëÖŽLlìu ?Ķð}¥…ò¤1º™QrÀ«ƒ\ï‡ï¤šÕí匟Z膫Ðãr•:›Ÿ°ÿðF¯Û‚ïâa—á7‰o¿wch×ÚÒÈZG mO@Œ¬€rp0~‘ÀÖ–W{ìáhc?êó× ïß¡ç¾kù¬ý–>4j~.øk厚‡…õ8/T(ÜΈø‘qü[£2.;îÅG¾ñ•ñ_ÃZ&¯à½B í]³‡U³š&ùf·`$GR29Ž Žõò9ö ÙTU`½×ùŸ eXåŒÃÆsÝhΠê/ac,êXo‰‘p~f Ô®+Bf‹SkËøÑ% Æ8û*·OÄbµõÙüÑ<ÑÅnFŒvÉé_#þÒðU¿|ñ«¡x&ñ>¿¡Í:‡ï ZÁ™1",Ã>d Â‡°¯§Z|”Óg|9-yY\û*+­ºD±À]!‘ O¸=qšÜ’i·.’‰Kþ±Ï €qlާֶ>øÿLø©à­/Zðä7úN³mÕ¼èã÷‘õ`޼b›ýž—zíɼŒr9`ŠÜŒäàzR­+&M/ÝÊZÿ M­í¬±ëð­Ü·‚ŽF1ýÑôǬoZ'ƒµ/.é–8B+³€ôõö§¼m§l±ùˆÉÀ+»içhÉ‘á{H|/«Üé71\[ØÀÉ-ÀŒ=ó¸c#·?u¸Ë–¡ÂªENv^õ—A‚?ì«xæÒ¢o)åAÇ'ÐTÖ´º¥öåŒ~ð²ã;[~CXñ&¥u"Úø]-Gï\4‘2¨Ãc¯ËÏqK`bÑÚKÍnîúiÕ™·Í6R5þèQÀçŠÆ)5¿ÈéjI>hÿ™¥áéžâ[ËS(´ùNÆbÄ0ëƒîy¨†¼÷â×ÇEñ×…Šê‘êSAªÌmŒVÖ©º´YIwNreåX|£zŽk¦ŽU_2Z ×’†¶·©åž øNgñŽ›¬_j#ÕüewlöÑÞjºœêöHÑæ@±òCH7.T1ÓšÙðÜ:vk©7ˆR–Á6Daµ”?Øí׿ccqËlN~èÇË}sU‚ÖÚYçŠ?±G"Íu&ݳ#ãÄ’q»“ÅyÝÏÆë/Msvó™íî%pöê§ (äúžtc1’ÂÎ*qÓ©áã1Þʪ‹ÖûÜô¿y°i×°N#Œ?œío±UAÎ’ÜgwºˆΑ¡Í¤iwºG†Mò}§N…á"îLŠì¹Ú‰ûÀ’LWh´¿‰úà»ðÝâ¥ÍÎÕšÜ\;²©RAÎï“nÜ u÷©ö=~xüu;"Ù)“0¾g•!2üÝó“×Í{´\ªÁ9èuS“¨¹™w[ц©ë0ø«TÓµå¾k¸ìˆ3ŵ‘¤2c8mê¬ëÉ#o\×+§øݤš}:Ê+ÈÒÔË$‚Tó2Ÿ)y ã' ÐrxÇ¥w—>9³Ó<¦ L-üH¯$·… FcŽ2ñºùŠT»¶B© ‚kš±Ó–[I¥¸¾’Ý£†FK„*<Ôc‘ò•êY›GaK„Ùwm4ÕÍøgûOEÕþͨÏe:ÁØ­!&!xûœÊ¯  ¨£c%°x«ÚN«¬øgÃþN“/ÙŽ·§<·öÉæ—–>ò“ʨB{Ž€àÖmóßJáü8âÎâ\A „¢;´`m@X¶ã³$ õ<ã×è¿õ_ ü.Å_`ºÕî-$¹‘ £@“òÍœlìCÆMrW©(;JIû—ÿ$yœgÒ^êkXmd‘¡pWÌ6íÚÊ>¹È#ŸSDÿ´¡{ba6ËuvU¡„FRÜ"mUUÝÂíG^k/Äž ò´› %´ë[mZšÆÎ+6XT.X± `÷G§½s–ž»:ƒ$†8Ë)}Ò°E$ ã'ùTÔ¥OKÙT3©UÑá¿jz_Å=SÄÞ7ó|â¾M•¤—ŸjXËŕ¯B~î1Çã]¤:–³ãßør]rñ%šÎi-­ á 3!RÄã®2zd×<þ;k«ÛYX…ÅÊÊÖ[”­Ä¦5”q“òàþ½Káï¬b°Š_é2j7‚¸T»àŽØ¡JœsÔÀäsé]4¡Q["©ª­¨EèÎãCñ5¥¿‚ô–ñNšÚŒBm’ÞK€CoÞå¿;ˆÁϵ`ø‹Â÷ZŒtϱÙ@¶¼fæ kHÙüƒ¸€Žƒ.£5SıÐ<'½zÖ÷¶÷ŒÉn»”€¬Û|ÌdÃpsõ®cÁ_µ¶•â[»}*ÇP3ß›vX™pIò™ºdœŽN1\U§?mÉóèiÄO ½Ø­:žÜIËcŽ1^]>•¨x¸­ÿˆõk*ôˆä{h›1Û¦0ØÔŸn™ë\WÄß‹Z‡ìéáåÖ'—VŸX™Í¥Ì°:òJ<íù‡Lþè}UÃÔð©fµ§$“½Ï`ñà µ­‡Œlí˜Eæ(i#tÉ'Ìlœž;ŠÏ𾔺F¯4ÛH‘¤ö°Çwv‘¼r«Ã™ƒ2†§ƼGáOícâ¯/ŸcÚ¢µŸËº’R3 bUI$ž½³“^á«×¾ðÞ›®‚m®¸y’Y g-½˜pI*ùƒ“\þά/ÎϨ¡5ˆ\Î6þ½‡Áßï5¿ˆ§ÃþMû¦’·RÞ\®#ˆ+ˆü¾ff| /ÃŒÀd€9ëÆ=«“ð玡ñ’²[¤êÌÞ)I ƒŽ¼×=«ç6ý¡ôŠ~%´ðæ•#¼÷;ÑïNLÆ9/ëÀ9àä×¶xKNÕ-l!¶ø;gk¨Z<ßgº¿¸$H\—@¿ÂOï]«Ôå£<™„°í5¹µñ+Þ.ñµ»ky-Êd=ƒAðG„5o=îžÅöL–Ë °—ÌÁ¦d€íó'°øFÛœÝˬêQQm3ë9ük«ÙÜ]\[ÙÛÇ©\E¿‘$Xšw 2Q›ä%øSÏ8ÅX¹šÏ\ŸF±Óe^_—¶òİ%»ƒò„ Ù†O<ô÷¯ ø/ÅMJm!ü[›kwplßûMNÄYpÐÜ6Ï—zŒ‡BÞOÒzì:?|m‘6Ît¶Üë›­Ò/Vf%½sÿꮺ’TéÙn{S«î§-íÚÁã‰?‡LvWlöî­ QÆ JBàîô Tç¯ò?о#xÃÁ¾2‹Ã:Â^êwÚ´«p ¼m<6褣Æ1¹Ï5ôoо7Iz²»¼cŒ3‚.>}€òÎ#±~ ø Gñ.5oN¡oþCn ³ÇÁc!, üÄðxxxi'ˆJÇ—ˆ§B¦”ï~ç§þÐ>ðnš‘\nÆâßhšî¡Žîq€@$`“jé>ütðˆm5 [{éµ+UƒIw‘˶vù˜É‘€@ÇZèüSám;Ãz “âÁ°‚y Ú˜šPü¯æ`3ÔzÎøeá;Ôth~½Öæ°[» )¢û¡HÁ Ë:1Cã÷{F$kÞ£Z*? ÝETÃÁ+._Ÿäv¾<Õû&çWñVµu{¨Û4e¥kVyÿTÓUU³´Ç\å¿ÅÍÇIž}*âîÂ9#dÊyVÄ–(Ð\’FO­m|Õ-µox›Á¾+m2V³’8-¯#½Þ÷2ªnm*l¦˜§8â°>.~Î6²k^4BÚo$™!¶9Ô íÔ{Vj´!.Y-ÑR¬¢Ô’ØÒÑ5ë8t”‹Y·ÚUèIY!˜7’ʬ¡†»õèEajú¿†õ÷µ'ìöÒÇû¯6ã2ÄiT`>À šÀøuð·O¸ñŒ×?¤Ôô]"8#û<ߥÁ¹›?¼1„Ç#€Ø¥§Üé7‘êPXÈez]8ŠSØÈ¤âM½@9Ý*ø“V¿žbÓU¶±³å‚‘„ €ªzÆ ÍmxwCƒVñ¦¤–Ël&gd‘6Gc <±ÎÜö É95½sá™#®4]QµKq)Z²¯ÙïSpï‡E$c<~f¹aYüJÆs¨¦Ÿ¿{^G9ð“âu¿Œüc(ÕTš”-æÔ®›g$HvÈT‘·Ʋ¿i FÛÂ^“ij"‹×’Ñ"¦ë©ÐdÆÈ¤±Î sž3]߈nm-î5It« :ín£Í©M1˜|þ]¼…˜ŸSžH'½|ûð_á—Š¼+ñûâ_ˆ5ÛÍûDºÔãÔ ²ƒeÝÕ¨dÃ*¼‘”„)ç;¹¹è• V}¯ø™â0tñ¿{»µ¬r~*Ÿjºf¿ãhôÏÁ“ÜKªj‘ÙÏPîˆE& ÀÇŠÜøâWá÷Šî¼;­]'•qaÅÊj·V?61(âÉS±Ôà ‚zW{ñ¦ûÃRi÷þ,ðƨ÷R×my÷8ù6ÌTàú!ïŽj-NÐ>5h–÷š•¯öžr ±Ô!ß5»‚Y‹|êÃå'€t*W³{£ eT°ü²…ïÑÿ[/¼ÑøsáÛ]E±ºÒà[UdTi£ŸyuÀ–ö>Üó]ˆµ«ež9mÖy°ÄÄÏ+_“©ðÙç5_J𭿇täÒ4t,í„QÄÇìѶ~m§ßäu«O»Bº‚ÚvÌ®Än17@Ou\sÇozÖTÔõ=|5yS´%ù˜Ú'‡u'Ô5-KÁeâmI :”ß>.Iƒ;€@#`ž{U»øõý3Myì¬ç¼FŒÖÄ\ñž¤/#µK¬hïá½-.´ëû,’Kj-à‰ßg;™qÊ0Ã)ÏëÅV‹Xxtó­ß–î„.ìíWƒŒW5L:¨îm:J§½Êú^¹¬_ÛKs{e%ÂÀpÛ¤ª$Œc·j³à¯5ýãÿkYÛäfUB èÃëÖ´§ñäŸð‰jÑjkwy,väZ[ ó$¸ ò„ øÀäüÙîx¦xoÇv¢ÀÛZèó¹@‹clÑr§•p ñ tÿ„¿ÂM¯ÝXÝj¾ ¸^J%—ì—v6±6ç\¡$¨F$W—,;‹×cÏ©…ž.e®Èúë⧆í­[G“FŠyKÅŽ7•ånÃò$b9ÛÛ>ÕÁ|Uñï„@k•>k[™äºHn­ã¹Ø(1)ò1$ŒkÌn?h»OÍ}á U3êÞaýìÙ`rþ쓟¾œ`õúø„þx¿ãV©&«%ÌÚáò­®â’34c‚1Æî éÞ¯…q©Í'hþge($Ünú.§Ò>#Å­I¨ÛêZ.…k$r|a9–)£Vù7 ÁϦzW¦xbÇUñ ÀM´–ö òÖE 3óóÅ|íÃ-'OÔÙ´Ï£Ü.Ð%û;#qÐP:uÏ<׺|ѵ6±ÖmõO¦µ{¨Yùš]ûXxdO˜™#g)& ñÔ÷Åz5wé­}êB¤à¬£fiêþñ†§“þ;Y GæùŠIŒ©8ÁaÇ隯c®O¥Æmâv·xp$ï†õæ¹mCÅôé-lõû_ëe¬€Nmî^˜÷ÀÙÜÝÉ [Ï-Æoa)°˜m™ƒŸºyÆF}(¢æãz¶¿‘µÊMóîXKæÕnY¦ºHŸk9p 8듟Ä×ñ÷ÀWŸ~^X®¤ésu?kŽy[•†Â¤í>¤a‡Ýæ» Ùîmî_Î2‹†ÃŒ ÄžÝ=qÛ5‡âý_ér[C« aqŸ•$~ ù›Ðätb¶ÓâkSy.hÚúç‡ô9|'i¤OáÅŽßR{X¬õ{‰m€‡WÂ…ó™Q³  ûÅÜá”ðÃÒKXcf´…d)‰d(¤g'†Ç|ó\¶•q5•´6þ*î%\œ‘´Ž:÷϶9®ªÂé¥T TîØÇa`;|§=:óSò˜Æ›ŒlŠ)›yÄ’yLÇ‚9ÁäJÜÒcuÐ ‰áF-¼¡û÷¶@Î9)ÇКÄÄ1ÜK a•™Ê¢‘³'_ÏҮíÉýšm­¦2@Œ³*² ´½pF:ÓÜÓœn7{×>¹„Íä¥Â•@Nc-œàn`03ïYךeé ð¡|tmàƒÛ¥v§ÄÇS·`³˜à‘Áu Û\åk´ÒáñwˆÞ÷â [Ãer‘Å-Õ¼A&·TÚ ¡B`)Àç5í)Éécóyá9’qg‘?ˆ$Pcû,ŽªFù=éþVîêÆ[Öš é2/.20ƽÓâ߯hÿo/þkÓßÞÞ´s[Û^Íom¿ï’M‘þòv_õh„2\úüå¬E¨h×#ûRÚI¢gÜ 7·Bª›hä©J¥v¬t"ݹŠòv‘@ÁwÌõé^ñ¥¶©nŸðưƌ±¼ó©ØŽ ãðükÍ<7âÔË ˆGåã1`«F1Á*GB?:дÖ%†YGÆx‡Lžõ£×K^G«=›Ãf(42C#‚£yÃg±Æ8ükñ4×^+¹{©RêM›<¨ÆVU ,zu=½+:Ïâºé¦ÚßQ†FŽ"vLœú`v¥Ð¼Iiâ­NâéÅÙl!Û€ÈsÀãž+9AÞìîuéÊ*04îü!mâM6x|>°+•#æ‡^1\…ªj~¸kXe„;ØNÅ> ÍtÖºåäžm·†m$šîWòLV«¾W=3±FO¦zŽ“ðvÏHð0Ö~>[Þij.>Ïo`Ö­æ] 2cªžÙ?wø½+;¸½G'ËÅÙùma.·¥³ë,#•øPÍ–-œ–Ï¿6—à'¼Œ?ÚÐɪ Ó½{f¡ð—Âw ´ÏøtÙiRêÏ*ÙêÙ½‚C ª"ìL²»RG;OèŸ ¿gÝÀ.m¹É×á­BÇö+𿆭¾!øš+]oÄ¥5mDÒï£[»0–6p´é–¶IQŒ®+>Уå';²Æ¹âfÓ§ RK™¾ç7ñËÁV¿¼O©øà~¯s&Ÿ©Xͪj~^5µ•µÔQüö0„E_+dQ$d³w4˜cƒó3ê?j&)#XˆÚ; q^Ëñ¿þ/…·V>Öõ­KXѼ3jš|RÚÃ;hÖå‚ÌÖÐLG“&Æq—RI`{^a«épkç[Ÿ.CÔŽ+ZK•Yž>&RýÞ‹±™¥\%^;ŒKœ…9Zéto:3öKhÄd`‡êÃÓùU-'áíÍÜR2ÌžT_4ŽGܧ5.½¥ØÀ°Åg.ök7AÇ|v­¤“9¡)Åi±èÞý¨õO|/ñ.à›h-¯<]kœºŽæûFœ÷‰-‚ã2’“˜ØPOO/¸´½fMOÌ•î¤i^G‘™æfbÌîÌK33K1%‰$’I®‹ÃÚ-´YÎÑ·¸ÇÓ=k[^Òa»´íG‘ÈݹN½Ð{ Î))^ÛU$ëÓM½PÿƒŸ³—о5j~èój1¦ôgL Ëð¸dž9æ½B×ö0ø…§›¸¥ðäÒè„5ÂÚÏÆµ[æ 'Y#'v=k¦ø!ûK§…¾ÞÅ{wkmy¤_ÚÙÙX/ÈËoµ¼Ç@)ÈÞ<…'9俼u«ëz–£'…/.-ì®næñR‚æQŒ4Áq°(IQÆFjg9©8Åhh JRû¿¤iiW­±o£øêíì4Ønv\[ÞbTvW|r2ãÆrFFx5ô_Ä|>ñÀÍ ßÀºö HWQ¹–Ì[Hw6Þây$Ü‘€¿0Á$d_܋˭F+„;cŒl;$ßJúëÂVŸðÿÁ=.´ß\h‚´šŽ¾’̲j6ñdÃ|Íl‘°Bµ˜2ä“É[ÜJWÖ细åÅBjJüºÝÜé¾,~Ù÷ð‰h ¾Ô5«­ ÃöÖ>Ól¾ÏdÖ÷¬cs5àW_2oÜÃY˜o ÂŽkçÿˆ´’ü^¶ðÖ¥ñÛûZ->+ˆ®`ûSÄo¹1n+ÊÈû½p}kkã§¾ø§àƒ´ß‡Þ ¹Òµ>ÜÇuâIÒÎKÝwP|2²9-&ýÚº•B M|Ígz,usk$˜…ÉÛ“÷Ò”(ÆMÉ­ngŒÅÉOÙ»Y›zœ¯æFÌÍ3 Á“xw$võ¦ß]¤¶Á£pU;úÓ,¯ÅýÂÁ!œc8À«ÞYH†@ØØÀ€Ý@>µÐ¡}Ï6RkS©ð¦ ÒF&PëçÔàcó©¾õ›ÊÑŰa×–=ªyí績2Û†RqÎ1­C‚ÜÙTm%srçY3iûŠd…$÷ç8[A_ìûF¸îäõçúVV¥q,S 1ä!Ç¥tb.ôíѱ,~Uõ r­ ãïÏÐéô­Z->ÑÕÕ°عÈ>õ-ßc•á»,Y-ä¬ÂA<ú×%koug5µ¬&F;ØôéÖ™kªy1¸‘WqùNîØ¬¥J2:>±(µèw¶š}¤-p-|©à²Ý+Ï¡·jò‹v¬’.{æH ~5ú &M>èÎçíñEŒyœr«þÕ|ægLâ–SêhÍ:p©q—WææÒ‚¹ŸhY <1Àçëš³¥jYè®—NŤ é‚N1ïMÔí&Ò´$¡XMè|¶ÌôCîzW?g4‘Ïj)ÈQÈ_ÿUyÒ” õF±„*FÉ›é2—û8"O›Í•º ÈÜufÓWš(½“â ¸ò»uätâ’k€l‘¤r«–$÷År—ž2‹Ê”iM4N`bÇ÷Jàgiþ/®\y¤Ôiî.Ufç±ÛM$&à\Û" PGœäõ÷õ¨ü;âiü;¤_[ćËòŽì !Á/Áü?^cwñzk[-E­bT}4îC Ýçr2ÓïÐóÅdx[㾡ã ]ínt)í­’32Üý¡aèTÆ>r †Ç±Åu<=zwšZù~× VÔ¥%óò=e'G—Ñ`|¤ôÏzží¼÷UT M¤c½×"¸¸>+h>]:=z[ˆžíÌRI*lH<¾y#€ÆXVö¥ã]^êþËO—7¶1G+(c Ŷ0¤’§ ŒóÔWŒá£Zº6­°û]E‘£`Åf\¨`‡¾éâˆjÚ3©¤å 21û­Œ¨Ò|:ÓÙÇ¥_<‚ÇLV‰îËä’òä)m¤ªíŒýjÕ߀m¿âoj¢)"G-o ÞIöÎÜ''©ã½XøŸ¡h:‡‹ÞÃN²°kkX¼ÂvɲiÌ€l ‚ª@`ÛzcŠóýÀVOñJÏÅ‹fɤDðÇ4÷׋TÁŽMŒì dJ88 b¥¸Õàð&³{§ø‚êY[\³½¤>l_L£3JÃÜ£æÀãŠàp“©Ï9éÙéã3¢ðꯆuk=jÞÝZ\O$¢ÞU‘£òJ/Î\ð_#j¯$Ö¬|Bø”úËÞéðÃ'œ" ³¡+c Kc©5ÒxûÂVÞ.ð¥Î›©Êö²˜Ú&a '®Ò9Ï>Þø­û]e{y-dI_fõu“8÷¦+šñÇŒ.íµ(m4!lKn3Ü;cdøà~5¦"¤(ÇßzRtpTÜæÒ_‹8?é_‹t›Í!íÿ°,ô…—K„Œ’­Îý×$\åŽI\ô yªšÀ?øÅSêÞð©³Õn'ûEΦ—ÎŸ8Ôì@p2?TµmCKÐ.uëÔ¹t»×f&äX…P“UÜ9,@É«²é~ñ¿„ž«¦žh­í–í/ ²Øyÿ®?t`ðGõ„+ÃiDà§[˜ÁÊo×§âqÿõè¼q,ãP6·v”Â[åXŒ¨»”²1Æx;¸í^Kª|>ñ/‰<-œ:¨èÁѬtÙ¡2G”!¦˜·Ч€Ü’À•ïZ‡‚€¤¼»ðÄqÜ Û…–k#äœF¡˜9óýÐF6€8ó¶+kã{Û‹ŸˆÆ×LÖµR'ºÕ×±¥<›58Ú…Wh!†~k±Ör÷la†ÊÕŽmèsð&ká†Ó¬.´Ý2}1äKËÍ6ØjPÇæùB¡(_—,ð:Ö猭¼Cà iéðû\ŽÚØCöHþݧÜA6 Ñ(Ý)Œ)1±^ª~\ôÈ®·Á_ ´Á÷ZOµ½U¯õ 9`¶’9 ¢¨Á "*¨B0ÎOÑÜjZ€uk\ßBÇD†/;JžYf3ÄP ³df8;sÏ<ƒ\ÕÓº=ÈFj>â²KÈpøà¿iqkZÂêRA«éV‘Ïgw¨MÉ\Ë–·d³Ÿ”ñ€8í_<|`ý’àñœ×GD³ûŽ“‰Ÿ¸ó£~þÙ¤rl:pHȯ©¯üOwñWMµ¾ÃžЭlãhm¤µÄò!&ï1¢ÂõÈ'"©øPj+øyu©øjÎÒ;+2-ÁÕžHG ±‚¥¥õ#ƒëIJ ßk{*u©¥QZýõ>xðì·áxfæîÓ@Ô­nîÀ¶¿º½uÄ À…ª‘‚Yxb߆kØtÙ->xËNðÖ¡ °³…¡î!ÇÝÃØœc×"§¼´½ñ†oWXxµy¬ç‚9ÞÙÞ;e}älRF `K@5È|Tøxþ/Õm"ŸYó„QÄÖö3#…Ñ¿y&2c¹Fzk,E5ˆ²r™®ÓÁqÝxÃâž®Ö××±±:Û$ow Œiôdxp", ËgpÏ'ÓxÂîñ>‰UU¡ïßOÇò7'øb,¬tˈ­wYj’…ŠIhÒ P¦DCEÉVÎߥw~Óó.=Æ~µ½áU¼>)»ï«´Þm¨@Íœ3Ø£¥lê·PCQÁ¹2víÆqǽz”pQ©emºeÑŽ&~ÎRµ»³èˆ®|-¦xOìrøvïSÕå.^[©Þ9TnÉÀ^À=;çÖ±üCeá%¶i­é–zmæé¯ü©RAƒ2@¡ˆóÕ ·•NG¥exãg‡~3i66ÿçÕ¦¶Ó¥{‹g1¼N’21Ú ¡+÷×ÔSì2@ïTtnÖ?Çq§Aq{ioq˜¾Ó(ÙvžHú0' ¯p*¶»ðòk)`Ô£mªýšÍ¤(ʱª[1[Õq‚ÌO?Ê®üKñ>®<(m:ÞêÐ\G¦hÚ7†6<³•P²8瓚Ððö¯º†óP}Jk8õÄU˜ƒ€ª[#rO9¬ÜÛV8g^¥)TÛ¥ˆtR| ¶[›½YõIy­ÅÓDxç|Y ð:‘š“MñûxøêÚ¦›>œ…Œ ö{éLƒ;Æ7>µÏø¯â,·zp¼±·„IcÓD ƒ»$œòAÎkͼñ©ý+BÝcÿ]t©(t# ãžžù¢­¦•ÖÈÖw0Ú w+Ç3à“áØLÌéÆk«Ý®FØ9Ú¹?(^Ÿ¯föÞÁî^Yž&Û¶Hö£ {óž•«Ïg¬Ëm5½½ÂOj q¼20Tù‹òà›'Þª×Vlœ]&õ¤„T)’Üä§©<{U­;O’ëÌûÛã+³•x#<ñÐUK„Ù¾mRâÃ/¹’á’Ùc#hù€$ä9'Ò´5Ÿ $Âúí¶£o|#Ûo„¹YO*Üwà‚ %ª%»»ŽšÏ‰õkÍRç}ÄK!\€ÅÁÝ c?­XôvÖÉo¨¸#nöRq³éVõÏŠ×þ ÒÏnûçx³$®å]¥Éú–<ôÜkÆ~½µ°]NçÊš+ˉ"‚7S½‚–>ƒ'½¨»Úú•Jn–w:ïë™Ðéî—Q7Ⱦ¹=?]ÂW±ëO6²¬²YÏm:d9È8ažã­VÑ5ÑðãÂÒBÉ j‘Go3úÊÖˆH>c“ò¨åFRTгu¨èVZ\v÷ZåãÞC5ÌRf~7¡ˆîÁðçò1Dâùísu_ž+˜‹Æ"Ôü[â½Uõe¡r.ÉŒ/–äcäî`|½8Ö|ýž_Æ6éy>¤²Øí£M²rOË‚x#äœñWÏÀk ü>ѵ߈Þ!¸°évúœqB¬ÃÌ'÷SŒî` 9$dbµ¿f_‹~ðTkÅþ­¥ßÝ»Å"^EÀÑ»`™ÉYÿNpk+>G{¯!:J£åz\ÿ üR²µÊè÷’ÙG|mDæ?‘¥Êàí>‚¾ð7üÓÃúEö’¿üE­è/•}©[ÙA‰J3 Ü3ånCÃæù¸ÁÁ¯¥´? ZÛxÃún‹¨]j:DÑÚ{5ýâH’,¾cÌFæP ü Žkµ?ø*í÷ަ°Õt(…Æ™ªÉn÷sn–W·vÙÐíyY]8Ë`Ö¹!‰­ˆ~΂ÕnuG JƒN¤µ>“Yü é¶’h:]þƒáû»˜å¹³HÚ‚×q…O4¹`ƒ ±êñKönð‡ÆOÝ7‰.üAmà)oláI<˜-"”—‘Ñþú¹DšF;Šç9¬4øµ¨|cÔ­tφîž'ñ_Ší£hô«=A­b»‰¤öá¢DÊ™p¿(Ëdë| qáßÙÆ¶:5›xòö ÝivžÃ4…Û‚ ʧ&DHÃ0r`F:ðÖ„ð©M¿{Ôôã%Z|º#寊?´×Æ |=mðM´ ‹­V‚H-VW¿iì! ×§î«6ÒÞ^Y˸ šÊ¾ñ…½Ž…wqûAøØG«x{AmGÃút£ì±ññ¬e ý÷—o »¼ŒáH$¸f¾;𧃼I jzu¥–­u¡¼0ÿjÀn­î%‹âWÌ”1RFHê+[Røë«¾¦uô‰äÖ¦šæïÉŒäyeiÎB&æ8ü£p+¹Qn:;ßR#¤®’·õÜ÷„>>²¹ñjhþ¶ð^™§x[÷rÜDÓYKi!"Ws+nÙ \ó½BŽ•Z}?AÕôŸøKO¿µÒCêçM½›JÓ4öB»c„30ª,áX‘Ó?/ÍzOŠãÓõX¥¶YIµ—ÍHNHRxÈö硯Sð¿Æ«í3Hº²Óµmo©Â°\ ;|ÔÎJ·r3èh'¼w6¥Š…dÔŠ)ø™¨x“À>ðÖ 6x{ÃVòCi°ò¡˜ÊÁåšdS‰'f20È踃ÆÚx.õ6m.fû$‡pùyOjúKáìÍmñcÀºÆ³ÿö%½„W7RÝOjd†dŽaD‡sÌí•U‚Iâ¸oŠ 'ø'¬Xé:äv&îM>ßQ‘­.LöíÀ²•œ(Ø0\…Ö<‡ÁšÍãê± 4Ù¬ã†ÄÇ™/ÚYJ¼Ã€¹X¾p6ã'Jø]u©ÛÅ}©Ë‹98Yq3¨3ü_ãIªÝ]jž$’k6Ê £c’¤u¯_ýŸüO¥xcĶëâM#GÖ †(`“Ró$‹Kw™<Ë¥‰Ö0z•<ǸÖç%£ÎŽyr­6Oêv6pNÖpAg0òAVÜäõËç‘ÀúqMÔ´à ÚGxD!Hçv29Çãí]íBlt_Žž,Ñ|¬Ûê¾Ó5K«1û›ˆE*GP7í8$¤v5Kῃcñ‹Mmja[Å´yííÊÉ4·…±†5Eb\¨b£|§$TÓ”§yÔc7M'sÙ?bŸü5Ò®%ñÇ“ªÿehwPýžI q½À;ÖIv|Î^£¡¯ ý ~"Úø×â6½yá}!tóRšêÊÝ”ŠW ó–*dÉé¿ojôßÙËâ\?>9i|@·gЮÔlç&$S&ÓqŒ Rñ9#&rv“\Wí; ­Ïí¬Ïg}àû¿í $ómü3¨BÊÈ! YЍ2¸Ã¹Ègœ«)]»¯‘ß(raã8Ç®¯©çV·rÝJÒ|Ί£/ÿª½^Ããž»â†ïðÚÂz·‡mü*¡=ÄÌ.|æo5°cHÊ®ƒåP .2MpZf†tÙ¼ÛùöÅ2@ÝÆp=O°®ƒÃt­F’k«{v·.¦3!ÌO,„"AÈĘn?ºzÒ¬T¡bhVqm'¾þ†‡¾Þi/tˆ3>‹{k;F`óe·xãݰí>ž¸ùäW=ªé6þ/ÅÄÑ[°·Rȧ,õîk[\ø‡¹g ú¬s§ˆ„ ¡6òVúEPÎAè•~Q´`u¬måW•ƒ$ñàxR9â’ovg8Ó—ºµó9Ö’}+1“ûålì{ÖŽ±©ohÝ‚‚›'ñ{~•Ÿâ÷–×[Vœé” ª ~מaÚ˜è=kH+êqÎ|©Äé´‰ÈHÖ¬+ÌgÓú×YáCå)¸ÆÑMv…ÁÁý3Ö¼÷B¾eB±æ:ó‘ž•ßxnøZC›À|‚yù€ â”éÙlm‡«vµ ñ>—_Ïj s¹â6ÆrnµÁÎÂÒí"bÞ>¾•Ñx‹Ä_ñ:¾’|´o†°Àè+•‘šå^k­ªÌwbªœl¼ŒëÔ‹Ù›72bÅ‚“ÊÛ2F8ž§ß½dK!•IÎá‡jŠ9ÏÚ–*„`•ÿ=꙾Ñ*Gœ1ý+U sš“¹q#[‹p¤·˜€9È«¶/ÚíPÛ|ŒõaïMÒ4…)æ\È#CŽKrøWP‰&$±+"mço8©“}ŠtÔ¾&c®ä™0±Kžx£Òoå¹I ¡cˆƒµ¸ËJ×Öµ,ahíÊuÛ(`?/c\öŸ'öÍÛ.›Iå ±Æ6¯¥8ÆêìšEÚ%ícNóìÇØÀo'©&£ðýð°¶‹í ‡•Î µ¦ùö—En!/ü% è3×J÷Mk]Uã)!ÊŒñšÍö6£Í}-M»ŸGk¢Xüà0{‘ǬP 楀<±0Üô>¦©D¦Ú!&Òð¶g‘U&’mÙ”©ÎO¥(ÆÃ«'-ÎÁ·,n'Š  ý1Z-½Kø#{iÝÚç1ÉCþk#Ãò²$Ó[q.3Œqô¬íVa¬ÊÓ¨“ ŒžwÚ¡Bòl·W– w[©…º“¼ï©Éê?:£&»sc©ylí ƒ0Æ3]/Št‘¡<ÓX„ì.„…=c`9úr?*ÉñŽÚ€pJŽq‘ÿ뫌‘œ©Í+ßS®ðέ·§Îo– ‡pL YX×Þ®Xø•â°W½ó!‹ýT€6Y°zÇ~5æÔ¦Óî<ëy6¬ Tךì4Ÿ[À“5Ì(™·„dç8ëéš™«èoF«Z£ô3þ GûcøgöSñoˆ®¾#Á}gâ=6ÒÆ´¾KÅ,²›qŸ43ŒÞ¿bìn"Ö-ìï4©…ÍÊ‹ˆÝ`êGÊA@Í1^ñ¥ÅÂIoc(F.®žXwÙ¯Ûïø"'Ä+ÏþÃÂM5ÄÚ_ˆõE2HYâF1È ’z3±õ¯˜Ï0pPö×Ôû¬Ÿñ0öIj¬5TþÔuó0c‚f²Øàãó¬íÅÚN‰q׊o-í£·Éo›æÀ°`98ëȧø«ÄV~²žçWœD°ç{/<çÔòkÆo;[yQ­eˆ¿W\ K¥q!VÁÎqŠùÌâdîô=\f*8H'm_Èíþ/üv7z_Ì —í^ñZ‘˜ÔË@Î:ƒ\_Ĉv¾Ò¥]>YŒpù°î˜<Ì‚ðXÆìµ›ã ÏêwQêœh—vò$–¦ºI;HfáU}}Eqóü9Ñ’xôýn%˜u¸šèùrÜ0v®>| ù†ÑÇ5ìSÃ×sÞ:u)Ù}ÇY ÏŸ©B—ÇÌ’è)7ÒN¥7cfÇ ~ùé´ŒŽõ­flþZ­Ç‡–9g¼ºÌ[¹šo)0@XÀ vœçS\—‡—G³Ö4Ïk¶6†îîfºÓÚæQ P¹£À&6È=zn9­?ø.âMLßÙÚOr!¶[´‰Ê†‘·olr»0½ŽqïZT’ºFti9µ+|Í+)5=K]¸[Ø eUšÊi'e O˜žW÷ySÔô1V4ǪÉ5žŽ58þÉ~ö—wŒÈQ$جQ˜2ºààuçšå ø_¨7Š%·ñµÖ«mq¨Èïo,JbŒ¤H|–,ãIÉÈü;†šUž¯áC†¡¤Ãr¯n^ìù[“7Ì ’r£ œÖSJç£IûIsE˜ß~$Ûx'ö¶ÖüšÇöŒ~%ÒN¯h³ÄrÛG0+#ã§%3“^ñ5ÃešvÛÉÝÐÆäç·×É¿´U×ìíñ'Â_õ¨ôMF-"å4mF[e2\Zé³-Ýäq%ʶ2Aëšú·Â7Ú?‰mà¼/©£ÝÛ‹˜eýÌñ2îWW×™‹¢ÝXµÔôhV½9JIÝtg+ñ·âŧ†¾O$ruMB#‡ÙHÞ·³ÆIrâ$^SðûÁ­­øWF³ñ^—u«.Xé‚á'–(ãpY݉nÖ<ž{÷®“ö£Ðmü5tú¯Ã SOÐoÂ%Æ¥n×ÖV0‰ Ž5;Õ˜°Èä`Šäáø âÏ j)âMVßUŸ_¿‘¢¶ñ=¼krÆ `ÿUoµL1Aòƒ–^ çé`¨¨§Ë{õgó \­Ùö-|kÓ"oê¶^³’k«Këxš[·cnöëË!ÆJ*¬Ž¥Û¸dÖ¤º–Ÿ7ˆ´Ø> k0´oj±½Ö™û|Gpçæ+Œ·äçšüâ?iöº¥”ú½†›ö¹ouwØú‹Ç:Fn爒£^U§üXÔþ#Ä×¥¦‡«jÚykØÄø¶‡|„°`g€Œäz+®u›Ø!V)Z:ÿ_×SмCg¡xwƯ¤øRoí ¤·ÏØŒ«ö\åˆÞ# •’0s qšñÿë—>#ðªi±Å YÃØÂ<Ä>åóH3ƒÀ'нÁù]Ñt“щy'Ú2»Ôxé×½zXz.œo's*•!=bµûΓDšêWzr_,˜¥ŠhyŠ€îÁåJ–t'ØúÖ…Ç‹´85?7JûD2ZÛFoVÞ³ËÆdÆ>PÄ«éÍvß>ê;7·0%™·‚`jUŠF*TùjA`¸>€ç®kÙ¼'û&ø<øî_xMµÔõ›‰Òy.®Tùq”E@ª6¨A€sŽk‹wQ+èd¥ìõ·è|±ñâæ•{áø?³´ÿj3G#MeZG—go;Ååâ[§ÎTm¡éW¼f4 ‰|ø´ZîÆ weœXì\H€0ùN޽{V_ÇŸ ËðûE´ñOŠ¥k-2îS0û+ Ø™ž0v¶ÚÙä€×”O ø‡Æ>2Hü>—WÚmñ1ÚÛ #CtÌÁƒHŒØHÊä #±ÅrJ*I*OC¶8¨?vß×Îç¾êÞ4¿ñ—Äý"Ç\°ƒL“W>{kO:A ¤ …aiÁË/!˜G·¸Î2+WWðË[_ÒÅëZN…4•²„¥È…\ÈHlFÝ’71-Æ1Šòß…õ]OÆ“_ë:„Ú§ö‘[‹<Ý,cz‚V•K`ü c<èÞ Ôc¾Õìµaº³šÎêI`2`<·˜à2¨Á#Œú î…[[rjsÎ|ÏOÀȰ&N»Òïî,.­ã1¤Ö¸iÔ9ûààuRqÆ{k¦‡T¿½·‚ßYëâ/›$Œ OÈû«ŽÄçžÉÑlÄúÃÌÖšy—Ëšw;|ÀÒ3gaÝîXät?EÑÚ%mNêáÚÆÙÛÊVžE#q'V8Ý…=9úWN©s$[w²zŒÕ|Aª[x¢[»/kw„‡Ï´sÛü§h`¨ Æ3ÈäòkÍ|yñîÓI¿Õ6ê1É,E<ˆåX+´ç$ã‘Ó<×¢ü@k{MßþT‰î§’QsåK´O0„°ÄyÉFÜúŠøçàg왯~Ñ"Ox¶úãJ€\im-‘Iîî]¨¡d+å nÎÁäöòjaÞ"«RzZýÏ–ÍéÖ«YGV­¢è\øÍ®ð]µî­š`šx'i„H^À!Âdໟ”àg=°}›ÀZ‚éÑY'†!¸šÛJ³YíÞ`Ê ·R2ÌçÆ~•æþ3ý ñö…à>Ó_ñ.¥xŵfžVt»¤%Ûv# ò€J®FGý¥«è yý•qq¥f$Še-±š26…ïÏøâ¨ ½KN¶k¦žÐ\ Oì2#/Çbë]nŸ6·=¥$­vtÿµkÿ‹:ܾðtwO 7MÁd=7“–#ØWoâ?€kà¹#½ñ£o©J¬Œöûž’/ vç÷ g‚On•à~4ûÃûq¨kú”:4h‹b²øoÄÖZÎ¥rvÀ%Õc(‹ƒ“´9ÜFFÅaz}S*rRš´|—æ{œ:ÜpݤHª@óJ!9zþuÖøÄ67zß—r·onF&òg`=Á>¾ÕóÏ>&\Ù¥Ýö°Ñ´{–Þ"éæ¹<G@2ORpz 蹬ê·ËqàmJÆXä–}=ì$”;Pa¾\“÷½HëDé´îuSÌè×÷-£ìŽ×ö³ø—àoƒ ûıkþ Õ •4_ Á4’Ü^^1>[Ïå°òÔ ¹àc=kÀþü3Ó~xE_Ûµ¿Œ5Kf1ùîV(ÏÍ2«JÇå:²cï‚ÿ>~Ðþ.øùyam§k:4É*êsE5üÒ—Êá†, ù*Aåx#8÷oŒ^Ð>'Á4Þðì¶¾!Ñž(m5ƒ.'·írðÈXeW;†d`ž´éªzÞ瘥QJQ¡MÛ»üÿ«ž+ñ¿O´_ººÔ®MíýåºZèúRÜc.ø&W‘ʼn’«×ŠþËþÖ>]j~1¼¿‡Y×%u619’+0 *Êû×$¡Šç0Àêk¯ºÑ­ô]ISÄ;u ­>=÷%B‘ PD‡¹ÜFâäž•èšMíž·jÎãÌíϙŴ²°Æìzq޼óZû¯Kh8S•ÔjÞþ}YóW¿ ií$ðéEƲ±Ã}¨\[9Ýl¡ðÂyP`1W ~¢½SÂÍne×d´ò¬¬“ÊòMédlÎ냅zõ®«Oø¦øFÉcðFŸ¥XǬ±Û­²­«:¸p%‰q¹I`1MGoáÝoâÄ[Ið]Œw2µ‘Õµ$³hÄ‘K4Ì [£ ¨+G*¿»ÆM|ªö¹´b°û¥®¥=ǃ´V"êîàÉö(¡âx•ƒyíÎ0\†Ü9ùª=cÄ‘Ü5¤VO©ó¼ÌmØ‚WràsŽ„Œ×˜éÚV±gâ»è¯í‹ø}âsl—7iu?Îs±äBQåRÑ¡*1Ž¢¶4ˆ6ZÞ›ý—ðëK¾$·&ÆÎiÚΩTowó€cÎÒ1Î95QÚÌéöªjýNÛMÑïuû}Eu}Cdš|+vÖòD7,Fž¨Veë“Á§-”šõ•ÃØ[Í,vÃ{GÃIž +tàóøV×…¾'ë:ì^gм'ªiœÌ‹4R¡#°,U±œóŒS5 wš´w1êmf Jc2lò¤RËt9Í)'ñD”¹ô½ÇøWÂÚ¾˜,5=FâÆeF [µÃ]\uvqµp9,{t¬k‹Ûk,.ç½’ûPK…±ŠÝ-€óAÉ-æž[V]¼šU´Ú|bñcy#—Ždù¾ŒØc†#ŒW#âïiº—Ä94ÏÚÀo´ÔŠÏíhÉò£jã £#®y沄TVQÓ£Q½võÿ€m_½…Õð—U™·É'¾éK9~1’xÇJó?ˆ¿µo‡zôÚ\ñ4vÞ}´9w‘ÉÉlŒãœzuÍnëP\»‹f†ÖIÝDˆî–3n\¡89 uíQ|VÕ#Ö|›ñ7U6ú3_@±’ÑZ­´ÅˆŒ´î¤ìd«Ç8¨”¬ï©ÉÀ}eÚšØùÿö‹ñ,Ÿnm¯µ³s§ÝÏ¥HÎ Ã`Y™TNqɯ˜>+üHñ­ºIk%Ôv¶öá¡6¥¼‰€ì9DZdWÞ |‰¼DO¢øWÑê:U´ËÓëÖqKy3±¾¦ IœäIÙœ]N¼oî«£› ”JnÎëÎÊß›o{8E)Ncäóò8áºäT÷PO¤ÛHÞ°IRO$¶ùrxàõÝ•úW'èEY\󱘷ƒ\É_·õc;ÂÞ¹¶Ð– ‹ýZ}ræ)¤ÚF|Ù{!<r;€;Ñýq¥èº ïŒüO©ßK-Ô²Cg({UÒå£F3µ‹+1ÞxË`sZš'--|A3øºÚ%!Š#¡uÎ@ê#ò©|l–Úþ’ʳ›½>ú0V+‘’­ŸNÄVÄÕäæp³ìy2ÏW'ï©G]Òôûf½‹BÒ&·/,9++aIcœè[' ­=/ìvˆ#U¸´Xåt?:ðJƒžÙ#'Ò«ü;¼‚Æ(¬äÕàÕ.  $™T}Õ<ó·s×֟∭®´ã{¡Ù@×Oû°®ÛCH@{ã¶*–XØ{JLç­šÓšÔåìþ[êðê7ÃZËi+ KxwîR­–;ƾ }s^a«|“áçüSuð¦Îúú÷[»kÈ­dap¥@cPÜ…  IÉÏ'5ÕËã«ßk eâKï&زumîÙùI휞O¥Z°ø™jom­uWm) Œ¶÷2¶|Ђgn23žÿyðU•NS(B•[I­Ï±ý˜¾"|<ñh7‹OŽÚx£Ô¡U›û@"Ë‚¹U€Ì Úp9ë^áá»;Í.?³ÞÚ²Ó¢U1$jÁCp¡Êž 9#=px¦ÁñK¹¸µ±:…ÝÕÜè¶ñM36Ø]Õ¬y9\ŒŒ}Þ‡­tÚµ^+»ïÚÛÝ$ˆàÍgØTíi”aHÁúcñ¯v2º÷ãf{”!4l–¾„~:ð^¥¢éÒM¨A·²Ä(¢@­4€—köIéžõÅšßQ™ïœuAµÆìí!„žpk1ü9sájúßÄ7÷—»3OJLyÏP®ÙP·;…j'‰Dš{ÏçXH¸ØV0‹±\cq$ç'®)QæÕ=Nê3”—¼ŠWÓÝ"ÜyþT2\"Èv®&r¸QÎô®«á׃­üa¨»¥ÄvÚMŒ =ÜÚ†ÜFª@fμp;ãïX>Њu3­ý¬Wϵ"IÔ•œ3`®üá02ß09è1SjWz–ƒ§_i~z½º [‘o,äð÷†kiFUah»3IFSZ|SmÇVX|pf‹s66V†xÚ uÀêNs\𼸺¸–Y"ÜÌ2í±F;t€:Q¡øÃFžêÿN°Dþd­ew¿ ‘Øœ1ú*âK o²‚Ä«¡ú·|ÿ…iErÅG{ Š- £ì7si î ÀüÀsŒg¯¥ÝéÁÖ=jÊâîò¯òå9Æ “’~R öëY bÖ7"€Ñ¸©;•G½héZ°’ /ìüĸȅ™x|6Üžyâµz ®m)^Û¬±´DÈaít?#ŽÃ 棗W¸¹Ônd¸’=“3!TŽ0} à€8Àç©®”ͧ_öÔŽÎq8…‘HRzç!yêGcX·š ˆÓ­õÜW²¬Æ5’2› .ŒN´”•ïbš±©év~#ÒŒwCz­‚ðË‘8èpÙž„Õ½ú]6ÑL÷ÑIj­ Q¬…#Ž2A*êzdÿj_é²XN–Ú¬ûàB²BÒ•SŽß' {ñ×­cxbÝ×M²M¶FÿUö†¸*Iã,üœààÓ‹»ÔN);­Ïɶ²œ+4»ÙÉ®gÅz½ÔÍ•|²4ÃçIýÞŸ^õØM¡Ykz[Ýè×3,û‚²³pr:Ú¸ø H,ÍœsÆ‘œ¹y73“è;W±Ì ÏÉg öÐÅðæ£½ÕûjÑIuqm%µ¨gc²å°±Êq÷örB #Òµ4ë¹íµ³ìRC!E4r.<«ÐÖ&»V‰%û9 ¹N2Ê}r:bµ´F×J²XžÞ{Q®Ì¯w$¤æ 1å¬gŒ“–.rzÆkxËT̢ϨõÿÚÇB¿ø}£Á®érjzÎ…ŠÙ¤e>`ÁœŠÐälñçÄ·zŸü;©i¾Òü'esçî#¼Yõ_¸82ÎbŠ2¥T|¹-»Œáü>Ö`mJÉlt 5JY Gl~Unä ƒ“ƒëU<[âÛ߉ž1šoÀ–¶V~o—c 2G@EÆN÷9ÅrÊœa;Åk¹Ñ*ŽjîÆÿÃoÚóâV—{á/_,—6ãN·…J‹€Üew3ÀïÅzE÷À†ømwñKYÑäÒÕm‡ˆôË 5 {ßí9 #A»HÈÒy™^:kç_ [‹_,Ö!ÜÇʃÁü«ìÏø'çÃm#öøƒoñ_KÑ£Ðí,|­D3ywÙM‚+ŒCæ1nq´•Á,Hê’²öJë}7Føu,\”[ÕQXèþ-ál|³Ò4SH-õ;û×Suz…‘£ò£"£Èá"’&ÕÈ%Ô¿¿g‘ðãá8ŠúàÚø¢-&óO´¼š)'{+ë˜ñö¹aþ;‚6nÉ*˜Ú¸ såÞø áï‚>8>ñÝGÅwÖËý‹¢[[ù6l6d«Þ tù[`¹Š6>P2ÌMn|&ý²äñ'Æ wMÔ4­WG»Ñ¥‘$žìpghüÆ1ç*ˆK$`ƒÃŸºsó™{u(îþ^^gÜPÃsÒiè~"~Ð_³7‰¾üuÞXx‚óU­¶Ÿ4öŒg×6¢ù“@wš7ù…ˆ$€7°PÀרü.ýœôHÿdßx“âm³Mý™©™-/ pÌËkå%¢\m*Öæiп”Ûšuä`~¿ýµ¼3¯þÕ?4 ü:ŸÄWÆXh¡ÑSkáç>l<·H¥ÖF…ÄaQÁ›Ì îPqOö ý†¾%|-ý›¼?ðÛögøu­ø‡ÃñnšK–¸ˆËÜ“ïÙÁ$ˆ  ‹3`*ªçœtáñvÂ¥SI½>î¾GÊâ0VsSØüÁÐô;ËMTi÷1¼×2*¬· p9öäÖ»j ¢ø‚8ïìÚêÎÀ>ë\ñ¥¦µðÛÆ:Æ—ã;K‹sJ¿šÛPµ™ÐÍmu•–'1³.å}ÀíbÏ5￱Ïì«þÔž2Ñ[XŠmHu¹vÔì K¹žH€Ì*$uDlº¹fÜ)ùIeÇ¢Ú²ô90”§U¨Rzœ‹¿kk¿tÏ]ë¶¥êk=µ“Y$"(Ä%Tù d²° «1,pyÝ÷Œu •TÖ.&šÖÖ1 žé , ×ËPOʹ猚úWþ ðsá÷Âé¼)ào€ÇíúµŽ=ïŠ5Ë”ßu¨]Êéä">0±ª‹ƒå INù'å{8µ ê±Úx¦ÎáRx–â0剉 ë‚x;[ƒƒÇN™å áVò‚ë÷øªÕéKÙÖåó: A}ªjÑÝé–Bó/¾hú1×ÐWOªøfò+9nímã°I±‹Ž"$Ÿ‘Iôéô®s@ñUö…«Ã{¤«,ví½Qœð¿Îø†÷ÇóêO'É!e¶1ˆ= Á95¼œ¯¦Ç"–¥™<º^quö>ï @#oSJ›À~;ŸáLj ¿ÓçhnV6–¶Êis/‘šW$¢Œw?Ò¹«=I•Rå^,®ÄeWÞºí?IM^+†êÞêkYh´1Ã{ó×c;â%ŠGs¶Ë¥ÚòJ7|Ÿñ¬;§mI#I\/äBà¯JðÛO ú$ð»ì_3œpG¿=}«ƒøáé|%®4s3Io7Ï»H >½3Ú¦œ•ùXñ8~O}|,nᄺ†eÔ¤ùÕs¯ñzRCá›—¶Ý qGZ‡J3]\¡³'txÚI®‚þi¯ †S±C#*“ŒúšÑ»=Y̹m±‰m¦ˆ®3©J£nNg'Þ¶lõ)n®%°Ð€IP|ò±ÂÆ=±Ö³¬ô»dÒÍÔóÇ$§ «¶«v2ù¬¾Tj:ÇúŠRw9ò´‘›sd¯¨5yd¸f—;c\³úë¯ðf‹‚ʱÄmL„dHÀì¥>ÂHà'a€Ütõ&§ñˆ­b°hÑ-Ôä|Ø$~G½J©ukª\¯™È¿¯YŦi¿k ®eÀsÇ>¸ôÅr¾ ·7’•ÝÎÔ=yÇò©¢f–GYŽ"’=»7|¢¦Òt”¼CÈfu ²6¯©¬ùZgJ©Î´E;=$ÞÎò["¿SŽM3Äg“¯ÌUzç¯E>†º ‰î4ëqš7-¶2€e=뜖ͯn¤Šf‘šVùÈ9*sœûn*’ò$ÒM"he‘œ÷Ú1l÷¨|áyu;ü±Gn¦G-ótôúÖöDZD>T&Il¤çŽÿE§êëc¨G ¢€²¶Ù7qß]ë`J.ÜïbçĨ–ámnÖ'Xæ¶Nç;rA#°ä×7áFëìÏl\laHå{W£êúJëzDP3Y²÷¯.’öMPxâh›7\w¢“ç^eb§5Ù”¤³m"úhä`ZSŸ˜×Yá´ûL0B®Äg xÏ5‰ãG†óìZ‚¦Æ@Lt…tÞ¹·´Ó!ûT…‚¥ˆ`ñÅi'}Lè­\^üc&â[‚ŽS8 sŸL×ë/üâ½Åæ­ñÀº„ƒÉšÎÛÄv193+{€¿ðnqês_’–šÄ+â[¦*%hü¶1ôb½ä+îoø#׈®5ÛO@²ðÄQßëzmõ‘Fb#˜yi1WÇ8ÿGÏä}kƒ0ìE E£ßÉ1_U¨üϯÿk¿¾*ø¡ûTé¾ýžõµ°¸Ò§ŽÓ_YƒFDQ2ÊþKò I:íÆN:ŒÓõüU¿°ðÍ£ 7Ä.“Ùê6÷C˶‘A$ 0¦DT*£¡FyÚÖÿe­_Ä¿/|O¨C ꚉ×SÙ)ä‰Y”mmÙCµŽXr@8¯Wð7Á›?²¦¤,4½*Ê(­ µµ„ˆ«´·ñ`~=kÁÃòaiF?yÙŠ­_^ðM/Àä~xÛEšÅ[âªê¶K®´—©¥^»Ê…PmP€ ¤Nà6rO^•ÒëðüEðm´Þ(—É¿²€][ÚN>Ï-ʲ–z€7Š»ã =޳§Øh×zmãÇ;L%o5cXÊ´#€Y·’ÄÜJÞñ,6Út:-ö¯ éò%’™/[Ÿ”Çå¶ì ˜dýÖ§Ò±ö—iÇC¶ž¯+H¯WÃs‹Ž[}@¶Ö.-~Ó—1ÅÀËîݸ€v ÇqÍt^ñ¼º¤Ú”¶öú\…&¶¾Û›™QÔmåH,¾Õ“âÙ´_øPÔ4'¹ŠËQθˆ ;Eá01ÐgZ|AÓþx N¶0éÊÊ$ èËMÇË ÏBYxcÁž<²¶Õ#™£x®ãš*åÇï<ÄNÝìká‰ß´þ“oã©¿á’öÝädÝe*µÀü»Š‘œ(#ÛŸû;5¾‰ûWÜëšx·¿û4rOe+\¼¯nbv]Þ›› Nx¯C S„”úœ°§Í)+¿/éŸIj¾&ñ4¿´—ˆBjÚm×l-ìáÒà“t¿o¸X™"·`NCJ¦4ÛØìÚO+ÝÁö¶íDŽ9$Ärª“† gôÍt6ROâ˜5ë[Ö’óPÓ|»­VÂ'²V ¬†)ü° l¦¸øŽ]_Ä+iá ÖÖ»[©»SßfŒƒï–cÉÆ®œ=à’]O£§ïÅGšö1~ «hÞ#žâû3[¹Š[fýæÜ`ü¬sž¿^k{Â0­–‰ww«É¬²Â¢Ù¥Ü#Gç9 “•ãßxÊÒÃÁ>%ºø•s¨Ç¢xvÕ­ ·²û^nîÊí~ç<Ž #½lIã»ü)Ò4¯ÚèÞÕµ]:Î]kW¼™]"· ;ÚÇ×ËmùÜÙì®Þgku1Žûu9?ø£Ä1|FÓ5ø–ãK×¥Cn$·coÊÇí!•· N;×Qâ?~?ø¡¦Á§üJÔu84).V;•Òtù#¹¾"PdYä@Wk(tÛCž¼Ve–—…«A.¥ue óZË=„³F&‚エC•Ü3‚ÝÔþÎ:n•.ut“þ{¤m°9*épP¹$d·|Ñ:ê%tt)Ôæ²ðÞ½ [À§ü!¢ÛÛø[ýU¥–²"X⌱Q0_jð9 c·_ÄŸ ìü¢Zjwòiv‘xrÆHà…Ò9K6ùZá€Ë.À8Sdç ø£ûFi¿4ùLJ mjòÝ™gŠ›Ë*pÁˆã#œóÚ²u¿¶»§Mÿ FŠªÚ½•«ÝÃpþdV»7›«ƒ¼•P8Ö¹éû?z=QVŒ¥}ß—ôÙÍøOH¹Ö|Mcsá{›™¦žËÌŽâÆ6å†fþî:¯ÕxcPÔ<+¢ÜÝø®¿²ûY–ÇN,ÂIX(_,J˴°àx®áÿ‡/üik¨Má}=4Ýk¨šX,HU°•â]¬\®ãžyÇJï!Õ¿áCÍ‘w}a|4Í<­ÇrÂ9&'ppv2‚62Àäô£•-J•IK݃üÉdøà…±Þ›í RŽv‚úØXÊ.÷8ÊÇûÌ€ØÛœéX>f¹ðT¿ÚvörAuu0Xn oµ,lNÕØF‚l˘8æ«ÁàÝcÆ^ xŠùdÔ-Ûd0[m6Æ›÷£–8 g9$ž®WÒo2åıÅË’åPÈèA¨a“¸ ”iÅÆ­f²ø·MIuk…RñAþª5=áqóŸJÚÉJèIÅ+;ü`ÔÞêhΣuow«Må\Ïj<¨§PÅÖ!ªž™ç“\jh?ðšÝkv—q{%£Ùn~Ñá‰+1"xV €=+b†^"ñ¼¤èÎúmŠG&›’,vîáƒn—oÌäd‘œ‚¶kÏ¿með§ìQð¾k­1å·ñßÄKä€_ZIüæ`’\y MÀr{ó\µkBŠŽæª—µ‹’^½ÜéŸ4_¼Ð|W§O{=ÍÛ"H®¸f…Ô¬mç îÉs€¸ ž4åÓo.5ëd†fµ¾WŒù{‚v£–…“ñ^yð×ट4Ý#Sðέâ/&ªêý󤎒€ˆ˜-äã rGbº©~&ÞÅ©5•¬Okio vÔfBÞS È,ÅyÁàò3]­;k¹Å*ª¤—ùþ§-ñçö|³ø‰ã2~/-‡Œ4M/I¸²‡H’È{id;–v“ö„ …e~æ¼óáOìðŸÅîƒ{á_‡¶>Ö<)ª>¥›[¼÷âlŸõÏœ ÌW­z>ñÆúnŽ/¼i [km,¤)Ñåòîøn7C.`q÷[ŸNÕÎüiý¹u߇^Ô.´ë6÷Ï|Ö¶×ú”m•¤m™ùƒª­€kžÒ|º£_eJ´”ª¸»u{üŽ÷ö—øßàÙ÷Â’ÙxòÞ×RÔ/¢bšbFwOþÔ…FQI=xö¯9ýŽþ0j>&ø;#øÆv²F×6¢x£14d²Æži&HÔFHùÉëŠøŠ[~Ó~;š_Á}­ë.§‘¶Ãä?(Æ~èçâ¾×ý•ÿd'áÖ„Ðê×úÕî·s4ŧ´½؈ƒ†8ÁÇÞÍuJ’Œ|Äñð«S’=]YðÏŒ5ë¯Y¶¹¦jSJg{©!ht¶Ê>QÏp2I'×sÆZ›FŸV·¹ívçrH;ÑC/8Ž=°q\Žh5íCJé–¶W–r¼v—S»}¢xváK®àp}Þ¤ý+ºñ64h4Éà¿õ7‘¢XÙ"³9Áå[#¡=}ªy’B5TeïjÎvÉ%>d²ËmaÞy 2c½ÎzôúUŸ x‚ÏÁz-ܺ½…ë:Ñ®™E»™åˆ.ìˆÈ !O'Š×³¿šÒd¶Óm¡»¿œ„|‚=¯œŽzqÉôÏzמ};DÓî.¾$jFöùÉXH;6è7×À$žJâÄbV>Ñþ ì­xÓv{ž]­ø¾o¢$?oѾÜìiñ³Ir6p2‹¶OR~\u­_…_³ÿˆ~_ërü,×*†Æ;¨’ز²ÇºER"Œ¨Q»#“ÈêsW|/ïB/.¬ZHž´K¦wU1ù ¸)]ßxt9¯8ý¨?j[o…žÕ Õ|;âK‰íI…mź<ã<—4îÚG—»ð£‘ÉÛ¨åMsMýûþ%‰v¾‡ÃÏ{ñR¸¶XȉæóG3¬LûöÁú×uwðWNÖ4[y¬ô>ÛM6ÓìLj˜DHËÛè} Ïç6?Ùþ5𾋪xÓH:‡›§Å|`Ôt“Ë]lb"Æ0à³ðkÓ<-ñ*-QáMVÕíÒ †Ý™DRTŽ3ëØæ°­í)­uG$å:–•;Yõ¸ßø¯ÅÚoÂCY±‚ÊÖÓÚ_˜µ¹žîæo“eµ´|«¹Ôd ãæÐÓPžo½î¡b×1O{qo©ZùFK‰®U¶¼b2Š3´pz/ülÑ5/êš_tKBðUœm›½.V†éüÍ2…%€ìÃf³üoñÏáÌ_³®ãφÚÅýö®ê±hV6—LñA5Ð.A$,HBgiÌqܺrN+B¥ˆ•¨·uåk_#uüCyà .yõ=}VäÅÒÍ‘¬ðZò3`DA[v$’O9¯,ý©t_ümÑtÏ iz—¤húƳ§\™¯/ÊjÛܥØãUo-1ÒÌs– × Z,:½¨ºñ%œzn¼’û4·¾î!€dAÝ=ÏjÓO ÝGruI§µÝÌ~uÅÃ3 Ôu"L!{õÀ늤´¼ŽÕVVQƒµúÚçaà iž¼ag`—0±X݈Y8˃´f¸¿ÚâÅ·ÁíìÙ&Ö¯ yììY‹Fˆ¬‘ÂŒª@ûÄcÖªXêž Ë>ƒl‘ë“DzKëˆd•%´GfȈ2Ƈ£`ŒŒóÅY¸Ñ4ý{T°Ôµ­4Û¹p·÷“Äó¯–¯˜É\–ùs€Fyp¢Ü®Þ„U© ¨+¿™Èøkľ0:Ÿs¨XÜ­Ç”gº³¶ÕevÁÝä*{ŸË5CÄtÍH¼ÿ„ÍSJÒìîÚîâò)-å»Üà¬i!ùyè@ÏqšïõÚxF;¥M*]Qà&0štRwÒà*ärW$®y5›áj‘ø¦ôb]Næã|ÿflª>Ѳ/˜UE :ä“Öš§6ÝÕ„ªB1MÉ9vÕÃøÏJñχ,$ðeÞ›¡xzk™bŠöÚÝÑ£,X[2 !Xç5ÏøãZ›Ã^²ƒý±5’+5ÏöƒO Qy›c9Þ8†\7*p3šé¦^×ÂsxOðíë;}šÈìÏ….71_4mÚ|¼º¯x#Jñæ‰oqe¬h0ËsA}w2HæCó$¨‹$gïôÏxûÀú†£ê·Z°dSv©nÏåÄäóoUª®Á=DŒÛêrÆTTÒQ÷¾kç±Ä2J&‰ÖÝQf!~`rĉ''…O¦j]ÜÎPE ÚX’_3æ NSž´›"µžQ<Žª„tôǦ+ž¾×¢ÓoŸû/{³1IÝØÈ¼Ž¨'œ `b¼üUdä©£ç³Ìj¥QQŠÖÄݼº§‰dŽÆîÙ‘Ê•y‡ñóp9Ú@ŠÌ“Äø_6ÒG#ÜYª˜`Iˆ]Íœ•ŽåZ>9ñ$6:ΓehmãºÕq廡û½ñÎrG=:ö¯1ø—ðÞ_k_iWÒ[ÅÙYmÞ`¯ Áå¾G¨Æ)QÍãéÔW]ÏŠ•[ÉßsoáÞ¥s7ÄÙ.ú;[+gYJÛ ³OÍžØ9SÇ9®›Åÿ®5k«–ðå¾±²ÑŒQ}ž&’&Û‚äñÓ-œ¯\ö®cö_µÐ Óükkâ›ÿíxF«gÖÁ$e™ ×Boç¨ÇZôMcà¯á¿Ù·€dÔ&û>–fK+©ÒÞæ0Nìîɇ ŽÙÁ<Ò¥9Z‹µ¾Gu<zÔ½²W¿O$yWФ´·Ó¯"ñƒÜÞLö±ê&hÝ?vq©ÈÁÈÁàŒñÍs^%ð}·ŠW~¹¼óôèžôéÌûp%*!~‚° sŒqéUüIûPk,ŸEÕ¼>ÖÚœk±ŠHGÚ#Ã[’rN=@ªßüwcðÓFÓu]R —7jš…Ìq,ÒDJ7”v®9@=Ü9âŠ+ûu)»\œ§ ê ³–ðˆmí&û5ð”Ík¨}¢µîWŒp2»2Ø\ç¾ìv¯®< â}F×ÁöÚ­íå¤ò@7!þlJ üÄå¸'æ¾KøI¦é^<ñcÚëSK§kbidŽÞãK{u–ܧ ŽNìå‡9¯º¾|3µø¤º|@K丞5,pùñˆ ¤œ’ È8Ðú×Ð×j6jçÜṜT–§ «\Áqkæ°¸¼e_8¯—½¤ã.¥²p2@Ç;p)u-Ú}®œÚýäú…œrC}d‹1Ca”œ2ôÎpH$pFG[ñ;H°ûdK=…¢¶òâ‡uE2#$¯N¸Á9íY:Q¶ éÍ{©H×UV/”¬L•¢p@Î}kJZûÚÒW¶†o‰4«¯Ln4`D±Ã+éö¨"¶·å>‡ËTZ‹cªêð.½-¾ž._É–iËŠÝÉÉè8ÎzV¨êþ3ßøOQhcÔWr¨vGòœnÚS< ޹éTõ¿¥Ý…ÝÄŽ«~¹‘bFaö÷ }0kiSvÑ‹–£Ò $v^:Ñôÿ x~Ù´ ˜gMCl°»N€º… 3 œd”ŸSÍyÅýÔSÏ…ˆM %‚ÿ3Üô¬q¢:j3Ízn¼Ú°3ƒ¿¸#?ÝœzU«}6;dGŽA¾%åË–9èO¿LÕPƒ¦¬ÝÊ»‡º[’uóR}€¤m»år €=GZÐ}Ml4ûènm’IobQù F§=à©pHâ¹Ü%Åüaä™cf d*YT­´rG°æ­‰æH^7*Ñ9§zƒôõ­mfZ\ÊïrfÕ…Ó¥‰YVü¸ÒéíÏAÀ œƒ×Þ§²Õ¦Õ ’T‚ÖÎ3¤‘D»‰q¿'Ÿ|]J$£Å£[O-¼ œ„iB¨=NÚ£=IÀõªŠ«t¯’Ž1›©=KާM,j°@-lc·T…",’a_jíglòKwçò®yôÏìSq{XÔ®Ã+¯Ðú~•cJ°_4-Ü»"þ)æÙîGR+;ÅV’Yêe|ÿ8džܧ!²8Î}ˆ¨[ÙemOÉ?Ë æy-Ë4rÄDCsŸlV–ƒâÚ{MI|—™JFуéøVðôÞÔ¤¸,¨2C’E<Vv¿ú\R[ü»S!”}á×Þ½gi¿Só SQ¦»¢;­6×MñƒÈÄlÅÕÿJ¬úÙ[ï6[7û?!H@§5¾š+êú"¤ÎRâR$Ý@ê3\½¢ß&«åÝDÍLQY‡ ¨í[AßÝêŽ*°tÝÖÌíü«Iy®iãN‚úÝ ‘A’I¦åGû¹Ï㯴£ñzhsÞÛYÛ^E<®"¾bÊ­î!ãÉäW¡jZ´*òü uK‹¦ $‘éðKs S÷r±+68ÈÁè3_Sx;þ Çã?ˆ c¶ÒnÐêe×U{k«gÓÊÊñ‘²iå%™P±Ÿ˜äQRÐ\ÒØ¨FU‰¶x‹þKàqe¨Ï¨ZDzûíþÍ!}˜çnqÎ8äq_WÁ'.õmÄ^?›EÑ¥Õî® Òô»&•.$žid$n W‰s4ŸxF«·žE„ðG­rò}2o‰Þ;²»´IÎýB±žK’¨Ë”[©~Eó ;rÙõ?†?dŸü6Ó®¼!¥i6²ZkZ’êw°ÞÞÍtd¹0¥°2d ³Ê ¸|€¿1îkžX¨Fœ©§vôícÚ˰u)ÏÚI[²gÎ_¿j¯ˆ´¾*ÙµÄ^}Ãñ}‡M±¹i[×.Ö—•.e2<§‡TE* }¹àŸ…¶ÿþiš7‡·7„ínÚ{xæ¶ŽÑüH¬ÂiÔ\ÈY¾Ê.0^US¸&sÉ¿ ¼+ðWYŠOhž±¼Ó¬Ú+›}>µ¦¶‰†ï,&$ù–Ìjšê|añƒÄß4k[\ÚŨ³‚Dûב;Ár¨*ÜÎrx5âÕqäPt}"­RPQ•¿®È鼬i¿³ö€bÓ¢µÔä„}¢æ;Œ[)ÜçËOC)ÞÀç½Yý¥¿iŸøwᎽgðKB‰¼Rú ‡ÃÖ2¬ñ_ݘءWm¡612;¹U3Ó¸+OùÞµYl´é¦³¸/$3HÊ$' «¤†å¦äçŒ f¹1¬È¾(Ò¬uÙ®ìµ_êWo ÛLà™­ Tón¶Äd³‚hëŠÍÐwìÞæŒZ³³>ñ·ü·âE„6^"ø¯âÿxbæ–úòëR½š÷ʉ£7<ΊžuIJ?ú¥9fv}ümoñ¯í!¡è:æáÿ]ø¦/hžeÓo–Îæÿ\¹I§½‘1´y¬(BÇ"! ¸¯ÓOÛââûWý›¾"‹Kû˜î¼f5[{Ñq²->õÌGpK²E(;T€|Ò™=¿'|?û1ø÷ã%å½§Àßjší¥´lÑIao1*uî&t‰€ €7äzWn9ÆTªè—Èð1T¾©Sšïýmc3KÕ&¹kP%güùT+ærÄgøŽMojC=Œ“êë ÆÌ‘‚”P $žÀc?…Rñ·Ã}CàTSÙ|dµñ…¼D$H ·½±k{gfŠ-ÞL2¶Ò;÷ô8öø&·ìé¨~Пô½{_‰¯¼áIâÔõ‘ÇÙµ'ÚÚÕeb·KgŽ0ÃWlyR½ô]M(ÿ´ÉF]NSã7ì»âOÙcá7ƒ<]ñþÕtÇâc§ &S%£"o‰nѱåI*n‘WŸ•Hb­…=?ìƒûjÿ¶…Íüÿu]#OÒ4{yy«\sknUŽ DÙÞÿ9Îp¡ äWé×ímâ/ü:±ÕÓÆ–¾¾Öm-¡¸¸²ŽöÚ5’TB™ ×¢2Él)l|Ý,ê- zv§ÙÇ6©såßÝiÚ<‰ÂÙfò,¢_1£W%U‰'ý¬Žxеc%§5÷ÿ€uÃ,„nÛ÷?ò?8>&Áþ-\Ä"ðÿü Ú”ÿw$š¬Ö;Ûœ=³À#©ïÛ­púïü?âÿÃÿXK¨øONÔ-îî͵µÆ«Ãz·R²3„A/”îvFí…@,2+õ†çÁ~*Óot›¯.¢tÝb=ö–ò¢X™É›XÅSi’w­PñŸŠ5_ ›iV¾Ôô;o&1f\Û]U|ÂòF òNXö©UëB?×K+£6¥¿Àù[þ ùûØ| ðì÷ÿ´‡Þ×ÇwײXéêàÜÉj“Û©†%Hwª»þô–`[WmâOÚgá×ÁjûÂÿ¼W†õÜ"DºÒyOq–„`ð˜n]ÄI={&—ñ4›K¹õ=­m x¬¾Û,þZ‰î$1+8ä%òTt’+/⯄~'0»ñÆŸ¦kU¥±€jæ´·@6uá¼Æ$žGaŽyc%Ìå8ÿ^G©,#„Tb¯øþÝß´‡Ã¯‹~¾ðÏÀý^ëÅ,¼½²6VV‘uqqs7Ï8 fRªÉò‚H=³šó}kþ «ñ†üÅx Äq_êý²ÞÊHº0ýÕgˆœÅ»ki!N@Å}·áO韲?†|Uâ¿…>ð§Ã¯YL—Kccj‰yäÃ…î.ç^åUÊ$aDa‘rNkÓ¼)­ëÿn¬>#xû_c2ØÛA :&¥$vò!v-pêà1\º£p ªJ”’t~w‡ôÎYàWyhßM_ã¡ù±û:ÿÁ#¼eñ3[¾ŒßÚ ôûY;ïmÞÜy¢Œ’ ™#$¨ƒ ñ½÷€<}â ø‚5óü?«^is… ˆ&xÕöž@uT{8ú×é·í¡ûséß³¾««éö³Yø‡Å·QAc§'û%ŒÜ“$òÈÎß¼òãf\ËŒ¯zøOþ áë}3ã΋⯠ÚÜ[Zøßšn¹wö›F¶yïq,Wr°9 [e».B瞪U*ÕJrø_æqâ°ÐÁÂ2O^¿çcƅݽš™9 Ê¡»’z~µSHÒÚÎÙÇ@I §''ëPZÍòï'å-•ÇAZz‡öùû`8c–Î¥vÓ…µgZ¤ªË–$šo‡ÒO’C¸×rúÐ\M WPlA<í,£ùŠÓÕ ¶œþT›jàƒ“ëǧµrÚî¡6©©Û[¼’4ŠÀGRG¯R—;5…e wN˜x~ô4Q´Y9ÁÎ>•ÙI·ÆÚsÇt°y;GÙò£å>˜®wS‰--YîY<¢»÷¢²4¯O¦ÆÍbû²N9Þ±qçØ¸ÉS\’Ù‹cáû­ì­úÂ|£–hÇ“Å^ŸNKÉšòÊ|¶Bdn= j\Ê×vfRÈd”obG,qÏ_Ibò0´ÜAê3Þ´RæWÞ–Ð燆màÓ‚ÛH×-Ò,ŠzZš^™P¿*»@ 3º¬j­dóaMm-×q=? Î½Õæþf¡ÿ( 1øàU7sQT¥q÷ÖŸÙÀI ¶ÙŽÂsùç𨆚ڦ¨ÑYÆ-†>WA펾ô‘ Ô-ZK³—NUG‡niSÆ1[BxÐð0pËŠ•¦ÈÒQŒ·v/Ùéúvu·Xž[©vp€túzQ§êi¦]Kx±.v眓XëjWŽö1Ÿ0`£gŸÄÔú‚Þiǯ\Ò!0^„ÿžµzÚÄ&“º6nüF·:ŒcL’@ ä`ƒÁÉÔþ±µÔ M#:"6Yºäç§½p—Zl—:< ŽñJsÆk¥´×ntý2Õ^dHcUÁräÒµ–‚SNk˜ÜÕ´o²_¼°°2 Þ§nr;“øV6©¦iÍ*²‘ÈéÎ oËâw½†ÉY<¹ä,ÞBJ‹JÓßN’;IÔK<Øò0JtáYÁrêuTåš²MV[K->ëP ÍÊ(ù±€ÙAõÆêá¾'Ûfø²IÕ?s9åO½w×ÚSÏáÍIˆtj‘ÓŒŒ~5ÁxÛSo[CqÞ# XúŽúÔRiËC玕.£©=´’ÙÆ·²ŸÝ˜äÜFÑ€6×Iô«Z/Štÿ=ÞŸá§i¯ ‰ÔE’9x'p<çæúb§ðn“еý*óUûaðôS_]<#>Ô?!lôùHäœâ£m ?ÈÖ½;ÃcÂ?ho]A§ÝË¢ÙyZœ¨a’<0‹Npsœã<ö¯%øCãOÇ~ ¾í즃NÞ±F,üÙþÐÁ@V#-ó.à=ëÚc4R2I›WÍ^½9ã ‘ëÅt_ þÏ^ø†²@|«€€#Èå6üá‚«+x䎀×qá=Nðׇî5oÝ=Ô®†Dk”PÒ‘ÏÈ1òƒÔt÷ª?l¼K§k‡D1JÚY1º É ãp ¸ÎzÖuñS¦šZ³Ë¯Œçv†è¥qðf;Ø]êËcö;{V‚ß2å„äu`ÜY¹mØæ¨|WÖ®< ð™ï¿³ln5ÝB ;äœÂ]ä”"®õRÅðÀð0pAãšóoㄺV¿0ñýÌ“AdÑ+ÙŸ÷·QG´F„€î\í ž2kÎo~Uºñ¦­©|SÔæh4ñþk¦Ù{[x®^EbÌG+–cžü õ‹ˆ:lñlðÁ°’¡ó‹µÂÇÆ>óPä×JÔÞ•/hõاqu­hóÛZx*anò2ê¼¥ÇFV9A?Jø—öõø)ãÏÚßö­ðÞ{¡êvšl>KéæI¾YÌ™ÎJ. ×Zúç@óþ x“ ÂI·9–BAÀ2…ÈÁíMñ—Ã'‡ÄVºÅ¸}R(í¥—s¤üù~ àõÆ+µûË]È8Ê:'¡ÍÞxj[ 5_݈.¢»óƒ»´Wçåéœcñ¯?mß ê?~Üi³Üº½þ…rÚ”ÖÑÚÉÕí=¬FP‰æy̲.Í´Œ€kèHmtÍFãV}/V“Äzm·Úî?´g‰"PY6£lŸ0ÀàðN ®šÇÂÑxcF±ô¨gÑd‰³sæÈAUeÎXœŽÜVrRKM̪Fñqеú¿ò>yý~j³§Á½Ã^+k)µ[§ŸQmWjo_ºf˜¯ÌäH±‘Ž+×$ÖÒúͬ%޼‘<ÀGƒ »>hð~øÝž{ç"»{áæ†>ß\ëšžŸ¡ê?œÑiúk,—SJÀ6Æõ9úf¼êK“B†Vu˜€§ˆò\¯cŸzQªê]ÚÌŠ1öqPµ­¥ík•íbž_I«ëw±Þ^Ë´|­‘Áÿ‚NFFN;ç½ix¦][⊴Xí5M?OŽÚQ3ÛÁ ™®;òÌÛUBñŒ“‘ÈV5™§†Gb²Æ¦5Y>`©»yqóM>Ú ÏxÈ=…¤Aãf¹ùULI]Ç@>•nrŽæÒ—TΫZÒªÇ.‘x–÷n¯©4'÷#€ ¾y'æì1Óœ×+áß„Z5·Œ®?á!¹Ox–ó76¿leT±·<´Q…A“ó³Éôô›K(¥ñ¬:ä»,Þà$÷Ål4˜éÀù±õ®Á:røƒ]¿´ð*Úßhzû YF3Ϫ–R¯rfãåÚT€A öªäS±!J2æk_Àæ~#xZèø¯QÓ|gdÃí:zG$šEÓ}¢ù$Sä«Jª­ ¾UXÇn*O‰Vºµ¿†5]*¬¯‡”‰ý¢heel(F@ç8¯U¶Òm<=¢O~Ú²ÝÜ3'Ï=¼a°Û•z°9 â¬ø:)5™ÆÐK³˜Zêé–6r§†bHçïU8r ¥QU÷£¯Oëþ㟠m/|-áÿÝøÂðkÞ%·ž85+»‹sñˆ#¾Bs•cö«¯ðâÓYø§q©k–ÖšÖ½`Ù/59ì«6T[Æ~XŽ®Ô Î3œ×´j,zŒò.¤-®ã…†ØÖ0Þ^?Ûç“^}àŸ7µírßSþϳ›IÕ­¼¶íÀ’5–% îý꤃9ôÍIFçMJR”_9’ÞÞ×Ušy–êêM‚¯– 1UI=qÑ—“Ç…~áêwðŒZ¬S\±žæ@¤yÁó¹Xÿ>˜¯FÓm¬´¬ÓÌðÛÇ笒1vaœ’Iõý+œÕ¼M¦]À¶ö ²žAreLGç§ï\“ù ó+âÒ¼<¹Uègx«á» ­!H¥k¸ÌW;|äaƒƒŽ8'ó¯”?dØXðe®¼>$\M›w<èñêî"YFu‰Â6cÎxéÅ}Pu“¦k1ùk}o¸!K àãpú×S-埇£òÀ_>ðyPãpÇ$tÏ­páëJƒ~g?4’æØòoxSSð‡u?ƒ5‰if"—Y¼™çòŒ€îiU$“¸« çžI­ŸK¨Ë I5üêúÓaiñ»pLúæºIô]cQ‹ìö7v°-ìÂ,¨v¦æ¾ðs@ãØôÍ{oƒ?cÿ ýŠx¼gâ4ºš]Ë µµ¨ÄÇÛZBK)=+Ú£WÚÙ“Ì)Òµ“ù#çÍü W猯µ"’Hc6ÚxýúyvÆ"á² \·ÝžõÑè~'µÔãA§XÚÛ§’±\*D#áFÑ´u,¿1>µí2þϾ³ñM•šéZ¶©¦@«æÃö¬²Ê2c+Æî;Œt5à9ŸMð¯ÄÏh¾ °Ô¤¿ð¶¯oez’Ûý„‘¤É;¬2,„©çÀÇÂ?Úw³Þ±$Vó< °Èó¦`#æyMK69ì”K†ó@ùZBÁ¾M  šØ>²Õ£ŽçâF½âB[DYa„¼(m‚üäHÝ$þ#€óÒ¼–¾Ô|y5‡ïb¸Õó︑匱#ÀÛ»< ÛКé|]â CKð5¤—öj©«_ïµ{gtÔùcäVLïAŒ•ÆœŠN„åeYT„U›ví·âv¶Ÿð±ç¾Oèú‘³˜} Û—óî,á 2´­’±ÉÉêqí^%â/ŸüIñtBÓEðÍôÞzj’Ý(SQµÈæ9.@àæ½'à·‡®|1¡ëZ߈.d¹:” ÑiÖRH/-¶³7Xòû™Ì†1Œ©SéK­xOñÇÃí&Ó^¸Ôµ t{ˆ#ÁœHKd©Âƒ¸r£p91šç©F7ºûìqO ±É$ú=/o›‘Ïx·Ã±xV ;»ÏËâMCOåþÐ6+¤˜*â%ãsO$ã;WÊ¿·wÆ=cÃ’A§èš‹E.¥ lÈFÙìŒcÃd’2zÅ}¿mðãÃ>(ŸK´?'ø¦çDð~‹=–¥§9*c&wšH¥9bü®õª¿<)®üKÒã¸ñ¤w–ú¥ÏÛæ‚䯒Ý|Ì7.íä˜á‡zôo |ð÷Ã[ è<¦Í j&îêInL¦wi?t;÷«¶gÈÛiþ“ʧ?)ÎpFpxé]”04£nXÚÆõ2jUêûZº?#a|Koweaqã+¸¢KWÅ£$FI2ü*€;À^Wm¬kþ/Òì-uZ´°Ò.•aº´‚/ßZOœ4r.ìÇØ€ç±®sÀ>6Ô|%Íá«„\@w¬Š1¸à¸p;KiwˆÄò޵½»™ÓÎvÒdÞØþ$Ný+Ð…8Ǧ‡£ì•¢íò4õÝK«ZK­]êW3ÛH.-ì¼ÈU pwl d;“Xºö¿túíŸü#&‚í#%fGo †Øþoþ,wMz?†|¯ø—M¹ÑçíäÈH¨¤Ú»FÆ à`û=ç‡4ûK“s§§ZiÖS­œ@%k‘Y0BíÎ0ÀƒýÚÈ´ÒâÒõ†x絆öV0ÜüÃo2Goú椕^¼äSÄQAguö«‹ñαÃq¹1ÌìDo!”¶B‚§jí%‹T•ÇmWq49¼ká½^hCYÓÚÖþHVæ/ôh‚©;TH Ú 2 €V¼¯á߯k&¡¦éÚ^¥Û[jä“ìéi#"’ 8 ¸(P8@¯@ø¥ã­QüðþÞÞW†Òx›ÏÅk½ä´ãîÇ#mªSvÜ’ $WÏþ+ýŸo>2ø‡Tñ7Å ½:ên'º—A¬’8ã.êø „A dãƒ\p¤þ±wð[ñô0):Üé^§½H–úĺ\!ŸV¹Òâ–FD’Fò``¹M¬AŒðJÚÐ>-ÛøSV]SŠð]ži^âá’MD±Û•_›b‚K(*sÓ¥yß‚>é^ Ò Ó<9«Å{4%å72–T ôRãj í–àóZ0ß‹gTŠWµ[¯ôl²~î@£®òwd|¹JôR~éÙÓÜN楇ÄßÝÝÜj—·k¹ÓĘÙít¸§o™"Rÿ¸ŒeÁ9)ëSÍÉâ@Iíä™á-sr’ªµÃ.Iw§9íXš…´Ú¿Ùà¸xã[bfb².Týý p3£'ŽœUÍ[WÖ4Íö[錷ÎtèÛìåVErAO”ÛÉ9'ƒ“YU‚OM§h4÷9í7ÅÐ[ê67­"Û]ý§N’dxÝ€ÞŠèvît{†ð2A ]-…‡ü$¾Ðì5ø¬´{+ñn³2ÚÜKk¢G#e|¤uÝ+CðÛYUØy¬? xŠ{„Õô/Ù*ZêwEn.™K\ÊÀˆÅR%Ç@܇þéü+%׊n.­®ÖÑœêUªGàÂFUiÊq»*Fî“ìúKcH?w™_˜OÚö𾿨ë/5B}+PðåͼI¨ÊÐn‘ã{hV+T +0Eœ±<)Pq[_¼g¦^|7ñ´^/ðí–©áË * »ý"I ¸½û3~îÖî‹,®Wï äÈœ&¼Ðoü;©_k„6¥ed[N #¸¿vš0(’~bFq·™®að_öž•»ñ¤ªî—QÖ’ßÌ•šF$¬pòл1`Xœ sQ(¾^CG98Jí¾¬øoÀ²³ãÏŠ—£ãm„žÕu gìvzշاº 7Çå*üŒ¦ÜæDì Gçå8ò¯ˆZÕ¿Œ,5{Ë=OR¼´Óu7´Ò­oåyÝlÙÝFdcÁP‘‚ÉÎNqÏÜðR?Ú×OðŸÂ+KŸúÃ\ë>'¾[+;é-Ñ/´ëfK<:o³M$`».Ü~ ðöƒsqà»}Êí¬ôÈââDUX-Q«xè@Mta§*‘÷•’èxبƜ½šß¯ŸÈîþþÅZ¿Æ¿EgðöÛ[Óã¶·—Sº»O²¶•$ÅÀC—2å“•Çq^‡áoø$¯Æ-[ÁZµôxFÇP±™’=6îñã£-)ºTapߺhÏàä"ø7ñÇÄ¿ íõÛOÝMn|Eb–W’E&É|´}ãcuFÉ?0ÁÁë_b~Ä?¶7þ#x3Å¿lNÿ Ηqs¦^^FÓh–YBÂŒ¾k‰$°Ysæ6ÒéÔIÊ/NÝLèÐÃÕv„š•ŽTÿ‚3x–=OC6Þ,]* > ­Gí–kvRWŒ;Glbx×g?+Èr;†®ÅßðKÍwÂzÕÄþñ½íÕœÒD õ¿“½vä01î#*sÊòOWÛñ<þ/à 6ÆûX°³ÓPÊ·KÓ'—7÷,ó'¹/²2B°,ª–k¶ñíׇÓá·ˆoÁö–p¾VÙRi£*l¨¡\ÜÀ#5çÔu©í+£ÐX*\Êÿ~¿qù™ÿèø×ªé¾\ÞÒĆ:µÆ±co<§wû8'8÷#ÆøÏáf³u¦øÇC½KÛhEÍÃ[F×QA‡’HÁT\Ëcµ}é¥þܶ¶~?ñN⤽ҞݣҢó¼Z{–]±Fü–V\‘Ž¢¸ŸŸµ…§Âý+SÑ<ŸÛ:®¥º>¥ªÛí–̘£ÙO)½Àbä&Ü•lœ~Ò²kDe[-£Ê¦ªýöþ®|M§ëRµÕŒ,J¤$ñëšÙ×ÜévßjÑØ±Þ뻦ZÇÖå´]b?øFìÚÂÙQ(Úá§å@Rw0’ ÇEÎ@w÷ ê÷VZ³.Ë” ‘×§Qî vEísÉÝ8§©eµ½eûCFÁ WîîúÔ—émäÀ[Ï/À;¹ü>•im.‹w-­á$çå'ÃÔWGªi÷´ŽÐH³L¿|ÉŸ˜ ò*çhìgNNißñ#Э„÷óZÃ2ãpÀÎESÕ€ðæ Ûà‰D‹‘¿žô‘ëri6MĈ·G†•Ìöúþ5“®j²=‚Ãö˜ú)<â¥Fì©ÔQŽ›[¨Äm%° $m§aäzñéPK¡M*<ædDÂwÀíYºMãÛ±š(ÞhÓæ zWA¦ëÉâË”‚äÄHu8À úÕ´ÖÆ1šª®÷"Ó4ImeV»“Ì|†²=1Þ“^¿ó¬v¼jdwNzô­MbÐnb{ïÊíڰŠƬ6¾Ž3ÇwKñ#éúâ$eÒmާÃ5ÒkzE¾±q%öÇ,*õ ó‘éÞ²Œyesz’öÔôèy|úS»¨ˆaó t«ªjò]iÑGtûžÛiQŒœU5 ¿³j‡XCmbGO¥9Z5¶IóðpO¥n×SÏŒ’ºEûmrk‰U|½ª«´uú×eû7ü6“â/Ä!§ï’ 7³H£>_ÊJœwù€q:qMhšs½Xdxé^åÿÿøo«üuý®<%áOÂ…5©žMM˜°é°¡’êSŸDU@yÃH‡ž•[¸»T´”Qõ-ůŠtâ†6ÐÚÇr¬å’i7n<|‡Áè}kØgß·¿´q¨øž{M+Ãï Å,3Äö×n#`ÀÇ6ÐmÜŒ¤|Ïßú¯ˆ~XiZä?|9Óço2üj"ææK!Â]'²zðF0@­?‡ÿ³QÐá¶>"¼Ôi>;ñ“øÓBÐï_ÃGì £j`?™ƒ…Œ#0B# wéžj _ ·ÃÝM4¿Ø[\h’µ²Ž0-ïÉ <ØÂ¯#Ó©¬iSŒ.žìèÃå¾Ê\Íüÿ­ßÀ^ Õ|3áSŠÒ; øâûv´±üñÇæ“ò)nz`p+‹´øËg¨x‡U‚+kÓ)ºí)*®TDO6zq·“šö‹/]øÊÂâÒÿPsqt¡¯®®Âfò¼µBÌaÉÊžäÿ~ê¿þNš?ö$w÷:½­«]\°‰¡Ü@c ¹•ðqž*fڞǵ*¼‰A/ÀÔÑo4È..ƒv%¼Ö“ìÉ5¼&†VÜO% ™èH%k½Ñ-IÔ¢¹²òÖ̵ K 9 ÂA$ž99¯4ø7¨'ƒô½cSñ­½„2É<Ú{Mq˜“;¸YX•*ïsÜÕ߆Þ1Ò–×\¾øÉy}.•©ª"YZF ÈÞÌìäíÚ3Nxé>ÍÎ^òØä“ZÑŒS²9ŸxÀ¿î>Ë­êq%޵ÍTÜG*™.†ÝŠ…W D`ýÞÃŽ y×ö‡4Ý0ë‘Y™¼O¤k³éÞÓ&ŒÃo³xŠ Óç,°àpÙ¯IøÇñK K­x!`Ñ`¹š¦1•$¹U+³s’F1£|©÷r9ɯ-»Ñ?µ~ Iâ)® ÅÄ`Oò³4Áöùnù<0TwÃÖ4à­ecÐX*T¥í-©Ð^|1ñV©ádÐõÝeõ KZ·¸—áü¥·g b >Hã ÁÉ;”òj·ìÍáË+þ ¥Œ ô¥•™’ÊqgW ‚rdPcéçc8è¿ õx5ëHZXDsy^_'%”žã°Ïo쪉SOâᕚïToÝÅv±¡D‘[÷w$Å|tç=ëV›º:©Ô³»w;Ëk«¨¼I«O§ù—6ðN'Aߺ£ø‰Ú;ýjO‡^»_ê:Ž©#ÀÒ=½À1IÄ`ÂX$`0iºuç&…áë‹è–¾,¼»·²<ŒÊB<±’_fG~‰ŸAÏzììV;[Ømm¬¡†ÊùãˆD ›°{‚¿7>™õ­#Y£:“–Æ‹|U>¹e%ï‰$½¸µ²DDË„m¦2¹r£ïôïžÕä?³5ÝÇ€üCãU×57’-­5¼Sɹ¥ Œv+Á8ëÓïÒØ5ÅÝÅ #Ò ¼å ½öãi$÷~¸•™áß…ºà€úõ·Ú¯¤Œ¹w&Vóœ| úb¹'Ûêy˜œ·ë>õ=%ø4xá®~;x´ë;+›[[„fžBLqÏ429Ïðç ƒýêóÍQdð|qêß´½cXÕ,åUÔÄ®¹²‘ÁSÎ$³g? SÇ~•õ…烴ùõ–]îÄö³ºB¥?w"º/ÊØÁÎzç®kÉþþÍZÇÅ/—:žœº>§eáZX|K<×,²[\[Gòd&[ µÀɪ¡N\÷ŽÇ–òúØy§Qãð£R—à_ìÕu¨øçQµ‚÷X³Ž­o¨Ýù NÅ]™ä€ªê§hÆI8滂>Ö¬¼©kþ$ŽØéÚ¥ Õí´ölã.°£.ÒQÔF™éÐf¹¿ ô?Ðøz/hÚoˆáY€"](t„8,î9lC‘žkªñêjÿ5G°Ö5Hol­fFKÓ"–ÜÑFã.×ýñ¢ç85Qs›oÎÇÓÚ•8E7·Þÿ¯S•øá[_øL5iôû}^I$Dc(…3„ÁÎÓ¸`×<Õý/H“CÑ´íIí·Û#¦--Äçî&Ï'#¡&µü_áÛÏx’âO±]Æ#'£!Æ~ï^Gå\¾½eªÙÙi ß[°<™Ÿd @/ƒû¶èÝ;]e2Eð³Wâ‡u øšãÅÞ$Ð!»–í@‡K¸½),þYÁ\kœ-¬ø»[Ôç½´Ò¬EÌB[k}=ŒöÖKCvæeB[«aÏE¼Ñ5/^Åwâù4Ø.b‹ÈeÓ9;Ù‰$“ߊÖÐ< e ³5ZUÛ!,[x÷Ï*\›1kGù|?ã ]kºþ­¿ÛaÌIw¾Ì­±A^~†¬|:ý“< ñÓáþµ>¡§G ¬`¼xôàñÄÌñ™…n@eÃÀÎ:U¯šEŽ—ð¶mCSù,t³ »–!òº2Ž`‚ªñ]'Â?†×~±MGÃÚ¦¢‘ëPxFH."xÿwÆÒ¨­òàÏSYÊ «¢+áÝD”Mu9Ïø÷Jð_tÍ7L¸¾d³µŽ ²+ÜÝÉ€,A8ÉÇOjÓÕ®lç·ÜM"†[k¨?NAæ¹_è ðæÞ×I’]9ukÅ’{yDžT²…Â9Ë“ÏÌ>^}k…øûðÓÅ^8м?ÃoߨJ‡:ÝµŽ›#¼èäl1¶X–FÂzU^ö¹¼«ÇNãBñ6½â_ßÇáë»;Âútd·GÁû}È#3ë±*~c»ÚºŸ-Þ…§KoâÝJmlO#IæM FÈð¼mçÔšòi¼ñÖż¡_ê‰æm´‚ãJ6jÌNIšc*ª¦º à×’ØëÆÃUÕ<;gi{¨"¹i¶ÀÄF7<­ŽWýXäVöÑË8§~Vþë2ÇíñOø;ð“V¹Ñ4Èl$ºÚZýŸo™tí2þâ8”dî²àÖ/‹¼iqiáX/¼\V]BÎW’/쫦In°Ã+6JxdmçµWð÷¹¼Wñ¢ÓÇ3ÖüG©Å£ióÚéZ\¶K§ÙÃ<ÃcÜ‘&ù™Õw*’«÷ÉçŒvúW&°°³³Òg·ÑlíY¤Î/:òWlnssq½ƒJªŸzn“JöqÒ©¥nÝÝ—ü?„z•ÞŸo-Ž™-ŒR¼“Ë5â¤ÊXôÇ|ÎGLÏST4›»»¯ ]%©iô¦u™˜8K*í;Ôt;qÖ­_|,ÒtϾ·{¨j3ÝŒf}KRk‡‹Þ6•³ã¢àw¬Ÿ|`øuáÐÐøÄ¾‚àÛ%Ú²9'b“É<“ÜÓä“V*Ÿ5篡~MtÖ ™í¼ûw•ç}¿»Ü71#¡Çozäj/Šö?eK›(5­A׿˜CnÖ4V’F¡¥Z0sà«°x¸Ï“øÛöôÓõoÚgÁ ø){ý§¥øŽ§=º…’ÑÞA†‡ÌY¶+a­}5áƒnörëQêrÛ¬6c$×ÒµêyûÎÐNÕ'n2qž€V8™Gi=‹Œ©©ò§ïvÞÅ}3ÇúwÄŸ‡WŠaÖáÓtë‹l\#ªBVD$@ÒÇ$er9ÝÀ®gÂü}à‹Ý3@ø- Úø‡Ãž¶ŽÏQ×5Y– g8X£‹,‘Fn9$®­zκžð?ƒ'Ä–7­i IUB<…Àùv/ð¶pqí\Wìç§Çyá$-h—ˆJÀÍË®âÞa\œdÈà V8¥ÍNZ#I_HËñWü3Cñn«ð®Öê_^XÉcepóÜÅk ÿ–¯æI)f;—vxê áôã§‹!¼¾Ò4iÎÊåìn <3]3°?šª>rzJëµ ·‰Z÷QÒ^)4§T¢ˆ:Ï @bó7€¸ãšŸÇ¶övƒikáøà”ÜJˆgLæ4àH®g8ƒÁ#ÒºåNRZŠ5Ýù!o3à_ìù¡øGáõ÷„œW!}âÉ´OÚ[é7'λˆ]yAA$u=r{ŽE|õûI|Pÿ„:ÿM¼ðö£-¢Í¤¬÷ãO‘ï#Œ©*Â’d¶îq·“ÐV-–ª|A†?kV—•«‡™’Ô¬GKJ>f(~^x!zW[œ§{Êß‘ßJçNþïK=[ô8=+VÕµí&úÏÃðisÈ–ð5‘–ei[s¶|ݧf7í<ž+ áÜž*ðãÁáˆ:ŽkáÝ.âx#‹L’gº"fó˜"…P Îà×cqáæÑu[Û›;Ç6³”†5yLInÄ`£ã•äO~hxâ%ÍÏŽõË=[J]5eÍeÄ¢·Â²ÌNÆbáØ¾à¥;Å]žµ=“×úò Õ-ÿá²x<)mi$÷ê~Ä’ÌÅç#ï<«÷‚ò0O¯á\ÿ‰´i$[­úÉ£¹š–âHäòâd=Yi;8r1Þ·ü{©éi}yqâË;½Ùb‚ÚêÆí¤†YA—,ˆ6©’R1µ°8ÅbøƒCÔ| «ÜH— öChHÝtŠ }Å#Üòüõçµ]ÒI—Ï}†< «ÞÏö¿ -ÍÓy;Ü›t“í+…guÃ.݃Aù³ŒÕŸëÞ)Ó-má#Å«Mj×O±så3…fh÷• N>WnŒ0Ùh`𞑺\&î[É.¦žy‚‡‘•@LXð½øôéMñßÅ˯Á¥I#C½Ñ58ïÞh]&ȱºy@:|™2n ‚0cÕ"öÐÁá¹âäšô±Ê®½?…>[ê–-¤ÜxÆòÖµ2Öû̃L˜²«Æ£Ejã÷C$'WRñý—‹¼–Þ¾ž÷Ä’eµšÑ­,Œ¶éÃ4j wžkœÕ£:Ã5ÌN]¤‰¦Ø ÈT`d€FãW4o˜-|ÛBûÆC98-žçò5uenr)Ò•õù~"xæÃ\¶µ²ÓüUö« n%Ë{Kˆg Ù´³ËpÛ‚€ªqƒíI.„šl–±è ·24‡Îg #³(<ŒŽp}i–úµÕ­â$¶òK ÂEUù1Àç;Nsëœ |Þ “[x[Q}¢1·qëŒwÇSØ~8);ßCeU ºä?ÙRËÄ‚PÄ,Þad>Œ zUøëâ ûØè[Éyfd/8V¹qœ*ƒÁÛ§ëU£Õfšõ—[°Ôa‰á3ۼ߻W^v°ìÃ=MáÛöŽõ®ôÂÑJ®@(媜ásŽ9íR—»ØRWZ3@é‘ÚJlïdÜQö2ˆ™ È òxÁzq\èA×.ˆ—%Îò¢]¡3úqÖ½CMøk«ê>1³Òf’Ñ缈ÎÒù¢â0«!Ý’»³‚G#“޽?Äï€Z6ŒÓ^x´¯5÷–÷!šcÎé`glä‚zœJ•5Èž¬ÉUMòµsÌn~ \ê‡ZðÕýÄò2 ˆà…ÌO¨°s‡Ýøv«Ÿ¼iy­iš´ñ]Ä/làckp‰'–R8_”€•x}»Üð·‡fÕ´Wu«`²âW…ÙØ[àݾÕǘØPpËc"°¼Uo{i§XGáËÓ§kÑË2%Í·£ˆºìE‚glå:sœÑ6¬ÙÏwí©èºïÆ sáý…»è·Ë=ä–«[Éc•æ!Ù¸ Ÿ˜ Û æ¼ïÄúÍ÷Š%}M¬šÿ[I&šôB¥üá$ŠWr€*°ã´UßjZåî‘l¾9¾·ÕDÊŠy­cŠâ ’Áe’ï8 @ÁëXúˆÏ„.=]垈„S<åÉç÷«çŽ05¼aÑ\4I4$:„Ð^ÛÏtMÄ× ¯“!‡÷ƒg$c¡ô¨-Qfº¸šViƒL`–†R¸Ú3]=—Á‹«¿\ëz|kçÁqäF»‹M"€KHP `}ÒIÎHÇ?|1o „×7P©º¸mñ‰±å@ížN~”JvÒ&°¦«'+êy®³ðsPø£®ÛCã{-Mì"22G,MöifUùˆdJT1èO©ï]‡?gNòÇw4_ošœZÆ­æ2¨Q´ìáFqŽÉ®×R’[Yíg’i¡±µ”\H°¶Æ`>ö»‡Në[ׇHÖo§}òè±+€—Že)+¦èÔ\$`UØÙlrMM_jÚIèa:rÓ{ìx¾¥ªÚ_|AÖ¼;à{û›¿ÏµÓ¼Ñ ‚I¾ÒÌÜtÛ¿¦àGZ¿â]LèšÇü#úŒZt:¬¤M ¼ûäh¤%òÎ$ 3€=…sþøq§ü3Ñn´¯ËqsçÈg».MôìøwS2î‰HÚB¿t{çCÂÑ4râîóF†?Ý#¯ö‘˜³Çovò6B‚ÎrT‚xÎp+W6½?­DÓŽ¶×ú×ÔmÏ„îªèz§”º-¶¥ YÈ7(–c“k(`bWœ©Uù˜×µ Ó–¤£%·ÏSó¼ )º·±ôGÄÿZhò8]²cÿ–)–>ŸNsï^U¬üBmç–쩆61™Ûå?À:Žsù×sã)¡×µ-= ¹³·¾ŽÞXÝ#™¤{ÙYyJm8Ô‚Š:cê3ãž'Ž ?\Óü;o(?Û¡næ‘ÁŠÖ5m„’y, ¹öâ¾v++u*”Ú¶…­BwÛï$h¬å*ÒÜ’PÊ;d/(›†ïp1Þ¼ÛX|}ã[› ÌTÝÌÑÛ„`¾RŽ®ÎxAñ'Vgǽzïá—Å+(<ãa<Ñ\[Û‡,¡T2–| R»ý7Ž1\e‡†üSÿ -íô{}Fîû^¶YRÖÖ#æBÓ$yÈÉ㇥wài®e'- Œ¹«>øTðôûnµë}VÓÉaÛÂ>NªÇ;Ø|¸í^¯-µ®t”Òç¼>#†CöËxNèaÌhPDÉÉfÞ ÛœcN˜~É ¡ðO…uñ¤W—š¬³F'fe;$ˆãÊE¶à–\d ×Ðþ ð§„´­sSÖ¾ jw:célL:v”Í$Å‚€ª&Lç©È99bºq:OGOøÕRøVšœžƒáKãpöqBm%G.ÅЗUE8R:ãŽ@;qÆ t6°ÜêþMFÙáŽÏF¸ŒG4’ìu’u<®ÑËH'…AŽ:æÛj:®¸’ê¾e¥­½¨>t×wÍ*Ê͵]—æð íAÈVè7-5k XQÖæÖÊÛÉp–ÐXã첕?ºH˜Î@UÏðƒ÷¸5ôÔr“i8œ¯Œ5ë=.êÚ={¹ïLæk¿"‚BÍ•ŒI<¼ÍO¤ZËý›v×V×PG6õŠ_ËXäq€Ì;Œã©Çzï´ËÍ?áͦ¤Öi5ÝìR)JÈmäoîð`îR¾{\ž­¯jò-À’y¦ÝåΑC¿1“œ¹õéÀô¬àú2Órègø“^Ô[IÒ,5{›‰4ý>YÒÅîKÇb üª,Øn¤zQ£ëè—¦ëKž;k«GI-â1oxÞBɺ% çfâwž˜È9¥¸¼»Ôîã»Íq1h’ÛÈÀ)„8Ç=sÍR=­µÍÔ·Ì5…m2òÊÒ1³ï` 3êÜé¢WcKGsþÁõFÙ-õÌðIw‹u–O.k‡eg289.Ò718ÈÆ7b®'†4qckl—°Û´m-Ô㔲¯ßØ>\œíI鞦´'iôýfßPñO“"=´~BI±xmPФìQÈÁÃgë—ñå­ÅûGsu<¥^1n–ç ±( …%ˆùŽsšÎI­Qj÷±SK»´ñˆ®_BµÕŸØmî/R4{²Àî1ùr¸ùW ´òzcWH²ÑtIå’w7Út«kkcÙ<æšUó$–\•" @ §5gÂA4guŠÜ=¬±m[xÓ.Ê2NXç‚I«›hާ¬yV.— .°DÌ#Ú7_xPxÎjÜ5².U¯S[QÑ‘-¦Ž9‚m„-&þXäŒAïÇåY–>ºÔ4ëíFÊÀ^C§FØÜm]9¤ ‘³’A!™OÝÎOŠØ°‚ÍC¶ŒÃ¹y&‹t‚çÏ#$ddz(ÚÆkV¶†ÇU¶†õÞÞ Z顃ÍuFºÆBN0fÏ8«ºnÈ„¤ôLÄÒnå†Ù?²e¦–rŽíA¼p ÏðÇœp+N_‹»xZúÞY5tÈD]ǖ¨A<ö>õ³káëvˆZÉs ¨,àÈò툤©g÷À ¢ûÄOm¢Â4Q².L²ˆ·É*cNvªã-÷wnæ¦mZÆœ·±7Âßè >$iÒx×ÂãY}?J‘gÒo ²Èò©Ù+|§…é¸â+ÐÏëWšoŠt[õÔçÓ¬,åžâýÔ=¸´LHcóWsaDq¦ìt$rMGáOi–÷> ½ÔfÕΡ«‘{sp&È|¸Ö(Á#Œ*ôP1“€I&ÛiúýÜ­mköG’¤5TÇq(uܱ…`¨… ìNq´ æ°²“¿Pt£h¿Ìù÷ö¨ý™4| ŸÇ:—ŒG}Ì´³Ó®gÇv"bÌU6 ŽJ¤j˜ß$‹–=žþÏ¿³þ³qñ‹D𷉞ã]ÒÚþÔÚ´Wi{lÊUßx §j³†Ê–\´¦¾ûý¦~üðOì÷à›ß·v×OµFÓš)%ÿ@Ó§[Y¯ÍÆÑ6b[NY0YÙ`ò|7öŽðŸ†¾ü!ðλû*i2$zwŸ,ͬë—>TÑ\nS ¼’• í…˜nB˜b4£]ÓŒ£Òö8žU§*±‹·_ësóÛ^Ð_ÁÞ.Õ4˜ÌèÚ5ôÖH'ùf1G!XÚN¢òÜñüUsEñí÷|Q¡áKÉí/íØ2ÍWØôäwèkkö“Ñ ð÷Ç]yí¯ô}If–+–›JV[æF¤ÇgfØ„ ÌK`·°9«[m;Qf’î䫳WÏSøWnråM3Å•¨Ôæ‰÷Çì£ûFøSàwì¡ã¿|l¾û_‰|k.™kàדÞ8šeLD›JÇu}€€2[©9‡öký§üUñWÀúÇÃkúN•$:wÛ`Õ<…yç²Ék¨à,[¢ÎvR£ÌÉVÚ@ø¼i×%Ðm<=­kš„~Ô®’o²)WØ:€äWnà3ŒŽ•õ?ì÷ûxOÃ#Ðõø§Ä- ƒ!†];ä¹Ü­÷&S'ka‡_N5©BNrªô}=sªä(tµôíçsæ¿ø#Tøy©<~%³º¶kñ&¥§4à %·7ªI¶vm. +2±gÏÁà´’I°’.±Ëï.ƒ‚E}ŸûAøwþø}¡x£PÒËi‘h§MÓìÝ™• "&<ˆcW“Ì ÀnEž~5¿Òn-4¿µÃqm*)X›s…‘Î9`:žŸ†EMó/CÌÄEÅÚ÷1-&ûUœSݱ“ÉaÎê†þä4­tާuþU¡z Z*›H”`€A=sYÇD’ò)þåÈÈBy«RêÎiGNT^Ô®?¶4¤’Å|Û»Q÷Gbž¼ú÷­ ;P6~D½™ßæ7]Ù#oП­ahòÉ£Ým”…0uàÔÞ0¸dKE ;qÀoþ½j¬ôfo~?0û ,n/@—~WÀmÙý:Õ]Zìd1oh¶¹Ö¹øuÛ‹»|ñ±*ÝÔ{ v‘ Ú­ãÉq9yÉÁgÌük_fÎIUOd\·HïgÇ:Ǹ«°8SŽ¢µ"Ж[¸Åƒ¹”P®B¯µjhºl0èÆ»X6æqŒÖ™¦y‰z ¨’X•‹ãÉõ÷¤ÚCŠrjäÚ¶“,Ð5¶ ZBpp9+ëTµ KqसYDÿf„M¼Ž0ÞMn;«Ñöá·`$0'p5KL´ònn­¢¹Ýåš(ݱŽ+&쎾FÛ»ÜátVáÕÂF»¶–aœ`ôºíá xÌ!KcÜöíÒªi¾{ËÓª‹´g lÈõ5oIšÖ¤·‰]#á£Î'®zÖÞØÂŸº¬ÌOZ7W1Z¾c9#ÔVçÃïH×RZî^Aêô<útª>>Ò¦–H&‰6™‰B¤ýÖÿZ¶:'î݇Í!èsÛš>΄s8Ôµ´#ºÒ­ïu¨‚'·\|êyÈÏZç¡Ñl¡ÖÞ4–Y‘9\ãiëý+¯ºðݱ‚v¿¸•îb å´|޹ŽüVø\Ù],¶é&äç°¢-¤*±M«"„Z%î©t¶Ú«Ý]¶b´ƒ<ÜJÇ ÷f*£ë_µ±¯ì½àÿÙûÁúN“ðá´Ízmd×µÂÉw+*„šIrQ#AÁp+âø'gì1âoþÐÞÕ¾'xgVѼ-¤Ëý©sqt‰³Æ`%Ro01vRDЏrE~|Jñnû=|4›Ä>2òÎ57F>R,bÚ ›¨lÕÛ'Ëo'ý’kÌÆÖ‹q§séòL²¤ã*ΟÓ:ïxgQ³·½Ól/ËÝk’=ÝóÌtHûâ5"*ð¸Æ@šëu·†ô#²8žÆ)<ñ8‹©Ê¤‡bv»îŒžõMõBÖo_TÄ–q:÷ËdT‰ÅMÊ *pHÉÁ'€yGįˆÚ†µwiò[À"y™Yö´¡‚…'Ú›Bà ˜äf¸¥Gcép±Sƒ”ž½‹ øçe£ë÷Ú‚ÿð’ËnRIÎг· ”p§`”Œu< dsZÞøËáÿ·Ou<¼SË/“Â8˜0Q¸îHÈÁÜO®p9¯Эtíà÷‹|mãíFËÃ~ð¦è!±‡gúY“KÑäb¸Ürj÷ìïã»?é–ž+ø7©Ù·ØüÙ£{ˆ¤x,Ý£ ãŒÝ–êÓpJ7µÎªTV—_™ô-ïí~š†°øjÉ^P̉qr gl€?wÀà0ÎMqš‡Ä?|Y´—íÓI¨Üùж*Gçh Âç®Ø-­#o›ih–GmÌqÀ­•øÕáDº¸ðÏ‚,µ[KØå/›a¦Ïu,‘,)&vČё’$TÊ™0¨º²QGC¤£½—›Ðæ¬ôˆmP‹q›‰/ÚUxöày‡ ÀŽÊdŸãÕè§¼Öéoìe:rù–鑟; {q×éžµçßðNÏ?í§üSñ†¨º¥¥¬Þ-H´Ób‚ÈYà ‚ìÂA—†¾„×b‡ÃL¿f•`½žU‘Øaå–ÎÒxût«›t÷G2J£÷Ìòë_]ø§G°{«_³iz4­*@°idË(gíÜ=õ®–½…Œ6z¼a—|×Ã!Û ž¸ëÇj¯¨x¾òóXK{MfmMI­å¸’Khæ{€²ï1F„ß‚ŒÜ§Žy®ÒÆkÞKm=¤°Åä–‡p 7_N¿•5¨Ý9EÞç?q Â7áæ†þì‹ë‰LV€`I0Î0úç5“ào…1i^!]Ù Ô­µ´ÆÑ–Q4žDHÅû–ú Åkø÷Q¸±¿ô…Ùuò!>^B1Iê0ëY×5_ÿÂu©Lëvâú6·Ž—x{[c¿=‹˜ëY¨ßQÊQîuSÚG} ørÛX+w{£H÷’»d­©“vPŒõ?êu]Al|..ü=iu¨Kq”ÑO,xÇ<ƒÁàs^®þЗúUÍÌh™K² Ê2à˜òNÑ’Iôè–¿LŠÞ;9§H˜´¶« ò˜ÎT Î n''žµª—¼g$§³»ûÎëá?™âÚÉ«6ËÇÌ–„`åXžü¸®[â÷Œ4½ _þÏÖ5»kHo-b{h`V,ñÁNH+ŒzçÒ­è)ÿÒ›»éb´‚ù$«;‘`g«¶ ç¡?y>§âKüVSº[³ØYOn¢GUüÀb!GRŠ~™nõ m$\9¡Þ§C¥|D¾ñަSÁR%—”𨹸µfŽ(ׇrŠFNLÉô¯ÿeÛ£TøûOüFðÿƒïàÔ´?Š,hûQh†íœZEzÀ`…Q°UõÍ}ñÛÄúo?g½WC¶Õ'²Õ|M¢_Ea4."–ÞÞÉ–òG<"«:ž¬qŠü¢Ð|FÚ§e«ÊJ.{}Pt †I‡Þès~‡•¾%6’8ñx™SåMjÙû½à«xô'Ò$ÕõEºÓm®¥i/<Ÿu”ª• ÷@Î ôæâÚGBð÷€|I¡h×öZU߉&X$¹€JêÖß<Åü䱇AŒb\ý¿Tøt|ñ2ÖÎêIý§=•ª¬RZ>äd•¤nf$òP€ç¶/ü;¡i>›QðųA,ö«mÁåNʪ#ÆAÏ^*lÚ•']%8Ýo½¿C?ឨ“Xiú~¯-¾¦­p$¶¿Ê;ZÈû"2Ê¢î*Ù*qƒWðrûX‹Â­âÆšòK‰µO:$óÙ¾f/,…qŒ(íŒ\'‡4Õà çŽyÎ+'BÒäŠ>{—™¤ˆ®Âd$°ËcØd};V­¯‰¯f×à{YáÆ› -“LÂXÐqP¼“Ÿl ˜Tš~ñÇŒ¥ŒÄEÆ^J߉êíû$øGã/„-,|yáÑ¬Üø~å­nc¹»¸ÅÌŒH¦(]K †RvóŠô+- ÏÁÚ=µ¶n,Ð[ÚÛÁ;C´`),Ç  t>•ó´Ÿ´оÅæiÓ ŸµgòÃD°ñ«±éót÷®ÇCý¨ôŸ|?´Õ¾$é£QÔã³x¾Ö’$)q¿9_Yéþ_øNµŸÍyß”öúޝ-Ê0+•9ÜXG 5C:WƒµÙu صåÚ24’Ùÿ¤Ìƒ£“†:žÜó[|7áñƒQ?,o£Ó,vFÒN²Kl& ’Ë#"Eãå$ç1^Ûû9~Ò„|;qaâ­,õYov[§X~Û–™’&þ$߸EfêJ>ô™ôv©jtéóIô{¯Ç¡ñÏŒ~'xŸÃ6Úö£áo ܶ,·:uä2"yÙ¡l ¡ŽYsÔ0®#Ÿ ¾8üUâï¥ð}­Àb-ôGŠVAÙA+€=NI¯­¿moÚr÷Æúµ®‰¬Ðé6Ás$6Œ Ó°”‡ÿz ‰ô®F/èÐY,÷…Œã?¼™Cc§Ý'&“ìôèva¡Zqýóå}£þ{ýÌòmöðˆðõ¥—ÄÙõ¥¬p[Xº3‰da‚̃ G¢ž¥3ãOÁ…>øwqqãßxj7KP¶>e¬q(ºv £.%˜u8õ®ß[ø÷á *GŽ]U®¥‚_*Hí i_û¬£¡ÅxÿÅŸŒ–¿¾/ü8Ѽ3¤ê·ÞÓµ¶Ôµ ñ-¹¸h¼ˆÓÌ`­‰Z6'Ž:â·ŒSIª6÷­'n®ïñ¹§û>~Çž ÑàƒÄ1°Ðînìõi,íµ:Ì[,²Ç!Q5´[‰eb¬  Ýœôe_JðÄŸÛóOªø~ÞãËkxehʸ—ùqd»ÉŸá5ÓxºhuÈmtoiúž§«É$¶ñÁ¥¨ûD.³“Îäävæ¸ {->ÛA’×ÄšíœÐÝ­Ôzl#l-(cÙ?60O9ÝŠ- ñi¾oÈä……i%fõiZÿv–G/áÏ ¾•ñ;[ñ¥ý›«hú¬„Ç«@6ƒÃ±Y6âÇœŒsŠï´ÝF]#Oó<;ö[[™  Ü®ãfç“‡ËÆ Ç'f¬èþ´±ðã]Icpú5IJ}ŒÎÑÇ.P|Ìãý Ùé´àã‘]_€>E®hQ,Ð [X‡™Un7Êw sÖ¦S¥„ƒ”¬‘2¨›ºV9]¯µù,ô8o-­­-]â–}å#QŒ–±Ô¶êkmoTº›Å[Eƒû,0d£ç ãªäc*x®›Ç¿m´í2ÿM»ûòº‘-›üânr»‰ëÎ+žðׄîü5 ²ëq,…`Çv‘êJ•q21Ò¶UaR §£g gMᯠ]xr}[Â^.Ô¼'«µ±hmÞÔ¼óK·åX¦Úw}Üg3Ȭ?Àú¡suâ_ÞÏ­xšKfû]Íé{«—ʆDb±‘€UÅi”‚Úâ+ŸÀ.-­“-nfx‘›a—%qÁ8â¼{Å_üUâ_† ðÏìåw§Úø‹ÄPËO7Ë-») #FÄÂ䜃÷»W:K‘®o¼Úƒz§o3¬ñ~¿=þ‰kcðÿGf¾¹F×Ï«°Âí!ŽpG_¦ xf±±ñ+ꝅ¾ßCgªÚÌ®_sG Â`bUIÎÑÇ\tëV¾:|`ÑÿfŸ‡~ðgÂÛ¹n5™îáÑRXÈk»œæK»‰@å‰Q+d`Ü šÛø;û>ÝøUÖÔJ+!ÀÞÿßǧnÜñ]>£ãÙ­ü'¨Ã¢Ýxb[ai§jÓ<›ï$Ž.ùˆA8äÕ§)4‘Ù -(&¯wëÈÛñ¯¼IñSÃÑØøÎýnãØ¦{˜[v»EÈi·!› ž:qÓ<×-ñ+ÄZ›ø&ÛHðÞ±¢è†ì‹fšÖèIy7"‰óµ›?|†ÆsÖºËχ:¥°ÒäÕõì»›¯,à º*¬åAgË (Åúã'¾kFÖoŸâ:^ø­$¿ŠHì­4émÕZk™˜Æ‡zðÍ‘Œ|¡W¯\Õ§en§BmF.:[úíø˜ÒjI=ÃǡڸŽß Û%7  ØpX–%ŠŸŸ'w^ôíWñ>¼mæÖtõ|BåKFñHBêË»rã†ù€gÕÞê¶ÓKçGm§_‰Ì~d'y”³íe<|¡CÔð½sSßü;Ô´)’KkU¾ò|¶Ž;ßJ…94[¶ñþ¾ó Å^.—Â¥§†õjvÑM½Ó[YZÈ hãšI\(}À¡[ž@kÀÿt¿x2îçâý…†“â¸cŽYà—Ra½e, À†Ú…pr<ƒZþ)¿%ÊïûL6²D‚XâdBÌ ào¤²žÝ8â´üà½3L±Õõµµ½Õu›Y-ÞöEÊU€U]Ì P«¸1ÉÍ]+©^Z˜J-«ÃWý[ðwÅo Ýx2ø^ý’úÞ)LPÁSd6zH í×½bIz³C;Y–òà73„'¦vœžH<)9éŸJ£?ÛEÐæ²·#H„Š8¶@+ÁôÁc­w7ºæŸ'ÁXt[{m~yåšçW4sF¥ÁHÊ}Ù0£iÜ8ìhåR•ã±w;ivßõØÁ “]´vÊb_0Þ„!Ü@1׃ïEçÚ4)ÌEá”ÄÁ”©Þ’@ÚTûÕu[‰tñow9òÉ*Šã”ÏðþTj*—ë [³Áå+È ŒawwÏ\öÍO³¾ìèRªêÍ=ÌPØ$’nˆe2~Gþ,qÈÍg\êlo<Ë‚#R‡zìÜÂL€ lãÎq]†‹c¦[èrI¬Mpnã­þÍ."#ý–†ÏsXWZšKÌd1–Û»o*z€OLЭkX†´¹¨È×v( é$kÈ!²'îûsLŠÂßû$Io8w•rÀÊŒIÇÆþãJ¶x:¬ûšI™\X-†ç8Ï’+7AÑ®49íõ½Bÿí—ú{˜soƳ62Â4P'¬1Xþ6žïVšÊ;™&€Dâ+k(PÅo ³4Q!’Ìz‚y<à p„éêsJ*¤”´±Òét=2ú;ÝcIµ0¬a-ílcÑ+¡*<ØŽá*²6HX9"¹Éeâ}Äói0Zé’^FÊ‹:ä[.pÉ8-&0þ 5·§éÚö¹ •Ÿ‡®-4û[{˜ùíãQ>« ¸wq¼£ ©·€Fiß4ÝkRºïâÖ,-¼ÎÐZÁ{ ;~P¥”^¹-’0x£ž2•’Ô¨Ó…ÞŸ×r÷‚<5qw¥_iö÷zî›{´òÜ FœºäÁR7D«…,FXç“Ö´¼U~Ò.u-fî+[kuß4¬ø(£Œûú`rNEáüAᆺv³«h’ÛéM„¸Šòc¦FpzðÁGzWñïÆw\úUß‹­öhR¢Þµ¾ ‰X £Hþ =ED'$õbUiЇ:Õ´_ˆ–z¥ñƒDŽëS™·*[%„áîŽÜ•PÈduô=«_ k:WÃÏìû…¶—P¾´·Á{kxü©{ÊUHi±µrWq2pp5<c¢|z{¯_Zß4ž HŽ›oçO –Ìãçœ*°ûÊøÁPUCvc]vµi§\x:dÓì#Šú$x’¸’UxVÏyTnà‘ÁÍmS“¶ßægí–)sEh+‹Áöú}„ó^³Etcd]͹£ÆHÈ÷'ÐAñ*_Þ[Iâ{´­IíUBM±€”ù`ü¾¬xÜzT+Ç%õÞ°ÂÞ‡Ë7~ï|ƒœn#rsô5§m|–ñivOýf€Í++¸‘¥‘‹lÀÁE9aX¨¨A¦þa9sÎòØé_öß´ýœ~/ü#Ú爼Qª^ÜÍfE¼†ÊÚ"ߺV•p2Û†P‘€1“Í|Íû:xNAñ+ű´¶:¯‹on ÔüA8‡û4ÜùÌăª¨€pn¼â¥ý¦|YâoÙßBµÑü ž)¼Öáé°Eï­y&GþEpÇA¬ïØrö×Kø]gâÄÖÞ&ñ"ê?Ú’Ì$¸Ô®­fh¤—pÈXWrª‚H'€x­ã?c‡QQVo¦ïÍöKñg4ä£.H4§¾ß×Ü{·ìϯYxSÆ×ãÄúdú-¶·0ReŒ;ËWäD³1Ø03”*¯Ž÷^ñf¿¨K©Ëgo5ÖÍ2ÖÁ~Ï1 7’ ÜÄÝOjÈÒnemV[íñõ;Éã´ÙÊÐÇ3 f H)¸àrÅNp+VyWQÕ/,‡`¡™Mô&#)Gà+`ÓŽ uÞñÇ…¼c¨Cwáÿí©¬fHÚò[ÍZÞwž?Ô›DJ8Á óú¤tÆ|É$®ÙËèŸ 5-OK¼Ô[{[{%ŠM‘»Ç#?ïS‚ÆéÏ=0 ®?ZÚx :dé؉1ö™ºP¸ÞHÆryQ´ŒWa{૟ü3×õKG‚ÿD´Óf¶¾ŠQ/Ùã›Qãi#ϹÆÈC^¬¸."Ò4K =*ÚÞY"âÜ$ZcŒ©6«rIÞGµ5+ìÇËÌÚ‘Í^Xê<0Ù@Ь&®Ú)¤uvvRÈWî’TŒ¯0©'ŠãÁÚòÝN°®«%àù!IÎ8`3Ôsé[:Ä£VŠâá`1}µÍ仼Q;ùpÀ–Ú¬TD á†AÍbê6GûR;·»iJ#2 sÈÜ:‘ƒý(mÉ]—Ä¡o¡Ë—í¶óS–IÞY®ši\»ä…f<’I8àÓŠŠÿQ‹NµŽ-VBÞ[4›ÝaÛYŠœ‘•Æ©"—[Ô$ŽÜ>gžY2$ rr1ŒŸÈVmÎÛ#„vWg+òõÉ{t>ÕM\¶Úõ&øoã«ÛÍ&H¼qk¦ií)¸yÕ rH DÆãåF¹ÎH9'5“ãŸÜøèØæåV!0ÛÊå÷€$ù dá¶ñÎîGUµn##o–vƒ¸å_˜\œþ•Ðü7ø?{ãÇ48ft´ O’¤¼ïò‘˜ÙHöí, œçŠÂ¬áBó›I"$î¯ÔÓøUà?üeñå–±ñT´Óáø]¦M®Ä×¶íq§éënÍw!/¶)äó€2ÁØ1Œb¼1­¾þÓžûm­ÝìšBÛuµI-d–âYv™§ˆÊUÿs—ÃF ¾AÝ^·®þË>#°ð¾©câøí¦²Õ-„w¶ p$¶ÔKû‹„ è2~WÊäVGƒfx îåÑ´]ÓN´A5Š[ÅË+ 8¦ÜÆø*Ű©Ž3ŠÂ¬5kÊígÔâ•ENm½]ÿàÿÁA|1¦øöžÖ|7áPñUŸ…tû ÛU¾ò…ÌÖðþ8æ"&øüâ§ 8#<ŠòooaÔ›ÊS´"dñÏAéÍ}ûñóþ ¥|E§Øx>vÒîî/¯n­hº•Ÿ6æÛSµ…$\0TÜžA]O†>0k? µxtí/\¼þÏŠ/0E+Œ« íòÛ* +Ž9©!˜<à±Q´:zÒ–Þ;ý)#¼ŽQ¸àúþBhcŠ!€07ÝlplÕhuÉ-¥òaÚ_iAÀÍ ]ŠMrµ#:ÃF¸M]ÒUt*ÝëþEt_ØrhÖ«ö\3ìÊ|¼ã½F$šI­'$f«ùcæ z}8üëvH̆'˜€G*$ÊäÕ¿5÷<þT›ÔÄðÍä—S4w%·9ãZçX]PEœ¡ :Н§Y5’Ë%Ú ‘¤ù˜òûb™¨è¬>ØÊ£±Ê8Îÿ^•¯©T¥Ê¼Êé$š•Û;1y'$àÔÐÁu+ÉÊ»w.:ã¾Ö±o4K*o*ôJ]@ AàÖ߇`ºÖlï³ôû»¸´Ksw©É-"iÐÏ[‡PVÆHg*:ɧ}Ø8îÌ»ÍÍ©ÉÙåe]‡;óÎOµ`øÚÊãEÕà¾Ò_!Âåúm“§ê? ¾øÏ㇊e·ø1á½_\o‰ ·Íº#di›ã ô$ûWןÿàþ+×t»+þ-±ð¥„ñ#:ÛÁçÉg’’JBÈq»`\ŽôåV4Ú»!akb›T¢Ûò>Ñ|Iq«Y,SÛ Þ2ìç$ûó^­ð_ö.ø«ûEéWwÿ ü5'ö-£ÿ´µI ¥Ã°;#ˆÈ$ªìûùWè·„?à¿þ¶Ÿ…o7‹5}OÄ3ÉwlÍÌ]aaL‘÷Q9Çn>“AH$þÂÒ5 Jc $- €¨ÚJ('ýZc<:\•qÊ*ÑÞ{¸N­Zδ­äµgåïìýÿ¢ø‹ãOIÄsgáÆO&âqv..¯1ÆÞ0»B|Ø2HFá­}ià_ø%ŸÃ¿øª=[Ãðê:Õå¤A,›R¹køl' ¤L‰#©PÊÌ0‡•ôîg”ñYY]ÚŒ•c‘’r 'éØðkR÷Ifñ¹’ûìp"†1ŒfNGÈçOCž yÕ1uªl켡Ãd8l*çšr—Kÿ–ÇŽ|5Ñ.~x¡­~"ëÆîFyn'¼ž%Håvbq+’Fâxäã¯jó_ø+]ìÒ~Ä—Ö·vÂXõi°ùÃço³Gq.X{ô×¥|R¹¹—ãõ®˜ÓÁe;ùy‘á.mÈg2ô*ß(Çm¾¦¾2ÿ‚¡|LÖõ-{Â:¶³wqá«Ýu#fò À™Ò9qŒ’p>olgn¤¢îz8Œd(Prw¹õ?üÛö‰¼øýû;É4Ó^6¿ Jt]ecÖ€ˆm,«Â•hHfõ}àt«Ÿ~#x[¿õ[M6mZò[(m,Ž•ÄÏ}+…ó®!P³Ä‚Df#å\NAáŸø&GÆðŸÇ}WÃZæ°úNâë·’W¬i‚mð£¨=_Ì‘A¶Q^ãwÿ%Ô~þÞ?í.e›[ð%¾³•o§Ážõ Öé0µ|䤋ò±7J﯇uªZ>§“‚ÅSmTžÏó>®ðìÙ¥ëÿÖ/ˆBrÚ´åÚÞ7 … ÇFËËå‹: s^wâ¿X| ðæàKêZ6«—ðÞ•áÇ®l²…“l1¡iZi¼ÀØD$7ôë/Œ7>'ð“xO:Vµ-û<ãQÔí§“JVaå­Ä0Hľ܆XK°Ü¸$sU4/øO⮫¦k~;µ¸Ò|~özzˆ¥{;‹Kx®ž)£BGïºÒrð3Ÿ.¬ý”µzu±ôX|?µ’’½Ó^žOü™ã¿ |cá‚þ+Ô#ø}¥øƒâŠõ-íõzÃI{†Ñ÷²´FQ¶FbîÀÅòPq^¡c«x‚K¯†^Ôt»³i>§­_É Á.˳*åÔHî-£KåD+‘ò×âm DÛé_ ñd^ ÓeKmOŶ[éš’iz>áí ¿Ò­´ë)Râk«–vóîf•?v—Ë!v Ÿ˜æ±|Nu []—í¶*±Ä^+9Ì…¼Ø)”°è?xT òB“Òº kþÒ¾éZÂ}[DÕ4½Ê+›M¼IáãŒ,‡;‰PYXàôçÒ¾LöÖï?k-[Åã-6ËÀ)ªøGDÓâS~ÚŒê–ÅîRÈ-¹ÖTwmTà“ZÍ9ɨ­‡N*„´ëåþG´|Gºk/ ,‚º|7ÚIÙw:pW¾IƒîkÑþ_jòü>ÒáÓ´íW^’õeº¸¿Š"`FIadÆÞ#x`õ¯|ã/Šÿµ—ÄÃáÙOàÿ˜o5{oÍe/“¬ž-®’L¿)"SˆÂgå8;pÇéïüxø•á­7OøiðÇÃváMChdñ ·¸–Kçµ” e…¾bÆlŸó`Ö^Ïž<®Z™Ô­w7¢ß»ÍŽðåͧŠïõm[SÖ4½[í±Ž=6é/-àƒ(–Eêå0 €÷®oDÖ¯þ(|mñ·†ü9¥Åk>‰s§Û%»BÄ=¨µWY‘ÔìrKùdG–;W“~Çž ñ?Ưˆ¾-ð?Å{í[ÂïÃÿ Yip\éy3Ú IX̪¹‚áJB¸’Ue—;±í_ üÿÿi ÿøI¼Oÿ ~£k¢ÚYL¶útq8Ýrâ+‰nX„ʈØйÚßìÇ%RNVîìojªjTãó×èeëß./þ"ØêÞ"¹·û>x#“Í q.Ö@vµU6ç=7öÇ>­â ËðïLŠ8ìÛSÔtЦ+p»rè#8Îé~$°øyow¦éçXE ¥lö§í"fp’³(Ápì»÷ ª V$ŠõÝ+ÆßtÙî¬ׂC 󈊥ÀRȲª’J‡òÉN@ žµ½)N¢÷¶8±8ociÃsÀ{D(ÅöBF[­×DsITzÔzYÿø™á/†Ÿ |IáÆÔb¸ñ®½§¶l­˜4ø%q¸v9£ Á%³ï_|Ñ­¼mñsÂÚN¬ÄÚj¾#Ó¬.UFìÁ-ì1ºàz£2“Û$óSüXƒ]´³°×|t$óüV%½‰¦‘ÞâEŽAI.á•ÞÇå$ÁI ÷ø$Áý'âoí¬kßlþÙ¥xN†þÞ»’þâr¶Ò7¯”-æp=YOUÙJÍ9nx˜šßX­Ei~½|ÏÓÿüM°ÑüIûli_³çÇŠZá{k«gñ)h]ºÃm »+ðK|Ñ9#Žõµ r»ŒcvTªª‰sÉ(®çèž¡}¤üD×®­|/7Ûàh§È7M xÈÚŒ8ÁÎx¦h*ø†Ó^šÞ+‹Ë«ÒÅõ;ušXc*USgðœ6}yï_xöÝøoâ?Bt¹5=ĉ‹› 5e’Óí›Qµã`ޝ¸)Ü@ ±5ôw‰~"=Fi<©|û8ueɈìûŒ…ç‘Û«M«sFÌßê‰ë &ŸÜt~Gá™ÅóIö˜™ÔÏ{¶dÜz9;Dc€2A>™¯0ø×ðŽþÃÆz»i¦GâË(næ)í®ckx™d,rǮᕞÏ9ªÐü^:­œºuÅ´z†›<Ã6sƯæ î`Aã œûÕÿ€þ5ð_Á_ˆ—~!ŸáE;Ãol‘ç $$d£0äÔ§ÊôÜÆ½ 85dßbæ¥sãøÅŸ|>ñj>.×ììì­¡•!O)có­àŠGhã…G˜ZFÄô¿£ü7Ьþ:xò û›¯Úê]©HŒ1Íkáõ!Ñ–2/æ¶d$ƒ´±ç[Ÿxsâ_Š³á«µÒ庖þ~̬ÓEµƒð$]Ù 9ö­¯øa¼mºU߈¯4¨7B ·µŽ8m‘"\€~Q•$’Ê[ yö­}¢§iHÆ~kÇ‘'å¢ððÿ¨Ô%Õ>êUãFгÄG™$x ÄîãqA€ÝF)ñ¥þ¥|sñUÇÃÝwNÔRÞ ‹ëø&Æë“ ’lÀ;ÈÞ ¬Ýà­ßõÇK_ø²ÃOeûEôwˆ£Pw›t²I!C!‘ú Ðü¸Åz?~ø+Äþ·°øuàCÒ![%IJŸdy &O”äA5¤¤ù¢Ù2§k(¶û¶¿#ʼ}©iÇ„®åŠîXí¤A³B­4Í‘ò˜ÑA-ÛëÀç5Î~Í¿µ|$Ôâø—¡xºÍ4½Cþ)ȧ±knd\Í¿³´‡a€2yzbü6kCi­jhw-Ú –‰ ¤¡Â ¶Å!H Áã ¯hy4ÿì¶šòO>ÙZ9w“±³ü*yÏ=1NšöRäîB¥VRN]‘ye¨›ïuË+MVâÕ.%Ê¢¸ÃáÁo.­§ZA5ÝÜ®ž\32|Ç›ic€Î3í]ž—ãimõÖÒ+ñöwh-5M/NÒn Á>–nḒyÄ[‹ö„r‚yô­dÔï48à‹Pþ̼ÔÚÝaUÒ­pòFŠ7òþP<I&ªk•«-I“—;QJÉ^GW&³"\£Æ#·ºÉ߆ÊJ¹#*}¨ö5§{m.Ÿղʯ#•cÊœLJÉС¼¾ÔëÉ’ÖY6*;‰f?&¾jéÖ-ãßOW󅙊a錩㨮d¹ÝѲwzß[Ǩݺlw}Ân·*îϰ9÷¬‹]X­´Rê*Í)Û¹l¶~è÷³žÅk4ka´É}+\FÅ·Ž x®8$g× ü«ÞàXkrI« x^€ãl…”íbAϰ®9â¶Šq%¿å4“PKVŽÖ  ™x8pNúI­6kc,ГæJoÑÈ Ø?‡sš4}ï\Ôl´ Æ—7ú¤« y’_# ÌyàWEâïêÿ |$u?O¤LÉ ­¼$Y¹‘‹žUTŒdä ™Î)¨·«#BVØÇ›SþÏÓ?Ñàeú¤î|‚CgÓ­R±„øÃQº7oio¶7¸3K2[Gò÷.xž˜ü8§kе½µÉ¶”ÃpBº—–=Bã€3œTñé°K¬Ì¼…ÁR9ǦèE;«hig¼‘šl&³’8õ[r$mÁ‡ÞÏ¡ 9àŠÉøâËOh7w7KgkbæS"ïPc6ÑÉ8㌚×Ôu‘¡D.µ …”ÚŽÛp=1žZùƒö„ÓüYûOêPx{ÀpÁ…©^µ¤×ð\yv¶ÖÀóžÇŽ*¢£ñMÙ9Æœ\šÓó=ÿJñÍþ¹§ÍÅé‚T ëÈÜHuûʨFv‚qޤŽâ­xgáêx?ÃOmáû]"[›ú÷Çø¯~+ê>ð–™g™¤\ýŒ¶Ÿo¼VËäDÊXG‚YɃœÞ´¼ºœÙC-ÃØ< ÜÇqÊþYb[n:©ÉÉ÷5àÿ€QøÆùÒî;鎧=Û2½Ôìb*íÂ"¢ä伌ò{¥’?³ÎªòÆ€ˆÝö…\r 8éÜéU9ì¡$oM4Í©4¶Òõi#Óf¸¶(ûY¤`%Q–ÊgŽqëéÖï‚#¶–þ8õù³a.YÙÔzýÎFOZÓŸÁ¶úF¿¥_Gªßà<×Và FÚID‘Ê€ØV$œrzãº=³±—Vðæ¦–z^—µî¡«¤iNP…X!Œ™'É  “€xéóò«½QóQ–‰½Ž—L𯄾.øŠÂ=2ã@øq¡é–Îgº¿–[™õRXäÄÁ\÷88ö®iu»Í>k­WDš+ >âfó¬ìÄbñqvÊâ(ËØ1 ®0µçÐø¦][dºbÀ´næ0êRå°Š€cרuËË4¸žÿ]ÔÒáïfó'Ó-VI&EÚ6bSØŒ äå“§¦›ôÜÖ4ÿ3¡ñ÷ʼnd’ÊÚñÙÚX˜b€Œ³1bê$–cŒ01޼xñÏö¬*¶.ö–É´¤J0>PrÄ“ÕF:qY·útš›Þ]ò(F#{`€;œœž½)ÚfÒ[! ü0•hã'ß=ôªŠQÐÓ»¨–4AÄÏq§Z] ¸óåK  «m;‚äçh#$sÁ5³¦ê’Zø~¶†Ñ¥ùîXméò#+œm_¿Óïc=* /Dyd·‘¼ß)RÖ]ï!Úu dpO½t÷«$zl)#2 Èr_jü¸SýÜç‘Mµm†“¶†.…ዟ^Ão"32¬&âÁ€ `ô㟧ֺë¯iÞ ³žÛV¹™õ‹)ÖÝ¡Ž$‘oÖ\n¨ÁŽ$‹#æ ³N¸bÒ;‹›ëy¤µAnâc&÷÷1žÿÒ«[øiæfÐ,¶–cå"?úæÜ3îr2=†MD›¾¯CXrÊ*=wZ•ôKw$WÓZؼsMm$ÄÉr>àŒË v¤‘ž)¶º,Zô®þ#¼0¥²µÍ”÷ò@sG À ª]ŽAùˆ=+oJ¸´ÓoõK˜5MÓXy Ùv+ï%@% ¨s‚qŒ×=ãÏxnâêâ/†Ö²[ mEo¤¾[«Ì)y6@ª‹ž9‡Sð½ÅŽ‹sâkOÞ]ì p°—ó0ɽ:1žkÂ>øXдýTxãZ¸ñ>©¨ˆ’'5ºY‚X¸†#37DÜÇÙ 1šÈÕµMkº„úŽ…y}®]ZÇ©JËŠíÚvŽp½ˆì+ Ó¨å¥ë¡ígc¹ñ,“øšÚ[y­!¸g“ÊEšO<“'ûÁ$g¦2jæµs?ÀÿÚ]ø²ÏMÒt¨•–ÆD)1Ì£Anp`qØæ±|!â¿\M©x³M³ÑÅÍÄmtÖ"EŸšC¹Y†['¹9㊵­x–oi­mâĽÓp¡b’0‚H$ÙÎÏ^O&´”^–ó6qu¡ËÍ?㆟â7û&ìj66RM¨y~qû9™Èl±à‚>cÜ`cŠKMA¤†)ä…&„“ùÒ3¬ÓEæ“8T %ƒþ|•æk­ê3ŸH© 4~bB›@Tg=º`qŠÝñlZĺ։â {Ë+¬/› n¨öë…p¿)À2žC[{¿dP—*Q–åÏjÚG‰.ãÕµË}JHì÷Þ[Ùivî#7«»`Ž5`¥äÀ<9Æ3YF³{«êº}µ®šú\W;^G$ÎLl[÷` aÏÍ&X³}Þ+©²½Ôµ.÷KÒšê+Kí5l䶆RÈÆâ|±ó)*ISƒÎ@ç+ûBê%W“µ´AJÆ$óU6¸ôçŽÃ¥CV•‹ç²²ØÍÔKø+OšÎ÷LÓ…ÕØ,¢òÚ9æ)Ý%»H;Šd㸦¦š÷¿g·Ôì.ŒÚŒE-¡°º(‹@Ä1š¡eâ[9ʮ̸ÉÙÛRŽûSÂGáÛÝj ¦Ò$º¿X^Öü¨xã #,®8p2TK/`s]׃~1¦¦×š§…¯u&HàŠágðà2â8@2;3Á9œ âÛÂv^.ÕÆ˜š\~RÈQÝ"3±LrC~˜¬é×Íâm7GðEÕõ‡…-¡¼¶±d#íSFÛcG à‘³s;1'·'“«–gÍBîöì¾i;‹£<<¯{·Û¡îÚ¯ŠdÔlæƒeP ðOQÍuµ?ÅüKøåw­|7Óg²Ómôû=:ØNG™4p+îGGpØ9ÉÂ&y®FšKh®¤·UÚ^3÷Ͼ:u¯¨MÎ<Û”+,x¿PÕ5]XJÓK8JÿÆ ì;sŸÎ¸@ë?• Ép2+Ò4í*-fɧñ ‡m¬%Ð+n,ƒ€©Éï\6¿níµÔê6; ߎk ÛF]H¿‹ñ"´µ‡ìÅ®>n¹1®inÚÓUXºÁ”dbŸâ-vâ *É !=A&¡ÜIg =Àófbr½rjá jŽØ…-"lxr95{ExÛƒ•$¯®Â×Â4»ò•#LeŽKš«¡h;Qu©ÆvK…hÔsœu>•¥vm,×Ñüñ®NöéíùÑ%b©Br³{·VW÷û¬• rrÜä’:æ®ø[ÁšïxCý—õ¿ èVú®¤†ÃÂöp{G²‘O›©_N»¤™É&@$ ãÌzGÆkؼK`¶7 “Üj'ìÐ#G±0åaÎvíLg¡$µîß|¦ü4ðõÖµy ¬úŒºzí0ࢬcd Ó ¸.qŽÕËí]ù¤ö>Žm*÷/ÍßKþGOðÿ]Ò¾|0С¾¶´ñgˆ­mÒ-OSŽÄYYK BY£¶R@]À*ƒ»=s^wâ¯jÿ¯×Zñdñ]Lì¢&Š;hÔ‚Q2z…m €1Ÿ­7Å~*žçOžòŠÒ;ÅŒÀ‹3HÈ¿¼k * ½ÎWyãDÑ<+ òý£S“Mµ[{+C’fù+÷ˆÈ<¶pñ¯ÍÏø)îŸomñ+Áú–òý¿Až VÀ³Ž¼C_à?¾›#®Wž•úâj÷Äû=2þ4ýZÒšKLgc¸… ô¹¸Ïq__·æŸ/>"[xnêâæþóGÒR{Û‰åÞ^êòîææD^*ˆÐŒœä–ô¨†²G“˜µ nÚùú4hºäºW‰/¦‚âD¢elÆ~mÀçc QBIÍÙ'sô›Á¼'ñÇQñÖ«­x“ÆÚ_†­mH±Ò®¯„shÛcÜú”s‚Ì›ÕT(ÜFDŽrXÏêjþý’´xN}J÷Kñ7‡ü(×6îêÖÒâWX.Ô HÄûžnpÒ]ÄÇ?ðƒEÕÿh›Ÿ迵§‡~.øz×ÄiRÅá;ìÊñCû¯(4`¤‘°0I7|ÙìMrŸ¶¯Ä¯‰ü5àßXè×>ð|WÓ%¶’êðÜ›:D†x †ŠÕ£tu,¯#‚KxrU9bºõÙ¢CJtÔÜúigvü’¾Ÿ;]ü(ð-Âo‚v~ý–?³oõ¯ Ø‹lo5R‘=À€ÉæÝÜà·ÙËeš@¥@ÀQ’qº?Äx[Á:u¶¸úìž›[¸ƒR½Ò"ûK]Gi££¸ŽKdóDz¯ªò,[Gçv…â?†žÔô7YћģHŽ/ßéî×q¨iãhíbXÌBÑîG‘È\Ä€@¯Iø%û4êš/ƒ<càûØõ{¶½}SS¸kÏ%tÙn7»y ‡D•ÃÌ×0PE]¥)7{®–GMÅ4ŸÏ§ÏsÀ><øcᇎ>ë–þÓ¼gw©é:­­†–4Û5šëLÒ »IuK£qWM ²Ûîy Û”Q’æ™ûüÐ<)ñDñ_Â= U¿¹ðt·6WË≡F‰öÑùhv1i È«æ©ùŽëŸxwÁÙ–Zv¡:éúD)kVl 7b)w+ÜÊAy_yÜ'yäõ¬Ï|E¶Ó~Å4vÍ y–ÞÒLò?ª“†flž§æ=+h*Ž./DüÎGtûm{þíê‹z%´º …†•ªê—w¶¶Ë2Y„Û ÂÆS;$h[nõUwcµ)< ¥Ýj©w4óÝizs\,v¢êE,êIg|© žÙ÷ϽyÏ›¬Gs]Jæeݺƒ'ÂsÑXM\ð߃e«Øí¥YN>Í«%¯ôö8|â/þ×Z/Œ¾2x§ÂãBðåÏöo‡ÜGý¥¨Ü2¼k†p¤`˜dWÎ )Ç1÷?éþ6ñe«Þ]éúU¦ζA$’‡?t3Œ’@{úùeƉá/оÓlüZÚ½c¦LcuÙ‚kuÍ´žYmÀüì'ÎU‚‚1’1^¡ãŠº¿Ç-;B´Ñf¼ðµúJ÷ê±Ú̱ƒ ÉÎÝØec’ íçæÅDeÏ6´ŠRZ½zéo¾ßçêxgć^&µ×/.¼Ui#ÙéàÆoæÛ‡ÞOs» ò6œú׫K¥êðÞ“â ¦öWïq´ÊSí,Nõ¯ð*ªŒƒÎs_@~оºý þøÓáïÂ_6ÿųØ%‹4g˵ÒLí…k¹˜€óv3šù‡Â:'Œu\øcÃ>›Pð§‡Ãé0k·7‰ ÄmÉBóLîÍpN06¯N¼ƒW‘i¦õ9êÒ³ÕýúLøÃöÏŠ} ã5ö&¼LmÀëzšûïþýû7Üx_ö5ºñ‹´ûÝ/_ñî³5êµäF) °€ {eòÜTr8™Iï]EŸì}áI¾.i7~¤ÿmEd&¸Ô åƒnÐèŸÜ!˜*°ç>µíš·Œ“û9m4éÒah<“óà˜EP}2?1]”*sÓåKæxï(â]i»v[œÿŠ>ÿgë¶±êðÝ[ÈÅÊ.Tð¤ƒÓœæ¼ÒËᆶò¨{B¶Ï¸´lóvå$sÐúT>(ø·}â="áü52Þ¥À""ǸçŸ+¸äšå®uØ­îá²Ô­© ×;eÝt’ULí™ÛÁì¼õÅm¤´:*N+Fõ=fÞÉ- d¸(Ä)\6â15±n‰'“~]Ì{?xNã=;~µçÍ­ÞêZu½¤P¥”Rªƒ³a˜ã‘¿ŒsŽ•ÜÁªµ­¨Šêíg &Æ0;“œñíPÒ“-Ôº²fâZ}¡'û8Þñ‚ ão^ƒëO…Œ[ÃHZ8˜«8ÆÔŠv“âøRmKÅr,—2|ì„ùlG¦þ•áï‰PxˆO”<¬Q£•ˆç‚¤s‚Nj]+ëШÎñ:T¾/m¾Öd˧®¯¯ËmDZÝ¡•U'9àõï^OñÇö”Ñþi¶ð¬ºœò­!U˜ä¯Ë·,ÇÌ€9<ñRøÇ~%ñi´>#´ƒI’tW–¹w„…HäüÄó´cóZ*|‰Iƒšz_SÙ¬<] ‘øŠâ+4Ëeù*ì£%°ëšüQø—â™ÎM\ûgEðxgMÒ4û+y®îV쑤rÍ;¢üŘýæäŸjí4ÿ†Ê4­VÜÛØÂæ7ŽF\fXÙWjœòAÀ9#Ç¥Ótżðý®«©Ë$ÞlÍ0Ç÷^nTí'î±ÁÎ:+#áG„µˆ¿hx†ïUÕõ}(éçCK[ò¦(ZDR@`3œrA8Åxj›½™õs« G›©ÛxÙøcÁpf%º:pGkF8Ù‰Æ|Ÿ¨ Ð¼¯iO6¹âÍM‚Ïn C‡ÉgÉ Á$瞀py5ÛøLÓ&Ó®Œ2Ç<¡Ô\;+„PdŒ©ûœ2°õzÅñööÞ ×nïçK¿°E%Ü«o"»[…‘èŒP•±Á'ŒéÎöFô§fÕÍ"O7EŽ=ݦ¥ògŸ!¶†ß»=ϨézÏoƒÑ|Cñ ðµÚß^ý˜Ýˆf˜³´HyÛ·ÌÂŽŸJñ^7øé§ßøà¿ \ii§Çq«ªj›~Øí;ˆ U$[ ¿nìsŒŠØý‹þ/|Mðn¾*ý¤4_í«ýfÖ?ìû=<[k:<~cMå’®ðέåžÍ˜ËkXFJíI[ño«ÏÜŒŸ7mZù»[ñ=sÅ‘Úü-ñŸ‡!ñ4ÐCsos ³ ‹Ôd–=üÊ‹±7¿6ySœUßü5›âŠîSI½60,Íqcwh™h 9hå^ØàzWÌÞ ×ÿhOÚYøã­gþŠÇV½]B²Ö5AÖ‹gÛ©òíV"²‚’,­™;)\Œ}eàK™ô;+3AWÔþV™M*Æn‘#EóeQ»~@Ï1ÉÀ*Õ%dîþð¡FØé¥Öß—äs äº.§à}+ÅÖzÇŒtè#½xµtHOÞ«ùQm;’™ qòç<æž­¹â_¶Ÿ¦¼0iÞ¼’+ÛÉÚ6Ÿ™²G Dsà ,_ºmœŽ7á¿€Ù?j?¾.ðåàÕüIe¥i^h€‰u8må¹”£¶JçíVñ>èA'œ{‡¯4/ÞË¢OH¾ÔtIÚ;اž<µÁI ©#%Œ›³ß5 Õr×UoÄÒj2$.Ÿéÿæu++ =ÖVÏ×·0‹¯)dÛ#Ž9Sóc*FkCÃÚmŸ‡í,Zæ5…ðQl»êGéX,Ó´__xŸâ 6†÷ZÕ#´Ó,¤‚_25¶‹j¬yóæ•Ž9$ŒçŠ«añCE»¾±>2¸“I¸“VIHå\!¸x¼ÅŽ7<¹ ‘Ì1ÖªdÆ¥{Äש©ø‚-&ÁÖ3[¶Ë 죪žãœdû×ñ#TO Eyxä±GÁÉÆ;®Iñ`Üéÿ´ønôíÂzÜÚëIY¦íòdÞó2¤ÿlW9ñ.òÃÆÓÛiÞºi,©¸:°ʲ«ÌØÂ„Üp88õÑ SÕœõ¡ROMµá}r-:(áÔ ­Å͸HÕ"l¢ðÙwq×µbxq/5ë£ óGènŸ1]ËúqQ[xz]sÄúƒÇ¬éVÑE ·—7ü|_¦q,¹P8ä’­ [[ÚI-ŠÎ °¶Ü±ÌØ16px=²OåIÍthT”4ù’ê-µ[Òõ}{Zž `1Ü”¹Ùç¯)eQ´9Ášé4[(lf¸[·‘ˆí—¥¼Iò«z±ÆOáQøzéîtË+™ã0Ûˆ™cyÛFÏ+¥Ót`öJmÀó$nÞ¿785”ùº»šF Ks›m=lÚäI³}á«*…ÉÆOJ脲iÞ i5&ŽT‚°€ä|áI÷Î>Õ‡ãψz´;Û½FòÚòK8¼¥Š7Ü s¹I^üsŠá|Gñ]^îêòHc¶·•=5_"W~' ßÓ\ÒZ¢yUvÍo ø°øu º^êo}gL½ÑÊK:ùV›jR’sæ;µT|ØÇ9LûU+}i|M§ØÞëv Ù|ǽ"B²JåÉ]ØùX€8œäTöz\±òÊÈÊ ©#f@=±Ï­?NÜ*ÙÜêªÉn­òv?.©cœ¹(¥kÞ–(Úé“_O7‘²Nd•îAŒz õã©%µ´K1Üù’^ 2[§YÉ2q–R89ëÍäXt[t‘Ä·­+$ñ$%ZÜqóÃu<Gz»k5Í„W?d†ÜÝY8ÊìpÊÍ´c“ž‡O®{Ö‘µ¬düŠÿõçðŠ­µÉì§‘­-î"A©¶‘ÀQæ# ´¿ÍëÅuÿ®®~"«^Üj±ÜÂ|¸’ÏO„´ 7íçž”1ÆsÉãu©hëwq-Ò4…JKm*„œ®àüTc®=«OUø™yâk§³¼›{ÈÊÂXTF²`d#”ç ¬T§Ì÷ ¦ÞŽÈ«ªhòÇo¾«%Ó´‹ yÄ&É(RC}MrúίsèZ±·‘¼¢C“´Ó>Ç=+¯¿»ŸS·[‹v[™Š}–xÊ„ÉqÆ;cס®7VÖí6èÓ0žÖ?4\0$deŒ+g#9ïÍkvÐÜ®´bµ¢ø¿Ãïf"jÐ\d@¹÷î@üN•ÐhÚ|’k¶."%ó2¸ÁP `Þ½W¯jMdë¾ðL+ÿð½¾AŠºŠÜA·s“É$ãoJÜð ‡ÄÞÜjPýšñ] h¼Äg@цù‚ð§æüFJŠ•‹’4žÊïs¬øu¢Ã-íØÔ¥XííØ$­°¸¦ÐÇë^aâ,Ç­Ieu ºØüÖò~|§ÐÒ»oøÆÖ{aiáÛ)%'ŽGt”¯š¨Ÿ¼ãvr¯Í¸q°kˆ½¿^Ô&Ô­Ì‚ ¥DÄ äÅžÈ*ÇÜõÚ+|=;{ò9¥´Š Qo®ki'Ùï.ž@a’5 Œm©à‚@êA«þ:ÔïuÍRçívðÝÌЈ#3rK,x ›ñǘW$ßšÌñž‚¾ñdCDÔà\[y± cË* à©Úyï×5»àÍ6ãâ7‡õtšy⻵… ²Å ÃaÇR¸è20zÖò§g¨&¡i£“Ôü8³ë;üa¤Áq©Ö´Kg";Q”Ÿûèg TMqoÙ­u#XíãòËv (ÀÛŽ Øö¦jvSé6–×:¼ö¨Á‘Ы1Vwƒ!Óqå·Ön„·D›xÎÉ lK3ùaˆÏ$g°úVrNìé¤ÛF6§w¨YXGPHÒÅ"º®:Ÿ7Ë’ÙÆ:T3Iý“¥jV£KYî/ìL“¼›ÇîUHÀ_-[Œ’Ìàë»â=BíòIä›u¶VÆLynø\g¶+ž´¿†W÷©9I-ĈU$òCTªHßx¿0ŒŒã"¡AÉݢ歌·ynnüÛFd˜‚3ómnX8=»)³ésÉdÿtvxá™ù¸!FyùX–äúv®²{+x¬Á«˜RHѾa:¹l+Æx9 ÍdY$†âæÒÞ_-aS2’…r@Ãqž£ŸZÕ]ùÎZÜÿÙvlfeat/data/river2.jpg0000644000175000017500000161524612237004736013614 0ustar dimadimaÿØÿàJFIF´´ÿâ XICC_PROFILE HLinomntrRGB XYZ Î 1acspMSFTIEC sRGBöÖÓ-HP cprtP3desc„lwtptðbkptrXYZgXYZ,bXYZ@dmndTpdmddĈvuedL†viewÔ$lumiømeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ óQÌXYZ XYZ o¢8õXYZ b™·…ÚXYZ $ „¶ÏdescIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view¤þ_.ÏíÌ \žXYZ L VPWçmeassig CRT curv #(-27;@EJOTY^chmrw|†‹•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿÿá~ExifMM*ntˆ(2˜‡i¬CanonCanon PowerShot A70´´2004:07:17 14:56:35‚šö‚þˆ'20220‘.’ 6’>’ F’N’’ ’ V 0100   ¢^¢f¢¢¤¤¤¤n¤è2004:07:17 14:56:352004:07:17 14:56:35? k _ ­ ô ô ÿÛC      ÿÛC  ÿÀ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?üÐ{µÔ¥ùl¡Á'Œg=ë:Mmíæäç ö®¦=>Ø+MjíŒí\ÖOˆ-š,¬Ç'9õ“ìfãdbè*–v“þû|«ÍkiÒ¿öhŽè]ò1þVÖu:vÔPv¹c‘’Ç¥mAn÷¶0£ #ûÄ*ÚæI7«)ß,p¬b/Ž ÷4¯nëjZ0àÖ¼v0ÀÑÉr¹lý*ÕË[X¿.$fŽÚ¶ÒVAËwvfÙi)©Ù¼«Œç OûTÞp[›{o,7 g©&‰u-öb6”oõö³àÛ_µ^Gw$HÑÃÇLfš—ól\b¤Ñè¾Ó`Ò-¢ší›³*3÷iumBÞ=:ækÌ9?t3g'Þ«ëºÄ0i-0Œ—)…ÁëŠà¥ñ¤šÕÌVvö¿4Î{s\*¼ÙßÌ©¤“7l<:|gc,—Q()›l×!â-M_ô¨Ý#'—ƒõ¯RÐõˆ´©>Åp«H äq¸÷ÍEã§±Ôôf’éD`Ëž+EYÓ—*Øš±EsÅ/FØÀ¼ -çh£"E·sÐÖÆ½›qjM¼s« VMb]4,g‘} wÓ”f´ÜóäœdÚ5lnÞ$iÕdÉLñ^ƒào†Ö~+ƒË¶Œ™¤€Ê ±Âßóãå¶Rê7ˆª¬Ù<(ã5õÇÂï ÚxKÂVB+1<óÛ'Ì-Ôf±ÅTXzwOVv`)}fZì:×þiÞ ø=aq`·:¦±+¤lŽ[ÉD8Ü{dúV_€ô ?j+­ÚùºÅÖbµ‘ä®ÏüÀúW«üKÖ´c¥:Û4”ùRÊ¡Zà|ÿÚwÑj¯n—1´-Î8óàkΧ^u)Êíÿ]B¢‹ªœWCÏôM N´¿[MU–8Ì¿¼˜cMñ?‡áÓæy Ža¤ù{¿‰{[Ÿô¤Ó5 uXÊÊÈYØ¿W->¡s=´R;(s°g8Ïc]Ôj:©I3Ï©x6‘³à'žÆIÄj¢6BQØu>‚­üYÓ¿³´m+÷Êï8igOå]_fŠï [‰ôø™‚¹Às×'ûÇÚ¸}SXOêæ}RdŽ]áHùz`§ÚsUµ´[’<‰_r |3Ôõ½õmÒk«+s‰^5$Dqßð¬«ÄH‰\n'½{‰þ+Ûøá”^ð,~pó.¤Fä³pz{ òm"}gYŽ+ó¶3*ù‡ ¤òkªŽ!Õr梶3ÄQ;(=J×Zl–Öi3D6‘÷¹©b¼Û6±œæ¾‡“ÂZ'Š-.4ý&Ú"–°*.„Œû’y¯ñƒçðW‰ä·½S°”xv5,L+7¬Â­ RŠkcm̧‘³;ºò~•õìáÒ!Ö|UukËi‚ÌKIs’Ëžn}«æ½'BBþg]Ü’OÝúWéÁ=ÃÞ/ýœt}=ÓOŠ)dºv Ê>ö䓌Xf¸Ÿa‡å·Å¥û™u6äÝ­±Ï|4‹Mñ—µ+‹»Oí+í2hà ;±¶.ãqb òA8ç#Šô-/Á𷇼S1¸º‚U¾ÊÅÆä{ùqSxj ½Ÿ‡šÕf–ݯ%¸Ù…ˆª¡ÀêpIü*]ÄiÓ&Ôu…i›–ˆÆ~RwNë_V¯;÷V‡ÒÒŠ¤¯»îUø©oއwÜÅ Žž‘µÓƒŒ`ª¤Žy8÷¯õ_Ù²Tñ­Ö¥o­ÙMm> .JÎ9Ù¸gv;c<¸ôn¿ª·Œ4mefÄwÓ¤’Hç/4Š2ª;íSŽÝ«ÁÿjÝFo„_Ù÷ž™neÔí'ËÂZ:0ÚN~öñŸÄéÀNt'É«9qPŒâê3ÀöÞ~}§4Û-,µ)ZxÌ 4@î(ê¤ôÏnµåÞ9øé‡þ$êê&ZÞD!ܘÀGþ;XšÆ»Ï|9Ôež]—ò…h„„6Ù8 ¸ì¤t÷®CÁ ®þ#}¢Qy­µ¸2\O;mD\Éõç ë^Í 2”ë»#Ë«RU9U2}'áÍÇ‹.'›@BVÊ1xó#a-ã.K1ï¸Ï5îºÃ[ Á’h·RË«øƒÄ–ë’Ã/ŒZ1êy-zçÒ°4m>ßÁÄqÍ&“*$1<, ê3ä…ë…<ûWIÿ F¿>·-Ì-*òÓKmVùvác´N_ûï‚zƒ\xÌtê®Hü+ñ;°˜HÑwм™î¿¾Ÿ„Ú6Ÿ¬Ñy°þîió"•9'°-¸éV<]~׺æ¿â««íË=!Nž·% ¹‘~QЀ¤ã ÊX¿ fŒl¥7ò9ïŠúžŸñ)­íínZñŸuúL»<ÅVsžcà7ëšµ›Â1Ñ'²‚9¬–È3„PÅ^;cqéŒû×-uñn}_âTwš­¼CRÕŠ%ÍüEš9Á‹¡aÀö¯j¸ø!iáTÓa*5^òñZ}òye‡eP¿ÇíØf…‡Šæ{ìd¹«__¼§ð£Ã3ø§U°¿‚Íõp`¼¸e†×LOú´ € g< õ¯­ÕÂjÐéj¬Ú}–y!}ÌhO“þ€+OÃ:›†Äº}°‹FÑíZXaV!dÀ$Ž8ËŒžzדkõÁð†ÏWÖ´èì$*oï,³[Z™A޻Е<ôÁ®J•~±>UÓ¹¼iΔT࿯CÓ¾"kš?|¥¶©CÁÚ%‰¡“-½£L Áûø8šá>¨ž9ýœt=OÇ*KêÈ»-؇$õ8#pÏâ+Í<[¤^üCð0Óî$²kxoQ®¦½,!2íRqÇ˼7¦E{†ƒ‡s¢Am£)0豺¸$Hü¢F­‘•@§o«{ÖÊ2¿Ås¾­_n©óΡ¦èµå¤W±âA[6.ð$}í÷Ü‚gÁ«¶~´ð·†u‰nákÝ&Fi µ2oó#(Ul`þ•åÿ,®&×'}âÔBÏ\K!,ÒË1“÷M€‹˜€ÆrÄúsÕø7âuÏ…üW¤øLÓmµa©ié¦NðºAÜC3߯Ápz 9'¥Ë{Üä¿+>¦¼·½î³ðÕíYá·hâ±»V«Ûnv‘ž¸Î* |3ñGŽ´«Çñ>….Ÿ§™¼¹žÚ1k$ËÌ3dä€‹Ž˜Ï5Ç|bñEïÁ¯Œ0Øøv[çÓî|ë…ÅÃ\…”„WÃ0«ß´ß‰ ®øaN• ZibE†Ö$wS©o”§,Ç{®p1–r›¥Q-Äšœœmªû øÃðÕü+ªiRKc¨éym¶ìéÉæ¼£9gutQ’A=ª_ø[>7ðøø^-þ—}6ÖK_³>¥,Š[÷ÎÃ(ªî˰ðHŽ•ÒüP†ã‹ý JU¸ñ-› ËÅly‘Œó29*‡ IöäqŠàh"M㌺…îò2-Hs*ÂÀ‡n§$c’Ät>õÑJ¢¬£ú¦DéJ Í3Êþ<ü.Ô|#®‹¹l.­¢¼ýä¡‚ŽNÊð9ÏN=+oáŽlü7†u¶k‹K @Gt˜f%6ç¶7 Ô­ÿhÙ¼eá?M´²[|M=ĵÔJ ìкîê 6}‰"¸_êöº›Ëm¬§•,Ï—*gCŒƒ®áÅz”á*”W´Z#ÎSŒjû›³Ô¾3i:d^)·¹ðnu¦èÚ•ª]ZG23hEG|œsï\ íå§öZ5Œ„L Üç$:Üñ§† ÜP^é:•Õµܺz ²Q媹7,@Ï¡¬=ÃpIâ+m-­§º¼–u…噽¡§Fôï}ŽŠ³šžÛœ°µ–ëQyH*' GÒº8&:„LÆA¸QÏN¹¯Gø¥û1x³àÍ´Þ&Ѥ:\ìXNŒ$…=¤ÁÊþ5ÍjW&8Ô[Æ!Ic)ž¬Ojºx˜TŠäw2©„œgï+~§¢þÍwZ‡¾"x~óM‡uì:ŒËmeÂùlH?+‚px'ƒ_©¯‡ã-¦©£Ëi§Å§Ãvšm£C(tžd„M0v8W µ~^|ñ çÃψ>¼Ó­ä¹»U¶’1»vç2„g“ÇJýB·ø“gá}6ÖÛLÓm|Wåy· :˜â:Ô‘2¹laT¹9ËN+ç3Û©A¤{9jýÛl¡«kð\ü=Ôä0j-gp¦<›]¡¥e=UqÈãJãüK{â ‹¯ ¬ÑÝê¦ 2ÉþXÔHÁ–ΨÎXä€W Ö>"Xø{Dšï õÖ›dmµ[¨rèY_qùÜ08ÏOS\‡ƒ>5Ü\øŽ{ËË˳dký:¥ ÖäìA)sÈQ–ç +ÌPrM¤vª‘R\ÊèùÛâ׉®>5|zÕ?á!û0µÐÁº»¹Š °HѳÇX'ŸºXýÌÖ„o)ñ¦µz<šŽ±(ãþXE]¬\ã#µÌè·)cðæÿWñ6—Œu%ñ Í«çͲ³˜¹´†Æ7«<›qœœ]ßì×áËßø‡G£—žy£šñÕI |õh#aކ?\W´Ú§OÉ#ÏKÚVåŽíŸuižo|ðµëÚK½’y–Írb[Èäd*xgh£uÉîä×Í>;ÖßÀ¾5ûe¥¨ð‰–ÛÊW ÐÛÜ¥ÄVÂVnŒ3/ˆè_¶OŒ¯|¢h¾·u§#N‘¢¨2&Þ#Œ)%‹–'$ô¦+Ä´¯¼ßü?i<`Ïâ}Ù­À/¬6q³Ç4ü‡rã°!}ëÂ¥UýäŸSßstß*[#§“Ä2ørÚ CÂw—©st’A0‚4ɉ $,yŒ¦\䑎™¯ñWÅm[Ǿ*+á­WX„XÈZGk©e’öå]Öª€]¤ ž½½Ä^%Ó´[+bñA¥Ct$•®×,òxîB–Ͻ«‰ø{ðþâ-uñ^—¤Ù[,öóéz‚»\3î‘7Ìœ–@O^ â»ðÑQNRG‘‹’Ä5®½vÿ‡9JòòëI-ãf·Ötë‰gÔå}=ÖtŽ,̼—9#¡]„ñÅ^øGûFh>Ó¯ã ;û½_RÐîot˜`˜JóÏa6İ 0à¶æˆaнað³ÄPxþ%Îai,Ý¡›æÝK mý~`¹`:cÒ²|}ð.ÇNðÌV7ñGp›–97 Á#©8,1€Ì2ǯ|×sTê.Vþã…)R|ËC_^ñLßٺΕáÍMo¼M¥øNÙŒd1\ØÝÊÛÚÉ#`TýãœoÇzôß…‡†¾kßð”Ïg-•¥“j]L~e¶ì `ÜNpyç5ä¿|O­h÷zwĽ ÜkÖv²Ü[Î]ö¤1(žZAò€3œó^¿ðÊ];Vý›¼Y'Ä«@SU‚êÃs³ª_ü™v ÀUʨÀ¡ÆMrⳋŠ=,I).›ù+xÇ/ñOÄ ‹¯Iy¦#ëVú­ÜnÊêê¦8æç¤´ª{lt¯¼f?ˆ0|iø@š¥Ôj5 )M•å¨@ÈÓ†a+qüîqØ‚+Áí@Ðt¿x‹Â-¥§‡µK;X`ß7Íu‰>wDê`ÀcŒåCð—ãMÇìqûJE¡ø’ÖÞ/øÅ¤Ò‰`wÛ-³·—,#•ÝO»ïdÓ™Ä5‰‚…8ê¶îΘÁa¤ê·~þ‡Õ>ŠöÿǺ¿ˆ5[6¸Òt+)c’a Ìì–á£E€¨B–#ò/$ך~××ÓxGàv¬ZhÖ q¹}Qo,CÊÊЩ…nQÎH\€p+Øaø›g¡xcUºŠn kF—l$l1É¿pó9‡ŽIáß´O‹õoþÁ°]êÂÖÓÄ×^O\¤€C͸\’J¯Îzpz×—Nwqæ[4Eò¹]|/ä`þÊ?±N‡û<øSÃ;ø‹-æ©®Ë5­î›§5¤mmóI€²!äm¥™EÛÐõ¯}×|EÖ»¨ùŠ^ä°”<}V2ÄlÆ9ê1Jèíu üðàñ<6×·h–és‘.0 Óª#(¸#œûWˆi¿Ž“d‹§iWñëޝr·S²“n-âŒÇq’2Œˆý8=ø®Ê؉âæÜÚÓäy³ ÒRŠÑgˆµµ³·ºŒWVÖ6ÈØc)°%a…$€}xÉ®oÃÞð.‚éyw¥XCe}hlo¢i͞ذuPGúµ,qÉ f¹ÚãôþÒ¯4ýjk©5éEš•Ì¢æiæE9ùÝC/Ì3Î:Wã¹%ñ\ú§ÝN.]®-!39šò0HÌ™ž\5iJ.jëD̤¥Mû»ŸJë ¼)ñF)ÝôåÔ-. xæû¢BqòˆÇÞn‡wQÍpÖþ!Ó~뺆¼kq+ø‹XÓ¡¼–R´FF‹q12 ñéƒÅs³WÅo…_æ7wwš”:L^uä°I,ˆb.Ç€¬§ŒŽGµuŸ>·Š¡Ñükðšî8lî"¾Š1®Œ±ÜëŒ: g*x S‡,½œäùY1›­>$Oû?ø*ûÁ_¼uáôE‹C—VkÛ$ŽBá¥vÂçî•Ìc#®ïÆ·úWƒþ0é~'ñwˆc·³Ð4s{{¾d×m’J!A.Ó$aT6ﺚùׯ´·:c|Aøz¨¾)þÌÔ‚XFÅâkëgŒå/]e—ý¦zW²ø*â×ã/„<5ã;ƒ¨jpx…-uEÓ&ÿG--»¶ø¦ÛÄ~[îäHÏl×<éÉZr^GE Êsp]>§«èMwáï„>"»Ö­$ÒYçÃ[\@›`Hm‚0T~‡Ž•ùýc†™`w(‰Èn„ý+Õ?fÍyíà«}GZ‹BÓ­%¹Y/ü°Böò Câ.>@v•ô–b)·³ý’ÀUT*©MjÓ^ü3ðçÂÏÙÌb´Ó|7g`!üé$‰`R%”½‡¹©õŸ€z'Æ›=/Xñ£^2Ii#ý–iX+ˆˆ¾Œ¬wqéŠïî|'¡ëþ.›ÅìSÛ5¾—ޱÉûµòá ƒn?‰!û8Ëø“â > ³. ’Iá¶о#Œ)8 ;¶ÓŠùú5œRöôXÈÇ››vÏ–?h_ÙRøvªx^I5 *ßÔƒç[®2K r Ž¿þºíàŸÿï´K­WGÕ ñФAxÓEö³¸RJúy€à“ÇËšõËOŒ'ÇzºYYB¶‘É•‰ØVî=¸ÚÊýT’vÍ|a‹u/„µX4 A¾Ïk¨ì¹0±]EáÊãû½@¯s ZxÊR¥UkÐùüu(ÂÕa½õ?L>*IiuáûÈoÒ;»›¥ò&‚än2)Øã#U\1èI'ùñÚ'ízv‡eö¸»•ÔÊ3ØÝÁ¬­Câß|-ð´÷ ›‹-Nt¦9y:•S‘µ‡bEw:Ôˆ¿³×Œ.'’&¿¸º¶…v8pYYרíbƽÆÜZæîy’žÇMû(|%?>Ã¥ê÷VÖPøž—qOºå-„î_ò°o3ò¿J|â EtÿɾÒÂ4Âéó¤›2ÏñƒŒ°ç¨¯”à™þ ºð'ÀMSÁš\zψ|D$d]J/³éÚu”³e’äÅ—ˆW–-ØG¾·ŠàÔu«ÍncäÚi̺,1®È®eòŒf|Á Ï€OO­|öiRUkJšz&{Ùtm‡„¦½;Ç_´­ÇÄhôVF’x'ž;™aBËÇT@§mÎÊ3ì}+·ø‡cº=´²XÃu©„¶¶.ˆ¥äDFf=€ÞO¹\k™ýŸ>OÅ5ñÍ´pEm´³µ€,vÆgÌ“ÜÙÜÅÂ(Îp7‘×Ô›¹¼UâHã°ŽÊ=?Gš(nXÊ~èC"íé»l¬§'ަ¼úÒŒZ„7[³ÔÃa\dç'£èq¿´GCñ&‘iàéeÒ4ï EöÙ§“km $2ðÀ‚»BöÏÌ;â¸?ˆ>"ºÖ|¨xÎÊúKã’d°°¢‚Vv?3©‹±Ú:pJë¾-y^-Ò.ÛL¸[¹µrñĶãlŠ ä³2#ÊœóTeð¯ˆôk3®Ï<–ºj ±ÆT´ åF3ŒrOZß ’oñ8ñÖ„Ôiõ8mA"ðþ™nºÌ³â[4ÒÕNÜ#:y̨G£(ϲ[:äg„¾[øcK’îòéÒ‹¹ç%ä%2 “Ü|Çê+âg…o.µ};^Õä{%Ðo'¹²‰ÝÎ Žd#޾U{ñ\¹ã¼ZZé–׿ŸÌº½—˜ç„Aé€'Þ»¡9&ŒkOÙÓI=Œ¿i–Þ}GW×M©’YD6Šçø›œ‘ì8ú×’ÞÛµºß^G(L¾Xl`¿=ãGÄ]ûÅzü §Ï$±Å1bîpcUÆ=yÍT¿ÓnêÚÜJ‘¤`Ȥ¸ýãgŸ¯5ìSÃÙ]½Ï)ãZ÷-¡JïFûv¹n·§ ã¯>¢»Ï xgû>üÞÅ&Ü[[›K~òg([FÉíUt­虜ŽxRf<Èìß3s‚H¯Wð/†m£+¦ÝÈ#½»´Bƒ–ØŽÓ'ÓµF"º·* ,Û”‰ßÃÃÂÚŒ·šú<ðB­ _f¼ÆÈPäùþf´ —Tð‡ü9áè"Oo.©rHÛcªž½§¨Íu)£^xSIψ&‚ÚÁÄÈN\‘‡ zàgR=+ŸðV…}ãÏŒ×^2’î#HÓ^È$G%¦$aJç+òŒäõÝÅy“÷•¬vFÎîEøN~Ôzö®ªE‡‚ü0#2ÊNŸº—æ ž¥V5Ïûþõƒû>Ûèº÷Ã[²G7÷¾,Ö¦€N¡‘•o^7‘½Œ6ØþÿëÞ&ÐÛÁº5ÈÓ¡Ïâ3<úµÛd yƒ kÙ±lÄW—~Ë¿¤´øW¦<‘\\jZ¥Õú¶ 1[ ºräv‰ÜO®=jÜ“¦Ûvµ‘´¥Ì¬º˜ß|e¥ŸÚKÐîæM;M¿¸yîÚ5dåý¼î.qǵq_ðQ³§jÚw„ô­1!K‹K••W ,Rm  pF5¿ÿ ð¼ÞÓ4(t+Èå×m§:ªÊª3u])ÎãóÄ8±ã¯ˆ–ÿ·?„´/ ü"Ñ-4û›[´ê x3uæðeyTFÌxPN3Ðs]YFœè×wåêï¢óg>"ñœ©·ºÐú7à—ÇkO~ͺv£a©Æ’›ì&ÜÀ˜ˆóý×@>Õùùc§jh ,tG#Í×§’+ØÓqŒ 0²dpvª)úW¼þË?5¯øk⟇õK+¹’xb±Ó‡+^°u.¾¸ 0ÏÊ£Ò¾”ý•¿eü#K˜-ˆŸQ‹r'vPÛ€ æF=FHÂŽkšŒèån´7¾ß2]µ(Æœ´×S–¸ø-q®jé=ÔæâÖ`«›¶ÈxùŽ3×­v:6¦øOI´¶ð}œi}l1#?½ïÇãZ$Òu+éLTvð¼ké“÷F;ú×7…ª[èW—AÀ¶l~÷§ÍëÒ¸›sIßC¢ÜmÇgŒmì4‹{‹ÖyÝ›ˆ‘r1œÁãß:Wâ.§«Icm$ ˆD²;ïŽOPsUµ T¹±²Žò}Ísß°‚W!A`9ïI ü#ŸCÖŽ©âÒÓ£¸U]ÿ)ÏÄ‘Qì£M_˜Ò1QÕŸ’¶÷ö·›.—Ë‚&ùQzÓ®¦”ÌD@nyè8®ÛÄþ˜È¡£e”``ž+ŒñM¬ö€¬ ¸)à~5öQi¥Üø÷Us;•µœOû£ë[ú-üÑÎPñž7zW-s˲$ã'5±£n›ËvÕã'œþÔ¶9Ô½ãoR‹í×\l~sÒ¬Ûxw6ÆbØ|ç¿Ò­¯‡šH¡’âX‘$\êjÓi-&åÊr€ä𨽕‘·#½ÌK½ í—¤L<µlîÎ6×zšL6ž‚+ ç%ˆÎq\±ÑŒÓCܰn¯Öµ<[tº}ŠM ª»²?**»ÅFæ´Ÿ³»e­SÉ–×uÝÙ`ç…“àØì,¼@TÜ _Çw¦°îµ×Ö-Ø,Q ^NXŒÒxÈE-Ýäê6ƒžy5p¦ìÙœª^IÝþ¢ž#Ô?â^áJNÕãÍrk™þÊ®ª"P6ç;ªÕìñiVªö¬U¤НSõ®|Ô5S5ú>ó÷ãÖ³Œî¶Crr\½Jº1ž+ÔRàc€i5ØRy@Ó«ÁÁÈÍ?R„Øê++“ÔÈúÕa1ŽðêzŸZÚ.íK¡¬¬gÚ]Igt„|®8ÈãôÿÁ ~ÿĶÑHÑ@ ¼‡Ó}kÁmô›o& –÷ðßν—öaôKøíï] ¤°9Êõ?…sãÜgI·º;2ÛB£O¨Ÿ¢o øEá1n¯fw‘ßî(íŠòÉþ"_àZX[;A  `7’rIõ5ìÿµ=?â¥äöBá-- ,>û)äŽÝkÅt/ ^kÚå½¥¬dÅtÁÈû¹îkU!y­|ͱp”&Ô:…׈î5+dþÔ/0Ænr=*7ۤ˕ƒÃy•ïÞ"øáÿ |:‚‰m~ÒAG™äÄŒÄèkçŸb ^ݤLÀøR9çÖµ§‰§]¸ÒÙU£*6Äe¬@B¢àœqšÂÔef”Éo€;ííP=ÛL6>QÛ¡©téÖŠ"!Ÿ#ul âîÎyI½Æ×‡¬­5+ £½¸’ÞG]Ê pÎ:è+ P¶’щ^Xr9Í_¶ÓÚáÏÙY÷GÏÔÒÞ[Éiþ¸«³ž˜û§éZŸ»÷*>òW;¯ÙëÇ7 ãíu ˆŽðyAÝð÷&½OÄ^Òš–^=‡Kº’ XG€e+Õ@ä“ÈõäWeÿ VÂû“}®8£³ñqÛÞC¼™d†&Ê $ýÜŽyÏÌkÌ|9á¨/|}àáã ¨ô‹6_·][–Á•ݶ¨nr@ãñ< õÏê‡Ä}gÇ”ZDrø{÷ii¥%È)ºæ X1V‘ò‚ré^&&«ZÅÛ«=̷̣:ß øwPKá݆™iá.ÚÞÓJ´TÅÔ±¤†Yå/Ô+œ ¿ÝOzàÿo€±|ðφõO ½†•§ØÜHÏ+åYá’ø@:–d9êN+áïÆkÝJ²¾ñf¥ ŨKs{qwq0Ùo oh–5þ-Àm¥…C¬~ѳü_ðšmm㽓P½/x""(  7ÃÐíPS’MsSU]hÕGý\ì¯UFƒ¥-[!ðßÂË¿†?“Dµ¸ûeêc‰$PΟì§õõ5•ñá´ZZÚYFòi·‡OC »y.¼’òç ?.`i<â½Fóã,’ËtÍg`óݲÑÎõ Œ¼W”ühñö»ã‹K;‘=ÄÓJen u˶ÀG8€[µêÂ5*Ôøµz³ç¹Üc¢Õ’ü›I·ø›â cÅV6·Zì_Pß'3.Ä\zŽÀAë^ÏðËÀÖ¿ã߉r\Ü\A(kÞåüÛ‹‡Aœwc¹Âþ< ã øì³á ?iÖúœŸ/"¶½ß/ï­UŠŸ•YpÉ´’rzgŠú¾)øu´]u¾é0Ï7‡tù‰ŸË­ RQÃŽG8ëŽN+,^"Ñr§{muå¹êað®4ä½ëLÌ·ð<ž7ð´kÂúÆÈÌ#}:ÞçbÊ˵ÂÌÈp`ã‚+É¿jMTé> ²ðTÈc“SžYõâmÒ8l¼x# ÜUBt#Ùø×ö“Ô¼}oáh|?żVvîÚ„r•U–p]ƒœc‚zZñ϶ %—‡/<=mssª^øŽÓP’d“|—1‰PÈ1ŒQÆk<'ViÉ{·1ÄÖ•ìÒ5üqcªøKöbK_‰z•ñ“T··/kÍ[pGnªKc’TsÅz¯Âê¾&ømà—Ô®L0Á£Ey-†æßuxÛˆY•~÷Ê“Ç=k‰ý±¾#h-¥jðèú}Þ£uav¶Ÿ¿t[‰§W …@ÎØ† Q×#·_©þØÛ|4ðU–•köydÓt•·¹¾˜íŽÝRÎ廞Àu¶&´©BöÕ¶Zqª›–Ý3Ð~jzV‹lþ+Ž×Ì”«È@ ±ÎH§œ¬Å‰õ¯’˜¯Š)ðeô¶3G)ŒÊÌWlxÚÇ ÷IîNkÉ&ð§qw?b»ŠáU–XJþœû×»‡Ÿ4m)~G‘V›Œ”£ôö:ýž4‹W¾øÇmáÝJØG¨Gh¶«7öu£F ³8à;m,À>¹®7ÃßôÿÁIµý6;)`ÒÈå^A\c9å°z«ñƒöƒ›Å¿µµ×Œ>ÜÞéƒU{T€<ÛÚŒ"";tey^œšòg…żDÚŸºÓ^_qîÃ0¤éÆ2†©«/3Ýà¡—þ#øãÛø}.›Eð½å´-fs°K°‘ãã`Èû¤ž}+æ]CLšµµŠêp߈vKñn(¬WîFC.p{f¾¬ý«þ"Û^|=Õf‡ìVÞ!ñlV³ê?a¥K‰-£(YY°Qe±>õò&…uv5¹ Ô­žÄm¡Z"ÞSc‚À}GáZdüѧÊ⬌3NRæ‹Üýýÿeÿ·ÃmÅÖ²¦¡¨ê0K«íþV•¨ 呾}…[“ߎké=^+¼/¨Gá¹-õ='LŠÖÎÂü% Û›í  <­½•Cc rp+•ý†õ_‡þ#ð‡‡.>Kx²iöM³¦Íh±‹[’Xž¢F?{<àë^‡ñ—â‚þ|?Ö¼Sñ:+  xfÁåk†·Ýup{ù’þ.+æ3Lç^JmÞç¹K•QN/Eä|Ëñ¶[xN]É$ŠïR´ûuüãåÂ,„º(Á>ä×ÉŸ³ž·yâ‰úÌš­ðy/´Ë«5´Uóm]•šG9áâXÓÎ7+Ôþ-xÊü>:×Ä©å³ñˆtø ¸‚Ùsöo8Þ4~Ÿ Ä`ã#¦¸Ïƒ~µø~º~—f°Ü]\iRêzÆ«ïÌ1‹{TÚwÁ|ç™G¥zØ4¡N\Û³Ì¬Ô¬ÛØ­ñ·ÄK¨­úÛK¶ÊÚÚ3-¯Ê¨J’<„H×{ãµ}uû0x2o„.uÍr—w6vò,eØÜO ˜Ç}¢1" ïÛ½|‘wð…~"üN—M‘g¹}Vh­ž6¡i$Uƺ\vÍ}ë øßÃ:F·%§‹µ[mCMðõÌwŒ>jù‘ȈL/80QçgµFeQª1ŒzR9¹Ìñ?ÚKÔ~'ÛZYi–¯®[ø ø[¼ñ[”7Öê¹Î6´­#I¸p 1ŠÍøƒsªxgB³O¸¶…­âK“n£–ØrT—oõ’1!G €kÙ)\Ü¿&’h|Ìγ²Å7Pª‘®’r7LZí¼à‹ÏxLK$†DÔ¢h2°’kÌÛP¢çs…*=3ß½pɧZØøjÇXñ΋os.«ªÇ•ܯ±pÒ];B"®í¼üÍõ¯Fø_©Üx>ÃPÖ>"Å¢ßë7—i¥Ùö”[MÌ"šD áv¶AÚ ?‡µRJ1÷vì|ûƒƒ´¶:;][WÐIyhÑØ9˜º2©\í ¹ãØ™¯7ñ®Ù%Ⱥâ3öYgy1n@p3î1]Åߎ4MÙíìuûnîõÐ\M,h>Ì ùc<ò3€{+r}‘´´í>eܬ«æ?âa“‘ò‘“î0+(I'ÌÕŒå7¦§˜´ÞÚÏ©¤ð%Õ ŽHä¸9C6Ë“ '<)ù±^¦ø¾={ÀwzN»nì$¶xö?"pÅHë»!½¸­Ûø~âïH¶š#Óͼi>È ¬í¼4eIäa‡9äíã³õWAÓ5¨¬`´º‚F/äÜI²Fs–@[îÁÆ+“U}ËhuÓki©;žeû@Ùßj¿ ´m?Â&]- Ð\Z0v±f•"vr8_ÝÊÒ`s€;œWŸÁEµ½wÇ~ð‰Í¢A¦Çqy5¼ñœ:”FC÷C4y^3Á=+Þ2è·¿~ê:F;Ü\lF-`šDL¼ˆª…rÅ‚I¸ô€ëÒ°òös‹¶‰ßï:êIb ï»VûþÜgÀÞ¸ð·íeÖ´ @,D&$¸´$Lc’àŽªzcÖ¾øÑâÍã7€tmCáߊ¡Ô¤¶Ñ-ʹ"ËE2 Çȉe#§#ù}à;K´¿´\­op’ È2GpGÓ5ú3ðUlþøÁƒ¡½¼7ºM­½ÄÖgì·WSH¥$œýÓ")Ã62@ÜÙ™à¡EªÐÝô82ŒeDÝ)½CéOßéçö~"ºht2îB.XFóÄÆGyçÚWf7(HÁÎ3žÕç?ü].ã ­c´ºÖÙ%¾,% ·uÔ¬ê]€<°HßéÀô®dé Õ<ã‹=t­¥žªl°‡%šà1]ÀŒ’6»ÎÄtÈÀZûhÚ kv—om2jw“A06ñ¥¼J¡$”ºG8©ÀÃdúøTã4åÜ÷ªVŠŠGƒ~Ð6:W‚/ź¹–þëÂÛ Œ±™'iî%Á$nóS'î„ÀÆ1^ËáßC¬øÛáÇ‚~–‘Ú´ÇVÖ-§{Mqy§ó8- £hÆ|ÕáÛÝGö‚ðÇŒ4ßfµ]jëN(ñŒÁY.K²Žû6Gñ=z¯ìEª7>|9¼–K‰Þïà¸äek¨,虜$r2$1¯R­9Ó¤¹žß©åaëºø†ÞÚŸS|dý“×Nø{âëÿ‡úuœZ„òZ4¯e_1LfC‚¹rbPp8-Èï\§ìÁá‹í+À¾+µÖ/$@êÒÙ¥Ù# ‘îF¹åŽÙê5ìR|IE·KmCV¶¸[ÛȦ’Ù‘™—#‰ûªªF[&¸/üL³Ôþ5ͧü4ˆ%õµ„“Ì€~êV242²–\ÈR1ýêòÕyN. õåMÊJ¢Jèø¯ö¹µ?±¶«4Ô ‚}>å®,´éˆ”êê@KpÌ{˜ÙTÛÌÀî+éOØ;Ç'^ø;áë‹=]®ü3 …ìÊò79Ÿç·~>g†fxøõïówü¿ök×þ$|]Ÿ„ïluifÓÝ'VÛo ¸L?• Kø\òHÀêp8ø%ïí4߈ú¯†~.kšföp,­e“ËHîÚB$9=>P2½ËÖ½˜ÑŽ'Í{Éa*˜ldjÙr>½.~•|ð•ÕŽ‘Ï :–ó[ɵAPϱ¦i›c#”99$8¬;Oø×â_ǽoUÖż~‡W†.8¥hšâ"/$¥—¸‘‘qœ¦{Lø}t|¥Áf³ »MBd½š{…W.|²¨È.ÍÇ9íÔ+ð?Ç Åø[qy­\[h—ús\Iöè]/bW¶¶«’Çåf07˜pM|ó—¾ÚGÒ­éí{ž]ñJÆËৈüSã¿Þê:ž±s¬:6¥j ó;öÙýÜ‘Æï•NpE^ý‚<%â_ ü5›^×ü]{ªÝø—ÄMâ)-#1ÈÙ0Ò- 1 üØæ®Ü|Ô¼GâËïYÊ5 kAðö¥§ÛÃ)…ûMÊÜŸ0ÚE ﯘÙë[Ÿ|1â~Ï馸¾å ¹}JóTÄD‚pR8±ÂîT—oa[Öv öoCž4•j—ÓúüOÿoÏŒ×Zwí¤Ïð¯T³Òïu[iíÅþ›v÷w0Ç4±¡Y¢#¼m0‰ f ×$fßü™?áf~ε¯ê„4MNïIH-–Ú3h’´Ê>"Ÿvps/¾*—ÀŸø'}ÏÆë CÆ¿/¯,t[ÝBõ´»K¤‚÷T¸id!™XT‚@#.HÈÛŽyÏünÔ5Ÿ…þøûFºÔÖçÄsÜi:½Óˆ¦Ó§D]dF$u1g=΂½œ4"•(Rw”ug™ŒŒ¨U•J¿ ÓüŸôωäXôÝNGA¸'ÞÏAïùÖŽ•gíÌw;î*zmÁcòCÄv1É≢e{a#PFô¨[[m:) ° "| â¾Ê6iXøY§ »¾§Õ¿ ¿kÁ¬ÃgáÚ$—s/”u0°YÑ0ùpY› óÎjÿ‹ç»»øaâ5Þ.äÓ.m˧ÊcåC<¨¼e—d€uæ¾Nð4sëzíº,nòÏ F°< Ækí?êzgÂØép˜.n5%†)Ïü¶C m5Î{ f?ª}+ÄÆáᆒp[žž:×ç¹òTß5?‡¿âò奵³ÔÂÌŠß»{g‘ ˆ1ÆÝœ;¯¨­?ÛáÔÿ¾6ë2iw±Ëgâ)$½Ó®N ˜ß“ŽW' èzÏÄ€£âÿ‰¯WDÒn„ÛXî- ÿGŠ?)Lk+w%ƒŽ9äg½xïísªÛøÀº7íf´Ö½™÷÷Ã/¤þ²µÒd‰<=a£YØÂí÷e‚Þ2C£gÌÌw¿…s^ñ4aÔgðE·‘á¶¹h¬"@Ùº‚²IÏ©’]ø=6 #­x?ìÉñ£þOƒ÷ ÚítÓ5Á‘îƒ1šòÕܳۦÊå‰RÜm8ÉÅ}ã)~h–>ð¿`V^Bº¦(@U"%,?™¯µR¨Ô÷¾ŸæzXj±$¢õêWøföþ8ø¿-žª‹qá ZK{­Ü}Ø•˜hwI;V=Íéµ:1¯ª>%kðLÿeÑí ŠÃH³OܦÐ"gdgoïŽÛyë^ ð—À'áÂ×Ó¼;$^~±2A4ò~ñÌLá¤y: ÌrO P®§Zñ¯ˆuÙe’©É/q²—™‹Iäôÿë׉^Ö¦›#էɆ…›ÕžYÿ(ñ4ó~ÎÞ¼ð]âY[ÿlÅØø l³ç’I“®}}0+ókE¹}:+Û;bwÑEÝÑWzž?ï€>•÷ŸüKI“Ä_ ô+=2êËNÒ`ûEÌ6 2É(M­0uä)Û“ƒßðrZ4¶^}¤d,N’9Q† HnnCùÑݺ§+œ ™œ|Ê9ÚsŒV¶&­+èÛÓüÌ2ØBucʵêuÖ¾ ÓüðvoxÃe ŠÆªÖêcÛÆAîK2åÝÛ9È\žÕ͉´}'K·ŠÊÏíOy2ÛXÚ±b®î»v¿1èÀÒxç℺ƿ¬ÚhðMi¥é3ËX>O´8ÁcƒÏ.äg¶ÓXÛ[\ßYÝßê…¾¼ö7#G†w6ë*”n2*ÊÃwds“_7Ìá)=Yõ œªMSв‰ÛxæúO‡?./¼JñjÖ‘yÑiðÀe€Äh˜<ƒœqž2zÖG‚¼3­x àœ²^é·7Ì¥ï%V´pOœ„º"¶Kõ ãŒq^‡iðëLñ†¯¥]ëQ­Í¶…,–ööj˰¶#•Á?u#Œt$÷¨ïÞÝQÓô+{Û‰!U/4YöªÃ#Ìvyà€yË 8ÚÚž››I[dyçß·ƒ£MSŶ÷[ŽÆG1.Ý¡~s× Ÿ§"¹¿ øªÛC×bÑo¥Žã]¹q-ÃÙÝ[E»rfä0§žk¤øŸ®h^ð=åí§ö¥ÕÇž±4Ÿm2„f“aUi #åO5ç¾ð}Ï€|.fÖoá»Õu(OŸ{*ˆî;¶ÆøêHý+¾—ï5“ô<¬Eù}Y“ñÇVk­.äÞªJ–ÄÈÑ)" p2GL’=Mx5ÄÙöQÊÜ\±ÜΫ„ÏAŽ§Ò½^Óï5ízúÓL‘M—™ %-É‘¥(e89ß– ñšÎÐü1§kZD×ú”K‡ÌW™ºpã©8õ&½Z2öQ\Ç—]ó®Xìp>œæHì5Vw“¾XÀò‰<:äžjk…ï¬\Ü^\%©û4fÙBŒùMœ’3ß©ë^ƒ¥ü>Ò/-4Û÷¶Y—QžE¶iÓljÑ‚Iqü'Ž:œâ¹êóÞèz­•³Cc{qr-¸;œ´ª6Žäuϰ5Ô±~ë0XYZýø}á;]¸^;¢X¤‘c´¿@å§lýkêßxwHøSð{PÖnm퉌 ±ïšE$nUô éÉ ×›xà]–·¢IwªD–«y|škÎG2*ƒ3…QÊ©3ôè_õY>&|:·ˆ!µ‚K‹«¹¢6ç&[e8·B{;Œ5ãbë¹ÍYé}O_ A(]ìÏ ñæ­¯øòSsª±’Êé’5$˜ó)ûªóÅu¿²ªi>øQs®7ö›[ÛÈ%¸nܯʤpœ/à1Ò¼«Æºn«§ü;øƒ£[ks¶­i<wBÀ½ŒR°ayUTo©ã½jx+ÆB÷áÖ˜‘Ü_Xé·W³Fˆªýž0\ÌøI`C=ëž+©§(rÃkô8kÓTåi.¦·ÆßÚWˆ¼®kÞ´ÔmeÓt›„̓Ò3ª!SžIÉ÷§þÄ>-Ô¢ø§Ÿ7›4º‹Úií Ý,‘6éŠñ…ûÀø¹âkMQð.¨|O,šÅÕ¾Œ5kiã0À\ Aè¹ ƒõëZÒËYƒSŠ}R!­-„ì<˜ +f–¯N2y<Öuå`à–Ïs¦”#9ÂçË¿·¶|oãųðœË}tKNTny<µ8Q´žà1[¿ðI+A'ÆjÚ§ž –‘6¤òæc?ïñÕ±åíôËzó³6Ÿk¨|yÖíô•+{¢é×ÒÁ2 Ù¯Iþ&iy?Ü5­ûx{\ø.þ6Фà’ÂÚÒúÖüÙs³J¨ç÷ç’ãŠô+T_PöQZèsc({LR—m¦~]/ˆþ%ëñFÓA3YµÜvNãj²Ê7,cø[÷Šžu¶×épêïy¦-›#ˆm•¤ËÊ£ CÀ“Ó¯ñ_ÅŸÚë@øñàyôû…Ó/¬õžöf,°ù2L‰!ŸiB˜Ž˜ööwÄ{‹)õ»B]KMÕôAkyà¸Þ—CNÖL psšò*Pœ$£5k«¯ë©¯µƒ›EñÝûÈÚYŠÚÃ%’&ÍÁ=c¨Ï©ði1Á¥_Ãpí+³K ¸ÏÎwŽÄ1ï\•ñýüEu1‰aÒc%²à¸Æ0{ö8®Á/_Ä?¯SM½h¯/qt³\:“…#ׂHúT5Èùmó-ÍJ\ÌŽÏÄ~³‘5Ô´Bb>XIùÚ .9玵â¿þ,ê16‹àû›«ÅCºI¸À‹ÇÓ5¿âO]NÝ­î%¿œd¹)Œu=ë™°ŽÞÈ 8àŒ«—óÞ1ÈpxT=Ï9æºcN1÷¥¨9Æö>,“Ä:\Ö“8¶”ÈÌFæbOå^g¬´êrŒaÜÄ!V¥åô9mv–ç7 ˆXéŠÑÑe„D<¶mÙÆÁÚ¤—FŸZi&ÓSq€|Ù玕oBðÇžžaŠ2sÍz0v^ó8'nŽœê1ÿÂ3 >VÙPî2·ò“s¬_M2E©Uã‘Á­4dŠ6Iî±å‰)¨'Ðä¶ )‘pÝíR’¿24çsV"ñ>½uma Z¨Ïíõ¤m.mMSÈxÇÜcÖ´5-"Ñ’Du3¯5‹'ˆî­­LÛ¥~ Gõ¥¹|+R¤ú3k;«{ÙžUä (í]„'x,•µ‹|ÁIå%±šKhÍă|Ç<=ÍmMs¦µ„‚v)-…ã>Õ¼•š2ŒÔ¡q,º‹îšVnGeZÑ‚Õ'ˆýž0I\n'Ÿ ©m-ãÔ-CY‡XñòƒÐšŽ;9 ŽG•ÄxûŠ:ÖNKchéËjÚSØJòܺ‡ì7dÖc\l‘Â#¹n£¥vw6-5«É~ÌÜ*à|µÈOt©+¤îÁò@ãôªƒOb*E¦®%ž¡$~ZtÝøÅ7Z^©±ÈÆ™Ë7¡ë\ 1¼Ð–ùsœ[š=Å‹G#7˜ÍT’q³NWº>ƒð¿,<]Ø(´•¢$NÄÉ=zsZVÌZ²k:D‘Zµ¸ÃÆÒ¨Žz{W€xo_“Ãz” 3 †<‚1Ï×Þ½ ¼a‰¦†Þ[ë×^¢¹‡jòªaåB_ºz3ÕÃâã=*-M—1k÷&Ÿc,ŒóIÀNKÉ‚˜ë^9â^èŽu[YóŽ[œŽ¢½«ÁÞ Ð¤ø’ל²I.›KBH ¯ƒ–9î3X~2ðìž+Õ„Û¥þÌi˜«Œ¸Ÿ˜ŸjÓ?chôݰ¯EU\×»þ·<]½Ë$cnðF{V4ò`ùc\9é]'Œ|?‡µyãÒßí Æí»z÷ç­söW)g~xe‘Ÿ…gé^„**‹ÝØòÝ>W©³m®Åd3%uÁÃt¨oïd¹`Ù¹ä¼=³]ÿÂï…VÆÂëÆ_,§O hÄ3Ƭ[é…XS¿$ä‘Ð ô‡Ÿl5g_¶ø]àŸ ÜéÑ.û9µ{$–êÝ~Uò÷r3¸’ ë^}\|)MÂ1æk~Ëæzôòç(©MÙ½—SÅ<+j‡V²’x³JËpn†ztÏç_¢ß &Ѽ;ðîÂßÂ?eX„AȃqÔ’Ey ŸÂ“ãÏivZö‘n-í´Ø§»†ÒŽÝ.ùÕF8É''Ú½OÀþ Ò|—ÿØV°@¶ð“yi Bw8>ñ¯3Í!ˆ¦¢ôò=,6ê÷Ièyßí©UѵK»wšø$ú––Þy ªäÝL‹ùûWÍ?i-HkZŽ£gZO¨Û`ÉÏ–C[¾âO>µé¿iÿ|j¿û'†´¸m¼1¢]ù}ÂD<å²WWšBíÎç)ŒÅy•oñáïŽuK­^îÖT6L#Û2\ÙA“õ®|&¢§Z:~W*¬ª>Jm¤pZÿÄÙ|Oð‘,õçÑÝG³o9‰I^ùÎ3Së~;¾Ãšu¬± – ec#@ÀFp¬{sÍKð÷á—ü%c·…$'ärçsœì1Íu¾<øCy¢xŽòê4†âÂ[2––É&÷g¡FÑï“ï^¬ýœ$£ó<ت•#{‡ì¹àY¾&xÞÎÚÚ(cµFûEÞèWUòݲ•}-ñ¶Í‚ÞÅ.•PµXØ.Æ@1¸w\ž+•ý•¾ÜøÃÖ‹©¢Û_ÉyðmÃüä“ÜÛÜ×]ãAcqÇã™Y'ul€»KmÊ?3^f6§µ¬”6G¥B§MAîy®™q5ˆ´°Óãžk«Æ6ÒÌrâYÕ…UHø5'‹< ¶öZ'„þy—ÕΣ-Ö¥©]ƒPù8 ‘Y™Ðj÷/Ù×ÀÐOñ_RºÔbýÅŽØ]Æã$®¬X… ®µ]ñ—ˆ“ÀöLjm,`7qù¶6Ä?˜Âª¥‰ö,p{†ÎzW lTUNKÞ Sö‡j?ltÿjCû:McTñ>i6‘CÍ0Ü+yr!?«å’Þ•íõûOÙ×öLÔ£kž¹®é.mmã˜ù‹rÍ’ÎO$d¯^?û-ü/³‡â†‹­)µ™n$·62<„yÎÅ·…_ïsÛ­mþÚZ|_¿jëvœ\Káïiݤ3 Ú˜-°É;2ƒÐæÄÆ)'æþ] ©¹Zï¯äpŸ´ÿ‡ãømû0éM"Õ­l¬í`' p†n¼òÙ?¥s?ü]¬xGà…„öѬ\6ï¨Ü;/Íu:±ˆý‚çú×CûAxÑ¿k?„þ ÓtQ  Яî!¾ÓŠͬjË…ñ† ´ôÏPJÔðÿƒš†¾ð¶Õ¸Ýy®©Bä ú/Sî+Ò®L;S^÷6ÞG›˜5R·f½–@ŒÍÔ&ÂTd@Ï…ëã?hþ'ø©jºW‡<9£¾¬ÒßΑùº´à£ ˜b<íï'|WÎÞÐï?iŒº‡‹þ5+Íe=јY`¯ž€·ãäLcž§5Í N´•9;B:¾¿Ó;©Uö íêûö>š»øc«ÚÞiBñÙšk=BVg(öqǸ+8ç‹7ÉüEG¥bÅðÆãAbÚÛÌ–SKoo#2ù/,K(û™Æîø­sŸ¿k‹;OjºÂûµÑõ®c¶½X# 5ô‹c‘™—qD #8õª þ+ê>+ý›ôïxâS§iz.·gc:¬¥Wšòqhe rÞZÈìG `“Ò¥*´ æ¾3IΆ`Úkô6¼!á)_âÖ‘¨kwnÖ­t%uŽ0ÛCe î újú3ÅIe©ø#ZYïÊS,F9Ûkn ¤yrrxéŽ@ñf‰ñVoüN¾Ð¼N$µ´Ò/çµµ½”¸K”RXõSŒç‘ózWÒ^9¿}?áÌú*/ˆÒYÒwYŠ´pÉÀ;T$*;ãŽ*ñp””$Ý‘ÍƒŠ§)RKTCðk¾$ðM—Š÷NÑ|?§E",QZ`ˆ â6åhQÇO­qTŸ´oMEþg»MÆŠæ’þ»Ÿ9|ZðV«oâ{fð=¦µ,/%åÞ¤nJ¶´†ǘ¹8 K ùzííX>Ò¿³ô×IJÛÏiop·Clâ6•”3)Ü7*~™®ÛâŸí¤øcXÖ4¯Ũ^]-¤¶³__j4RApÀȱZ€o‚I'#¯”ü1ñ:OxîÁ êÓ麑övtF x㉖ã<>å8îEzÖ³ã=/ÅÚvm,ÏÙÀ³ÀøTS¥6ù˜åŸ,AÏ,Eyˆø'uñ3Å~Ò®`…´ý8ZÅuh\&ë©d–YÇñ¼Î3žª§œ T⓼ݒ1IUVƒÜÚýŸ¾Éð÷á‚k^=º1]ëö7SAò¬mu,‘€Œ»»GËàwÒ²¼'©F4ÝOñäÒêZWŒ´×C+XQ©‰N¬´LÚ¥jt²ŠÕ}ñ2ÃPмU©hÚãÊf±¼’Û–ùˆRqœz‚ã\Þƒ­ _´¹¸Ìò'Ž@Ê¾Ö †ÁÆô&¯ëóÈò›‹‡ieó?zÌrYˆÆIïUtè£1ºšíÁ$Lt¯~ŽJGˆ÷§Ì´=¢Ú4|Jñ®›i%ŽŸ§=ÕþÙ­„Öê +8#0’jx¢üwÖdðNö’ݪCpïæM3•EÞäÉp@P8À×êð5•ËY%l¤‹Ñç«:6·?†®ûG”&£h¦ki6îòçA¾6¡*ê§ñQ ,)Ëša‰œí =Ú¹û/û5xK\°øIà+_xÆwM²š·‘|Ñ ©s.ãqÂ+¶ÒÍÉnG¥|±ûIÝüTý¤õ Ù|bñ†ïì`ÕR¿Óô¸^ÒÚÌBW1•9ós·2Àg%²1_s|%øK jŸ³ÿ‡ï¼ â_i–Ú–‘𵻡móǸ¶ùC30³(8 »€+Ä­­üâ†pXê’¶•¨xn]GNV‘Í,ÚµÀ‘‹y‹(,ø’7á[£1ñ0­o*¶Mß±õ5`ùyw^w>|ø“ã}â=~÷^1%ËZ°¶ ‹I,dŽÛUyïšoìGû:ßëÚ \½ñ[‹»¡Ñï ÈÅÎ zí¥u>2ø â»ëYšÞÓL·²[ínòB"KBíòdžÆB+sþÑÀ¯øcsáo…~0r#@ºl ¿+\¸ =Ãcæ?u€àgžÕÙ=éwÞøy}áÿêS>½«êvRo°…lâ³¶Y÷_(~ì*©ÃŒ`× {ðªûOð­ ·Ö„·³!ŽëT¸±´1¡ŸÌˆ É+H·?Àã#µuÃK‹YðׄU¹º¸×ÒhýOÈ–âáUD³±f#6*¡{‘X–?µïx¿ÃDr?‰ô2Çko‡+.Ûi¤,@Ác–‘´Š)J÷‚ÜΣ©©µ¡‘ðëÁ“\xÖ cÅšœ6ÃMºóR $FHÛŽÛºÆ@€95cãÆ™/ެâ—Kk+´˜£Í™ç©þ:€*mGñMÒ3øÂ+NÙaY8t8fug,O>€ ps—ñ'Á³ÝO¡c)ÒnÖD‹Ïy F»È×I˜&»Ó¼Ö»,¥«Óúù2‚þ iÚ”º‡ˆd¶·BSíÍ.K€ÿ*ŒœÛ@ô8â½§NÒmÖÚKÍ:êk›t.Án OÏ!ƒrGPÈÇÄøIñÞH4ì¹ì Œ,Q^Àd 2XŽNv8=ÍsÍðßĵ—»ñDØÙX"ZØZÉ4Ëo*!˜Æ¬½[v8äc>Ó5*š¹Ø„ä¢¿#±‰šªê–úޱea,$À,*¢Ý¶äaOÊ8=yÅy7‹&Òô¿ÙÃâ>;Èg¶cg,ažE$) cRêFI»Wu}àeÒRæÒ-5­JÕ˜Å"•-d$îòIÁž8æ´ü+¥è~³–Ø}š=MB[É;ÛneÀÊ«ØÝÉÏnA#ÕÓ©/™jnVRg˜øÃÇ“x³FKíMt}(ÚiÁ&†VÂ[œü¸ðÄíã¦yÎ+‰øsñÁŽº¶ÚT¶³lðÝ˨ɱ–$_Üì‘ KH*äà“ë^åy¤Ãªjz¿öšh6vñZŸô°Á%µ¸*3€1†ù¹9ëÓšò¿ˆ¿³4à¿ÞéÖV7ž%¼³û,[LRÚcæ–P2q¿“]ÝœZ°T„¬¥NZž!⟂úΛñ‹UŸÃÚUÕÖ¨j"kY‰I¢r¬Í½AÚ¬Z@ ädpkîß Úhß¼} |37Vú3µÓ[jæx­nDË2¸Uê'ʈ¼äWÇ?²§ÄMNÇÇïàψ—Rø~IÞ2ÞãÉ2¤7ªÙe\ã2&2{mÏzúïǼCñ~ËO‡Âz«â¹t;{(íN‘¨ý’Ñl¤ÓŒ„ Ÿ1–Ft=)ær©ûºR–‹îf™|G9J6o¿r{Éô/xÊçL¸¹¼S¨ÙÇ4W^c²M¹pOÌ®[8<äŸJÂñvŸ¨h¾ŸÃÖÐÞ,1I%ÍÜë·†B©lõUÛÓý¢kÒ-mà¸ø¿{k½ÃÝj:tVÂtÉ ò³ùLÉ+í2‚Ò§b†ß¸3†XÇ}ã{ÕºÕ­ Û{§Ï£\Çå]é÷¶ˆwD ²í »!ËŸ¥y°©Ê×S¦¤ÇË‘:ü/ñ_Ä FþÐ}†sfÖÌ®|Ëû‡„Á)yPF ”Wgûi:7‡>øV 1®54T¿´º{ÄÀ˜K«H¥ãSƒí„É•6T÷­Œ¾Šˆ:f‰á¹fÓßT°“UE1 VD‰âI#“Œ†u9Ï#¿{àŸ EáÍÒÂò+yå¾"’êàmN@Ü>sÉÊó‘^•ZÊt®úþ‡hÊ…n^cÛZó–¾mn¶Üi²M2Á|¯æ#<,…äíÈÎßsŠÂ–(´ ÛgÁ¶Öö:M»N·:G²!•"Ú~c¸Ln1–ò+Nû@{y|7mµŽÎ=F0YÚ,J¢@ÎîI&R˸ñÐó]¼"Ïâ¿jò\Ïk§m½ŠÎê$1˜âXòœ}ÉêpHã®kÀq\×¹õ1¨ùyS¹ó—íOâDð¯Ã}CQ’öÙõ#RMZy{ТùÒ± “3ƒÀ_ƾ3ÿ‚™Ã„¿jh-´K+k8`Ñ,®å–„ms,þd„ɼÀõãíµ…´_t?Ý]ˆ¼sâ‡Óîc³>lööÒ̘Ƽü‘£1ã!˜ÕÏÁJ|3¡|[øþo|{ 2 ý®u¼h·ˆì…Ÿ8§ zät¯s,q£Võ¹âãª{j5)'ÓO¼úGöFñÞ±ñcöRÑ´Ý;Sˆ^.l–Úƒö«{”‰œîϘ¹* ž¤±9ª¶Ÿ!øUâ7м%¥êÅq©jŒsj¢ É×k¬ÀbL”a€xã +Äà˜ßdѾxZÞõ_ìk®][];€CAÂ2˜Ü \r7ÏN}¯ÁÚÅÏj+ù&M+DÕ¡ž;¤W0ʲ:H\ç6 ÷ï\ج?&&¤m¦âËqNXx§Ó±ÑxSñ.¯ñ>ÞÛÂÒÞ“¨i÷¨Z#yqÇ8@é(GÈ ¼Éë¸×Ó~ðÑøsð®Kϋ゙m+ºÛ#1 >â ÎT)=‡NEGo¦ÿÂí.­g‹˜Ùî§ÀiÑw1`ç’NXp=«Ê~*üVÕo.ä\BàŸµuô_ØØ_êž%ѼK«Ùê2Åx.%ÓíZo:§ï-ó+ÐÀpyõp_ºÄ(ÞËgÿâ­MΜ×}½O‘>+ø= yî&…øí`A¼Áî+ËÉ’H³Íåä9=q_Z~מ/oxÂÚŸüM¤ŸìשvÑbB8€»P¨ªV9@†UVåHlóšù[VcÔÄÖ‘º,²cÎB{{ñ¯³ÁÕua±ð¹…g=w=öaÕôÉ~'è¶~,·’{k˨àShI<1?Ýõ¯¹¿á_é~!½»6ÈÎ1üƒ…Ž1ÔŽ&¿:|-¬\xWÅvúކ‘¶”J‹¸)ÏB+ô#á¿Ä-?YøU¡jö–w3½ò ‰Ÿþš’OΙ9â¼—öøSañÁO«|B¶^ÚÅæÛ‡‘,Î['1íä­zgÃ}6Šž"»m.ÚTÒ¬ãYn%ÁUœõÛ’W¹5óü+âÍõïÅÁ¦è×úˆµŠØ¤¶óF"Æx#ùŒã8Èíƒ^v•u»K{ö=„¡N”ªÉh¿Î?cKKÚ[§_œAw¥¡-³…>Z¶9+’[ʨï_ zµÎ›¯jBæHŒú´GËvvÀ³ˆT$€ó* |=ÿóð\??ií 3[E.€[X¦ÉûSA€«Ç@HÜŸEÆkíÏøfiZ5–¶Ï¨A͵¥Íã)‹ûJòâáGaؼ³3rÒºs™ÇÚÇ]lqä°S畺’ø‚Öæ{ìËkÛ©ã·‰n]àm±]‡y(Xø žsÍA{â»x\\Csu*YAåȨewêKÂÆ¡›Ý+Ñ<_–£®ê> ŠÙ F™Rktò ”íÊ“ü<3€ fü9ømk¦ÙêïáI±¬­ÖÙ‹ =¼„lè2Ç€G?1¯ÛF(ö=š«W»gÀ_·6½sá¯ÚÏTµÓ§ „®"²³ˆJXB4,¬xÉvfvþðpk+Gñ´?üLOˆtéÏ5”bám£E}"¾ç”"œ,„vǯŸê>0—âĶ׼_0³ŸWµÜ¼¸"7!½OÈ©õÅg]êŠm¹l,ÈÜ ž‡«ëháíJ0ëmÑóÙ†"O9%k;[ÓCè߇Ÿ² ø—ÇV÷þ»°’ßOñ™žÂì••"$§ *Œ»r öÎkôò]OÐü!¨Çc4bm:êDWPT±s•(z*¨pÝõ¯•?d½@°ðW†n´3p³x¢ µÛ€‹æ4ìLŸ9ù¼¼ªÑI¢¾£ñ³r4SyykÉA½ytª¨ ¦äãvàu¯˜Ìñ¯5l¾G¯–C—÷‰+ž[­kàÍFÞÊú'Ö5Ÿ0CocÎÉ)<Ž[$uÁ««øq|U’½Ú}¦K7ÌŠ$G!Fqòžb p0zö<+l-4½gÄS;Ýj—1´“fà+\O#㵉عùsÆZÖðΨuï ÙÛ|:²‘´”±’æIàáîQ~D1³¸ÄÊüã;@s^|›“´QìAr[—v{?ƒü¾Óíïí H`Ž0‘HDÛÉÎTdnœž@Íd|eyþ\[ZiÃ2´FýCÆo§"ê¼axûÙžõ…%mOöeðˆ|eÜZ®µ¥ÛÞ?ÌýôR”Þ"Bà ªHWŽ•å?µêSYµ—„í|1 Íý©¬iq¹o½ , ódf?ÄÙ v' ®7Oð²øAx’l´Æ0‹xسÀ› „. @}ýiUŸ$4ÝšS¡)É&ô0¾&Lº7¦“J»ŽÊæÕœ[I4lbIdŒÆÌÊ£’¢Nq‘íZ_|6Ÿ > xgFѬõN Dò£r?—2m_›8*9­xCKÖ¬-µ/ÎñZÚ4Z(òJñ‡ù³€3’N:LW/ãŒÐë‚K¯àµÑ­ãEµŠ'TóT˜§=rkŽ0çV[\ô1X˜Sq²Ñ7^ø*ûᎃñ+â¦[mwÅÚ2ˆ4¹ˆv·hÖVˆ9–k`€kÖ¿a_€Z=ÿÁß[|N¹·¼¼Ò-OÚ,Þ0ínÎ3rrd/Ë%qÆîsZ¤ðïÄÿŠrjšúCŸ¢YGm¥ÜJ~×,Ç|’HIbp‹SœüçŒb½CVµðþ•¨ËyðÂ-cMŽæäZÁu`ŒWOy—·vÞFyÓ¾:vUÆi죤´ô·c‡êïÝFúž1ûmüF†çâ¼_ j~ÜÚ”ê3^ê:†¤Ú½åÀó%—dM›¹‰*ŃòúWØ?|-§­·ˆÌϵdø/B°ÖíTë_jM>L‰¢„âg>ŠÀä÷¯Døiáˆt«ˆà𞜘¾¿\˜HÏF#21ÉÎk “QMG¡­*ZÝŸ“?5¤°ñ…³jSm†g!÷sÛÒ½?Åkk.£sý“3HÊNvÇoÒ¼‘>x˜>ùåV V(Ë2·¸?ôÿø_²Ñ.#ñ»Ù\*ašSµÊ×Õbc*9-–¤ª(¸8¿ÈóÏ^_é÷w±Z1YðÕ×hžÞoµ:Í4œç<ŠÌžÂßKYáŽw¹w—2:õOQõ®Mº‚ì­àÞñܰRÑûš¯¬ÅFñ9ýœž–"ƒAŽñ1i÷ªxüq¯J±Û‰f•GËóŸ~)~%øçOðG†æ´³.5  8rV4öÇSïU¿g_Þꚢ\ –Š8KÏy+71Äð\Ô,[œe8-sJt"¥ÊÙêÿ >麣B>#\E ˜ÊÛ#|ç£Ò»};Â>Ò¯ZÓš%­ÔÊ 4í$°<|ǧáX:&¥7Œ"»ŸF¸‚ uˆ~ò8€’aÿ]:Ÿ§½u> ‡ûÊÚI-gò#·c,’ù²ŒÀvÏô¯"µz³»”»'cÔ„.´Ñ^»âk+À7—xON½»°€mEñ‘óÇ^•óæ»à§ñ’I¨:ÚDZRqëŽ3_DøuîË{HЉ%‰¸*Ù±äç¶pâ1•ê9{ ºž––Ÿ,ZN}Jÿ·O-¯5­×ÁûSI´µ’4òÁU•Ãá݇s¸§J—öVð#xoM´Ö5yV+SV†Çìê†IDLüÍ£§)õ©~.ø/ˆß4DŽÖ[{m@ò×,©Æ2q÷É8éŽM}ðcÀ‘Ø_h¶š~Ÿdú›È/ê%2­š8eBÍÀ.O²k‰VX|:‚ÝêÏW„•jÒªÞ‹Ds¿><¯‚ô-N×Â6:ªêº…š5«<,åÊJ[Ó œSí^/ª|E»Ö³6™ñ·R·Ôn-ÖÂ÷MŽ[8Óåh¤V*ē԰ ãÚ²†*U*¸¥§âtâp4èQU#+³Êä¼ ì­m´‹Áû^ÅtÆDßû½Å^>¾µ{Ú$z\z¡«Û­æ¡¬Ü“x|'××÷Â8QÑN!BF\ç¦ÄŠä¡Ùàà’êûc¾¹aÄÃrî-Ÿ˜~ ? êÛ‘²vˆ¾ÝxÙ•Ã<€yÁ®Çzä~%ñœöP´.¡¥øK¢µŸd¹¶lja&ç.sç¼E“ýÒ Ç®¯ý ¼Au£x<7(¶š KL–ÆÕãK¶›d…œõPìIcÜׯYÝGgÒ¥¹—OÓ$–IÃÝÞ<ÈÜsò«äözWþß¾4Òt¿‚^Ñ´ËKy5%µó§Ÿ þçK¼…=[q_¦9î+ÈQr®¯v} I{*îÇÌÞý¢5ÿ„~ :†eû·¡ê-5µúïn Á H#9°zW·Â×:Gì)§x¿7‰uKŸí‹û—$=ÞùþG“ûÅ#ÛN+ãBÖçR“SM9$šâú-¨ üŶ‘Á=9¯´?kHü¿ éº.œßÙúm–— , çlª"RrßÜW·˜P/f’ÖOVyØÎp©+ë±ç_²ïˆïoi™|CáM2å¬u ¤pHû‘ @È áß{«èÍ{VÐ|;¢j>3ÔÙ¤ÓÙãÝÑåhÐã'<~^Õã_üAÃ_…v ¡7Í’QG˜Y“É=[¢Ò»ßÉáýsTñ·ˆAÖ¯tÍ)$Š'A$ZÌ›$`íóŒ´b”ù”l–žzt“¡sÑ|¬Ûëš#Âá籺±²YážFkéZg¶ã Ä…¹ªz—ÂK?xgDð®¡¯ÚÆ4ˆUõdŽÙ·\;Êó9É dÉ,‹´Œ ÜñGÄÏÚHøBÃáÒ!Ñ|Eq ¨ß™v%”2¶O”@Ïžåè7(®Oá–¶5/j7,W¾ðÌ2ê·Ã¨·Œb‡æ8gÝê츮+ÍhŽˆÔzÓ†ýNSöƒðvµ¯|gÒQÒ¦ŸÁ°l¦ ¶723 Ì:n]‹ÏL|V¿Ã MC_ñÝͤz§¤KpÊRk’ F8£i$áFxEPsPxãÅšŸÄï^ܶ½5†‰ÆêãO3m}A›ˆùÏ@pY@<äývgK]SOÕ|K‡uRk½Bî(ãi§-)ÎTyŸÂÜ`þ=«uxQ³µÿ­Ìã%Zµú^GËÞ*ñ“xûâŸql^›ˆîã‰@hÝn%Ú@ÿsÊãÑkؼu«ZüFðV•§=”útE¿ÙÅŠ(¶·–IMÎëÃ:ÊÙãå H9==ãះôÝJ–/Aoo£² a=º@­{€7(I,NzÓ$ñ5æ¹£ÝXÍŸb"@0Àü»Ü`ÇjÖx˜N1‚ŽÞdÂ*“rRg|[ø3}ñ;àׇþÁ·zÞ0µ¾œgm‰šèßíD2~+éit}"m#û[ÄZE͇‡ãž,-YöÉ~*,‰ÁP³×5ÄèúÅö§jfÆÎÉ7˜š†;Ü€ÎA/Àã‘é]õÝáñ‚Xé—8$ŠØ[E<¬Hã(ÝÎqœzµyõ¹ã¯¥îzÔñJrIÄéu¯h*Ò5Ë[Ûií¡–ÂÚæÎ{m¸³ÁìeûÛ—õö®ÆŸ a¹ð5Åï‡uD½¾½”Ê®$‚¡ÉuŒ1ùGðäžÜs[ž3ñm‡Á=ôŸ ­®¡&f¡IÞ+±.0Ç™â­~ü §xƒÆ¶V—–ÓÀŽÅÃI¹EV²mƒÈ¥pÂNü×Ó¡×^5'fµ]σ?k{Ox#ÇÏ{¤ÚÝA¥Z!nâLGt»‰*øìx šñ7þßðF”±UâžIeÚ›\3OqƒÀ¯ÒÿjúD>šÒIàÖ2¶ì¤”0n 0ž+ó›öŽÐm¼=ñZЬ4Ë[Hée) ÆP€®SýÜ«Ê8¾«,Ä*Ê0q³]{Ÿ™BÜœ$û‡û xöÇÅü7¢øÖk°'R È"_8«e€°=IîÞ8ñ½¿Â/ºˆ|9¨»xçÄWzúÁ:qäDœîØÙeîIéŠøÛà]ž±£|NÒ.<o;jÖR—³(¹tvFMÃþ#óèM}—ð·à]ž§q?‰>(ÝÃy©i0Ë3ÍqÅ–”±&ØUQ@& ž8fôá)JZu]ÍriÉÇ–Öóÿ#çÏ‹ o¾ ÝøÅ~3[ê¬oìáò ƪÌ8äÔ»1SƒÖ¼å>ëÚ‡ ÅÍ¥ÃiÒ2”¸T/ cÓ.2JõÏÚÓãõ·l|EeáBöúdw6ðDæmÿnHÊüÌL²—ãŽÒ«iâ}'ö,µMFþĦ±©=í´0Ï™PˆÚ9aÁcÉì8­0õ§JŠoDÚI×…Õ_/E¹àú/£º²ä†·¯5¶_h°Y “î°$cšìî¼/Š´;Û Û¼–úti5û‚ [«¶ÄcÎH-‘oƳ|c¤éúoŠím¼37›f-`iبÿ_·2'ྵèB§N§‹ˆ¢ì¥ÐçtÆŽîQ jÂbälÙÁ¾Ýë§ð—€˜j™»XšÏv$ Øfwük> (G3LbdMÇk:àãÓ5ЉŽK|‘v… Œ“é[6úÒWwêÑ‚>+ñ_‹> ø_Â~øƒá› è6ñÚÝOanÓê^J¶Þ7y Fê­°¹L`gÁ­/ø·ÂÚ§ý›¬\YX­š‹ÌHò‹ùb‘¤’Vv,ªWqcÏÍ|­ûxãM𠮥?‰õ«;FÖZÛiâEóä(Ä4ç$cir=ùôÄÿ[kßµÇÂ} Á·‘–ž Yå½V û¹cx™JýÓ€ÎÃ%øãýrèË”·°›&kVŠIWìêb6ä.ø÷á¾`$P{×sðÒÂf»ñ/ü$^{¶·ª\êÈİ¡vn&Ù|Õ éÉê+x¼Y¢ü»}ýu ¿ XÚMcÄ‚'*ëö‡ÔþöB‚ã?1p2}¶f¶Ð¼7¥ÛYµìòÍyq…%ó¤”̬?„‘ž¤rzSÅ>^nïïÐßù¬ÚÑ‹ ƒ[ð÷‰'†!­ì´É®l·˜ü©¥3JU˜}ÜGä峟”€8­O€ŸtßjºïŠeŠÞH…­¥ôš„Oæü‰mÔc³J²àú Ó>'?„~ø“RÒod7Þ%¿X/~Äò8‚ÈÆýäþ>7̪sÊõÁ©tKØ~x;áŸâYn´ŸøH¥¹í¤"š&ŠD¶y`¬Ä³°\¬8Çð›Pºë¡Ý9&ÝŽ3Ä_u­ÌÞéZÄRèÌÑZ8º`&ŸÌda›'ާµsöŸõ¶Õínü¬Y]iÐN."6çu̲ç#.E}àNGZ÷Ûªh|û;x‡Qð{ÛF×ìë¤Ú^øøºó¢VÈîÀšùÛ]Ö|I§ø‹CqG%äÂâ6¶u(>EÚì¤à‚NÐ~ñä×f´ëÆúi¡âæ8jt¦¥¿àwúŸˆ†¡­Ém¦ ÙÂ+#²uñÈ=zW/£ø¢ûW³Õî ý匲]˜­g,ƒb ÉSØ–-€1Šé´ß [[1žkmu:1xÕ‹y¹ÄàrnzVÒÇý§i^-û íØPíåÀ¨ý•üª0Aô­ùÔtG˜ÔdíÔóB=OÁ“i·>'ÖîÆ£~Ì÷WrÄŒîUŽ& *:n÷=ªßt;N$šÊîÖK©P,ð ³™ÛàýÞJèu?‡Ðx’y+ùåYù¶òKæ”’ôQÀp9<œTZŒ©¡ëqÞjVœJaIQ‚™1‘™˜Ç9æ´SMÝnLãËÿã¬ü;®-t›x^ÃMŽæ;íAœo2…ä‚\|ìHàÆÞ+±Ñ>'y°»êâE¶´sÎå†IdˆqËdvâ­ËªÿoÃçêiÚ‚¢ZÛ,D0+ŒÍÎrQÁàr{šn“áfÕ¬Ùµ,_jK¸Í­à g1…Ç œ‘ÏÒ‰TM{èqJéDùÇöÞøw<~¹Ô´˜ŠÝGΚ²ª5È×|ŒcVRäœó]÷ÁïÚ{ÿü9§é^(û^€Ëme¨=·Ú4Å]]X†#pRx$õ­ºôzîi øN»Kx<¹Öò@öñ39 JƒŒg #®+äŸ|ÀÚ¼·þK¦Óas-´›Lm\0pÝPq†8í]t)CKÙÍÙôd×s§%:}7?Vü sámÂèþ*±ÖÛɳ`ÚÕõü—Ù$;J334Š¡B’O ךÄÓuí&ÓÅ>“YÔ¡[-mZçJY]c2Bð2~¥¤yY¡ÀÆHÉÀÀøU‰|ð¾Åôk­CV·…#»¶[rb†Y"RZå °ªÙ'ž@Åx÷‰ô§ñ‡ÅŸé6/€~ ÞíK È¢Kë J íËmUfÙ„£ãv>¥iµ'±ì©MM~_ÕtÔbÞž¼U {ö³‚oµ¿‚nãLñ”ÞLªTÆÈ¼¨«)'ygR:‚}+–ñ®yñŽîëIød·í­jšDº%µ½À!­n³«áBïbX`g&¼ÿÇß±÷‰þ|"øYá¯Ëi}…ošid†flY%Õ¨Éuþ{‚øÿc9=‘£FO÷ŽÎâöXªÑ½%¡ä߯ï¼?ãψÞ!×o§ƒCðÕͶ¨Ó)]¢âäI›Aà$*Žßínàf¼?âÏÄKÅ—·Ú¬@^ö{ØV(Îc†F;"9䀻[œ×®ø·J¶ðïìEñTÔÚäßøÏ]])£»O-å·µŠ/´.ÝÄ’ÊËüò+ÍühÃ@Õ,5m}¥{ùôíOº¼ˆ†‚ ²Æ9Ûf2ÄÄŠBôÇ<澃 ¦åkô_qãU”¡£Óº&ý‘~0Mû8|BÓâø…¦Ü7†õûØo„¸bèˆ]LÐ'I# ?ˆÆx5öŸìåã+Ÿ?Nîcȼ«â׈šÞòÿ¬"ÕtÿŸ2;É­Ù£ X^5Z<¨Ç<ŒçŠå> üñ,ÿô/üBÑm4ý"íkwóIÈ¿û6õL›mÄLP̽]%u/{OÔÕ·(-uùUÿAÐÏÄMTñ7¬´ÏÝjòê×öWI"ÝÌÖÁ²¯ ÛDŠXu$xó¾…c¥xÃ঑¬xƒH¶Ôn<+yö}B31ƒÏ´*BùŽ˜rÛäLéŒã5õ¿íañ~çáçlþxOFÓ¡Ÿ^¸]IçK¦Y!+(T$n’'µbËqæ¾ ñ޹׉uäÑÿ|º®³&³áÙI·HÑ,Y!G™#8çåPq_O“Îs¡Ék-Ó¹ó9ä#N¬*uJϳ] ψþ Ô>ø¨Çq§ÞX%çúE¤wq•‘àÉ Ìç$zW»~Ê_>Õà}7ÁZ‰5OíIo¤B/ȬJ‘×íÁôô¯ø«ñ3QøÙâk{|<š­”:z:ð­[Šäzüí’;×=¥ëZ§ÃoÃyj×:~§`ë"H¤¤‰Ð‚2:t>†½ª”ž"’ŒÖ¿Õ™œýOi ÕÔñΕû?ø-+Å/#êúÍÁ–囿ŠÜ«f5]§?»Ý÷Nw7l øöÉøc¡èZƧ©é׿mvEò7Ú$•É%äš^Ìs¿‡jôO_´høûãûø¡uzΗlé¶Ð‚±j;s-ÛƒÖ]£ˆ‡®ìžÜwí[àû‹Ñ¨xƒÃÿnšÆd¶ ©òäÛ½RP– Æx‰À¯Jx\Eª;7¿cÚ«‰Ž.ƒ…%umŸsÁ>kQh¼7wÜE¶Uf6í¶VPA`ü$€FOL÷¯Ô][<‹ÀúΊ^Mêáu°’€TÚAuzù¢ XuÍ~NÚ¥Íö¥Ÿ  êŒñØXƒ’ Ìò,PŽ;$Aø×ìˆü#aàO iú†/ôä¸Ót¨4˦2[hãP ~ß2“Üæºsä¯M½ÝÏ?#n›éc‹ø‹ãÛ«k(k{›AnÑ3®Æ2̆6“ßt T¿¾%Áû=ü2ñýþn–7š}‚Z鸘;É4–¼ÎäÓI p£¦ kx3AÒ||-½Ä3ÝÛÆ×QÅ(]r@“oM ƒíë_6ÿÁ@|{¨ø×áeÜr}–ÜÚêbMT$“­ ñ‡2±'ž8çáB’«8Ñ]ÕϤÃÉÅ:ïoÔø†H¾ÎC H*çÐ Jö¯øGÙe5ë«WþÛ‹Y½7W"&oôu†$¶´þè-#K1aÈ p@¯ Š×íw‘${ƒç¾úø=û4hÿ¿b/XÝ\ê–¯ªÅ{«ÞíË)c Ânƒ&Tž#’q_[¬°´¡wet|Ö\¾·^n]Sg·Á?¾ Áàß‚¶šÄ q§§C ¦©5œêÒ,SÊ·Ú.ᲬP³"s‚2ÕéŸü`ú·‰o¤–4hZ'¼¹·óa؈Äcƒòœz §ð{JøGMÒ¼)ÞhöÁÙ¯."`áÈ¥õØ Æö#Ö±|O¢\øÛRÖô­0GÚbXë”gj´ ÷–0àüD1_ˆŸ¶ªä} Ôà”ÑÂ|‡UÕþø‚óÅ€-f{Ûf³çGæ¼P²‘ÈgVreÇzöoˆÞ “á,4Ï…CŽ–¶„{a[«¦‹jÆ‘Éw¶©ÀQ‚3^]¯xPð‡Ž|+àŸ‡ú^XÍk›˜ŸËM65t1É+€wAÅ»ò=wÅú]›ë–’jZŠÆ »–P2óõpÊå³Àþ÷S\óæ“Mézj›ÕkoÌFŠëD›ÃZ#jók:…–“ë+DDUˆºFy שôÜzcˆÔ´{­FX‘mï.ôˆmö¬ìø¶’ëÍ åbÎwW%ˆèMkë,“Nñ´^¶YõO&Y!–`w¬JÀ’|¸2ãíö«þÒÿ¶Íïgº›P‚K§¶±u$<Œ ®À…æü╹’*5#>Z}Ë×–J÷ÏŠ5†ÏÍ‚d³±=Æ8ã©&°bÒ‹þ ÜjúÄÚ–˜ºµÒm´O'Í–)Y@F'q Á 2`õnë±xvÖÁc†Òè Ð6 N~|vÞ>¬GzÅé/ü7e¥éé 6--ê=¤y£R¤!ÉÃþµ•)6Ò:«%íºCôÏ Dþ kØž/*^d$íÂu,çÔrMyŽ|/üO£¶tÑGwvêð º.IÈã!‚nû¤t«ÿ´íw]Ðìü+¡Þ˜æšÕ¥¾¹Œ¼[#YÔ9È#ç}Û8+¬ðç4ûGMt«_F&hw¶ªÀ«Á뜎µèE´ù›<·«Õ™v_h"ÓÂ0Aê³=ã\0dÏ$ŒïÎO8°Åz7í6ÞãMó﬙n'áþîYˆ N œtç5‘à[ëïæh8k[;œ5Ü­€ÄðáAþ"AÞjÚáÓ¼ u=ˆ9ad¶‘lÊC¾»@Q޵Áˆ—2åOSÓÀÓŠ~Ò]žŽê~/ñ…¼‚ã_¹¶6ÐÜ…f²µ‚Ž4QÄ…¼Ã 98ë]ôçìbäöýLªSx™Y>¥k‹O ~ÍŸo¤Õ–·<×3Æà¨¼wÜpq’v¶Ðò)ÈóKüNøûYj¾¹ølÒø~ßB¶šâk¶x¥¼Hˆr#$‡0Q•Ú¥ëŒzÿÅOÞüz´ñÖ¹þÌŽH£Ñt ;ågGX$— ÷y¦—ÌÎ0ª“Àª oïÇìó¤jŸt)ïüAªXÜÛY[[DcHžÞu· Tà$A„²Äd®}+« Ã÷²ç~»/ÐŒG4š¡OHìÙñwÃ=#QñÇÿ éÖ—2C«_kÑDÒHÄ´,šwãDi1Í~¸xW]Ð<á ¸,`HtM;NµQ™(P±Œa±ÜIã˜Í|/ðcöLñ7jÏ ê>(°ƒìïgq*Þ‘Ì“ù~\Ò S”rò°Ç$!zúCö„Öí~èZ_„tÍZ7Õµ‹¨m¥+Âa†]ãPs£œœâµÎe ó„bútèyÙmÒ­9Ká]Ï“¿oߎ·>?øý¥:AöM7JºÓ¥kE’9[t —RU¤#Œò2s‚+çïŒ:äþ6øªjw¯$—7×2Ü&ÒÁK ‘ÆBà8È⽇öÃÿ„s@ñ%–‘áÝ9aºŠ-ÕÉ ¼ŽßNÈ'îkÀÑÔêsyÌ[b€rÙè+ÛÀB4éÂQè?6¨çVIìíò7~øêãáçŠRÿL‰LöÁ¶îç$z9õ—ÂoÚ~Ïâ¬v3[õYw$kùTZF< ý‡$œ×Æö·‹âˆP‰Hì?¥[{Rn†¥·ìŠ„ÃcæS‘€9ÎGj׆!sm.çB´¨Êñ>Öø§ã=bçÆZwöŒ¢K—H¡ 6Çn¤gîàÿd÷®—MðÜ~'ÕÆ¡ãE’ylð!†"Ž nÇé^cð ö¿Ñü_á»=;âN¥ Ž©of–XvÀïÀß¼w#ÕôW…¼5'‹3ƒ¤Óî-ná_¸mÛO%”cÓ¯?|åY{'É8òµÔú,5HâuOS'Ë~hØ-¥¤naOû@õ9ç½zO…-´Ù~ë×÷·ÓÅ«áK£¶–r (]¸ú “U´ïÚøKÃ×ܧڴ]1¼™—ï?…NX’«+Æ`Ô´»y¢‚MÂÍJùSF¦õ9,}Æ{ äu=£N/Oëó=ÇÙµ}Ï…´k?,t„Ñ.ãÒÑå3L° B±Ž­#õ>•ñ¶A´Ð\\\½àòí@V-ƒÇ˜ÇҺî­¼:öm"Ç5Ò'æ zçºOü>¶IÄšžnä†/*~pFqÇò¯VN:ŽÛ/ÇæxM9Å_sçøV—¾Ñe½ñ \\HÃ0¢ÆFn„Ž {ÔzŒ×º^Œ§K„)|¤«sø×°x§A>[™5{·yïŸÙ·õÇ +Ç|uãÕ®®´Û ÞSfQ€Ç`{ŠÞiZ×9+%ØÃñmµ¿Œíá‹II:¡@û§ð÷®—À 5¿øWì›%šFk©AË"íà? œVÀ[¯üE†ÂÑE´÷l,ÇhEÎHúàWÐ5k 7ijøgÂÞuµ»ˆîõfËÝ88PÄõ®a]5§,£ÉÕÙ£´uRò ªQÀÛï^«ÿ 8Ö´ä±Ód,·# †T#©ô¯4ÕõÃvÓ›Á"}ŸlÓÜ*å·ü³EõÀ®®Ó\Ó/¼;á~i-4« û׌ÜO1O5aÁdP>ó¥y•ewÌÑèÆ)Ù#Ñíô¹õ]6m: x®åŒ*ý˜>ÐÜû×Sÿ^“àŸ\굺é÷Ñ[t¸V!=Åy׆ÿh?Ä¿_Hø_¢™eÞâ}BIˆHÐ/$ ãÖ©ü{øòúßû«­§xá‰fR `yÇ Á[Ú="­s£™(6Ô>:GâI¡¸Ô4F¹šÚët’¢1óT7]ǧAÁªßÿj»ªé—†þ×Nµ\µœRF|÷Ç8 ó}?ÆzÕûÂa¼2o&0ÊŒç¦TóSxÏá©w¤C5õ¥¼³Ê å¿|ÙéÇSÖ½¸`àœyô^§˜ëU’´wÄMKâšC¥ZİZp«Fo@O\ ÂÒ®­toKo¨Â,£¶‡ÇËŸ\‚¾šøðkBý›$ë7º"+»Ç–P`"ÂÿŸZÖHN«¥E{«wæa^Ÿ²KûÝQØxKÅï xÞê]&6Ts¶'S¹G£ð®ÏXø›¨,DË-üMç$‹ƒÉäçÛ¯Ò¼—À¶z•µÛÆå­cfy7¨#§á^–þ¼µÐÒïÅFŴ뽦·@%ÆpBÎ?*u©(I9 4Õúg…4ë‹‚o!XYI¿Ÿ+¼ ùO|ž1],ÒÇàŸ6žb–ãM·@É5Ú ð2pN}«Ì¬~!išžWÃÖ“C ûî6™B¶üçXT8D^:7#$äí>•Ë|(ñLŸ þ![96¥§–&”ŒàÇ@1Ò»ïxÇIÕ¥µÑ5{DpÑ+C4ªU²‚Ã#Œ‚x=1Šòï6QYx¶UðÕ [k6Ú³—g~:‚OjÖ’WömnL¤âÔUñ½³|T€TYYj žUΠŠgR—`8ÀÇ5?~_ÿÂ1t¾H4ë7^1u9%Ødô'8êq\W€>*Ùøº¤j±ÿgy›s'›¸LàmTäp?÷_ˆ¶ñxáý­äWPµ¾…§ª‹uºÝò8ÁÏÍÏ#=MsÖ”°ö‚ï¡P© ‰´õ>}ø ñðü>ñí¼…ÅÝœ,U·nw^1õ rq_mÿÂâ··‡àíŬ6÷ ²4ñÆ„ãÆÞ«×<õ¯|W›¬Aq«k×Ùj¨–(`-!'#·9ïIðÃâ¡ð«Z7ÌÆâb1¦[!³ÈÈé×V•ð0ÅZ¢ÒK§FÌ+R±oÝ>Óñ‹®g,­1y{˜ÿvJÆÊ9ùÇ ’ÃÓîœW!ðßáHð¶†ë}!’]4½Ïœw‘ÉËqžyÇâkáçÆm3Æ1®ÞGovà´â3´tÁ‚½Ã>'Ã0¼Ó·—Àq‚pFÞž‡½rÙÒN6ÔÒœÛØ«¨ü[Õ¼;¯i+{k¾–¨ÐÞ’6°Þ@çа ž+Æ?à£÷É xÏJ»Ó—Șî\¨ÃFzñÏOƾ‹ÿ„Rׯúµ†™¨K÷sM„_+q-Ôa;ñ_1~ß> ‹Ç¾7Ó#°ŠW–ØIϽ[Í‘[n6©ù[ùO=+“ýn›Šõ=)UsÁN ·Øàm>7jSxwJŠÊûQ[ø%=䘔6"úsœþï¾ñmÏüu¦è¾ 3ê,$2j%UVÚÚŲNIa’$c5ò:Ø\Yƒ±Í‡‰Æ þ«ÕÿfjÞ ødt/6_¶âÚxÈùn"$n_cŽs^õ|$e(ï«<|6"ÓŒ$¯øjþÐÉáÞÝ[A7öþ¾‚Æ%’bßfB¤üª~ñ+¸–<ãë_=Ø,xžþ! Á vÈÅåå•™QV5úŒ’?Ú®Ãã/®ìÓNÒ´|ëÚ­¼’ÜM5â–0K3aBÇ+ª®s×$æ®ø J>I5oi1Jóܤ1¡Œ¶Ì›2Is»õëÄ£zPmîÏZ*U*§²=rÎËP›S‹OÓg‹Mµ¶Õ!Iä‘GúLJ+q†rŸ2€NÕçÊþÚ? ü3¬ü.Ó|Iâ kûæÓî~Áq#JJ‘Çš¡F sA“Óé~ñ°ñïÄŸé¾ Ž%½ð­¥£G+Âý™RëÊ·¯ß½œ³Lû|¸âŒ™ ù@ Ž2;š£Ä:÷À–ZG‡Rí,/7Ý h£Y‹ÝÌÛüÉd8À68Á«Ž7’nâö±r´[4~º Ã^PÕµlI¦æËb¼vŽÆPÄÉdP€Žñί¯<=à… n­Þ}Ry(¥Û#ÁŒˆ€?y²BŽ%³Y‘ø§LÒüY¤éþµ¸ÔÒK£^y $yv)Î?úÕáVñW‹µ{rf¹Òõ¦Wi€Y!$H|¢sŒ0@hÇlÕS¦ës[E¹‹«g}Ï´¾øjæçF}Gíiñù¦Ú$9Ãا 9È5Ö\¼ÔVæY­Ž­jùË2*n($PÇä^F¯ðgˆ¦ðý‘¹ÕîV=2Úo.Ö4M;ò0#ÎÓŒ›ŸZìƒ8úW5}ñzëþÒ¼E£Kcamá¨u»Û9àÚm丙Ì*åº.ºät¯7ÿ…¾Þgµ/%ijܴ÷MÒ@<ÒU#RråõÈ\õ蚊->#ø6}[Ã;/.ïî­MÓ9ÜeˆFcr+¡züÇ=s\U¨Jœy­¡éà±j¤½œ™ãZÍÿÅo‰"[+¬¼C¤êmcko#Î’Û$b`ûßî§9#qõù×ãºMã[y®lÞiïnÝ¥Ib1β`’ƒqé€kéoÙ«W×|3ñNêÓÃwPßxËĵµ¶³x³·°µ<——<œ•W‹ÈÇc"ŽÂ¶þ3|ð·Äk»ë;ǹñŠ­]AuKÉ<¤Ã\­¸‰Kª—È. *3’+ÖÃâÖqRÚß×Èóñ¹j¬¹Öþ'…üÓ£ð?ÄC¨ë¶¶×i7zM”“ ¶6æì!i$Ì™`ìÜWCû[|S±øMðŸFð·Ã»™­tíT›h.Ä÷0#&ùœ6N¼ÀI;ˆÚ8®3ã߂㷰ûÉtû½&Å—Ì“(Z@H=@NÜ–$ä>•Âé_¼Iñãá„þ%½ÕQ4ï L4ëXï ÅÌžXà·'û«óäeXqƒŽéRŽ"J¼¥î§¯èyH_ë÷XòÃÛÍ´ÆxÉ 9R¡¾öŸ»Ç8=+¼ñO†eðÿÀ/ùr¤ÅõbÒ\JO#¸iè²’`èašá£ b¨Û•s-K|®é´‡<˜"•n‹?õp#)VcŽ£€NïÇ×)ûFü1×¼yBÖ{ë)5Ùî%Õ'£ &ѵIùþXÜíè0;W}sñÎëSøÍá xm6Á< íÖ¨‰©Gq'(c†Úc |¿Í`œñŽMvZEÅ®¾-$Ö-íšçN²•a•² råÚ3Ô– dô¼Åˆœe¶èjÔöoô±Éøoƶv?´ƒàÍ %°O\Mqn[ÌŠ+t‰ ³÷Ú61üÞ¹õßêwVþÒbm%$Òé\–ÁÜìr_?ÞÜÀç ü+ÏüaöZƸÀC¨ÿb‹%ÇÈ§Ë 1ü à9rÞºýZÚONö:PhæžßÊÜa u2(þ"ãŽüs\¸…y&¾g³jTß)äV:Uÿ?jKUžYMžˆaÔaiI\3¨,B03ԃڻȵ}â/Æ{½ÅÜßGá‘§x”߬;ÌSù³"BÜ(s˜eznåúv’¾ñ¥äF±[ÝÛEª<ÁTC.ÇŒJîÉ>¢¸I>$EcðÛÇñü4_&ïKÔì´ÝZöxŒÏtï 0T^‰29Ü3ë[%Ïdº# EeE¥ÔúNåµ_–ðØê6aIg‚å@Ùl»ïnC9ç#§L×οðQÏK£øÃ¿ðŒ]JóézÜ7»€Á†Ky~]ê0]¢mÝÏ ¯nýž5 …ýš5ZÊö‰,ïu-)áQ,{ ]ªêÃïyn$\wbGQURãåØ1ǽsSµ úì™Ü£õœ;Óty¿Ã„·Q)ñÛ¦¶ËIjgÚ²±ÁPŽŒÎ2I®»Ã>Õ/!Œjšv«i©Hå®"™KÂH`p­ü)ÆqÓŸzê¾%iM¡xbmA|I­¤$˜-MlÍæç9”wÝ]ýÍI¥ø7T°Ù-”Çìò¸iööù·XŽØÀé[ËÌ›Øðe†9h—™tÿ쫉‰óßv|åÄ€z·÷zœV]áv±ÃxËqóü¸nö?_Zéu Í­X,1 £•$b„¶AÜ{ô!xZÃþN·÷6!õV¿?i`Td÷Dœ|ÄzãÆQ„_´§¯àvá'9.Y~oîìzƒ4ù—áö§þ©-•–‘¯^5›_)¾AâÍ6U7*üÌ‹¹ÜsòáFkwáÏÃKíkÆöÚWÆ¿ì« ›m÷ë ºÉ,a7«ÆÎÎvˆ2íà–=ª/‡ú­—€¼?®êŸ|I¤h>´‚Òöþ{Mu;['‘p7Ý\)b¥ðk²øãÍ/ÇçĚׇïà×4éì¾Íiu ¿“yæO°/‚Ëû°O¨äâ¸]M%ʶ= ZÊ1}M ø·ÁÑß_Aà+[?í7ö†¥r F[a÷›Ï`vŽsŒ ‚;k²ñ‰´›=?íн½üpYœyjÌKa˜ƒ¸œðÀ¯2ð׿ðCp¨‹ˆZkÅ,12lU!ŽÒ€`sËmö®ã×Ç/ÁÞ»ÓtÖkk›/ø™ÜÜG*$€Êó¾DU ¸û«•é\ê<òI7sº¤ý’m=.ÿ‚‚|¹ø½ðùÛÂv¶±é·&ÊâHì˜ 1ˆL—wM» aS‚à1ôÏÈ÷à ÝJM.ÚÂ÷ûnu[=BX\Lm£QícŒì N; {WÐ_¿j·ø]áíOËÔ®5»Ù¡ÓžÍYÐËtm.^Pè¬P„ÛªŒ'¨=¼ûâ—ìýâüðƒk¼——ÚnŸg¨É%Ó”1»F-…Ãg`¾cdŒ±läŒú,IЂS²W<\vbíQGÞ¶§Åô[ë]MâX§†æ[ɦ`èWyi ¹ìIϵáó/‰´C¥h·-ö¢¢ÖÓËåÍ!ÇÎ8ÝI'§Zú£Ä¾°ø¥àÿF.tý:QöiAžÆÍ¥g†Tb2‹‡9ç_iRú½E8~?Ö§èçí¢Aöý+ÃÙRj6z~›ÝÍy Ï´Ñ#pY„aT’7猚ã5Øî5ø'_Š­ã´·GñÌövjÜ͵½µ¹A#ÌÈÂg<à“ÎEO¤üYÑu=KKºñÞº.nÆg°ÍÄú¥ì¶Í^RF0$’YÊ’qŒ+Ñ|_àˆôïxsº¦jŽ˜°Ì•¾Ê5 µòåA‘œ _Œüª¹ÉɯptýÙ.§ÙЭª2‹Ù]>ñg‹u? |ømâýbÞ=bmEŽÚÖ ãymKw˜“¹À±DdZ\ž>á¤ê‡Ä_ƒÞÔýÛe‹´òÜK8 –šIbÂ’ O5œgv·oð:#NãNÚ4ÁV¢ƒHýª~'‡çš8¢°SÙ$P÷‘yƒ‘»Ëœž?¼3Ö¼öÙø/£ü,ø¯:ø î–ÕÝü´dc A[hHändàIîp+±ý¥þ(Ýø·ÅŸuo]WUÒícÔ®­ÚddŽGh.$·%*XÆŠùÉ뎕㟴í­ü`ñJë~$†ÖÕ^GH--ÃùVñ3Ø71Î3ÜgÀ¯¤ËiÖ§I=ïçsçó\EÆjZ¶’ù£‹ðî«>ŸâÛkë4\ÙÝ¥Ä[×+¾7¹™QÅ}/ñoàO‡>&è~ñ£jré×¾;𥞬–"5YMüÒÆ¾”ø»ñ/GÖ?d_†À’Á¨ÜJO7ù0A¼†ys•%Éýß@$ãý,l¦9RzÞÇ…€”/8OTÑãÿ?gÝoà•áWP¸"ó^7Ì~È~[¶a•OÌdÌ1Œ9¯Pøñ7Å4øa­|;½Ôma“W¶¸]2þä/™Ú0· ’#á#ñ^ñð§Oøqñ¯þ Éñ#Ã>2´±Ó¼]àØ/¼Y¢Lªãì¥â«Á“‚.F8sÇ9¯¿·t.óKˆ t—Žî0à¾[BG³*ŸÂ²U>»Sš÷¢÷·ÜtÂ…:Nš:tkÍ™—ð7MµðoíoáH£C¬I¤ë.±[D¡MíÄQʱÆ7ŒLäôòɯºô \Gl`ø«r–×·-ý¥|ñ1cp¬:»ˆ=” w¯Î¿„ß„þ9øwÅÚyÏc¬®£;cæ%ÝüÆã©ýë·Ö¿D¼Wâ™ü½gÆ7 8´y.ïáÔ$–¶ÈÏ€O 9 ºqYf¼ÑtÜ»Zç>_UNu!k»žµû,Ûi¥'믋4­RðÝÅ­j-=Û·Ì%ž)˜oOÛGAŠú‹Á?ïüûüG°Ôâx.,µë Ä£ˆÚ9J´½•¿¼B¼ÌÅ{÷æ¾1ÓäžIyùäÜPNsÍa”aßµ«:žI†iˆŒ0”á«wû´=à?Àoã‰îì¼cn°½íËÂ)\ •³×•p u+éÍ~†iDÝxÛÁ>Ñ/¯ô „“Os 6 Z˜£h!™ÈrT`98®7ö?ø/Â/€~$ÔfVÕ|qvo¯<°q ¬J%UTÀÜ@yÞ›‰"»èw¾/ý©î¶®ÒÊÃAKˆãû#Ñ,±Á"ÈdcjHT(êN3ZÄMÆþì3Ÿ „t ¦–¬÷ëöz}ÿ•k¬I¬][$bwÒ¤;ËNÜ62Üpð fü)ðF£âM åÌZM¾†Ô‘nžY¥v@ªÙáP«, ùx³¾Oaá¯鶺ƒ .ÂkϰÁupLy>בgv'%Â+ÌpqÇA]/ôaàK C£Ûjo#@ò=ÅýÂ#È®¨AÛ^MÅˆå³Øgçyùn–¬úJ4’jÿÒ9MsL¿ðP¾‹W³q¨Áq倮û”¶œ7 ¤ Üž:×›kZMæ·«K®j÷·z•ƒ$PZÀó2´“ï—ý• àífô®þ;;ÛŠ\ßjQß_<úÔ¸` p¢´ ÛjÛAPI$6OZÆñ?ƒï|W.šºT°Ù[Ãr^ydfb±©û‰ƒÉp:ÿ mNVµ÷&´R”•ÍoÉn,Oˆud–-CRݰù€#V*©Ç0Ç’Ig'Žƒ§ø5ám6óM†âÚKý¨\A—÷²®À“{:6æc…QZÆÒ´85{»M9u¸‰d’UEl¬ê ýâʬxõ&ºsÆS[øæðÙI½´’¥ŠF‰D4 œ.ÁTqÛ$ Ê´ÚMw5ÂGÚM8t9¿‰ú¥¥·‰õ»ês]2êÁ/-Ü'#*aò’Çœã¨â—ÇÞ$³¹·m_ÄrÛ_¥£™¬R41ÆJ™ý³<ƒÓ>µÌø#Áz’é>+Ö®\]ëךŒqî—ç†!ö`D1 ä/˜Ç9ý;g|^ñ•Ý…­¯ˆæ[+{‹Ë}!åRe¹b‹ƒ–^Ü óZF‹]Èu%)¾m› ð7µ+¿Ú]j6¥lÚy%•Ï›3?›æ¨ç`Ž?º°çÑÖüEá»{Œ}šÏRš(Ök¯“Î7jª/S‚ÊqœWŠxÃÞ#ñ7ædÓ®/¯ôKKÁ>!Žöæx&Y!US´n>[ *€?нÆÔu Íòî¹ô4¹µ¼•¢`!Š;xšEμ¦0llššõ¹Z„B†NNrÛ¡£gã>Ç^Ö<-¦YߪéV¶É  BÓDXîÃÄapØþ 89ª½›Ãqé××m¦ý–S0Uš Ã;ºcqßÓÞ¼×À¿µíwÄ>3ñ‹\[ÙëÚ¼wd#‰†›göTŠÙøVTó º_«JËU½ñ )o‘m;Y%<· œ ǰéÇAÒª4ý”n÷0­7:ŽÑ#§ÑõËU²×ï/mâdµ°=Ô깿`œ"Œ ¤?Ùªºuö© ü'²o 4¯â½^Ö]“Þ/úE´RHJ°Ïªà2Æ*‚xSQ»–ÿBÒÆ›"iWÆ[Éä £l¢9 K8׳žsÅr—~:¿µÖ¦¶Ò¬mf¹’g†ÝgŠI$Š%'.›[¬È<ŸÎœaÏÖæ‘ªél\ðƒeÿ„ÏÃZ/…tÂåÚxíšé"pY“p+¸¨œž™ ×?ñïöæ±ðÏíâxGI}2ÒÉ­ìt©7º>d³¬hÇŒ ¹Ò»/ƒ¿"Ó¾j#ñ×›—w·¾Ò¯f+žA·1‡8+æ z—`yÏÊ¿·Oìí¯Äm#UøO¨>§q|8Òâhá™n!_ˆÂ*…%–Ï¡îÀÒ¥‰¬áUÛO•Î\MIB“kâÓ4>%~׺o~9ü)ñ+O&­/†ou+{áh¡Râ4í‹¢¹ù?y:¹’÷à³Ä¾!·ñçÅëï,¶w2¬©v†Ô&òÔí8c…Ê»¸Æzf¾2ònµ˜µ6Y.­%¸ÝæÈÒ|ÇwB7‚8 ×Öÿ±?ÃûïøÓEðÕ¬ov÷—²IÆU2d´ƒD&IÆvŒdšõ19|0U×cÆ£©Vn—}Kâ÷À[¯Ú+Æ>>ñ'…5=#HÑü kDjwCê7-š`·ùBä‚ –#‚£’r>cŠÑàŽk‰ÇÉ'Ý 0~„ýý©u?|'½—áæ“)ÕuY¼ÍoW‡ìïlºÕË VëµKäÐQó,j ‘_êó^dÏ.§(´>\åÓk,™ÁÊö9Ï…zmyÕ§f½Õ¶ŸÕÅšR‚j_k©CO½qª¬¶Y!_¼ÊU=j®µ«Ï¨ÌÈØ‚~e(Ï\zVmΪ­.Ý.Fifà¶Ü`U›eªM!(­³=ˆ¯Qµç5—SkÂ@½ÄQ0 ¿Þeôÿzý`ý–µÈ'þÒãIÕ¡M…,ŽÜW•|:ñ³¨;Ý[ÎdÚŽ‹Ýz8õ®'Ä0ÝêFâ ³½ô2d¼xëϵ}ÁsÔ÷ŸÉ),LœSGYã?ŽÚ÷µ-NF–ÖÑËŸœÄ:_s^|·6þ ûSÜy²ü¬Î½WðÍÃO<Ö÷ˆ_Ì;ЬEuš^ˆúLJf¸†KxÒYL)aã9'ÐWu:pÃGEc–ò¨üÏWý¼E£iß®&ñ#GS/™%Ã(%TrÁObkâßÄ{}6iæðéûOÚ%igœàù¬N)íQ€yoÁÍjßÃò]éÚÜa§@v:/ÌF8Ú»¿xsþí®î—Ê[kÓ½WîmL:w8Í^œ]^y=;iÔn 6:è¶Þ ð®›e9\ Hî&m¹gr»ŽñØzúW#â­Vñm†t£u&¡a®–±[¡1ÄY²â>Äõ$Ƶþ-ëw][x}ÒÎ89º»šOõˆüçßü3ÑÞ©£è¾\‹;wDx1ǽ1¹sŒ“\ñ¨¹}¢ï{~§TSo•'†¾Gð»ÃK‹mok4Še‚i.TÏzvå·ü*3Šà­þ&Z9åž8'†æImâÝJðXú.m~ÑOÙsÀM/öÝsXØÅ1çÈ!—¿5‘û*ü8uÓ,ïµ»…µaöË„eùÚßÑðŒääW6ª©â*;¥§«;gEÊJœ~~GŸi5O øªòã[Ñ®/§ˆ”³ŽHö¬*r¹_›ƒ]F‘¬ëþ'Ñmï<'¤GæÌÁT•óXmîCtÇxÏãçã~¥.€CiðÈ-¢‰×ÌB‹žF}ù¯¥¼¶vÒµ»‹à«pF’BÒÊùùWoP1ŒcŽõÙRq…(Õ”-S’);I´(ñÀÍCâ–ø­y9º—kG²&O8 è+[FýŸ|àŒxÊk¤”I]@”`!U=Iï]…Ö·¨\Ìñ„0‹ƒæª(= g?)õõ ü?Ó,µq.£«bÞyVöÚ-êìò3ž¤žOå\ÐÄÔ³5—di*1Þ1Gœj'ðu§†ô 6Y§óü¹/™w"î6ç± TÚçÀä³±»I/d™­-ÜB›Oè0}kݼuà_èP]_I¡Ì—ÅY庆ܡ ¨N„žæ¼ÂÇV±Ô.žÌÏ"]‹‚Ò‰¥UffÁ(sÓŒp=khÖæ^åüï©”¨[wó±á_‰Àñd1ø³DŽé~ÊÄÄ7ŒG¿C]oÅo‰6±é¶¶¶>ƒJKiÀŒÈ†CÀ Iü5êúÇÃï xêíô‹ë¸•lÙ^y­™ZH›?wxÿò¿Úá¶‹àWM¸ñ õŸ.ÆùcÜf€…;cûÜšèU©T”bô}µ2örŒŒ®Yô›ÿ³G«kz„N’œ[É"(mœ`’¼ žö¯>ø³¢]ivó]Ore»užhß½ã°9QŒuë]O‡µ}GÇ:v~"-!ÐĺµÏ™ Â[@U¾„îÛÛ½[ý¥5x~)øÛW×ì®.®íµk‘’…DgFâŠ}àØf‹¸UHR¦§O™­z—R Ë-¸G¦k§øiâ ßÝÅ£›¶†9˜ó¤Q÷ÝÒ«xÃáÖ­àÉÊêöSÀ’aIa”9PÀngiÏ<ÖN›¨¦‡}úR§g×§LôŸ-H÷<ä)ûÊDZüz𵦊/Ο¦Z‹O!#¶¹…ÌáåÜæAÀ<–¼µu'Ô­Çš$šÖÝ@d“AìEwÐx›Fñ6gmÅÝ“-£<¶Ï#K·g [ ãŠãôT·»˜Á<C,²„+·ˆ÷0þU†-EÅô:*òÔ’wЊâéü54ˆÆ}Ä++ïÁLŒçŠõ_„ÿ­õ-ON´ÕÕ¢hœ!d-¦Ý’Íê<ý*·Æ/ Yx24–ÏN¶¼†xV5™P· Ìž¹Î3Ò¼ûK·ºµžšÐLcŽI%lì—¦å#½;sR¹qeÙÑk±õ‡Å«¹<=g§| ß7‹´r+©.®&ß0 8ˆ1ëdð?:á~6ÿÂ3¥iv §Ã.¥gs-ÍÅÌŸ)¸–@dwöýá`t_¥Pøyâá¿ɤø™íZ\ã¹T¬ÈÛ¶’=v›ß‘^×ã¯Ù¶_Ž~¼—À76ú}õăQ‘.f+€çòÏü³Æï»ÐãŽõãÔ¥,ã6쯿üÇÐa1 MÁ-lyGÃøOâf†‰¯é6’jñ¢™_Y[#Žä•ß|ð_†¼yâ„[˜%·Ó4 N°ÒÀ¾X»fŒ"[«c€$Èꃟ¶ýœ¼Wáë¡m¥Ø4¬£p— +œã${ô¯~øâ SÁ·Zn¡¢­Œ¶÷´˜^.§„ì0¥¸â»1**Teuë±çaÜùíQjt÷& ÅâßIim}&–ép-Þ2vÊòìEQüLÛ•@”œÔóø®„o{ã'†»£éöڥͳ¡1Rîw0[¢“Ò ‹#ž~èü=vë@±ÔF…m{k½"îÛVt,vÌþcl  €óÀÊõ5矾ê¿ÛÄñj†;oU¹ŒrF˜‚ÛÈGH-•ûnó>f<‚IÆ+ÄOi4žÇ±<ó=þ ïðù£Ò¯¼]ãt–}Nk{O¹h6¬ÂyR[Û†=7<‘¦}H&¬~ÔZÆ›ðóQñN¹¢âÓKÐ4Ë«¹<ˆÔ››¡ Œc·€úŸÂ½+ÁúF—௅>ðÖqöÙì´Èž“ÆwÛç;¨åH!Ï>ýxgí©ku¨x çCÒÉdÕnî•®£iB—V`ÑŒ: ç#ŸJã«SÚâ/²ÛäziÐq§­‘ò÷Á{û#á\rè‹•b/'/ï7—uÆIÄ„±öö¯@ø+à˹þ&ßøÓRi¯ÊjVíÚ²^<*¥ÔP铃ŠòïiþË{DKvŸDÕµ;igæ§WŸHÕ=ùúW¶ÞøƒVÓ¾øwNðZ&Ÿuk{¨K·-³[È]ëþ±”çÐ ÷êµùzéò<:)ÊZf±0²ðZø}8ô(žã[ºSåÇo<æJÛØüÄä|K¹»¸Õ/õh<<émc•VÖÎ4^‘m!œ¼™ëÈ4®Ÿ+‘U*¹G_øs·ƒæñoŽ|9£øVðYéþ}^Kë¹%óŠÞ\\)$³ 8;Ü(ÆFEvžŽÇEð·Œl¼?qÔúuÔHQK´Æà›ý°ŒxÎH©_ü$Õl¼¦K@ÑÛ<–)•cGÚ£«d9#Ù«ÅeâvÇKÓÒ$¶´‘c•öùŸh™‡,éÔ€ùk#ö²Óõ/üÔôo}¯ÞKáËK==ÞãP‰å‰•g…b÷)*Û+»<šÂ¥E;Sîwàè:’ºvüÙîžð„›PÓ¾Ù[Ý^X[©Ô.šT–Bª¶v¥\È^M§«rO5ów€ô_Añ‡VOæôÙïeºmáT,eŒ!xl0uN8í_QC kšWŠì-óTÑìt+$³»½²ýßÛî"‡÷¯,dÌò²Æ7±cä ~t|YøÓ­ø[ã_‰â·ºž#ºû,C;40y0¤Q”F?q‚#2Œ ³µËƒ‹ÄU”W±ÝŸ±Q”¿¯‘é?üaâ{ã¿_VKKãM[÷:}ÄX†ÚHá/º/Ë•¶U'Ô &¸ÿOqàŸxsOÒĶºG€­nn_O–1Ý™c?Ý4Ž’†þöÓ“ÍRø±ñY>*Ÿj~ŽoíÝ XÚ %`˜ÄKê„&2:+k­ø™=÷†¾.|CÔo#¼ÚZ Ühê0ÞKL"hþ~›¡ýï¯e5éÅJŒc»èy¼®ÜÖçκm¾¹ñ¢òÓD¸Õí¦Úyv†öuR8Ð.}ª0;‘ÅMðëá\Þ)Õž·se§iè’Ïq{w/“n‹$0ñ¹±…ÉÏøïTƒMñEÕÄG}µËcÆ"Ü3÷¶ô^¹¯NøAñ«E°ðîã»[{ÍhÕÑ "e$e‡£+‘ýÑÇZúQ•á’>yÆœêûï[œGŠtKˆƒ„€”ܪ€È!€ë‚ ô®v)eÑÆé€XÜ•—åÉ÷¯Yø³ãÍïT‡[ðf©ý³%ÁT–Ê{mh"AŽEEÀÁŒu¯$Õ|`unyÚÖ(Zw'ìñ#Œá\ö§*‹U÷•WÙ§£¹…unÚv ãLÊ—Ä8zÁžV‰-U°¹fã>¤š±ªÜCu5¨¶"ò1l ìÌšÕºÓíô}i¦“iB ƒŸóë]×¼UÏ.Ë™¤Æé?j¶Ödo ±y½V;‘ÆÆ=±Ö½«öAÕõ¯~Пaøµ®5¯ƒ|;{0† ®Þ;=5'‚hä‘JàǸ˂êsó}kÈôK‹KYE뵫v¶v©}㎾¿JõPÓ¼;2šêKfŒI"[®×Ž Ai6ù3Œõã·5Ë]Fqi­Z;pÍÒš•ôG¼| ø]á ünñηá›siƒ¨6›jŠîÖ·1€ Ó¡$žd;U˜ç†#®kÑ|!ã ?Åž¢þiæÝjÒG#@è6‚EžpIs×úW!àºñf¨ŸÎó7еy'…[j-µ»n‰OBáBrîÀèkмàõøUðûÄ7P]Û_O}6 rŒ¨ŠÒJK0$à ीë_9]ÛI;µ¢=ª2uäê_qÚ6£gàíwP¼ñ“[D®ñùqHK‰Sb¶ýÀå°9Àù@ªÿ> ø‚òóS0ÚH5D–R.(D‰óÂ&I ª@ã×ñª0Û [Ãø—\´™m-‹£[”bQ“wËàG™±¼+ñóÂ>èº]œxÿÄS]ùjc’k+_´íp8;ŒAvñÙíX:wmnÍa:Z7±ÐþÒúåæ“ðö/ZˆæÔ§ÓbQ©ÿF˜JÒN8y[c8éû ZóÏÙÃóëÿ³çìµö‰Æ:áÔîî”Ú‹R-Dè ‚]|¹Fîyã°®ƒÃÞñ§ˆ~x§âÅù&˜Íž’{hf•ÔH› ¨Q0I쿲߅4>>¯­ÙZÞêzn¹k£®“mŸ!$ËÜy2±âEbêìÜn#ɤç ZÝÝPÃÔ«Y*š7ìïà[XþxCIðÄ?bÑmY¬£K¶Ü´­ö‰î¦)òŒùŽBÜ ç4ÏÚKâÝøßN†ÂòÒ¯%\Û=¿$€&!TªA Ì͸iÍd|Yø™©xfëÄ~ðC½ž§oke`.ÐÆía¹Y瘪ð¬Ì¦4žâ~øJ ø¶÷Uñ~­{s¬Ýù‚X¥qåiñ1…78-Ë8®(EÖ“«?øs¶­wJ>Ê™íz‰oõ»œê· ™(7 #q2£¯|~X¯8øÍûGÃká¶»ð}ýµƒ[¶æ¸¼ƒÎ,Š9òãÞ¸ÉçcÇ\ì|E¤_x¦[]D±¹¹ µÐIˆÐŸ,¹wRÁP ^¢¼OâÇ‚ï¯l!ÓŸN[5k©`Cuf ê,¬Aýöì˜Ã. ÆÐß/SUF©>jšyŽIGMŸ„uŸxnÆ÷^‚lX¼¶ó[¾"@…€bG÷³Þ­]Œ:œ;ømtúÓÊ—öw±\,2ɹYÎ!‘Èc…P§*Î=s\7­r"¹²½‚åît¨»ÚÆYc'žc&0­Ž0 €¦»Zhž.»×¢°Ó—C¼MJÑY ahæUùRŒygalŸ›“‘Î+jŠ1“²ûŒ#O•+=|Îã·‡"ñž‘yáíÌ2ên±ÜHÍå¤-µ0íÆH Èük9<;uáoGáÿÉ=ÏÚç.îvàÍèòÌœœíÉQAaŸJÙñD:n£ã}RËE»›U×µ­DÙÝK²7Ù­‹x” Êyj˱Ž9$Ÿ]ð߃φ|H—IöA«ë:ˆ¸ºi;E ¢§’ŠßÄn'Ú¥â=ŒRoFtápKîÉ<ðF=cZñ·‹ ±“LÕô›½Ù¤.nš!4¿3ÉÜ„xåÉ8¯œhß\ü?ñn‘¡øÃw0Þ­ËiÛ6ªÆâÚÞ4eœ,XÜÅŒk! ·^ÕôMçÄ[M7ã~›ibÓÙÉáÍLO¶Ù‹ µ– ÛÓøQÕÔÈéß¾lÿ‚‰üu½øMû}]Yø"+E¸þÌѯî.¥ŒMÛ<ŽÒÈž_y†-yܱŽúÒJW³h§G˜ä?h?ÚŒ~ÎRü<Ö/ôm?ÄzÖžuù¡6±¡@mãU†9 “i!Bã…éMý¸¿mØõ‡ú]—„WM¹ÒµOô !·D”H‚Í^I#˜çåW‘bÈä0Ç®>eýª~!7Å ÁrýT>ÓæÑ>×Áæ:ÌÒqÞFò̆¡¯=Ö5Ùï¼¥éÓ ò´¨ü¸HNIf.H= Ü(5ïPËTã “Ý?ÀðñY„£7ícèïÙ£ÇZ…§€5øÇËm:Öδ"ò—–1Û\0=\60½Kk›øñ1ï#·ñ…îííeÓei^ìe–cË:äƒÐ?tý‘üuáïŠìŦåjW¥Õû[uÚ¨Ažkž ‡qŽ€á«ÅÅ?ÝóE^ßìàZu¢¤ìr6¾¼ø-ðÃMð§ÂK¨´¯xKFld7˜÷S± ó\1ÝæÍ<Ò³ôÝês_7ø·âå÷Š>ëvÚ¦­1Óô£¥èm0ÿ–©¦ÂQåØNóºI_ NÑ‚NIãêoš‡¢ü#ñ¿Ã_µ­ü–“O#ÝÈ$Ø3†ßó@'nâ¾%—Áú§ˆ¾^Å¥]ø~+‰ïïc3$×QË$Ⱦr>TÆóÀf+É58BiÉ÷G«Œ|œ®;ž/eçŠïî®´»YnæŠC–`wp=‡ g§5OãׄO…,Óƒ.fñ³ªË4 EC•Ä‚Gį'(Ü@\ãb°Í£'ìùÒ9²ÚÑ¡RnZ3ÏlÏ ᯅ|#á¶ŠîþóQ½¿¸º ±¯î¥ˆ *ƒ´†QÜ*¨Éɯý˜fáñ‹ö€Ð|«Ë{µÍ¼÷š´¶AK#S¬ÿ.K4+¸çg‘^ÃûzüE]óÃþñJG. B뺒À|©-¬©k#%3ŒÄžX‚xé_VþÎ? 4‡Ÿ o<]à-2ÂÊMsM±³ÑDhÒÉo°lww'Ï•É.]° o`k‘cg†Ãs[Y^ÏÌõ«a!ˆ­7ªKO#ŸøóãXüGâ|;øi-Í–‘áHÓHˆ4‚[»ÉÜÆAÀUŽ?•L™ä±ôçÝ< ðKKø#Ḵë½GIŽ[û£wysu:Ç m˜p2㢌· gÎüð>ƒàM"çTFKëM†¡ªM2,†}E€Û²‚®êòÐIÚ:ìþ뺅šêš·ˆÞÆóP¸É´bIŽÁn8•p0¼p¸>õóÕ«Ù*Qùù³ß¥…mûV´Ù"æ›á¹|QñE-åÅ®‘¢Ãº^ ÆðȸÙæÊ°àŸ”ðx<ín®a:ijÛÛ¬±ÀTÅ œe¶‚yS´‚ÜÙ9ë\}çm¼;¬ÌÚ§>¥¨®éç·„´o2 [„bŸq¸-RüñM÷ŠìuõëCÛ'{CknHžâ$bÊß ùr¸,zzšÉÅòé°sûIí¥ì3ûNÓU×5«‹fó ŽÜ]mŽPaóM¡8Ü e›‡½d6†4¶Ý¨B¿fuggC¨ à à{ ]sû?௃’\›q¨]n¸¸›øc‡l0Æ™ç $µGÞ*O&¸ÍO⇉}Á²}{Lñ>³}ë5p$M[FI%͵<òä2)êí<õÁ½y·ÃŸ‚—¿ ~ èzVoc¥i&ÕP&žVY@PƒaÜ„œ3Ôצ_è/¥þÎËm¦Ê×÷öPivˆ 6Eu]À“Àñ'Û§ôw×q^êó<º[{»»;u¼{Y{H±Í ‰Ä·;‘wrç ŒX䜎+±Ðô©äÕl¡š8¬JÄÎ8«`ǃ’\Ôç¥y÷„ô?Üü}Ñ|?ugKðú³^2#ù“=ä"ƒ×xPœpN8îz'…­n~4Ån'Ž$GüÐ+Z P©û׺2ûŽ3ÕÐqŽ{1I¨üÎ<4R“8¯xŠX¼a5­³ÄˆcºR¤‘ø—.y;†:gšæ<à}WÆ“\}˜A¤½ß™*ßKr±XÁ$¤Qg{…S’qÉ®³Å—ö··wzÞ¥†8e–âÊ'^!¸nŒ&#Çl“éšætK›ËO ßßép+êóZ5›ÌËÃ,²$[Ëž ´®G¢«†³„ÚZ-Nаæh£ñ?@мccàÿü=2ê&“­ÅÝœ2¬gÌf’bz4’ǯÔsž¿lÏxƒÃ> {ÏÛ4> ˆ´—w«7Í¢@<´9$ýܧޠ/ì>3µoü4Ñ ðgö•ž¯âoA ´r‘$6PÜ„Uܸ;$ƒ‘ógû ÐøÃöi—ã‰õ Ïê/i§h˾áÍÄfh.2óµJ³(>„õ"»°•–iËáóêsb)¼Jp¾¶Ðø+öLøzžý¨ü Åí*îM3[’o²Å")†ñž ‡ Ùx^þÃÄ>&Š[ÝbæQ?îPØT@¹èˆHU#¹8Ï5WÂÿôçñMÞ³«_Ï%ÕóÉ"¼R|” !V^6®Fq÷¹÷®‡Â~.Óç¼[½j¿´ sÁ–ó­‘³´ $0`÷ÈÚ¹ßêZw†ž{ê9’dýÝ”qª¹7ŽOã½x”ܺ½Or£mr£ñ[ÀÞ):B\iÚ\Òê|²ñŽœ}hñ|ZÞâT¸Ó­‡Ú¤€ DH{õ8=ýk¿ðÿÃí3EÖášÈ-Íë8XcfÚ¹õ«ü1}¬J$óþͨ‚Ͳ&v;â¾Ö‹’ioÕŸ%웇™à÷Z¬º…ê6ò}Öe[¯zì9šK]:ñ# kb¬#OBOé]ÿÁ/ˆz„5ÛýKËXo¯®RÂÛæ&$`pøõÚO8®CRø¬øKH’Îâë7lôxòw‚y9ëšï¼=¢ÏáKmI!Åo:È¿3ù‚XŽÄõõëQ$£O•­=w:)¾i¹+çŠô¯_¦³ñêͨÁ§ªÁ|¸‹¼ì;/ÓÖ¯üYÑu|!i'ÂÆ/¥A"Cy{l0¢4y`‘òÆ>nzå>xÃÅÚÿÄ=oLŒÞM¤é¢8KûÇlà{·$þkR×o¬~|6ðêÏt4ïÞK Úîý䮆¸ÝéÉù~•æUŒ£Ë•—OS×ÃÆôõÝœ¯Âo §ÄïŠñÛ<ɳý¥%Ž%b#<&zô¯qð?>ÃáMcûN@l®g áüA»ž‡é[¾.Ûøcâ_ð±~ßy¡ÞH‹x–ì<Ì#g* wç¥bücñÕ·~+x‡]´ŽX­µ}BKˆbp7ÇÀU 88¬!”ërÛÝjæ³ös¦í¹¹ðÇD¶Öu)4i ’5Eó ¸ÁRÔ û7CÕ`ñ'Ãëv]”´–mJÅ6móbR“#1ê…³Œr+óçGÖ®<=¨Å>›4‘(Ó$"Õ5©\œ2!Fdˆó„ÌÇœ(dÖÞ£Ô5;Ó¥…V?2K¨£‡nNF6“ÔœœñøÔV&ÎmvX4û¸ÊóÈd™ó#[Ç—yd\¤(åsíɪþñ]§Ž|³øZƒàÆ•ý•áEP¥Ì¾!ÓôˆYsƱÛ-Ìä÷eÃá÷†Þթ⯠Üx{özñEÅÒÉjÚÚKm8nŠG$"%²£Å¸±à7Jì~ |7o†¾Ô%ñÕÔ6/ªÜͨÇœ²Ï)*ãcY·>€©”Ôa$»ýæÐ§ªuCŽÓ'j·2y–š"Ý¿›#¦Ô¸v#rE·æ-€ª½y8êkJ”›“Ù•_<” Ïeñ7‰,×ÁÖV×r@÷Z¤‘IrÄb3xbˆ½€pŸ1㎄šf§ Í¯éö×7º”4ÂYepZI>b2NTª0zÒñÃûß ü]ñ >¶7­áÛ„ÀÛÍ*•†pÍgÈçš—ûíZ¦¥¬[ÝL–Z%±²€6M&pòìãqÚ?¼@Ådçįc$ï4y®‹áKŸ‹?¥¼³†ä\ßÜ›y¬6’‘¼De@wlzï^ÕñàøLöâ;˜áY¦ 2Ÿ4µ—#ƒÆÐ}kÁüw{¡øßSUkûô×&b†[ib†3µC©ÛÏCÊàFN+ªøÇâH¦_ ÙËPÛ¶¥‘˜[·Þ¦¶û §$ñÎjªÁÉÁ_ASšIÔéôïëóé¶š%ÍÙŽ1¨êË+µ¦2:¨=¨9ôàŠ—öløO/Æ=OuÓ[Éâr$ŸQµùÒÆBÅü±œ•PªŽy®Ûâß?á˜>ÛAâ­^ÚÎ÷Ç¡¿ãt,Ñ!*wy`«9ÇsƒWcoCà„ÿ4ë™–ÿNð·‡nµoÚÍ'Ùà–yÙ"Ó¡žERfq r°‚vár;žeŠ~ÎrŠÓcÔŽBI>‡›~Ü´o‡ÿfù<%á¿öÖvhwê׺›ÆEæ©k .§‘†Õ‡Ÿµ|½ŸáV‰cà]K^ñuõÜ:5ÓÃ%ªJRFžu›òÈ1¿”‘’ÙŽ•àŸ?gOþÕ¦Õ¼}¦&—á[yfâchl wHÆp¤Rçjçç>Åâ Øïü;¦h61 Ŧ£â+ÙãVÝYöÅn®Ã.ÅDP ÀàW-kFŒZw›ßæzXX¾gý#Sᧈuh~3²‚kiàžM=w‹ÒÒFH^éƒ*¸%Cœóšüôý¢>ÜYkw^"¸Žî#ªø†ãOò$ƒåÒß,€áÁ;œu¯¾|;ámGáÃývûMr|Oâ¹,íE’Âë5½„>bE’À`3KŸuëåÏÛ7áv¹àÿkêV·šji:½³ÜÇq©Ã:‰›¼×ErU°À££r}/.Ÿ&&ë­‘žeF>Ë•[ïê|‡iã]SÀšìw^º–ÆöÝÇ•*pêy>Øãõížøˆ~9ü/ñ­ïÄí^ÇLÔ<*šN¥H´P[Å{y2É-ÆÝÍ*—@!±ÛÇþÕ?5¿†ú†›â/-¨ÅÏ5ÚÅ 4fÕÎ×1²7+Āި®{à‹ßź~©HÑXk·–¶×Ó ‰u`Ã's× '×ÕºpÅQç‡ÅþGÆ{iàñØìᆳðï[±ñ‘ˆeðýŒ:ÅÖœÿë-’PÈ¢T9à ۶F+Ò¼‘uo¥Mt&µÞÍ#yQã|D±c•Çž1ÇÓ¥{ßÁ7WøÕâfÓFѯouK[k¤û3Ú”ÏæE0f á"ÞØbF'åÒ|mý„ÛNøiâ»íWYÑŠ<%a6«©¤!æm©·m©*¶ä’ÁîÚÄF„¹j³W†©‰é«/ÀùÃáfŸoâïˆZV•qy•¥ì»%½”ü–‹´ïþÎ@gx§I[mae² †b´ä#õæ¤Ðe:u½ÂD†9PÎÜâ®xJ>.×’Ök»{#+íVü¸‡;˜ð+Òjï™=,yŠ~ç,–¦&“k*j‰qw“ ÁcNÖu‡Õ¯•®Sl €ÿ©®ÏÄ^–Âü¡x¦D'vÆÞŒpFk3ûñ%ó­­¹˜¡!P/Ìz}ßÌqT¦¬¥sg=­¹RßL¸¼Òn¯|¬¥¼,Êz sÇÓ5×øW»Ö>ÊúÄÒÜêWWicl‹÷š= *vc¥wŸ³Gì¹âŒž&“K†4Óí0#–âíc‡,çbOÝpHÅ?âÂûo„?´·…~ ß¶ ¾Õ­ÖÒ[íæº,ŠÞaP(pÀqÐóÏ5Í,M7/dŸ½¿ôÎú89Ÿµ’Óo3é‚ú,¿ ~ÛiOö}Úiш5 ]÷ î\y“m#ªNÞQÕhúUÕ‡Åw$r:É}{; Ô’d’òd™e$œžõ¯DÑ|*c¿^+0Eª\*Ê‘G扗î4Œ1–*xd‚j‚µK YéÖ‰/æm™RÂs– à±]ØPÊåÁèqé[ßèšÕ¤2Π¾{ûË€ jÉÂîdã( ¶Hrr:VUŸH“B<Ö»ÔÞðoÅ>ÜÅ⟉Þu´7Å´í2Ñt¸ã|“–2#/ˆÐ’Fs^]âÅñŸö¸–ËÁR^Zéš…§ÓÆU¡Óä¹¹¾å¼’ Ea—ï³ÀØø×Ã÷üðÎ-&Ù¯|?o®3ºùÆÞ! ˜M-ÌÒ$P í°tëåw>9Óíÿhoiß%¹Õtk=zâÓQ¾µ>wö…„’‹Pç ¸ùW o\ð­ÑNG5ª­»{Êÿ#Õ«C•'£èM§|0±øûHEká½rÞk?C¨Cq¤Ë4³Jú„Q#Fɼ|¿»ßžHùxÁàõÖV2[h‚îÐêM©êÊå£Ea,EаvNÌÔqÏQ\¯ÇïÍã¿‹:E¡–-*ßÀ÷7W'ZŠãʹI¼ÕV„>ïß2pW ÔzצÚÝßxŽî8ìm¥Ò¡ÔX³ÿgÄU3,¬ìùù˜p[¹Àè9Öò’NOSš¼bäì­r/|>Óþ ¼Ú¤éÿ}N ntø¥œFWi7xÛsÏÎØŠôo ê—:O‰5¹u W½Õ¼5eçjR<¹¹…ÊD–Á‚<Ÿ”{æ±uíC¹·±×¯%¾Ö'µ¸{o Ç.ÀæM$¨È܃ÔG¯IøIà·Ó´-cZñú[/ˆ5ùIœælW¯”§ç;öŽ=W+š»æ÷¤îtá íh½SGøm¥i~(ñ^¯âBÚûX–ÞÎ]F?³©º´dšEXÁu@Bã•V'©¯ÎoÛ§ân‡âŽ^ ñ.…;jµäÐÙlP|›h¡R‹‡$™®ÐOþ ü}ð#áïµí;OÓ%ÕumGIº·Šhž8.$2}œmäåòyÃmÆÍ|+û;~Ï–:ÿÇý~ÑPØÏ‹/¥»´µl‰.³“€Q0±B\nÝü[•8ïèåj*n¬öHå̤ù}”^­üßà8Õ¾2Ýø‡ÄÚUÍ®‘ýŸw.„¾kímM¼´·A!ûä+Nv÷ÝÛŠú›âgˆôý’}CŶÞ{¸’MWJ•ñ‹–•CŒ·O'Æ5Þ|=“Ãß~xSÀþ*°ˆÞ^'ŸrlfxoÎ뉟o>XîÆAœâ²¾%ø»Àÿ ÿf½+SøÃªézv‹âMRXỸ·ódÔí§ó$·IDJHùc[®#pj1x•Œ«ÍÓd‡„£$^ã´››K>Îx/[[ÖÚ|ð.RìÉ–ŒdWTIä ù[ãÏÇé¿edðMž.³¨ùº–©°¾½ÛÃæŒ©¹ò§åËyg³sÙ~Çÿµ^…ãí'Ä^ðVt­3ÂÚ²ÞèŒÈc‘ô&vAÜ)IAsÈç\àð>~ÿ‚ÂüL–OŠ~ ð…Ç”.ô7ºÕØ P-ÒTXâPv³àz ëÖ¹°xV±jŒÓ³éåÜêÅc!S )§ªëæ}uû;ü@·½øEâkÁr\Áoâ;‹‹ûy5½û@Ûà‰”¬®± =ó_þÖ?.¼GàÍ7^¸{IuíÄÖ±ÜËlÎȲ>àû¸A’„dŸ™‡9®SöXøõwàÍ7^ÐoüE'‡ “MŒi׉j.š;‰5žp‚>uXŸá#iV·í%û?x£HÓ®|mý¡¿á}`Úßj†žê¶í!P¦W¶P¢%Î@ùx$äääúÐÀª—Í-:_ðO2ž&xœ?¸µêy×ü~u.m"åašÚ xL7¿¿’]ÎÎÌÝYI*y瞸â¾ýš¿cm7ãà»­vÎ]"ÿL’턇ý/U»ŠY<Ä(ÄŒ/”›”ãqÎkÍ?eχšOÆïšýúè—:Ÿ…3øÀ>:N¶m­¯Ýõ¢Æ-íÂi÷M1Fl|‘O;ˆë]xª’§gIZ[½v0ÃE)sÉÝl”ÿj_€o‰§A´šIaÔttÔL)Yl¥i$_)‰#úóÚ¸ß_î|ãÛëÍzâðÿhh—:Ú|Ó¾ÌLñb}Ìyòü¬Œçôõ/í!àÝ?Xø)âßkÐGÿ ÝYGy©ìyš Ê¥`O1‹)å™@àœñ×㯠ÙÚ\ê±F.¬¬áƒpê1þÛ—Vxš.ÚÜó3¼:¥R5)Ù]Ÿ ¿¾¯Œ~]è:\P&¢šILÚßvîF@…Žpze±[¿°Ž™uðÁngø‘5´—2Z4RF"H'xwˆÁr Þзu#ž•äÿðJÿ®·ûIÞx?ÄQÜê¶:†‰uª,×W®ßcžV#NpÌÁDg¹¯Ký´âð®™âûöÒu»Öcl5›3wþŠo!Û4c{ ùޱm œ€C•ábjºUu-ocÔÀac^Н).hô:ÿˆ¿uïˆþ>žâÎÇXñºê+ª—‘Âð«ó2ÆžR1’yÇ5ó×ÂÙ”|,ñ´þø®,5ËUMeinΗZ¬*PmÚ¤gÉs’p9ôÇìßñFÇã½Î»ãcgyei¦iWbÎÏîÕ§ǘØåZB’:±å„!¸¯:ý¦~&'Ä6¿|;¤Â𧇝¬åŠ=BQ4qÈÄFù‰* ’0ÒÇ<¸jÕ(MáÚÞßyîT§ ô•D½å·©ãúGÃEñwì‹}®éñ]ÜÛè#Õ.,4[ bÓ¼±1|$cr«ÈÊ£p /#òö²÷!–=Gb$.ÞUºË|3}ô¯¡þ&xÛWÖÿf-"×À ?‡4MbúÞI­æòiåXî–/,d ’±ʮӜŠùÓO[‹Æi¥|‰•Ûê9Áü+èòøN<þÓ¿Ìù¼Ê¬jF {êckpÚ@ÐËpŠ¿go”(Æð{zí,|%aâK†ÂG'wœ±3&üp¬ÝZå|e¦‰'X¡?1ÁõÖ®vö–«l—whÑ.Y#|Ùî?ÎkØævMŸ=8òÔ±J×KžÃTº°‘•îa“fÕèp{~µØ^xÓVÐô™´ßM"ìZKa¨.¬ÐÉŒ¦ ü£‘ÈìEq·VƒIÕä¹iÚHd› @çN9ÀÎ~µ~ËÄBê ˜­ä%âmÐ>n¹Çó¥?}ÛsXµ 69ßéæÔ¼‘GÎ|©08?úÃ5/‡µIü#¨ÙßYI¾h¯#¹BB˜œ0A+pM[ø‘|ÒTŲI³<‹Ðd€2ô®NÚZHÒU†{ƒôíZA©BÌ㨔*ÝÓàv¼ý¸¿kkVñÉ+¸Qµ/%J)µµL•Ç?{r©>ŒqÎ+ïÿˆ´ôïŽ/<ð¢ÔfðÖ•ld •ka6d‘ݺ`2"G÷‹ýÓ_›¼w¨|ñVŸâ(dŽ@Ë<ö‰c$n qG ªŠý&øàŸøwÂöºÇƒà[»ï@šôΈE”ü‚V|œ“¹°ÄÇ<ž+çshF›‹kÜKD»žæYZU\—Û•­~ǰx›TþÉø]£Y^[Þ\\µ×öÅÕžÄLÌ#Å Û€¡O#9ǽU¶ñkhú%ö¹{>‹ÕÄE^YKIª¨  ¤.GÝßß'ÞžºKjv"ãÄz\­cm™‘72D²*0ù˜’]˜““‚ç°®?RÓŸÅ7jú•ªßØÛ6lôá—æT,ð6”SÑ ùnµòKÞ“ov}ÄiòB1蕌O^ÝÇñÞâoÞ–Šs/ïœîÄÁ˜¹ ´#)9@9“ÐW§xÄ“èú׌`µT‚Ñ`df?Ú>d®]‘‡,§j—®9í^Wð_âñ'Äk¶z\7©¨éÓžgDX'€¢µ©èD…œ†Qƒò ç½Ãþ±—]xU´, ²†êíäÂÛ `D`*Â!óå'5ÝZÖí¡áSOÛkÜ_ø;TøéñÆ'½´ºÑ¼-áç[–yT™5[µ!–8£$ˆ¢çcŒä÷ëO×|e¡ø–òÏÁ·ž{ BSs5¼Q,pêCùådØNcYHë«Ðâ°j¯Ž—~ øyâiíg"ÂÓÂòꢓbû›Ù—¦Ü¯¯aŽkÊ?aÝ~â/ iÞ ºÛ·Z•í¬rÉÙ¶K9yåyHÎ6 ¡9&ˆFr§ÏÑu,ì·z[øká­¿Æý:ÜxSº´}2è™!„…d“*Ì%¸^?‡8*?øD¬´KírÈ›f»ÒÇší fiæ!˜É”±ðëÁ~@“T½-lß,¾|ΑȌí$J£f®ìôêÏ|eºÓü+¬Þi–sÙÝBið¬Ì¾ân9t¡îIVý·Œ5½ â‘qâ íB{=&Î1®]¹K[Y.LA™aN¿|Y¸U8’ia«T¥YÖë²6Ÿ³£‡ö)o¹åŸ4í"Ñõ‹«Ù,lü»¶Šß6ÐJÅY|½ÿë‡lmùˆÏ¥ywÆ‹šŽ›4o‡–“Ťk:¼»ä´VcVðɵY›™®DXa×`½zßÅýlxŽöÎmBh¤´ó[\[®è¶Ë6⣢–ÜÞ_¢šòŸi·Þ3ñÿƒ-/<9s¤i>yã³µÃ,óÌÛ|ò¹Î ,À»óÞ»h¨Ýslµgi®I?+#®ømw¢*C:%¤ k*•MÌ®çï›’yë[^)¿¹‹áöµygö|šþ¢¨>m»mãòãI6 Œ[Œ.MhéßeÒ¯,ͤqÞÀ¬é e£Ìò(vÆqûµŒà÷,{×⯈úέãûí#Æúz‹ÿ*hBÉ™ÚùÞN]¦c×øP€Öqµi¹Å —êôÔI&†&eޝk%ô7eX÷†VH܇ÂòWy Xÿ \Õ? |CÒ-ôÍB÷I³¸ŸN¶ûT0ÍxUîà]2¬¨„«_-¶ÔMh|¼´ñšjš‹¶¡ ݾ“<¶?g|±3Üù¹Pc–=5ÊiVVºM‚ZxÊV{KqÑG›˜ã;cQ‘ò©'÷­U=\n+®E+m ÿ†º£ñ WÄÑ],:uôšµýíà ÝÊ»’6Ÿ-C“Žç8âµ­~kºŸÃŸemmôïï^Ö(HXíÐpÒ°~BûÜÁÚkOÁZÜkðÇGÄ\Ít²j2Zùl‚x÷”EwP6¡r¹ùwœœT>#ÓÞÝÙkZ¡¿Ô<{qqxöq]Mn®ˆ ®?p2„ÿ–Ÿ(êöºˆì¬|E$~R»µÊDØÚpÞS6]g ³v¯oW¤¥M¿Ÿ§“<ñ•¼îÖÕùÿZ?í³®‡wž8‡L°Ð®õPšeÂÚK™ZB /Œ¬d s‘’Òz ùâLjl.ô=JãH·`™–Ö×ÍHÒh¡CòòÀRä ±Mz÷í·â½gXøç«xĺÅö± Ô§Ô®µ)-Úyä6yÀåUDØÑÿ´xå°~Vñ^©qweR+cØ/Bƽ\º”•8¿êÇkZ<ܽ‘GI€ÊÌð aÐ1WG¡Aq««®Í˜Èã5ÏxwM¹¹…Ñ7&6}‡\þuí²OÁy~;|SÓü#öè4û{Äšöêê|†Ú1ÝêTíQýçpkº½UI9Ëdxt£ÌÔWSíø#ÿì¶¾Óµoøªìi³ø†×ì0 ˆrövi#3L§±—ån9Ø‹Ü×Ôº}ô¦«[xZ3o£ÂÅd¼x·]^0$ÈàH\m#œÇµ`iõ†ü9qg§hð[hn©m“îF0©Ž¤` ÷8¯Að=½†m¯líbŠÎKH"Y7H—Ú@8#ž™=ëàq5jbªÊ³Ýíè}¾4ðtãO©‰ñÃ7? ü9;ØÀ­} *K$l¯<¬p¬êFPW%€é^5«èº…Þ­‡Šonnü¢†æùÎ\œž:dî zb½‡âŸ‰ÓÆþ/† 'S‚Ùm¡Ž{Ÿ3;®%cÙ·%Ë `€Ï8¸_ˆ_lÔu;¶; ¹a$÷r Û!*qƒÎÙF ?¾ôéËK=ΙÇK­º³óDñ®—6²–wQ}ŽíË$Ϲsíé]M‡‹­­õ;…Õ-Rîâ8ÃnY³•=†+—¶Óô¿ˆZyxmnÕwË `<¬ÿS\GØ'ð¶÷V3´›Xd$>OÝü}²Sm^ÏúØù5>F™êº£¦øžÊâ/éP[Ë”Y÷²ŽOR>•Ãø—Â…üÕð´ÈFÌEp«×ã5Ôøo[Ó5j µ¸&[//2Èœ#¨¨üy¡izÕ«Éàø¢Ò;¼Ï0æE÷ÛȬÔ×ôET\êÌóM_Å·~›s¦Åö¨#‘t’©-ö¯Uý–tUÿ„Çv'˜}® xeŠ<ç{1ç?ˆ_È×›ø«H½7–ÓY¬Z„ı™a;™9ükÐ~ø†ó[EµÐÖ9/&ÓžÚ@Š–Á ìGñ šÚ·¿E¥» 4½œÝµÐå|em/üG&¯q$F}'gÛXCláBç¹ÇJìl¯]xÄþÓ4Ëõ6W:5•ü°"qi3d0oVã5Ù|6ýš-¬ôÛ{O¬°Û°ó¯¦’]¦yG*ƒzdç½p?¾]üGñ½µÕ½Í°b‘Ù˜críÂI§ W:”*U§ýÔuÙÂŒ’^óhöŸÙ* õÙóÇÚ—‡B¥®fšI䈖tD By=9®JÿP¹›ÄŸ ìµ±hR}±d‚9¦:7«p+Ò~hrü.ý%ðzŠú¤Íy«ºBN ÙÆÁ'žõÏ_þК_Â0n<%áÈîuiO•ÜȲÏ2©Ú ±É ÀäcJãE:õ%Ýtîz5%j•¬—Ìó·øa®Üê~+þÃÓîííõ½Jxíæû;îò‹¾ ç79ëXš¦Ÿ­xCN¶Ñ¼!á³½ä]Ü, $”'PÏÕSƒÅw^*øÇ«xçX°—Å:|–,Ñ5Ôê·ŒKü;67Äâ¡Ðõ«-Aø6 íôÍirf‘œ\™UÛ8ÆqÍtSs·½ëÍžuIFm»³Ì4/jþ<Ö ¶¾×¦ÑmQ×`·ˆzœnÇýMzf¿ðò÷VѦ[ýrKñkûçYX¨‘€ÊåÇFrGz†×ÃZ'‰õ(n-¬&¶D &xY„r”?{g÷Tçk¥-”Þ¼û=Ô·‰v \ £<ÇšºÕ—.Ÿ"iÓŒcw©åþ5ñ½‡Â ë%º´ž#:y2¿ÎŸmøR»×Cà_Ú2Á7¶{ ý´Y’ìdw‹i¿Ažýk€ø…û;ÜxÊU»ð¦¤ná´]Œ·3za¹ëÅSø{ðzÿAñDi§j/ÊFÆD6ìÈür»‡ËƒÈ­ÕU)ûÒ÷Œ=µUSÝØ<ñËNÓ5W¹Ö[‹y‘x¾{ <++·;€Á¯¢>|\ŠØ„–#ÂóÉìPa»‚s×½yÝŸÁÿ è×·Wž/‰o¬îAšÚ£©ò‚ÊÀs•ÁïW ð>“ðö]?ÄÞÓí4½:ú'…^MAîæʦ02!I=kþ¢´oú¥R–®Hô¯ˆÞ+°ø’¡ü2K‹u_̶mÇcÌÇæ ì@E g‘Çlæ¾|o hzwŠ5¼_vÞÆì4‘ÙF'iUÀÞêäa±†Á?.~µìðüO_kÒZéž™¤ŽÉll–ÞÛoš˜Ú]ÈÁr~ø˜ñÍyWíà}_Ã(sq¡iúe•¢-­¥µ¼ìò¸,òî%ŽI ç®±ÃEÓ|›_Òã¯k)îyG‹>$ÿê’ioui¤™Ú;x¤|¼p†Âní»o_L=jŠÚÖŸªèº hJa}>9"ufÝÄ2ß\ñïX>(‘5÷º±¶†Ô\92Û"Xˆ8*¹$㎪ݤ·¶^j>2 )v¯b4•¢×CÌ•w$Ów¹·¨xŽähVÉs?—û•¶SŒ62N3õ&°§»“@h¦ßûÔutç9 ç­kë¾6ƒÄÓ“RŠFÕlI€¾!‹$Ã/¸Ÿ›Ó•ÐYè:D¿ìoüKir÷7Ú´Ö‹$Mƒ º@®$¿ï Cœ{SæP‹mu/Ùº²´K’è£Ãþ0ðCjZ¥ü¶š×Ú\æ Ѱ<†yèkžÂãGÌ!$ˆ‹(”_ʹԳmæâ8¤/g:çqÈ 3Ò»ÿ‡Ö·WžÖ®ç&M6Æå`!Y¤¹î>ñÒ’öiÊ÷C¦ÝV –§3:‹Ø¿{¶(Ôà÷š­@EŒ±Äfi#uÜŸjšûW²†A|»ƒœ\)úŽ+!x¥‘AŠN™^žyèkh;ØÊIÅ¿#Ôuíg^‹ÁzF“ñ ë-%u³¸h°A˜ÁÏÍ÷ŸAƒÍzÿì5ðcÄ-}wPðWö ÓI¸¿*Ü>pFMÀgt5óÖµãKƳҵÉVK}>â[˜‰g-"¢rq€@öÇÀÏÁð‹öÑî4-2âÖé..aÔ|ÂV;û©®vˆ>èMŽ£q9-’F:ùÇ,5)8¥y?éžæ³~ö‰~'Cq­/Âßë¶ÒÙK"ÞÏ+ƒ2Hï€è©‚¸üÅr~$ñ¬þ ð%½Íî¡}^Ü].’ŽK\¾NÂÈ0%‰lŸîž£5×x?ÃzÞ‹ð&âM&ÛI¹»‰Ÿû>wI~B±,rO¸&¼Gã sxÓãMžž]­ìô›XUâbWì¢`\uàpKžÕäSJ¤š—ϩۊ¦àÒE„V—>Ó–îXÑ5=BI.dbµÛÈÄ ‘Kn8þ•ïž(]~çà)—L¶[KÍRò`ÓBÉ#EæGrÃÌáGwœŒñäŸ ìåñý•ÇÙ¦TŠT›Êu;¡B[Ëg?øö¯hÐþ*ßø¦ßSÕõÍÖ 7DÓÞæyžå$´‚]Ë€ž[`»}ÕŒžy=©âe{hta¹yo2ÿÄ?iÞ ø—m`-~Ó}i¥m"È•Uny°>Ø£Åz±¨|Qð^“´VZ;j>*¸™7g…¤û, ßi1§ûçÁx÷V•ô­_WñD“\kž?ž(­ ŠOß4H ª~Qê:c©ªþ)øÜͧͦG:-¨»M÷W9‡Ïc(ó[$ªŒ QÉÂÓš0“³Zƒ« wlõ‹?tMÃ6þzØIoe »ŠÚPª°åv¦àîëƒÙ€ãµyçÆ‡¸°‡Tø”¢I¢2[éÖ§ï!S$HùÉw9¯2øõâýrÇLñ&µ}¸0[X¡KÉ#îóp¼agŒ|Çšæ|I{†<5a"ÛÜ^Ûh¶V=ô’ßh™˜H ,Mí·“ƒ[ÑÂòë¹Ï9JQç¹í§‡4OD—¶¶¾_ölnDû„¤0aæ+Cž™Á#<àz×IáiãU:ݦƒ(Ï›ie­î&Ò*ð™9<ƒ×šñ@z×ÁÖÑÜ^¬rLï#3"^Aœ9ÜÅŽlqŠõÏ ëؾÿ‰äÖ÷:”VË쉢gÛа ðI$ã’OjÞp´tw0»O™íŸÄëOµ´ž&šuÔµ«§T!œ0U Ï' ØÀ7^*; 꺾¡e§ø'LØ·‘Ï|)Ö(G 6¨9Ê‚AÇ8¸¿xnÿÄž4'·šÞ×ìE|¦”[ùàU2 *­¸F QÖ½¢ÂëMø_ðóXÔ+8õÛ›D¶¸K0øÒ#Rx$H0þð‘šó±T5Zž® Cš§Üp:…߉<5o+Zˆî¢—í UGïTd¸R>öà1Ç5s ô_ˆ?|;}ây&¾’tÿBŽWo*B ìDb>Ø®2ûâαsªiÚeµ¤IeÜɹΘ#lXáTœ`àô_aÐü_ý£ªÛ>Š4–¢hC´»ö„¯ ¸g$ãרS›…íbQ¨ªtGžþÞš{üDø!†¥¦ùº¦›{çéïo<ß)Ø ¢”ÝŸúèq^û!ø6hg/ XxNKH¡ÒÒÞGŽÐ©»VÝçHîy3ÉÎæP0£½7Þ>›âŸŽ•£Á§ÝùŽ÷·RTPƒåÄJœã-ר ÜdŠêü9}uâßZøbâkmNÃE‚1sqbY-.$…Nï™St‚2*sëšæWB±k­ÏFŠúìùát‹vW’Ed/ÖK}?B±«$ÈæçTF%wF¥ví†ÒÜ(ç­bë¿´g‡¾èÚ]ŽÛ›y[G<t[d&@Í»$LCo%†:ÏÒÛišÎ¡à««ÙÅ –ɲ4mãN%?ÔÆ8ýÚÑî|ž¤×‚~Ò¿²%ׯ§Óáñ‹eÑSA·’+é6¸þÓ–ÔËyîÊðDÆ[.N~Pk›ËRiTvGmZn º{úŸJ蟴è|y}wêZÃ@׳=ü‹p¡Õ·†ØWÌW ò“±½kóÓö¶Ó~*üSñW†¾'ƒ¥É­i²ßi×r]çÝ)U‰–4 #ócÆØÏÝÚÇ&¾‚ø[ñ±¼sðwÄˬϩÙCaâlLº’GºÄK$RDˆLc …;H;I9?3üoð ׎¾$êÚ·Œu=24«;É$f.%…^Ô2íÁSó¨Á<†èF+ÔÃRŒk>m2µ9Æ*_®ÇñÞO|[ø!àßêúάúÄPØÜÛÜö×±Û3M(%ˆTñ‚W·JùöÎÆâ; Ð“µH!×£}+ï/_õÍ7öøu⋱&™¤éº©â+™£\ܼóÜ´iòrÑËó±ì«Šø'ÃïáÝ:+ ¡­¬—Ȇ~êü£=Àôyee.zqz&|Þu‡öU!4·>òýŸ>!Øüý›õ_¼¶³øš;ë{&àAœ—P¬ZL¨|¨ˆœwã©® â¿Æ[‹/‡ž:ÓõÍi.õya´’ÔHK©Ýæ) ¬>lŒ|Ê@­ÿØGáÝ—í'û,|Tðî¸òǨøzÞßWâ&CJðn ­—]¢<†Ü¥ÏÏ|sñ^™®ø¥fð©Ý§¦Ÿg RH¹t·@òÀŸ'è+‰RŒ±S‹Z§øÓ¨éá¡;îŽ2óÅæ}fÝ$xáÆ-ã©%{pzÒx‹JkI'DBŽ®p•$uǨ5Zßö¾'yGÚVÑ¡‘Û£7¥v_ îô;ëëx~)yæÍåŽ9n-£Ý4(­¹ÙFq#è2y¯q¾E¢>wÙ{Yo£ ðÄ]KÃ^,ðíÄv_i}2^cBI™I#ažœœ×ÒŸ ô­"_ÊúlÖ-v’ÞÄQÌ$|ªãp%ÎÏ»×'žõò/‘rš¢ÜX±B3"áòq¸ã¯|c­}û>]êþ)^¯â½Þæm&îÝ,în0“Êc&XDKÞ7˜1ÆÍrã)Ç•MhtaTùÜ5gÔ_³7‰mîlt¤·Ž,ít¶Ò¬Ú›&\onûp@ä“í_ MñR‰µ]þ¿ðÑžÚÓÆ~)K‹:âXm¤’ $!³±¶!“q»gŠ÷Ï>Õüû6=Ä‹ÝOOÖµÍrþÆH­`Ïl×ÒÉsxT¯(<¦³Ø`óßæXXxöÑl<«[¾˜úµ­´w1eÒ4ó‚ d‘•dãŽÕÀ¥W¨Û¾šتÓöP‚Ó_ë¡úªÛ?ˆµ»–ÉþÌçFQUÚãpù™zp=^qÿüa4×þÒžßG´† ËrT ­6§˜CDN –öäq] ¶«Ç¾}ìÃq4¬òB!yìÍÊzÆxÀ+ƒë^ ãOÜëß5Hn-Eö±pÑÈñ,a£·yêä¸ÏE•F0z&2k‚œ=¤íÑIÚ7êvZ.½Æ/‚¶÷>–}_Ä â é1º(I2ü¼–h­Œ ó‚ãµh~Ï£Rñõ犼ãe¸6³0°Ó­ Û$R‰bX”ñǘÌÊ9ùcÇ=û=|›áƒÿáñõÄ1M«F³ê 8’K˺ªaNZO,á•sŒŒ×kΈ'Äÿ,tË(ôý(%¸žÅdÛ]“»ÞcÀmЬÍ×€£µ\â£Î¡ªî>t”\µhõSðþ×ö€ñ¦»Ëe.£Î46…îð·&Þ¹•bÁûåîW$ruàb›ü=Ô¼Uñk@Ðô›™´[Ô^y!´a±±·çH•œà‡1ÎÝ3ïT¾êöÚ×Å=F†–ö¶:Uú<–÷“>ÖIÞ8ªAÁG|Ü3íQ^¿ñ…áø{àÍGPÑtûÉíaÔíôø#e"a-Ô«ÚnႳñ´ä(~˜æIý^J¤ê¼DSjÊßyÇIrÆûOg†ÆMeogž0í³vŒ¸Êêx d›øpuõ4Ë‘|á„Cq$ï½î8TDIÈEY¤²ç§5Æø_ážµ®üZѼA¾(ï4Û{è-ì¯o -ãͳ|ƒ9Û¶8ÙCõFÅiÞxë^šûQÓõ«9îbº1ͺ FrýðY‚epyÝ¿9â‰.‘zõ0…ÔyšÓ¡ë?´õñ§Á»O øµ}4ÝÙFÏ<7NŽ-ª¢8LÒ2îm™8,s_?hzÌý¤î_U‚ò[Ë}.8¤‰íMÜÖŠ±Æ‘ùVñ)™ƒ±”çà8ËøEûJjí®xžÓXÕI‡í^uŽ¡äAõòÔb•‡ÊÄ–Ûƒ´ŒðO5ìÿ´ûo kðšYÍ}©êW÷©`ÐM4“Ë{ F¬ÌáÆAGU§ËÔžõ0„°íólÎúX¨WJ/â_×cð/‚µÿéÏŒük¦/†!¼¹Ó´]'NcmªNY'Ž>|·i'PÙÁa}j׆<[·ŒgÒda,’^A,fI|¹%*ͽQrw†e,qŒ*޹9õÏ×–sê¶–¹ëm*XEèo6ë ‘#ÛÇÊœHÅKt*r+Ï| ð—Ã:—Å»ÝfDH´Ë™.•b!?fHŽûò›Aúõ"ˆN2NãÄB\ÉôgPž-ÒtÏXévW¦æîXÕôø#Ë2¾6Í4Ñ#@ËÉüäç—xßÇíðÅLÓ>¢ºÓÍsÙû (”vÎ츗æãå_Zá|GãááÏëöß 4­0êÑÛZë)sqÇ“ks<É"±#æØcVeå¹ãÝø‡ÅZ§Ç_‡:?‰ü;lF¯âÏ -`bgKY‘\HŠv¢G!OLJç­%•ά#JR¦|‘ÿø·o7Çß ø5ïãÔ죃OÕõ´Ñ£ÝÎê–¤ƒ†áþRÖ/µexn;¯‚«ãŸ‰²Í¹<[iwaò…˜Ä·ÑBÑÄHÊİyÎÊ>PÇ“\w‹ÿeüHý¤-îuôø¥Ó£ŽîÖq=œ)nHÜJH¬qïÛ×åœ×¹þÐ5ïÚâÆ…s¡Ekká} hõ ©neD‰í"¹ sqžvá&œlóƒÖ½˜(a©S¦äµ½ÙÇ,<ªÕ”å¶ÿ1Þ#ðg‰îîuˆCQñ‹f¿ÖdŸH¾Ðlü7E³[“šâ NÀA4¯„,e§ÌKûtüŸÆzW€´ß…ž.—Tð¦™göac«Ì¶¥n ¸‰Â¾ nVFP¯ƒ‚|Wؾ*Óá²øÇqcm¦YÝhï¡Cw/™&Ö‰A+DÌq†‹°äíóí!ðvëö¯:v™µá÷¸ðí«·¹€ÚÝJæVòZ)ÕIýÚíLH¼€Ië\T1jS¬’Ñ,:qri]£ãí#Gÿ†TøíðûÅ×ÓÚèòÏý«•}È×4ö÷ ½FÕUÄmÉ%ccÍxçí9}ñ“öŸñ¶½¥Es¨iš}ÂéðÜ(iG”7Û/¼/¨UÇôïí¡¢kÿfk_øº?*íõV¸–aåI ñ{_.sØ0 ?˜_÷`d\ì,mðOÅ~"[c{ÿ…È¿»„)Pó2‚ŽÌÌ5”ªã©õ5îÑšñoV´Vó<,T.ã…JÜÛüôÆŽÀ#ÝÜ<ó-ä挮@'è@8ö¯Ò âŽãOƒ ´Ox"ñüªéöºn«9tGˆ½ä’LNX¡‰˜Áξ½ø;®üLðøñw‡b·†-Jས”ÈÉ<³SgXdätÏ9¯«ÿaŠr|(°_ümÒ5”Ð`Š]NÔ¥£:´ìû3œm~æmì@P¬0K ¬Ò’¯MM=cÒâËjJ…W~^Ÿæh|4ð„?gÏ„~8›áFµeão Mq°¸º‡l¶"[feYeý …ÜÞ¥ØpAÏ!ÿÇ´ðþ¹â}jÿ[ÑÒ=Z:m.9¡Ç/w3ÊðÁ À D^£ ƒ9 ^kÿ ÂxOãÜ·Þ“J: ´µŒR0Ò–á#âIÌÑåüjãž0ÿbÛ¿ê¾ ñ¶›á‹¥Óî?øJ¬ï­ìaÓî|ɇR»Q¹fLÛ¨±¿à¢ß­¼qâûÃqEŽ“{!‘í£Ú:©·7ñ²ª²‚ON*÷ìíñ/Ä?< ºåψui¼Eá ~òhnÞÝn¦ Ú3l’¡N:ײþÕ–žø1û-êöZ@±’ÊK,Öj¼Ô$| ñÁÉyL¬X9.ÐJËñ'‡|#ûüÕôß„úmý犵¿³X]êv]î.Õ<Çv B[ÎF6ƒ“““•â/jÞ4ñÜ>"ñ½¼—Ú^hšƒAB1p° ®Õ;·HÅP19c1ÇQ'jõ¥Vž¿Íž®¬°Tª;ËÈð]7^ð׆¿f}{TÒ&[][IÕỳ²6EÆ—q”U¸†B@Ü®ýã`“Yžýž|ûg|4ñ7‹þÇ7†uíöÖÎ]4¼)cyq<c!|¶Ëgr’¸e$9ÿ|¸ñ‡‚VæãS½Óþ øÒI®µ÷4Û‰üÇ„¹ÔFd “ò€€Äx§†GB*ö‹km«Ü]ý¼ù/q mlùùŸ ÷Ç95“¯èWWhܹ’Y†f‘œ³3w$ž½¹«:5ì¶‚ÐH‹ XJVÀol×Цù{Ÿ/RMÖ“[+h¡T‚O±ÉÈwïÊ棞{K¡5²ÜûWÁ#Ÿ¥kjZ±¶¶˜£!ˆtõÇëXún¦ÓɱQ˜ùh¤ÿzⴣՙלmÊ&¶—z…ÂÍq(’8ÌŸËò¦Ø\ÛÉ#Ãt«€:ÖŒð'“󼯌ìÏq\ýÄlš²ªòÄŠ3Žzþ¢ªÉ»#ïï=ÎÖKëvÐV)¤YðŒàöÀéîxÅ~¡þÅ>°øuð»ÂöÞ"ÿOhã‚æûhÃMzÑù‚Ú%?x‚Js÷@cÅ~tüø;'Æ‹þð¾‰$vÃ^½[ydÚ‰ZyŸ’q>=ð+õ‹Oñ‰ð÷Ã6‰áÛ8.5ØéVÌÃͺ¼<0Œð›F^ƒhÈæ¾_?¯hF’Ýê}.I‡öµ}¬¶[~6ñ6«ñjH<5á%°M^Ù`’ëÌ‘’Þ|ÂXI"‚D˜ÀUÇ$à 6ñ÷„¾!é–æÏÃZ5®8¿\š”jÂ(ƒ.ë…ä32±ã<ž˜º/i—~ »¿‹Ã³Ey¯_ßM}-À]ª¤»˜õ ñœ“Éï]ë1hSL·ïu­\Af]ç˜dDî¥| áA9Ç'€kæ#OÙ´™önª³ŠW>Zø«á­#à‡ìãwÃÉ.5 ÝõÔÛË>mÕÃM!ZBÎ@ €Žy¯uý“t›|1ð¿ÚnîVoi·z”.~q·yaŠ1矔nl+æ¾?ŸB7‰2lƒDÐÍì„1§`0±¢“€I!ˆè£¸¯gÿ‚{x¿UøðFÇ\ñU…Æ—›æi׳8[kÈ„¢X|Á± BI!‚ç­zÕéÊX~{õÿ†GÌ©¨â£}õ1¿o—Ò|-û$øÖßPŠ[;­bÑâ´Cç4±ÎxóX¨ )`Ééë^«ÿùÐm~ ~ÎÚMÏŒ¥}FMjÞVèFA xÚf BŽ<°9mä|ÏÿŽøÁªêß|7ámH XŽ]PÀ±¢’Ö6òX¨ù—Ù'9=8¯¦>%í§Â‡>ørZÙéö\H÷¶bD*bAˆŠ…b0Hݸ)998ÆŒ£‚RkVÿz¸‡Ï‹…8öoï;MYñ_Œi[¿µ–Œþ¼Ð>ׯjsH ÚÈ““m ®T­Û–@ghû»"¬>¹oðž×T»KÉus°žV‡šÍʰ)% U s±p«:š›ÅMäÚôö·ÂÖöêÎÎÆu…–¶ÛšEEnO27%yô+šÖlÒÒÙg›RÒ§Ô ­‚Z‰w+³°E\aOÊìzž >üj›šWÿ‡*®)B£„V‡)¨øÎQ©êšS ­9ẒI5At|È$ÀEòãEÏË’1¸sÔœë^x’íu­ÂVk¨\Ø‹qÚîgóÖ,G“+î–b2XœäŽÕŸâÿ ¶‡siúYoż(X<¯¸4Žý8ëÀãÒ«ød\[­ßØAº¾Ôbò‰‘6$`ä¦O ÎuZ1в8%Í*œÍüΫIÇŠK“Q»²Œèð”¶hÃ4lþ`fqóÁöâ¼çãô~ñf‡.µ%­ýÕÌó@¨YÚá£h‘ؾr[|¡@núbµ|A{mÿêé–·‰g$מtS¤¹;ÚGvq¡ CË`{ÔøOð®ËPºð滩©Oa¦èkg›Ø÷Kl¯)‘¹ååcÇLqÖ´¢®ù›ÐœCir¾»©qâËO øVÞòšK”F²‚ÜDË#´“/Ìr ‡%OMÄzWŸøÍ,`÷’ý®KË´ûa¤1¡rÁA<y:·SÅw×Þ)ƒ\Ó¯µK7@,£´q!hÈ;§–C…A“€«žyÏjò¿O­ÚÄ‹§Áö±ä‹h‹+ùMpÙÁ®ÈÓ.Iù}O ”SnÉ'±£à¿7Ñÿ o†Ú1ö«ˆãÝ LNdÏ !;—wNÖ}Ö­¢Þiwój‘F—VöRÜ,ê£ÏºŒ°nI dõœ ÖÐ< w…åÓôùdM.ٶçFÏÔ”ƒ¹äòÎ,‘µçøŽ3W/¾iw2?Šïî5Ù¶o.8bQòŶ<Ï\žG)·ع×Vmü=ð4^"Ò.dñuͰŠê<¡÷iù±Ž>!L3\¼¤ä3ÏÃüHñ¦›à{½ûÂ$)ª°XžîêIåh°Þ\H£±ÎX‚‰¦‘â§øw¯ß¶­§Hð[D÷;!º ¹‚‘áJ2rÏœ(MycâOxá¼]ã™ †ÄÚ@úN‹;.š²«Iªü0}Dj³Ë«Æ´nìí¬ Æ"lˆ¼À9C¹p Ç$q^ð7ã…¼û<_­Ç†Ìþ7Ñõë-U5Ql¬×vK}Ki昊Â%l+—U9÷/Š´k[í>ò´ŸÚ’ê2Ëw¾2è­µ!‘ŽwŽK Áò§Ç?€zWÂ/øž†úÅõ½ö»lÖ÷šCB$o³‡YTÈHÊÚH#®0kßÀÕUi*î­cÆÄQrœjÆZ«üÏš>#xÎóÆõgJI­e¾¸›Èüé–P¬Œo‚Œç åõID7í ¦ON¾‡+gH·Xt™ïïÛÉkRvÉ’F?*ýpåX¯oæê„‘‡uÁ py5ô±QƒQ]4>J»s¼å»f·‡tœ\FCtÎE}ÿèø yñ/ö°Ô.Å¡øNÔ¯n·mEvVŠÛûÅ™œíÿcžÕó燴֊Iy–?4`Í‘…ôû ý"ý€<ÿ ßìŸáwøx"Ò¡™eU™‘„Ú¥ü,b¹¦Î ï\,`pZóóZî•¢þ-/Ø×AUª¯¡ô,—¶>%¼ƒÃ[ÜjÖòXNfû$E¤#åGÀ .rF1×Bi›Cøsªê“»\yưƒµÎÙp¤óó®3È+Káç€m~x~ÞÎüE§Û]½¹Ô®JªÜ9!w‘»,ܺíÆx®Âþ#ðÿŠôhí­ m½ä²ì”•ŽâA#£ñ¸1O™<ñ“_"Òê}R\Ï™£‹ý¬f‚oøÇã^«nO‰§}GDµ1ì–ÞÓÍu \Œã ˜$Âö3]ßÞj|òKX"Rb€9 q“W5@šóÉo´(›+ûÅBGÊĹ;A qQ8)Ošs¥ÎTàÔÏÇ?êÏûË{¦D%ÈIê:ש^|:±Ötoôi_Î9‘‘>b3Þ¹={á2M=×ü!N÷Ëg/–í~ìd{úÖöþ³á¯>ÓT²H¦&™F$Æ:gÓé_Jæ±æ¤õ>NTý›jHë´‹+M6ßËyI£B¡uÝÐã§ZÅÔ žyžÖà6õòÖ2ź`û渭}õï]Áq§]y±#£†+ß  ûVŸÃÿL$ûF¾~ÐmeJ›‡.:nÏoj…JMs^åsE4›±Ûø{àÖ¯&‹a¥ÜKýŸ{"¬jIÎöþþ3Ï9®STðWˆ~k“êzLír4ùv4ñƒåKÉèOUëõ¯gÐ-,༊þ ¹'mVØ*L³99r¹<°õãÃü[ý¨´]n ÒÀEgnë^Y$ÜÀ,Ǿâ 'Þ¹–&£©Ê£~êÇlðÔ£dìú3^×ö„·Ö| m%¼r]ëS·XÌ!vÁ,ƒ~c°ñ'!ƒD›Hø`-4äUòf¹žLù(~b¡€å»ç¹®WÁ_ üS£Ú]ß_½Õ®—8vŽgºD·ž,|Û·s¸ž{uïW~¥þ«®_Íã;ƒ¤“)Ü€û¹|¸ƒž­‚O'Ä_]üTñ,òëvóI‘÷Ãb ¥±ÎNÐxÀ'ž)%*rq†½ßõÔ´ÓW–å߆ZžŸ5´–`Ķ—q™U\my%Cæ7bI{ë4Ä3Þ[hÐßKv©æÝ<¿5¬8ÏGlm^Ãé^©øÊÏÃmo¨ø&Ym‹N#X&ù¥ÙŽ]”uÇ×&ºÇ÷¾8¶½:Ô¶²´^\° ¹+Õ‰ê É8«ò¹¢TýÆz„tM.ô^ÏçXK)Ä‹ H<´“iRÃ9ϯ¥`kš&¡¯ÛK¦k2%¦›û°flíÀ`Çœ/`éX ¾°ðWŒ¶ØZHÖúÔAP5ÇœÝf mÁ9ê®»Ãzäš­Î¥s«]D²À¾J6ð«‚ d(ç#½g$âïq©E«ü4¼¼Ñt[Û+Býõ;©c5Q#,Ê€áP“Äg$œîàU_ü¾Õna‹GÔuK™¬dØæY|×2¹Ý3Ë)å†@ç·nj¼¾3Ô§=ëŒiZÚÕ7Ês“œö¯±?m-:[\ÚxSMKǰš(¡KŒ ì‹Îà9\œz޹¯™üUðo[Ðð—ú]üĦý°Û¼¦1êvλðxm{Fpâ0òM¨Fçy¿YˆÄ»#Ú»· Ðððý…æ•"Ë:M˜31Ùdîb½ ãÚ˜4ÖŽÝÄ8<ò›¢Ì¶zìMkßfu>\«‘ §Ø×l•ô{‘¼]Í]z×O¶¾H´»¹´–8É…ß•ÆCdlRx[Å‘øKûK^ËTUŠq~Upêp{†×Káïè¾4¾¹¸³‚îÊúw–Tµdî;¾ê¯¦z “Y~ ðE¥ûLÚ˜>{Å(Tc<8>£§ZÂ3ðäuU‹~ü þ*øjšž‘kwá‚·kºI xÀuî9$m>•ÍØÅr×Kiw–Xþe q´ãœV§ÃÿÂ%ywo®Û«{›W·òe äñ–çœúצ|7ý˜ßÅZRê>&Ö`Óm•rYdô!‡Ob}9¥*ŸVMÔØp¥,K÷>g›ip‹ëµŠ,’Ä*å±_XÿÁ?mõ‹ßK£øöËWÕôË+fº†9æ2[iÒ&]&11ÆNÑóNÒ¼Å~Ѭ¯Ä? ïµ-VðÊ«¼¶ùs‚VE%8$0ࢾŸÿ‚yüEÔ|Iâ&»pgº¼†.¼÷éTl‘@éÆª®í¸È\z×66·¶ÃÉÅiçú†_CØâ{ùl{ßc»½°¼¹Óu¸¶·‰ïc·R Žþ]¹Uó –ÉŽ1ÉÞ¼cÅvÖuË«¸¬$ӮƜaÔ/f7Wrc@ÝÚ¡—#“Éï_Aèz4ºƒ#MnêÂå¥VfPGô,¡p•ä•à }xK ¼ዽGE¸Mjêêö`ðŇÄjÛAX×ùŽ:×ÌP|­§¹îãi»ó'¡ã2øP^ü3ñºe镤† $Ÿa,2)_iÊáT>Ð{œž•éö_ ¥³^ƒáŸ­½šOª?ˆµ5€Ö%òà'³;°]¨pO–ÕOÄþ¹°øsªê+ÑMªCRÀø+¤Ô=™w.;f¶¼SâmwÁ~Ò$Ð3j×P­ßž¸-bû¤`í µw7½u9¹+-îar6·C–ño…õ/í_W\ÂcÙ¨>"û5¤HÌÑ¢’^VÉl|Ájámô»_j—ÓϲB.àŒG¸Ä™ãjž øô«6ÿTðêÜkW ÑÃV`ؘGœ>ÓÎÑòíßJòûË{/k:r­Äº|r³+²HIHÄlîù$yhÁ} Ó4ðóm´ú ¬9RgWâïÇá Qm<9¦Y­ÌÏÖÆRefG@L¬¬0Ž2à¨m=+'X¶Ò¼_áˆàÔlm$šõšu¥†X˜#Ì…“–Ê©'×½q·WãÅ:ÉðÌ7 Þ‘gÝò­à»†(¾W¤„RFÕ9Àå±Ås¿m/t¯ˆ:•ö§«ÚÛéq)±úï%—û¯ÁÎ;Vñ£®Þ§/4å%ͱìZ/€—Á.—Ú]ôvº=¼M;IÌò)&GY0V ÝAîzUÿ…ö·ôÍgR³_";YÞ+o; nçh÷»î±àw<ô®9ü}¥j~6Ñíš+áË;b×°+÷ï$ŒH —fyɽrþãA🅠¿‹õ·’6ÛH­0FUæI#9ˆF\ç¶9¬«¹Foc§ Ë*Žu6EÍ3Åvú/nbšI“û CMQdeÊ]…Ë/–z…hn9ÀÈ.·ñOˆÞð¥îi ´ÚÕ”º½ÝÃÛ,1ÁžQH˜AÚ±ûÙ?{Æx‡ÇÚoŠ/ì’úàëêºL:TË &FÚÒ1R\}Å+<«ÉÏÊÆkÔ«o.‘4„ Æà’•< †]U±‘šÖ5£Rq‚9*áª&Ûwkî:?ø'÷<=¬iËy¤Ù\ÙY^\ºÞIx°q>Óü*–¼•ìú­Þ‰ðKáÿˆo/¤mÌ¢òK |ïžîw}à d‘Ä@ö úy¯ìÙà¦øiðÆÇMi£ÚÍ+¤O†Ý#އ2úôïÍlÚxšOüR¸oLd›OgF1cÄ #· ì »6Nvãf¸q‘öÕ[èW Y𤖿ַâ¶Õ_Iv¾+o-—¨A±€šRâHÁ”*ª¦[’K0Šçtí(ü@ðv™ªx¯æ¹›I’ÖØ\C²'ŒL|ã.ì®ÉUo Ç•¸ï_xâŨt>øÛhwžC[G;ôI!¼ŽGuFYZ8™1È$óÁ¯Fñ®—¨Éá{YícºÓ­®ïÚ  ƒÅ»†Fµ‰ë‚2;b¹¹9R—ô޵++[Sç/xrMgÂLJ|aâyõ->o³ÃjÖÛo´7 ®Ítø9B¼ˆÀÈ „¯5ø×ð'O׿hCáÿ \ê·%ö£Ž«&¥?–cÓã’ 'ûÃ!v 3ÉÂÊÆ ix‹VÓ?dïÚãXÓ.aÔõíÅÐ%W™šâ8guó<‡9J$yʰÚ@<U>=øëRø¿ãOÍ¡«$÷Qi h›f>PE{t*yócr8°ÁïQS“Œ¡ðµ¹áⱋqkÞLïißZÞ£ˆnü!¡ˆ-5=OH±²µŽ?“cfΑqò£Hʪªv–lšùçö˜ý#ø+ð«Ãæ–òKªý¦ïKñ ³>Môsâ4ñƒ'OMÝWIáïÚšëÁ-²Óþ+ÚEÿ¾§½ìZKç\èê¼ÂåXžc‘Z(œî¦@Ÿ´¿Šäñ'Š?h§?iÓu[»oè@ÈJÃè!TýÜÅw®â;fº0ð­œU—~ë±ÅZ¾NQ’÷¿#¨ÿ‚nh7v?³WÄG½—RÓ®îõëß[Ýý”ÞÆö‹Ùƒ¼ÍÎsÆÙO§qaû#ÜMñªçDñ„B²ŵ•Ø•­FßܬÅŒj Uf# ãÓºý•?l™ôoëz­lÚ¶­öPþshí.Z'ìS±þIy ñéžGSÕïo?ièïüF+$³Š[ø­®@fxã"I''æ’ÌW È={wrÔ†"¤–—8=½:”¡Gcˆý þYø7Å7Öþ𾳦hzl’A-åÞ¡Ѻ(qç˜òâàòWŽ™çÏþ.xT|_è× Ë«Þ諬j‘+†t—1¶¶%r« {ä\œy‰Ž {ïíáŸøN?øï®5O‹sãHµžPÒ¶ŸhdšîRF~Wu„HÊà‘žÜiú¡ðšú]ke—‹7Å:Íw,¾uüM',¨FjmËN@×B´ªÁ9;¤Î*ðöNVVmqis-Ô%UŠÉŒ/?twü«îÿÙÛâ²üRøC§Ie¥ÆúŸ‡öÚ2¦ë‰cUÝ(Ë|«µ³’2cÐ(?9ô½WsâTcÕAÏÿ®½ à‡Æ½càf²ú¯…%ß4áâh$;¢™XmÃ¯Ó¸æµÆá~³NÑÝlsà±ʪrÛ©ô¯í1ñóJÑ~>é^ðÂ$\[Áup£ä77£äðI åG:HÀô¯#ø…«ÁàÏÛB1Yi¶O§Þ[Äâ5-lò­Â§˜†w/aÙ”wè¿>éÿ¶$wך®—¬hš^–ÃO‚þWßȱÍÎNÁæ4¬#éƒ9Çøá¹WAVžHŒ·WL­w{pgžâ\ác °¬`qœ`v»àiúMîZŽÖc,14mç¶é<¸ÄruÎ1'°9§Íâ;ãh®´ýÂqs=ä…Gö„)’ÇiäHQÈH¯ßRqû?™èBJÚ-N/Ã?í¯üOâŸë¶ÖKq§Fß»í1´æI(N€9õ®'âVªŸí´?xGû†¯©Á¢L«M*Û^B1Œ…ÿk¥ñcGâ{û{»Ë•·†E‘|é‹J|ÌäÆXœeÈP¤çŒtÅ[øáŸx;ân¡¯Gi¼Õl¯§Ò¦‘|ùÌk*$·˜ÂH\Éy$ãæ1[«ÅsIí²!í%Ê–ˆ÷Oßiÿáµðo…ôå–öâÚ Hç]ËšÀÚL`dyŒí.IVÛÊÕŸÚ. ˆ42óÆwS…ñ¦¤ ŠèÈL]¤à;dð¼`aWn0I>{ñ«ÅoðoÃòÈ·)4¾»³k†.dfóf!Áb#_q¡û"x²òóƺν­¼wÉû*&RV)äÚ´uÿW ân¸ÍzwÄ»;#Çúþ·$–Z~›ì÷·lžsÅpH•Ø8îXuÆ*¶™.“ðæÓ[Ô®-mdÿ„;K‚{†´bYgš˜¬(0§Qœ}ÖÁÀ¨>>K®øÇÁVR|.Ón®ìµ†€Áoˆg¼œº$þc³ 9`T’ÜJ¥åRéYa¨FT”R¼þ øOWø¿ðÏÂv>±Ãú®™ª@Ò3n»šiƒ;*ª"8# Š:±ÇÚ_²Ì“øGâEŸ‡îãÜiúå¯]¤šyE±»s¹K&8Œc…C «Î¢‹ ‘Ê€í#±é¸½³´óÚ»ñx…8inV´îrÑÁû)·-Ó9OÚ[âÍï¿i:…íÓ\iþ2êëk ³yήB#³±-¹£’åÁ“ògšò?…ÿ·™ðÿö¾²ñîŸ=Ç€u¸®4ÛË~È÷^Wó8q—rÇ;•H|¦¾€ð¬zOÄms^ó4;9m,LQ(˜’.ÉRÎdfûÀ&Ð:È«Å|K£ÙüNøá‹‹ý/EÚ—‰íï"óÙ¯-Ì™t, YG+ ó1È ùØ_ev¤[ÿ‚zø®j‰I;~‡¥x7PѼWðŸTñw‰4ëä¸ñb]^h±Ûª0›M4PÇûÇÌH’PÄcçt¯¥¼ ©X^é¿fñ%“Âi+I-¢ò‰ïŒ`T•`~\rÕåú„¼%}¬/öY½Ñí´‹8†›cb‘µ1åÚ†bÇå\  #=3ÑÿÂJš„‹!Ô¦Ó ²mugv¥b½·•,q¹J¢•Vn@<â°•[Þ û7¥HÎæÕΩ¡¦‰§êú|,¼"ïo¤J̈˜ÒäUÏΪ£nÆMp_ü{q ëŸð†<0x‚[·£O*]Ѽ›XNä D‘FBmäcŠí>%ë:w‡þGoðÎïQ´¸ñô2­å„«, ,`ˆ r Æ¹^sÏÒ¸h|q¢|:Õ®.|yqwjÚŽ®°Çt9%¾ûj«M«œ1.1…ÃE9s?ANn÷F.Ÿ}â? øßÁÚu T/ƒu+{g±–É¢ƒ_¸œJ­k»Ìq:ÆŒÅþ@|¼ ôñ_Ž§Ò¾4_êR6Ÿama-Ì2C Ü¢'d$àáÊ"¯ù3‚¯§5 ZÂ5}qâ¹õ;-ZÆå ¥ÕÅÉ´šË™‚pŠ0m$žO§Ç¿·ÀÓ5ß^5Ÿ‡ Ú5ö™%ý­Å®<Ë©¢ug2¿$Êei°@B‘ŠÚŒUJªë¹“å§ E³çÏÚçöˆ±ø›à-'Ã>›ÄZØêr_[\ê+ ŸÎW2**¨ÀÝ/'ŠãþüH¾øJgÓ4Ö½þÃñh·ÓuÛxd öøŒŸ"ÁÁ˜ÃdŽæ¼æïXÔ5«¯ézä’ÙirÊÐÄyH ¤yŒ£¯ÌÈ=zv¯MøUàFñ—‹ÂÍ:g‹áh..ÜK7¶W»†rGÝð²Ÿ_0/zû:4cKËÐøÌMib+¹.ŸôÄŠÒø á6«ÿ®kq§èñ•6ÒËû›Fi<­ `rq…9<úW)ð_öž¸ñf‚Ún€ŸÙúŒVc…nnÕá’á÷y—rüª¨v¢ïž™ëPøÆ!ñsö~1xܵƣrm%Rx·ºóNؘt-ˆS9;‰$g­p¿³?ÃÈ›Åþ&—^ŒY¦—dæk{±I&ÕÎÈ‹gnÈÎ à¥N›ŒÛZ—RrNù~á/xºÛHºkèt½K"ÒííÝ¥Õ‘¤Ú] ncÆçÁÇ8Íkü<Õü)ð·ö„ñ„<9¢&Ö£°·WÒªMa<(÷- ›K¾ÐÄ ç9ã²øEñT´ñoƒ|-àµ6·ÚÆ©ck6ð´»öÚ³<)" &3!/!±Èí7¿²Ãÿˆ~"ZjÐØÜëWÚN•is|î Ù›«níj,²6ÔTr»™‰À…|D`¹*ü-t=LRÖ:;­wêy_í¯âÖ~x> Bf½‚ö9c³Š6–îT{'—ylc„Ã1Ô ×ÁŸôMKD€ÚjB|Åp¯0`v—c÷‰é’AH#±¯Ð/‚úœ|yâ ëâÓT×ü.-4™,[H¼¸x㸗9 0ï aÐGÛvÑñ¯íaáS¾"’ïZÚ~«Me3Õe»hÚlËcemkÀ›ðLò2ÙçvFWá §‹~)üƒûwX–-/Ä^#½ŸF– ‚0Ìæ)†x…!rOÌ8*1[¿µEøÃyàEhe¹¬aš%Ü~Ìc+Ü üêÌ_%òØãápT䩨#QÖ¼äÏ2øq¯Þkz=ä:%ìÇSÔuækÙáiÓG´‚8£Ž6˜ó rˇÜräcÓÄ¿h?†·¾ øó¦YiÐB—>'1¥³;9¥ÚY—Ì+Ç1]ã׳ Ãá¿ÂyâÒîF§å·Øì4ý6I^ÖyXC•”€7lL| …Ä‘Y?õùõé& ,GâO Üè^›[´E™efyFHrC"“…OÊ z˜j¼•.Žj±æ¦í·CÀ~4üñWÂÛU“Äö¢GT˜[8˜E鸯Lóùs\f§¢Mýi>ŠC[óš}Ð{çשÇl×è]Ʊmâ].ö=B£KÐÅÍÃ!òœ°L«žZñ?Ú³öt¶Óbî¡Qu8*áU}a£>9Ô&)k™d.H]¼â²äß4Ë5ªìx›'`Šõ¯† .~2jOÓdÓ—TYIos8‚Vãï)aƒƒŒç$qY_´ìó©|øsáï\ÙÜ_„þm¤âXåBH Ž£•`AŽøÈ¯kž \‰êÏ#ØÔœí¢Üá´íB}fåžâ@®É…ÜpŠ’ád‘<øÀÎð¬Oðã½gÉY¿•¨+Fè{+WI\èóÃ6zîëÃUÉu9á&ß)¯áok>×,µßßJ—Ö›l¹ÆGpFAö$W¨ü!ý²¼NŸ´'‡ü_ñoQ¼ÖcÓb¹´1Ø–Ül41®©Ý׌ž+ÉìµHþÃq ©ö8HãfØŽœžŸNõoÁ¨59â¶BÑ,ÅmÚUPdEv ÌêÁX‘ž2rb(S©çôߩ݅­*vå“Gíæƒðþh>ɪéSÛé%żeBÉt ¢SóU;r2Iéœf¼ãâÆ½oðÿáέâ­ºi:RMsvn˜‡œF¤»K˜/83^¡ñgZ‡À^µÓ¼?lÓÙé|QZC–šRà*© ~þC3?ðöê+äOÛ{/ƒ¿±ï‰¬¼eupðÜG-ºíŸ_\Lï4¨„ç r‘Ð/åùå8{Yò߯ê~“ F›í©åÚˆt/Ž:†©øÒÞöÏK×4¨ouhfpÞ fk‹€1ÉP @/S³¯¥gŸŠ¶—º&©á¿Áwa¢iu”údw f·„+… 6®ØñµïƒÍ|¯ðsá¸Õt]6ÚïS6.‰m§ÜË!$ù­ngEÎællPޤ¿[ü2Öt¯~Ï žÓ£žú9ßUVÌí*²Fˆne c„p¨~UñÅ{XèÆäWv>_ 7Š®¤ÞìñŸ¿ôOÚþ '£øOÄMu¦O¦è-¨j7i*HB¨syœ&UÑKŒåœŒt¯°|'j|%mmf-ÄÚwÙ4ˆ‚¤¥ÔŒ)$d0$áô¯Ñ<7áÁªx×P6šÿŒõÿßxÝÛ|²-¼jYзú¨’6Ÿ©Í{'‡t†Ö>éÞ¶ 3ìw—0°1ªÜ#1ÚFRŒ¢ôÅyÕfåNÓÒ?ŸSݧMʼªôµ“ô<†çÄz”ÚŽ½ãx|Aâh#´¶ÍÜlƒr™[z»¡'ŠÉ&H<k·×®“FºÓíl­ »¸ñV©u%¬1²(¾Ó0óHÁÈuPyànã¯öÇQ±Ôd\ÊU¤vêÀÅh®¡#QòµrØ#÷柴VÒ:˜bi{Fîìž¿#²…ÿ´Ì·öÑO|[äŽêI¼çeì ýÕÏr¾ç&¸í[Ķ𮾶— ~·:tµéEhÛß(°!˜ü“‚ Æyê¼¥ÞÔ|Q ÎÞÖG¶¶´••’R¤Äݶâ2 ã¨ô¬emgO¶›ÃÈñ^Ë :ÙÃû±¹É çŒr e¹#œb¥6åinE(F*éùߊV¦3jPC<—´b6¡‘€,çºD£ïzW©xWᘰð¥Ô^¸»1j¶¦n¦c,’¹l,¬]¾c±T…q^}ªøVßX·ðí§Š"}cYwó¥[[…ò-›bÈì0\"ïû d‘]§‹>5iþ±‘aKk[RmâfØ.$S±c‰ ùÝúàv\Ÿ}›÷TWQU•ê&µI~"ºi~ðV‘á/ ]ýš{aÆ6 ¶ñÄd6A ~S·?ÄAÇCXw^(øÛO±Ñ †áµˆÍ¬ ÿéš­Ì›™s÷#DŒfì2Làü'ñ~·«_ßj^;·Ñ´ý.(šà\FŽ e`®Îäž79íŒáAã~$k¾1“ÅÞ8™ Âçĺœšt|'“Ü f<)‰ˆ éqÐ_²”ä×mÌþ .£[»/Îç°øçâž#kkKM*áä’I& Ï5ºÄÛ #y9Ï?/Ì3Ò¢øñMð…,!··¹Ôu··šY.).%vآ䂔À9¥gør ÆÈÜxŸQdO-üè ÙVtlÉ’sÐ`` õ­¿‡ß §ø¡«­þ®íæ‰aßÙ×zcgÈ,€º¨U$’@àwr¤£ú#Ž5¤‘ßÚK«Í/½Ž…i§ÇÌ‘ÄͱÇ~qØ•bAቦó ?Þø‹S†ûYoØÍ©Ü­Þ¦I¡d›rgÌ"]½(â®|iø½£ø‹â5çƒK“SÕïîâÓáÓígq PÛ„k›–ä"ŠÌ<¹PNF+¬ø?ð–ûÂzkkÞ?»³“SÔov¶²”Ëka¼ #7Ì|Äàvˆ/g)nÏF¥äãF$ß ~«ø‚ÆkíjA%ÛÁ(̤,YÔœlüÄNÅx÷í¹áO [xgÅ’è¿Úv¯4FœÒZ3Ë©K´—s2-åÄc »xQåòyãêýCZ´ð†SP»°?t—MŸfUIpÚ6XØ€kçψŸ4ïx§Qø›à¦[ßm’Ê+’Œò¬Í‡ËÆ|¶ …ߎ½k YʪmÛúØè•5BµÛ?&|[4¸ÒMü:Õ{¨­ï¯$&% 'cë]?Ç¿ê? är{WëßÄOÝ|&µÑü+ð£Jµðæ––Ï“AvÒ­Ò$S"G€¥˜Ëµ''qbqŠüïÿ‚/|;OþÚn¡vÖ‚lî5éĹÄ25½»ÆL“`’9^3Î?Du¿ ™nvûsÅ|¶qSÚâ=œž‰mæz™DTiº^ú?Žüq¬kÚ¶™àÏÎ.5]Nq"DŽ1aoß-ÅÌ®;]¸Ábgw>•¨|=Ó¼?àH¬4íB3vÔ½e êd,ÎK‘)$ä´àW7ðKÁÃ<¿½ñ¤öí®ø¡ÓO‚s›&j 3Gà|ßyÛ#;xÈPÞ6¿±ðõíÜKsýª^œÅ$އˆÛ<0ï‘ê+Ë—*´`{›çº[mþgñÇÇÚWìçðö;MÖ§¬M“¤Å¹¹Ôî¤ù(;È@wÈÝ=*„üC¨6¾1¶û-ÛâÛp;%ÿÚãæÇàtÍck?æÖ~1Ëã_ˆÐZßêñÆ–¶J·h[(É+ÛÍ-ò26¨$æ«üZñ½¤S_^ˆô´b!s$ c±ÀËŸaž+xRM.ýÿCZ’敺~gžøKªZK=ÓÞÉÚ¦’à*¶#Ž<– Ã<ç [âÅ]VH|dd{Èâáã]»ˆãiÖ´5ŸŠv:¤viwr@o"F¬rT-ïí^wâ Á¦ÞÍd·sD¬ë+’’¾;(€}ë½EÊKÚh—mÏž­6Õàu:žãëˆ-4\8ù¼¨ðùÇSêx¬Ý_à†òYtKµ–8Ißæ ý€9÷®/áþ‹4ÆçÂ2Ïcq—F9R½¾õzg‡¼{¬ø^;ÖÞÂîá§Tiî™Uº’¸ÿõ×d¢é[Ù¿¿se?¿/RÇO“Gñ$2iöóBÉ܈G’켞g¸é\n™ðƒLÔç—òÙÆH¬=Quü:ÖZ7Ú'›P¿óÓphã\ŽË¸“ôÅvŽÇRñ핼÷î8U£FÙ–Œ1 ÌGNF~•§àM«øêßVÕg€[éó ‰Ö78‘c—zpFNÕ\sI M¨x×Ãf+‹!¾ˆ¾Ó ’Fب¨<zÅÄÞ‹íiÆ[€»‘n-šF x|>>_”Ÿ½SVRW¦˜©RŒ=¯òбáùôoÀÛ–òI§iÓ§‘QÜ~þèÆ33«ÂäŒÜgˆþ"é+§Bty&y-!ÿAKHšBº´‡±äàMKðæÆûÅÚKÇ£XZYØÛ˜À©á p ’On95×þп,~|=°ŽÒæ×Oñ&«q-õ”šj4—/*ÆÑ½Ãù›w™Â‘‚ô&±œ¡JJ5ÕètÆ‹«M+#Ën¿h­;á¿‚./¼ ðßë:Ìò@Öì[z˜°flõ';@õ¯Zýм¯ë¥¿ñ¡¸ò/nlciš&š0ˆ}~æA8ïÍxìáðCY?ô(u8ìµ]{ĆGÒÛ9óóîõôÄO‹ú½‡Œí´¯Zêh°ÝjP2E¶1Ä£Ë*W!~]ùè~´ñÎcÉKW-o}ŽŒ.xûJš[eúœ·í-à_A£iúŸˆtÛ:œÒYj7mºÇ,—Ýn9ÆÔ]§¦s^ã_ÙàÅñ3þÏêú_ˆµ ²²Î \*¸“*ãxܬ;V>;j~ ’öÎkÔ’ÇP¸7²ˆäo$ÈÇ'<¯CÒ©Xøáô»Ë+í ¥Ý¼‚D¸…þeaѸô®¬Ô¡~oÕ˜™áñ´×«êZøbÚ‡‚¾/¾ƒ­Ø\Kwy¿N–ȱWc"•RGRIüëèÏØßàþ„þ2¼Ö>!XìÒ´ 6ûTÔLèLQÃB(ŒóóÿU¼‡ãoÆ+¯ŒZä××ÙöªæñeÌ¢éÑUæI Ú0£€8æ½OáwÆ›eý~&Ê–ö¿kþÂM¸()s#2«FÎYÙFå œxVxÚ•¥i;'b0TéѪìî•ísåÍ7ÄrkvÛjîë"B5—™ Ü2GsŸS_füøƒ£jÿ—^×´â÷QI­Ä 0Œ‘ü¸el†<7c­|{¤Z¦­n šÖàÏ L7-ÎÆã†ävÍ{÷ì»ûMÙ|"š}?ÅúT’i—д2KSujÇ^=ÙCÅqÎ9­qTÜðü±Wkï5ÃÅB£U¯Ôçü3à¶ñ»øcKé·Ï}pÖÂF“MK9•‚‚à&õqŒrk±ý¾-Ù|øß-§Žå·{]N/&;”Œ¼Rέò«åÁ*+´ç$çÎøŽçU¿øÇâ?ü±MfÇU°–Îì\Úmv‰Ho5–BDrœnã `=<ËÆZíÞðH³½K¨õåÔ¥¼µvt+gPqþ³&@Á#Ö¢’u!ìçÕ[ÍÚ4Ú’Ñ®½ÓW°Yï,¥ñBŸ"I?´-ð7Îá€Ln|•PÌYí¹È8¬Š>1'‡n®t —ZÆÑeh× °#oGlc8ç…êH®Cᇌ´?k~Öå‚ÚKof/#&áÙ’‘.BðY®yFŒd»á†õŠ%Ô5/j—·vÏq=êZÆ1ùOpÂâÎí…úî9ÀSÏzðý“Œšz$z›¬” –§Yà«[ËM*ÏãC2Y˺[[E"3¨\0+hÀœ Ý–$`Å>6!ŒAk5œZ^‘刖ÀÏ_Þôo¼Ü÷­?Ú†I~Ï¿ ,u»«‹½r{›dµ²Y33;4Îãsùq g“榟-Få{4ìëaݤž„rk:ÇÆÿøƒDðU¶¡%¶™ … Åì0 óZ-¼ýî1Óžâ©ø›Æ à‡÷R½¦ˆšÍÕ‘Ž yìÉ"¢õa°íëÆ =kO·?³Ç‡uÿjEg«ø™­”Do’;iJ$¯l%Aø‚ëÆº}¥ŸŠ Š8ò4°‹OÜÿlpOç^í¥è×¾'Ð4¸ü[õþ§*³Ý FW¹¹gfÝRªVçÒ¹_ƒ:µ¿‰š8î5¹Ö­&q%¨!)1„yd'æBŰ«Ÿº=«©ð_ŒuýCÄm£èRZ:ÀA ÷+1I/¥$¬ÎÏË,kË”ÀùWƒšÆ¬œ´Kch§ ;îbK ê~ñ½¤ÞÓî¾ÃÛîÁeº &™‰ Ém£ø¾¤Ÿwø[ý…ã}Ræ-:8¼ø´ûk’¤á…Éw[•#²ªyxÇ÷‡­Sø‰ã]×ÁarneZµÃ Š6ÜQñ»b‚X…ù¹;¸Æ+‘øC®Ç¡|o´ÓoomôužÎg»’â/õ6²Á!9ë¸\®G,=+Í­|Lš£ÑÁÍàêÅßÝg¯üðšAàí7^øm¬}†ÞO\YKenÁí>È#1( äf—ËL“µ‹w'6Ò|cñ[à©oˆ«­­øg_¼&ólé<7Iu§™Bœ²$320-åã¦Ezn»á½ãWÁ?ìA§$:]í¡‰í&Žg¼·´™'1Æ‹‚¯$Ê¥·g*5åwþ—Åšõ¶àéãkÍgPy®Fâ±’«9ãnЭ–ÆÉ®L4”¡Ë³Lô+¹Ñ«í!Ôô|G‹ÂžÖn5ý:‰ È`´ŠäÚËï,ÂFMÄnl±Ç^®à>“e­| Ò5ýI ÞêŠ.`i¢òK™“i€èc@Qºž['<*Ö4ý/Æ~m*K«ˆ5Hìc2ß6&Š¥RAƒæ0L‡<í^áâ¯ àæ“máùVÇLŠ¥‰xein¥Ýžx1 ÷cKÓ†›¶,¾¤êÖ“lv…¥èZ½íç‹þK¡©Û±aþ[r€Ÿ& ³¶Y;U~•ñ9õO‰:G…´ýVÞèõ]úŒš|eLi ¼¬Xà“óÎ!²Hîj_ÿ µ?†³M¢Ü\IÙé— vÀy²]ÜncµNGš±…PyåN+SÄ¿ ð_„´É®MÜZ†§ûÛd·×7.c H-ÄjIsŽÇ–1n\«[µjÐäêþÚ_³÷ ŸÆF ø@¯®lä¹±‘Þ¹­`’ÙYNAl¼“û9ߎÃë ½ø‡ö‰7”º§‹ì­šÏOœê-›9"Gg’w|†Di¹` Jð?Gâ~þϺÞá[¥½}c\¿ŽêVuí2,‚èÊ a@•$ 8zàœsïa«IÒTck¯ó>cé©J³OSçÏjku¨éº£ÛÈ/­ÍÃB’<‚Ô3°XÏ;¸$ƒÈïÖ¾¬Ð5­Æ?±V›eãf?ÚW6ri2Éæu·8ßùNQð„Ž À|ÆËIÔ?gËGÓôkEÕ¯ul&™Ú3PGçI*áË`)ÏBH$W±|2[¿|ðVà[)Ú=]ÞÌyë ²KûZIÆ>ñ%›w(¹^•ìâR%š{žáU¸=Æü$ð?„¼à/S·Õïíîõ™n§´¾PÜ%„˜”:+f_\·ËƒÎEão‰ž¸ðW…¼YâøtV·¸Ò ö‘ÝC²ãX¹mÇí62#ÜŲÀíàVµÏý/Tñ¶³§xÊÃOº±ð^öM'Rù‘$»é+´ Ä8mÆBqÕxëǘxºÓMð}Ž®—g¡ÖZ>’ˆÂw··ibV–8•Cp?qÆ¢¯'ÌÝÎÙÃÙ¨ò´‘¥ñÇÃڿįڣÄ÷:·ƒ¥|(·±Ñ-nêLé¶óÀ¥ÑÊ<4áˆÁd ¸žSñn£xgÂSéß#º¸Ò¥1¬ «9ÀP²!;¤XÇ$à®§âç€4¿¯ÄÉü9«Úßëþ%Öd²žI6Ã4°Ã娺|€|¶2pc$q^añ÷àv žƒWñ\Mcqa¦Ã¹³Ž;‹;Ó’TÉ2¶íì—#¨ÆÑÖ¶£V2Q5’òþ™•hÉ·(%s;â¡ð…¿€4™<«irÅe?“$ ‰.$MÊÀ¡ <“ÀÎ+Í|®ZÞxûQ¼ÒÖ¶¹1¼A1±FÅp9$`rj}+ᶨž9³Ñµ=ÚG»Äê¥ã¸vÀDI²ò3Ö»?ÿ³ý×ÂBõïì¢×Ð.à 2™™b s’Ù< ‚+¾ÎŒ£+¶y’U*§&­c¥ý>-Ø|7ñè›ÄzÅö“m¾a &Hgh‰d€rKd0ñ^éñÏÁ¾ø¥¤üRðu–Ÿâ"Ò_>ÚãG’#0ÃG¼—eTâY–çiÏWÄ:S$);âbÀ&[ §Ú½«öx]3Qñ¶™‰¶$„Ü©k~–ÐFÅ ´’aýáÈÎyHÍsã0wŸ·M§m}œ/–>ÉÛæ}Ûá†:%•Ä—šL’_iqÉl°‰$ öÏ‘¾Rp@Î÷Rzä§æª“x*&Ón,x÷º®C‚XðO`kç›—6út=™7e«<Ãâgu‹~6¶ðßÃІêóOÝ hwÆ/%Ë$²€(Vn@¯wñ9Ó>­¥·† úu·…ô‰´y/n†ñu^æx†ìí!X«±Kg<ïÙxNÛáL“Aám.ÊK‡½‚=_\…–bf˜[îòü±³ËQÀVcŠòŸÚcâ¤?uK±à‹¨húXn圻me•ØùCåc30í¬œåŠœaŽ´ã‡‹ÚÕ2øÏtÿ´MÏQ‚þ gQ¹µ–k8¥E»f"Y2 ¢@¥˜0#$ÿwžóÅ©¢^ünø7áǰ×-|As- šËyKÓmp.æiåQ#…âÁÀ3ÎóX:_…ït K¯øºÝ4]FóK¹±µ{†iL†òf˜¹CË02´9ǽ/à¿Á‹9þ-|?0Moo¦x7LÕ-#¼ºýÜÐÝ\ˆËÍ KFã,FEuIÆå‹Ñ\š^ô×?Rç‰|OsâÙx ÎêÏWÔï¬gñFºb·öúr5ÎË_ïþ±xî8¯ 5ÿ‹?¼ k£xf þ%úJÚÚª]ù³ÛDбov* (ùœòw`{ׄh#Ó§×üI{«µ«ê'@.îmÐ["Wù2r‘“ÈAÏHÅyg‹~0Þ|<]vÎK‹K¨#K›«HÇú[ÜÈñD±n'ËCóó(‘\^Á×J/þÞxßa)8‹¤µí5ÿðN±·ú…¢Xˬ\G*±X-ô´XmAfQò–ŸÏ,07ƒŠô?“Âz†«©|J×n™¦êRÚ>“o(d’—ÊŽEg˜ÃÌÙdzàp*ßì5s£ð.oøRÎI5ËÃg¥ê‰idì4½²n’5v½‰Óko\«óH¯koGöˆÑµ­_O¼Ô4'Q‘õ;æƒt:˜Ä‰€H–ò„l¸ù[qæ5Ón¥xѶ‘V5u¿Ù^¾‡²i´F½ã…_£ð]”gÄúv…m ”0¦#†êýVóžH$Ë`í‘Y?·U„ÿ > èú$‰y úCÛÅi=¼íØãŽ%ÜÅŒlcÊŽœ?ÅŠé> üºý¢þø³GÑŶ‹o}xE:’RV¶ƒå–G`æxØ‘ÇÊTu­ßÛ×áŽñrÃSÑô‹Ç°ŸMÓžÞ n {›kˆ•4`y…¤–<Y¸Í7Nž%GÏò:0ÐL:›—Fw?±µÎ¥¯xWþ?ÁxÖÚm³\Aq¹e–æ;p g…Æ@‘UrFjÿÆ/.½¦Ãoãù4ïìWµx® ™¶Ë0?rBPDnjI8Šáu/ê6ÞŽïÀŒ7^!¿ð±tëYw&±¢yÿf%Ьª›<¡ªCG5Þ~Êߴψ^MX–æYîﮯn-KXùaC²[gîÛ¶†Ï#€ ˆŒjIÕ¾Œ°­ šüU'Ć:}ÃË]?û:J-BÒÆY<©ív{rJ¡dÆ0Ç9+ðá\úïÅɼeãË=2úÇA¾–×E³‰Ã<º”PÒ†#>W™(QÙŽî6Šéõñí-¥è~ñ5ï„> ê7 ŠîåiãÔõ*Fïx¦Éxãmœ¸ÈäñôÇ‹´O¦kþ/¹¸—Ä–ÒÙÀÐÅ,Å$ò·ª*ì ¬Ò3¶Y¶¨éÛçö\Ѿ5ø·Tñ÷Œî®|5àÛ EÓty’ì›êñÆä†F RÒ%f;‘Nì»B±n¼$äß*ò0¬¥8¾Y/ŸùŸ,ø¿ö~Ö¼+ã‹XôûwΩý•‘¡)4¥ÑW| ù©Œõϯ°õß‚±ü!øßµeÒ'ñ@ð_™jl-™´¤‰?ynë#+†gb°3ŠðþÐwß>ñUö¥>Ÿ¥øÊq«Í’Ù¼rAŒËe­ä œu5íV•zñI|)?WØñiÆ.m=çmý—~%jڌ᱂âY5­f-`-ØxåŠúÞ>DÙ@/œÈ{œW×ß²×€ìõŸx²óY‚ÅuíWûsÞó_»àÉ(ÝåŒ(zt¯”m|n<%ÿ _x¢ »&ñÍÅí­Ø :ÃvdUI—k¸†B01ŽÕôßÁAð3ãí”Þ+°vŸÅ··–f3;5¼`yb…ƒðd‘âFc€>d8«Å·:P”U¤âŸÍ4à©b&›ºRüïß î|9ðgã÷Â{ ?E°ŠæóH¿Õoµ¤´ÂÚÞ!$@²7ý™.SgV ž™®Ä^.¾°Õþ"ê_.l!ñ<­ ÷ï$™m4ןkš9Š\²F3‘å©À®Çà//fÑ<_Æ :×ÃpÇ'Úm%ž5ûEÛ<²ÄNTí]Ñ"Ä),NÕ×€ø¿ã“ñCP×%ø[©iðøPü:Õlš8¥·:ÖÚØ’ :¢&r#l€s^7$ªTRjöZüÏ¢U#J.7·¯–§9û<|Vø{ |n×âŠkÛ]2MÏGÓà–YžçSºŽæâWÍË1ÂÐૌ¹â»ø+^‡¡êß³w€n4Hm­ç…eò•N消¦Ü¿N­ ž šø[âC>•­Mqk>ç†å•]2€Ä+¯  d}i¾/øÙâ?xJ-_Õõ û™`šM謧‚;ާëÞ½¯ì·:°­Nz+hxo7t}¥)Æ÷¹õgìIkwâ_ØÆ=;Jµ70Û꺾­­tmŒe1@b‘z±DBs÷pR+/á—ìÇqûCülð߃>Í©[±/‰õ¬²4;$¾’W2m`¨|¸Ô.KȧiÒÁ4|n°x+ÆÞ¾€Jšæ¡i«ÀÓÃç©HÐÇqnP<¿.5/;ÛŽkOáv·eñ÷¶V¾ Ô¼¯ê¾&û>£}g§–Ö%¾”LHÇ—ëÀAÔ‰©SÄÕ”}~ÿò†§y>¨úÓ]µðŸÁ…ÇÂ_b·›LÒ£?gµ–bÇh·M#ŽK3ÌG¾@ã^;×/¼[a-®¸ŽñÚZÝ@'¸YÂn“ q¸ó3F™EÛİéÍw:¢x/C´°Ô!»Ôô/ O&i$ŽZ{Ÿ™^I™²ZV¤flýãÏ5ÏMñBÓâµlò6“§kþ´eôý*Ô?›!u †’@«ã#vqŒçË‚nNOWÕ5'jÛƒÀ©6c6†‹{Híô† @‘Û"„R~TÞÊîÌpJ¶:Qü&øM£B÷þ/°Ò×Ä:Å ²°kÑ-¤3È "n4@—bÄó’ ž+µÑô'ø¡\Ü\ÏhÀ“%ËÈOŸâc¶EÈë¹àžþ•fnuívò|û²YÆ\[ǵtø€#…Èp3ËuÎMo*ÞîŒÎ“¹‚,ì<¯<ÚŒßkÓÍÙ¶´ymŠ#ǵdóµ¹!Y°HP}êÿÄ+þ¸[ÌgrÑù»‹u$’Á‡|ãØŠ£ñËVƒÄ—òiúžÆïP¸InE¸¹+´„þ"B…ð9ã5¢êÓéºC©ÚÉ ´·! î`ñ Km"1ÆÂÛð„£‘œM^iJú˜T—,¶4.ÿg]@ø—yâ´œ¥Äjû7ø"û‚++UÔuöÖ5mJ@—WSÉ¿d)áK*),s•ès^¯=åÌ>¹ÓÄ“Î'EY› S“‚~PÝ0;TmõÓâý:]BKd‰Ñm-åò€’رÉhÈÿVüáXr¼Õ½N½rµt|[ûIþÉ:·ÁO¥êõ[ÞZߦ´Mœ3(èröãŠñe•ô+ÖŽUn»ÏÔz×è§‹<_g§øßJÑ|[$Zޝ©Û«Á+Æe‰R?1¾gÉÆÐ§w¾Ðqšù'ö‰øsá_j^·¾¾Ñµ‹-¦p%¹IÊ«2Ȉ2 rÛ00Wø¯wŽuR]ÿ3ÉÅàãw:JÞ_äy”¼kug2Ž…Ñ±÷˜r2i4-Y,4Éã‘31†*TcÜ9÷­|'ñ_‰üSsae¦Ko.›’þ]B'†ÚÆ6%CNÌ¿.HÀ'=»Žrï6·U˶-\®àx$£é]òå—¸™Â½¤4•½fïø(¤Þ/ñ}•‡Å˜ ‘–mžñd. ª°ùsÆIŸz‡öÏÑõOŒßüðëY¶F·Ä:œ+Y.wE¾á÷²±HXŒÎA<ðï†uIÄ\³ƒ´rrß—zúÛö\øñsñâò×^Ôٵ©:Ít¨“÷œ¤1ªAžkÀÄe±ÂTúÅ%·O3ÚÂæòt)»ßDûñðûà¶‘àoþ9k?ðŽZOnm¦Ñí$2 €ýïÙæ¹PL@åww1-…®[âíM}â©õ/ |7Ól´+M3ÄGN¶µ´]òßÇVÌw—%¤k„S¼¸À/uyô—Èí¼¨ËâMgHMBí&—Q™8ÖC"B¢?7Ì–~7ƒqËzàj:÷‰o®ÖïRŽÏMi"O:/* Ù_š2¼“´2–ê3Åu? ¼K¦jÿ -eÑÚPæö …X™A»Œ[Ʋ“km $ ®8+ŒƒÛ™o x‚ûÄOö=2ãRµx–[±d»¢’g0f[i%±ÉϯJ”Z“I:‰Á~€,tÏjZg‚5ËyaðÍŒ6í} !RBT6ZCÎó'Ç'5ÍOk¨^‹½VÝ-ïk{‰£†áfãf[+žbÜò/̿ûë^Á§xfãÃ~ŠÛU òN«vâÖ5ˆ3,b0².GÌO â¼§â·Â¨üCñg¾ðÞ¿~öV·ÌÚä6¼"ÚCºXcƒòoFd~OQß"iTSz³IA­ºŒøûu/‡>^è>U›QÕ,¤Ñídß½\Ãn¼ÜDˆò2“·,I5Àéþ½´ñ>‡¡ë·_ø\@o€‹ìË~ÅÜyg¡C&"ÎÕ É®÷Qø"uߊ“øÃÅhôÿCö Ûí&(&i Hìû›$Ë*î9r!ƒóš™|%"éZeΣyj_Éidšá6¬®Ä•™£ ~]§ ÈdŠè£$¢Ù–/âT–Ëúd^[½.úòKm?Dh/¤™°ì>Íio¿(VQÈÀa{cÞ·¬uØõMWB0_ÉáËhüC.ŸrF—q‘mUc –W’-åÆ ²u¿ˆÑü2ðž¦þ-‘/ŠÏ®ŸÔÙtλĜ.lG!H8uëXß³$|uøyã•ñ6›¨Ûh>&×mô †Yw^ˆÔ«´.„7™T*úâ›^ë›Øæ§ÞE=Û%ý˜üâAá{]_Æ^Óí_Ä·—:¶£vo#}Ây™„>côU8@£?tœóëzÝäpëºvyçÝ‹Y>ÒöÚr’fØAd†5\œÇ+Æ>!ZÝë¾ Ò´¢ÿÙï©›~Z®#KÆjäjN:dŒœsêô»«%°×.üÓ¬³[+]#ÈÓ£¿îãgG ÃËUÈÜ Ç9ÅrÔŸ´¼º’¡ì%w«wûΟė×wz—„¥±†îÇWÔ´±5ÂO(–kAç,ÙÁ± =*ëWðézŸü$“ÚÏc¤HŸ`X×ÊÿX‹D¡~v;TPÄ“Ï"ºoxŠ=W·½žÖð[XÃä´qÃûÇŒ+*¦$’A$ç’q_;‹–>%‡Q×5BûHQáG"YÀZJñ ‘ʉœ«‘óç®*)AÞèÞ~äT§Ðð/Ûö`¿øÝ©øZ}fãCÐþ ë:rÜÜYd¶—s¸…|ͤòb^H9Ï økPÒµ/‰-®£W[yZ#Ãub¤)y½«ô§âæ¹ý¿áËkÍ?ûVêÂúÙ-αz¢°„Š"U<Ê÷;¹!äÉÆ|~ðm¾â;)ümot­F(nÒKhØEÃóC«)ùÇö¹F&\žÊ#ãóª0Ä%V+Þ_‘úCÿºðO…¾ þÄw6:Î…ªx“ZÔWUÖf°š9VK‘åùv"]£#!èÁیרiž6MW[}/Ã6s©›w›$ytˆ2åœÈxÉbØ÷8¾mý†-îö.ðE„®u NçûORŸSݦ+ݸW¬lÃq,ܰå@½ïLø…®c]ÙxzM6k)U/&‹L¬1Æò ã#œqÜ~oÍÏ6ÝÝÙÕî`¢‹Óø^M7âƒßkVL7Vég »¸-8mäF™k·rI<ßÊõýdkþ5¼Õ4 fêãLÒlãÓ´«uAq1‘™šw™€ ¹¶à¯ð½0E?âv»kâߨj6KigºÁ'¬ÀyP3;ƒdJê0T03SHšo ØZh‚Åൈ‹8˜Ò5bNâ˜2rK³–bOzT åï=½ª³Tß*Õ½ÿÈÁ¾ñµÇ†­K]Ø$ú«å¼ö•d…" áwöèk†KÝs_›PñjG«M±}£æ†0Fã±1· n=Á8ï^ÕàoƒšâÉyâÝ\‹Y±ŽÃLC<å܉9^+®³øc£¥©–ò´I6ÖŠ0 …ûÇhÆ{c êö±†ˆ„º£ònÏÂVwú…å»Û$6qî•ÝŠî>€Ær)?²-g³ºû4òÍq; $¶V(‡!?™5Î|ñœMxúwŠs&ŸÌÞJA#°9¯CׯY_°xrÖ T„ù÷Â&Ó’ª_° FGZõ*'XùØIMhyÅ/‰…|Í/ÁñMoolŠÏúÂGÌxè+/Àþ*Ó®î ÿ„ž;³ä0;–Nàç§J÷O„? í|W«\·öe…Ô[;<Ò(O,tI9 ÔäõÅyþ¯ðŸE.‚ &IbŠeóH «0<íƒØ`{Ö”ªR‹ö}{ƒÃÕÒhÛøµâ»Ï¹¦ÛCg ¤ÿgdÚ†3…$äüÙãšÎmcû]ÒYC£7o³Ÿ%Š‘X7×¥oëŸõX5Õæ¥ ­œ"Ý vŽ™Žÿ­g_|“ÇZ2]x_P7&ü§iœîàdçãø¬bà–¯_˜Jœäî—âih÷ºÆ¤K%•ÉÖUß6»H äs¸È•eÛxªÏK3Ù4W—xc.Ý‚'$€¸,~§«™Ò ×þ^ÝYëÖú‘³’ xSxŒ>eb ãëŠî×R³ø¡¡Û-ùŠhlÔ0i€Ël$£Ò”Ò‹½®ŸTròg›x÷ÄQx‚Íf¾/}réµ a|¤Sò¨ïŽMf|:ñ•¿„oçãΚ}Ì~[‡)Îrõèk´øðÒ-Nýîü=´Ö¸ ¶±«¬‘ØärÏÍï\¥àÍJÒµ-d‰b¤f_”­tP”eÞsIÊ2¹ëz—ˆ-­´KyôKk«íSZ„¾Ÿ$;Ba±Œzæ§øs©ßhŸ õwÆñ_Ïkd@ÿ\Ç»&FN:ñÍyÇÂOÍ ê6úv£,CMyHW—…€·>Š{ús^¿ñÏÅ–š7…l¬fº]BÞÕMôKnÉÊ.@à çe®zÑå|–½ú”êÇ—Ú'©,:Ä:¦£®Ý‚ú·Š. [{v1Å€¤)$gñØæµ´Øn¥ð‡…îi¡ù AþÑ®ŸÁ¶ZgÅ} ÚãMSe§4w3@¬‡Ë²n [€wÍ}ñoÎÁ±øzÞVƒV‡E¶½k™F¸Ú ´@‚~u'¼G&¼Çà®™kû=xÏÂÞÞx–æù—T²µGK™Ð/”ªÒ0£` yK´‚·zó¯øãQÓ¼+ˆd‚Úhä-¨ÜAp¬·ÒÜfc·¶ÜåI^•é¾5ø¬]êÿümªÛÙ¡Õî¢Ó¼?tþ[£Úó<×­µ°‡þYÇ$FJ˜W•üNð{xWVºÓçðÄVZF¬ÉmezÓȬ’¬CÍ&1(•ÇÞløÏ ËRÑ“»:1¼ôS”uLù»Rò&¼¸ŽÚ3*Ä¢d` ôÒ¬¦¥æmŽÖ5Ž08U?túûÖ¢ü/moÄ³ÚøBöÞö5Îm§Ê ÇΊüØí‚sŠí¼!ð3HÖ¼"—kÐÛj÷@ð0‰€ fFb ìPöOµ}*i6ÿ3åT*â$Ô“ ÙÞ_xYÃZßKi(·C´9ÆXy€mÈ;sk•ÔõkÍ")­-gºX&#Ï…\…•GBþ+Þÿh‹ð_…~|7Ô.͆Ÿ¥½æ³*ÈÊ5 ë¹Y®#‘8*±„@ªsòÈ9À¯»Ž ß*î+“ö’ÅZŸ*¦8`ùëž0Gã\ôê*ÍÊÖWÓüÎêÔÕ/r.ínÊ‘\þâ„“Ïœb´lµ9ÆOš¹ÏSíëÞ°ähÜMË ·'ç°­«&ŠöÝ·"«¸À'œZÒk”T¤ê+6nxsãV»à{ùï<=xÐK"•}¸1ʘÁV‚9?Uø™ñˆZ¾Ÿ%é‡È´·X-Ö8‘Z(‡Eb  Ž­’+ŸšÊ%€Em Ë‚0ö³¯$x’$@€Œ–=Ò”iBRR¶½Å:’·+Øô…¿õ߆wésáMNîÍm¤3‡p$©àõï__þËßðQÝ/Ã~¥ÿ cK’0жQivûÄÒ )yUÛ€#ŒŒ1Àgá->ïì÷¥÷â'^rqž9Ít? ^ÿÄ~)µ‹ÃêÆo711O•°;ϰÆpzÓÄá)â¢ù—ÌÏ ‹žªIè~ˆÿÁ@?i_±øZÓÃ>Ò$×oµ9-/¯Mí’=½™Š}ñ@ƒ9Vr9SžƒÔç‡ðwöÌ(мEñ½/5ßBê¶NÛØÏ1v‘”ö!%ÁÁÂŽõŸâM:ëãçŽF©áµŽÛOwÊ„¿Ï3¢‚Ìç¢pĹ#ëÐít«í_G½1:\M w2Ǩ1#…FŒ1`~¸¹é_6¡ 5' køžÏ¶©ˆ¨¥Ðù÷ã¿Æ¹¾(|DûÜÜ-¾¥&ƒgq òíÑ€Þ”Þ¡=«kÀ µ-KÄö—ZeÒ.ÓÞ‘"9P7 #×f1ƒŒþ5ÉøHÿ‹‡­Ål×pèxâ+‰Æäó¹Ú8êq޽kÓ> ëi^´%Ü73¯îí(Ž0ä´²)%€ÉÞOq]ñ‚§MFŸRNSnH¼²Ò¯[ÃÏlv ò[*c‚ ´ŸA€ONœóãͪ]Ýê7z¾¿s3E Ì÷SÂ"+HŒ"Wýœ©©ˆæ¼&³¸ŠG–K-Ì{‘î?6ÜÖwƒl$ñG‰,´ÿXÇq6©v°Åü"î8,ÙÇd’xâ½Sá‡ÛGønº¿›s†©o3Ïßƃl©g‰Taí»yá¨ÚiÇO#ª’u#¶‡3á Ü|/ðÍñðó[ÚC­B“]“Êh@óX0”€îqŽàö®KãÍᯠI/€­g±]fÓMð匬•!{¹noþaÊ=~\ðM{=Þ-õ pëuи¹i¥·Š%C—f Ø+·ŽG< V^»áû iôÛ_‹¦šô 㳄y^@àÚ =…p¹Æ 9#¦œªJñ×Éàãã7í7Øg´´{[}%/VŽ8¤&A#àœnŒNÙ8ãjúâ¾³ðxĶöú…Ó]i6RIkj¥UÓrE倸ˆ`¤’NrÞ•ŸñUü/ð¢ßMÖìfµ°µðÝý­¼–÷2íoåÜ:¬O»+ÈTç†ô¯?g?Ûö‰^»AÑÛEµÑîæ·ƒL·@Û Ë´R³gy;–9ÀbFNsW5Sjk݉T꼿ݿ¼Ï¬uËûË-J_²º[Ík"̱C’\ìÁ|ôÈÎŽ•ÎßèšO‚ ¾ñg‰®,´Ù”o’öe̼’Lq¯Þ.sÀ^„•Íëÿ#ðŠÉ¨ëzÔöÓZYùñMi>!¾Y-Òbb2“–<‚ÀðOC^amñNëâW‰ôß^Au­éWr_YÜóÜ¢ßÌg˘†Íì_ï·Ö±§NZÛn¦r”§?z÷üIO‰úÃÿ‡šçü Ú|AµˆÍÍüÚ”@ÝO¢®Ä;±ù‰Á8Ë|Ù¯›QUV27“’űž+¡×¼ qâûéàÔm¬¬äŽÙ.Œ°JUäÀ)$L?¼Á$·,tãÐu%({Ï}Ï;™7xœž²³èÞ ñm÷¸í5 ~ ÝÅm¤]#mŸç%$‘•ù@Ѥñ£°Myô? õ|Gé3M§­ÊêS]ȉ^[nTGUÎ$=NN:únüF¿Òü=ð{ÄÓÚZø(ÚͧΨÉ-‘IØÞŸO¨¬¢ÞúÎpm,®4dƒù¥WopÃÚ¢5œ*(î—TŠ«w{Ÿ&Eg,—ÛkvéżÓ#\«üÏ!s‘!Î2¤c^µôçì­û§ÄÛiÞ%¾g²_ö¬“XK’Hò€F­+$%úÄí8õ®Sý•gµÔ$ƒFµ˜””Ëep²ïK¸ÀAn„¶Kc¨ÀÎ3^‘à?͠辺û$÷z·…ï-&³Êmæ[ Ì¬w€Ä뎸¬KtŸ³vf8Z*KÉ]åáŸØëYø-©k.¾Ñ§{ëtíBD‡h°Å+Ê‘Éxx}é2åÑFv‘Î+ªñ$ÚƒslÚ4³5žñ´%¤fp˜Œ4Œ!|vä‘^oâ¯ø(ÄûPÝxcWÒõ/ê6iV‘[GÛ ö2ZË1gË)'…þ^xƒÆZõ·ö¿Žaò’b.Úld¬Se>é*#\ää »ä×›þÍzóø?XñäWR+L+d§W5ˆ[• ýÔŽ8IÂ?WäoÉž—û$ü2›Å¿³âhÐÇ{§`É&¦ç»[Y2F–W1oî– |sþ £ñ;Rð‡€á´ð­¹±†en¤²´XVÝÌ2y¨.sæÊìiÉ}+Ú?à˜¾8–OÙ#Àþ"ñ£]ßø›\§jéd­+[ËÄÖñJv“œ¼?; d8ExßüKàŽ­ñ¾ÒÛºˆïàm^[O7D{iÚü×ó U¶ªF»¤à%[ -%\û^åQRŽ•¿#öný›õ­ᆓ?‡5}'Z°Ò-ËË Ç,5µâþòòÙFx ·”ϱõOÙ~æ-'ÀÚ„º¶«u¥è7‰6¥a¹¥BÁÇÙp«þ±ÀH°«Ž1»­z^4„Ÿ´»[é£Õm š sy KghÔ¢~ê5ÆÐÊ…†I8Ë‚¸ø'ž‡â{Ÿ OâÙŽîm%n'¹Clb¶c4®Ñħï޻ͲŒrw•¬:ŽV²9¾©ì9¬÷›ÏA7ˆü;g¥Ø"ÛÁ¥Äš}Är­¸´¤QºðàobùÀë^a£x3Oñ¦—Ⱪ^øB%±Ô"¸ÓÊöòÍ$†ä\Ȥ‘¿v ìÚH$ã×%C¬x7ÄÓj>&´—ĺ>…¼–š ¾§·1ù»#ócU1Ë ]ËådÄ‚¦¸hm[ŸÏ¥økBðýûÃgy=Êyò¬r[BØI~Òy~H%–6^¡9óß|bñô^Öï®ï¤Ðµ ¯ûEä_/XD’ ‘È›JG, .à2Kóµëþøuáýàÿ‰¾ êèâüéko{áñ%ÌPLLq,‘dTí”6WÇçÕÕ*|ÓW•æ¼PØÉf¸ ©8ã5îàå>V§½Ùóy#š=4Wõ;¿ÿ5_„~'¶Õ¼(BÌT Rh•£AR§·=G óÚ¿D¿eK}Ç>_Oa¥6ÉŸO··{u’ê-IÃÉ$®ïÎXÈíæcZü½°ÐßX»Ýk&ØŠ“ƒÛô¯¦b««¯x[Tñ…þ«sÃÙYZ:o³Ô$D˳Œ‚媪2Ä“1\™ž.iÚ_™ž¬ÕK-™ôçÆØ|)ðò]êá’ïWÕ"‘LL”±Ç¸ª± ežzñ\WÁÏ…ÚÝÏ…ì¢ÓàŽÍ5{ýRúú' ŠqxÓÅûÃ˘â1ÂqÔ¨éƒ]ß´[¿?ØzŠ­ÜÜÛÇ«,ÖÒ ŠUóä–%·* äðN@ ïdÖ¬lüY•á„¶{[dšîRÍ´B#¼ívÜ£w œóÁ¯œRt½Ç«>‘§;I†à ›í"H.àXàÐl†¢FgxK³bpŽv±k>*³KêÂò;»¨ð—sn¡ÈÁ ¶àzq9 b»)ÁCß“Óñ9dÛI[sÒü=ñæ/A¥ë–­l«n%´ß7˜—(Šªì®OÎÙeo›¾À¯H‹Å‚Î8¬"3üÁ¥,Ø!(‚:t¯ø³©«øò8|6Öš®™=ìmgÓ0ŸMXB#\DÊ¿óÊ"ƒ^I>µÛø[ÄZ/‰îîbKÛ´¹ŽÌ¥Â“åÜYÂüª |ïק=H©%$C½6£"?ˆéae®_&|ºl Ú*ì¶‹rîÈ#i9Ëy8sY7š¶£aX+·¡† Œ*U÷Ý’W¿èz'Æ Ç«xÎÅ&£©^Å Ø}“M³]óZA#›‹ˆç=÷ˆ£VbpK°>•ôïì¡ð¿Äº‹ÿþÇe{«Çwöxn$,Ö¢I‹ù„!ÆWrÎ ^8ã¿|?­x¿ö‘ñW¯ô{M/OÔ’ÞÇOÈYílæS2' d,ÌC¸…]Ä}Ñôn‰ñ’ÿƺ޷{?Ùí¬î®Öé…Ò,momÛ ª"eXü¥Î7Ìy¯˜ÄÉÓ‡³KÔöéJ5ª)-•¬t}›áUðO ÙZÏuz¬à²ó§íó×ÌrKÆ{õ®'â?‰§ñÅ-3G×ïEºhZd¶£;J^ÂÝšåÖ ”61<JúWáïj-YÖíí-ÁÓ¦i. À —–GX²˜F±€?/\+Êg9/´?‹çN¶—ÅÚ­Ö ‹ ºO5Ù¡;)ò,!ˆ®æi8ÆæU‰AÆ@'Zôo¤?ì~×–fQXÇlÂY䙋I#î-û¢ 2ŽT¨'µqßn£Õ>'Aàÿ=ÌÒøÊÎÛϘ§ÚC5¯–K …<–CÓÎFq]ÖáÛ fÝ%ðÛKgy§Ü¡³J—p¨e¥ÀèÙ£’OSXM¨ÇP„ý¬”HõŸˬø^Ê®Ù`–?3|«‡Qê„ à mcÛð­_ÙßúN¿¬Þê—¥£_±Œ2©ò"+–%ܶ<ñ—UïH´¹]YÂ\Oe‰ÑVK—ó/Áù±3ëéZžÑ¼Uöˆú•åÕÒÑmµ?Ù_ë¾ÓÝé q$w §ÆÒGn#ep;—α F[š¨Uæ’¶Ë¢4X{§9-Yá_´G‰µ[ïŠZ_‡µøâ™ÛOÔüGxÖÎâgÚ-`†8±Â»#¼cåÇ @$n¯yý›~ê>ø1ám/â"}ŽþþÆ;»ËxËÈ–&TóZÕW%”º©qŒ‘’E|éãÿ x£ÀŸµTÒkZÊèw^2¿mJHÑK ÖÍÍ\•… ~ÕÃS–Uñóis“öK[H-e˜EžCöfƒ‚s‚qP©ÉûÈ=¢V¹ùªi+áýzEÓf7A_£FP­Õ€ÏP¯øyâ]5~3Ad·wÒ΂æÛ™&²#=¨¼Y¥éÏá{˜­´¿²ÍDi/L²ÿ³œõäÖÃÌþ!ŽËÄ'šÑ–‰!P;(ÎFÞœ­{õ*{h8¥ªõ!†yõ uô9¯Sá|­ë×Ìò1Te)óDvžïñPÓ߇û>þÂ5QnÙÙrGRHê~µØiž¼ñþ™³RµòO;ƒH9pÛ\ޏÉé\îƒy¥èÓ§ö•½Ól“r4€TsœúëÓ|ãË+tûˆY Vf]Ø|c Чýž±DBŸ2J]O ø…ð)´;­FmuŽÒ7Ä p¥ZaØ)Æ3œðqÒ¹ÝNÕ|i«Øhº¤ÉalöÑ3ä+‘÷€$šú;㇉ôïÇao¨xkPºðýäd4ó¾íòõ,㧵OðoÀÚ‚í|eáé#¼»Óæ6ÉÜ€›Vl¸‚„´©ãù)sÕ§©O(Jý:’xsá>»¡ü6Fø{t–—Z¤j—Í*´a¡1‚³t'u¦O8­_€×üScrºÝä­>¡4vƒ3•œñü9P±ÀkRø†ÚUÞ‰{ci©ê7V«‰&’á|¦c¸íUpN£nÞœ×mû3|:ÕtoøcUø…qqaq ä÷0Ã}ÁyÞUŒnm¤ž +Š®&Jœ§5¹ì`è*•T£ªFÿíÙá­?Hø á»+ÛXo×XñDR;¯Ëc ÂmãXcí¢Æì]½k#Á -| mg{ð—Àsuk*˜®µ‚!!P¬$–y%\(`xEÏ"®üQñì¾)Ócѵ›Í3Z·ðE¬—wkö$ŽæÜ6K#ÆÃò*äüÀžù¬Ÿüg?×<>úÞ£hšO‡#ýÍ­”^cê1Éß éÈR[¿@+ÉÃN¯#vß‘íÔå¿2ßôüÎÁ>µøgûhk:åÿˆ4¡®[Z]ÞÝI 0Ggtñ‰&xܳªËW$rxÇ6ý£ôö†Ï@>)šk­WŰ˪y»@ò6×®ÝÜçŒà×iâ^?‡úcêÞ$¼²“ÄŸıE¤¶¶&MÓI(8ò„›.íÄŒœv®ö¢ð"xª x‘n­î.¼Gms¥ØÄn’‘Ú\íGfÆÓ!k›S©Çpk®”\êA·¶›•æ£IÅtýOñ/…ô½kZ°Ó>Áu«]Ý¿ï(Y¿xH8”d2rÇëÀ/‰þÞ|>½‚à JöL“ÁÇͰ‘xëÚ½3Â_oþü=ÖŽ™ªÃwã]~h´§µ±”¨Ñ#gžK…Á»|‡‘‘Åc|sñÕ妦øÁÚE´:M¥²ÚÞêÓ«JHÀ@Ê Ä› ©\îbs×Ú£YÆJÕw< G+=µ=cöcøíÿ ƒõ Å’Í,VsGui<¯¶%+üƒÔ ¡”c±®Âo–Þ,ðö«yãmJ R×\>t’K¾8¬¡GQ îwŃíàô¯)ø=¨è_ þk–úí¬Ú®­swoåYÐI'î™Ãl|lPY•œôãÖ½×F¸²Õ4­"óWH­ã¸F¥íÆ,¼Üm Ø+Lc­y¸¿ÝÔ”à¬z4ê©RJNçÉ4øu¤|›ÇöWF{ZÎEK™HÐùÊÈñg“ò0 A;pG½\ýŸ¾3xzËÅ:k|bÑàÕœÅâ¿y$g„Ü3 å]' @ òMzÅíb‰ÌSjÚW…ÝÞx¬î¤³–TˆãË·Úy+1$žy#å0øi¥xSZ²·{‹2òæÝe¡kˆnwd©qåä``Œu9®úRúÍ?ÞîÏ"s©Sz"ÏíñN/‰ÚåÊB`a¼F¦ а‘ò+IÖGÎI<a^3”‡äBÊIÛÇ|s^««hzŒúe¶›â´™,à”˜pþdP;cs.22p>¸¬›k¾•õ;0Ïgo2­Ô71Ìjá€qÔ£m*F3ŒŠèÃB8xrGS:Ò–"\ûw9›KPskyù¢ä3.ÖQÿêïQiºz›‡Û)PXíÖºOˆºn¥¯ëgÄwZlZM¦´<Ø©Ä €Y‹*Þ†° &ÊB—à€7˜>ëLzÖñ•Õÿ©zNËò!—GšÚ’’´•*xQý+3YðÕæg<ó*KlîSÈÏ=+¨Ó5tžeMå1ŸONk¨ðO´/j2Z꺣h’”ܤ'˜®sÈ+‘€$úRöªš¹œa*Ï•=O$³yg•2\ã8ÿëW¹þÆþ½Öþ&ÜE¢Éº?°K#ʪÍäá—ƒ¯%FOLמø“À ¢ø–k;+”šX6¸À•eY}˜`еáO‰þ"ø5®5ïƒï§Ó§’3’Âày‹¸6× äƒ‘Åi6«R~ÍêÑ”9°Ó½XÝ#ô3Â~ Ó~E¥Ú]˜ímÍ»Ý<©æqzc,PAÒº%·Ñ Ô ¢iöÚÓOq2D¥£¶ŽÅ¾÷˃´sëÓ'äOƒ·´Þ/Õ!²øÝkö;“"MuýœÙãeUV3’pU<à×ÖZ_ŒôÿŽZ3Zü½Óõ]2—KŸ)íQU˜ ®èÎÁ¸°ÇB3Í|¶' V½¢ùô=º8˜W…¡¿c’ñͶ˜ë Ú‡ýª²Ï°]€šLŸ06ì «´gýåEg·Â}7Du¾ñܦõ-C9†äÒGláŸaê àé^Å |<·³‚ ­ZìÞÇi`m,£‡¶·ˆ¶ö„I?1Éâ¼gö°ø¡§xÖðÜÀóͪ+Çç+À€{Ç=³J•W)(@U"©Å;ÇÁ¯i|8ñ4­^×\Ó"r„¤r»aDÀ™0îç0=ëçOü$ñþ¥ñ"çþ-ÅÔIzï%ðóg¾·YK¬%Ø•ÇAœúW¿|>‚Ðü!ðõ®‘a­ *ûF²ÔÂÒA5ÕãɲCäɸà‚GÝÉñ×Å©Íöµª´óÜO¿“i o<’(©ÊÆU7vü¼““\Õeí’é¡éÃ%¢ÞÇ jz!8¾Ö¦Ycš#5Éu b$ŒMæ00FƒŒšäµ M;U¾ŠàÚƒk⳩fh€²Mìv2žˆ`Sß(è*å§‹ï>#ü>±ŠÚéínu?)#Ú±Õßäo˜à‚¹<Œ òMrÿ|Mq6¯âFòÔ[NþÌ·‘°f•ËH±ì#ï)‘acÕÈ=+Š¥Ô’;¨Â)s%©ãŸ¶†»§x›Ìð]–©á­-柤40Ç$²isOn÷ ™!B‚]‹Kp§‚wWðàOÃÿƒ?ï|S5Õνf¦çT½0o“íifþI‰á‡¡ŽWb;™›1sšÀÍ?Æ>/…uí^æêáï%ñ‰.ýmm%ºHÕaŠ"Ë’B3#Èç€B¯\W¼üjñž‡ðWàV­ˆ.džî¡ÓdYY¬~fŸ4«¾ xãÆÖwr­Èã`<õáSØÒTéÉÞ[ÿ[žF!'':½š¿m¿Œº—ÅÿÛ7ÃøWA§x.æÃHÐ-ű´òAšWNDŽ|×@@RGC^Œ‹cðoCðç„<%fúÆ£ákâ±³±IJˆÕdhÛ,CBsÆÝ guxÇüŸÀ—×_áñ|0꺖•áy•ãâóîïï!¶3ˆÄï»#GÊIûŠ$àý¨øÆÏEºÒµ[_ZXßI½µ³ÝɶÒÉ]¤¹ÆéeÃÎÁÙ@v~:fº+ÁR壶þ¬ç„åNÒ§SgÅzåö‡áùmµ;í&ÎÎ V¶³´ŠÝa¹ŠD`d‘_VvcôÀ¼×‹øßÇwž>ñgðÛÅwgV6Öó€ ’¼ËR 8cÉ;‰ë‚;ÏÃ¥xjæÿMñd’_ù÷Í2DÇÌ™.sîa‘ŒîÝÓ†À$QðKK’óP°×ç:F…¤Á(´µ¼Õpé,Û‚¼q+®Yº*“†çƒD-F.Mjø–ÿ¤q><ðe·Ãñö}@Ô´µ±ÙÍÅàp·†æY%@8 ž w·³A¥|6¶y´›¶ŽþWŽÚp³*Û#yÙíó>s“ÏzÜø…cÄ?øÎÞêùwxMõ C[h¶ùÚq@<¨¡l‹ Ëg'’qÐ×àý^_LgÑçY¾×0e·†`ïeä8 ^@y~qÆ[¸4ý³¯vðÒÃÙ¾§ «þκv™âKÍJº×ÛG±”¦¢—÷&ñgÊò±ŒaÉ0ïÖ]wÃ^ðö­ñxßPžòïÅÚF‘§´PZ,kc5ì·ˆ…˜€ûÒtMÊ2¦,œ–×ý¤luwá¸ð÷-­üCö»™ç¾òd’XdI#]„a”˜•‰ê<°1ó—«áýSÀÖZGÆ bï”’Í}啊ÔïØÃyÎÙ>EÎB t)·äôíÔÂ-©{Ÿyò¿Œ|E£ü&ø£â+=ßÞéÂðÅåºÛË:²n¥Lãj¹-ÇP¼Vn¨‰á/„Ñiž(ÓÚ×ÄöZ¦±mut¸6DÆ&ˆu $‹¼žAÀï^éûY~Ï¶Ñø6k¿é¿o·Ó›ÍkÉ$ÄÚ{–%âvRw¦ÝªYóŒÍxÏÄ Y­bð¿Ã¯ü;¶ŠÏij_é¬bšhõ.[LŠCó‚Å|’ À'/±×xŸâ†ƒâ}G^’+Að‰¦ž2w<± —31‰‹hìsš‹Á3Ï¢ü0ñˆÓK¶_i­tÚd7m:Ùª\ h#U¯ïÊŒùUNIíæß´ëóû*x?ÅZW‰ÞÑŤ{Ɍβ\ W²){f]§æê:x%%V|²ô;Õ9SWKMÏ7ø âùuÛ;ÁÚ߉-î5+«ÿÆ'‚Ûï]Mvïã¦Á-ÂHÞŠ‡°¯Õ¿/ƒþÕo¼;"Gem,ÆâÙ·A,ÒL"™Á\ãäg ð;ºœWä¿ÀØ|)ý ¼)âmTH‘è7Âý Æ‹ä O7$w÷¯ÒÏ|QAðšÃÃÞ[kMJúÎöþáÐùKgyo¸““·€6ëQœRrtÔ‰X2ê«ÞrÞåi>!ñjé~½H¢cJÖ§ÚF¼±‡cƒ&Á…'Œ àþü-ýn[ÄX]ë—wzÁÓ ™›Ë’Aå+¢1Q'•‚ØoP¼uí>øn_øGPÔ-Þ)-¡Ô ÍÕ£‚Ä(*ŒžmÜGBÌAã5Ói7ÅÜËã+¹.¥² úXЬå¸}»FScO—î©lsÍy>ÑÁJ7ÓCÕäO•+w>Wø ¯ëš§tmW¶·x®4t´Õµ7“{ܽ£Ä²üˆAÛ(á±ÔHFG5ô÷Ä»ÏíÿKÀ·>º†Þ× ˜’kH‰izà†iŠm) í_<þÉßäÔ?jßø7âX™®¯[Šâ †ŒClÞTh‘…0í‰ànÞ÷«êÿo‡á‚ÏÃ>Òî,g´GÓîeG71΄,© ;|ʼniÛƒŠèŸ§·i0ÃÂQæ}6<×á÷æÓì5V4Û¿ur·&G rÉ&<¿E*#@d›œc=‡ì=ã |e£|C·ŽÚÎËGµÕõ+¨å ôK +ÌÏßù¨?7–¸<â¸gGºÔ® °ÐVi™*Ío¶7„N² $/ŽzœOovñ]žŸû;ü—G´ÒQt-"ÏMšùä‡"/4ì\³¼Ä0SÝ25ɉ—5>^¬ïÁEsÝ­—ÿg†ÏáÏø*7Š­ç‹f—á+–g–S,öæx¡X^á³™í”åGtÇ~·ñÂ? iÿìïôû+MçÄVpKk©Ì­o£j„¿Ù^á9òÒ$€2+åß|p¿½ý¹4M'M Œ| æßÎb^]F³ -¥žM¡™W|ŠÊq·ÌQÛŸ£ï4ë¿›»ß,i¶wm4­!Ûnþ\ÑO2ÇʹÙåª)ä–8<ÖX‰Tj“–š[î;¨Óµ©äÿ¯#;ö$ðÉýœ¾øKƒHšÜÉâí^î6¼˜Iw#Ö Ë ª`sÉ8É®OÆ~6}çIñ\Z´Z£øºâÞÔZy»ˆŽYš8\0V(UÊ| Ýšç~ xÒîïâ7ÄfÊô§„ü3¨Álþg,÷«0%[&A"#3å[ Ù5ôfð[CÔuÓyá×ÒéÖ!¦…HŠ4H˜î–^0Òe‹ Ú1XÕ^Χ´›5‹ö‘p–—üJ¾3±Lj´ÍãP“RŸí` yqHK*@ZÈŒ È…ãÇø{®ÇáÆ‚>V 5™erÞ_ï&}·nBÈ„“ÀÛ^ðúm+]ý¼øYðÅzô³¬iöÛ´Ý:LÛÝ›‰Õº-|ó1A÷òX ^IõŸ…ßµ|ðÅ÷‹-®¬-eO=¬2ZÉur¼R<¥p‘œ• A¯œÿkß‹—:‡ÅŸêóiEee©Á#^›T–ä*G#ù¿)o,n!ÙF6Þúáé¸Tt×qJ»•=VÇŠÞør_þÅ—±­Å®µk³né(Þ ’HMÕ¹Gå_k1È|ù=}áÄÀ¿îôÿÆn`öž#½ŽêtœK5ÒýšÞb“$įâ@†ls’=ËÄßô†z<:Ä;i5ZÑno ú‡—,ÓDá2DQ…S²'¤ò ›qòGÇ}ÇÅ~ñ6¥á Ó×á¥ßö§d]„÷ñ\HBHÛ‰fŽ7‡`ä„bàw¯VX×¼ÍîyÕ©¸(Ê;£Åå°Óf-€Ý÷¾ñÂo ÚxCÁÚƒ¼<ÆÓT¶·³»ÝºêXÌò+KŽÛ<Ò2HÅ Ä ׂþϳ¶µûKxñtíDzM¤‘˨ßLq •©|ÍܰI$ãñ¯ÐÏŠóXxÂZöu•«¾“læ+xÅ­›DÊÓK»îÇQ’NN}kÐÇâBšw}MW”êIX©ñ []øn¦ëIŠÊhò[>ºQº|À…#«±³»Œ{ü•e¦ø‹áÆCOÕlìcÐü@X”e©àíhœ“–h®tyèBŽ×Ôúö‹e¤k‹.üK 63³Yà°™"* ÷pnf-¸ãœ ¯ŸjOë~/ø; 4¸xÖû^ûD–žµ“û!æ ¤ÑG»Ô¡ëól÷.lWÉ_|W6µwxÒÏg5Åå¿úsCn"S¬²S»,N1^çð›âå—ˆÿeZ1y6‡‹¥ÿÂ/uuò’áÕ&k‰Á;Jˆä2g‚NGZù»Ç-¨É®Ê·š|¶÷.Z"΄ XåY”‘ÊäpÃÔWm bçQ¢eõ5ºÜå¯ ‘nPBT¼ Ù铞‚¹McTûv´›€EHÔ0Œÿúë  ú\ïÃ/˜WHéŽ+˜Ô³q<ÒEþ¬ ` öɯvŒ]Ï;ÂÇ[?ˆ`¶Ó#k'ž"ÚåFUFN9õ5Ÿ¯Þ[^Ù6ysÖS-͸Gb°H§peNTœ€zsÐæ¹/ #Eo/Û„nåÀíœuü…}û|¹ñ7Äk}[ÄZ5ÐÑ´¸â»iÞåÈd äç#§ øvÕU%qr‘ÉI:•s~Ê1ßêþ 𥗎­£±7KsAn4(QIfeÿ{¹Éé‚j‡Å‹„ðƦx0Z꿈u‚þâÆMÏ„RJ"#¡Ý"¨ÆKONk¬ø®imâ3ì/w­¼†åZ7*"±aVEP>]Ø8ƒÑñÍZOj´Î¼¾#žÃì·k#Gûˆ,¤V8#Œ«ávðHØOc_oi]ßE¹öÑMa/»MÞÓ/þøfi4ëY/õF†+{{%bs¸å¦9U9bpxS]ÓgƒÁÚŽ£ã«&{|,ä’9œý™_äˆF¬)µ†ý§ÓÓ5½§j–öÚßL¬lURö}†O<¼6 ‚3¸…äà‚{W›þ×ðjº×…µ? XýšÂÃQIZp$xÎÔF‘\`Ç#FT±ÆJßYÍ+ês®E¦ÄŸ>ê~¼ð槦Oö£Ã!u…BÛBadMˆ£W’o½’k{áΕsào éS^YiÖÑXÚ˜˜ÜJÇÉžGÞc«Hb’7â¶üA¬Î¾ÑnµÈÒÓ¡eºóò%Y¸ÏFëÞ¸½{Çz׊´]´ kq¨Ç43É ì¸qîWP‡8Ï–Ãk™KŽ yå5Ëær¦§g¶‡;«é6–úò]jÚâIý­vñ {K”ù¢DgÈ¥Á•ÚÌû 8ªÞ²“Bð›j²“c¬Yk2Û‡´ÚË+¸ ¹†[ÌÝ wc¹®Á7Ú¶±âo®½,i¨Úx‰užv2ÏS(ŠýÜEl#vÎ2ÍÀçhë¼K«·Á8tû[KÛX ¿¶iVä@ÅbdºT7 !%w4AÊ‚œçŽ—+G©2÷®ßÌ÷¿„)mo©A¨#€Öñ®ñ6ƒ€7$g%‰ÆOlW‰ü;ø{©~Ô?µ‹¼O¯=Ùð‡‡¤ºÒ!òÛË›Îh u=³<’2ãåeQÜŒOÙ“âF½â?Úb÷C¸y5;#žöC/Ö8ðÞkí@bèpA¯¬þøkDðW謼+`±Äú”ú…·ÙD .CÊàà39g$±çwâ°¬Þ¹-[Zy\(rÔ¼}Ï6ý§~CÁöÐ|a¥­®ž^Ö$q’`÷h s³¸| `æ¾ ýŸ4]'TñÕ֗㥿Àª¯w$. ÄîÄl\¶I”×é'"Óuñåø©Þß÷ooÆ3$ŽS#a”òsé_ þÑÞÑÏŽ'½øuhú=êÙ´R[‡6¦eóI‘dÈU;xc–¸ç|¯ùe nŘÒU)ÅÅÙÄÉø§ðâ?…š”·^¹ ±æËö¸KQÉå°/üj’ï8É£ð–ÃJÖ|u£YøþÌÏaªê–bTi .Ï=Cn ƒƒ»$Î1Þ»/‰:½×|Om«|+H¯uO xrÛ\Y™Ë‹È$UIâ‘FY·wÇ ÕwøsáŠþ1ð²ü!Ô-­mõóåÓ̦Yt¶… “Õ¾P=á^¯;pJyå8-Z>ýñ]Òi×VbâD–w{¹Ô6ñ_f`¸p ?\K[[­sÂ:^«à2š=޹=ÃMö¨Lf+D¸;æUw$€¸b2Hè*ý¾‹«á4ñ̶2ŸìÔó“rùn@ZŒ}ï›a'«ûÍqöË¥êpßÏl¶“]y“¨ŽÞEæ‹c+:2Œàã¿/(¥~]Ïk9$š:4ø©}ð—F½Ò|+:꺽þþоOÚyÊÔ"K2 œËêõ¿ Zø7ÂÚU˜76VQiG%‚Ì¥dlc´0Ù™AÀÏzó?Ù«[ºoŒ÷WºrJžÐm˜ÁvGžYn NÏÄ{b IôeÎçÛ~ [jwöšç‹>Áms©_½ä2êeÑ–4%“aœ)’sÁY(»õ=Ü åilx—Œô=7Á.Ñ®üÜ]^ÚË%«Í–ÈïnðÈÈ\ ²ž‡žBÿA:ŽŸky}krÚƒIº¥\}‚\ãå;‹HçÜkؼWá}kG½ñ&·ýÔ–ínðËy"Á b"b3“ ÚÌFÐG<טYi'MÖµ‹ÝjX<íFUHfºcæBÌT$L™ù3‚äã¶2:WdpZœÛª®_Ó7–ùô/ÝÁ¢-¬úÅΚš„—ke·DòäFÃåkFS©ÏÏ^›à«¤žïJñwƒ£[Û-Rî;¹a…€“Nœl2@èÜ/Í&àr„5ÅZ|#ž-·“Uº¿ž-GJ¶†ùbcµÂí’ܸãvò6ýàݳ]G‡ ð߀üek »ê×ÒŒKÂËqJ¬Yw0(:ôH9¤Ô’‰É §uäVƒÃóh¾,’9´‹sr—ípZR²É°ßæ!è ´›F3€§Ö¾šð•¹¶ð…ŽŸg›m`b¸¿–á‘/E21XÀ%ÁÚFK Ž3_2ø“ÄzàÖük7‰E¦£w©\ý’Êm¡A7˜NHbAÇÌHì¶ŸäÑ~6ÚhÒûMÓX[-´ËºíЪ,aˆ8Re˜ ¨ú×x¸Û”õiÔæ¨£'cÎ?jˆ×>øGâ{¿Îl.Ò)ZÎáZA 3u{ ÜT ª1Ó¶kÇÆ‰ü]ñ_Yð•´3ˆ¼)‹ÉvmV[BæFŠPŠKa]¤‘ ‘×h$zf·%†µáÍ[ÃÞ&´†%Ö"¶»¿ó’F‚‡bªBˆÆåò”d»Ø“^yð¦ÚMs_¸Ô,#…LºªÞOq ¯ ¹!Œg+yôèÃÒ\¯›s¯Z3Pq[3À/!ñÅø(§….Pÿki:©ucu)RÕ)·L¥p7«›‰ÉÞsÔö'†|q&›ao§É)ÓWKinWE0Ú±Ë"àOŽNsÚŸ‚ü=¦ü/ð׈µO"ß\Þù—’ÜKG3HÎÂA.Ķo§ÍâÄ׆¯²F¶¯»ß÷­!}¬…N }GLWMKb#Eh7?e^UšßeäuÚg‹,<]©êBãT¹³ƒNͼÒG(RåÈÙc˳ c$f¥ñ§Å ¤ðåÜ“ØÙ¬ð/š‹yPV(žA€ãåÜÀÏåÞÔ,üC«ÝCáVÔtùmîšÀ;d;ÈgÀÛòçs…k´ÓüF<_¬‰´Ø¬-´{mŸñ.·€æ/ÌŽä®K/Þ-œ–nk ”U7fz8J®·½ýz~øywªø^û_ñ.(»ÖbŽ $m60Fù7CÚGaÇ\× ñöðÞ‘ð7\Ô|%¥êú§‹no©swgžòaa".Ÿ è¬åˆÎ¼ü2×'°ìÞ1êÖöú¬Ñ¥i¤ƒî©rOÝöÎ{ðqX?µOˆaÑ´kË)/%–ú9mœZ\Ù¤’&S²]‰ Ð/|žÕT+O™rètJ1iÆG•üÔŸÃV6w·¿Ú¨ú"Ïl!‘X fhÞIŠÀàõÿezäñý­½î§ö¦.¥ªM Ʊ¨CxÓhÉ9!U€œ÷4ÏÙ£ã%ž©ñÆžð&›aimowmǵ`“|±ÜÏ Q´3¯ÙÎ=Žª¿ üe®xŸáÆ¥càï ­ž¡qs&Ÿmun«åD²ŽâìȦö˵IÀ=÷Â_†Z׆4+|< –£puWÅ@²Kª»9$LÀ–*¡‘K«ÇÞ««¨Ê/䝸EɦvIãK 5'µÑ\ë8VWp“—;KÌܨ<à‚²õ^ÇEñÝø¾{}kX{d·X¡vK+S#I5ÉWÜU@P=+»“ào‡ü'ámBûÀ]¶¡öw–h—Í»žùP' ;(%Fp@WÍÿb³ðö©©ÛßK©jw$w:‚ÌíåéÆE"b«ˆÆ@‹¯ÍÈ'&± •GîÜÚµIs³M>)ë:äÚu¬¶o¥ý¦G»䶈;–ò#;”´3Œöè*Æ­¯O$Ñâ¸×ocXù v¹#ˆÐuÈäŽ95…§Ýk7ZtcÁz4——›Å¼2£Gn vDNæ`;ä*ç–ÎkÑ>ü8û‹gºø—6“s.•f/ú`ÙnŠIH]¤Yÿ‰¸%‹p0uÉF*öÐàQw>Wµ³´o\ø“]EIÓ"y^Þ#†* ɺúõàÒêÓj¾1¾Ô|#erm£|Û4QüÎ{îäsÚ½¨XÞ|[øG%¦ƒ,V0Kn¶’«&íuvÎ3Ú¶ü1ð¶/†~†ÇMÕϹ‘‰™!+,ªG $’r?p©œª=vH‰{ü¾ÌÌýôSÅ^Õô]ZâöüEuæÞ ]«A>bªxÜ{W°|jѬ>ø2ãJð†Ž²é6…âûQÙ$’iY;Wqm«Ôþ5ä¿ ü{aðßâ}µ“Ku/ØqçÉrø,Ì>U|¬>¼æ½Ó⟊ÞçA†ûM{h~ÈßiQ,~b[ÈÌA`«‚Ä ·8<9g¨Ûë—Ë©ÜGj·YŽ!£²q»qÆsž+ÿöpðù¾ .%Ú_B/'¸Gd˜3Àpäã ŸÖ…%:yu"Uîýשó·Æ?ŠºÏůY\j -ä) À²K€íä…ùG^‚º‰ºêxŸÁ ¼¢Éqo­x6ÔŒÆ×z…äsD‡o\f UÜkÒtoÙgIð†›£ßxÔÏi¥ØYI{¨Û¡ÿK¼“quð‹´*nÆNòzŠãÿd Çñ“ãF»âï‰Om¤iž{Þ n<«{wÒH¡iq’ „LŒû⻩ԣ(>M¡¯Ìæ»UU'+ßWèE—áôÑ|oñ ÅΡ௠ê¥Çp»þÓ¬êQÁ’$1õÌÏÏ÷P/Brž|Bð=ö¹ñ÷Äÿ.ฆ$’k 2K“û•ÈùO—Ÿ,(;vǽz¡ñf«;6½âKˆåµÕµ ›«å”n²Hϵ}ß”„Œ¹¯9ø·ãÈ-Ò [Kt¸’L &ùÊüÀœ1Ž93XÑ©9IX1\­]-K#Pu]ľÐ×NŸJ»Aoeo0“Í ;ͽ†FF3Ò½·âÃÃáÝÇNð弯Úîå¤ÌRÇ&00>ódòAÀÁì ¯ýš4èfÒ'ŽîÞçíB§ÏFCe@ùˆ’Çœ~¢½WLÓl´ÿ:jV wol£M7Ʀç|J£‘´çîð zQ‰†ª+d`§xy³Œñ®Ÿu¯Ü¼z!{½KO³D¶óÛu¼÷d˜P3Ð`r yÇ—?58§ñ§{yå9‚hn ›hEbL^qàr: uÀ¯CÖžçRðõýßÃIõ K­¥%VÙ“nXohmdòOäšÅÝ[ÁzÕ²øº}NÖÎP.¡[}¼…$®¾R¥ñ¸¥uP„œ_&ÿ‰ÍVqŒÓ’Ð¥¯]Gá¿0ÐãžÞÎÏP•b`p²¨ÆÕl[n7´W°xâÕÌ^Gñiú­…ìJâÞp%iœš7 ò¶zãÛ+ñîŸgàÛñö©-V7Šá¶ÇlÊX-¼dãî¨Ðï gêß |C§H`Ô4÷‘Z Í•f\ÿ² 9õ§½Ž™¨øn÷T×cÙ,k"ÛÉÌÒd³r“Ž;(àò{Wcà¯ÃíkRÒ|K,S[L‰lu(·É%¡xÂRGLv9æ—4¡.ŸÖæÐjRnZž='„ ^Wfiu ò‘á#Ö‹ynôGí6Ô(;XøÏ_z÷ïøgCñ߆$o K×––Æîîùd 5Á˜&@ µrwŒÏn{Yøu¨ÜYÍðúÎúêÁ,â&ìÂB^Lãsa¾è ¼‘Òª¨ËI áäõ‹û'¾ñÍÇŠ¼^º†¼É$ÍG$£ ¿bPG²¨…t7wöšµ„K|cØýÜÞ ñÅIâ_…WžÔž={O¹ÓçpÇ*mäçnô‡y°*ŒXúúV·Œ—ºÌ¹¥¢ՑXøfÒÛP7;wE’ÌÜH¾Õô‡ì-ûFËàˆøvææÚ â6’w DR#\ž0w0ÇrE|ý­%Ŭ Å o,eFìt'µ%—ƒîâ_Z°‰ ):ä÷R~^jêSŽ"Ÿ$ÞŒŠ• ·‰úo}ñm™’ÒäÍ1´¬©¢¹ùÛˆãêk剞ñ'ÆoŠÚMÆ»¦Om§h‚w›Èc!ÉÁÄc‚ÌÅ@ã‚kê- ‰ÞÓõÒSOº¹Ò­µ+ÔfvŠÝçŒ\ùŽY°ÛŽÑÀ8¯Õ¿h/ xB±ñu ~çS¾ž exÖ$·X|¹P¤| îÀÏ$ùŒ,½•F¡Ëcèja›’ö›#êËé¾Òeм9¤“ÿ}¥žŸtèæHâ¸û8’KxäBÈ$p䟑WŒœâ©xSÂÚ…þˆºßu™í"¾ŽÚæxä•|ã·syLûp¹‰%1€@‘šâÿa_ Þx_áα.µ“¨ø«Tû*=Ūì°D,Ö0B[dh¹³Ë;VuÿwM=îe€rr”¥Ððÿ_l<]ñatO‰wºÜöPÄ&:3J!²µß™7Üì*e‘—IÜ7í|G–_ü ¶¿¼»þÏð޼ïkooÄѬa€DÛ”*¨Ä¨=ù)¶°ÜøÓÆ:]çŒ.ôØüWã-2úçNÒÕ%¸·´…óUÛ/(d?+:ã3xÿÅüOÒµáŒ2Of’°Žv ˆòF6ÈÊWåP¬w7 ‚rÏ;¨A#Ò¤ß<”Ú:†6}‡J±[ÛÓ¯¼Ømgó<Øôç£0äd—WPð¹ t³ñǶú/©ätyd™ÎÜÍoös<«—Y2pÄ´Ï’{öÇøt¶:®žP3Gá;îò0Ï<’F)n"— þñk㎟ã¯økáæ›q$ž*Õo“P ž`[hÌ3›\NÊc2ï1òê|³Œ0' ©ÊvGJª¡fxÖ‘ðý<;â!/ÅΫm¢èÚ†­â&²U°¸g†+K)ò%'— ŒTœ óF¹o¦|@Ö¼Cñ+â½ïŒ¦ðZ­­£¼È¯.³ªÈ4 ´íU!BHÉGFéõÿü 4zωt}IΣ¦”“›†•aeÌæëÑâV û»mÅxwí…¤Ûéß²7†¾|;Ž«Í3ÇÑê×)O¶(|‹»›—,Α•êB»v¯S WßQêíòOvpãཟ´væMû~Зž2¿ÐôáÍÂúvž–ßg‹LÐLâI'Ùȉ‚eÏÍ´q]WÄûëbÜͪØê/mg;éÑÙOfþ\¯m w7(w,Ê0¾NqƒŸû?ü4»ðWŒ$}Z;Y5{•²ŠÌîñË,Kæ1Bv6ÀåTœ–+1_OøûMÔ~*übÿ„'©o¦è~ ³¹½Ö£FÌH“**@[Œ;:³ÏÊœž@­13…éÃc–‹ ”ž§Æ×º¦§ñë㽜Z,ÇËk3"´Ã`]Ãi`çžå°¯uðÄ ÄpÁãÍk¹ü¥Û?Âå‚ľm´±ÛÞ^ÿ± M.íääˆúžùš×†OÀ¯ŒúGÿ„ì.|EâK+‰µMEb+o¤C9‘-Hq±È%bÿòœÅû\|Ò~þËþ øIðËÊ.º:øZ;»£æµVîÃó¶`“üN™à ƽuRTáþ› 5aá)=Ñòç„üKñ?Å~5ø—mðŽÚTÐÄ]6â´]W[w<µQÕ©Ë'«ýOJð&›yâÚßøëû6îÿO™ï&€€âÙY™|§–@Ø8S€09®—Çþ ‰:,Zv™«Üiúxž6¾‰ÓÌ̃$j:®FqŽ™Î:WxgÇSxcö…ñW†%Š×Y·¿—í–1¥³.d!V/-rÅvà$‚Ýøî¬m|Qsâ¯É6¹k£[ùpÃ5³éòK%´3®ÕFQÉ,>Uw­dã)%+¥ÔÍ·IÉ%³±µã¿ZŸ‹–z¾‹t%ØD¼±1ù'ËV?!n üŇ­rÿf]ãp¸Ñ|=¡Kiâ½ý­.'·¼Fº³29ÊØ} „ÁÅu·žÓ4«¨µ}zá­ãÔfH5#]“FcRêÊyPáÆ2GÈHëQxZƇ(´ðÀÏfÚ¦¹©ÙÚó¨H‘,fIŸ92"„FÒ¡9E)BZ¯Ì¨þñûÖ~GÃ?¾ê?dhÖêÚõäŠ ØÑ–)LRuû¬©9ã±¼!|ÖÈm-ÄÍ$E3"î sœãè+ëMKÂø§â7Šdø…¡ËcªN×3ÛFZ%trûS÷Q¬„ò[šòOŠŸ²Ý÷õ‹]ð4òꞺÍ$”kë$%Š4Щ?#`a—8èÀ÷0øÅ$•O‰õèyŒ/$¯ Œ]?öÖ¼/à­gÚrÉ ¶¸Ú†ë"…l·_HüÙd—wÈyÅ{WÄ„ãÀ_³χ~)ê“ßj–7—–·î%’(âT`c2¨v#hÎGCŸ4MïVÐe¼[KHZ²´ó„ÊÚ«B“Ó$+ 'µzÇLjð|aø9á­3ÂÂyõë¸n®õÑå3M,¶­Ø­£Â–•'¸œ9$VR1Kœyµ×üÍpÏ5?‘àÚíŒÖ×°yè»í¦ÝA¹dSüJ{ƒÅ}Åû1øßJ׿g}ï^k»…Óm†–ðCùŒð¶Â\°À …l!ÜFzkáYï[@³´“¨ˆ£ðò ŸN{WÒÿðO®¡á­kÂJ—'W}E5 L|»¬ØD’D# ç)‘É Tw­q‘s¡uÐåõ Öî}“¡jÚ<:l:oˆ.o..çÓd—û8Â6„#Nò>~`p¥rk?ÆúSx6 nçWÏâ9´{kwžKÉd,Ð'ß;CãÆéŒÖMÏ‚®¼cc«Xé›öñKr‘o¸ºCp‘#8 ovQrw½ã{ï‡vZãø«I·ÒHÔ¥°ß·2vEKgBÛ7\º‚0X çæS•ïê}$o&ö<»C†ÃEø¿áMrG“ûfá ³¿Qr»#ò±x"”7Üm$ÎwJƒk쟊ÖÏñƒÃZþ­áÉ–í6ݵY¤a- yRWàà¡T^ß)ï_žÿ ¼K{íÝ®xv­õa ùaJGou²\<…\|ŠP:Ý@^í_Qü5¸½ñÄk©¥ŒI Þ•#¬SI˜^E3.~bªP äÜg5XøYBiô OžQ¶ŒÌÑ.u­+Àšî¸³~æðÚ›…ݵ­A·v-æ÷—Ž8SÆHÇ>§ûvxKQÕ¾]iÖ_éÑëÙè°ÂϹKKQå®vîPû<àŒà óŸ‚ÿ WâWÂÍCÁúä*¶ú¥òZꪷM ói×2|Ò¶Ü4"DIUJàƒÓšú³âßm>'=£ê°[^iz*Ê×R¼­«2Æ|µ‡o}«´ŸSíʼnª£(¿3ÓÁPçŒô?6¿hokÿࡾâÞ{ó .êÝ'Þ¶ñ>L1™ùZrûqÁ^GÍ_Zø)&ð_…ô‰.®õ«í2Ú8íØÛL™¹¸hüö21ò3\÷Àôù/öæŠöÃþ ðÙü=¦ýŽæâvhnX3œ…ÚÁWd&\ ç$:WÕÿ üm"üÓ¯­ôOífÖ.ôøRêÁÒt"eW1ÆøpTƒµ±Îƒ[b¥Í†£Q¥ø$á&*¤5Ù=¦øfÿà×ìâY–çZÖ5}ö«X`ó¼»eK6]¼—š%àªBA^Åû>éqÞ~ÏÞðÿÄÛGµ訲ÅÒÇ2I$A@ª"rö)'2OÌk¤×ü;§üVøåiª|D‚é„6ïu§Á§††[{ÆóOç‚ J#2FKägå5ËÍሣ¿ðþ›áíjêõô¨d»K‰KI>¬&Ù…I Ú y>Q`x€PÔ©”ï×s¦1|ölà>ø~?ƒßµ—Ærú º¸Òí,<9gi¶o6Þl,Œ§§ü»ç¡'­\ñwÇ |K¹Ó|?â= Uð‡¼'n.5%¶xQæ‚Ý‘¼§àmifxÎÈÏÝÈç‘Yßµ%Îà> xÃH¹×¼á;ƒ kŸeœ'æ‚m‹‚ÁDò6#B{š»«xnÏâ¶o{á5›ûøtÝ/D½´0i±Û `n±C÷AfË6Þ '„š«Õ’}½,T•¤àº’ê4/[Yø‡Cÿ„ºÌiÂ{›9nDº|q"6gÉQ¹páPåˆ9è øS½¥øc^øÙy£éz©Éi¥èö t#ŠgÞKàJ€ª®:ƒ¸U;߇Z¾ Øx[Ç:]÷†ü7z·:¥”†QŒ:IM¾J/'ù{úÏÇÍ>k?ê?lÔ¬á½Õ'KxähÔeG$ª¾bçbFP§+‚€ý •”%G«ü‹§ÅÝŸüIø³ã/ˆ¿ðRÿ hŸµK=_NµŽúÉ®b~Ëý–öÒýµ°‡ª¼J<«í?0|dñå§ÄŸ‰Zž‘§Í§yÏ=¶Ùæóe|ÌÄÈÌT2FhÇ F2ØÍvŸµë¿þÖZ̺‰}'I¹šÂæì¢Æ³¤–Wrsó³#îÎx\Ÿ” oí›ðÇOøEñ´ŸÅdÂúÂ-MVΑ‰$‘AÉlŒyäõî+èpÐ…´á%«]?SÂÄMâ(Uœ6‹þ¬zü›SÔ#ñŠ<7c¨Ü}šâ;Ùm# FÉ ²ùÍÔv_&=¼Œ>õíÿµ†µw/À©mõ]6îîÏ\¶{uf¼Š%k‰d ¡òC:ˆÑ±€­Ôƒ_=~ö§Á—^'ñÛFu¼VP»DÒE$R82äeÎÉÀn€šöÍáeÿí'ñËH0Ç8Ñ´+ɵ+÷¹·ó-ã†8 ¶ŠÖX¥¹ÂGö]‰ N¹(§™\‘–>¼5|)Ô¯tÍZy³gi«ZÚ.Q˜€'™Ta ¤ädƒ^ekãƒâ/Ž!µðk ;h´ûëËûá–‘Ü_Êk'*8gÁÆpçêNKÈúz‰Æ†ýV‡iãÿéÀ5¯ ý–æÒ ×6xòK€C’ÍÀõ¯(—Äö~!ñ…íÃ]Ï}ªÈÆW½¶ÍªÛRXƒÔzWŠ|Zø©^üCÑ®nïg‹OÒ–i'¹ÄrNïžI?„†`éÐWsâ/Œv:2[Íá ­er¿è±Ûã|jHQ)븹+±'©8 è-5«íwÚuuÌRI(¹a˜×¦G-’ÊHàã¯ë:/›¡—4Z䶇€é?,ôý.êëÃú΢4ÉîYxÕæ˜L4’ªåþé!T¼ƒœ×kñ?àÿÄM:Â9nôÍN†Ò8£7åŠðÎT†ùQíÈšŠËÆŸðŒèÚÏŠõvŽÞ×H¹½´k˜æó»ÌýÒσŒÜ|3ñã^è’j’é·¶“Ù…[Ý6hƒK±I'—/W¸fº'V¢÷ûF*›å¶»ÿ¿g¿ |¶žÓÂñÛ6§¨Ø¥¶¡¨µ¥irçåA’䜰ÉéYÞ¶ñ‡Œnôm ÎDðíÒ®¡vú”ä½Á—m-£\„ ÜvÎI¬ÿˆ_Oƒ¼=­j^‹ƒ¤ÝËeK17# ä³J›'Ñš©áŽ2iéâ«» ^ÓJŠy®<©Tƌ͉]q’îÈʪpsØÖöµ[”µ.³8òÛî;Šþ²ø›àJçL¸In,­^@ÇÌxwl•g€@+Ž@ãŠùoÇ?-¼ðÆÿ]ÕtùSd2ZKiy‹©!g[ÏuHQT+F{õ¯¦|-ñ•¾-Á®éþ ŽïH¹ŽÑ–+·…¤‹¹WUÙƒ¸€y sŒÒ|[¸ÒüSð£WÓ'ÔaòZÚk¨V;dÀšSÕ[#!@'ž˜æ ³ÃÙ2\£UÙì|ýûxk\Öõ}GÂÚð_ O¡Üjζ*òýžˆær¤¨pä3˜†H%ˆãVOÄïÚ¢ jûÁßÃ=Ê(‡Ûu-9#[[Û(¾ÚÞLlPnó–4MÉåלT>øãeðãã6}ð§U’(Æ>žæ+r÷ÜÇ€GùIb9ìªH$ Røkû>iÿõí÷Ä:ž£oo®Iu¢½õ»FÅoí’Y™.Žâdµ ÙÏÈrFkÕ’ŒªûJšDä„íNTañ?Ëô>ÆøWªè_|.>Åumá­rwh¦#YT|¡ä#å‚ Œ‘“ӵѮ¼Uñ†ñõKƒ§Ú®lÖIPÝ·å`œ%9äŒã©¯‘¿bŠÚÏÁŽò|ñ­­¦¹£jz„Éegwy-¼K~Ðù‘l’<í3 ±‘‚¾cÿ{9ûoàË[Ám¯ÛÇwnóÛo½¶žÒMºc!%£2…‘Ð’Ð[8Î y˜º.e³Ûætåõ´ª-S³:ƒÚF™áØ­<>’Æž!ñ}ÉÕuKø÷ªÆ·3Ï4‘„êU ‡bƒœ  çÕ]xçC±Ó¬o/¢µ‚Òí#%û#yâ#´GEItC´cng=ë€ðî—{â&¼šIæLsÍ;#ðÈ‘‚¿6Fæn`àW5ñ)$½“GÓ-ÑA¦¼ÊÊ„H”…}\“žøÇjò9©f{´çÅ›¿>>ê ðÊëEð&‘Õ¯ç·F¸–³A,K|³„¸·¯'ü3QJj¢n*ÆÈ*RIvÔëüwñ='š‰ÖÖÙ ­©–o"=‘¨í*NNN1ž¤õªZN¹¨MðoE½ð,\‹XÚ[¹bO8Tu¸lä: )QÏFǧœ|Bð¥ÿÄ-.yçŸÌÔ-…Ĭ†5ƒÈŠ2IUÛ·ž¡‰Í{Béñ|ð 3é¾ ÖìMœr—w¶öͱ™v¤ìy]á¹Qƒ´à‘ÍrÖX“·PÂÖxh8ÈõÇñ­–¹Ÿ¬@òÞ¤XÖ8Ç dÜúæ¾vý¼<['Â?M¬\É*Ø[j“CnóµYÙÏÈ[¤c`c¸Ç5?Â?]X|XÑ,üC ¹ÔæØÞÊ º!ÙƒÈ,¬«ß8¬ïø(~‹®x“àºn“q¢ki§Åµr‘ä ˜LÑ…C¾F(6•àÝÉïi{,Da-JŽ!bc/CË´84½+Áºg´ímÖûÅÓø—Ä’ØJ éö±Ì²ChGwp#O ±°?)5kâoŠ%Òíô‰fam¤Ø)FY2a€Ø®#Œ±nÕÆkÂ?àœ: 2ühHn´û«ù1ѯ5Yb±™6ÙAg̹f€(ûÜ*ç¹Æ+âýTšgÔ­µFžDûK 1ÜC)#¯nõXeSVN¥µ×å±X¾\4S‚Ô³yã;CÇrj–Òl{»ƒ6Õ'ä瞃šû£Â¤º·Á½-#·¼Õu8ËÍ(êKü  öí_*~Î_ÛQwÕ¢dĘ“Í,1óeFHã8ê}³_H¼Ö>ðÝö·å¤º‚éŽÓ<\Icݹ@ NÎ3Ç®g¤ºeµåË.uó-|=6Þ ñ>±®|F6MäJ†œ€´&@@I$$píä×Ï´oŒn>/|YmrÊ#¬ê·’È0fT'^¼s[>ý¤ü3®øiÓ_²¸E± “ö¢Æâ2Ù±½Î7/©Öhw~Ô/ Õ­•ü-,^cI2ûAØ•ˆ ô®Ãžð÷„>ßkzž¦·úàMÛÊ¥­˜72~L+rÁ8¯› ƒ\ÐÍ®ÐbâæFllÜÀn'<±b;×¥ømí¾? Ë›ýmÝ»MxðÈݺòƒnÐpqƒŒõ«!»ò]æR~OÞ`—+´…ïsŒgÅš8¼OðVðƒíìá±Ôu./.#*«¼ÜíÀù¼ÖòÁ Gæ¸[ĺ]ˆð߯%÷Àvée¥|$ÓØ°3Í$Þ{Î鸑b&V8y$HË•P¨¢EÍ}oà/éÞ*ð)‰%ž_íkymL%À›ÉaÀœ]6@Cds\ÄŸÙ_@ø—ã'ºìôí6Ì H,¥ˆGi*¤p) ’ŠŒ'Ö4+û:ÊRm$tÔÃûJ.s]OíTÛ§úJÈ霿_JMBí¦Ÿ$…tá}}mãØc] mü>ÇV²‘Õ¥HDÈî¿Ì(cÀ#“\Ä/ؾ÷D‰žÜH.ÖÈaòG4EW;d«,»O¦sÈîCB£^ñáOZž¶ÐòM Ä­ x"ÚKk,õ«kóçy³6$ƒËsÂû“œ×/áÜø\’ëˉœ€¸tÉ翸•lùfŸ³%?fÒš={ÁþÖuYã¶Ò;×òìï¬.Y¡KÜ,ÊG̹Á?†+Ñd¿Ô¼àøô‡siÑÞ_Á ÜV³;‹[(ÖB³G$dÍ"£0°<ô¯(ñ×ÇÔñt[oÁ,À/#µŠÞ+hZ2QüÙ8<ú ìÞ½?ãÃ? §ŽôÍ?^}í×V©z¿a¸Ž+óJ1”ÊÝ^ç'Ú®xgábèºÍåÿ‚¤ŽXÁcʆSm÷ƒ§‡%YzdW%\|jRii~§] 4°õ9®™³ñ—ÂÚ·Š¬ïmü=¬Ão5Ä,óÝ™<„µ„¢G¨CºE ü;kʼûé÷ZËXÃöýGXxLŒe!³´’ R7²Ÿ’6a‚;š÷/xdÏ¢ë7Ú{›[w‰UwÛF ùQE×nòÎwO­mü7Ñ.χk)šK·=ãEhÚyò°ä¯ETsךó)Ut"ùYÙSš«\Èõo x> Ú]®šŠ–º8‰­­ãm± @¤);NO=A®†OˆZ«ðÖ}¥À×ÚLjuW°ŒIoö˜,Â'ÚRaíýÛ©e9V)Ž ¯:T¥Š¨¡}YÕOðÉÉmÔátÿˆ¿Ûß´×ÄÖº¥Ç‰ït]1bR±²4º—©'Û¤üg¨¯®þ6¤?øÔu› ?ÌÑ´›+û¹C°Kh¢X?ÑÐŒ* PIãžøÇÁŸ³GÃí_\ø²¾"òæþÚŽþökXÒÁÖMF[¶m®€ŽdwUyÇ¿N#±¶ð?‡ï4ÝJT}r{a¦ê¶"TšÕ7ÄU¢gÛ~vܪGs‚:³ ^ÁA'±ÛÄ)Ós’±ñ§Áok_¾-x‡ÆYZꮇDµ¹ž34ÐÆÑ vŽÔe$dfrWØWªÍ®„úŸ„ôèˮÝÜ$Ó%‹%¬WO Ä–ñÊFü¥–É*ºkµø'â¯üÔ­tÜèz-î™y4’˜áÁ-Â>ì9lFX|¬ÆÕ*8­ááüSñ—Xmrygðæ–É„êÓÇ£*·Ÿy·f]ËNÊù20:òT­íË9boÊúüì|ñuç|øe¬è¾0‡R“Uñ(†xM¥Ï˜Ï³2¸$‘ædà¥Søà­cÅ’izÉðÞ«ý ošî çº ÐHI’T+lTË&Nr@ÉïüMª]xÃ㮚n“,ðÄvÚ‰np«¨Å ušWRx&L€A9äç‘RÑ­m ‚ÊæIÅ•­­±?e5‹nü¹<€€7Ÿ´Œýœyí«9*Y{䚀5o‡ÿaÔüQ?Ÿs§@éåÛ·™öˆy]òFp|Ö\Œœõæ¶tß…·±G­¬ÛšþçûBâ[ë%7—J°Ò'Úp @3óê|'ñ“DñÚ_Oáélæo1£²¾‚8‰;$ÈÚF}88=OK~Я£½ŽÚòîmAã`×­0 HNH‚4G÷³ŽO4•VífG;’äŽÄu±Xê^3ð‚ÇÞobH`& QZ3´‚7urë€EtÓ?°~"kÚ&•|]ÞF²j“™¼ÁqºÈR2fÔÎ085sÄ~Ô SÝGªKe"OCšS13HØÁÆâTe”c‘\÷ˆøã_žßÀúÌZr.©mk¬ ŒÃ§Ç ˆHÒ™OÌÓºH‡h9 N@ÆNrŠ©-v:3¦’Ý|ŽŽÓO·ºñÕýÿŠ¥ûT~zLúÃïºY™+€ˆƒ!@FâO'5ó—í mþ-|Xñ¾µö‚-`ø{ÃóÉ+M Ìl“L¤µbY#”ŽxÃë_VøòæÃÚ5ß43o§Ë,M¡Xk»å1âK3qrÁwœŸ¼sÓ5òçÄ_Kyñ7Á^ ðŽ—¨EáËö»Òíõ=>%bÓ§\Æ¡LT¢¡,RûùzœÉz«´U(jÙá_ü4Ú¯Lð¸Ôl5Ø¥½Êå]ȉœF¬ŸçàãåÖ|/ø~3?ˆ54Ñ¥Öc‘®-ÚÐlUxT¡P¼obPÄXt⻿øÃAð#J|lõèƒU¾½mBîÓÌH¥·BFû†.öÚ@ ç¾ üAÔ>8ü1²Öu=*{oé’*O§ï’Ø_˜r9³cŽ9Ï5éºÎTì–›3’8IÒ¨Ÿ[žO¢þË~>ñßí9®üBÓ,“AÒ.5in¡7…{˜˜ ¢"ç*HÁÎ9Í{—‡<£\hz…ÛŽ¡s$Z…Üvì Ê6»[ (íÇ»ÿ„ÚÍ·Œ¬´y ¸k[NÞ ºM²ÂÄ&üœ¤`Œu9ãÄÿm/:Χâ»oü-ž]ì:äÚ’Ú|àEí·v wo,m9.HÍ`ëά£Gk/ÀÖ¦üÕ;ýæµß‘w¤jcSD’ßIŠæk«;„ó’ð1HË Ýóù‡‡¹©u]&E³¶Ô4«½>þg²H#Ôà*$Tp¾iy!C€àç§Jç,¼)q¦ë:ÖŸ¯ø³V¿ñf§¨Çw(Ž Z)¶“$)$*U×!Lr.zÖ–©Yßx“PЭ$¹0Çmw¬ZÚßÂ$¥¹¸ßš¼x ûÅl3dà/jÙ»lô2Tš´m©rïÁ¾na‚Ë=·6R¬— .$Œ ‡h%¥\©,{)¼ÿâg,~ëº'‡¬ÒM>ÒM3ìñê÷þ^ct(cvÎ äç–89ã×¼Öçóš8à‰ûeY¥ƒq‹iW,l`Œ2¼Uí?öq“ÁÞð¥ª>ÓTµ„<·VÒÌ¿n‹p@YÔüäÀ0ÏA\%ßÁ›|QÒ¬¼/«ý(ÝÜ[êXd¼¾ŒŒÇ ˆÈØ2Àc>Õ×þÍ?ï|s,šŒn ­ú‰ ±¾@RR¬Á,@þðÇéÉMS¼ۣͲ„¹Z·™á> Ïð¢ãN”½·½óÖÐyM$…2ä…,»d…e­oÙ7Åw^ý§<+ª.-™.Í»+F_o™,dß½òx¯¤‡ìÏ{ðîÞéuv_hžÓã·µ·”e.c2’‡ÊÑ  ÙôÇ¡W?b¶Œ­Ëù™'Ì·.ˆ¯Ž¿òÐqšó/Ø‚}z/ž!ÒuÖóu=tóam;I Z,-#J©.pÉä¶I@ÎkÖ?hï…zv½ðóB×§Óõë¯/Rµ³ÑãÓî&i/ôèÖKa$³’hÂ2¶ñž¢¼[ö?øÕs•«Áã_¶i¾&ðÜmý¤óCI¡fÙûÓŒ,Š­°Çï3ƒœW¥ \Ô%£Êsö„å¢<ÓâŸÅ ïüA¹Ò¾#Æ×z/†îäÕ£¶‰Œ1"²¬qFŽßp' 9oœvôŸ~×Zޝ}©OãMQå–KíYtÈ`ó-Õ–ÖpFæýÞLžy·ƒ~Ñ–šÖ‡6¼Þ)’ ¡ñUÅ«ZL· qÍ¥¼ËwnU±ÈWÈߎj¿ÃÿˆT¾×m™S@Õu+I±w m,¥\01,£,A Áàq^Œ0Ñ©E{·9*âyjó'¡ïÿ³>‰i«þÖúmŸå‡P¹Ôn¯µF9áh•–Ê?6Þ-û@‰í8ã!¦sZ·‡Æ¯üNñæ‘áÍ$¥7Ó)  ñ´ˆV<îÀT.F?„äתü7Ö4ï|{ÓßÄGý©ÍåÝÝÄjÂ8f³m±@¥‹n,îÄ‘ü!qÅpZÇÀ¿xú{½e/MµÆ£gvº{ÚX»]­ÕØhÚä#œnŽÝÙÛj)vq W™)EÕ‹kE÷¬#ÍYîxü§Á¥ÿÄ|@ŠÒ ­-a¾ò­mܪÉ4H¾_-_bç=ˆõ5Þøßölºø·ñ¢o|j×íaÖ’Ê6ŸJÓbÀ´X“qC;apymʸ¸ãý[ðà ø/áM ᶨØÜ¾“`tØí&xæ’+xÐy“É!]€~eäÝúÕOº7‚åÔïSWX¦Ô“#Ž=ó¾ö‘“‚IÜs´ ôµ\ÆN·<´²Ó¡Ç<}ƒ„ÕîüÏ·¶Ð4+Ĺ×ÒÞ÷ÁÑ\[ͤµ¥šÇ4Íy•8* Êá£U'’2[ŸsýœüS¦YþÊ>#Ñt{Ûoø—RP³M-6¼U†ð‘¬Q±AùÁ9¯š5/ ?„ì¼C¦Å>£­ÚøFõ®tIÄ".èn5®ì}¡bx”#:1Ùü#ø§«hš§ˆü=«Ýk>!ñ?—<Þyʦ×Sä`©œ÷N3Ö¶š”àÚg•F•KÉhïÚ+À>Ôô{M6âöëS¶žòêymì®ÄPßL¯ûÐòòdXÎì¡8CǃX á›KOÞÏá«m4´‘¾‚Ë(tBNùfr ?7Ä`À¯>øðÿXÐæÃQ’æûKK›•cFî ‰Ù°°òIÏ®IÅv?³OÃØ|&¼:î dÖ5 ¿)"»Ef@\¤Š1‚¡°02sžÕ¥8{:Wr3®çZz“|ø“i©üSÕdñ¬²\¿…¦µÓ­íílC*ÏvåÔ+‚¡öI»yl â¹~з²~Ì2ñoƒîäצ³Õ.ô¥]bÆÚ «{ˆoVÞ)bP»ÚE| ªà•8öч„!Ñ"Ð ±’«I5-fâêÃÏ’[èSà3.Òçk¦OÊA=0kä½Þ‡ðO𦷤kzÕ½…þ¹5ÙWU¾‘ÙÜÂѱY°7eŽr"ªŒV"wFëýš’OVϯ?dOŒ±x–ÂïPÑî-[Ã^¸´›E†W6ÓkÐn.Bc ¼².Ì‚Æ?Nˆ~Ùß±¾­ñ×ÅÞ0ñ÷ÂÛXîÞíRÉlo Ž[ÝßëÚæ TM›¼¿-·L8Û×À>þÒú¿À}oUÓü'jáë›Èo™q)™mçHÒ?1ÆY°¯Ã|¸lc#'íø'ô÷úÞ‡g2!½´ñR˦ ä.o¯å¸¹žèùXb ³o¦Æ˜Š5ré¼M=ºáq4ñ_¸ª¯}Èø‹öeðÿ‰4‰Ö3¥´’izy’iâXo%‘Ë( ’¨²|¹ù‰ Æs_vü;´€øWGÓ¬ám;ö¶6¶\,«† jK¡ùÉbY›®8²¾ü2ӵ߈_|9á-LMGAž×Tºµ³Âµþ›1! ¹ †D™g’˜M ä×¢ø9#Ö5 ++ËëHn&š(Ñ[`œ[6YåWÁØ_€yùqÐRÄc~´ù­ÑuòàVJ)Ý]œ·íámWBѼ)áK9þÁ>%Õ/b(Ë+%ÎO™ó-mÝTŽÌƼîçÇñZ|:×`+mlóg= ÿkÿ‰ßð¶u/x¢Ò{é|Aý™{›§Å]°y_g´AÓPr7¾5“ûBxf_ üµð/Âû ËÉôõ¶Ò£ˆÉ†UYfšIÃRsŒ“ïšç¤’{¶vV’¢öFï…›EÑæÖ5¯Š3¬WZ´qÌÑ€VV²·U‰Q ŒF„€ª¸ä޵•ñâMÇŒ~kB÷L†ëN†EK=2æØ…ŽŒŽMÙód2¿(ìyªþ7¹°_ØøWXiö\Éo¨]Ú Gö8]V<û³|ÎÑÛSö€øá­øÂhž×N»‚håMXÑ#xâiJ‘ƒ$Œàã?6{f·>i&•ßC†”š/x#NЭµ?h÷ÞÕ¬4í*áÖÞy híî$bYNï@Í´)…Æ0j·í ©øÂÛTцŸ›Ô²ºA#X¡@Š›‰‰cˆVRs€1ÜמK¤xÂãÆi¯âí­¥Ai£w ™í¦0H¯äÆŸ•yRÜ“ô­Œ>»ñ’Ýøcáü¶úñ¦½àëMRê5-6ÖÇiËG$j^/,ŸLäX/9¯-ýœ­ÞiÞˆWºåËÙë^YG4ËsȰ4JH›l æÜ•è3P¦ªÓ•¶üÅ%ì¹[Ü©û_kº6áK‹}+GYî㹆Kù-&r鱃¿”O(¦6Ó±­íñE…´1Aœ¶op[Ìê$™^6X”Jù,ßòäóÉæ¹ÏŒWO‰.M¬_f¸ñœ^I@ˆO ÅÜ8årW}k”øIâOâÇ›= ÃÃ]¼’ˆÙÒHöyY!~ET2)îY8êkZQ~ÊÑõ¸ªÔ¼î÷=»YÓ|CðÃÃÓ_I+ªÞ-à€ù…FÕ" ‹Ô·SÒ¸_†¦æ[=>O]jZ̺yT·Óq4ù“²$ÒÀ –U`ıðmxŸ^Öí­/´O‡:ÛÇq:ýš)L‰rè œã®Oäk{GÐ1¬K¨êúP; †úuH£¹*„ 9$•ÆWŒ±ô¬£+EߨI+ì|uñëÀ—Þñn¥«i0ÛXÛÛÜÈË™3$N퀱’ȃ``N2k| ñãhQxO]FE·×|moª»E…þ˾6­¦4*§9Y-åˆd¿{ŒÕí_´oÂ+¯Š¾¾{ËÛÔ<Ï3KQ(̱m1’ÁVÁl|Äž¸¯‰Ò+Ï ø¢ÕäUZ£Ú+Œ¨šÞu• Ä»âSŽãŽõìáÚÅÑå–èó±MÑš¨¶gÔ>7KËßi_õ}'RÒÏ…>"^[^ Y‘OÙ-5h•áƒHc’3‘Â1ÁP¯£>7~Òz/Ɔž‡Ä¯{màÍcSŠþôE<‹¬'û,2ç6òÐôG(Ü‘šøâ/ÆÿxòkÕ×µ™¯áÖõVñ âˆL·³gÌ3«ÈprMzŸìŽºoÄn}/Æz”¶H‰ç˜÷îq¨l„F“‰kãjå[§çÖ½VÚz¾s£e4îÿ{â]•÷Š|!­]Þ¤K=¼Ë%¬Áš9fã.Ä8`¬ üçÆæ¾zð>³wækZºKXf–ÓXŬ+æ[iö–;Ɖ쑂}ªÞ4óx¢ ]fK 7Kšácš$M²Ìãœn#øçãßüwqàXÁM*8u¸äº‘˜üà¬‘Ž¡Œjç®rzàV:³V8h§N.Ks­ýŸãÕº´Ÿí2Í©Í"ÆsXíAXÏUÌŠòÄüÍWþ$}ŸÃZ~/ˆÆýWË–1˜»1fVCœÔ s¹ˆ=ªOÙƶZ»ëÖÒiv(—p½äB|´P<›¼¼´d|ùRyÎ+¾ŸÃZä都n·ÆÂ1,Ø%gP0£•ëžÄð}*jBÕ.ÿ¯.ÄF4ß©áýœo>%]é#ñDS(»¿“SŽ@Ójrª©1E†1ä`oÍ{§Å?Úx_DÖõi kÉ¡±dR˜>ÄêÈãæS•$Ĭv|¼‘Ô’z«Ô²I²Óí„:ö<ðÜXÞgÎRã—·Rܲ¶'n85á´;Ǟ׎´BÝA¬Ãq4aäÞò°$«˜þUEŒ£í –Ê”ðEWÚÉ&ôF’¢œ}¤ºŸ=ÿÂËÔ>5ëú”:¦$–ñ^¾§ÙÃ!2Y˜•~l3¸<×f<7ý‘­Ê4½~;Ë $«oo&™£”‹$oùlÈ6œ’Ùfí€*·…<*ïâLøsmo8²´‚ÍL¨) ™%¹ó˜ïwu’ 8oº@T`Ò£öú›;g[‰®JÀFÉVCómw ±8á@än¯[Ý[- JU[”™«á-b‰&Ô%Y£K67L—Ȧeiª •b22Äú`W%(ÉO±×€ªéóE+Ý}Ç5ðöw_hºNµñRË}éXmçœÊÂož1~™S#aÙCõ¯xñ¯oà9­ñàf²¯t ;/‰òé^ Ñ¥[«×ÎôÐ${X#”lQŸR:sšM;Áº­çÄiu/Y‹yëßÿhJÑÖ÷S–—QxÊ´°ÅOï$ qsæ|Ç©QÁ¯ý½4›¯ür¹‡T´k;x´ô(±¶%ÌŽåÚRÌK9è½Ì(ÕŠ£Ìï%ßî<,Ò¤ªÂré3ô³Åþ,Òí¼M5„ú†“ÌL«og-àNÀüÙ_¼FxR5§oq$v^nø£m³‘˜Ð…%È9Ωê=kñ‹àÅøUñ‡Mñ*Gö“¼ ±«LöÒ󣌶0ÌFâqÅ~¬¯Äïx·áÞ…ýŒº˜ðþ³§¦¡.š[ˆU×z[Í$m€ÌÒn`„”‚NF91˜I`§·túØó°¸¨ã­fºw>øëâ¯øWZ,ú–«½÷ˆuI¢›î¡Ž€ @#œã±ãŠùçK·ºñι–‘¶[Fà+``rrN{¤ûf¨^xÄßqæFì‚}«é?ÙCá‚xsá“j“éæIµb³ÈÇ$Æ rœõÍzx|:ÁÅÕ–¬Îu>µ>U²:ÿ„ú —Á…^)½ðøKËÍ>ÄŸ?ËÉ’g8@§œ…\¾ÕÌø§ãÞ>Ö±±¿ž_&Ûí÷%á†%f Êq¿ñÀæ»ÿ‰>5jº'ý>ÖÄ‹Ûn†pp0¨¼)=Ø×UY¨Âã›üNJO’ó{¶z6¹«'‚u6ÔµiêÆ{Y^Î0¢ ò É*™É<üÄô¦|ø ø——þ-ø”‘kvØ–x`œ:ÛäíýÎ~p{p>œ×áEá9îb¶ž-Z hâ±´šÒ‹(P`ƃ3³ ³tÇ™â«ÍJËáuÔº=íî©«xŠü gŒó,Kyj½ Œž:p+Š0vj/]‰©Y+½ßõ±Ä߉²G㉤²VÒtë[Fû$VÐdÍ#+JÀí‰BçhÀÏa_>Ïãù4Ïêc!My¥µÄÆ6IVBÛ¤#‡'$ úœõˆ4Í?Ä?Þß^(éßi·ÓÜ ®¥`»Dk"œ(zžù¯.ø×{¬]\Ï«ø²çNÐì ¸ò,¬mU£C S¸(þ'*æö=+¿Jj6<úÓ—.¬å~ZÝøÃÄ„ku$· b‰P5ÌkÇ@OOL×SlÞ+ЯÚPjQIóE•º²Mrœ†Øª¤œ`äàð¡­_Ù ÊïÂÿ´íŽ©}–ö¶¶òÍ’G¿ÉF‰Ê° œ±;@ëË~T?iÿj^6øÍâ_xM®ôË}î+2\r¬Wp@ðØvf À Ï\W¡[IÆ +5÷Ñ—³‚j÷0¼câ)|=uiªhú“]Ùêñ!»Âd¶Èû¤•ŸHÁÎqÓ5«àϦ¿{u=„1ò[}4¼F”õA³·åä‚y&¹m+ân£y?ö‰ìúeàQ:¼ÔV^„gû¡›ås^–žðö“­Ý]øjçgÚ¥…ô·…åŠHbùA¼ÁŽì‚ñÒ”Õ£i¡Ò÷ÝÓÐÑðž¡/„µ[mUoÌöq±dÓ§¼(U$‘»²¿6I9àæ¦Ò¡°×²´Ñï´È²5 §B~ÕmäE¡A‘QØ}Á€ÀÚ¹5Ç&´ks©&½îÇñB’Âä_Úè2éãW‘¿Ò…ðº7ýs&;w€N=r¾ñF­ðËÄWº$—:uðˆ´s&cdGÈÇ#Gr zfŸááýBúÇM:‰ð¶­kæN–ìmã´r#lŒ+dË\×#ªxgN2Mªkº†³&œñ‹{8¦Fiíp–²ãgÞÆÞ½€ÕF¢K•ê¾fŒœ¹£¿ä{çÂû ;â-†â-3Ì:¼m¨Û*R«"…ù‚Ÿ‘‰'9À5æ~:Ñ|A©~ÒhÚ5äðØ‹i§¸ÝæÄo»”!~ðU1€ƒÉÏ95söqøÇ'À/ÚÛÜN³Xk1F. ˜Z»3¬NxäŒzþ¯à]Að¯ÆøÚú+›‹¶Yl ÊSÊWBÒóÅ6 ` Ú{šä•¨Usµãgc½8UŠ·Ììø§Ã‰¦]M?‰õu·ò眣ƒvÓ!þ ް[õÍxôª¹)èï}mÛϱî:j‡*ûG‚ÊmWö…Ö|.%ŠêÇÃ%«jO»ËŒ_ήd³WUÈ1"B @›Ú£øÇñ Ïà>aqscÕÖ­¾ÖÃG˜%Ôë8QÏ—´±û£j’Ä mŒÿ±®c‹J³J]_IntöEE,HX´í×%Ac“Üg9â?´ücñx»Æ:“.“m<Öš-¸¶gˆDcåÝXX¶æÁ' œ U§§hõL:¤¹žý‹>ý¸|Uñ ÿÂÞ ðt0jÚ­ü¾£{íi&Ýò­¶ÐJBƒibr9¯m?´U©Ð­Èûfµ©Z¤Ÿjû%«4°H’²ºmÚÚÈpÇÀ>†¾O³²Ô?fŸ…V_†îÔjÞ!yÖê@‚;»ˆ†#Ž8±Ë&pO*3Ó5kÁÓë—ß ì4o˜4«H—ý.! ŠkׂFYùˆ˜ ã“ÓÑž ­ ~ç±:rÝ÷â¿í]oñSÇÚµ—‰4‹†Ñ Çû&[«xÓP³™Ñqö‰:Ê€ù‡aê6üÙñ^8ø ¨Kdëà_²jV”ðÜIq<9ã¸d˜ò±åI—=sê+· Õ(~íY/šgŸŠ¤ë;É]ïÙžI«ø)-5ƒÃi¨]ÞZJÒ4ˆ»‘J+©8ä›8éYž#²»¶ÔHÖæhïcmÌf‘™ã'“¸œàäœû×Óž ѧ½ðýω5k5Õ G[ȦÓã$`nd¸’rN:(=1^iñá]§ŽdÔuï˜çr<ð[ÙÊCåðK¼œúWu!Ûkö(Ó>ž%ùKm{ˆ˜|Ñ1ìjçÜÚºéá*‹\¶ìsUÄ<5X«ß£?TuÍÓÆ iaáÖM6mv©@ìêGV¸›'•9ÙÇ$ªœb¾dÿ‚øŠoéúe„×ò[®Ÿ’Zsƒm fógpÌŸÀ\z×¼éÿm4="Í0«^¹‚Yç+‘*²ª¢ŽPv$“‚káoÚ~Æ÷ã'í ŸqóŸÏg¢lów*Kq}-<…̊ݾVö®¾„tžÑ7ÅN3´RÝŸ ¿ðOoƒ¾+øqðÛÂ+ø“t4 Z{E¼Óá–ØË<‘Ìs L®GDD6Ò HÏíð›[|yÔR+ź·°ƒSž;&{·6Σ­Œ2;à.â7œqŠ:׋´8Üé£ÅÓêq[5½½í„ª X¶Åo6SÊ Ù,_ Ü‚³Óåã*ʬå9+v>ƒF—» {-Ïš>-éˬ~Ömá[?²ÙÍk¨iŸ`Óbvw³„²½ß˜Ä~öIUdQ+«‚yÀÏÑúŸ‰á ¶“HÒ//´»Ë«½CZóíþk©¡‚F’b‡ E±ÙU›9ù¸'ŠÎöc†ëãEψt{‹/ÅÞ ¼´°˜•Õì­¤i®6—Ré"¦@Tã½SSÕt]âìþñ ¼×B-:mAe#”V0ã«LòI„ÉbWž sί´„#ÙÐÃ,;•µ»>v½Ðu]BëG›Â:|v1éésVà1Šx”Cp¬~máb?.x,Øæ¬Ã ë:·Ã}[Iø´ÇIifóeFsö£dÇäfåš>HÏ\×Sñׯ¯á‹Si=ô~k“ *¡–7P#Ä@c†>n1ž8+Ì|Aâÿük»Õ ³¸“E‹PÖf¿¸Ôî-ÞIì,­&·k;x‰ÀP|©œ¾J烑ZÂRœWºy¸š ÉɳÑ4¿ _xï÷ðŒiÐG£hÏŸšª"[™€†0ÅC¸Q–'¯iާ:& ö›‹Øcg |¨Ÿ9›¨Pq\ÇÏXø[GÒ¼)á:ÛJ’ömí¯7¿-tûKJ¶£äI•×å!@À9¼sñ^†#þʼ²ÚY™®U¤’OßJ"Ž/³áAóp ¼Œß^ꟴÅkmEŽ+=(C/ö¤×04HcTrQ²ÙA#¯4áNMst)Ô©%ì×R…­–¯àM%ŸÇž ÕïïtÛ)ì­¤T/¥™äÜþVS.òC±I,`°RKW¥þÊÿ®ü¡Im£[,ž$¿‚çP[¶ÿU¤[]¼%­„Ì̬D¹|’N ª~¾Òàñ$º¶çi4ø’êòI&e¶WýЈ·qo/#,@8ÎáY¿?m Fhô{‡—6ÖBkUÕ§·Žä¼÷ˆ¯æ´{€" ò°à`2Õj®o’=Nì/ehÖ¥?ÚÂçAŒ?جµ‰tkÐ.>ÎÏ#H»9]·³;Ú@Æí ç5Á&™7‡nÚcŠ ©®%šTýP4Û̪VbÙÝÑŽxÆEt?Õ|C¨üÑ|Cñ="‹^Ög}«"ÎG7²È„•‘—ˇïl=Á¯([¹Òÿle5›mrÓHñÌ–ú~…ºí²¹1ïkò!+zor9Àº0›¼GYs%&¬Ï@ñl‹.µý£¡ÍÙIhèûcṲ́|’¡Ç!pAsÈíYú'Àë=cÆþñ,"']4Çä1[dݼq¸ŽgâdÊ0¯”;×MªX­¬)”&[)›ÉŠê$wtLº”àtY˜äg‚+žøQñbtŸ}’H›QÑíZsnŽÃ1,ÂÃÄ@`Cnã$véUgËxœî^ÎK™yžYûHxõ~Mwâoh&{[8à–ßhCs{ug2äKä ÈûÄã Öf©ãûÁàɼ!o6—ªëº¨K),%?oŽ,1I“å€ÊÒå¹pä/Ý5»{ãTý§ü!‡o¦jsͪ@b¹Õ%Qm ‰†x¤Y¢Nv¹™wm-ü8#“YÚ‡Ã_AñMt6¡i°J’^’’»~àÄ͉”g9$í-Ç×J1„T'£õ1­VU_´Š8OŸõÏÚÏâ¡ñ AÕ´ˆ†±s³mB§ÉDBÅÂ…VWÏ9¯Vðÿ€.¾þÌZW‡ôM^/,-þÂ÷^_˜°]£É, /RÏÏPrTÒ|cøüŸ¿gÂ-.õ@ב¨™ ™g’tÈü Æ‘$ÜØÊ©9¹ÏÙGÃ~-ñ_…í,þ/Ý\¼¶ÓÉâ ¹„¬…§ÜѳËÈrì ›q˜Éï¸cU)N“‹²„^‡4çYÆîosÆ´ß:Â_ÍŽ´KèSÿ¢i׋;Éý˜êà¬ÂÇs`ªé"ì*O=Ï­¦ƒ¡~Ðúgˆ~éQ ê¶°ßÉ%¶˜È4[Â^)GPNÜîYCcÖÅŸ xÝ>4_ê>µÈižöàÔ¢7ÑZam¦Ž8ä%eS*Q å¡}Χð{á´2üMŽöñ¼# ¸Ù¢étù#–^>¦å˜¾àh8ç³øŠ2æÖÛ/ò8ÜåÓŽ‡Ñÿ ¼W‡m’ BÎ-jßR³in¤œ,Œ $Dùr;9,Tú׈~Õ¾Ót 9Šj7—zŠtéâŒo‚Ú V†4JËic #.9,HÎkKà×ĤÕü%¦j—ˆ­ãϳO²»3•Yˆ !V ÉÎîƒ#åç5ä?²ž¯áÙ´m>ÿ@}:ëAš@ežÝ‚ÜX³0VY!TË2üà Ûq_Iø HƒGÔ¿´’H>Ãkà1òÑJ3b7rÌN0{(³\X×iÉØ0<Ò’Rz#â݃xT[MRæÖÂÆ6ŠÑÊ¢ZÈJ;2*’• t 95å§Ã(ü+lu]SF¸m6ÏTj¬Ò²Í~¾Qv™zò'šîþ1|JO‡sÛ´YÔ¶&)¬[m°(êHùÜx pMsß~)¥×ÃÝøžh-m5 JóR{ÕÌÆé¢Ä2/ž6LT¼Œtã.PŠåÙž”ªFS”ž½QÑïâÄ‹RÒêmQðЉ³`]fµ™UB‚ƒkFÆ8°1ßÞ¼' º‚äö-¦KfÙæ" GÝçpU [9÷Àùßö?øxºH–úêËì÷~!ñÚ[#»pmî*X[–ÆzuÉ5ôN±©M?‰?³çÑþÓì÷Œ¨ÄAjˆdDx×€]˜Fçž•…ouÙ…8ÍÂ2g}‚-:×SMDkäÉŽIåvF$ ¬H;™I9Èê¥PšCKµŽþÎ[{`g·µ¸ÓòTI3¾ßÜÊ0Î%?( 8Zß×ü#ªXêZm¼–6ÑXÏi Í,…ŒÖsf@$J›@‘·ÍyïÅOCñGÂ/ku|ºqRMÄöÈc–âÎäÉ ¥NH8¥«ò&nÒÔóø«Uñï„´Ÿê×d^ðΨMòÇ-¼RM0}Iå¸ûÑs ÀM¬[T[´€“¶¢B«ÒHÄšø{þ iá¿ø{↙/ÂýJóUÖüIv¸`TŠä(«ŠvK xÈ$°ÎNMzYsO£ÜáÇÉK.èõ­^ïÂpiöúMì_ÚZ<×ɦõ’I!Tù`$ ê¾Uw ~P*o~Å> ƒH×%ðÒ¤}.óì÷¦åšâÜ+¢Ê‹÷w$Šsœs€A«žø¯üýŸìËØè×Þ"Òô¸g•F¢Ñ¾£¨y»^%`Ÿ" ùL{ã#Ï)â޾ øsà߉62èzs\^³4Û\‡[K‹É 6±ØˆÌ'*>`©“´“›“mç¹ÍN“4ë-áøŸH~ÍŸm<ãÛÍÅÖòk2xNÏû2KS ¥”Ž!G‚Hãl4Ä,‰Îâ2ä‘Î_í ñ”XèW6Z}­Ö€·s‹[è µO(wmüÖè¥Ø‚¹ìkWà/,¯ôß\x’QfðeÚC-õÜN±êcÉöe‘Ž<@n^À^+Æ¿iÿˆ¶º‡…¬u/]ßÁ5¼My ¬_¸™coߦy;¤u$áâ¹7:¶ŸB*U´,™äß³Ž|Vßnu›ÙþÓg Ã«ÜE<,$U=¼kd±ƒ±\Äî1lžkéÿÚ‹V²ð€üuâÝBëm³é)á«Y •ã•&¹’$'ÎLÒ%pì¶ '§ û5øoCøKw¬"º3kõýõ„j„£Ú’’ù¦Fá¼ÇÏ9åŽ:}&Ö$ý¦~Íow&•-­Ž¢×q,m™n â¬B0|± ³ç“»µi³©´H¼¶¢?3Üà¾(\­Î§q£h–÷ö×vZr]éz–íÊÖ©»ctÄ@º¹³•L÷àšo‹-~ |1¼½ðž©©ÿÂU¥ÁýžÆÉ‚jv–A'’r¹‘˜:œUN0kéߎw33V†k‰íR‚éždØZÖI7m؇?*‡|º7tàWÌÿ²‡ôÏ üvÖ§³•/íî¬ÜÅÕ|Ü1qЩ’0:ä Þæºð¶p”›Ûc‡Õâãßð>…ÐF0¨#C‘ÎqÇ^qÎ+×þhš-þ»­x¦=FÓWO¨]]ÕÝedè-àˆ[€Øb˜$0ÝÀ\iÒ«%æÕÍ)Q–.ÔÛ²?-~0ü<Õ¼+ãk«GJ½Óá»+siÒ‚dÔ4L]~R ò1ëÓ9¯«`ÿŒ’®°‹ÂööÓë¹™®¬“q4LÀ›•ù—`mûIÎ3lš»ñÏâ-†˜o2Û»·Ì]ió‚P^v *˜™Ó{¥cÔÄâ°^Õw¹õn·ðÚ/~ Ó´»øG5ŸZÁn÷æa·NŠÏš 0¿Ìy(3[8ˆ\;^M ñ±’ÚÝ"–#æJV&fyeÚ0¾iœð+‹ýš~$êßÿe-BËÃQiúž¯ý‘ý™p/ö3Msñ-»Js¸£±Y<²ƒ]w…Þã]?Ã^f.äk‹éaRD>â2¨Águfñ²3ÐjT:ŽèsF¿´£‹^æ7ÃØîüu­K{­}žÖAµébB¯ÈdP€ÌÉn‘©^2ʼnÆ+Æ_ 5Œ^,±Õ4É¿â˜ðÝןc è$‹•Vƒ»‚œÄôÇ£ |8›Ã^´¼Õ†”níá2ÝYÑŒÇ €‡—Ú `ç±Ä~Ö¿¯¼7à[í?Ãëoç­›ø{P0òa»ïY•ó…Æìt#&“«j‰SÕ…,êBS·ºpßmõ‹‰zn‘á¹næÕæµÄöÒH<¸$lÈ›?öË09lô¢f€ðü.ÑæñŸÆ %¸eÑÖõ ñ‰­£Ç0«В>Sžy'kƒøñÒÓâW‰ü¦i¾[Fn ½ÔãµEºš4õžf3}æ`å' „k´øŸñ]´ø]¦ÞxMa¡fÉl„Þ¼";xd9›jä)À·SÍеîZ³î8S§7±Z~§Í_>,ê~1ý¤¾Ùá{[ÝElµ©F—ɶæòòå^Iq»*¤®üʪž‚¯èžñ?ÿˆš6·âd¾Ð´S=µ­Ó›ˆ„.“ºÆÁFæÚAåºã<Œæ¹¯‚žñßÅÍ2ûųéëªx“M–ù'ºWžçð Y„¯ï^7XÔrpã8ɯwðÖá½K}"Ýï5[›[)u;«™gÞÊ8 ¸ÿT™B¨T8®¹MPŒiÅtõ<é¹WœÜ™Ÿû@ék5½ãÜ=†—¤_D²Lm ×o+f  ù[IIëÇaQ|:ø»¤hž%}7úzMŒ½Æ­~Š“j³—m¡a nbó¹ˆ qšÁø…ñZëǾÕ|;gj³]Y›iX£»Ø–\€ ìÏÉ Qœ æþK6§esˆ´ÝgV“F™¾ÏoöO)nñóžUù~|®Þ[ ;Ò§Fðiì)Ô|Êç¼/Å›Á³øJÂ!4«$Œa¶X̬¼Ì«¸ŒÄ(ô­p~*øqâmOÀ¶3EæMâ-Qå¿Q+ù d ˆÚFsòF¥”ô^•eá]CRЈõM#E½ž8¡¹¶…Ð$cå"8¼¯”cÈ ±äúUOˆº·„|=ãk3âÉu]VÚÖÙÞ;x¼Ï+vÐ¥ädÂ0ÛrÌ@9Âä×49iÊÑZšÝÏR›|Ön­<Ãy§Ü $‚5™ÂG§Í#°\Ê]º(ÀÇSÍyOÅOØãKñÆ›=çˆf>½³™ÄšÓÆ¢Þèc n–À‚@lÞٮß@ý§‰±#Â~»<‰iio 2ÍóÆeŒ•l*©L±f#sŽ+3Ç?§Õ5«Ÿ É,Pj–}­åü¦,Á ÜÛ^IÂ;ÆÍž2+zU+Óžš39Å8ê´>4ø‡ðÐø;X’Êö@æ(¿sp"xÒãHVä §àR¿Õ-mün¥rÍilÑÈc!Ý~ø`Ã0Ï¡5õí-rØÜY#’¡Hä Z–Óâ‡|ami=¬Ëy>¢âÕ‘„bDf#Ó€Gñãùb¾B¤¤¯5‘îáù\!O›TZø™ãû³á¸ãòÒÒËÃ0Á+—í€(¤»àú úÖì¬n¼MáëS]±G¸žîlŠçï(QÇs‘÷«{Å>“ÆÚTA$´´¶ŠÝ~Ò-œ…vA‚0øÜ{äõ"¶¾økNð†‘o§<¢ñ®á/Iâã'¦ §qÁ÷¬”£--Ïb²s­ºu: k¶kâ1¤\LZ2V=¡™:ªœòp铎i5ûø¿´.ŸO²ðÆä4†BŠì˜z€ÜyÀ¥µ»øsF”y3³4²7ú"‡eà’¹!rØê;W3§xÚ+»ëƒ{,lÞ[‘ÆDb$r€IÏ'i.Ü㌵˭ÙÛ‰‡5;_FWÖ¼)cªøu­|=< q¨Ëo,Í3î[r“+;¯NÊ@=ÍxGÅëOâ¯Æ3N–ÒÙôÍ'ÎÖWP Id‰Õ%E9ÜÂBÝp<¶æ»í+â æ³âãRûÝž¡n÷w ‘#·É.0¹ùÙO8\ãƒß›}ß|Pµ¸Ñg’ÊçJVŽÚßÊÁ à¡óø~û óéŠô°ë–Wgˆ• àz‡Â¿ëPèM¨x¢{h4ûQ?œ%C± ^K˜±ÏuÞñÄ›Í^ñ–6/ï!†d•I3@I*ù€î%TyjúzÖ…§Äáà‡º„UäVßbW‘g6‚â@ÑÄ …]ßëK;üÄ6Á´IãÂ|1­ÿÂ5á_j¾8’òâûÄz}Ød¤[Ÿ-¬’¨PdÚr[’FHÍ©U¼—ü9ч§N„"­ï6s–:¦µ¤x‹[Õu}Râî÷B»ÔmËM4ª°Rá29 µäVàœn5™¥è?³ý……Íí…·¹vçäÔ!¶8ØŽ™;îÉë^'û=xVoü1×uŸˆ—6š„õ»yuY¯.ä%Ú1‘$²8&7uBp§•À{z׋þ*á궃Áúf›w6«Ÿc»½Þ“¢˜™„«®cEgã· ÆzÕiZj+§b°ÉÔs›Z6|ÿðÖÖâ÷GÕ®¯HX´»[4¶…ót—w Ëç78$cqŠËÆHØ\|5µÒb°ðÞ”×óßÞ[­ª˜îËïeæI‹ígEÈÏ æ¦øâ/|Hý£>&èw¯¥Ü%˜R¶-þʺ|>DIä²1/æ´ŠJ=™XŒ^Ûá‡|9a=¼ iw3àËuå(Ÿ Ÿ/{À’Ké]U+û=^‡“<,YBÙ˜¿>éŸ|:‘xrÖ ÝBûË·…CMƒ… ¹ü'¢ÖÇßÚbßÁ~֛âêK b7ñX°7wn[[X˜’7M*• ü 1às]>±ãK'ñmÖ·"Cm YÇu$í½#*ªÊF<§ÜÙT³¨cŽ™ð„>½øƒáKMCÃê ý©­KRº»²hžsµÑI.»R1G³ —'Ö²¤•{ÎfÓ¤ðŠß>‡¤ø»ã†·ïÄidŽâ TŽkxØ4P6Cù`“·l’ØçÛÔâð‡‰õ‹e7Z»±cƒ v…"P1Â/B1€ Ï5Øø'E‹ÃÛmbœ‘æ(‹ñ9?/òMj]kúvh°Í*ór üªänÁa‘»$uüjgU?v(Æå/~«Ðó›ßE5Õ¿ƒm&Ó¡‚@g¿œækÕQ:9Á$u÷¬Ÿˆž'ÔtŸÚIáùon$ŠA ©•IW™LyŽ3ò (2xœW¦Üx¾ ^Þ[9ö‹ys«‚rsŽsøñÈ5ÈêV-ž•n,&´XÚä4EάêwŒŽ ü}¹©SM«£xJ+øks7QñËxá.©qð²Þ='_kB.¯v*µÜÊÍ3ÈÙÛó#(Lvu¯–¾"~È^ øãàMoÆ_uäÒ®ílç½keƒíòÜy#qÞUÆÅÎ@<œœçé'm7U¶¿µñd“´Ó^…Œ´ŽuÄfe‰FW(ZBX‚GÍõ­¿ƒŸ bøÃà_ÏáT¼ÑmuS5Öª$aoVtž 㵟áÿ y.‹fd–4Y¤8Uxç_|Ð!Ñ~ ÿÂCñ;ìú5ªX$(“\¶.>]¤¨Î2HéÓŽ¼×Ì_²ÇÃYá}é_ˆá¶¶]«w3^cŽ À—<õãprGjúþ oñ?øM´MÂ7)ÿô-o …ÌŠÀ´¸lð=«ÍÍqZÒÃÓÕÉïÙ– éÓuêuÒÇ`Ú—®hñr^ KP¿Òd†Þ „$›‰×ûŠyŽ*¾“®ex*ûN¼¼{j{?!eµ\;NeRIã÷iŽ=…y/ìïñÇá§Ã{Æÿ¯§¸¶ÓJèúfœrÞ}Ó€ûÆNb`ƒõ­ ãôšˆ51¥ªßß­íº+︸‚yr`¸ƒÕkÈ©E©J _óíþg£íR³¾Š6ž(°ø{âígF²¾Šv·µ2jW¬|Ô¶—i+oŽwî뎦º áý·‰£ÓµÀ|qÖôŠº•­Í¬:Ô62™&_³²y»¸/R -Èë]쿳N•ñ'D²Ö%ÖtxM刼:|×,—®ì 0XÆNIáãøMW@½¼YP\2Ik¤%¨ 3ÝUó‘¤Ç™´/ÿv7Ò”]:mkv‡*r©¤´ààð§„o¼K4Wö­ ²#£±`P‘´‘Œ(UÀäœp;×qâ‡Ú%‡Â½k[Ó4¥Ö¦¸¿7±5ÔªÉæË‰&$ýи\–ãZÇÓ4KÏøE5à€o\;šqqŸå@2ÒNœHùPÛFFz1Y¿lu¿Šß´ÀJÖº˜Í‘–òƒk»œ“–‡SJ£uïøô&Qµãë¹ãž&ð…ŸÃ-cû T´2Oyi ÄȪ\¯ž3ß¾I#9­[½gÜÙërÝ6«¤²An÷œFPd„²ˆÁï´…¯[ðOÀíÇÀ¶QxƒQMZçQ‚+x`´ˆ9€ 8|rsŽØëÍqŸþi¾ Ö¬ìßû fs(tYØ2R°rb Ä0“žN+gˆ„š¦Û¿s(áçÍ*ö]/Æ ŸU·!ººÓü¿0iZš\f™¡‡j–$œ`ôô« ñ õÇûV¹¨Ãygk—¶Õˆ ò/Í&Âï‘Üœæ©xVá>ø’Î{XµFÞù„3\Å, hÌæ‰6’ëòçq;v’9<שxÓÅú,Údiãyôy­^)¥‚ ü·7M³÷e…*Tä»$g¥MF¢ôW]Í)r¥võ8OÚ«ië{¥fòÖVÚ#‹uÄs;^WŒñ= rÆâÇD¼ñe—Û´˜ŽÌxUÀ$7AÀõ¯aÿ„úmdéº|º¢;Ä'ŸÍ1-Ü~V ÅÊ€AV÷>´¾&è>Ò¬š÷OÔ^+ç‘ÖÄYêa‚9#÷ŠŽ 3ç$üÙæ²…NF”–ãœÕâìx Þîñ}Þ¡}¥[K§DÒ[=­Š›u‰ˆ8tN¿!#¯ÐŠö…^>[¯'ü#~§5Æ’^[Íø™'…Æw©ÁµÛ¿BqžÜF«ð§_СˆÙHÚ»ß<·7ÜØÉi(r{ÌÌb•vFÜ`ç$çïÃ/ø·ÁzN¡¨ØCy¥ë©±£´ó -ÄeÆå*II € ã'g5ÙQƤ-u§™ÏMJ›´“>–øÙd5ïÙ[Cðï€î¼¸µ™ì§Ô§)¾hc²! µqÕp±+“÷@-žMRÒ4sð§ÈÓ´Ý"ÒëÄz†ÿ="ÎÛÊ–ÎÛò䓃Ÿ›öÈ]Ø®öý¤®üM¨ xɲ5;©ä•Úæ ƒÊä•‹w rÜÆÕ#$ž=wDZG÷ÇG¹hu­~â5ByY®f°‘²Õ€È&@F|ˆsÆExsÃÊ„œß_ëÈúÆ×<™Ïø‘ôoƒ¦æûDzZÜjúœíus;–dݱSc|Ã3H‰*fä óø,_ã.³i«üN×R &×}êéåM½µ¥¹f˜-G “Œg“R|@¸³Ôü)¤Ú*+¥K4ò¹AåÍòÈÒ9/#]Äžúе®Cª?„5›V¿‰î’ÚMbßO°™¢CQ³àeµ%CÁ5TéªJïëc*؉֕úß|s£øŸÆð¾ˆ÷:¹Õuk(fXÁ%²H¾Y‘²pì…N-ÏꬼQâ_jÚü#–: _bHÖá®ëÊvÈÚü—Þûˆ.¦rk˾y ~2xgSðæ©oæÚÜ#ëKe$Ë Ç½7º¤›€U ~GПþ*k(Ó>ѢϢZZ\]Å-È6­5Æ¢‰‡ –Ä!ߟ‘÷‡^C¯/eÊ©õêmB T¥R÷‘ò×íW®/ÄŸ ÚéZsI ¦ƒ² .öeÙ¤‘"¤cq Ù6Gñt²>ø3P¹ð%ï…ôeÓHº¸ûQ’ö77Ò,%†Ü“•Û$a€b­ÞµK[ð½Î»ñ{-Fþ8¬cWÔp0E]ªRü`—Ú8%†r2hð6¿yâÚizêɧOu§›ÍÖÇìéc’’³HmÒH$cÏ@IÁ&½ÁÆŠŒv<˜U’¨æ÷g‘ßøÃ^ðÓlÐîuM:;äŠê[pϘ®LrqŒãs`Ž ‘ÏJï> ~Ñë^/´?¼›_2]ÒÞCdžsp@,¹çsÏ5ÎèúM§‹.ákK³zcÌÃq7–B†81yR2ps>2ðMÖ…q;iÐËsm ”€±„ŽÌ8®õN,–§/µœe̵GÔVž,Õ¼YákëdÓ?µŒ6Ñ\EÄ‚K‡yZ6XÞ2<åÚÉƒË Ç8Åfø¯OÒ¾!G§'ììéÇ7Ê"CkÈ ¦G'90¤õ¯ øMñj÷Ã7qˆî亇O&î+I‰P³ýÜ…çx*X2Œdj÷ükðWŠuÿëž5mb´×lÌa—d|èÝpâ6VÆÐ7«¨#+šá«BXy{§uQÅCMcÆ|máY¼Sâ_¶iWŒ°¶ä/4÷ÓÙJ®â †ã…c×¾*§ƒüIªü:Ôö‡w-¤ÒEå¸^áOUe<85è¿åÐôïjv¾Ô—T´½„[ÇrÖ¦47VŽ<à SáÈÆk[ÚAñ&Žúñ-íÅÍ’%¼±Sr4d¬Í¿/2s] ·î×2Ðåú´á'Êq Ô,~/Þ^ø‹ÄúeŒ¯$p݉.b·{‰B¢¸Ã`F7 Œ Î:×1ñ£áÜ^ñ–³ca/Úôí:qwÑe*ØØÛ—å$†#Œƒ^Ïâ/„w´{Èü)k"ÜêQ\ .eM²Ûy %'÷˜—t¹`p¯ñ>‹'-õ¿ øÏNµ5­Ð90J 8xÜpU•+Žr:Yáæ•OqéØÞ¼y©«­m¿™ö§ÀÙ~ѹÂv6Ún³gpÏg,ÇȈ0Ú&¡ Ž9Ïj‡Áÿ„6^9ý»¼7¦x†K-;¾´¯õ›‡Áà]¦úU.Â{-|ñûëÿñw4‘w7––¢Y•^%IÙ ÈÜxCÃWÖß|ýçÄwñ-Ä·~ԵȯâB…ÞÊ?ìøãHpÙqæn89!Fx®\]5…©.W¥¿2ðÓöÊ’:ÿ†ß´¯‡¼oñ·áΑ¦Ë¥·ƒüCk5Ä:”÷±=ÝäÒ-ËCrù8Mû"Q\8-Šôx_ñ—Š4]ÁºãYèɨK¨x“QšçjÈÅLðÛD `6æŒmS’­“œW ûþÊZgÆO0üTñE…Ìè³të‹V‰§XÄ‚d‡Ìw;˜=î+íû?‡»¤µ²¿1K¨þl?ãÝÙB£”m ¨Ýy%ñÎ|ö1”ãɽµõ>·/¥ûŸÞuùæ»q£ÉáË‹¥[8¼Vˆ‘Üêwe‰²·eé8nà23“’:V'ìá׌uj=6ÎóQK%I£Õ5•Ñ$}îÑÆ®IʨŒä0ãšæ>#Þ‰¢iÁ‚óW„\ÝÜÛO <Ñå¹ê¦>‡’pp3Š›_ø£ïÅå]]íÛ ÂÒ2v\ÎÊŠ“)B_ï”ð8<.k†M6úèwÔ]QoÄnüM7ˆ¾+ÜY®·±Óld]_Y–¾Én¬–oN]’1’ ÉìkÉ|sã/ÇõOŽmSþÏeÔ-–XcØÏµáöœÈ@ùJž¸­ ½´œSÐâÄ_ ”’Üôß u¯ˆß µ4½­®±®ë}ÕÝûGö—ŽÔÝNà>Î…È['kؼU©^ë>Ôô¿€öÖVÚ߉î#±±òHxtëHËD%HÐ|©·÷™'œçŒxGÃÿŒi:½†Š^Úýïš+_"ŒßfidòÃ11ËloáG~5ïmõŸx‚k-t´]ZÎmNÂ,„hi!ò@eÝo bûþr¹À©©N6f¸jòÄieæÌ/êžðÏ„¼=á_ kÖ÷:e•½ªµíØ·Á"CNË’^M¥ÇÌg>µò΃à+‹ÏŒñiú]Í¢êº ¾©`—7åŠ×Pòæ–?+',²YCq…l0+í=VmoVÖnu}:ʰWjmÄ«0*ÑeX.¹Mì™Îìtïâ_t}3Úí”>(Ò¬‡ˆ5ÝVðÍuh¿è¶ðÀ¹ˆÎÎHy {Bu9Æ1•Ë&úžŒÛƒ÷އâà |A¥^éVö³ivzÖ’‹=ÓÏö«¹¥ó¢ŠžW$!`óåBüª™\p+Žñƒ.gŸ…ÖçFÑ®¼K'‡¯â¿ŽIîísÏܯ˜á™²•,Jí|iàÝ[Ç^:°—^þÒÓô¤¹K Ô°·FM­(°ñÂ.6>yTðTW›~Þ^9ÐåÖµ=+অt÷Ö~‚îîI ¨¼±a ÛÅh7Jñ´cyƒ-‚7ØNRºO©Ï8ûUîÿÁ=?à§Ç¹>"¥Ýç‡RÎ&³Ñ ½•š6g¶¹».V">RD)‘¶žKç8â¾UñO&ø=ãMSVø­{szßt¹\j1@˵ÐwYlå1’còÜE$d‘»#å$ÕýŒ|mã­/WÖ|#r±¢ê¶2j^Ô¡œ½½Œ±$³¤hávÈYAÉpÉ$Ögíy¡´÷—z|N ±šSªk:¸GŠ#™§t‘„;‘IS‚ådV·Š>èÞ"ðúëÞ9Ò´›Ë-æx¬¡º…îmãŒ1ŒáX—Íq'<¿¥'ÂX4/‡¿¤Ñþi’ø¯ÆZ÷ˆ!k (¬Õ,ìfÜ‹%åÇΪ°B’°XÓæ;:ÍÕç§Êõ³JZY3KÅôŸ|8ðM§ƒ´»­cPŠ4¾¢Á…”6†–ïÎÒ|†y™TW=üÇ>&×?h¯ŽwúΞבøcTµ@’Z­ÄŸ<ÀY¾@! 'råT€rF}Ÿöµø‹áφ³œžžWxïô·Òã³Q4I©Ãd˜·óf‹&8æÝÊã Jáp~fý™—Æ>xŸÆšu܃@ðÍͺ^Ø ÉUæŽî'Rв¶Ð#G 䃸ã¨ëÁ¥(ʧ^—8q3nJ›Öþ‡ ãXáæ­á›Ÿ‡úá‡WÕo. x“Ë} }¡b·gsà RV”€S IÁ­_ǬëSÉâëûiõ‘«Üøfh­n|ÿ´MjŠÆXÝ~WŠA*•Ç\äpxéü3û>Åà>]â|ú%ðñ%¯Ø´×µ¹;lu\BX¨ÊÄÑ¿`ÊC®3ƒ^+kâ‹?_f×MÖË;WY[sDø FŸ¼00xìÒ^Õ[wÜàªåNJOc§ø‰‰ÿeϊͣ隬¶©R_-ÓI pa™x×hÜ„7)ÉÏe|ý¯<ñSöuðÿ€>,O¯ÙxîúÖÛN“W†@Ðë—ïqµ# mba ÜÌB“•$ägái?ð’ø}¯5ë© õ‹©™¥v–Yw0¹˜–$rI'Ö>©§ÙmÎ3µÔNs“€˜û¸?ç¥g[e4¥º{£ŸëÃUæŽÌýgø¯<~*ñüºF¥aí§Ëf–Xí^6`Ý#cå?;sÅsÚÔmsâï éÿ~kM#Nµ¸†db÷FF3Ï"œäòdp\q_<þÇÿ´Í·‰´M+FÖçžïÆÞ `<½Ëu˜>só0MªFÌsÒ¾Ö¾ø_}ñ?âý¦¥y`Ñi¶d[Ú˜!Ô˜Š “ñþïœq‚sÁ¯›ÄPxYÚ{#èpU.7[³Ð¾x2òO„þä·:.¯-¬Sý¨ïy_6B?¼1¿' cwNk­ø}ñü®ÚZü9Ž)41·:•Ê0P·’LcU’\ç³¹Ï÷—Œã[źMÃ}œéWj.®öØ*” ž^ݬЦv‚ÿ8*£1ÀÊxTèsx²ÃÃ~ûu†ˆ–;ùD’-ò²¹;ƒíÉÚã×™*³>†Îü’=Kâ…~Ûg9º™oãŽÖ;X~p£Ï·nãN1ô¯ñŠÚúòÌÚIž ˆ¤ª¾k`‡À•ÎAùF3ÏS]§"üpÐ4_;Sðô^xuv•Žø7î~Ìc ®õó 3d M|Ùñïþ ãâ ãÆ•­x>ÖËLðo‡æµŽßϸ\yŸk7O*¸XF#8Å}á­Jx—Å–~°.5»c«~#€°€KT¶_á\Iþöö$w§üpø¹áý¿iÔõ¶°º½Ý•ˆFg¸¹òÁkqe™£Þ3Øäd ë£Z¥ ^žærJQq’>uý¤jßkÖÚþào ]èUÝÖ›¦Zø’Xš8HšîæË()ÞÙÁ#ŒƒÓ?(ü]ñü¦jvšf¹u¬E"ýŽÒY£’b•Š_F¤á76à˜ÏÉŽE{ïĈ·ºÄyþ|r½Š÷Fñý½ÏÚ'i šËO‰O•nÊø1ÈfÿIV$ò«/¯•<ð›ZÒüAÕ,®í´çŽX4{©›){c²y2e“i qÀ+ÝÀaã6­úžFaˆ”Ó³Û¡ö_ì%ûI_þÑ¿dðˆMÝ爴 —¿luUÅ¡›n >fòƒhÈy䃶—Çß i7útpxÈ&¡âû»÷Ñ4è§"K›ç†âkxV`[Ê@ÀGÀŽ ½:ùìq£^ü<ðÅmOKZUæ™§hóKrRD¸fR¤pÆxØÊ'–S‘ÎWœL׉àÏh?Û¶ðk:¿…K(á¼¹hþÇq"È„|yoóȨÀ–Àè®XŠQŽ%ºOC,ß°J¢<ögø÷ãí\Xi:Tú¦·mÚ¼KoæÏoùHI&ŸS€¯Ñ_ƒ l~ø@i {¥µg»V‚2G–Éd>¤³““¸“Ö¾0ÿ‚bø?KÑ|_ãkUs”ÃGŽ]®.m–iYdh“‡Ü‘®Óƒ±‹ô'Ÿ±5OˆZ®àytøž;ŸG,¦á !£³…™¡L¤ª²nOÊG^j3WÉF*Û MÅ6ÕþGÌß´Œµ câ‹gÓ.g‚/è×776Á¶DÇ :ò]‰fÇ ŒØä±¯Ææñ—Œu +ÅÍašåªZB±ÆVi° ¬ŠÉØÝøŸzâÿjO^Âi®kmÕÕ´zìÒi×vaœ." Ù<(¸ yÉÎgìáˆ.uSÄ:ñÛg£Úͪù—P’?Ü®S6âOŒñ‘^† £‡n]Ž]iJ¼`·LúïÃ:™Ñ¼s­i÷­¼Z+_ÜÁXæ¼ È‘À¢R7–m„¾vª©9Î1½ð/ãî¡sáY4/è±ëzNË;Éì/¶“KŽYsò‚!qœóY>Ñ,#Õ`¾7°]Íso-•ô· ûËhfEòÄx_-›!$là*ã&º?éRßøº8tËÓŽ£m¦Ëo;nYíe`ï øWNø5á94¹­u˜¡ mr–q²»Lãæ’@ÇïFÑòí\Z÷°Õ#C’Zô>w0R«Š»zXôßø&ï?áp|_Zêúv…«ø>â,îò†`RåbV@a‘•ƒž@”2á¹5ÅÁZ?g=gÄ:M§Œ|¥¬)kv±^Â# 1GÌa™Ár¸RC|Ü Cð”h¶ß´Åµµ£$¢úÜÝËH%„ÜYJ¥Ú ¢bÁ\²+,‹…m„ásÏIû[ü`)ñUt E5攺L—V‘Eùi’tVyd-óŒpNH$ÇZòj)RÆ*´Öúù– p«‡ 앾G•Á(ü+qiᯊ:þ¨Œ–³èújyœ$w1›©$Ÿ-á'Ðc¯J÷ïèÚ Wóêð5橬/Ù#´·Œ±l ã’XÈw£Œö¯/ý˜?jÏ\ø OðO‚4‹Y¼o=å–tƱxG$’mùT@UÎT@ ϪØj„_ü3u«Ù‹{‹©•‘[ÌYc¶í/"€0@H\]êz éÆÊujº’? £*QwIêdx×âÖ·¡üf²ð_‚íÍŽáïQ×o!Ey..Õ¢¶µµŠVEÚn2¡XŒ)ÈèbµƒÁ?<'{¥ëð6kRÞóP¸º±`µ²È“ò³ #9É*H”ì¥Ó¯>)xŽûì·S_]I2ž\*nyö‘—g¸™† mUÎV/Ä?é^ðÝ凂gÑåKH,­ã1e ’ÅÃe_;q鎭œW,i­/¹Û:î”`íoöl[›¯ˆºÞ‰ð÷DÒìït+¹´ð°EåA¦ÚL#vù¶æGc féÛ©ŸûVkw~øk}¦[êv7±ØêhK¸TÆÞZãG,7‚ì òj·ü¢ÎçNøÛãû lmfðõ”ÒÙÛÈþKKç¾éƒ;ó3.YªäÅiþÔ~6Ò4Øõ­þû^Wº‰±y£ŒÈ¦YeòÕˆFÜHQ´1ëW4Õt–»NjT=óßÁßü]M_Ç÷–7×ϪK-Âè ‹Ê‘9V`ª9PŒ+פү¯¼©êÑiŠQXa\K™dEsÁCœF2ÝÜçó\'Áß‹ž¹Õîgð÷†öø“Ä¿hƒì–Y2E„gÀPÀHÌËÎà×кw‡ôÍ">h\Ù¤%U­–_4œ’>öˆçhWv*m4åÉ£kÊÏSÉà¥ïÃÖÒ!ñ/ˆOï%¸ÕµÛc$qCöfŸÎx ™U³gŒ¯"»=qìoµ ^xrÖ%Ѧ’{É ]­Â£Hа…|…$* õæ¬þÑ>1ñ>‰à ­?á熟]]^ýƒ÷±H»¾XgRÅŸ Ê"þñ¯œí~!x¯Ç’ZøVdÔæñÈm§ÒÛ÷R4ŸpÚäR¡ ( ÁÆIJ++¦¿¯"+µM§mÏ¡?²^}E`K«{ö»Yî!"`Ñ³Æ >$S·ŽÞ8ÇÃþ2kæÂÃTÑï/'šmY4KKdQ³$þPrs™wI(^€|¸ï^õû=|)ðiç·Ôu}Bæé ˆÁ#°œ¡BŒu{×Eã?‚º‹¼S£´Ð[izÎ…,7–Ñ[dX %ãc°ó1É#îúôÊ5£J¦º¤mOÞ¦ï£<¿Jð –©â?i÷úŒú|Âá-ïÃ9·™íš2‰2¡8 1Æ¥dø£öqÖ|³µQQ ±c–=:“€QÕ~#kõÔZu³iÐÉ*Ç(…1:–l(^¼ddí™Ud›q3IÆ[gÃÿ…©àhïõ?´x³\½€··ýÆ•ˆ&ÅÀèrÃ{Œu??~ÖÚ5î—ñ"á‚ê×ïn°Ù¡vË OÞ¹ RçŽ0>¦¾¤ðœv¾.×lt›Y¯­­nç[¤ž)Ú?>HOð–lˆ²ŸwhSƵ|að#IÔûRñe²kÖ–þM…„p4’[ɼ±™ß¿`=r{V´±_W¨¥-LåN5”¢Ï‡ñ­åöœ£T¹º¹šÌJóÌÎÑF8»‰Ú?ÙWÖŸ°çÄûï|#¹¶fF¿ðíÌZuŒÒ1v<¢è˜# &Tqœã=O=~Ô¢ø=ãŸì»x®âd¶IîRGÜcwPJœ¡”dç­{üëXÓ?¶|jðƱñÿOÓ縵û#Ãz”VòO&•-Ê–Ú 2ƒ#»ÊŸ˜äð+Óú*.JÑ$¾fîaãŸ"Ûâ¢]Ïf±”‚;=BH[ie`¬ÉÉáS€xçËkŸ ¼%ð¿TžO‡ñêd]ßIªÞE%ô×-q'– 3±T  Á8ÎiÞ›PÖ-nåÕã´³’ÝÀ‚ $(‘yÝy#¢óõÍ|Lø½§ZêöºvžææeFC(Š4¿!”y„ ÊŠÈ à²q“N—4šŠf˜¶¡Ië¡[ÁÚ&Ÿmâ)íctY㉋ÇãåBÝsœ:` ÖTÖÕ¿ÆO§‡Ýíí´}6Òöp‘)æy[s»t~nx‡SéZ>¹¼´³žæâûEü©k©u Ë?C€Š3×ëZþ³Òoõ¯ëZ½Ýõ¼Emsqç2DK´l ïò”±léŠéRpg‘FÓ‹º½Ù¥§h“éöãxæ¹¶ûís,‚d€4’*gî‡-2$88®óÃ+6† VÚÎO¸Q¯&fŠ  ¨ †ÉÈ`lé:®¢º,:€<áOéºE‰²Ò%ÓÝÕl#pr°@ªª‹ÆY‰$ç¿Bã8Â.1Zùì¿Ì=¬#««-ûú"ÙóösÓ?e? jV׺¥Žµ¯x‡SŽû]Õ.'Ž9%w‘D(r[È\"ªŒff#,k¢ñ7ü?ñ7ÆsϨèFæçÃw8Óî..™—’ ®#RFT±8è1“^e¨xÄ^$Ѭ ’ÞÆÉ-–G»¾mÆk¦ØÄdáÎIË6a£á› K¾ Õ-M7Å s­YëºÅþ£cW ŒÇöaæàF~l.á÷ƒ}àØ+š¥FžªÇ­¾ô·> ÿ‚‚~Æ> ²Öî¼{áK{­WB·…ŸUºž1Ô>ë"¢õ^E|¥àW[oèrÞËv–ºÖŸsqçdBbŠò$ d*ŒG%I­~ÜþÒ^.Õt¿ *Û_Òome¶7ÁBª˜ö*ù€0Çp€Ì1Ær?&?i¯ƒ6ß>4iqéÖÚ¥®£©Ú\}–hŠÍmt„*ee ´‘»Žçšúœ»õšŒ÷¶ž‡›`”ÿÚ)­m©KÀ_tÛM©Ü.¯6·oïÓ䀪™°p¡û7>•§uðâóÅZŠêÞ0Õn¥²ÓlÄóÞÑÛˆLòr29ïõ®óÀþ*ÿ„£Ç u¢Éâ+†‘>Ðê1®ã÷Šmnã'9ö­Ïˆ:lzŒš¬> ¸+§\À-îeKdŽA€XõûÄð2x® µf¹\´—äc(û+r¯tæu/XxëÞ °†;XôÝ^c¬A ˺K„Ö6ªð»ƒU'¦ãž+–ñ¾›sotßìô«ïì¡$ZFTÁ§ÉE1.’1ÎHzô—Çž<·Ðõ{KÍ ®lt{UѬ , ÄB@1þ¬{ž¦¼ßRñ†¢|/}¦“Oyu+Åö†ãÌá˜\¶=ªiÓ”ì×㹕Z¼­ØÑøwž#´¾Óaºkx–PÑù*# äœC‘ôÍOñÛëZE­Ý¬—¯†÷¹—nÛuÈՉ³ZÓø;£Xù0o^ ‹]!ÖKˆ­Ô4÷’Kˆ£D^§–Æz(œk[Ñ´¯x†úͦh-­¯äšé£¸2*ì!4ã xÀÀç»^Õ%±Í$ù¾¬ÑÐ%ƒÅþ]RME¬íJ×$ gÛ*09 a±ë¸“Ö±,´—ÕõK™šQ=¦•kö‹}é´´¥òȹçsÏá^±¡èkâ Þ\êv§GÑ4såÙA8®œ*© åNâpsÐWs{nþ ‹F¸»–âÚ qyÒÉ9#&=Èßw8ÉÈ¢2÷ÚŠ&IBÊFÏÂÝûPðÞ¿®ø´Mk äq­±ŒùQ›·mŒ *Øíƒë\çƒüuâM_O´M%«Ì, ¾7’“MåêÁF{­{Œüa©_iŸeÓN³±±–9–XcŒð¨ª1æ|Ü’:w¯Öñ¤ë—òÇyý§$jÝ:±Ää±}„`|¹'ÔqQ^NÚwº¶Û¡ð#Âú‰¼-sýƒ øµ»ÈB¥S ƒµÉ €»€ùAÆIÀÅ3Añ¬¿ ìom¼e}§hV¯d‰ºâ´Ý™0–8ËõìãX¾6ñ/Šõÿ x[Àÿ ï.-ü9aáhã˜B^Õ.v.æ2Êá´ŽË^#âÏ>—¦Ý/ˆä•õ¸eB#†O2c äJìñ÷AéZˆS•y¾k(þ'MiBŒ}ÕwÜúoö{’ |+¯øÒï^’Þ6ÚX4––6IaûÆY•þê2q‚Ár2¸Íy=þ±7ž?OqoyVIn'¾ s™P Év.TsÄr@®‹áž‡{ñ'á¼>›¨´ñÝè·WŠÀ,¶ÿ(’@¼³ ÷%†OZO þËú-ž¥k¨x½fš¹-q·ˆ¶ ˆ]2ÀžrAÏ %B«”¥nÚà RsŠŒU—ÌòÛÁ/µ(í¬>Çoqþ†cµ ¼‹ò–d\#Ùb|WEâ]]WÃ0irG¥Ø¶{ ÃÜ^¯•så²2*o#W 3Èž‚»ˆ~Ç£Ïe©è:¢xoE¾žîæÜ»ÜI¨…%Dq‚»°HdŽž‡5ÉèSêþ1{Ù|pÃIyÂm&`,ÑÄÌÇ UeÀPvŒc9­yã=cÐÆ*QÑîq¾*ø½â ø’â=JöF¹¹ ûÙco5 à«P1]n‰ñŽŒZ*h áë[ÍBÅšêÝEÁzªfPS…$…Ý“éŽõÊøGV‡âf±"x×K“R¾ºhã·hÙRTDÞÁ²äàü¹É$ÔúÀ›Ë»‹»ÏÇ{mqa4q YJ¹¹£”‘Îå8M¤ûñÎŽ4½ír¨ÖŸ6×^‡´êóü6Ñǃ/…ßöœB[7ŽèÂñKCåÊ ì*K)Æ88®WHñF¯k£^èhо³¥Mr]~Î].çBKÃ*–劲ä9ÅXø1á{\Lpx'ç‚s¬¥BiKUù›Btý¯«ûÏ›'ðf¿eâ½D´Ó%ÓRQ\/–ÍrÑ<¹Ú@¿<¯¸¹j¯$ðM}û?|=Õ<}à{û&û-Ū¹SmjêÂÏ–ó‘xéŒÍyߎ^/]Yx—ûHëéÐß}¶ÖGE´PÏ ÂígS€«Ùv5ïþ ¸¶øáÍB[]JóTžöÒÒêBˆ#™"T.2˜ƒ·ÝA'9¬qU¯FÖ³;°XnY7¼O‚¾%jš¯ƒþ$êN‡ynugÔ¼«†„™ RÅ f•QLœEv·º-„¿‘{ÔW71“!UóÜ®òîSw‚ ä›<šò/‹¾Ö>~Óþ!ЮVH.$Õÿ´!Yd\DnÍ2nÎ0«#÷à.>žýi¬Å©Z_ÿÂ+nÐék ®¢êa-’R¹ ¹db«´Ÿ›§ ת¹•r¾­-Ÿ4ÓZ^ÖÈ-b˜ù6D†m’Ìø]ÛTà œ/lÖ´+ÆO–lä«Fp÷àyÕ—ÂÝgÆz$ºÏ‚¬®/b¶¸Ü5¾È€Á ƒ»8 ð·ðßÅ:%޼öôyÃkhõia¸Ó¤ç Ñ®<ÐTaŸ~1Yžø¯âƒsê?ÙBçJõ–ÉVhš&•âHɆœ:ú‘ô›áÿ‰tMvî{‰’êÑÅ)- ͨI¦/×´¹$¥†[­w8IÝ5§u¹ÉAIrèüÎßPøKzbµÕ< ¨§‰,Fæ‘*OnW³Æ—C/]ØÆEzìñ±o}Ö…¦É,¦å¢i×c Š•q埙qÉÈ9®ÂZ@ø{i«á-_O¼Oiqf“Ë!So,l1¹só@ä§k®ñŸÄVÒµ=~Ú(%m"óMŠ{˜¾t–æX$ Ã7 “3nð1ë\o%ɹèÒŸ.­êiþÓ^>ÖàøãvÞ¶¶Ö¡°¶µ»e¶„fÚIЮØÉÏú²rûÇv3ŠóUðí—ÆÝ:=;@aÕ´à gi#…¤ÃŸqDaÏ# Œ+½Ðu]GTðV•¬xRÈ%î‚.ùâDþÐHäg ˆÔhÕY“‘ž§Œ¿üD³½´ŽãEÔìfÔ¼8^âÎÉì"Šæìí"H^Qþó²³nù€ÍgF>Ê>êÕu*uGiêfø‹ö{¾ø_â»ð ܺïØá[³2¢ù±Z•L 1Á, $túWð⾑û?øëÄú/Œ>Ñ¥Ü\KÒ5©#YVÂd2«K,dŸ•‘âÆÒOlg9ËV®Ö» 4ä–‰3ô£öfñŒp'‚<1aå£h«=൅8º€—qÝòeK猞½ßáõåûÜÚjÞ&$ޏ/$„4’±Àyá0w/Ï5òìóa®ëŸµ¤¶¦ ÷²-¢Z¡ûJ»E m²gaµ|¶.È.äxÁûOS´µÒ,4«/iïz$O.IwÈ`faó)˸1 ä`_+ŒŠ‹º>×'Rš¾½/ñ½Ž™'‹–âþ+y´›˜®UŽRŠíç.Hp VVÊ÷ÀRq^sñZßG‰ü?—qö õk‹{©£P12»2ãûŠv¨sšï>?xé½½‡„®&žòé‚›ˆä-o¦åÄ’±líb6G_œŒs^G7Âè|K&¡¯]ÞͯÜÅgg¦Ç'’ñnbd¸i›ŠÆÞ¼W*wvocєҊ±çúOÀêŸô­cijý¯W´nÓšÍpD‘Ë$`’ávð€çŽ¢Ûã-έã­f[Èf:l—±GgÊ¢ ˆ…Ã`#I2É!*Ê0q^õ¥è1x[Ão6™¢ÙjöÖöí©=ºÉ ˆ±Æ7Jv—+ócqäñ^Wñ/á¼ ¾øÇ[ñÕÌ’ø—KÒåÔÅÄf†Ïìès &6‚ÁÀÜprŽs]tëY¥=z#—šNQ9#Ç6Þ+ÑfÓµKæµm2òêìE§ÄÌc1¨QòÃò>[pþ ž ¯ý ü{á |ñæ¤ê6WÿðÍrÊí=åÜ/X§”|¸xÈRŽ~UÚÀô5­ÿ™Ñçñ§ƒ®¥–gÔõõíZÕã•÷ÇkkD·d/Œù„ñƒ_Qü]µÓôŸ†^'»Õ<9¯g§ˆªÍåܦ aeD– ;.åUV%‹ÙxÞpXjÖµÿ•þþ…æx/ì¯áK`<>ú}•ýÖ»âY~Ûuv'¬R;3üä‚ e„¹s#é½X¼A¡ø‹MÔlÃ:B£_éÁî_UŽ}¢I†äPÀ(b¤Œ ×™é:”‰?†tIä‘nµt+6i'ØžÚYa™<•)µ÷9RxsŠá4ÏÚôÏ[øš\ºÃoÚ˦ê¶ö²—[‘NÅŒ·,4-òçqXØð+J®X‰Z+SŽ›ú¬Z–ˆ÷?Ú_KÓü'ðš}vûX²ÐíLöé5âNa¶¹o¶¾6ØXÑî\qÃ7uÁó¿Ï¯ü5ðÄšÏĹnµKOZžBѨˆÙ²´¥›‚WnÍçîù„ ñ\§ìéã=wö„ý°fñŸ‰/%ŸÁ0ÛZXØL…à¶–êHVÞÆÚÝŽÅ$BV'•\98é쿼a¡i?t#Åz¥–—§^ÚÏbîÖë5Ü“ò,1œî,ɵ]åAl‚EbéûÈÝÛü<ޏÔu ¦ÕŒ?üa´ðãëºo‰µ+}J(Ú(/#±…­,lîeŽ{bC “þ=”²9ÉrÛŽ\òGÇxâæ½m®Çg&«áx“í7̼YÃló,!;ß7kà àd òÚ;➉ðëâGŒümâ;Ké×⯇oõ]E¾$Iˆô[˜m4«·P¸®.¥¸U •®?PÑ[ãÇÛŸË.¡¤Å¢hÃC‚Öáƒ9¥s-ԬіT æ“,¨J€ª0 šè£„U3Û¹|Tpë–Þ;?ƒþ'ðïÂÙâÇA±Ôk¹µÈb½›Q° G@b™ЙÆì©=«´ø›ð^×ã–‹¬Zé×ŠÚ§Š¤´Ô%¼k‡ŠÊ÷ìjÖE„å°U\’ãå€ó èRk_¼1âÈZØè:¥Žk˜þÒ0\DœÇœÀË!$äõ¯©|Q'ˆ5_„z®šš­¶•­ëÚc'Ø­nÚ#14 íl²DÅG$üÊNtb!ìTewærP”ª]ÈÂðÏÂgQ¢Gγ«ÿd^®¥åº¬|×o…y¥o2.Í‹°íÊ9 Ö÷4‹HÞ+Õõ‹¯ë ‚×¾^k2iš=üÚšéfÈ´ûï‘Ò6rÌcXÔrHrF:טxý>øŠçSðÍŒWß¼¸¸¾åu{3DŒ¬clŽ-Ò~é8ë´ñ¿‹üOkâ[Ù|#{is£‹X,í>ÕÉînC‚Žvüþ^÷9\`*Þ³¾!ÚYü4ø}oa¦Onn$w¼½›a–y2Ih8veNF5„ŽîTÒ’ºÝ7ñÜj?>$꺽®—uw'‡nôÍÒWV '™e §p@¥ËÆxnMyÏ´Íg_ø1„lDvºN“¦ê:ö±s=èˆÃö[ˆ ²1VUŽc¿9É1Æâ=ãàÄ6~&ø©¬êzf—soâÄðÝÎn/$EþËûPT1KFÆUv”’ÛÏÜØûÃ~.šÎ]^Ñ,üOáÝJ=fy®¤»“TÓö*ÚP¤B&¹hávŒ€ª/_šº~²°ëÙµ¦Gë™=O™¾?øE»ñ“/†ë—? µ -fHœ&úÚVUœÈ"1£9bØÆÑÉé_¼¼uðOö|Ñtíxêžµz`¼Õ¢?ëÁš;hÀû± (É ÄòI¯ ˆZŒTß]o‡c*ŽÝÕxÓ\¸ƒZÓ.´+gµÓÚÁSUc„'Ë€K±Lg!y>þeñ;âJø ß°{‹dmÖv‹å# %>D!ÔnU’W…]˜dŒò)ßµˆõ øVÚ ëqx{\ºŠãMŠÂAº ZYfšmò &9(ÿÖ)ÈÃ(Éâ¹/„Ÿ†|Yðæ8<%¥k÷V½)w©^…þÛ¼‚=Ëq D²– xUã8¯¡I¨sµ¢=ìN%s{8³ªñ&š¾øCs}âlk×ðY5Ú‰¯ C-܉¿cºç$%2 ÿÇ&¾mñؽø™ãÉ/¾!G ÅíÃé¶–’Úiêá­•ãiv:ÞQ’ €p@-ËdvÿµGÄw_‡ÖÞ×§ºZÕ ÕÃ[èçÌ1¬ªv™'ÿ–{v¶˜€N3^3û9ükÕ¼-™ˆ¡{%ñ ìÚ6™¬nn$båšEr͇UW9Ú7–5Ù„§'U[ô<ÜMVšÞ}uâÛ-;Ã÷­{$ú¢HÓ3Ü™ÑD,A;œŒ©Ú¿.ý­µT`1Å|שüj‹Æwº}Ö“"hM}©ÝO¥O­F°Ë5Ì Œ‘¤“Ä<»r¥Ä’|ÑIÖ£²¶ñgŒ5?øDn${2êÝ®­#"ÄY‹)Ž< pŽ gès^û_ÏsâO‡Mcqöëˆnî/´èŬ’Om$‘–/– F_oÝb9V`¸­ð´ù§fŒkU´w3¿mOø]øw¦7ü$Þ*òãÓ!Öá»iw2E4Ñ£\ÆDlÑ–ù•EbþÎ^:±ø¿¢èïäiúV«áùëN–Í,M0Ž?$û¦Û'×~x¯šu/Jti4m%Ôi÷—j³œ 6„Þæýªv3€Jëÿeà§o ÔVÓišÌ+g~X²´py‹#„žœãW½õOgA¤î÷G“æøuàÍâ7ÃêÓn`–ÿT´—^[ë¿5ŒÐ ˜É$Œ~u*ŠT  dWÍ?ôÇñW†¼¿_Z:̱©'Ìž{•Ú¯1“£8XOÍœ*¾ ÎEz‡íñ'ÃѷÛ½Oìºv¸Ú~¿•ˆnf·hâšÝÈrT$d@À×±~Íþð¿Å‡‘ø¿ÁztçJŠ24û=BH¦’FÞÆâGHÁnîv°ûÄŸzñ©ÍÑN³¿)éÔ\ü°oVŽöcýš‡ìåðaµÍNÑï|_âXî HVHÚÈ™b2'ßfbxn;ô¯ÚÄÖ:gΗá4Å®\jóGq¨‰34‹œ×7 à¥AòBí’ãÖ»½cA¾Ô|e±ª¸M*Î2¶¶Ï»æÜ»TŽO £-ßøwÅvSGªiù¿µú=ÌsȨâ5è@ˆ,l3HÏ*“ÅTæz½þF”¢°Ñ²Z™óÅ«}øJÓOñEݦ½©j–ÒmU"—α¹U3'{,q¢òñŒƒ\Gì¹{žÖ<=yR¥ŽÖ9Éón&khâsžÑªHÞáë»ý«þ^ê^™›X…´éì!»°¶¼¼òZb¸O ‰3 AlYˆÆ+ÌõZñ_Â=ÆšZ‹}zZÜIx‘o‘TéËÀã*­r•Bä×ÐÑjtlÞç]5^ñ[l{—ÁíRø¡_ÛMªÁeömA¡´[4W{yÌ*òÝ:0̇,ª¾P«Æ3^×ã¿Eû:~; ñijվ"êw“@Ò$µ²whÈËT¼,[hÆâ8®Àž"³øÓ£éá[-;¯iòk´i!tÑž+eB%sÉ"u‰H#xÀÚ+?ãõ´ž3ñ¿ˆåñ•ä·6:ž‡&³ ·¾F¾µ…$ˆEŒí÷Œ€+ËÄKÚOÙÏú±ëåé[ڣѿf¯Æ4gâ mítïjZŸˆ¼&Èê—P•lK ;]“ÆÊÍ Q²C€Ý1Éx'â´~<Óµ=:%ퟄ=oGm6’Ê&””Œ+)>q•Do× © ÉÄ~ ü`·Òµ= ÏÅ2–ûʲ«›É&1?pob¹ŽàWkñ/Pø?â¯Ûx T·ÍÚϦÍ2&Ô8ÞÑ.NÜ:­’@ç<šéXIµÚLjŠ»zßS±ý·ü)yÄ_ìkõˆ]jæ¶*ÁžFÜSs¨ès1<£šúëá–‰¤ÚZÝÛ–[kX|µÀšYQ63nüÅsíÓ¥|gðÁÚßíñûE»×-õ BÛN½‰µk ÌVÎ5 Fç$•jý¹¾ YØü@—Ä¿ ./µ -iDÒ%éÄ ‰ >N@/ÔS¸ä±,GÓÂJš¥'¹^hÅÔ¦õG‘øGáæ½áŽ^°Ð–ûï·ÙI§ÜÚn’ÚugùX1^FÀåìkô7Mø3}¨ø³ûOSAk¢‹ ‹+iü¿ßNÆÝÎÞ¸òZ@1õ‚¾.ý›?jøAãY-õ‹­J þÍP¼h¯-Œ ¿y€h•™˜Ÿ¼A€+ôñ'€E}Gð§án•àïO§ø¢Ò ‹Ž%3LÒ¥mÌJ$v8b½ «’*m•¦ãø¤_ëÞðÝ–¯ Í=Ž•h¾dö·q¢Yâ=ÀWÚKƒžÃ&‘´ï|Bñ§‰ô+Yìuû8/€‰YJ¨.pÎ1Фž1°ñ¯ƒà’ÃM¼÷—2Çkk$Då «¿ Ÿ¼¥qŒ¸õ®¦„6Vzœ›,m£%7M$â5C ‘ú‚9;G9<õ¨‹Q÷ž†‰_H»œŠ|Y®x[QŠohí­}–tñE~"*áÆÄ@X$4ŒI!¸98éÞÏáß n A/uFŽ;X,oZÆÛÕæ=vv, FõùïÅÞ?Óþø¢Ò_ˆú<ºÝŒ:êÄñL7¦1¶iTüÓ?•$£>R»;Oþ(ø‡ã›‹iÚ½ž•,ˬ"Y“1¡ˆ Tì @a±˜rSßJ”ÜT¢•»™¹AMÆK^Æ…>#øçâ§‹|[o¬‰o¢ÚÛ ì.7F²™æ’ùß¹b^N6‚X×nÿ ¯þ#êš„ü°i"ò`2nMÙØwÈÑ ¸'àž éŠ›à¯ÃÝsà¯Â´ýVî¯ë³j“ÛÛƒ;åBr Ž7‘Æ=ë¬ðÞuᛵ=jææI–ËÍ™%eóVbÄ”| {’?:ç[ihh£wvsš‚ôo„³®“¡ØêwrY”‰nËd›9ò×  Œá@ÀÉ8ï^·¢ßÃ$V’ëš|×6žz1NǼùÁhW=7W>ý«.ã[’ÏIT·0ý±›Í–àÄXA\…`$ôë’OaIesy¦-´r¼¬í*ù\Œ¶ç.s€v®få7y{·æHùwþ A¡ê¿ü_kªêúsxtëSMwn/$VDŽ"…ÙwÛWjŽàƒ_%xÇZ‡Âéº×‡no¬'[¨Ønsz S_¬ü!¤øÆÆâ×Ä6cW±™–6…a–pà)ç?6ð>cÒ¾1ý¹>ü8ð{ῆÿÙòxËC1Ýß4jÈÒJ÷ ³D q(X]œ9Ízø m9CØÉnN'ëÞ¬¬£|ᘿj«¯|Sñ¬WÂ_ Ù¥þ‹§ ‘·í÷†šY£™ j¡cA„ùœH{tÚ¥ðЭ¤»‹OžYQb•Y€–Ü+nLdð7Ž3úy'ì,·²Ïƒgò¾Ó¡Y¤3É#¢€ #yàAÞ½g\“M·Óõe×/%–?³$w²Ø…¶¸–?œ¿” ð3±$àc­|ö.\•eMlž‡Ðe±•HAËv·)xV·Ò4Ùgžk{Û[ycòã›vUP/OºÝžw÷ç%àÍ!ü$ÿ_ñ:ø–ç\î+©¬!‰­VVåÅx]ªBŒ»l Äת^xŠ×ßb-Ä L1YY]L…²bÜ®B“•$)Ç^½kÊ4.ßJ„Iâ ™¯'¸òçÔ€B«"†Þ‘FÇ  )ÉÉãÔÖ˜hÚ÷+4š(Ç»=ÃwÐkp>Â+©¬íÝÚâîá—v –/€Ä“¸…~Uãš³àM^Û°ê2!µ`$*ç2LªW1©ùX”-ÉäøÖ%ëÜ⥸„[&·0Gl剛*ÏÝ Ý°Aãšíõÿ¤:^«]Û´×cÇ6£RŽmƒæ1á ¯8ˆæ‰8ÆW{8hJ¤tv¶¿×©ÅxóÄ0ÑôÿßxnÞÇD¾ñ&£a w!T†ÝDY~S¾SUW,ù$]_‡~iþ$ø¯oânÊÊmà Öú:1¥ÅÏ”VGdÀP ªmÎr1·'N/‰ì­%ŠÎ)á7Ü5Ë’m¬mÓYe`~gÜB…É'€qXÞ!½¹ñF—{¨n†{ôM?N”nš l¾w´¹Êã(Rj¯Ì×.†×äºoV;Æ?ÒëV¶þÚ6 {¨Æ'”È‹/’ª¼Üp1Ð}k˜ñ%Búv•©Â‰lÌ„¸Þ¸l 8Q£8zâ°¼S&¡vdAk-æ¡×@ƒ!2B.÷à|£,@<Zÿ þ[›ß´]Ý¿ˆfyüЛ<«YþV“',ê¡yÏ(Öê‚»èyÍÊråZÜ4Ÿ|Y·‹Mñ-åÜZžH¹Š7ò­î$R†‘‡,¤Ý‚A%F wÖ~m.íÅú·ØÒYLæÉ ÅÀ ­•r ÜGREGeã1§xöãEð'‡¥ò´«u7ÃyRØå‹áô8Åaü@Ô-üIã==þ êÓêÓ[²²ÙZNËË#Ã2ö’zÖWzhŽÚX=7N†‡Äÿ‰V`ƒþ4òäóÐB²J<½rS™G9$œq^3ñ‹Ç:ç‹ü+cˆµ>~¢Óy!œñ*úŽƒŒKJî§Ò&ñeåÞ»ñ3Mš+&ïe” .gž0¤+KrªK< ŒíCâÿ‰'â_ǽFM:k è'™ ¾1M}rFÔÑpv–#‘Ù­tP‚“Óu¹ÍŒ›¡v´I~'¥üøm7…¾éêMqs™/š_k&éÝÄ`vUÜç  ë¥Ñ­cœO¬Ë,ÑZ©•b™ÉÜw—=X±À<Ô@öw-VæÎ;xÑ`ˆ!°ÈŒÛÊž‘ëÓ£VÑ5ø^ÓÂÖ“]ÂÇz¬“ymÁãl‡ˆãb_¶2jMÛ8¨Ò•I#KG¹½¼kvÓ~Óý¡te¸™Ý‡˜à TaU@Ë9ÆqŽƒ'Áþ ø’ëÅ?ä¼Ó¤’êÒ;˜m4õ29+«<³…n¥ŽÄÉ΂¸ç¶øáâk?‡?ïítØ€Ö¯à6Ð%´ì•Ô®ÑÓp%‚‚yö­O‚Ÿ²ç†b³Ô¾(ë-.±%¤vQÛîi£µ@*’ —s€Kp08°Œ¢½ù| ö~ â{ù"œÚtú/‡îìü;x‰®\[A§ZÇ* œlûžW`pR8Ã’°“Ϫ~ÏúW†üs¦xJÞ=ún “jKqu;±¼9%žep»à¤ü£•¿¢|Ó<<š­ó]O{#4jmØ,l8*HéŽXãƒ]îƒðÍ<3¢ù“ÁçAhàÞ¦våÂü÷ÎrÞ•„’’ÑîEIݤžÛ¤ž/´mϵ¼ŽTÒ|ó{¾&–;$1²Àì@Ï2Ó“·Šâ¼Oñ¢òMÇFÑ4˜nẹÕ&Õµg*±[ÁFî".›˜g…¾}¤pà×Oâi:w‡š Zkhýä¹¾·¶“̳Ôr;2ä”m¹QÏÞã5óí-®Oº§Ä¿‡äÓÉ®›-úDÚ®gŠ;hn%¶-䟬˜!·eTŽ¢¯MÊ¢“7—/³vzŸ%ø»ö¹ºñÅy¬þèò&‡¦î´·†Ö?6MH)ùdlŒ"ŸAÐ{×iñvÿQÓ¾ÃeñßJ—Äš‹Gy=´qšp µ-‘FrßÄÇ9ÉÖŸÁ„z?Âëùî|#ow2[È…Þil“(o,“Á”«6í€1“[þ$øpíâF¿ñ ý¾¯}¾Ó4eUX<ÇÛü9 Üðp=kÑ—³‚Œa­º½ÙóUbå Mê÷>pÑž_êV~¾°[)dŠIl啌‰!w<Œö<Šäl<%uw®Ü& dDÖ8ÐÐä³0ìžE{ÇÄφwÚî¿§ÞÙj?Ù¶¡Õd0GåÉåŒîKAÁ8¬6ïLñˆæšÛLDX£vu¸ 5ÄH …ò·–'8îI®¸Õºº8yTN{áß×ÃQ^ëwRËo§ÛZªƒ(Ù%Ä’P£wǵAðμ-®¦t‹("ÔÝÖ×yi˜²çä’vÖÕæwñ᎟q¢^¼Ú–åÛ¤W9Œ[ÈòmÎHÁ`¬[=†sÛ§)“y.H‘‚§VPs‘–ÍUHÆKšOs?}6k|=ø£¾K_ÝÙiž íq$X†Ê2¸UpNHyç>µnæÈx§Æzf“¥ëw2¡‘`š;T->`ùåÆ ð8XÚ/»Ÿº¤ÂíuŽâöùVI­mTù¿h>Y(’4…cç;z .4ïZɧÙÁs{âoUŽk‹™—sCíòJ˜å¤a»ެ°šýÃh¶­}YÔ|Qø—k«Þ\é>ŠâXc˜ÚÅä°V»b»·†ÎP} q>-ð¶—áÉŒºÊM­Åod·:…Š/™ö¿9°»YUw0!‰nsX¾—[»ñíõ×Ùï"µ‚vÕUL<±ˆŒ …Wæ;ò¿/ ÄóZ°é>&ð†ŸUº½ŸLµ¸ºX¤…ÝV+if(ʲœa‚,Bƒ»$qU{4µ Mûß×à3Áü=âí.ãWÒa¸†6ŸÎ{yÜ,0§W”eƒm Sœã­oxÇ±ØøÜx]¬Ì°È}§[Y…z®Êù›†Üã$ ÇšÂñψüQῈ_€´E–ÊOi Ûw0PB–ùÓ5‹¬x_âG†î.¯¡’ÏXPU»¹cl‘º±ê…†Ï@Bžj¹eWâ–5ýÓVG¦ø²ó_Ó<_¨ÜxjæÒÞÒîÌ,úmýËÝI–§,¨Á>uP/BW£f¼ƒÇ pgåf½gÂþ)Ñt­fÌxªÒÞâË"8ÙãÜÙlù²*›yù¸öæ¼?Ǿ>þÇñ†™•¨ÿÂgc©ÚÜØ\$š|P\XÏ–Žày .Ó“‚*I<ÖS”Ö—þ»—8G—îz‡õ›;ŸJþ¾¶Ôôˆa„-ÉùÄèAp€|Ûc$€3óÍmüI]sâÅO 7†õ™tÏZª}¡<áo6¡t²&`›#Ú1–â¼"ÂÒÿGÕt›¯…§$-.¥¢¹dˆ]FÙ¢fá‹°“æeÆìôÀ‰¯ã "Oé³Zëó¸—P–lȱºŸž8¦9QÌj1¸½AæñÖÇN§±iÌóOÛ‡À7:Gí+àOXéÖ¶úf£äY’‘ Éæ¸y]VÌèvô€ ŒŠÓøƒ§\^ø¡ðÕÄ—q\[Û[ݤ±,ƒ$òÎÇl¥˜€9ÀÏÚ¼s¤i+[-CÄ1XÜ›)ìÁ1[„¶œíà ÇÈcP@n “Ž+ÖOLÔ] AnŠa‰DI<ñH%‰Èœ:`·½aGý”`ןg*²iîxmÿÄ+ üt—AñÞ â4µ»Óž(~ΑHe“$å¹%Hå‰ÏJä?k/‰+-嵇†ííáÒÐEæÌ3ö™Pë+ ÷ù—2ø"ÛâÃØm亻i´¶Ùò̘ÞK·Í"œsÓ¶«ÃWt¥{û¬Xš1­£ºûÙó̲[.U˜¶ì`Ÿlÿz·Áï‹Vþ#Ôôíâ$bãJ¸ÊB\,ˆ¬¥cÚXa0ì¿0ÇÉï^MâM"]\6rÌ—1Ã#¢Hœ‡Úv“Ž£žÄf«Z¹2”“s+|¤¯<øçM›_ðä—®¡*ˆí‘%x¤´‘@S²áNqµvðyÍdé>»ø•®2üCÒõx§´_Kwq¦4w…ylVã~`äàzñcö$ñľ5ñe¯ƒ5­J´– '‚S˜§‡Ê› Ÿ˜…èLŸ^=[ãÄH´_ ø³OÓ'µ]KH´”N“HQ# РýçD` ’Mx•jÏ ?e-_CÖ§F5£íÌwƒ~7Â/…z‡õ½uôø5=BÚÒÞÜ2<Ž Dò¡H›‚z^uû@j:.·¤XøßNÒî>Ýnì< eŠÙÕü©<âÂXg/¡®ûâýç‹~=þÅÞ »ðñ¹ŸN…<×´·ˆH°\á–Id;²@hŽ07œõâ¿ ¾/ÝøwÃw:7Šïu<1w«ªÛÅÉ…ee‘@êðr\cšç곜§'ª{yyžl=>U¬ì}õÿüñ$>#ÐþÍbðj×-¦@“¬ÿ%²ÀŠó)#…d‘ybA;­}·áO¥ø’Þ}VÚÍ&¸žO"$“{y ‘¬˜ ¤9ê³sšüzýŽ>>Ù~Ëÿ5OéÖ4ûÉô˜$·C"_} FÐ’™ÛH¯Ç0×ìWõÿì?†6Z•¼K4óé3M rJ°°·ór Žrõ#¡8ÞNk‡tªs}—±ëå5\é5>š'Ä/Å^.Óµ½K·!é…•µ›aKÕLû ¼«gØg­dëºPÐ5oƶ“Íý§pºc\DŠò2œÜH&•:íXB¿£H¥zˆ/ïb¿_.Ò ŽвJ˸ ºç&A»·Rp+3ÇãO³ðÚ[GWí)²…B¤q­ìÏ…RãÇÝÎzs^e=ícÕ©QRލóï ü@·ðŒÚ…ŸŽ!x¯æ‘o.m‘˜=¾[r…ìNØóÍoo9û%»²*•šg¸CÏ3?z²ÿe¸Ï‰ é_ ü%áOøUlä‡@0ß\ù³¥ÇÌ·$*’î°U3À =xò¯ÛöûÁZ·Š|+¨xjÒ]OÇzv¯köx®|çióß‘f' #ù›%€ b OÚŸÃß|FºÞ£¨I¥^ëÖ—Ú²è—"[››8ˆuýôm¶Áù|òn$Ûå¯,¼oñHO‰š§gáç¿·¶‚ËBŽ+›¥¾{mñÚ¡xwÏ™pÁŸríNtâëUNnÆ“©S“ÜG•|x×,¾0~Ø:®­«é÷^&²]Cì6QI©›k[ kh¶¹Œ"LLZ]£³À9Èæ¾Ão¬üAM3_ÖoïµýWJ¼K«‹‹·dÑ¢2°’%Nªòˆ²B†T)å«ìý_Á û>è~Àš4^Ôí.~ÈöRmd¸¡2Œ™¶£b=Á·6âòwǽWÂß ÿh½bÏá®§âXëº\rÜJ±Å/—¹ÕÞR>ó³+íÌ ëa«ÆiRŠÒÖG›[ R>ü·5~x k¾<–öÆïQŸLðHûbKòÛ‰f;^5˜œð»•°«ÀÈ¥Òþ$Çã֗¬Ã©Þ\¬O=œñßηi lƒì‹-¹Wu¬»Ÿ;Wy8Àï_ ÿgx4¿kú&§®ÝÝɪÉô×p Šqk7•±¶ÿTRÃê}ëÀükyà?†ß´'Œô¿‡ZN¹­j:E®“ i2ý°}bþù£˜e>p¬±À .@\•SšÆ8ˆÔ¬àîÚÚß™³ÂÊ(ÔoOԽ⛯é=µ‹ã-…²xJiQ­æ%†­4k;:Ɉ{ˆÆØðFI*s‘\7‹~é>(ñšž‡c¬i–ž<»¼¸šéZFK¨­§ÆÑ4I„ý£r£`†½Çñ㇃m¯|6tH¬5»}*å|9vÖ¶±Ì°]-Ä­8c±‹ö²ï!}9Ÿ‡2ÞÂV–Þb¸ÖoÖY­.o'“Oh‰ƒý”ˆþarvø,¥uÓæ½ªüŽ ÔR¼7óÿ‚}!%¼3Ía<íeäR}žÒ+“ÞMq*#€ªèd–,ÜW9ã[;Jø§áï|Di¡Ð4‹˜í´K‚ÑßOt¯'žñ Ìȉ ¤ûÅôÍi|2ð½ÇMWW—Q—Q¶M™±¿hbò%·Š"Lž[°ËGûÈI`àdš)šçWñF› Øø{HÓ´ù.îI»‚¾‚(yÄÎÒ väƒæÉòÏÌí£Fu!{h|w¢üsñW‡n/j>$–=:úç_Òtµ±·u”YYÉtжÒm„w ! îsŠú?öçøñ¨ü"ñV¹â+ ”t–ê5žÂÝ$ˆ^~ô¤2 …ûÏK†$rT§9漇ö¤øy ÅûWø¯PЭ|Ye{¢H|NLð J­æ¶l¶B#«˜ci@psMÿ‚Ü¿‹¼¦xÆÁíã‹ÆÚ©Ô|<©--¡³[q B@)ºén¥$€r¸®š†"td––³:i·FH·®èù³Løùâ xïûsA¸K{=ËËf¥þ̰ÜÒÆ±!]€'œ’2I5Ìè:ìcQºóÑÔ´¬êIãibJ>µ—2ÞˆãÉbŒI÷â¡w’W‰ÜFN3_EN”iü(ùiה߽±ÛøóH—OzÆšñ=¤¨ÈѯރågW¾}ÎkŽÒl×[½?k½Ê†”`c c[Ún©*Çå_?™ÐFß~?…dZÙǹvñȪ`äEÎ  9>§ükH7©†!sYÇcOCyÿá6ð­´óì†ëÄ:b²»î2,—Öñ¿^X,¾¼œWô=£é2ØëwOqm¶ÒäH^A´6ÃæHYØáAN8ÀR¿_ç/áö¤Þ*Õ|Ä„[Ëg¶âÑ™pËp®&Ϫº«Ûhô¯Ûígãî›ñö-ƒ]Ž ^8ЗV–ò÷J±K$ÜÆ!Áv1Œg¦6·²Ò-µK„i¯æ@+5`ÊuåØȼᛠµÙ|øq7‡\ñ·Å½7FÕµ}Jé ²¹Š6H“Ì;8)» ?2x$× ñ×[ðÆ¡ñ^;WºG¾ŸTµ¸³³³Œù7“¤Ñ+,»>\‚Wbœ`ÁÉ#¦ƒjœWùo¬Û:ÏŠ^%—BÔ5MSÅZŸö¿”>M%àŽÖ]‚5HÎõÝ+ÅI-ƒ·^o¦iú¼ªjšw‡|[á­B;K± ȵ&›ËrÊZ®L<ÌV êqÏÊ@¯=ø•â½ÆZvµ7Žo4ý'N‚úXe‹y{€ÈÆ6`ä1yÀ I’x ·Æ>4Eñw„ øe4¶‘ë:uÍÓÞé±/ W‘Õ¾Ð,î¦$P㈮¨áÜl—^ÆNª}8ø±û9ßøŸãZËðËKû3xˆÁ©ØéW70Á%¤rAæÉ¸³ˆ<¹qãæŽóèw> º–ëW¶¸$´ë"`Æn@W·z‚8¯cø‹‰>x‹FøŸñVaªÝI>•mk«ièe¿Mµ¾Ùo÷J9?êÇÊÊ£=@¯(¼ñÚ|I¹ñ¡ãUšîµz·2\–1¬&I‹ºE|µVÚ©ÆÄEQœb½l4¥$–ñ_ÕŽ,J¥ª´™µû<ê62xâ}—Œ/´úަêí2É$¶WSJÀü¥wÂÄçæ¶Þ}Ãþ ûF‹oZ‡‚õÕ—MÓýžn£ñݙֵSuK {›h™t{r¥šHÕW{LçË𑀞LeJ4•N´´õ4¡ ׌R =ÓRÑÏu{ 9îà¹D”G"Vˆb_ •HcÏšùãχ4Ÿ‡ÿµ&“âÿx“Rh5MB×F†Ö(§À!šâDcý×8ãì?ÜékigqyzàªZºævËnR£(ªAÀç«6zWÉ·‡†¼/ñ{A½† gÄv³g¨Çp‡PÙ¿ÙX£FÂ2Ì#Ÿ°º|þËÚ®U¦Ç©R7¤ûžKûDø‚OÜ&¿¬ÚÚ¼×¶i–j^»ŠT+åÆÒcŽf.;`HÅOÙ–îÿźv±a«^X¶ž4»84˜£EXáku˜ˆ‚ŒaQ'À',ÄŒž+ø¯û@xž×Tm'âæ“¤ý¾+>Ës K£+çIeXmY“ÎzÇìsá[¿ÚZ'X±ÒF‡ÀZréW·Š¬WQº™‹4ˆàD±ª(• ³r¾†T:/+w<•zµ—-ïØ½û:üÕþþÍš?Äh6Ú­¿‹t‹Ï x¶æIä[‚ö×ó*_ÛÁ3 ä–Ž Õgò—ó§ÃOŽ>ñ_‰¯­DZU—Ù££ižêy –Ø´j“8lž¤Ö¾Íøµã?h?³·‹nt«{im>øFD·²t–÷:„±³Œ(è 21'»Øšø'À¿í~,]xNO‰^SjÞÓ!´Ó!dÛZÔÑÅÝÃcätòcu^FâÇ$^^u15g6¶üºA‹t°”`»þfÂ/Ùb}Àzô„úþ°¶³0ʧuÍÙÂR8a¨fí/5ØüzðWÃ'ÀwþÒlµ]2H§:§ÛÚîuFLDz#´Ç„ó…¶äP9¯Qø™y?Œük¡ÛMj—ÖÖšsjò¨Þ°\±"IetÇ͹¤lÏÍÎ:ñÛÿ éÚåç†c6¦öÃjéÖöIbƒO¹º*ÄK6Ð@/1*%W'¡µ*®«\Í«tGÏׇ3s¶ÿ©ôWÁ«{_…ž> û5³^\h–·÷~J•– ’PJKNyÉç8í]®–¶»}c§´Z®¡r j—V’ÕÂÅ{>W}Ç– |»¹õàdßj~=øS3Ì’\êF{›Ûûâ7yQÜ4P™1ÉùP8~y¯Qðþ‡û6|<¿´W¹ŸWÔ'žsp‘…)‡ "xª‰K;Ð׋‰—³©.²g¡‚£:°åމn“¢Ûx{B}+ÃÑ›+h‘ÄhŽ\ÆÍÔn$’Aõ¯øµðBsFJ×5c]¸º€ÚÉ$’€ ó%V2Û´ÚŸ(<(n À¯ZñÇ‹Ûáwƒì%¸„6«röPÝC+üñÉ(@ë…?3np}Msþ øƒ¡?ÇkÝ6E“PÖ|=¦^]ù‘†òšu ›U ÚÊøq¿»NqÍw5y"*%r¶~~øÃà~¡£ø¯V°†Îî÷ûà ¥qµ BNÇq×Ëb•úIà èÞýšþè’jßh¾´kû²ÿ¾½»3M+³˜ï-ÓŒŽ+ço>ÕÝ]ékk$°B²I¥9v`UÃm—b… äõ‹ûüYÔüW¥ê~ñ&ë¿háŒQê¼ر «#Tbc碽LL§ ›{jÎ*p޵×_Àîÿi]"ãâ.ƒw¤ø*òêò^A]òÓnWËCÓµWq,rp+?áÇÃû+x< L³7—.¯$Fåñ:”lK?å¶:`o8é]|»×u»½/ík§´Öž}ýêF½”"E.aAÐtUœŸjÓøgàtÕ¼câmP»ßªê&›Æé›Ä<µf0ýÙfpY±^XËÙÓäù›UµWvµØ›Ç2]Ýø—KÓôÈmb ~‘^È”Vq¿‰B{÷©,®ìOŠ5VÒm,|µ´]#Æ­n þíCQs’ÀòIç­;Çßì4Ÿ O­žâk…eVŠBs”9Üq• ŽNzt¨¼Wã'Ѽ<.ÜL—1YO•22#?–ÎsÁÙý9ÛŠÊi4jâÓ×cç¦}>Óö‰Ò|_sZl:6¡Ô•!fK­9„öìèŠE˜Û’ºHì } ¦ø²ÃSÕµëu€I7—•šç~÷&î°ôÇ<× ãïÛÉðæö ²'±ÐšÚ ŒÓ^ö<9Cí+d>f~`£e¸£ðsÃ:½–¿whÉ£ÛKe,(¡å¾ºŒÿ£1rFPFÙ>­éÍvµíc«Øåv§>eÔÕý›ôÍi<7áI|Oc¤Íiáÿß_ÝM ØIBŠ«0b%ÿy¸·ñö­<‘ëÉ?Aò50–yÚUc €òxâ®x?ÁZ~ZÙ7“uqw|^XX"å²yárp:ã«t¸l>ëZ•‹#Ïcop'œ–PŒ„ŒK)#Œ{W4§k³JnW³ê|Óâï‡úŒæÖ­/å·½–þ('´w’Ü•TÈn…ˆ‡,@áOcšìc_…º¢xz÷K×õ›ˆ´m2ᦶŠ&òX‰ÚQÈ?9b¸<Ž„+cáwÂÍ3Nø‡®Ky%ö¨Ú–œš|­2н”E†áËŸ4H݆uéZWð’èÿ­!Ñ ëKš]F.„ FWä®ò°$WK®ù]4ÌëRR~ÕnJ²ðíö­¬I$²AcafëåFçr«Á$ýÑÈõû½y5r xåº_17Å!1°—'q îÜP@ÀÞ®øzõ5  ‹tÔXH¡mé´v·©#8éÒ¢½¾Ž%„#FfD*2 ›Êƒ§ãœ×›vô7ž¦º‹[½:YçH™'. ÉîÙÆqìr¦)ÚN¥s§\²ØÙÇpÑ-VÎÑÀ,IgäûT ¡Zë)’þ6Øîû›¼ã#åÆxÆzŽzõÅnøzlb™üAÆfBm»s…r{€©Ò Û„}퓦éQèÚ,ú®­#‹8¶GiƒspX–‰ÉÁbI¸é_þÖϧ|,ý±¯/üW¥®»o{jf¾[©ÝüÉeó’Br%BíÁÚqž?@µ‹Xõ'†ËPH¦`B\#`ØäŽœ×ÎßðP¯Ù#Yø·àÕño…nÞÿTѳI†Í< †s;—nürèMw`*Âdç¢zN›«Iѧ»üΧàçíà…² j£]˜è…,ü˦_¶]I"4ë >ô§x Š6¨!¸ZöwLm{Ãd~<·xtûÙ˜OR‚±Ç-±i&õ(¨¡G@Kð ~.ÞÞÜ_ÚÜØÍ3yNNFY6¦vñŸN:Wì?À/‹Ñüiø á?éñ\BãH‚7Yå,ð² áó8ÈPå‡C×Åa›eßTj¬]Ófù>a*¯ØMZI^:ð‹j÷ú{iÍ5•…пW*¢<…Ø‘€Ä±ÀbÛ°1Ÿj‰ôÿ„‹OÒõø#ºSYn¯'ÿV±à¢$(½X¶çÉãõãK]ñ…®»ñ¶çö·]]izLZÙ—æožVTs»ª‡ROjèt !¬LWž$…®#‹cœÆ²3ŒAÏ#ïcè+Ž—";«ëW–Hå!Ô¶'Õ´{ûk}2\L‰öÊÒº‰b8_•† P=+ŸÒ|/wñ[á׈¤øe=õΙâ=bŠö–Á6Õ/:»¶E‘НÌGLgšôü1Oøk[±¸»pÞ7»wÔ¤íÁnù,Ø®ãÈäñÆ:¿èZÃZ|$6ºN“ce³L¶„7Ù-ãU8 ‚{9Éæ­I-Væ³Þ0†‹‘Ïx±¬´]Gð§‚ Å»iuœk „HØ/ qü3Гšá¼câY| vÉ¡µÕÌ1s}}#/úHÉû¡WçÇ8Pã<×Cct·¢k‰Õå}NgãgÙ¸_.ÔJ‚\•‘ÙIä”pk/Tðe·Ø¾Ñ%ìÒ[¼òZÇo$fd›€¶uÀ8AÇÌTö­c©åWiIËt´0< ¬C¨Ýèk0_ÝKu[í䑿û Xãáw|ÜãÎz ê¡Ô.´xn¯´ù-®nìñÜÅ,ÚÔ<Ä ½X.qœ'< Íð׆8'‡E›PÊH¦K÷f”Al´I8^y§E£]ønò[M?ÚîåŽósÍ›‹¦U$Ë;™jwQV×°amzE]3Äó|SÒî-ü’[ý±ÝlÞòÖQ I$A•ŽOE%IïŠé<;àx>A;¤·º¦¸Ñë$òN0#T@XƒtÀÜp9Ï&º|9mä\ÛÊÐL¡äЉ%`~vîÄ33Àü*LJ4=?áÔ’ÞÞ ‰nî¤ò¾Óq+M,Œ[d’;3é\Õ*¤šG£‡”¥­´éØó½kà>±ã)šÔ³ø;D°—ûRfŽÊÜ]Ý]óË0uh×¾ Î=+Ƽ7àVøÓ¨éz­¨jZ¶p¸¿pòg&HÈ`ÝÆBÌF 'Óéß´ïíŠ<ð_WÕa¢6Ú¤štdîyd*Œcx=GcÜâ¼—öø/{c4ß>$­Ìž.ñk²Ek3yiilX2qžöä/ðÇ´pIÕ…”Õ9T–‹e¦ìÏ1„j%Mk'ø.§Ñ>°ƒÂc¶Öe:„³*Šû·=XŽê ä’IŠÌý¥¾?Mð[á-楤=º\¬ðhд¼ÒÌÃÎ1) r:œ}tåø«¤øc]µ“WÖ6»„€ü¡}ߘó’xë_:øjÞçöÁý¢45ÓÖ ¼ á@ê:¥Ãîþ9ÉHЕG ʼnÆäœšqSnSÙjË5ƒ§í$µ¶ž§®~Ëm´hþ(øý¥ÛßxÆV›PûDæF}5e‘äH¶;²«Çª3*òA=ëéÏ[]´ < Hc„å§„¨#i Ý{¸ö$ÈÑü;6 õì1\Nà¼pÉrÀŒÑÂŒàã<ã‘RÉ}}aá©íüItoEü…ØXm¡ —e·`î'$öÅrʤªÊòÿ†Êi_~§_6§§YØYÛÃ)ž[˜Ž`Å–=£—\‚8ëǦzV7Žäׯm¥¹Õm®"·h|¸$¸¸ ûÆ “°à’i|4wº,†+g·›Seb5]ˆ‰yU ôçzùçíIâ=JòÇMð…ÝÿÛ5${y5&@mà 1Œ}æÉÛ–è_8 VtÛ”¹^ÇM*0³ÿ¤xý—Äq.•uâOj“ÉsjÚC›QsH#TÞ#è"}Çkž\Ç‚|«ñúTÖe9üB$ð½›j“ZG,d“MutëpÎ÷NåB"É !,p£s¶½§ÅÞÔþx^_Çzdð›t’ÞÒ ®AödfÏî‰ÛŒ€ƒ¦q_9ü{—AðìÍà_ø2ú÷Q“u¾§qqr˜{œÅ)߯—ûÁ´ŽG¥}Gž.úþ—VM^RÛVu?¾%Ç⟆pØøoOŽ8mnFÔ’c$ÓÊÎA/žIîãÔW¤êÚº2[ùŸe•Üy¸„€qÈ{ã×¥xWÀ=!4Ÿ…ó^XÒKÉB« bÆcò’IéÀ'Ž˜¯B±½»ðþ”­yt£NÓâî¤RûØœl{±ôè&ŠÔ¢¦ÒY3ø¿R[Ÿˆ?ðŽü?³rÖó¥”!\Î× äõ‰Q_t|ð“ü:ø¥éþ!žiµÛHÝÌ&,",äˆÕ~îÔ(ojóoÙŸökðÿÀ-nÓS×ÞçZׯ¿q¢å ùªÁ˜3žv¾Çõ®Ëö€ñ“i’XÙ<0+IÏ+Û!ThFÿ—•›…8ñšXšê¤#F­ù›ÿ->¿~ÇZ)¡oމ“a2)!q’ÄŽü6?:à> ]Xøwᧈ`Óç‡U—Äb >Ï—Ž ÌUö’¤1òÂÆ3´/<šÈøUâoŠlãñ‚‡CŸJs¨ÚO‰>Ðêwg*“ò€ è­Ç5ïº6‡—¢í=6 9-åX£¶6Â&…Žr#+·ù† ÍsTƒ¦×1\±p÷^¿qá¿ þÚéMsã¤QÎÑm´Ñf“ÏRA~ÜüÛFG «¿ ôïí½KRº½ lÓHR+8˜£#kn.K˜8õ®·â>§…í¿‡ô½L^û5¯”¢f•Žßõj ± C€0} ¯#ñ®­¨ø7BIÓXšÓOûŸ´ÄD—2–oH£! g’I8õ­a9T»îg9r«[C¦ñ¯Œ¬¥Ð@¶·¹ÕÞ¡q<6òdM´†pA ‚XàqØ »­@ÞÒõñáÍ$ê&ÔIqª’ó=¸‘HX,ãÛ“&ô ÈzuàWÏ:žúdpxºña‹Å ÄoEËþò9\¢ êÉùŽ8Mz_á±Ò~ gá5»]ê:ì‹kcj³3²Jûƒ¾e ‘Vœ33ŠÖ¥H«=ÿ2)É[™îahß™µÍ6KÛû=.K»VŠä\LÐÁ+íêб(Xƒ©=Et_n®ïþxŽÏÆVZ„P®£$É<-’%¹†Ýa0BÀÈ™1;ðÄ2óÉÊþÏÿ±ïˆ®ü¥x‹â½±°ÓÒãíÒÁu ¶Ã¹qÎå,àô»ßÚ«VKð5ÉÖ,µM_S¼¾¶¹’È<Èe!0šQ¸ù…’-‘ƒžÄàñsTá8Æ.ï­nå¬ywÅoê1x‡H×~^],©ik§Ú³[ãì"4òœŒ³3 \±^®-Š·iâMK´iu©n¥¶Ô%À¹xšg.ew0 ì•äŠï|Oð¿J:ö‘áÛ›„µþÒ›Îÿ‰]Ë($·YGG/̲nàAõÍvÿ´&‰ðúÏán¦ø‚÷Q‹Sð¼~v•ž ¶ÞYDØ&ÚAÎw0Ø0Äw4¥RIZ÷}„ã&¥9Ê˱äþ ´ñŸ‹aƒøW9ã 2‡RÚkÔ’:v0ÜýžáCÌÀïÊDܪ®·\ž{Ö¬Úý·Å¿¬ÚN«¬év™“©Kw¨‡ž@°F„/ `äzrå_>Üü7²ðõõ¾¯o©Zk«$¶’Âw†TÙ¼z䯴‚rŸ+iyw2«Ëó%s×¼=ðzû^]ÅwZ±ŠÒb¤ýA rò¢ƒóuSÇ=ºÖçÆRH|¤x§@ûº°yfh£ ‰!ݬr—m¬¹ÚÛ;d`exðÏxæâ+;m+Å×>Ь„Rò@¤ä˜Æà7rzñ_Gü.ø[ugáÏ²ÛØé†-b7žÅ®/~Ò©rUÄ#æRàœà RÄÂT¬å±tZ¨Ÿ!¹­øÓÅ‘CmáÓ¬k³ØéÒK R¨¼˜ŸÝÌÁ€T9a‰Á"¸eßø‹VÛasâ­9V¼TXÅŪFùÎ$ —È †‚xÍuZV·7ÀŽž"—ÄzeÜñf“¤ˆ Ù²Ûȱ\F"?»‹¾@bN1ŠÓøã»kÖ_hÐY1ŽÀ^G…ã\Çl ›7yŒK0b‹ò1€®Ju'Ü/mîw:0”S¾ç#âO…·¼3§¤³ÜjSj³´šÕ´ù»fFG €Ê•BÊ€}„7l»ÃSëßtKé¼5.¡¬øOY¹m^FƒåžÍ$c’êÊÅI`ÇŽ=±Šî¼_à7â&—¬fÏí7v*L–’¸fW8ãÉI ¸Hp¦k—ñ¯„¡_…º÷…ôû‹ðtKKGžÖY÷ùhIòžˆ]“¾Ã8RIèjUN‰ê̪]«=Ž÷@³½ÑµI¯¦Ôd‡ÃB6<²¡¢€¹Ë61ÉÎ5ÑÅ­Ë£ØKi«Bc—zÅ0o•£u*ÅHë»îä~¾cֵ߸nÎÖÇÑ/‰,îïí-ìiåØ@Ͷ0?~¸ åÊyR¹‡Ú#ñƒiuþñ úØë¢@âQnöÖÖ÷.Ã1J]˜ï[?3ŠH¤èµkþ˜FÒM"ßÄ¿€þ\x²-)Ò_ ý#“ï6Ü}ã×=»b¹MrÞyÄ–º:ÆG¶µˆ`T‰e<ã n î^ÕïŸôócà;h/‡—Ç­ò—ت7`¨ä±Î}úWÏ>>\ð?‚üG‚¥y—W€ùLÎSì²–ù™ÔŒ+‘Ó ŒãÓ U9ýÛí÷Z.ëb­¯…Ž ³ÛYçNþÉb“Ï ¸<)s#œåóG8aÈë\_ˆ­µf[­;FÕ¤»šÞ%”œò~]À+w'<ñÎØøwð—Åw¾»R{]Üê6“jWww缈J„¬qÅ&H‘v Ú3ßœm®¬xçÁ߯¼5àèìžï|·š¥ÓN&²¶‚96±tVÞί±V0À¶r6!$ ôO„^%ðî‰áÉ¢ðSYIá HÆêóQ1£j7Û›|¤ž…]Y€Ê㎽Ϳ횟>xñ¼Ïr²éZ]£Mj.þÙͪHæC "! Y›i.Þ2FU|~" Ô–ºtüŒ>ÜE};ŸŸ-øuâÙÛâ“ÛêwvÖú΋r¥çÓ®MÌàû¹vÞê3È"±üI¨OñÇ——¿hûEî£9–I¤"?9öýâÝàt¯[ø‘ñ+Pøç®?ü%š†›e§h©$Úm‰d‚+xÎ7E —bä0y«_ ¾èŸ!ÕµBk‹-G`^|ˆf|ýß,2°f\Œ`׊îu(Æ¥UfŽhᤜ©Ó—»ê}}û|-‹âgì'†./o´©/oï.êÜ ‘§dP¬À•QÜV³_-~Ò?³Ä²×Æûß jÚ•Æ»§‹KmN)§cžæ Y·C2Çò™¬Êà€+î_ØÂËMøcð™Êg—M¶P àNnòØîÜ ÎÖ¼oþ ©ã£¯hº?ü$:]­¥¾³ö«; Fxȸ´½Š4•FõeØ%^pvò2+ç㊒ÆICi=O¤º £Z«~Ïß·ÌúwÃÚ{NñÿÂ™í ž%„];ªñ+[Go ʃЩXÿ§sŽs_o~É?·U·íwð çÁú¨¶Ñü_`¶úTh³*‰t©nb,ѧ î¿:£‚qº¿=åñ‡û@øC¶Ô®áÓµ¿ i±i¶SÆÆ=TI&eu˜q.ÕmŒ2Ç¡à×'ðׯZßìËñ“Gñg…Þ95jê¶Â)ÑÜÛsF®8etßG¯¨¯Aàc‰£ì'ñÇfÏ"8Ç…ÅûH¯r[ÿ™ûÇñÁ°ëP[xsZ“B7&Í.cÏaLdHÜм˜À2$UüPÓo-umà‹^ºÒôŸí½^6YV+™¶¤›SËÈB7ÈØ't9«> é_´_Ã+]sJµ°f¹½ŠYíd“í LS±”Ÿcôé”®b÷LºÇž&†Y!¼µœ}Œ8‰öÙÀþ[ÈìT™ˆm¸à"&sœãæqŸ,´ksê*^¤SGûDÁ¬iz…¼)$fçÄfQqwöBÑJ–ò‰& ŠÙ>k*äô6õn|3^ø}ðF™â^Z]ßÏ«ÅöE’Ü›{@fýÈq(Ü\žËÂAê+׿jÉà¿k:Ψ‰ßMðë@ 7Ë–¸FNÒòÔË WÏö¾!Õ¾8ý›@ðÖ™w4N‚ñÔ2ÛË,Äùƒ„‰w+|ÇpÞ:ä è£8^;w8*T¦ë>uv}'ðçÃwø¸nµ ö‘uhæK›[DÆåFçÜ·¡äf°?lOŒp|<}R/ëXOX-†L×2ÆX$rîÝÈbpóm¥‰jÀÒ?høiâß|7ð‹éí"K[½XÃ$m¨ešC¹_py‘É Xþ$xòôë-m5 ëWPèè#VI¯ÈØg’R͈ÁÉÎÑæÀn5 ç4䮿BÔá n1™[öKðOŠ>è0ü@²´‹K´¹§…<-£Ú…ÿJh^áù‚“f ³*,AâªþÖ6ß²ÇÀË[Ÿ O5ÏŠõ}14xŒ“-Ôv 4î$Á!ä|ùŠFAV×ï,ñÏ„ümãÕ+¤èvWfÃJ(Ï¿–ŸjšQ2Íç´‘(\F¹,IÀ®[㮚ß>Çöë+‹É]¥o´½Ò·—å“ ÊÍ“ÃH¬xÉ#?A­Få5Ì´.4שÉ~Ë^¡ûdèzíô’@Þ"ÖCïê·îŽÉË·ŒB¦‘U0â½ïàÿ‡t/ xÃL¿ø›qg£½¿‰îõ=Ý`3¸?g‡qbp9rA#,ˆHÁÎGìsg§üøSâ[…´¶ðæ›æùÂêÆµ™ËŽK(Ûëœõ¯ñ¯Š5½'Ä–úUªKâýc_†+KRÔÙàƒGµ’D’Ý@2\:Æ)ÆÀ}I«’ç«(Çá6©QaÔUÎËþ ŸûNÞ~Ïÿ´‡….VÖÒéocMzÒ ñ$Ö×–‰% f6ÝŒ³0àLKŽæ¾9ñÿÅØ´Ï‡ÞÖ~,ioâ IôEÕ bÒnQ¼äH0˜PÁ9û©Ï5ÐÿÁIüAñþ]gÄɦÇqoy –¶£bé𤠋i%”•g.„ü¬që\'Å_xƒàƒ-uxm‘ô‹ ÎåÚ"À®P„ò=F z8,2…(JÚ·gèxØŒD¥ZwÕ%¡ö}ßíu/ƒ~*ÚYü4ÔåµÒ®¼? Ú<ö±)Y-’‘KÈr œ•H;—5ä >;x{PñN¹.§gii¨èVrM=Ø…wC 2Ç#Dཉ‹2dwç>kû0\j á_k2ϧXZèv°N…;Uf˜•'P2DZפøWá Æ‰á¸¬!°°—Yñ…ŵÿ’B oâÌ:¶v¬ŽÛ‚±ùŠœ€1š• t“ÜÁמ'XíØ¡¦ü@OŒ~^›áM;PŠøÜßË—oCnÖ‘ q.#Ud]‘NGúÏCšôŸ~9ƒán‰áQðÆÇK±Ôä¿¶ðù»V÷±^'éß>kzƒ,®o5ëý9ô[K!$¹Hf{kXÆÔS;K!Èaµ#fl_+~Ô¾4ðÇ>,x_Ã=­ÊÛøCB¹ÓQ<Å‹û6êEfÆp ­ÔÈ„µU@õ®ju>±%²=P†›sZžÃmñ¾÷á§Ž†¿k3Ïhöú¶ŸûíÅœ136ÙÐÂ"‘²ÀpIu;OŒß-ü[à©üû>™u}WÇ-osw¬ZLo#¹Þ;OŸ•!Wî„X»×’üTýŸçð—ÂE´Õu}CÆ^$š%º…ÒBl<=h³£\„–GÝpò¦ÈÈÆÑ˪Œ{};ᇼâmM ºø§Çþ!“Ä:qkÐ&µ°ŠCµ¸…AŒÄ¶ò‡d ³Î,Ûr£Çííá5ø1àx-~ͬêú¤W nÁÙM›µï™=Øž(€_>#kí »GV®ŠmQq§«g%G*¼Õ%²GÁ7ž¿ðµÜz˜Ûègˆî XgŽAÁ˜"¨ZOæ]a[ŒOηfSP~æÆÆ‹v’9¶¸ÜZS„*9Ú ñM’À­qd“23Æ=j2eŽõ~Йc÷pÛ['Þ´u6†ûM[tÚH ²«™Ob=ÁÁ©•á"¢Ôã#áÆ±$:óÉzÈ6H.1‘Ï${Wê¯ü§ÆüWø'káËÆ†qáo .&a ·Óçó5I<Èø 'qÏßLžÕùAàí=íõVVwˆ•ÝŒƒ×­}·ÿ¨×tûß‹þ)ðnµ-òÙø—H‡RÕ§Ž1$pXi“‰âUb1%ÃË -ÁÜŠk›6£”_–¦ù5yR©eÔ÷_Š´_ÿhOøÿEÐêRZéºÌÑ‘-­#$îËó»Ýȸ莤IÇøûºŸˆÎ‡¢jÐ@¶Kr·>×[“,Q,¾aßÇoÌyàWcâ¿yÑÜx‚â서ßßÜÛì"-"1þ®Ø²Ÿ›dmå° Þ¼ká•îñ³ÅV)×Vg–îjÚm÷Ï–ñ˜×i*§ÎÃŒ’Ç Ø x4RI[dc76ܺV½­|BøeðºÂ="óK¾¾×®n.í íúÚÀª×Æ¡˜‡mçh@zI&â+KY|Q=ˆ†/ë6Ú$×Ýܤ?dkãƒ,°Ä@iq¿ ï’A§ü_øáoâ)– 6ÎÃ\¹Ñ¯~ɦé7¶þ|qÙ0óRHÔ7±1ê¥W'Ðþ-­Ú|3ŸUñ ê1êvvÐÚÛ[®ÄÂò¤¬ü/îC+¿äÏSÕìÚJO©Í''²<ÿþõ•º:hÞ6Ðõý#VÔc—û5VXe’WË…‰ä.c‚°b˜ç¯³Üø/Yðo‰|÷6šîŸaáVy/-Ñn-ÒT•Ö9dÎ¥’g ó`…ÜÝ…pÿ±7›› ~ß_ø¡¢Í/…,âí¬žãÎ[B IEx·cfðÛˆ2Fzû/ÄOÚsKÒuM¼^l³[jE…¿Õ¢§f!wîÉ ôÅš’æT๭¹xj{Êhð_‹Ÿ->2|;ñGü."i/4ëˆôfŒ?™¦Í.Hº¯8p0Øåó_$é:l‹~ü¼2@ß2ÄÙŽ¡H÷ï_mišv¨|d]ÁWI¤hw:ÑÑ™ÅŵÝìHöñÅ!–!VPL| îÏ8¯þ%ê‘ÛüDÕàÓ †ÆK{ù<Ëh€CjY·m)ÕG\+ÒËe·M+\ó³Jqç¾Åÿ†ž"o |HÓu$Ž ÑcuÛAuO†7 »ãþ,0Þ ×¡ý‰ð5¼¿oÚ-¤’ÖÍ­ö‚ŒË±äcŒgfå÷¯–î-¼Añ»ã.‹áßøfÀXi·ˆ÷ͨ!¼XìL‹—R†´ªŽJc뎙¯xø§ñWX×ÛM´„Is¹o%ž™u&ÜňÚdUAʶÝî[¹ã9W™øKÁW~,è^"µ‚âêÚþK¨õ1áŠH£GšbédŽ/,³»Î2Ããa$©j÷èz“ƒ–—Ðõ_ötð ÿÀ=oKø "ÞÛ\]iõ¤—qÁøo¨ÛþγðKÜËΓ CW¸¾³)—ìá Ÿ¹,»H‘I%‡#+Vüqñ¡<ñs[ñu }CÃ×±Çx‘Em}u³DªÌ¤²–XƒŸ0t øæÓ㿈¯¼y}mâOÝXø{ÆO,z‰ X[HddE@: 1Ä=”g8­°ôjâS»Ñëý#§Rž—È÷? ül“Gý޾&Xkkÿ5ß™(q(ÖJGjçîˆÆz€èÌGjøúÇNžD‚F¶—å’ AÉŒŽTóÜ`÷€²ö³ñ†ëÏÕï/#ð%²I{Ì"k໢¡ AÉÁÝÇ<×UuðûDñÖ­ðÖßþÒ-´mZᢞ{+Y"ÀØÙyf†Uqµ˜…kÕÃ:xIÊÎíÚþGŒæÆB1Z%soᇊeý¥õ ë}84û¡f¢úÐÜ<P•FJaNq»=«¨øÝá ®—¤%½Œö©áë”Õ%+i,o æV˜td9ÀÜ[+Î9¯HøAðÓKøq®‚Ö66òf[…x–<ÇÓ“&23žzc5çÔ®§Ur-F”£M©=Eý•5Û¿|,š=Faghog¸i0±LÑI#< *Ų:¿ÎJƒ“¼×±É2 1nµ[oÞkšt'uú[´°“hcä£`áTî99ã¨'å_ &¶ðÏÂë«Ëˆ ³ïgKxݤFL.ž¤JŒ£“ŽFk Óô}KÄþ…|Gw}‘â+›m:ßMŠ4 {27Êí+à¬lOÝFäõ®\\W3hïËÔ¢—6Ç1ñû⯆ïÊX\j–Sj1[H/ìü¨Öã*P‚Ä#ÌCÁÈÞ~yÙuí7Àz†µsåEow*Cê-¶ ó»HÞ[9çhÚ¸ŒíÀÉ9Ý^!ûmø,ø+ÅÖñßXêkZ~¢Úá’Y_ý!¹ ©%YI‚9 „œ‘´’+‘ðÄoüQÓ/žéæ¿Õu¯Guy B[ÊYåÌœŽ@TŒÈà·éPÂÞŠp•ÑɈ¯ËU©-z¯à}VÞ=Bôô·‰|H÷“GÉÿdVIä$ì†FàÉòä`W5£è0x3ãBø‹L¼³¶}Àº¼kbV_°L¬ê’G!ÌØÂ 9çÆk¾ñ÷®ô»Û 4[ë;=BuÙi¶àl¹Ržs0"GÄ`í¹°j7ðm®­ãÍBû[Ñ4ÝVMu“CRÖY.Tœ‹‹‡.1cxÇIܪ™ùy'¯=*εá©ã°x¥¹€[i­$²aŠ™f`Xòx<08ëÇ~Þmð{Çêú¦•¦Ã©Z±›N{¨d\*Ë4´sªOYìž½x®‹WÐn#ÖáÄGö­bâR#—qpcˆ|äs» žxà{ÖR‹Œ¬Ë£ï+õG|-’ÛÚuíµÆŸtÚ¯öªÚ]ÎáŠË'ϵ'Q¥#pÀäšì´9¯u/‰z ê“,ÐâÔoRÞl‹•GÚ0y>ÞµäßÛ×ÅÏÚZç¾ šKMþ(Râi ,°Å ɾHˆŽQŽNãÎxôÆ+û…_´‹íÇpÑÕ&žSX­â_›žÿq[€ =ªªÉG•½Øãç(½Ovú•—…ñ¥¨}JÝž+,mO³ïs÷‚·#óíN‚ÖöûÄ0‹`Ñ-«H²E·s¸eR™8ùpwŽÆ°ô¿‰þÖçÔµG™Ui~~Z‰#jã¦J’O^=«»ðÅüŸ`ŸÄ©´µÔµt’ò0Ä&k}Þa ßnGç+žrqw±¥*r›å[~…© KkI¢ÓB;FªÒÊíß®3Ñrå@œSÿá!ó.Ûf;¢@?xãl;T dðGçÞ¸ëþdãMð¬Wö°]€²œLåÝ[øÉÜO\``WGâ âÒ/¢°í®5ËûY¼s“åÂÛsæ‚r½{‘‘Å&ši½J…6ÛŒJ^:ׯJÙ?†->Óu<°¡Igd}Ü»>µ¾2é7wÄ i:eò«]éÛ!µù¥¹»XÆ£?*­?Pp0sYkðçXÔ Õ0ÛéMo—4sNèÊ(êêæ—Ì|ä ÎÕœnòŸì}ñê+Ÿ†«áM&&¼ñ\·S*»,“8³ù åÛ(ˆŠíÇGb}Sû>xZé¢Ôå»»>v¥2ÂàÁ¸ò¨”uÊàÉÏàbhGÚqÑ•,cÄ{×Ö_é‹§Em©¬··ÓÛ–Èb©å[ ”-.1æ¨*Hg,x&´¼Oâ´?Á`ž]ýÅ’=ã3Úˆ%º@X+J»ŽP1^88^@í‘â=ÛB»ŽÚÝ>Û{§HŽß!rç ªOf䓨V†ƒátÓ ŸTñãÜÉ Ü¢I®'Ç›)bWb/@™làpkÎMi~‡«*®RQ}ŒÏLJ%²ÓQÛQVF›Ržv™§‘¤hx@O'¯ ÀªZ5ÅåÔd­uÛG±›ÌÀŠ.UwtÉ>€‚Z]jök;ÖÔ-õx´ï!¯’Û㌃ˈ n˜ ¹ü+e$ÕÑÃì'³Ù_2/øÂ‡~³M/ìÛ„ï ° €ò„M‹’§‚Ç$ªzU¯‡ÞáÔ³iZ[É©k¬±¹žV²—ÚÒ3s’Ná·8ލ/ôK]SYðÿÙÌwšeÉ–ÞkÇ]¶ê¨Á–?4¬YÆ[°É늣ãŒSü&µÓí¼ §Xk^Õ Ó`’G.LÒÈIgeÉ–'¿=«)7?v'£B”TnÖ‰gÅG¡Cq¬þOölxÌÊ^'‘F2à° €y"¾zøÑûTk_´M:Ãá‹«jÓßkV°]_ÁŒÉ(q †9Tì¾\Ÿ›!~ö+_âM—мqã;½?Á–v n°=ÝíÜ^h†çËX¤mÜ4…›¡ÆÅcÜ ïþ xO†úu˜4p¶@[ZÜK¥µ·Ìż緈ê­ÇÌÇ$(ÀÇWB’çš»:ªÔ•”(ôGð£öuðï…´ûSñ[J¶ñÄ[ËÙµYçº?l‹L¹‘2`·Â€‹çça˱$ò wj:V–^=^ ±9Œ¤‹k"·“’@èTÆXöÏ5Ý^x]ü¹cÐî ¼áq5ÍÊqs+³D¦1ß©ç ãÅGKøsªÚéIá_xŽq [«˜mLVñùƒæ%ß Ó?xœâ¦¥iM]¦ü‘ Þ²ëÜñÝJ¾ø£â&½ð€µ°ðë)Œj¦Õ¯¤ãlvÊî7»˜·ÝùF7dãÔþøG@ø! ÜxsÁmɟö '*‘¢ËѤ(ƒt²Ëd“õ®ßíÖ먙ßQhô»ÄA#••í ä‚c?ÃŒÉø£FšóĶºäGY–ÊÝ;W³3̹ºüÅ™~^O\ P꺱åB”}¬Ü÷òÿ€vþñÔº¶gq­Á0ÝDvÌìPÞãƒå©Á^AÏíNºñ!ÔÇâHVí',¾s¾ ¿t†0 ’sý<—ÄqøËÇú„qxÚò >ËÌi|Û á öê8äã‚Tç¹®¢ý’ÎÞ°¾„Ë.Q-DæY€ç,ìAÀ>ìMsû7i=EIÉó+.‡_kå­°šÖxm¬ØÖñH© rÿaùÀñn±¿ ñê¶zMÔ,D“™"e’é˜òY£Ã1Á*Î1TY’Öaâ@Äç÷¨O·È :·§Í¦[Ù\?‰.cÓc‡,…bß’xù»c$~u|ŠŠr:Z„cÍ7¡™c{„té,ü3u}q¦]’$´¾Ý4X`¨I>lF>•ç÷_±7Ã?xª-wÄ^Ò•`LKÏö xCjË Š=«ÞlõÆð9Á¦ø*[8™N¥u9{½JxÉ "HB…Q–åG¯ZäuKMñ _lðµM6òiaW‚uºYUHjåW$ŽI$ý*°øÛ;Sm_ª9iÕ§YrÅiò±ðÏÁ6¾Ötëø|R|Û{x… ¬gx# ªÚ£¹=‡Z±®øÚï^HlÛÊû*Èa‚¢ó¢Y'v7}ÒyêNz×+ð6ò?Oq¶Ôaµƒæ„†óáÄ)|#èjçÆ­6÷MðÝœ~GŠUeŒˆÉÀ?wžÿ{ó§ËQ%ÌÜîuZ¥¥xsK¾,žx'X‹ù’3 )°U êÃ8øëšÏÔ<cá»M6ÇYšðëþ#¶[È-ðÒMä¶ï$ãò@gÒ¸_øD­¾\^j-¶“Ä:û9Ñô÷¹ ××NØ êÜ´Qƒ’2=+¾ÓIð-­Çˆ|Aœž9ÔI–îþ9~Ñ*kqû¥m$g'¦Š“½ïéù™J *òÜO èzΣd“xÃ}¬¥cšx<µX‘ˆË&öùˆÁ<xÊ|BðÂéºÑ¿·×¦H÷ j-ãg$F¸éÓ’kØÿá–ßáæµ¬øÚÞHæDÃjÏ—‚¼óŒÀ zddñ\f³§i–:1ÔnPÇ~ñy-omrn 1@£/;>ø8È<ÅD+(Km´©M®mJø/â kÁZ†¹9›Py\$rLªHF ¦r0£ÍCâì]\ßédê:Œ¶ê’»¬f`@YÐ)"I9ÎG\q\·ÁËOèŸ -ô©d’æûL>|2Þ¡0ªbyÝ—ìÄíÛõ5Ûêñ[jšLÐê*-噊tãu!PxÍsW·;i‹åI=O4øeñžË[Ö‘¦êbÛP’&• 6›b‡çMÿ&pÅ‘J…ì9â½ZÊúå!ŠãZ†TG¸-lÅN&ŒfÜrÇåPFå^9¢ø"ÇáGŽdºÑ¦Šw¹†{XÁFUWn$F•”|Äòç#⸎ߵ/Š#³µÒüo4sCåÉ-Ñ„™#1üªˆ„àsßàuÍi:^Ù¨ÒêbêªP×sê/ø§IÓ´Û¹µ ?=fºKI?|Ñ"òZBŒ?½¡ô¯‘>.~×÷ßþ Çm£iV3Û=ëÄm-àÉ{–ò(-±OÌ@ãåôÍoxgÇ^#¶ø.—~/µ×ãž e4¯³(û2K‘ÒͳHL„"*¤£kG²²ø!âÝ|é‘iú¦”ÖÚ„RM Ä- vòÙ$òË’­Ïle«jXeFNSÕ­‚Wœ¢“СñçHðÿ„|~ö²As6,vöwG)ä6%™Â1Þ¹Þ\ ª=M}aðkNø«©øÚÞÓû\F–ñÌá<âï°ì ŽŠsÁù‰äWËßÿg=_Uý£çðÿ‡ÔúRϾÒöbd hpRi µ³´}+cöÏøÑw>ðwƒµ†³ð¤ÐݳÝ\ÈÈwÈ3ÉT@ Ÿï7¨Æµ/*tãN^óü Š… IÔVIè}âŽZKêZýÏ‚õ'S·Óäk¾Ç#Ëä8qèzWðûWÔ>#Nà+ìµû=Åü¿ºbïÛà…"b VÏ'® ƒ_0|ðv¯ñ7\¸¾ÓÚÊHôæ®ÒòçËk$›B¯ñ989Ç*9ãŠûL²ð¿Ã¿>"°ðýü7º3RK™˜%˜”P … mÁ8ú×=j ½çwýntÒKœà­äÞþhà|eàíbûÆ©$±Šº’Ì+A2µÕ¼¬ÛˆÔq¹Ç `ú›Ÿ5­:mY³Öt™õ'ÔÞ;ym£h$[e.矑ƒà ÆOImás^ñþœ±_ͪYjVRÜÅx$Ic@Ê¿.ry< r9=kñ'ƒáñ¬šo‡üM¥Þi‘Ý¿ž¼ãd21mÆRÜåHrJlg¥D*F£Jûv&¾¥Úhât øCC»×íõ]CP²´Ò­’ò{i—rIb *®²í99銵â?Añà&‹ªÏ§]éÉo Z2L<Á#2–˜'9ÄBZfU Ø ž*ßů€QêN¥£x&æ$Óïâ†A%Ò±e„:Ʋ;|Ê£ÍÝŽ¤Û¹'Â_^×t])å›ìÖÚv–¶ðJÏ£*\Ì‹¸_”£ v€Wg:²’ž¾g/5âÖ‡„xwA¹OŦê‚-*æn$ºL¥¡^IpáHðq_SøïRÖ4\ý™¬õ+$5ÄðJâܱo.(˜¯ 8%Êñ×Ô×~ÐZTWÄzͼ‘‰¬u©Asò¬æ[†r>_œFp£¡5èŸ d¿m:Ò;½&âÒÁíâ ×3X›æ¤nÒyiâfëSæ¶¡ƒQ§6™Î~Þ³xÿ×PóïšÛK·¸dU$yž%M cmÀ\Ðpr ¨?àž¾(_ßxŠÏö¶RëúsÜ[îEÌê GFæ` ¡Àä Ƕ*oÚ~ÐübðÖ©â«SJ†ëEÔ †L\œ<±Kœ¬¬6qŒúŽSW›YøGªè>;žêÆ=kL¹&k‹(¨±‰Ôǵwnbñ´rq\ôš–Ù=×Vš¥_íþg¹h^1×o¼]¥÷‡ ¹iìïûB&ÿG‚cµ­’:»Îà6´˜Qó Y‚úŸÆÏƒW¾"ÐnÛB×|›%Ó5ØdµŠögÀx%è¶o ón\ ”V¡ªxÆ ì5ÿOþ·â;X/ H¼•óZ"K`°T—r…Ï_§5šŸ¼I®ø×Á^&ðÖ™&¹³wú³Ï,jœ<ˆùÀØì‚QòW!›®Ù¨+5ýu:#È¥iêsÒx5bñ¼w?aÐ#ŠÒ¯m¡ÒïÑãÓåˆluó ÀˆÁQÀ žI®‡ÂÚÏü,ß[ê:†ÎÄ]\ZˆÚ òE( Ø9f9cóç‘ߌakßá³ø£yŽnfÖõ›+}F‰9b¹¹ÉvíV.Y× 7ä“éoû)Ëðâò}Wை$¾†êK­9£º·1Ïqs)Þ¥‰‰"8þT`Úù;5Ðê®X¹Ë_ÀÆ4ªT»§tÞÒüe¦üLð¬òGªC}¢LÖòâq*´›VE@ëT®~n™gŒW%&Ÿsk{!¾þ‹!B'P±Íœ’@ïŒóŸJÊø)àýáo€!ðîoaªê­üWvbV6÷L÷dq8t¬¨ŒFv€]óÒº¿‰òZx™_Xð‚,ú4L‡Ì¶t*#1´H˘äbIœÁ¨q䗺[´®µêyo‹<1u¡øoV·ðÅÊÃ¥²Þh•7JºÈ¤`­½På~aÁÏZ쵸ô ÙóWKkmJ]r9/5(™aHœ"É#HI,aÜB…ݸ²qŽkRßMhv·:O‘ylê¯ Èa"J ¸0vIǃ‘\–§ððXý¢=+o›<,±ÈK±~¤s¸ÆAjåË=ÔÎ5eMJ)hÏ>ø1¦øbãà6›?‰ÚîæÖ[éuëm¡V$™[xÔäã #Fv¹ôÍ{‡Ã}WúOÁˆ~)ø½mou©x²KmJRIì¬-á€[[Bd„+É>ÕRTcå°ráOƒ|ñƒÄ:f…ãÖOÁk Ff"’%‚LÚʃ*6óÔ1œU+_ˆ>ø!û?Û\jòëGÅ}Õ¦§hÚ´‰ø•V äXÉs’@kŸSÚ{ª÷ûÏKË ÎúXùã­€ðŽ'y-™5¼‚ a 7ŽvŒ…é“WþþÒ²YÚÛØê7ÜivÓÁ3ÄP_-à aŽCrJÕý¬¼ aàmVI!ÔÖööøÉ5ô7æ9‘›qÙ…pXŒÎ ã¥|ø![fµÌpÈÀç½Ü,#^’RGÏâëÊ•Fâ÷?P`‹çÄþ#ñ‡/$Ò®4©­áÖt©"a›d}Êö’(8ܬ3œc5ÎÿÁW|5qâo…Úõµ´_ÙZ!¸»2¿)Ré¥XUã‹þ[;Fî¬*;×Ã_þ'ø‹à¯ˆmüGácõVŽ?>?6 Ï ¹={WÖ¿jù?iïØ÷_ÔüeáÝ+K¼°Ô“NµšÌb§1Ç7–ªÍ¼º+‰gÍë‘^N7/ DkBÎ7G»Ì' èËt‰t;FÖ!YÌ}Àú…·¸®ãâ·Œ¡ñ>­¥Þhš`Òmà„C¶àcP¤ªz•ä瓚å.a‘5! «eXž•o]Ô†§<>l›„8m gÎ1^ëJng‚“Š”,~ÖÿÁ55OØßÃ÷údE?´®ïoÎ6fhµR9ØÎ§ ñ^¡ƒÕ4­NMV5z­×˜–ñ–Ž1òyq X1ùp’;¨ïZù‹þ§ã»ïþÍ'Ñï<Ã?…/-íl-T+±KB‰ ’Àó‚;WÖ—þ2²Ð®`µÕ¢f¹åº!þòª±uÏ;UrO¹¯‰ÌbéâªsJQ•5Ù~GËß´½3âφŸ§éïqqóXCyozmÄ&1‰ÝAG_“’Xãç½áŸÁ áf‰¨éÚ[Í,ÚVn.ÚBº ·óHa€ÇÆÑ…ˆÆqž¿d•»øç¬èw°À ›]ÔîÙc2³*Û ™$’é¼w8—içå”1_TxÊ_é–ךÛDºµºàDÓI$q#Q°`; “Î3Àq8ˆ¸SP¿™Ç…pæ”ÚÔù/âιsñ3â§Ã¾E}¡è>ñ?™¬ßÞDêÆpV› ;H³„U— uÍfiš•ñWãGŒô -ŽŸáÍKPû.‹4·’Å=œL€;<y†YUÉÇO f·ÿi¯\ø÷W Ï%Þ’Ö÷)5ÛF»’k¥îRJä¢)bû¬3Œž%ýŽ|'‹?h}'PÔns¤øoQKñ "¼ !V·Û¸(fܲï w0ägÇnòÒç––G$Û¯ˆQKF΃þ ¯iß¿cÝ7ÃÓ Ò5{Û;HímåHŒÃ*!FØòŸ÷ŒÀœ|Ã8$Wˆx⎥ñöŒø¥xFÖV³°Òíllv¸Qg-µÃ4¬¬r¸bq´r@=ªßü§ã‰®~37„|)5Ô^:M¥ü¯ör¿i’âIÊ©n€ƒlë€A;}«Ê~ A¾Hþ¹šÃRÔ5w[Ï'ÌK‹¶uò£x]A3JêÒ'”8'3—ƒ£íhº®ÆÕ± …W3é]GÆ÷ïÂK øf-;P¶}BîïZº’E·ûvYY $`T®ýêJ2k:ÛNÐ>j—^"ñÅðÖ¼cœ^&m2YÛØÍv«²\–“hhãQÓî–ã3h׳xJÓÅ>$ÕáŠÿİ·m%®åö×·a€ÆÒÑ’íŒdcÚ¼wKðññ¶м?wˆ¼Ku©Øßê7/,·ò®Äe÷ÛVÞæåÓ…' Ôi¥'óó0©W™)Mjöò5<àöøŸñ‹TÖ~(ݳÙÎEõ‚Kmºf6Ìe3*0)rJÌTrÕÂkßôßøn|a>«wb¶ï$±D’D.o#œ¬N„“;8Å·5ÑxkÆ+ñ+Æ–~'‹S°Ò¼§å"¸%fÕ£—ÌD¸`¹2*äºà(šî~øN×âM ñ§{=æ‰ÏÙnk§†Hð» Ü\àÈë¯$Éí] ´®´±Ï7¹SÔæ¾xeRÄ73ck öý$ðßÇŽþ"ÚÀ¯hêÒÌ·›;Ï,$;ÉAÜû‘y Ž ŠxÑÃ)TŸEk™†X‡'esçmwà÷ÄOŠ¿ôÁ¦xW]Öoîî㹆[O- {8!òÔ‘¼äWÀ!ðǃÎM}ÿõýƒn<;ã¹üYûH¯ÙfðرþÎÒp ×W # žT´J¶®FNKqŠúç⯆µ7H·Ò´‹{H¯5)ÊŸ5q;°­,’(m¡ÜÄÓn9®)n.|ÄúÎÉîôç"ÙçcElG,¨Kr¿> ŠÁæ'F)+ýæSÃFR} døg}ð²{ŸÁ}m®øÀÙËio%ÄbÓ Ý# hT’8wË?ÈÉÏ|oû{|d¸´¾Ñt->K{X,WwZŠ@ï/fiRRÅRëÕ,GVãÓî?‰úáÒ> ØL^çP”G*Ü1Ú_,»£È¼&@,{Çjù›â€¼ñYÓuOC¦^j&ÌÜÉk i)¹•>DŒÉ¸³‘¹p¸°çÖ–ITS¨®‘†.ó‚…7¹óׯï‚zŒú/ؼLŒÏ¡yw$²æ’&Ú¼,lf##±P~^•óÞ§£6‡¬¼s€LÊD'8sÜãŸÆ¾óý¢>øsáÏÁÿê­suˆ5k>þKýE¦HcòBoI–[•ÂÛÞ32 |0uÄye>!G•¯[s8QùûžÕô˜ ΪvÙ&? õ{)|LÇ1Zä¨v}ãÏaÎõ« -l'sg4‡$²p:çÖŸq£Ai ÝÙLî-†Qž9ö5KR×[R>_’#Q.âÝw.µÜ×6Çu EðìS6¥#E/î┓ۂN3_[ÿÁ;tÝ&ËSñ·‰$Ô¦>$°ðìÖ3Ù0X‘­¯YRÉù¤’{f-ÇÈ#P2^¾UÒ­ü‹¹ µÝ!LÛ‘õ5öÏüÏÀè_õ­WºÓ[ûjöÖåÒEVš(a}‰nÎ$w>bã(ìMræ3Tè;»t7Ë­ínuŸ¦}GEðÞƒ­êv-&¹9ÆÅqsfäK4ŒÂFòc“üô#žg^ÐÁ ®á³ùµ{O ›5q&Ý·—rùޱž…òêäã9UãÓKâT“^üPšÆýæº×.Öã÷ò[m¤ið\¬®ˆXa%™#wg'xG-[:ÿ„®ßÃSšîÎ ×IÌÝÜL‘´"GÊœˆÄ¥±ýå^x¼"¢ŸSßøÛ’G†|ý›¼EãoÚrÒúÖ(ÛGƒQ`÷ÁõV ÇVÛac†ÏzûãÀ½BðÍëü`¿»¸‹SŽ]CYƒJƒìÿgýìby•ˆQºINÒÙ@ª"¹xÛŸ±—¯‡Zƒéz~£â›]ïWc´Ï‹Ëå •óÞßsF„`¿$jÏÆŸÚ2ÏâgÁ‹qàkEÔt«å¼º•%FÝvL’:—ÈÎDÇÊsŽ™®lf.­iG“e¥ÏG„§M>m[9O‡_õ·ðž­ðßá„ià{¨Ëö{½Fø_ÝÝ‘€à ­”|œÎH$ó]'íSáÛxmßàÈŸFÓítÀWP»Ô"2êÅLx†4c”-"³<ˆjÄ«’IÇŸx'ÇúO…¿jÏøñ¯,.SÄ6:¸,®Ô**ò[å Æ<†eóáÎâ|GãŒõ¯‰Þ9ñw‚,ndMÔoíü1ii-ÓI¶5‹‰`•%_º¤\'˜Ã;Ñœô§T©4ã/7r§*tÓû‘ßËûejÿîüKeá?‡ÞðŽ¥Ûû‹Y£ÜùR*"xòrXî ÁŽòz×+ãe?jÝ>ÊçÆ’i–:—“q}¥ˆÞ8ijH¾uÜNH“e³´KÙs‚k; ø®kˆWÓø®[KCU_ìfÞÑŽÙR –'rÀpÏä+‚9àf½cÁÿ 48t õë[›5Ò<'u¾6»”‡º…­Û!6‚82±bØÂÜñèÊ1Ã¥R:>çXn›1tØÿR‹Q‚ò÷bÄa[‰Ô‚­å¸TêK•uÈ m$õÅ}˦x 7öG·ðï†ïPfð¤ºkLa8³ßÇ9}£d›L‘¼ÄqÎkå ük×uÛËA†éµMÆ+ I=Á¶Š'1˵â+3Ç+¸ëœý iñ ¾ÞXØø¯PŠ8ué›Ãö2Çå·¹”Æ×",Ž® FWlu»=\Å­ç\J‰,ù ¤0O%‰õÇÒ½·öy𗌠ñÓøfþ/XisGý¥yeàÄ1Á‰††Ø„ã;N¥vbð±œïgÔópÕ]9r-b}iwâ‰|Oâxaµ¸m¬ dfVÝ–»dÆ2ªr0F{t¬Ï:Ç< iq4³Ý*É\°;•·NöB}2x­ÙÿÁRxgÀ3ZjšwØÊÜ8öM¾`²òKÞ' 'Û«§iÚzÁ È¤Ø,Ѽñ±-iʨ— Çh9>úׂ¥Íòô=D¥k³™ý”¿f=CÃÿ­—ÄÓA}vÚ•íÍÍÓN| 1tŠ çåùGÌr2ÎÇŒñêgGoÁáÈ|©XÄúUä··÷d,ñ hžÚ xù<Äædp¥wÔWötÖE§†?²õ˜fk9.;–$ºyÍú†m²Î¯€ÛÀ“qPõçkö‹Ä^ ðÚü!.¡¤êš4—6qé“p¨GÍ…–ÂÀv:f±®åV¥äά,œ ô>eøá›_|9ñ÷ˆ¼eâ{“i¨>“=Ä;æì}­H„y‹”Aæ+»F<ÀNG£~É^ðÇÃoË4:|‚Úø,—7:®ÇŠIÊylœðq±°1Çzó#QRøƒáëÚWX°ÕtÛk¹l¤µV’MA®¤¶óƒ<ˆÃ#vÔ2ÌHÀ^}—FƒSñ¿†lî<§ë);yP%–Ï-©%Œ€¸bp ã'5éÎR§K‘½Üp[ÚÔæ¶¨ì5†öZ·Œì5XmçgYdx£´&'‰äM¦F;  *Ž É¬‹º-¸]CŠ;d†Ô3¼²³bÉP£i20l6HÁãÞ»{Ÿ j‘j/©\Ê’ÛÇn±Ù‰C¸o(%‰ Iñ´ê8Ÿø3Jð÷„¥vSiVÒ^Ãw+– 73 ‘€Ì}±\pŸ3JûN/~§–üQøCoªë–Sø/CÑSìžP…/¦e¶x¡ÊË\‘¹@lñ^¿û+|o´×~ËÛ™›_Ð%–ÃY·ØË!E9€®ìHö€~l¯QŠò}3âÃßøR÷Lðg‡Òê[.tƒ â÷íW‰$žikbÜî£Aä`E¡øRO‡?ðÿеeIð‡‰tù,íÍ̱B>PòWµÜ¯Ìyáxšì©ûØrOäsrû6ªEkúÙ¯|j¼µ7‡Ä&ò17Ïo,²Ä© œÈ¡·&¾mý¢¼?†õëïøŠÐ;MkQ;þî+„»@ÒBbTi*¯tÚ à“^ÍãË‹…_ î|Oã”Óõ+{=·1G˜îí™ö4†*Y}7êkäÚoö“¸øÉ®-¾˜.¬ôXd7 k4Å·»FÈ}ÊŒu4°TùçîGÕšU¨œ9¥+.Ǧ~ÊŸ "Ž/Üø²ánæE¹°†12Í+4`‚vñ’¬ÓÏ•5Ì:€¾5|HƒÅ÷¬Ö is¤É±'¹¸¸–­™Õqƒ°Di.Ìr+Žý†¼b“|WðÆ‘e¦=Û˜åK• ½$ÚüÙ?»ÀTë€\æ¯kßuÿÚ7öÊñ¾c¶·Ð54Gº·Š%†Î"XÚDVÀom9$c±Ç}HKÛ¾gecŠ•_Ý5kêHýŸ£¿¼Ò|97ƒcš}'ÃHú]ÕË[ÇÊ~ÎìÊwàÈÄru&½v[…ñÔ÷¢ÂöÆ;¶–k÷·;¤%SwTŽz`)®—ÀtφߟJðúO{ÔÉq{u2´ou)À>êEôQÍtzÞ–5ËKi/ÖÚ?%"’+¦Øo;¶~`@#5çV­;¤tÁ8ï¹æþÑ4Ïø¾-FÂ;Œ‚¶ÎÀH’låÌcc…Æy<ó[µx·Àå·ÚàiV‘G¬r´>{o2°'’Ç8¯@ðç…×Wðô-«5– ö»"ŽXÈ „v8`§üó^mñƒökµø™áù4mCÄ7u·˜g™í앚@[!FçÆÔb¹\•IêÙÛI+s7©çÿ¦ƒã¦nî-õ {(û=b–//Î{Y7!¹7îÁÇ=yÍ{/Åjúçƒ|+l_MÒ,/¢×µHÕþÛ7•"è2\ž Ùéš×ýœ|áï†VoðþÒh ŽÐÏ&/XVs¹±¼œœ=¦ÿƒ< wµªÝ YnÒúñ&1K'ï£>^ 3ó½ÉìOãÒ®­Dê&¶[\(Ë’”¤íÌô^EmÂñXx~‚ÚíÆf‚Øêø¦…±TêsÉ{q¨KnaBï»ì‘—we@–rI<œ(Îz ŸÊIï"U޹‘ÁlŸsüUB=+P–þK›{Ût°³XIm½çrìïÄAr^™Íqû_{FUÎpp]N_ÄŸÄPiú4pÝK W 6¥ }’y!åÜ¿0¼¼¨ëƒÈ­¯ èr]\,±ÈÑIòªì#ôíùW‘üLýª,ü ñŸBðÞ·z¶sjNDŠÎÅDI¶æ+ЂŠ0ÝsÅGðëÇ>8ø¯ã½´ŠÃNð½£JzŸ¶Ü¨e$¢çOÝÉ<öâ©R©nf´:ê%Æœ¤ºu<Óþ cû2ø‹QÒÄ:D­ÕŽ‘lí,¶­p%ç*̪ £+ÇnÕùìh’é·3AwݬªØx§‰¢–#×k#ÊpG_²ß~x×Ç?¼L‡ÆƒÁú¾®›,®d¹‘­ E÷D®'<˜Æã޵ùQñká~µàOÞéŸîa¼Öf>yº‹PûjÝòù«?WËÜr}G‰r‹§)/Ôò3Ü'¹ÉyÇÿ¼ðõ•νã ëËU»¹’]6!ÂÀ²f`:osÙkìßÇâO øg_¸øTðÏwacDQ`Žv‘bRê4¸ggfb(Ç9ø³þ ë®èŸ þ,êz_uAeo«Ù¬¶n#Þ%¼¾@ƒ˜ÞAÏnâ¿@ÊâK¦é÷·no`—``=´M%·kíNóSE£Ý›Hç²’É(UmðĹ}§hfUŽ+¹ø“«ã?ß\èMo;ÝÅdb¶˜½Ä0y±´Í…ë YG œ“Á¨º¿¾½?h»ºËn;GH“$íD  sÍxׂ¼7í}âøÿPÔ§ðæ‡¥Ïw©XéÖ홵„’B-ä/¯“Ÿ•CrÊzú7í%ðûJÕ<;sáoøƒXÒÄ*|ù4W\ÜFÍæt;‡bŽ3Íü%¢|Ðôo@aŠÊ(l‘Ùš;˜°6´r¶bqÑNAÈÀ¬ãVPNkYzt:é¨7ìí§Vúžá_i–7÷mæ5üËqu+1ÞÅcØŠ¹áT(PùÉã/‰–ÞÔ^æÿE’[$_* d䑌ðy$f±¤Ôd·DûD{`ˆ†ÜÊÊäsÀàð3úW-âßxÅ7’jÄÚL¦`€“û§p z 2à¶ySŒsYkY&o0¦ÛFoŒkCÃ^¸ÔôÔ›Q¹Ó­žSçØc à«Æ› 2¡ >ñ$`â½'^×/î´‹«Í 4åÔ~ÇcOKŸ8YÈÁXcÎr¸$’qšæ<á—ðΡw0‚üH±4/,²*¢†`waG8õ=nÙGƒü\—WRÏ%¾£Ì» ÃRÌ1“·€>µ­:r]Lê¥ NFïãm÷…5˜O¯ Ô¯­"gÙÚÚrXᣉPûvŒ#85éZ¸ž!)†ÇŸ±0kÑqÀ¨Pz«eHÈˆäæ¼3ã΃oaãiuÚ\C¥Ü[È¡^6EÓ1ÙÈÃ;pH`b»/Ù> ÚÙËmá‹…køÑ®5hÝX;¸DàãoÀ*·[ ­˨ĺ‚"¼ÐÆU£+’~|\ò9ýj »»›x k)¾Ë§±rмŸ´¼!×o$#9ç5Ÿ‚_6ìï,ü;÷ïšèµãfΕET,õ9ÇøY¦èåÔ×x‚5{––[sªÍåÃ.ÕËm,OLg¶}ó]m¨ø_΋G¹¼µ„'›*ÛÌÁÙx”o\sZjiZ™k᪣‘™„Àåy8èON;~“«øºöêâkSáË»apã3ΰð:?’"ŸP¾¸†x®-¡Ždr!ÚdD?6pÌ@BX±W!ñ/[ðt70AâÉ5 ¸íô‘£Ä<¼Ã)Ê‚ïæFÌY‹““Ív^ðÍæ†-lu«›ÛÝBËÎ6²€“µ]·dr¸àŒžæ Z×L›ÄSÚêú=ÓiZ€þÏy®˜$7ª#%U nbU‰-»åû¤b¦¢‹Ÿ½&ÊyÂ<±‚O½½øÇª|Að'‹üG<0Ú\“¦iÖÙi<‰­Ç—;G“Æaen1° až+æùì.µ-Za,r]O<¤´€4›É9'=Iæ¾æð÷ü?¦Ù}†ÓI‰£³·¼)k ®‘Éqt#‰ÙÔ° î¨#*qÆFk‘ðwÂÛ;+‹«Yé¾—GÓd†ÎÂØ‰~À ¶^HÕ‡™ò…g9#9Åzj°¢äÒv8±ªU¹/¿Sð'Ã}ÿ íŒ?uw§ÚµÉ‚²XäÜÒ‰¥|Ì6Õ÷¹áj¯Äßë^ðö©ã;­BÚÓSŒÂÔ‹¶]ò+oŠ““Ðî`89#"½ áöŠuJÞ+I $EæêNRgy¤YbH™€ÀÚŽX®>ñµ$ÿ ´/h-§§é&æâéÒÖ-Û¤TOQÎÐKÍëœtªg~feÉu£±ð—Ǻ÷…#ð厤u +D!¶ó€’XDW–_;vÙYHsŸJö?‰WZ_‰~ hØjv/qbì.u;iÄÑéq³4˜1‘¹Ã‡f ƒšñëÝwEñ}î›&©f7ïŠ »x£Üe‡#¬@ã{îXIvþ1œð߈º~¿¯Iooà+˜tØ#Qmun†2»B˜XFì€2½ñ\Uh*²Œ–Žç£O5MÑšæ‹9‡?åÕ~#Áa¯ ˆîut]1ZG_.-¾`YC~õ·œr;תÚ|e_x¿Ï´†h|·Qk_›t(T(ëºMÒ`8äséàŸ>^ü(ñôz…“BÃN½†QzvÜH¥dmƒ¯ÊU—8ê=3ôWÃo éþ8Õ®|K®Z];¶¡*Z@óœ:9ó!i•pÚÊHôCõ®šôáʧºêsF2³Š{~G9¥èÞ#Óì´ký&;ÛËÙŽ¡-Ô­Ž8¤bIe9RDŽHÿ®kŒ+»ý˜tí&ËV²ÑüW -–“aau©êÜ´¥FÕH²ÛþtÆåyè3X^ðÍîŸñ}rWµÔïšÎ8®e3—rº‡BJ;`ýص?Â/Þk~>ñ/†ËÍf Émã’Øl pîUÛ¦Õ,3ájæÝ7=,]%Ë5¥îyçÅ_ŠZÓ5›ã†çmRÆM­±v²!RHÎÒ¨¨ÒŽ®™ Ž/ö··³Ðõ»/xv `ë÷wª&k‰„±[FйŽ`¤òÍ» H ¬Ãµ{ìå¨[ø¶÷Eñ~œú%–¹wk•Ðò£%ííævòÖ6R¿+L㑸犚ïž>ÖÛèýE…IIÃ{~Iâ¸4› Vg]2ææKô¸m×o<í6X¡W4L**¨Ú g®‡ã=jËá4š'‡¬ÞÞïAÕÍÌéÒˆüé¢!~yœnf;“óG ×U/†¼AáÛë¿øJ®4ÝB¸/¾eד¶N$ûAÁó„^8ˆí\·‚.-¬õmGKÐ|Aa­­»E,÷—3µÅ³yŒ lbå¾R 1''8]T§É+4n›£+Ò{ô98ÿi/ÝüVmÇÞÖ`Ôu»•1Ej‰³™†’_õl›rX³YSƒrïö·ƒ@ð¦“rÍ™£êsOû&ÎsÒ©†;iÖé—IYÕT¨ìÀ×¢¿ˆ¢AÓ­`i‘!•/ H›!¬kË$8ƒ×šñ?ÚGði^Ò&]YÓôÃs§ÛJ¯ ÕâÏ…‘’äd†' ÊŽà›¡R*J¶_Ö¡ZN½7ͺ<¯âÇí5­øgÇ~%MP#DÕ ·m½µãÜÃd²H®9U‰%]¸CŒðO±~Íþ>Ô~0x6 sZ¸3Ks-ÕÀ]ž\pEøŒQ¿tV`H9!ÈÉÇò‡†Ä?|_öˆ>#ƒO¶–ËË·Õ5Ä›ìö¹^QX°@YNÞý9õ¯ØŸÄsxâL^ ñ£ÚmsM• ¶Žõ%2p#,›42#"䳈ðz׳^ŒUÒÔñèT~Ó–]t>†û —ˆ|#oyá»çšÞðIn©´Ë$Rñ“ÉùXsëéŠÁÐ<á‡ñî£ãMý²òáM»½¤k.CGûµù@ `ãž•ôìߦXøcáF·£k·N²}N÷Wh ?ú/š|ð›‡/˜£’;ÇÄZê~øÓñ'V‹OÑï´˜¯ïJÚÉm~. Ô¡ˆÊÉEŸáNH=kÄŽ!ÝÅ_Ôö*áeI§ nºžûJ|,ƒâDο]SJ·š25|æ És!%A>¸÷ùNï÷ ¢ÜÛêp½½Ý“´r£pÊÊpÊG¨9¯¼ïDljµ]UÕo#¸²íã½XZ î@`™E€ã?u‘œ»»Õ þ ëáoˆÞ¼k­bî=^ò6)- 2NrõòÎQ‰8#;NI䎡C,y³<Ú˜ ˜™Z?ð×Ã^K1 ½ÄFK\üêÃäo¨õ5ÙÏâFµµHl×vؽ’Å›gòÌ[×Ì/Ð |G¹ðÜžeÅß‹l±r ”´·Ž3ŒŒòðÀ˜_|?³ñàOì­sV‚ÎH-ÄWN%V¼šV-æNí+æt*¹Âäô¯’Íñu$ÿ­¼ÂŬ5.nÈÀøcð‡Eøw®xƒPÕ^Öh<)n‹æÍéФaö"Ž™œÙÍM¤ÍáÙü7§ëZRGsµßÚ•ž y t€ªr<k‘ø‰ã;½?X‹Àþ– ìu»ÏìÉg•öæÑä pø>\l±²³ŸPY…iüTÖ¶øä½,’ëž^3[2A En©åÀ¹û¨Ohçž3ÓË«)KvtR8Fç‘üvŽßÁÿ 5íVêòÓN¼Šâ3r;ÜÜÊLhÄ™ßje†X/N3W¿e;Ëï…ÿì¤ñ½„ku®Jþ ˜¬k!šdh#$žmòãîœûá/Ãícƺ9ºøaš7†•¥´Ó­#i_U¸…üÁràýçÊDˆÈÁ"—â?ż)ðO\ÔuT¹´Õ4û(mí¬î£_2 V’5³`«¸g*¸ã9ÍmÌãMÓëÔÉ(sûO#åïø(oÆ?ÅKý—%н֧–ñÚY‹a.›ªÊVãïŠúlt+Q~Ä~¶ñgÁ¸ '»hñ›xœT¬ýÔ?ž"Ó|]¥Þë~¼•’Ò; =fâîäK׸š»T5ÑÖHÃXˆØçšå~ Þ3ês&„&³Ó<<J·ùˆ»“ÍF(Æ[yŽWÇLy™n˜¯1ø ¢k:çÁgÑô˜.n#±¿þݺcóG#B¦(ÞæFû‘£Lï¹.ÉÉ'Û?eÏ <¼c«x¶äjZ”>/³ŸìÖq‰.oå1fã`Ûæ6Þ6ì$ã4¥N8x5'¨é¿k+­¬sZo“YøeáOiZbYjZ~±n—v¶Q»ÒãlÖ©‘½Q”@qÐôõ¥íÞ»sà¿ ØÝC£i:ÔVÚe”rd4rHÊìNšê‘1Þ\ÖM†âO‡ë¢YÜØZéâmrcªßZÜ*\Yhævy Ÿ<ˆÉž¥FN+sö]ø•§ÜþÒ2ÛßH.àðæ‹Ómá€ÈæâVx<ÄUü®XÈI$’OÎæ¥ 8ì¼ú¢œãþ‡²|NÐïö—ø9ac$W†¾Ù=ÇÙ„LWQ®Ÿ, j$ä7°“çùˆI9€~7ø«ñRø¯â O øsû:OÄÑ_xvÒk¤îåc+íæ?%ᙃY:uõßí•¢Ÿø7O¹O¾Ÿ®øvk7Òt›{Suarªìñ,ëm!l7!Hë_+~Æ¿¡ÿ†±ñψ¾*?ÝÙ\XßéÚ›ª¹h“帚 }7»$@¿#æn0 xÏí/ûPÁ}â-6ËFkÏ´ZxzëNŽâ;A䬷"9&’vG!CÁÁÞyÎ3ŠôÏÙ á£x#Æ:f£¢¦s>«e-Å™Ëýª9ÚmÒIqÉ•Uj(  ç%«0…IV¨¢¶GÒ¾;ñ5œ>6Ó#×%Š;­jynŒ?hP–ÖùË)l|­"HçÞ¾ñÄ«+¯ZßjZÂ\Þk‘‰mtøß&ÉòQ»’¬{–lñ[¿uýEý¤|3âOŠQé·1Ÿ]ß‘q,Œd‚+g•mD`b"ó8v‘²–+ŽÓWEñm½Íà“C†)$­¦Ÿ1ò­%_šb¹·&OêN+–•;ZL×5-"Añ—\±ðìm¨0›V¼ÔdºµÓÚ_³Éh·M…/)ûÛeÞ  © qÇÅE¯i_<kã'ˆÇŒ. –öÒÊþtðX¢-¸¼Æ8!•‰Â[3hÚG‰oµ ûíºn©ƒ6½áícQGŠ­l#ýûD’àJI£T¤œWŠI7‡ÿh½án…£j:¬öZ~–—:Úݪ.£½¾ÇXŸ"‡g‘2 ’¼ã ôéSæN/oÐáMAóyhf~Û0¸ñ7ˆïá¶JÓ4}zî;)Ï3<3H¬¹FS—‰‚’ͳ8|7ö’øy?Â]DѼE¥ZÇ©Ý;Þ­õ½Öènmþè ]оX§“ƒÇ¯³¼£\|hý˜>:øcÄvZU·ü#úÅΙ¡\½±¶h­Žž·SÁ ÷b3®Éœö¯ƒ~4ø‡Vø‹¡xS^ñ°5Kæ²:cÆòn¸¶ŽÝ³J1‚%m¬ 8V ‚+ÒÀO–J”^‰ÿÃn>“äö½YÇéÒÁ7rÊ*7  çóÕ!Ôï 7 ­ÆòÜúVÖ‹¥ióha|N[†8ܧ˜Á*¶—ᨴ=Y§Óäib<àv>õìÞ-½O&T¤©¥m ͦ¢1{EË;dcªàpµö/üÁSøËáf»g©ÜÜéöWÛ¤7! ¨@¶Ì*2eeÛÏpOlWËÚ/„u-V}Ýn ;K(Ê&}sÀ>™¯¹?àž_¼3ðûàªZkÇRVðŒ÷7÷úsjO.AòÈá‹:l(rT°É¹òó)òá䣫:òØþù]hI¯|·ñÆk=àÿˆ£ñUÊõ=JþøÏ¦Çˆ „ùB<˜¥Q†26Hð2Üt¶?€ÛàW»‰¾$Ûiï¬jÚ|Ú,1é—HlVuo5¼ÉSlØW@!þñ‚=AÅÀóÖXÒH%‡$ç–Éýò>ÚN|?ò>¢4iC™§ò>hý¬n¯üIâ˜5B#³Ç:‡Š-o®J/ž~ÎÑ<(Ã…Ú°ÇòŒžç5ÐþÊ_¦³ðO‹#÷W0èmu¢[îbä’$&?ãHÈõíÍsߵΚþøGðsDÕå&ÿš]õªÛ¶ ŠÑîÙ¡©+…q“à qÖOØÏÇžñu¥œÖ·—šÂGoc¸V’k…õÏ|S7>5ø—ªË¡ÛK-íÍôª"‚6“åFò2[ {_RÿÁ>ÿbmcAÖàñĈnìÅåµÌ6vïhdm¥eu81‚ žÌsŒ×uYÆžΣô¹çÙâÔ`´ëckö`ø1¨x3^øâêßgÔnµÛF…gäÅgfd{òÖFRAÆ]«ÿ¶uêèþñiø¡$)¨ÿj[ë6p­³é©{3y®ø]‡lAQy ’óë§Àb¶Ú;ivÉ}&ž&kĺ`DÁdYœ†ÀI¢°RrSÍdþÑž!ÔõüEÑ|5g{â{N·°0,–[K9æ/-ÜR1oÞ*.å;€ÀÆÀ1šñ#YÔ©½Or¤#:q;Ù–ÂÇã'€ôOÜE»MÖt—@“zì’èG¹æŸ˜áa“ ?¾Çª|ø‹ý±ûCø’=jêÆ]#Ä^ ¶ÖÞ%/úŽé`ºóH\¼k vÅF3÷‹•Þ|ðÖŸâÿØ÷Ã:÷†m^Éï´ÕžÊ ÷–ÑتY~ìƒnFã_3|-øAmðóöÁðëþÎ~)ÕáðΣa©ÉyçÜ“|‘©û̈cÎÀóMˆð 1<ðN1I¦ý‚t¨F_xÏÙËAÑþhÿ›J¾·}jËU¹Ò‹yN%‘#,â(d;IVR7猯=1_üqñV£âÝ_Lñ ۱±Õ{k3<Äà2ÄüªXôÂ‚Ä f¿B¾>i©¦øsÅžø]᯳G¨‹ë®UãjH¿¿1I&é¤;“,Ä•ükâŽ?a“CŽOãgÀþº´ð‘±¼°†ÓI·ƒ­«1DÛ¶ù{ÁiýÙ$“Ô“À­½J¸¸ÜÎ'‘,É#«4ì…@DõCŒdu׋ux³Õ•ã{=|?ғßÞÃO;¬!·ÒÖTA=¡’u† rÀydnyž9æ¿ik^ðž›%߇.µÍNxµ‹Vµ¶³Œ‘¨¶×‚G€duÉT»#­u¥]XK"ßÿ£*ÌÓ iLyläº a›i d3]W‹5oí§ÝéÑÅn5YãòÛÊdÃ3³“üvãn:‘ô¬ÜÚ’fŠªqQk¡ã÷çâÔ7¾),ì,gFµ¥[ßÜáƒÎ•SÌç† ÃÓœßñ¾±{ð¢ØØøVÓO¼’HHü낳¾ iœ—rÏÃx½zØÓÄ6ý¢`–g”ÛÉk1E"ƒ½¤|€«Ã€{ž5æzOÃmßWÖµ‹Ý.kv¡ ’^@ÒËc²=Â4ÞI”î$ü{•WWâÙt0Tù±•uñvòÞÃY´ƒÉ’ÚkɤŽR’ª€Í¸À)#>Õä>'øÕ¨øËÁÆóÁ:5ž·¥é±Ão\ÈÊ`ÈA #ÌP ÛŸ˜ãÞ¾¹ø=gãXc»Ô<9r.¡A+AsjSvü¨‡åfP£ÈÎ*¿ÃïÙ¦8î|­ò4ñÜù’,‰kó~òH†@*®ÉžrBúq]4«S‡MNyÂR²¿Ìù¿à7‰—ZðWŒ4='ÂZ”7­-¶‹´{kTv…ÝQ“ˆäy$ËdåÆk+ö«ñm·Äi"ðW†¤“í#S.ðß*ghŒ¾mÃ:1 ªŠÒ±'Ë Æì×ÖŸ ì-›áå“jÏlÚ¤Ö—‹KºI­áœFRTK­¥Hß¹~PG8À¯˜¼sá/ x³âv¯©|HÐâµ»Ðôk°úm®¶ÃNÒlá,ÞL¢Ñí±fÞYÿyÉ#¦ôêB­W;X™' |žSñÄñ|cÓ´ß…ÿ u·¾²¦tÓ6˜Ë=Ôïݺ"VVÉbªTIÀ&½Mý|?uš!º¶Òb¾’ûkÔõ+”@ìåDVe(’K»9p+Äþ.ëpx/Äú¿„4ýÃ×hI.dÑàÂÊÒ*¹c&KH„xÜ <ŠûWà‡€ô¿ü/ÓäÖ²m|Aqi-Ü÷ƒË2F¤4…Aôª1…à ì­9P¤§ ëø³†õ97¶ÇûþÍðN§âk½*ãPÔ®¾Ëu¤ùwf1Áž3bЏ‘ÑŽQ¼õ¯NøYð‚ÇáV©®¿†´K}ZTœÏolÉ2‚Gb[|sƒ‘ÆEy×ì¬ók:Ÿ‹:ûœñÛ­E£I©x›N½ÔuojZ˜Z‹Ù#Y&Œ¶¶+’3ËüØÀÆyÎ'×> Áã[j^&¿¼¸M)…¨˜E”Åš<·A’yé]·ˆl!²ÐUDkë‰íÝ|§.͹J‘<3 c'‘š‡(¶»• GB¿…lZÃE¸šÚ(L¾\x‰ZUdg?(-Ï~kkNñ—z¼1H“™ƬJíà‘ÈþÆ©|&›OÒõK»Jâæ–Çì6Êã|‘N%Ú~\gäîÉ'$œ޲ HcŒ¬käLêÒedaÀ‚H‘€÷ÍRMHõ0jrƒ”µ¹Æü@ñëü;Ñ-'±·Öu‘ʼóI˜€€…'¶À pFyù—ãüZÏ@ø{{o>§ªÂGq§Ü!°‚écm6è7–±¼‰Ê8å¸%€u®çö˜ý³<ð÷Ã÷ZÒÇ>±©Ûjmi˜•DˆYfÂá®áÇ=XšüÊÔç¼ñLjiÃ]^ê·2]\S‰%•÷9U2ìp=À¯W,Á^øSà ?â7‹ôãŸ&¤ÞêQYÝß—Uk ,Äñå‚>_0œ.ìö¯ÒÏŽ·úxñ_Út_*;L[ÚËpŸ;.íì‚ØÏ=qÞ¿>þþÉßä ÌÓü6É&‘gso?Údýë/Ú2ÙL!Àè”äduº;-öãÃW6Þ"†Ý"Ìa¦ŸcH¹Ë(þ`Ç@O×<×*é+¹kÐúeJ1~áΑ£.· Í嬚•”oÜùdEcÊ™27ô8ÏJæuOiÓêßÚV:Íù¼?óç²_)vtŽ,ÉÎ~p3¸–ϱ¾/ü ²ÔüKaªßj0éZm¬)‹]ùi,€žffHþàE®KÎ&…¨jþ"hõËíåpÉ%Ê&B²ÈP0aœgÀ"*ÊW¼ÕûRk™©[S;â¿Åx´?XZø¹~à „ žæC=­©SÉgmÇvÜ! ƒž)ÞÒ, ¤K,OèXÀ*z1ª^ ’8ìoÞÌo6ó˜n!òÎ ‘ãîñŒ ã+ÇëPãxÝ=OBŠƒiv*Åâ[«¨¼¿yV‘ …žD|Žàœ`ƒŠäáø¯oÿ .)綆&­–lǸð»zä7êxçŒWy¦I¨ZÉ»l7ÊŒ2„ö5åÞ+ðî½{¨ÛZk ¥i@bûù±Ä$}ªÒàŸÛ’FIÀÍMHË—Ft9FÞGamãù›ÅÔ Ñm!>zì³ûdË…•pÂER>Eëžý*×Ã_ƒÃËW˜=íΡ%°Ûu ß¾AÕB¡]«¸žçŒpNjo x™¼Wb×v¶Éþf·1ÊdQ#b?$í ƒœtüº=-’ÏP\¨{vEÄÈ|±pÀIãŒwÍt9óhMXûH+«®ÈóÙþj¾0ñ$׿5» ­%ÐEœvÂ6òÎ6Ãæ«–Ýý}@­™ü+i£iivWPmIUÓí÷¸·‰xÊð@^SÓVwÄŸx›Çzä÷ yhštˆ †Õí O"ÂHûÉ 6qü©þ³Õ~øOѵ)-<[¨ÊJý£Ìò†— ]ÛYG/·8ÅÀãšÃÙÔRVjÝ(º”ê^Úy~‚5»C¥"5ÈQ$bq棜Ÿ›iÀ=ŽzVÖŸ©Ë¦Ø]Ká{{ bò|„k˜ÕIJ ÇbcŒcr êkŸŠþ_)åŠÛNûdrc}»K²sÊ«r®03œç=ªÖŸ¥É ’Ûu€°7–ã'²®=IÃpsÐÖÓ×Y?ëÔíiUw–„·ÚŒ ê:}¦¡%Ðe’º5<1Ž:ã$öÅžÓ&Ö5=R{Ky5‘T\›t¶’äpV`rã§ËÞ RA¦Ûhöpó›wµ…äò¼£’G#oNs‘ÅP²xÞöI-!.?Ö1\ɸ“’v“ÉÏ'ÜTÉ:–³)Ùû¯úùŸžß<^CÚÇ;G#¯¸+Ò¿gÙöïàÿóª˜ÿ´nµb.´ÛEm‹¼>[LI?7ʼgy d×ÔNÑ¢Ó–Û#à©A¹4þªÕ­#S½ÙUÃŒ]‹µ¸ÁÏQ‘×Þ¸˜¾igDѯ5(–écû»°19Ì…·(è? ÚÓ¦Ô片‰à³»Šúv>]Êy£lg Fzóϱ#85¢ÚSÄl?ºøcû/x—XšèË}¬ÌâÖr¨Õ$ ‘¦?»¸Óô®ÓÃzL¶ý‡T÷nÑï‘̇æ'ï\gnz2+KÆhÖ:Ž·ylÐ_Á,VB />dš2P¼yʼ€»IÎ{ ŒL¹”VêæÔgȤãÚÇÅ?þ6ø¯âí4¯ßêÇÛ•kk<»•¥< U2Ê¿*€ôÏŠ5o|)ømgà­ÖÖ_ø¹Ž‘%â«´±[£3ÝF^L*4’3‚üaWå­yÿìñe¤x6ãÄøF+!â¹V¶Ôuå“X[†Þî…‡ÊÎÁWp裮I¯xøm©Ë×¾+ÔmumRõ€²‡rÆe'x27ÁÆW€q]˜©ÁÚÑ´~ë˜PSåi¿yþGðÏHÔµ]:-kZ]RÒÏLt{vÔåi.gµ+),rÁˆ?;üÄãž3W|T"·Ñ,ïT\-¸¿:€Wu·O4+…ò•O#kÄ`ŽçžËþû}6îëI¾‚o²j/ò®C‰2NäÎ}NO~;Ô~·ˆµˆ/§† ¤ÓâŒX¦<¹`›¡ráö`¨mãë’u¤ÎŽV’qÜã´Á6¯eyƒÜDPFì!ßpÚ<ÏÓ¿&ðþ…ãÝGQøŸö¢Ú´Û²Ü9xV^<¦@F0„r^=*m~?ìy[PÓáHmí„vÏmo¶$Ÿ0¹9v=8SõÝË\¶Ó¦²´Éd²4r£˜,íp伸ˆÎIÛ¹¿õQ—+wØ™Æ5ËúG…´/ i †mJÜ;¼³B˜Îç1nÝ‚*ëü»W–ü[Ð/­oï5-Ñc·[Soi7„Hò3çs©V;2#rŒÍw:?ÅÏk2ZkZŠ}ŠÓ@E[©XšÓz±f(êrØ Œçq«^#ñņ‰e þ°q ÄÂ9V˜³# W(^9aT¥$ícšP–§„øgÃÚå·Æ?SÕô=Cû9Ú_ôuœÉ%°+°Œ®H îQžxõ¯XÐþ\hÖjW67–2_^‡ºµº.¿bPåŽAÉÛÆIQƒÏ¡èü â+C⛽3O‡P·þÐÝq;M“íÇ>NCHE8À=«Ñ5‹KßYÙµíË´r¤°Û[Îb]ûJ8ëæ'kårÁ `¯^Z+XÖ6ãdÏ”hë–ñî³ý—¡CÈðüf+acæC;´†6ä¶yÞu¿Ρ«þÏ+ܶšß6ûËÆÎâ5ò™ÎæxÎ v®¿Äßm,µSsÞ[߉ RO–“RcÈÎ}³]¯…´Gáö‹cg©kÅZiíäMAaÉÃ3nT ³mUùÉéÞ]hû%iÞî³±Éø;áž«àkë8-´ñq&©9K‹·žR–ûbá¶O- mÁffä ÞðÞƒŸ©Øê øvê{œeaK¨ÌgÍrÇŒaœŒ‘’03ßÑm¾"Aã»Èì­g‚»^.¦´I>pKÇóÌx<‘À®{Çz§‡¾xTÓxÃL”özìwÚÝÞÉxëq ,bY~w"€–!TïR  ò é-žÎh´‹8ìæ,žnÓŸ8)ÈÀ91œ÷SÏzöhTZjú¦xxš2ÃÕ¼:¤ßOñÀ¿kºk¾§£øÆöóE¹¸XXÅc²hàxdáʀǞx®[Ç ôß„Þ,ÕµOÌ×>!Kt…‚%µËÌ"wràmÁç¥|¡ð/öªÕfÝ.æyo$ðN»wú½³îýÄÑù鑪äù±¬jÞ€® Û­ÿjh5–ðƦ<k§ê÷~›eyco›mnm‘Vê#*aƒ~ÞpA'á×£,%_wá×Þ}5 ÔñÔâífŽöÀðœ|3iàŸI≄W#T„ˆ—ÑÈJy-lñ#M }Õ`kàÅ뿇ž-µ·¹’k.ê_±\ÇÍ}¦6B®G÷îe›ÅqÉÆ~„Ò/¤ññ™ga6¨xvÂöÙŸ.ádˆ3˜Ã3=Ç,>WLb¼ßãþ¿½q¤X[é®×ž,ÓâÓõ IŸ§DDC.€–2u9<|§‘çÃ̽Es¶¶¹{J[Ÿ0~Úü7«ø³Ä?þ^Ícms}5¥åÌ+0ƒUœ]•‰Ýû°qN Šð]ÆÏYÓ¤Y®•/fsåEp¡Äü}Òäðw`sê9¯·~8þÌñøö]] ßÄ3^ÏáÛ™Rç\žÉ®ÖÚF}Ê’Ab‘6 &\" cÖ¾ ñ—†µ…úÌzgNžfžÑu >çí6š•»;¢Í€èØ4nªèGÌ0T·µ–TU)û5-¶¿cÅÌi*S½¬ŽZóN{+émîËÚJsº ”«FÝÕ”ò z¤0É¡¸¦9ã¨=««4Ýaa_ÛÉ-Íû×òLÅ fa™dê\(ÎG¦O\V§Ç/‡Z‡oícðn½§êÑù`‰m$,¤s œÎ1^Ÿ+P–—< YÔZ¤}ÿqñÝÍßÇ-CÀvPØYx‹@Ô®ÒÆ^SsZˆ“® Ò•cЃëÇèߨu¨{Í™¡éо&G7B €¡˜ðY·Ç%½«ó+þ C¡EáŽ7ú­³=ýí¾t#Ž0Ûâyž%B»z–ØÞÜr9ö÷ÃOÚøÃOð†|-{tšíî­ci§}—´‚kŒË#ÝË¿#~QFFk泊kë ®ÊçÕäÕL<`÷Ôó½ÚÇR×kï·9PAv’_1¢ùxb(ùÛ¦Þ½kÖ,¾/kž"ø©«EàKMFù´[‡ó¤¾º¬Í’þî4ÉÝòŒêkÄ?n_†7úý÷ÃëSkÞ%Õä¶Ñ­­~Òfžþh­"D{‰îj0ôÛ©hô;*4©¾CÂ|}ð#FðW†¼o©ø—ZžMGHðVâ=l#Ib{ÝBk´[v FaV·‰ d,Üž1쟴§ƒgñGìÿð«Â_¢ÔãÓõ^Qu ¼æZ[ÄD7 F—j—8äæ­~П²õ÷Äωø_àÆÓ­ü'áÏiúGˆÿÓÎë‰&™Œ·É°# çÀ¯TÕ|wp~*^À‹n¶º&—-µÎ¡$±ù¤qF„#*[#9ö>”ë:Š ;Ùìy\´é¹£Èþ&ü7³Ñü)¡ü=øc¯ÛxzÚÝNµâ F8¥Oå()ö¶S™Ì'ÊC´+v8ÍOðzãÃÞ ý–>0k&¡tÿÚvóÜ5ãCä8¹‚GoÌZGb<Ì‚Ë Që\Ç‹>'ÞxkOñdž--#ŸÄlŠÉ(KĹBB•hÈ!°Ip8¨ÿfo?Œ|¯ø&Iî/.åÕìõ=EìciÉ…¤%xÙ˜gŒm sÔÖ’¤åMó;u9¡]ÆiE_ñûY𥮡â‰txõÙ ±›[ŽùuË™Á"qy1¢¢ŸÝ¤hÈA$eÜ““]ÿìðzïÃÚ1üSh"¸ÖÞ+]%A?"ìVv‘ïV¼Y³Âˆ~Á†Ÿâ-,´agq½áÕ.L7â$V;Hã$©çµ}ËámJ?aÕ/4Ýæòh×3xg’9Xï#Ìä‚\R:ìì´ˆ¢‚gºŽâæK×à³g“ùóØŽ§ŽÕ¤óYR\´âTpq¨Óž§˜Ü|=Ô“ÃÚÆ‡ñ;ÅÇW»¶Ñà6þR‘mg+p°³E(P2Ãqÿ?d›Ï ü/ñ•Ÿ‡ïëUÔt3ceç-lüéðæ ¡Ûq8ÜpIè+Þô‹]9Õ,má†Ýä"Bžj"“– žxÇ¥h*ÛϪ*AåKe€‹T elü™Pù+ò“ŽA<÷¯3ës÷’êzMA¨»j0øqû'økàE¾­w®Ë&¹­kL÷·Ø{]ˆÒ3ò' qË199¯uð¾”m¾Æº¤×É„°‡x` •Œm‰ñFûAÓ|!¢jSkïq5ìKy4ÒM,è« Äœ²«:ŒáÉ< è´»[›8n¯æÔ.`fÿI›hß/?*¨+ÉëÎ9<֪άo'r¨ÒŒg̈âÓmõ_Çraµó¡‹ìpJ°2—º¬9ç @ sWŸ³¨Ðu»^Ac}ãedkè#h­í^ ¼yb3³!™¹vs]ß‚ôi/¯þÉKí>mŸÀU‹–#ø‹;VÀ³[$…ui`¸º¸»Í‘ò· ª£ °À)‚A^¡þ•”ŽÇu8)^R1þxWLÒ~ \iK}3Ãþº¹M6êY~iat% ‹À æ´«¸œ €ã‘•-|S¤xö°ðž›¦XYYXêZ_ˆ§;uItùâÍ–`¹,ÊÍ#1Æá'ë_P_xŠÆÃឯiákÃ!Î#º{v!ÔmªÀ À3îVäcœ×Æþøoâ¯~Ô’üDñŒ¶¾"Ô|]fu>ÎÒs× =´âCŒ ¥•r§o\‘ɯB”½ª““ÿ‚rã%ìa¢>›0êšgÄM=>Á§®¡¨í±Šâì´m‡”íÈØƒ’1ž‡æ/ø* žð÷„,“H×µXµ]SâF³y=¬V²*‹ˆÞi· CF&šTÝ….Ëœ(ôOŒDz¦`ŠÂYå¾Õcº €ê麣'?¼$Œ„'ŽÇÉV0§½}NÉ8Ôm­Š¾Ó/u»(b–÷T[k€—7ež8Ê£G'—€‚3œ1­Y]i^#‹L¹·ºµØžkº\!ˆ´ŒŠ&Î]@ÇÝã§98®/ºόµŒ¾(Öu¥NÒukˆ-tM*I•á·TÛ‘¹K&rc `"ääòßxYÖõ–×|õ¹O g¨M ¹.äÆ†í»²¥†  ×P{׈üø«âoÚ¹|Cn£Ç5ËµÅÆ”7Âlmƒ©ueU.¬\ó‘’ wЧ:±s¶‹«8ñ<”»½öG¹x{Z¶´ø<º·Š# žxdXÝ#E¶ÜÞ[9b«¢Fàñò㹯’þC¨Á¯êÚýÍÂ¥—‹´›½6[x­…ÌIhŽò¨…·+Kó†rÏ  ¿jûKø¨k¿õu6ÐY5äún›d±Ë{+*ªÇ»¸<pÁ@'Šø;V×F™ð‚øW×PZ_ɪÌÖö{ç··X–8ħîH »œƒÇ•èà©ûNfŸ‘çbäáN=sÓ¬üxßÄ^5¶ðä¤Ê–qi—zTZŽaòcE ÊQcódÜ2¹}FM}&7‰|9go¨Ãl–w*#Ûo§ KdO/Ë1¨Sûϼ«œwÀë\¾ƒà/h¾»¾Ðü¿iR½ú©Vºó#ÊîäɆÚ»@Ú0½ëè¯Ùzá>#xr=SÇêâædHáF™¦Í@¯·÷fE ºFA®jq5ySihŒðñ”ä­ÔØðçŸéFe½Ä ÂŒ¶ÞB°æF*?t gœu éÍj~#RÒÛA>&³Ñ/ouÓíY®*Š\Ê©Œ·Þ žÆMv^"ñíω5Yü+¯¥œú{º^¢[‹·¼Á€ƒw ‘¦ÒCå‰b9Åcx¾ÇìÐ&³=þª]H¸ŠÞ8.u(Á !\mò‹asÐ…ޕ䩦ܥ©êû%NJ+s’𦱦|8ðññ'Ħ»šÃ[xì4ûKì‰`wà O¸îÝ#áÛ§-Ö¼ïöVÔ£Ö|Qñ:ÎAÅ¥®µnî…Ä{Ÿ0÷…Aã`ÎzWMûxXÚxköXÕ Óu 峂x.'µI™®.TÜEº(ÝØHàdíœÞý…´{ŸxvóYƒáÞ«áïê*†ÒD¶¶¹šXLLˆ—&KY|Æf™z7|tÒœeSä^`½„aJ1ÖZ³¶ðä:uÍŸúK y#‰¼âjL Ûæ?)$ä€éÓ©sso˜Ö÷ðK×Qy¡|¶O³Ã€F»¸ÏË÷sïRjÚChèlàµH£@QLéû˜Q+¸p–b#¸Æ<æ·m³Ì âÂê$!aÇ—ýíÌä8ïDbŸ¼ö8—»£áYíßÄ2ßEsq·NXÚwy…‘Y䕯Ic¹ˆÏn‡¹ßÚ+MøƒñçÀëáïÙ¾ÓM†]jéR5y¾ÈÖ1£¦iHRw4`Ž8'œ‘^›à?ƒ×SødHn"Ñ-ÚÜ35ÌClÊH;AƒqÉaÛ±ªs\j¿-ôÛOɧÃxÉ-Ážiÿ­g*FAØ@ 8è3Žk µ#¥Ôôð*µ$ÚŽçÏ>ÿ‚qü7ð]…¤š¬Ö¾>×n#puÈþÙ§$àfO*ÐÁ˜í.[9¯Vø_û |:ø.——Ÿ ´{ý?U¿Í¥Ì’ÍöÇ…Ñ–F<ÂÞXo•°À#`W[áßk#K„[YîáŒÜK•ß#'y”’†=AÖ£ÒdÔ –9ô±q¥‰ZYîíç`3•öI·%²PHºâ«‹«7%;ëëoò&¾2I¯Ç¹n øcE×Vöñ®C\>ÔÍ(—~Ð Õš@¼“‚9Åh|Wø¥x¥®îu•Õ³6Ç=®srÖ¶ `//‰D¸$íl¨ß€3K¢èÃOÕ'”]ÎÖÍ„ˆ.ÕxÔ+bA%˜’§qÇs\Πx¿\Õ.4ÿŠÚ¦‹©xfêçφÐÂìÑìlÆNXÉ ’:c˜?i+­¿!F”ÔN Ä?u½cR¹ÿ„='Ótn–j·‘¤Miåíž40ç?tõ>þÌWÞŽãUñžg}ªAx¯§[¬­<0Z¬ v á¥f–V,F`H½Ã^-Ò|}¨5¿´d{UòŒ’Û…€8*²IíÉ>ÕÃø»âcYxîÏB²ñ%•…ô×B)-åƒÏM¤}Ò©†RxÁ'´­‰n𦝮—ê(á©S´äîÑ…¥Åã_x¢+?ì OEÒl¥-Üè°#c;c„»cq F0I®§ÇºOˆ|G«XXêöŽ”&’îêö9ŒQÚ"¶9$SÎ{``†#ŠÞÔl£º¼‚]vIÛìüA²¶ÙˆzF,¤€;çä1†ä9 ŒÕo‰¼+ãßMy}{ªÅ§Ù,°Ékgsöpˆ¨»Ó(ÿVTœ¢íç¹®FÏöØÓµO‹#áÇ씞ñí” u¯jPS¦hñD¦(mŸËVi¦b­û°Wî±gÏ]!M¦ú¿B–¦ó^îžG«übøO©üE}:Ã×¶qèóø˜ZÝ3]D²»”›¶|È6€0œb¯Œ×á¿„t/ÃöW:ŠX[ìî™drRY›ø]ÌqÇ8®O×Õ$VšD¯§µº‰X”&FØùíœgsu$àsÖ³bñÖ›¯[D|5ya$Ó§ÚcĪsïÛ9þF¸7ã7ÚµÌZDâ€líldŒã¶9ÀñO‰.<+5¥¦¿g2Åq#ÆòÃr#“6ÆåƒºpíšäÇ×—q2Ùê·Kº½»Ú|‚7ÏW/Ç'¨ŸJ϶øŒß´Y!Ôäks ®Ì$Ì‘ëÏ qŽZ‰ÏÙÇž[”ãyY›w>=²ð¼SéžE¤S¸…’â=ªŽ>îçðx$c æ¼ÏÁß[Á¾Õ#ðÌ­*]j77÷#j©Žêy Ž[wÍÐå[¯·§éÓø’*úS%¼Î±Ë*ŸŸÉoxÈúëµ ²÷×_fŸì:@r±¦Ö ѼÜ2€öéDjFjñ5œ~ÏCᯌãÕ¡]:þ{Ù&¶A ¨c‹AÜ£cgi+»`ŽõÙY[[I¥,Ž<›xü²!%òdŒú޹5㚎¡áù®!šK kxÉg–[k³Ùãe¦!Á韘sÁ5èñ$WÉz ³ÔlàÉ“ío$³Â§î”•ÉËe²Y²qŽ}&RÒèæ’•Ëm KXɧ/ØÖhï!¹IÒb ( ÊrNïSŒvëYzÍäZ½äÓÀ ìâO-ÕB䌨Ç\q×µ_Õ,n5]A¤šh.UC1idbäŽFqòÄÒ²µ${(M¶¥e‘Ä©º²ºí#{9ëc³]1Œ]»r¿Q¶ºÃG.7ƃ&_$(A‚8n½ùô&Ÿ©j:må„fú ¸b%&œÆ²LÈUðö î8æ$È;¹ª:^øžµ”¨.uùŸn;ëëÏ5¢´Ž`"BILá”HSœnõ4ëF)k°§¬l™»«IjÚÃj š‡xH¤ÃŒ|¢%n‹ƒ¸ç­dÞüQk?µÆ©¦¥¦—n…ÞM™™sò©EK¿BI<3ÚºO´YjúrÅ=µ¼¶ñ Y!X<Õ–Ldƒ/@]Üä ã“\‡Ž´7RyãÓã•òZg.2r €9êÀxì9êQuQ•¿¯#Ï­‡©VI©=š.ü9¢x_á~i£X/L$2ݶÓÁ+›‰›;€ç©Ï9â½ûO[K(íôI®¡hQ£’á·8(1Ž~3^%¤êZ[i°xoY·šFÔ&C¤âv¹˜3†oesž‹Ž™¯Sðà6«ˆæÎWò”² ,D[U‡Ì~\“Æ{ ÷+Ëí^úýç†têÅÆIÝìA6‡ÞÚec ·qÆG9e¨^äø® Ǿ&žÛâ}µ¾‘p`ÑÒÂæWžd*Zà2ì zl I8ëÀÍRñÅëÍz;ˆ4ÒÐXZ–Ž}L& ²ÈH@;r{œ•QÔñ‰á9¯|F¶·Z ó\]¶’îñ7F‘"¶Ýä‘’;"s’3Å*tçSÞ{Íwµ8ßè°h6´¼‹ZÖõmBòíKHe·ŒŒ" m§iÆÑÈÏ5é¾4øu{­ëtP´÷°Ü[“m o ‹Ÿ-›9@㸎pOjn³àC¢éð]O{i¦YÁžú`f½»cåîŒä)$‚0Y³Á·ü¨Þé«êÚ„V7PÚI¶Ÿ[“¼K$‡äÁ)Ér9®©MrÆÏcŽ1rmHæ¾|,ñ>&½×|my¦ÙÂðâÆÆ=A¼’㈼ÉÂ’©bNx"½ãß³µýÆ¥O¬"Óläo˜~èyÒo™ ˆ’Hfçcw¬ ÝEàôÓnŒ¨Ó^ÑM9ÞÒ£¬áSøA'‘ÀÁ®ëZø§âOí6~¶Ù¤‘šoôxÚ,c%ˆ9êÜœ¯¾kо"NÉ/™éPÃY]íØó­cöy óê6ZlS\ÞJ.|Ù1$‘$LHM¤à)P{q’z×A>¿gâkké-ç‹N°ŠÐý–[`%aÀ ¬#æàkGZÔïî ÉðÍÇÙÞØã¸y’cp¸ËC’¤>nµóîàwúž¤þ•ÜYê ªk7·7I,lÊNÑ,m´ä¡@AÃî9ÕWYµQìwBŒ`×&‹±ÒèzµäºÇö¤ê’^Caó…´~B¢0 î9aÉè+CF’ë⮺5[{[+K(~Ímų‡•á’Bó±#ïÉòmÆ1·Ôâ¼×íÖ5ø»áëÇ£C|÷Ðí&Ö[k”;‘T#,7ç'Íu>/×m,þhqh6·W7—ºŒ up>UË1 ”Þ–wÀÇ'Þºoß F”d¶9¯x»_Ñ´÷þǽšéÄuÌR –2ÈÃjÙûÇk?%†ÕÕ[ÍROé3YêÚUê5¶£»}Ô^BKV]ñ¯@å¶°-ŒN2E} þÒ>ø"´²†%¶”y« FC“³ÌÜ噎ӌ½Š½ñ7ጾ3ðe¶­á«KKibB ËN3£æ/ÊHã ·$Ž*–2²”~g%L½ÇšTÝû¦|á_„3ø?]×m|%m«O£Gæ#[ê?º¼Ó"I ŒKtþãšé¾!øsI)6«wt¾]Ã-Æ«sspYnɰ$KÆß˜é€ÅYº×šÚi â]ÁksqöY˜èîà ¯@@+ÏqV4]ïM³M>Ù#––k¥iîcE•Ëa7 >Xª¹÷Åu¹¹ÚLòéÓjéúþ® ÔmµnæK‡•ã‚ÞÎÒb!„¼ž\@"Ÿ˜ ¨$ž™É­M[_¹ðlj“QF6úE¬·¡—3 ˆÖ×øw,y=94—~žåc»ð”14öáâšTÚÚüÂŒq¹‹m9­kOZkú핦«=Þ¸nîÍ‹ÊV8₇]ªÏïTd“Ó³|»3zqš’[3®EмMáo_x×\~¤ÞJÇ,“ˆDh̾cG/F`²TtŽzV'€u ‹ÿ uk;I÷\i—/f²Ëœ£¨ÌSB3ÆÖàéW?kéºOŒ|8ºæœ÷Ú_ƒ¼!,WÖjïÚ5I®U‘!ˆdK ,HTܼòHÜðþ—¢x7Gm*{tÛS•mmg3ࡘ°Àg“?/Ì'qŠàS‹ƒjþG¯8'hËr„RNîÎyo`ßa#C6bÖxÙv´`òªÄ»a³Œg5Íi?fý >(kÚïÄyu?øWMÍ¥½å›[Éâ €¯¹¦¡¤·Œ¶T«ngƒ[+¥êÖ­n–xâ¶·?éÖðªÜ¼¢W]¯˜¹w׌W¦ü@ñv£xÏNÒõ§¸Ô¼@±› {==waú˖ò0F3Æk:’q—4wü‹‡¹O’K¯Såÿ|'Ôl¾6Ý_è/%–Ž-®#„lŽiRmöÈ‹ýØ×>劜ŒPÙX?†omẺˆÝêì[θ‰C œ(%˜áÇ' ÆzWÓ?>Zè :Áº¹IU‹¬E<Éö¢«ªÊä§ŽÑ_4xûU‡ÁÚgÙ4Ĺ–ñdÆ"+¼…†á#œ³0F9ãšìÃ×UÒŠwhòëᧇÖKFoø/Bÿ‰‚^¤³O¨_5ÅŸÚ˜ÛíucbA,½8 Ü×¾|.ð%ÇÅ ÜM¬éÖ:CZǽãe@Uòãl™ŽîŒÏoOøi«.­qô‰ QØê) ‡mû žbU@$åŽ=kì…öÐë^>³¸6éð­¬Zµä±0º«S ~dVαØW>:N=Î̾“ž½ñ¿…¶§}7T[ÍBA†_6Ø´ÉÈÏ(¥A²1“^Gñ—âðVMËM‚þÖ‚¶îËá>ñÚ_>fvà´óÞ¾ ý¦¾%[ø‡Wkï†ðjqjóJ|/O»-w|¦q¬AV|ŒÀ æ¸?Ú øGÀi®x¥ ÕY¯cÒgÎ4….ž Â9"‰¼È›k)ãÄk =Wh¹ÞÅÔÿyit|–°h¿¾1x_Mðÿˆæû®©*Î.Iª¼ë$n»ðJmÈ)ׯL`åxCâtšçÆ @Ð!’ÖÏÅþ!µ“Rµï’[ˆÚáYW‘˸e †Vàb½›Å>ÚÞi~!ñ>cª"Eîˆø±Óݱµ•× dwâUã§sPhß ´= ÅÃÅ~ ÖÄZý„Ø_:âùf%ƒÝKM« @ˆ<¬ 0`FkÕXŠiYÞÖüNzêBJMlÏ(ÿ‚_/ö©×ż0­œ–öfÂ`AycH–7gÂLÑÌ3P|÷¤\›¿¥Ò’òH¹ 2OÌ×Ö¶ïŒ<⯅–RiöVÒx[²ÚIòÔÅ)If¸Wƒ³F@ÜH!Éç5òLJ<:ÐÊ·3G¼!G<ÈÏã]Ùt¹¨¤ÑØÁFµÓßRksÜË*;(IŠEÀœ÷¾E}Ûÿ–øÙs¯h:߃¼[}ú~™mhmñ^c¯œUàLÞRajÜqÀøo\ð=ÅÜxáf –r§;sÓõ®§à7u„þ#·Ô¼#9†{6>r+2¬±6Uãb?¼¤èH#¥m‰Ã,M êgƒÅ<6!7¬^‡ìΕâ×ÃÖÚ<2ÞØ›)ì–(Á„>J,Y!XA!öÀ§¥ø#Añlzu¥´z´?ضrêškÉ•"ùn–Ê锜ã·9¸óÿø¦ËÆ&ømqýµ‡†­´xuK‹¯5— ,%£WØNÑtŒ°Ébü€>ËðüêËo¥}¢ÎÊîÒê vÈþX8X£Lò£{~B¾.¥7N[ŸgKÍNíŸþßVÞ<ñàð‰¢èÓhÖ6vkchfU‚kû»e–A½FøÒ&G30\JFNF>gý§´]&__è÷¤Ü]xZÓ¦ŸKÓÚÆÈ_&|ø¢Gw2ll#M‘æ2·h¯¶¼SðCUñGÄÙõÛOë6–ò•}.ÚÎ?²Ë ʬۉ£«ÓŽ‚üvý…/õ}í~×ü=y­H$¿»Øžô4™giGß&IÁùr3Àë^® ²¦Òr±æbiûZO©ñÅÕÄÖHªT*S$sé]ÍçÀ™üuðFÛâ…¾ÓwªÏ¬Ýéú¦Ÿig¶;h£ŒÊ&på*ª6îk/ľ ÕþêRéÞ=Ò®tÙÕÈ)rí•¢à.J‘Ç'·\©¼I-çÇ‹mk[Y5´=öv¶^PI!™ÛɉÈÉ6ÂÅÀ Ž™5ãï4ãÑj} :œÔù[eŸ‡^·ø/à-2oÛ›®îŒšÅΟr-¾ÏÚ³”u,sÈ6¯D-Øsáÿ¾%k> Ñ`ñ‚4)4ßøºÂ÷NÐ'—Ë–M%x¢žövm·/”f-¼Œ¢ô Ÿ£þ6.àÿ…úïŽá]GQMAQ¦S$RHV2Æv’70qÈâ¼KãwÀk¿ˆ_íäðÞmំº\O7î’Ùî OxÇþz“$hXH â¶Ó©Í%¡…vâ­pÿ~jžÖd¼ñÌ—ÒêVzzÏ5çÚ”f–Bá\“ûÖRÜÎA9ã×i±µ¶ƒ®kºÅ²Ås{ÃdBùp3`¼€‘’¡™ ·Q]W‰|aµ¦ÛµšÇ­Ã¥@, €Â,ÒtB~eˆ ¢äî‰À=Meé¾ oˆ××úTZ·—4P0éØÈ†9-†<$¹ÁËméŽ+©ÏÞÖ8Rèy}·Áû‰úÇ„¼à[EÓ-Ú×ÌÖ5wy\¯ÊœsÆHÆFI'‘_[~Ïÿ £øIáÓ¡üÓç·¼F&çPp&a)B´®æ`[€§hàcTÞð¶…¡ƒ•4Q]Æ‹jfr#‹ËQò¾>drÃqV9!» Öö»âX¯nžK+ر ¸º×aˆW÷x.FAÉx®~§ñCÁ×ÞÒu‹kßZÚx›X¶{=>æêÔ‹kv²I,©¸´ªTíÝíÒ¾²ø±¢ø(é^ ñ ºdâÁ—~ñ¨»ÓÕ¢fXd#;%FS…;Q†@>¨ý«ü{«_|)ñtšþ¡©Û°Ó.­,å´‰YcðwÈø/»(×5ùáwm¥[^xvçEg¼šXÃê ÿ*‰C¶c\rT F-þÙ¥m”Pö®J{yæÕÝ%Ϭ£Ñtÿ?²Æ•.«g¨M¬j i£Êêîך„¼‚)”`–iUÉÀTsÇZöÿØ3öfÓ¼1ãÿøš-.áu.R7,0é4ŽÕÍ€FöûË. .[`\œÈ#ŒÒÅâ'Cš’º¿ägNÄʸïéØí4}!,lg›÷V¥#©~¡€…+×¾>jÀÓ'½Ñ]ï|/Ÿ­ß fÆæ8Û| 4rÉ ªï·r¢#‡U8ÜËߊٽñn§âÏŠ> °–Ù<›kkÍoQ¶ˆ QãÚ!XžLáp|­ª å‰=­Ÿh £iúÅï‚ ÍÍ¥¬Ó5±6ïs;¶^2ΊG›±ð¥2[%:‘ÁM´“]Nª÷†‘:‹OeâM3IÓ|+uk¦¦’µCÜÝ|ã Fylñ“Œ Àð÷ÃkOI§i^ðºûlòÿlê—[x˜¼­$Qî%ËÎ(8\«`í³|!áÛ=KmÊêÔÁ:‡ ´·2«)É\–$³p:1õô¯ Þiºt—Oiiö-Jð<³£¦Ý’ ÜÞh븶Þ1œš/ìS{¢(©V—™­ñú_†?³WÃI´ŒÚİÉum–6ò”óôå»Ä$º|"…bÁ@†Þy¯ÈÚ{ㆱi£j~gѼQámR{ÛKï03ê‘L¥ÊUB 'nIl“Ö¾·ÿ‚™Ï‘^ê¾(ŽMOR³ÑMšLcwŠÜ12ov݇DTÆÂÊÌx#5ùÙwaâ]&K/²ƒ§ÀwˆÝüË2F9mŒ~ôlO_â †ûx(P®½¤ckN'ÛáäãRwoäŒ?Š~>¼ø£âù5ÏIêZ”P$í·•B§œ‘&}NOzåô«K¸õã–R¨HÙ¸7~µ³ª|#ñeö‡«j–:Eí·áÔ‰õ ZÖ0ÖV‹&|¿2L»°xÁ#ã‚`ðòÇ I…œ¨¹9Á'ü9¯i%Ú\¤êM9§êejút—šœ1.ìmݑ؟ÿUþt#ìú„„¤Ç`nÙJÓð´Oqª\SÌNpTäþÕXhKs.ë´Œ†ù±¸þÕÏÊ’g›8ûI¹#Œ›Àò2Æo»³³á°z±￳4þ,øé iß <-«iþž{› ¤w„ï2‘ÖHÆZa¿åRT`õÀ"¼ÛÅÔvZTö:T2¹tì0©?7=sÒª~Ë_$ø{ñÒÆâÕ´·BÚI·¤ƒcö1泪½¼hÖ…G‡¨­Ôý^ðŸÁصm7Iµ›]bí‘yb†HB®#Œùcc«0<‚­|ä¿´?ë—vv¿‹î`{”UÓmü9"[ÚDòì ¯Œ$%Žãiè+¼ø]ñ)5 ?Zø‰ãÈ終O]åBœ§æ 1^ñWö»ø…â„Ótk{ãS²–Óí³yæIÙ"Y CóeÙÈBÃ2 Á¯œ§F³«(ßN½fu` wý™5ï x¶Ç^Ð|=´£G’Fy#I–YZe%NX>bzŠôOø­þiÖÒÃ¥êú—šÝì,e¹“À$F¬ÜÿõW‰þÃzÅÕ¶‡ øVÇÂšÛØ)Ôc¶HàMR#ØÎB±Þå† 2‘ŠöK/jzF¨ÄÉig©ß‹E½žì쵎8Þ_1Â(¹Â¶WÊNpk›FÕliB­ã© Þ¿ñ‡†팷6Ú>Í$°™ˆœ1i$•@ |ÇæsÎ5‚|'©@÷Ú‚màl[‹½øpIPÊòtRFîãí^±ðFí"ð=·‰/5xßNÕ,6þt¦Öçx©SóÅ0v20:ù7…®³¬x†ß]R²Zê·— 4‰/Úmf4Rî#iB› ã`•ÊýÔâºÎ1pR¶¤¿´ËýbãÂ6ú¦™¦K¬(½– Tqw.äY¥ëc8Çû^¦±~|T¸ñGÅè´xuXÓJÔ.®%Xå|ÜZ¤;Ë UÕKdó‘ÅvÖþ-)4¯·\MtQÇÄË38]¾YÈ I,ß/_Zíþ5bæ{ñ¡M=¦ä¢a)œ)‘Ô ¬Tœ‘“ÔŠžx¨4ÐQ§í&‘§f÷>×õ”½¹{ähḳ[x„ŽBÈ"༜G`½èð¬v:¿‡5Ëù Ö÷›Ä¯~Æ F0’‘¶6 ( ç$ÖÞ§à»mcÆZv¥'ö„—ºMµÂXÜ8ŒÃ Ì>öÞIdÀ ‘ÁÎ&¹è6þ0ñƧa«jóZÁ±·„IeeŽR6ˆ§ÌÇ?yr9Ås&§ªÑž´¯FÑè]Òü ¥kúݦ³ñn×N׬<;a·³Ý±•È ‰_5@S„ G$÷Í|Gÿ"ý¡¤ð‡Äx›áV›r×Úd7×W4b8õŒ¶Xò.æŒ' ¤ôl)õWÄ_EyáòÛ[Ú6¦æÒòŸ ûK2ìUÖ"€Â…*{ü›ø÷ñ÷ö‰ø›{âí:dòf¸ò--Úè¼²¤“„ Œ¯€Hô¯K+£,ET¤ôGgWêøyMo±úcð«âfðöaÐ-Æ«¿•šimQ¥›Ršà¬‹pË’Ò³c#‚Aè+ÍuOÚÍl´;¯ kž"Ñ¿·î/o—QVÓüج-Ð3 W¹åHX:© Ñ·6“\/ˆ>%øàdž|à¨ï¦š_ «‰äwÝGˆÙ˜œÄºÇù”Žœƒ_,øãÅú¥­–±iªi áÝI%[˨ð#t·‘Ê,ˆ¡ev-™騑ÕOí%)=ºzÌ![S¸ý¥¿j×Õ¾èöW6úDÞ!ÓµmF;¤òÌés*–ÌÇq ‘ dð®r8=ìñ–×Xø-âï \›_í_ C'ˆ4ãw"EFB«»I•„Šwç…Ó‘ž~:ÔoÒÿÄR¹/ö~ ‡¼d·¹?Ò¾Âÿ‚Oü5mCƾ ñKÚÙÝh¶m¦È³‹ÉgxÞ$Éè‹åcÎ28<׳W N†ó/3ÇŽ6¥lB²º>§ý˜þZøwÃòj¢ÎÉõAé1´ŠÇì6mRÄ*‹—$¹g$õ¯Vñ_t_„_|GãO_ˆ4ÝÖI´Ý;ʺšÕ%š0Š¿t$ÎŽ1òä}|»Sø‹¨ø_FÑõi–W5ÎV9Š®ru*䎠q^}ÿFø¥ªü&ýŒ|7á?¯ö~¿âI~ÒŸf*ÊöêSbI“¼‘?9$އó“„ëM$µnÇ«†qR|û-NKözý»®þ6~꧆õûM;Gñ•Ú‹ݧL ó1"ƒ»# AäŠúSÃzG†$é´w‰~ø7X¼¿f¸ñœöZܱª‡K;t¹h–ÇQDwm;±Î+OˆÚGÁŸø(5µ·Ãm.ÓÂzm­®!µvœ f–‘£qÃÀ¼ýQðGö4ð—ìáwñÏÇ›SÆ·–fMNþÙÂØxt”Þë˵§±ÏÊWŒëi>?O®ü)Ñb›]ðìÖâÂÇTœØ­Ôs¤E?ïFA "ùnA έðøšr›Œnâ–½ƒ„”¨9=µ—ÎçiûExÇL¯uñ"æò #NÓÞm k}Fí÷C¹CH0ä‘òç¹#ÏŸƒ.¼qñ$è -͵¤k¾øL¤Kåczï—ØdœàsúûNü7Ö`øipo´]2_ß[=͵ª2K$3)©Æ@ç,OCÉ<×~ÈÚ®Ÿ§|GÔFñ¸ÛŒàW^ %M3ÅÆÑrå…µÓ¹ô‡?fýU¼ ¤×Í£µ‹YÝ\¤ðÚâŸfåR0Ê¡~W;IÎ ã“^Ùö€|7jþ±–î¡Û:ÌJ@ÅIV#V#fÌŒƒß¯&¾vñ?¾"|kxïÓáç‰×L°XíìÐÉ»H‹»!PÈÑÐ1;³[~ð‡ˆíõË'ñÅ­þg˜nn$38JË‘l `î`ÜeN}«çå˜:ÒÕ­õ:¡CE®J/—½Ÿàmø»âBé6Ó_Kx‘Û¢>ÙÊ}‘¶Ç–áQUœyÜEVñ?á7Ñïí|7mg®^jwvñ¬·2Ûµ‘‘"òÖ{…8UUC#„S‘ B§<ð¾.°Ô¼{ñ2ËÃzv’lî›s}q-=³,›TBó*›ƒöýÜqÆ—Ž¼%¯þÏÚv¡wãKˆ"Ͳ&ŸžUt§y#Tgr{§RåFäcÁ®¸T¡)$™¬jׄ­(=zØÀý·þk^<ñ ‡†¾ߦ¬ú~£êa6Ál &IÈrª„ŒuÎGŠû?öýµßƒSxn/ø²Úðµ¥Ó› [–ºy⸈V—å@ (Á!p@Rȳˆ>'iþ×n|Uá™/ï¯o$³Yä±·7c"I–òÈåp3Á=ñ]f›ã¯k^!–éÒúÓSŽÅI/$’7†Úá HŽ‚yœW>'ì­AY­Ì±µª§í9%d­{i÷Ÿküið\Ú,Íqo ¾ŽDeα ct˜Àç“Ç8íŠæ´ßÙ·Kñšê BpªÏ·dùˆÙÎ^x€óTd_ëú‚55ø±¯i‰á«²ÚHo7JÇs`’§Ðô#Tþ/þÓO¨i×Rü4^ÞX~ÏaåFd¸½a4§årTã#<ÖPªÔo}Nü'ˆ¦ªN%Œ2‚ƶð¶Õµ¸eŽÊT›"|¾`UÁ$…óÅy—„¼%¤ïqñ"öiä»f“û>R·vÑÉ¿*7‘¼’Bôà b¢¼øŸia§ióÛ_¤š¦¡9­Œeei’È£¡*ˆwñQø§ZOYK<[š(ØÃp¹)æ”ã$`G3øÖ”% Y½_c«9´’Ñy>£¨Üø6Êê_J²ï%µóà' ª`r£¯Ì0¸òjOQ–ôÛÜÝÛGcçÆ¡€ï’ •û½ ó»¿]ÚÁi¬O6š 7)ep±/šPíUûJòTœ|«‘”çŽ+¥ðÿÄ–žâ+{ý*êÖR!½pðÜNÓ¹2˜÷È=ÈÔࢹ©œzÚ¡©§—L8•˜·˜ä.qÐããð©l5‹¦2Fmc.f”n*£ P=vzÀñ†¹£xcPµ·ûˆå½¿Á‚­~Ò€ò@HSó.öÀzñJ´Ú…ÔV‡0+‚`™ö¶Üu$ GÈã÷ÏZ)ÍTNÉÜëŒâÝÖÇG«ëoc¦Ìú$+¨Í[Ädò•FpÇvÑœö=O+ P𾙫-ý¶›¤ZjóÅÅô0,³J }Âÿ 8Ç©¦è×Viû–v) Á”ëÀœçšµks,–§˜Â6pÿ*«Ï<N;c«å¾¦ún]MR)tÏô³Á†``Á;NU›#å#ûÝMYñWŽ´ YI­_Ú)mÊ#oØÃ.Õa'vâ?{®+2yåð’"›—Ô¾ÞKÇl‘ÈÒ<ÍÏ’Y„iÌ\€N½s|?m†hþ#ý¥'ÚDú3[ßÙÊÄ[»"•T€Ì†pXcæã+ÇÆxÃà¹'ÄICµÓSJ•W æÉÌR€C€ª» Æ>é©5ÙüðÆ—ðká­ž“§Ü6KH|ø%Û,¶f(Õ@ –äç9f<š¹ È5m:å"¹KÛ}2än,WÌr_S^½qÁsšÍ8ÍY³º<ö¹Å[ø1|¢K‡Åýô·‹Mp"A&Âçq^‰´“ß½Aã½{T×t4ý7Jµ¿Ô.¯`ŠÞ Ûµ‚Ú[6o߇‘Á,ê€0E_ozêÍ×Ùî8Î5…òUp{0jS…’Õû[ø² xBïL³Ñu_]Úh¨²6# wr–ìÐ\¡<rß1  ‚GA^›ðêÝþ›Y´ËK]#VRax3ùá“k³A*žÃ޵—âÚÛXø“á Cco«>µw#Ìn¢i-’»ˆØ`´Ù ±=;H;ÿþ)E¨øán´Í"óP]:Ä‹ô„¼¦rùŽãø£l;wòœ÷5×(´ùTYÍÊêi}–ÇuuñÇD¹[H|H²hòº¨™å>bH‰Ã¨û½x8é]ý‰Öt(î´‰—ìŸ7îŒ@ FgŽœðp{šù¿áÿ‚u߈þ/³’Î÷ÍÓ­œ]Þ:Hrñ®vÅ÷J…gÆpÀ¤µîñzÝx¦ÿN–8Òñc@¸âT=Ê7ÝBWêJõ)=.²œ¶6¤´–Ëd­4®Àë»3sÑTqÓñV5{+­@Çj·‹¦À­'Úd´Viÿ,&xÎs•÷¦C{=¤BGPRUù£¤RväJóè*´˜^[¬¤Â Ö`Áà ۹ÁÁb‚Á 0¸<ç$ÕËt›JD·š´y¤‰Ucq ¹ùÀ%~Rp¤‘Ïôª>Utï~å¨Ï—Có»Ç~‡Ç–š7Œ¼q5Lje¸P×ít¨ÚNNß”>èÇ©&½ß\º»Óô¨tVÞîýí™5k‹«ƒŒ „ç%™]Îà>R®kå{/‡·šÃûÖñÓôÕ¹,âré<›C(@9Þ7cwN5¡á-OºÔ4ýC[ŸPÓ|øæ]÷2¼ðj ÎAVäo#+Ç}/ÕÓ\²•Ò}¿óÊuù%u»>±„—^+´ŠO-¼9§bÂÝ€o,ØöwUU?6@çž´ÏèCšĉyu6°³GlŸzIäÇÌ7“Éqµ@¯;ýšhmc]ðûxf-éõ¹oâ–æC:¤Ú¨!‚Häò¤–¾½+×õ_ÚønÙ`Ò-mî­æ¸òÒYæ&•Wæ(NAcÁ8#’N+–¿5)rtù”¥{û’_›x›V¿Ôì’#Ëeql7Þ~é|U o-~TRÄ3p1‚xxÚÛÄriú„¡ôÑÅØ–Ý‚LnXÌn7©ÆA5×x«Ä0êZ$:Gˆ&žÐ_:ÄÏfûe¸b3ˆä à'µ>¡­èб+Zé¶ÒH7a³$»T›;ÏN{ÖJ.+T)µ-SÐèþè6~*𕆳¤ê÷Ú~©LñÀ+¯[X\Zø¯í/ïŤn¶íQ¡þÐ͸îtŒ×¬Á#x[Kˆk/ÚßìñYÏtVFÈl»YÙ€êwÆ:Õ!ãn qñJ(ínÝÁ’ak‰þöJC…Æ2*¯Ä¯ YxÁ ¾ðêIv¶‘È$3˜Ò Àdn¤ºä6Óòú׎è¥hÔûÏAb¹[pÛª3“\³ð¶¯o4º,Á´Ç´iäH’CãnU•I ·‚1ŠÂqxjÜ‘w[5)ÃITw×ó<¯Áþ'Ô¼y¨\Ùk*¶âÒÞ0vHÑË4‚@»§'€§×í°x[MÐ,nµ”e½¿²‰q{p®Î«ò’ÂX¸ÁÈÁ8ã~´Ojz5çÙ.ÚëÈu41yüä€ß1@NÓ´äW«êÿ‡Æ ‰.¦¸×®0óÊG™;ÈÎ ¤Xù·2öùUrr3W‰RÑ@å§ÖŒóíWöŒñõßDðÔGP³[Í,“5dÜRVe`ƒayÎxÇO?øíðÄŸ~$kmà=nßQ>%óµÁ%Å«CÇ$‡ÍH!Y”n¸žMzÃhdx¢GÃȆM:õ¦»‚[PâyÙ Œ:œ"…sÃòØÚ¼ Tÿü]cñwÀÚ·†õ+u2[è— j²4vÍ,æXÄ.— ÙS1ÊÑò䜅éJ2„ºŠJ5©8J^öèñ/†~0Ó5ïxz×U·KXµ¸š"p%ż"!ÛÁRñðPÍÜW¼iÞ8ñ6±á=OEð‡—­-è·[­2õdUX‰V(Àí$.S8Y€jø›á·µŸjÞ Fnô› áªZ8UO´Ga~˜,¥†Îsȯ·<âHü#ám7Ä>Ÿí³^Å6¥y:L²9ÞÀ‡…Àb©œ•VÇJéÆÒºM«ö ”R¶ÏžlÉãOÛFðçÃ˽ ãDšëS¶œÛªÈò[<0[¬°fPdËi$ãäì¶]¶ƒàMsS»ñ †§áMvæÖí'SˆJ–·¥$m·›«6Àʬ8vàå†=;áìÉàï‡_åñ•ÏÚî|Et‘mò§ŽæFó2ÒÝö‰°ý߸É>õñsJÔ5ýóI–ÇD»}CD–æû@¼·ö`È‘3A³>pܬ-ÂŒ“Ó†u•%K•6–ç¯õdé¸Ëvïä~^Úü(Ó.tK©þø†þ)¢…om-e€$‚w#I+Þ a•¹`F+=<]®ëšh‘êè÷/¦¼PÚÇ –ÖRå•—ÈØ$ŽFB)b^€Wª~Óÿ³ŽðFëDñ/„¯u Yj¶ky>ƒqËmcy»{µD€©Xß{Ü£ <â§Á-KÁ:F…âM"þÛPÒ]Äó]_„?gÏ|wøo®ë_ûtW‘ŠÇròí@A 4.Y‘Æ@ÎFON¢·?aŸÚ«Ä·çÁ·wzDð¤IŸgwbe;”䤊§jãæÕ±‚2NúëP·Õþ*IÄû+›ýíìôÍRØÚ%¬pEšY³,A2„²(f,¬}ñŽzõjÒ—#ÑùmoCZtéVÖ©÷Üù‹Jø-îµËm_P„‹(mÎx¤Am3MpbÙ#>0Ãk|ƒœ2{Åñ;ö,ñv•¤ß_ü'[]Km¼’Fˆ|µ•¶QóÜ|¹Ï5Úü\ñ×…í¾#-ŸÂ?j6ÂÑ¢}.K9$‹Ë·G´f)6S€HÈ8 ’8çõ»_‰—Úš¯„õíF"¿:|º$öè— â8‡L°9 ¸ õàŠßëUåiè¯ÜâT¡kÅd~Ï»oþ%ëz'‡.šÁ4k+=:ݧ€2ß!±†{€®±<áÐT©9R+è|y©èÚM­Å´Ð[¢¸–\âwo‘ù=¸µù·ûþÐ1ð¯Å»;_½»è>%ìýJU’9'±ƒçq4 ’5VÇÊÀœŽÇîSÇ?˦Ã4/.g"Iet(0ìI9'ð¼lu*¨¶×SßÂT§:iÂ?¯ñnÂÛšÿ‡­´·…¥¿yVlG±c aWæ©,uùq“šæãðD¿`Óum4i÷Vö^BÌL¶Ëq#Il6%ŒòØÆ1Ž„WB±k>'j>1–Ëö o4FÚ=þs…ÌŠFJá·mä šãþ"øÞçáçƒ|kªè‘ÛÏ-®ƒ¸Þ_ƒz×/LD‘—¬¥Ž#œcsÂwVm\¦”]Ú1¼}ð‹Mñ“r÷-þ¡=ŠGn²ÈZhþP°ùƒáIÚÀ‚G _øŸörñÀ½WTñGÂÍVûF¸ÓLˆl®£V•ÕÈVX¦Œr)ñŒ€:ƒÍ}àÝø»áN§xªÿN·½ÐÑĺRœ¸?6ØÔu|0ŒÐf¹Ú·o…þÜÜxBk‹+›¤ÔcŽá,v Ä6Òb¤èG¹®ü>"¦\­Ý=,y˜ú0šçŽèðø×áçÇÏÚi¿ô™#ñeª‹[sqp±¤ã¹Y‰ržB¶3ÏZõ¿Ùëáw„ôÛÍsM±½žÂMb;aœöêm£xäýôžf0 ˆC99Ï–6Œœ×žñ¤MÅÌ~:³këKÒÓ‚€ÜÃ+¯ ýõêÅsžµîß³Äÿ|DxtÏ X[xºÕ$QåÞCçý á°Ì0¡yÃdn+Ô¯…“‹p–Ÿ‡ÈòhÕç’}O®õGÒ|!ðúéñoÅo‰Þ%±³°‹]¿µŒHó³Ý™"³AttXHXpÇŸ” döÿ³çŸþ*xçÆÚ”16ÓÃÄéf'WŽ;¶w0†Ú7™ ƒ•<"pçöTø7¬~ÏŸu 7ÇRAa{ªÜÉ«ßÀ’Ú£[¤qÂâF"lrl Ö7ÃÿˆiàïÙOÄš¿Œî¬,'Ô¼Yq}©_ÞZý¯“Om¢Æ" Hì’Á– vÀ•Á‰p©Vn:­= p”iAlív{Øø¸þÔõ›}* +¤Ð좻½Ô§v¶¶Œ?%L›NùXÆ»Š†P@9Æ>‰ñ¿ûÆ÷:EŽ­£øžxî­Uï¬/ùÑ©$ó…;Tc!‡Zù§ÁüeñÇà§Š|¯X¥¿Š´ ‰£º‚MÖ¾s&–&òʃû¨Õx;KŽzà÷Ÿ³ÇÂ|[øg>³ñ4í&[=V3hßgg- ‰3Ü4Î H+Á,yàÖo ©+Íè‡Jj£´w>³ø]£>©X¯ŒõÉEÕܲâì¨ó˜3HsóÎMu~5ø¥Ëã‹mBÄ_ZY4²¸Øñ*–2döù0zç ô¯/ñ_ƒüKâ›Ù¯t}gH‰ï.c±¶ibV¹Üà?šÅŠªüªÏ´3òÿÆ IñãÌš£ý­gám"Iµ?%šâ)/„À$n#`~e2d6íôɬaQ¥{#w5M_¨ÁQ>'Üø§ÇÖøFÖ[};C·kW0^±ŠûÏó3ç(UËy^r`ò¹Îx¯„µ)dÓÞÛQÓeÄð£FăÎp>nÄ9Jýý¥þ kš×5i"òï¯tÿÇq~d_.ììÒ@F 2G¹Ú$c­~uj:Ûµ"ÅÈŽoÞ(=0yÉö¯'Šåä[Ÿ;œNN\Íh~„ÿÁ"õÏj³ކ£¶ÖçN¿¸½Õ­˜ ”Àð¬h傞[“´çý[xçâÏÛ ádÿhi^°6š¢ñêZD€.KI—#kîºÌ6ž@ ØŠïbë >5iÿØQ]ê–Ú™[cO³‰¤šîȺ4‡Éù6ïà€Ã1¯Iøùû7üNø³ñ1–óÁÑ·Q¡ØÄ¶-oi}f’K$*¬N tY ¨àg+x§‡Æ9¶¹dc:‹‚QKÞGÊ^Ò~Ï{Q¾FÀ?ç5г+\y Ç´€Ü‘ôí]/Žþj?üK&ñ+LÖ4{ÆE–Õ.íÕWc³"³²’6–VDÊÈ8ï? ?à¾/½ÐïÆïjUÙ-ŠÚ]yä¡!Š¥°A'몶.5Îå¡ãÓ£7SâÏ[I¤)†ÚæG ¬®s´ê{Ö'ÃßÝø£\ú8Sqtêv;`˜r{àu5öWüöOÕþë~°·³Ñ­·l¥¼1Ç ²ÊŠ…÷»°c!ns)xàÅs<¥økÅþ鶯¡ëPÜý”ãý.ÜO¶Xn‡÷YU¾á`Ì£'«£ƒ§ÏE[ /j¡-ö=—ƒeðÇìÝá¨,­/H¶ƒíZŽªŠvMt¬Uá ÷•7þlc ׄ|xÕ´‡÷Z·Š5ë=ìøSNKý6Ù. ”Øw8³¸d[5öMÿ„nü¡i‹|–ÖöI±‰µk-6m+ËdË!òáhã V/‘÷1ÛŒu šúÇáÕÆŸñê÷UųCÚ<±ÜGöˆÖt#g ~_1L¸ÈÜv¯#9®GRð÷„¾(h°øoÄM¹«jŸf·vÞúŽœÍk¿vÁ€P²ÈŠä¨;€Ç=ÿ…¾Á ÛH ‹­*ñlµM—FàBè7”‘–|H¬Uº¼ŠÓ^5m(om 0¸yÓ¼dtñm烼a¥]Iö BÚétÁ¤ãÚº¯ëwÚ¶æêW¶–«6æÄ‹«˜¤BØ.ØÚ„m • Žõ\±´M°²tí)nt—>8±µð¼šÅÑ·†áK?–¦9e…]ÊÛ“ç##5å_?i‹í?S6žð5ÿÞ:F«kaÎláŽ1s;„ÿzòyO¸³1 €I~+øUÔü •ÝÅÔMn-âKU‡tÊcoŒ3’x?ÃŒþM©ü5ÖÄ ]ø«ÝiºnšcÓll!€™Aœ•+æ£)æH˜¤PHéWF í3Ó¯;ÅHñ_Ú{öñ'ÄO‡¾/Õþ^뾓@×môõ³%à–}>h€À#Oš2§ ¢©àœWøGGðç…|5áíÓÂßÛºà‚ÇQ¿»Mïýš—@·[hÛç åÎÜá·G¸ürÑôcö‹ñ…¬[Zuj´ö]zÜgíŸà½#Åì~#7ˆç+[]* 4GHX…y¦ppFÁ¿æÈUyòÿ þËž<ñ·ïô‹kIu5{ºûcËçyv²ctmÄ¡f¡}Ù½ÒçÁZÏÆ/ÙýtÝVÃEÓÚçT}LéfêádŒì \,`yk³È™b áû?ÙøSàg†|;HÓïµ­Z8ãÕ5;x÷O©F¬$X2¡º ü¡sÏBÅK ]öìrÊ·qrzÁÿÙgÁÿ¼)dÞ*Ñ’ãS½uo5ÏÚfŽY„€ ©@€’0`Nsǯ|5ðŽ¡ÿ Ïê:6Ÿ%ÌÖö¶—K¤÷²=ÁXäŠû°Ê2Äà(ÜVN±ñ+ÅúLºˆ'†¸@–"îÌyñÈÊ‘É'™ó0Ý×Ýê5îºOíÌn´M#ûCókZ®šªÍpÐÍwn“ÛûÂìÞPgÀížµãâqîWswù›Bxzio#Ëã°kmCNŠÞÆòþU³–[{h‚Íä2)29,go8Éá8ž4ÿࣳ¿‡5Ûxƒâ-Í…ÞµÖ‘èOc¤¬—÷wùH iw~ð8mÙa€}3Y_ÿiÏë:~£­xâ? hþ¹y‰žúu·¿Ü[`UTPæùd`Nëy¼CñQ]SPÓõ/ÍkbM§ZÍm²• ­æ;ìÞ 0<)8à××ÚµD­o4tQÅÁ¹F”›]èúw€~ ~Ë>=Šïö}µ½´ñ¬_dMV]{|®1qK %WäݵFÓ·Ž‚±þ'~ÒQ|GÐuêÿðÙÚÀfÕš9C‚d»MÛH_º¤t5™áo‚ß®ô]&ÃXŸÂÚm…Ô¦e”˪YÁÎsÄ]¸(+·'½Çö?ÐY·»ñþ¯â_=¤B(mõKòö±€Å‡î×ù?ÆÍœy¯6¾gIKžsæo¶¿¡êa2œÊ¢J ‘yž1ñm7öÿCñM¬þ'Ñmü«ØìMâA©æ»ÉÌ4¥÷~Õí>ý¦<={â!¤jÓ´‹»òmtõÓ.ô1 …—Î\‘p¬s‘À®¾ÇàÏ„´Kw‹NðÖ‡ Ȇ& f€ºåã%y<ŽjÜ> Ñlg§éZ|N¤a’ÝA d`?æžsûª/”ôéðÞ"GU_ÐâüW¥ÞxçáÓx®îÓÄ7ž"¹»Ó^êÊÈÙ¥Õš¾µ­,ËÓXjzu=:ØZ{zšôèyÏÆ ^oO¯hº^¯yªXÞ5Ý´‹g¸[4±˜ ‰v"Ë…i ‰‹Æ¶j‡¿´V›ñJöqgk¡ê’Æ#ƒHÓAn¯’Ó@øåÙ‰Fû f¹¿xþf¹<òÝC§© ˜ qÁ;K1õ9­+âaBJV<úQ•JV]:[x*åü£]ê÷÷zÚ=ÔžuÛBÒ1™€Rð¢ùÙÇ^|f¼Çþ ñÊ/ƒ³¦»©øjô\kð[4øžo'tÇhFhÏÌÇ‘òœG^+WÇ^$á_Ãy5¯[\/†-/ÞÎÚê+rϧ©b»Ý0Øp$¸Î7 Ø×ÍŸðRZ_ÁÛÝhw+â‡HÈÛms<¶Ð¨˜Æò0b‘HT) yÉs]4Z¯(ò˜{9Q¼¥ÙŸBx3át§ö§ñv­ãǼ)…ô}7N–=©ÊêiÇ‘6Wpàù€v×°|9×-oôí]¤òî_Mdû=º³y¡O˽÷ª€wn.N{ŠÀøtm´‡ÚWŠ%Ô$·ºñŒ]Þ]JÒ¸hŠåAò¤j_åÝúW)ºuõÀñ:œ†éæxÖF·]#$G!ØA Ü?#<…5½)ûÍ39%*i­ÿàÑu{§Ê±]é¶3µáVcµCö‰ãˆn.»PdüÎÁyÀÉÍ_°M?[Ho,%Ûov«0Xåó$rW rTŒçOjã<âíû;Í)Uidgkq‹)äEÃFŠX¾S•ÈêpkwBñTZ}î5$uŽ`|¹>ËÂù†2á€1ב]ªIN£·-‹>>¶Ö_M’_ ¶r2¢Ås7—åBs—ùÎs°uÏZNmdF¶PJ hbO|Þ2}zVy×õãË©Amg¸Kx¶å†1»y*~S…#}©Ésgç\¾’Â[’$]…¤/žŒÄãûÜp)Y/Vi¥¶¦ÔWwÜ#ØJc¸1#1lö\vãœóLñWÃWø­¨-Œ3ê1Çe^}—ÌŽ¸`ùýì€3`·Lc8Ç5BçX‡J±š[ã½ÂI<‰^GC´l‘¸îÛƒÜó]'‚üeeáä §é²ÚÙJ ؆¸Y‰,CØä ü¼õÍa:®¢j í”j;'©çf‰í£¶·´¾…ä¸uwÙã‚̱,|²7î+ߦ ëÍ3ÃþÕ,Ñ®µK¸|»(çs #f%L› ŽÂެÁéWþ3k:E†­âI=Ö¦[Iuw´¼ÕTƒ¼2©ÎÜ`nÊäö5ñŸƒ?k/~О%øáâ_ƒJÚtš.“á iW—U¼êwó´ódíT•`·ƒ ʬ?½ƒ¬ êÁ¹# ØZ)ÅÏ«±é~9øà>1xrçÄJnßA·¸žÒÆ2Ž‹" ‰^@[ÃHÅW#øxÈ5â_±ï„uo‰µ¶¹wâtÛK­,>¥À!ÿG´‰ÊÜN\€rͲÞ6>£#"½µ¼)áËý/Âþ½y¢ YÁ%ú yÍc{> üÓ;IË3+¢ð§Â=3àç„u¨þ ÜË'‰.¦mKÏÔ.D³\ÜHIdvŒÝýÐ Œ þ+§š0,It{B*ËôìlhßoÝÆ×’z Ìø—¦{ÄcÂþHúrm¼¹žûªU ‚ÇB“Ï\V–½ñßMðƦiЦ™wVš“@64!†>`Ý„q¹½_‰54Ôôë-xxïœO3ÈBÊî7v,Ûí“Ú·ß¡4ø§€n‘¿,G€Ä“ÓF1þ5 g³÷kì£RÉ g·¹ñu­éº—ÎeªDX„Ì¿xyc›)€H%rpFN|ÓÆVú†­ñGQ´¾Â[ËÉ ·0I“ ´g‘Sœå¶pT·â}GÃ:rYëÖW71X'‘¥Œ¾ AÐô$:ãŒóÞ¥ñ߃¦ñD†—¯‹+“¹šm£Xõjy’,m YzѾõzq’n/s*Ñr\Œé¾hPø‹HÀXÑH‚ÝIóå)÷F]Ž9³6µ1ôåŽ[™f½_2EÜ« o'œ0Õµê7–öšÍ*:ÃŽe%ÇÎÆåŽP6Üì=r@⤳ø‰â« x;FÕ,_SÒíe‘í„ífI «¹`‹´ä¸®ÇMñ]¿ˆ#ŽïÃñÙê}ôëE0ºÂlŸ+p§’Ý׊åþ$üW›U×î-4Èg2ÝÇÓ¯1 Kr%ùdG!»O®Då~^[›'Èî™ê¾2ñuî¡dúgÃ}RK;똣’#s§»5Š0RÀ¦9aœ}j®àÛ‹††oGu«ÞG+@“\*…ŠniJgl\A>ù®Àÿ´ß„µeÔ|WiâÏí 2±¸*é û@nIU¾p烻ÑNOJµðOö„ð÷ü#V¾%Ôïmîc¾y55„©k«¾ ‘¤v` tÛœàŽcÙN7I«Í©&oøÓGGñ4å໸žÒîÙü˜$-¶¸hÂðH”äñï]¦©à?XÝjPÜÜ^–9–}Ûˆfݸ¨àôn¾½+⥥Ֆ®úmŽ™î‘ö‘2¼;ã…"òã·ÌÇ`'·ÕÝ{Æm¦xªæÞþg¹Õ£Ó£—ÈKE ºç%‹s&Ð2¸õ¬âÛŠ²&—Þuº5Ô:…Úxvu–o.Så,6 |Ì7rƒ8'‘žõä:ø0ÿð²m5O·ZÙÛÎþW–öň†%Hα!Ÿ©ÆNkÞ¾‰u(%»¹Ûo¹#h‘šîÉ1Æ€†F.Ã8 +–ý§ü «^xYÁ÷3èÖ’ÈklÊ“‡[ryRs’Aã­cí=œíÜÞqœ ª;èy7Œ/øcã-sLÑ c¬C¶¡|g@°ÂŽÒE"‡# È`$b½ÂöóÛxÆ oM§´äIV£pÉq¿‰d“8a‚F§^MaZ.iB:§©Õí*é[¯]Sðv~.K»+ëKˆµëkc{=Ç“VnÊÆ|ÆrNF2$íéXšïÃ[^ÑaÓäº-®ZÚ7¶@‰ÃarÎÖäu¹ïˆ¾8‚ËP6¾Õ´èµJÝí¿³î–HØù[äNÑ€$ñƒUmÏŠm~[é_ü8`‡NžÚ},Y\0–0²G²c‡çs3³˜€+‘Ò“³‹Ðé§:uW,ÕŸàÈ­t•ÓtûÍ'IXõfU§†[ÖlŠ0Fæ Àû¤ãœàë?h‰vÿ >'‡îµ›—ñ7‰tÏ6çW’k 2%“ˆÂ?!7rÀ3 í5é÷Ÿ d‹á¾’5K}6óÅO‚êö)óÜ’ù‘9‚w ¡FNkBÑ´½¤ÿ„çDZÚ_¡IFD¹u!Rr〬F9#æìMEJʪ³èõó:háý5î|¥x¢Ó@ø½¤ê³ö©dÓê –³æÒMeDݸ¹œ1|ÄÛ•+´dûWÂ[{+Üê¶z£¸u7†{µŠFÄQ«[ºä ±¢ À@'œšôX¾è2x¯\¹Ñ¼1j—h’÷ήd#+´m„Q…ÀãÜâ¹x®_[‹n=C…÷CäÀï‹c#ß#ëV“è0Éoœ—Vºª…`n$ ¤YT°"¾6Ðü?—¶÷zi¸²y‘Y`1¸s’¼zŽ+èßÙâ1Ðc|¸ F@èkÅ>#^ÙxkÃ¥çÃ{¸¼k`—rƒewæX[¸þö8Ô¨ˆÉûêC!*z§›^RJ_ù—V¾™?ì©ñ³NÕþ'ßê_ô¿ØxŒBVÞö/*Ö &l©}¿s;|•‹1šú‹Ãÿ´Æ©âzïJ] QEÄrý©i`PÂ)d ¡Ç!IŒnÁȯ…|Gð·SŠÓKDðf«¦ëR[¬Ig bA"b²ù›_Ì)µ³Ê2yÍnüý°5?…ZÆ•£xÖèö÷Ë=À’ûDQË N6ȇqÈ#$÷ãÄà%sSWk¥ÈÃæ.:^Þ‡µþÓ¿µçŠn"]1u¨4o´L’?ÙTCö8øU¸€ÉP¿.3€3œ×ÑŸ þXéß,â¿»ƒVµ›OI¯µ+¡çÎÖ.ç;X0~ï ^Aù7Æÿ .þ6øÄ?&Óµ ëš{›ic´?h¸›&4·w#ߟ{i'!I9¯vø™ñ;M¿ð\3*\ÚhðY¾ø™o”(A9ÉÀQÉ€® E8œaf÷îva«¾YºŽýއVð§‡î.| $VvªàÃon‘‹h÷ŸõŒe9<¶åã'Ÿ’ÿko‰7úµäZ5ÔvzeåÍ©¸“Ìo´ƒåí'=dãøP¢»|pÓ¼5¡éÿ ômnÞÇFÕ ‹D‘m!k[›yRe*Yóñ);|¤‹Z¬^,:ÝÍ¢#èžS«Üùh†+¶ŽE&r@û[©ó®›¥4çªîÌqU#hu<¯áßÀ}?Æ^'Ô<# ê×wq½½á¾hÖ4‚BJ¨ÉQæ#Á5iW3è:v¤êZ,¡¯î–šBÅ•ç*WqŒ¡”¨X`däzN¬ùÜd½Ë/Ääö.’Œá¬®|/¬ÁñßÀRêÿ mÚÖkëƒv—R¬EX|ÎLvesÉ<0ÁÈíÚüñf·mgr~ \Ù>›¬ ŠÊ’þêÑ4Kä6~éÛ»Žs^5û ë¶VZÿ†–ì\ÜéQë0g‘êa4’0Ç,{BÅN9ßuïÙúÌøB1ñïOð•­¼¾lZ…Þ¬V=JYK0Ë>Ù.Kczñ–¯ÂN äz 7Šœw{ö+x»àšÝëúÍõõ¶¤°Ü !rÅV1²¬¹8ÎHàƒÉÅlx_Á"}?g‹bŽúpÁ‘$UÂyo½s¹½8­t>ð§†<9oc‘⸵ =g Ïis2\L¿1òåeÈ^§#t­»è–ÈòÏ®%Ä“¬ÌÜ’[…9î}N§Æå(èlãksʬ"´ñW‹<}c«]%¿“e –Í´å"xÙHÎ0¬ò¨Ç^¹^O?6sŽkÓn¾øfKÛ©/5ÌÅxå­íqhÎTî9ädþ³~,êž Ò|+ÿ &›«ø‚=Bxåaû¿2HD1˜þñL ëïÏZ•SÞWW:c%JGÏÚoü[£\LÑÃq¨]^ÜIåËn?qå‘ç¡>I`G]ÙÏ5ƒð³Â—>0\ßêÖM¥éÖ¥•êÜ=Ê=Äw ÆX#Ç“È2õ8®ÓLñöáC¥Igà›û˜æ×Ì…ÔŠ2Xã,FrO<ž:WÓ_ ¼#áÍ á_‡n­tè´ÖÕ`±Z-äö óe ©Û—ÜÌØþNk¦sT×2(ÎxÈéÐódð=® éö¶qëÑK6£pÙn²¡‘þó’¤0Ï «? ~ Íà;VÓlžþþ4´óÉ»¿Ù¢A´±n‰Ú1ìØä×qñÏFÓ´ ê5î·w¡*Z²Iˆø9ÛÏ\œ˜=¹¬ ´ß ¼º¦±ªÿ¥X½¨71…òavòç1¸õïíÀùä®ÝÑÙ(¨4š8/~¶J¾¸ÓẇPy~Ï´ ^xŒGheù‹ž9äׇ~ÇžºÓüKsá-{Jó¤Õô ?ÅVšzúÖ-¯!òI 1Ü `Äã$Ÿ©ô¿ x_^Ñ,4¯ ^êÖ6vÞe¢Mn`–y[yfO1˜H8d9ÅcÚþÈ:/‡»þ‡«jzV¯z§í:=¾±öFH¸6ÆO!H?¼ 9,ï!)­xoŽœ5«-C[† ÃLñ¹e¹1´k2ˆÜ’¬àŒ}}l¨IÚ6ùþ‡“˜KÛE)K#£øWãßøD3iŸ 4;W‡ÄZmÆrošDÓmÍùŽ!j»A`—÷„ç•­% OWºz£[þ )ñ£Pø·ñš?øŽÚ(4=ÞM+Ã“éØ›È²r²¾þq(’ED8¢íè zgì#mãþ·±øCu=ä:dh'—Ìòì¬0 ‰ÎB\‘™|œ@¯Ÿ¿hèº$ú<0hsh÷®k©Y¡Ú!•†^J>àI,Ÿ/©>µûþҷ߳߂'é·wIk£Au§‹8/"‚0‰/Ÿ’F’HbãçY_æm¼šÀý¥>(Ëñëã®­âm\fI¯­ä†) D›ìðH¯E@Q"à0ä ö œŠôÛƒöò¾ý¥¬õ/ ¸ðŸˆt›T+œˆïÙ_ÍhòA2åÉu# byéºñ„hÛ-ŽÊ´(¿ÞSkMõ>³øƒáë¯Ø]/‡|YwáÕy-ÒßQ±¶rg…Q³ ,xÛûÓƒÊw® ö€ñ¿‰>Ça†•yÒÜO{qvö÷Ó<Žè’¬±)d8,Ø ƒ‚§kGáçí¦ø—áœþ k›ûVœ$d] –ȘFèfHÁTàŒ()–ãšÕ×¾)i¾>Š_6^îfÔbhž2€>c’&w²†c’p¨L<ˆÁÑŸ,ÖÇmLL%X½l|»ð{öd×~ ü}x_⎣ ^ØÈnmÒh&Ô5"Û] G<Œ!_€r $ªäW¾Ûþź‡~_ø?ᶯ¥ "ÊY$ÔeÔ®%–iÛa3™îG–gÜå‰Üʠ𵇡x x§Q\Ò¬­#´ðóÇq£ÜÇ’ß\ƒ-óyHÞ q´ú|ïûFèþ ø[J{OêÚv“ñ­þÓåA«<±5©Ü¾MÂã÷wÉF%—ä­zÚb&£—©Ã œ‹™ÝúdŸÚk3ÞiââÀizyµ· r¯ׄ²ª GFê\1Æõ<_<þÓ¿´|? %¾ŸÄ—öx’HN§•v–Bb…Š•‰™w2£rB·¯ÎJð3×^…áoػƾ"ñ–Ÿ}ñKÄ61hštŒm´¨ci<¨H‰ÞF@à¾IäÔâóš4&½œ’KKõù.§ÍÃŽÇ·Rv/ÌÉÓµ |3øi¢øDþо‚xÒ+}Žs¨–VŒÌo3ç#vzç'­uÚ'ŠçNÒõ‡Ú}®eam$ÆóP²{›©Ö !…®ò6wcf#n§Ù\þÆ>ÔõïFn%Ub–ˆB¸ Àq“Ž8¯Mðƒ¬<£ÛXø~*ÞÙvǹ˰ïMxóÊRƒÕ¹3ÜÀð¾-é^\«ï>TuøûAk—ÒøwV•tÛ‰$’{›I-#ÔØô—  —†Ï5Ü/ìã?Š?òW|m¡éR WÒ´Uw¨ „i6Eõ¤ÿ´+è½ÆL™¸õ£íy9í^,³Z ǵ‡á%)ûJ­Íùíø„eøNH¦žÂç\ºˆ ë7ozrƒJHJ à¹è-…D@h0 pª`)ÊK7ÎzQæc®3é\u*Ϋ¼ÝÏ¢¡†£…\´`’ò@Ñ”PxçzŒKµ²¼ãð¥–LõÆ==*¼Ó'p• =Q³’ê,îxÔ×ñoÄòXé¶ún™x,//äV[ÜÀŠêY±ß>ÆGzë5 Am ‘ܨ7ùãľ8¿Õü~Ú¶™$ ä¿l¶%’$ƒ¡ Ÿç @$íãÖ½\» «T¼–ˆâÆWöp²Ýœoü'ºÄGmñŸÍßéÓ´m*9|Ÿ2´•ûEÑ#qšHÀ (  óœf½ëöNñ:|NðÆ¥©‹84ß %äÖú$¡·¸‚¡¥Ûœ°½C¶ÆGùíð[Çz׿moˆú=­ã\jÝêWÖEæÚQâ‰P*³d( Ðkè¿xÂ?‚<3áØuCg†™m§éȇ-+Æ6ª©É# Ž97½}Z1£¨­ÖÇÇR¨ëן;½Ÿä}ñÛã^ƒð÷F¸¸ðdl5–‰¢BÖ¡4w!ös•VÁ=³qU>@Ð|5†÷Æ13_C¤Û•‰"%Pîiånv<÷8®7á?Âc]±³ñÄù‹BäˆÞ8‘JBs¾fc’sŒ)É`=:ú„¼y k>Õ,þÍ,}œ>míõÝásu+qlÇï9ÎÜá@ǵpI(Þûž·´sQ¶Èƒà¯Šô¯ ø«Äâ;;_ø€Ë%öÛtße¨geÜÃË@ˆQHs´úWž|9ñ×Å K–:M©žKýj:¥Ì[†.e;£HÆÙ†ÆN1·=ñ^-ûg~Ô:Ÿ‚¾­ïÁ»agq{”ºcÿm7[¡e$ŽÙÏsŒ×¾üÓuOº/†<1iªÀ£DŠ}_RžØïÕ$‰uc€6¨è9â‰Óƒ‚œÕÐ:“ƒåŽûšÿ5gøs§Þßèr\ÛOîH‹¼K"¯ÏºC£<î8ü+†ð—Ž7g© S%ñÿ‡­¼WuáÙn­¡Öà˜[Ibêى“°‡ µKcÓœƒT¼AûB]Çñi4 SÂ^ ¿ͧ†ý$Cekn‘‰[2>܆È<¥wSüiÐSU³Óu]>=FêúÄ1ûZ£8ã+ ÜÂE|ƒÐ× §[ OndÌa*”\¬Œ±k¦ëzR@–©=¢†‰"•vàòû•¸aר5Êx_àÃYê“øágƒÚâõ–âî[û–Ó*’ A&#–ápÅ × xŽëCðªY9±Ôí¬M¼-¢H·×h\œÆ–bA ž„sYž1ñ>“¢øVòëÅëv4í;ȆK'u•ÌÞiiâÈ*ÁQWiÁ\“Î3^{ÃÕÀÉJÑö;!8bW,–§•~×ß×öwøsâMÑ"°Ò,dxìáPa†¢g1ˆä í.p qšÄðÝ„‰¤éO,&+k¸¹¸Ú Ïw9Yª¯ÝPÎÀH“\íAàÈ¿l-OÃ~xÚÒOkÚ)…Yâ±±E3Ü«xO³[ȼœuîE{n½ðb;­t¯Ã‹ÅÓVñË,2“-º®8PI&>à yÁ®Å‰„Tc=$Ù/'4ã²Z”›Ävþ ´—SÒ¶ÜÞ^Mö´îH1† …0‘<+pBâ{ðäS È%zà`Œúõ¯RŒ’êpbiûÛlnCã•ï¥ëöóÁc§¼ÒùóIå@ÎÙ diøÀ(ß¡yÏ¢ðƹ²¶šÖ ™.Q­ío-,Sa¶³/—q9$qYñ†›ã ­ôÝ2þÚîÚHŸíK$¾|ˆª»¤iT`ó‘…Ç\k¦OÅ«ZùòêÞ‡Œl3n€e‡TF8O•@ù}<×MüÌèT¼¹mbÜQ\Îà¤Pùg-$Äpnãq=p=+WEð¥Þ§oncŽiÐ8;ã›nYz‘‚ n{gÖ­x.â][N»Óî-u +xî6»L‚4íSæ(nFûžÜÔ?ü]/‡¯´›_[]ßÄ®°°³MÛ²¤çøTžOӊ竈7ÉÕšU­h·<çö¤ø/¬|_øãO øt¬úž§)žB#FŽà?ÈtlAàŽõCöuý”t?³~™áËk––æþA¬j’Ïjë“ E˜ü ýÜ4KŽB…â½'Ãú_‹5«²º¼R¤Ê]ÑÒ5‰nÛHQ“½¾V IÀ^ÄÖÅ?kÞ%·›Ló“OÓ­K6ò¤jÜg`uøDŸÃ…d¹Ö¼ÛÛ½·"I".ûCHòcÊ «1ääH¬kV×@Ô¬´‹9µk»[} 3ˆ¨?Ý,ÄnûØ9ã5ªƒŠZÝ4!9Es-NÊÇ]ÖÒyhþº…o§Ù-eÉlóÀÚ® î1Œ·*z‹Åš­µ×Œ4H´íi´í^_$Åk#G^Ço+¸üÊ0?‡<I«^ø¦xÂ^E¦ŸXÄÌæÚÎ4‰‡S”`eÏNýjî¡á»oì½ñ- ¶²óY/n3£JÈ@=9úVMÊîû’~ížìÛñî¬n!žæòðy¢q(GÞ2-õGjðMwK›Æüs®MèÞ½›Yžñ_2=ËYÍm A—‚®‰c”šô 2Kqåê“Íuilí3IrÈòI´++G¿æ[hã±­=OHÓ\ÛÞÇ¥£Ò\<1A FªÃøÔ¡ z“‚9ÇnêW’кMErÈ×Ð}?UƒL‰§1w¡ÁXþBAädôìj–©çùs£!(‘í“ÆÖÎU‹Œ éžj=YVÕ•#ºŒ(dÞˆ_œàó‚ò§xŠÿL×o­´ËKÝBÏ[‘^äBŽ®íÌŒàÇnzòNx¨‹öo•r»³×Âö’kM.” mX63´ˆ›Ic³s„3ÛŒT³jÓé3¼1Ëå®à@=¾†µbñ>“ã‹Hµ/‡Z|«ey¾5OœÅo±Ú'Cµœ4ˆøqò‘ÀÏRÑk–Ûíö0¾š¬pQdÞ$u|Î9žqJtáWÞh¸O©“ÌvºV©ªk XZB<…FËHäòsï‘øUü1­¤âãβšÚÝùj«öv$¨;OPØÈÆHïÖ¯x“NðÖªµ¥¡jÚßÃKë½1íRS 2]ÄX«FA*ËÔ`ïƒ×èß³–¾‡â÷†u1 Vö~Šúï^½+çOy,jÛämÝK8ˆ*ð±¸Oš´2øÂmsL’æÞç]+« *!pËæpz3+ñ€xÆ1_nåË%M­ùÃRIM×€ôÝZã_ÒõO A¨A¦jì`¶šßË '»èOÊk'ÍŽ¼My×Ç_G¯ø@½ÒdŠk:ÈZZ*©RŠ%,ûèK6qÛêMhü%ñ~?Q¤ëÓN¦$ya=ÜH±±D*¼œ|Ý¿¡á…—,±Y®Ò)¢¸'pHå˜iÌÊÞªêqÏ5‹‹Œï-,\›²äêuÿ ¾2%ÕêM¬Þ6ìîòg‹Î‚C³`>_ \Ǧä×­øŽÃáU/õ  »˜ Èš]ºFøÝ+ŽÜdg êqÍ|íxTð¼Ÿ\²ŸI–Ù€Ìr²Gˆàƒô®ÓÀŸ¦Ð´ˆ'·Ií/âòf Áa9 6SŒär8¥^Ѝ¹ ìüðµÝùgúž±áï‹6:n‡,> ñ@ÕôÛ5Ù‰¬É4ú|=2­Ë:´î޵t~ ñ/‡?á?7Zõž4ÍvÊ+ÍOZ{“"ZM¢Kuä• ƒ–Ç5äZgƒ´%ºi³ÙÛÀ²—ΜGq‘ý×'çêx#=ëÙ/4OþÏ_ §¿ðÞ±%ôº•Üj‘AfÒË*…ÇÀ+€A$òNÞ•ÃV*–©êÎÔÔ£)8/‚|y|E˜K­Zj3ËåÌÃQ+`¹%þ÷μt?wš‚çâÇŹü_«Xxª/ Ãiwo%Ý»œùñÆ H‚‡û¬Cn¸òø;Ÿ®¡¦X[hÖÒM-åê\Z¤Hš?ÞG†(U媀r #½ áLJ¯î¬/u/‹¶÷ßßE"¡…`+*…™ãbÒÊd — FÞ <³¡ù¦®o“¥ FGË~ý ÓÁŸ4Ÿêv–B[([N‰auuÆÙDXÈbTÿ—W­J4ëÇE²W^GkÕ¥%»¦}%ð·Å7_ïu r×Â0Mg%Ø+ibÛÈ·JSr°m€ã ó^™ð]_i>7Ô5}.ÈêÚ&¦šŸ<„ ñ•”`¥~øù¶Ïʹ''Ê?d¿Ÿ þ˾%¿Km¡¤ºrì(Ùçg|€å]  ä6O»ðçK×ü%ðïLñïíâ뻦¿¸·Õôm:òü³ nSa ¹²Ë³œ‚¼Ey¸º^ÎsQVŠÛ¹ëù©Ûó=À¾)šßIÿ„ž!}kg–¿em=›pÏ÷¼ÌçvFIÚ1žkµ×µ[oƒšìZæ½un‰}•ÒÄó¯Ùlãé4Òm$ö!A,F1^{àoˆWþ+½k+³>m¨yÓaýýµ°È †À$Di>üsßuýG^ŠÒÃÂú´i¨ëÒ%”2y{®¢EoŸxä *sÓ9®eJU$¯ WĪqJ’¿™îZ'Æ»ßøzá| .ŸhM„rÞCäI-£¿•¼;‚UC•Q„žp@5ó}÷Å}CâäíaqâNŸÃ;õ=ÕæfÔyŒ)”gBªûHŸx×¹ü/Ðì~x†Û[ñ¥Ô6z5ƒýƒOšM¨×ÀŽ&¸È+3så¸Â â¼ãf§«üaý©¯áMiºÄÖ6.ú{G5‘ò eùˆ#q´ èŒ äpj°ôà«8¯_雺Üð„šÜúàwŠd°ðÿ†lìÊ;ÝnÕÙ¯6–ä<€™› 7o äx5Sã'‚.¼ãöÓ5ËH´¸§¹iÛìÓù† ’Ï0PªŒ‘Ž0WžµGáç‹ãøoáÿx_ÅRͦëÑÜ+yí¤$2HÒFçÈœ©Ù`£iùAcº+¯Ôu{3Ã÷VÒÞ}¢úqxí*™~\ï$¨0y㌵ÉQ¨Ïw/j¾é,üeø‘§|%ñrÙéévtôA0Æ »µ@qö‘¹>håËܱÆÀ¯fý˜?jøÉðäÁ¨\gb\É`÷2mò˜(Wc\üï"0b¼mÏåàßµöG‹­¬.£ˆX^ø‹Çu<‹%Ó+„Â.TÉQØšŸàgéþjz¶‹ã´Ôtû»Ñc{§[]Aˆ^e’½ó‘öùYŒ"¦7°nqƒ^£„*P¼þ.‡‘BsSqKOÔ÷|TJøå¤xkÃöúµÅ†­^þH+{NDQÆàl¶Fü€Ø r P¶Ô4ø|o«OÕÕÝ’Ý­½Ò2hË*•Û7}Ù`ŒäŒb¼ßöºÕl~|[Óâ¸ñ~§u«>•k1‡ìÆçNî"Tû"†mÈØÄæVÛÔŠô}oÃvšvÿÞÝ[Z6žßð”O}nà­ä±Ã ÑI3+nÆ$B±‘¼{W4aÉlÎÚiÎzécчìßà¯j#×|:²Þjs´­mu+Ëà¨n$`íÂ:ךüIý—ç7–Qiúoˆ>É3‹(mVÐ)÷V@C˜U[9^+è-KÆãÁŸìµÄI.üûyÇ‘ GY?…l/'G²¯¡‚ÉšæÑ¦„1W$„×+¹sœgÛÕ#«\)—Û–2.9b –eAUQ´`Êøó¦®·©é’ø¯\›H¿¹uÖ®ËM±­<û•µ‚ÕÜîù4§‚UÈÁäe)CÅÀ;åE(ÞúžRþ Ñ4¯ê‹â-?D¿ñ ÷¯†ž×ªnl­ÖPÚ˜1>{FT–V#‘ÅoøŸö¿ñ¦xƒàT·v·1ùÏ/x"MS[°Òõ ï5(m OI¶ºµÔІeûnSi`TóÉÏ|9¾ð?Š-ítÿ øGVºñνy¶·¸¾i7l›¥™dB»²ÑÇ&Ñœ–lg‘^•û,^i&ñ’ë‰á=ÃúJHÚvëK†ŠK‰Ï%´ªKlÈRA ¸ÆÞ vWª©¯ƒU×OÐâ†K㞌ô/Ø{âÇ„´KKÿͨº¿ºg$ù/ ã÷bvÌ7ÈF0FIù±^Ñãφú ¬‘êÖH/§±ýéžIKÊw+1ïÎ…†@¯Œ¬>éŸíƒþx‡P°‚âòK+Ùæ‰¤ùBHï1*AùÛi pFIÝÚ¾Ëð–£bŸ Ö r+6Ö4Ç—Î0² ÃÚCwÞ6.šMVŒßKjz›P´Öˆù=¾ }›Å—)©éÚT®´š¯‡þÏy‰," 7³:òÎò8Kw–F¨>(hÞ ðu¤sZÍ­Io®j¿eÕ¬ØxZ4V‘&\rÄI“ÏCœ^ûãOxWLó§³É2l¸óFøÔɇgnHÝåã¡äמx‹ö9ÖÿiÏ=ÏÁšRy-«jwë¤h…;ˆÈ:. <ó[Òĺ9¶¢ºô8]Y^›<›à‚¡ø‡ûEèVŸ -&³ž]e¤L ¸áo3ã*Α} ?ZúÓCÿ‚^ØhŸüI©øëÅÖžíÝÍÅž›lßoºe¹s$‚XÓ•]ìçam¸ÀÏÎø.6ý‹ü]~Xé~"øâTñêhŽâØ6å·”±@Vfa‚@wJöÙûöz¸øa§ê¾;ý |k^÷N»Óµ9üÿ+FµG Æc—h’iã#“¸(9ÁšËisS•£µ÷¹éà©E$­©›ðsöJð—ìµãÿøJ~Þø»_Ö"ÙÛø-ÓOŽfà¼ÂHÞÄö$R¶©Þx’×ZñeÂøÆ7Ò‹yui$¼Q¶æT.@‡ƒ‘‘ž8í[¿|5¤Úü ðµÀ趸u©¼7k;$‘KÜ<§ÛÆ '޵…ñ'áíÏÁ[@ÖaÕ|Mµ¹T0´¬ dLœü«ŒòN}y¯:8™Ö³”µÛÌÖ£Täã†ßƒ~\kž%‡Æºž»™áèœB¶í#¢†|‘‰Êœt ¶é]dZ|–6Ó¦£8“Êrî \‚p¸è=?Zä~ë^)¹øo­Øø÷\ÒŸû&ÖÞÒ+˜™ÆÆFXÉ…”à˜ÀÙœªÅ°q]Γlf‚} ‹]FòáÖíÓ æ.OÌîC27c…çžÙÕrŒÚnþ‡Da”¢¬ŽrE¸žî–+‘$£s²«y*vä®þƒŽ3Æ{SIŸPÓïm5TY#™¥I!”äé·Žøè=3ÔWwogk£Mvš¼!íîæ –Ѱ2 zíà±Î{´íC]ÓÞ8ní´t `eü€ÈðÉÉ1«Jlâ\Èè+7S“d\"šÕœ‡Ãm JñìVßb¼…ô’—Eg¶19XmÝ ~\tÎ{WªÝh‘5ìVÓ6°•`’3à¹là’¸>ê‘_<|uøÛ?„ìóÂw6’É#"„2Ê6¨ gŽIÉ®;Ãÿ¶…÷‹¼_ákMRÂñ¯­µIj<“*áV<ù›Š•äû ä•+kk\}8?fôgñ×âoŠ|CñgÀÖšˆ¼·±Õd¸ñ\Ò< [­­Âİ–L¼¦T”“^iãˆZïŒl¼añCRÓ¬uí{G¶ŽûO…–FC I-ÈŽUÀ#.‰Ðp¼s^­ªêž-ñÅ ZmëÃè0 ÚtísŠYÊL‡å*U8=w7L æ~"|/ð/Žï<%sãO Åâ[¿4­gw§ÚÍk¬qHªË#£¨]ßk)Ûžâ®›4“ÿ‚i4ç6®{WÃ?éçNºµÑb’ }5#Žä>ÖVn‡¾Å ƒê8æ¹>(Ó¼ð×P—U¾¼{•e••ŠíŒ:ƒÚp$ ²î凡5Óü6ø-á«}>Mà «xOMÒÒ_ì²'S# ²I>âÄŒ>ðŽ1“ñö>Ñþ%Ìóx_W‹Z¼Òn<÷´Ô-L)}41ººîI9®OÒ¹Ô£*·oCÒŠ~ËÝÜüÎøõñÎóÄÜiÚS=œ7bdÜÌ’Åo#<2?}ˆ)8ÏîÁïUÿiߌ֞<ð7±á;]xsN¾²Ô,í™–/6IÄȤF$Üz±až•CöÉ»]7ãF¡ Ïá+OÞisœD-ÄÝ«¢ÀçlÑW1²Œ,¹$6=#öHý¦ñ嵦³ñ`Ãm j±µ”vrÀÍqt³`G,D}ÃJ°çƒÒ¾™º8z0«=×Ôøœv5áHÈóÿÙ‡ÅWÞø‹ èVmԵƎÂÖ܂׶ÖuL|ä˜vÊŸ¨úsö¨m/Qø{ªx5îaó ·†æß|Š/#xÈ6TVm©#®ÃÛ VéôíJÕ"™â”•»™®$r –%F]8$³9ï^Íÿäøyâ? ]øÂèúÅ•Þá·±Óíç†XÖX/¯#ûbãD¶íÃo\Œtþ'|S¸øb°êRX%Ü·@Ý;eA‚HÕ7F F àzíoJÙðOíG¬ø‹áÀ½ÕãÕìõhÙüÉ¡"N$†7`ck +1×4TÌjýY©Bë¿üPÆòÉÔ—ÅÐù·öƒð—Å/øK¿ø½¢ÜíÒtųŽh–)-ÌqaI_)ŽÑ“ßnwp1ÓÚÿà—>(Ó>üTKïʺd~ ²}µÛÃæFΗq´ˆ£8lí TGcšµwñŽßÂW¯€¤¶¶–ñRcp-cqy& HÒ;`—ÉSòq¼T:—ÅëKëCøÌtÍfy§û¬1帑XîeU“,1œÿéÖ,ÅËì];/#|66«ªêÔ^ñcö®ý—á—‹c—Â:凊añV±{-²7Úl-ó¯˜ÀͱP€Ão9ë^cuð‹_ÕaSãÏëCn ¶@!•Ó81aÆ@nqé^7Ãoh?>Ïû9ÿjêÞ!„Fòøz+inJ3§ÍåÍ‚‹•Ëd·Làg4Í?â_ÄýÅ·ú/…ψ?á&¸¾Ky´yX,6VÑçÎyRL!ÜÌ‚6çšé§­Jšå³K¾†Õ©ÔÄIµ _±sötÖ´„Ú.±du[Ûk}Jhç¹²0ÞljP6àAÁSâÇ×mcãy4é_ ´¨n|LÓÈ×Nc‚ÞŒ’ÎG]ª;2O®'V\©jÌåW‘^ODw¿iɇÐÔWzÔu¤“jGžIX"/Õñ¯’>+ÿÁGLÓ.äø`©0>.îId†b>FaŒ4y+§'µ|·ñwöŽñoÇë×o‰:´§ÃÓ„gi![;É3„Eˆ6'>œ÷¯w Øšöæ÷Wžç‡ŠâL-Ô[oËþ úCá¿Ú—À¾-ñ}Ö£øMþ×·gU¶–u®Y¡$âE{W‰|hÿ‚›h^ »»´ðeŒºˆÞm ½,q$˜ÎR¹u÷$gé_i7pø#Ç×I~í©^ÞÚÇYۅΟIL­’£8€õ«Þ2v6¥®xŒ_=ÅÈx¬ÖTV‘UGÏ,yãnO#çŸØ£áðWuŸ|Ky£×|Okp->˸ÚÛ»‰_{䪻~ìá€_júGÀ:݇ƒ´awâšÙ€Kx‘‘ôëCIfé¸*ýÐsÓƒÒ¼·á¯Šu¿j§ûj«Û-BÎ[x­RÀöº€Ò€A`ȃ$™˜ô³­jþ ø¶[4ºž´‘[ÞËm q3;X×,a˜(-Ô/¹®ÌG¼Óò±æáj8swm¶zW~5ZüJ]OøM-ÝͶ±:D“\-bKŒ;J8Pxå€ú«áfמkM6yl¬mW2Ó××½y¯Ã_€º—Œ´=òÿí¶K£¬P«,‘H2ŠÇý¯”uÈ_)|×+€ÏÇ&¾ˆÖ¾éþ!ðµôzí¾œ>Ô<öa™FCîÀ%rC628É8é^gñ£C6âÞÚ{c¨™C¼ Crzƒ%R7 ræáñn Ó]w:*PUc¾š£wÅ-4Ó¼WpñXöe|3ù|س€@”ŒF:ð_öúо |C¾ð¿­õdš-ÓH–öI#ÙE$²mË0”ª£zB9ºCâe¯ÃO.›q©C?žJ0[…›3aPNñ‘“0í^›à¯èrhöº¯Ž,áÕ./•mV ­<•€0 @+ŒeH稯Z“Tìæ®ŸcÍU#ÝWiûøÄqxsI𥮵¨jGXÝo4¶»î!Ž]‘…yïH’áØÁÇ·Sûø³F_‚Ó¥Km;ÄúýÝÅ–‘¯EÛ3{,a"‚h°$;äe&o»ÞcŠëîüà9o¯îü?áë? I²Sq&—¦˜dh<~èmÜXcý¬÷Ç.~ÐÞ->"üð‹+ø›Ä¶~:Ó®¥´ íb,®T:íŠMÈ­•È )cŸºz#ìæÓƒÐ˜¥ ϲÓ;OÙötø³ð÷öŽÆkº‡| Ój—Œ‚âï‰þÂmâlŽ1lÊ$-ö7+œçêXZíŠþÔ-ź®õxeóK¨ùOÐúu®JÞýâÔ'‡Eh3iìöÑ­„dù?9% v†IèÎ9­o øÎôͨ[Ëe#ÜÜ+²^[Ó6ÌòGÁã¿~kÎÅS§ˆŸ&РŦ›¤Ý ¦ycŽIÙÎ$j˜”ðØ ¹×¡C-×.'Ôæ•,|ó0-Ic‚X Ž^´FNQQÙ£¦tù_µ)ZøE¼,×Úe®ûK§Ù=²:¬ážLîË‘Ðgåp;ð+ѯü5¦øSN_´–êEßi798ÈÙƒŽ9ÇCŠæäƒK¹ÔZÆÆ)9&\ 39yNôFäŽIæµ53É»–#:ËzF̤—‡Á €g téáÛ„lõõ<ª”½¥NhèTÖüEâ­9¯¿²4«[->ÖYTÏ©ÝÄŸjLaeh—sÎÒ mjæü9ðãTðž½³¯ê·÷:œÐ£L±mVÒ¹.íÒŒÉÀäàWasjÑ3G$²°U[>q#8à’py9©#)gnm'H',WÌŽŒ:s“ÏN)¼<9ùÚW3úœ/Í'r_kZƧÇoªêÒ¬ò´ÊªdU—iÉÇËÄa¾\†>ÕGV·:¶¬-íî!xfUžVHŠä#£©8b9<‰~Õ$ýš$Ùûì4¦Þh–ÚW.c\`¸ç°è;UýNÚÿMñ‹Ø^KpÒGG¶º- ‹ž@ô#Õcâ7ÅriÏ¥ÂiÓo–4ˆS–Æ1¸ŒwÇçRª%kì8¦î–æe„ñè¾ ’ë]•a]ñµ¹¸LG*‡ÞHlpܽ{WGgñF ßÇâ!kp¡îFè6ªîL˜Çßµp××ö¶ §…¸ö´Š¾aÛ‚v“ׂzÆc¥]ÝÙ=‡ˆš´*Ĩ¬%Î02:cüsÒŸ-ÕÉ•IS²³º:ÿüWÓ¾h¶S_jï¡é h‘¼ÖWsÊ5YDˆ]Yq€U”âN禌^,½ŽX[Y6:”Š<àÎÐ †äg}9ö©<xšmºVÌê04š|Æ3ŒpOÛ·z©ã3W›L¹¾ð“P·âÛíÆdER@…#wO5wy¡ó÷ ¬]ïtmª.Ìäþ j:/À jþ+a µ¹˜=Ø‚oôH3÷fUŸ"<ð@b a€+›Ðüd“YxŸÅæYâ‚ÍḎÝR#ç噺þ=«ªñv«á½SFøÑàè`ѯ­|«èõ£ŸO™ ‚È ™F<Ç€q_2|zý‘W]ø9â«ßØËÆ^!²ðË,V·¾Kñ}§ê¯p4p]’dóœ(&9 ŒuœáN5Ÿ¼ìûô6÷’\ªþ]ý¤~ øÓQðìëàû=\¥´·-µÌ›a ™^0îwd…MÌNÒp>µ§ð?ã·Å½q Ð!i4û{€Ïy' +ƒË"޽ Æ8¯€uÛÄß ¾xÁ´?†õÍ1ô»hìä–ö'ŒjëX‹¦ð£€W;K&HäרðNŸZGų®KðòÎÛû;KDÓü³˜&³È—÷€Ÿ™Š”`GëUV„è.i-;œ±ÅÓŸ,’{§¹îZÆ¿¥øcWvñµã®KÃ~òµ”ÛÃÊÛå]09(y&¹›]&/}c©¥ë"(Ì$mÊ6ü‘œŽAù®§Å×øzöQ§Ëuitå$h¥b r¤îèGÝ9ãŽâ¼®KÙ¼â³øw^:þŸ‰¨ëº”÷ðÅm}d–ó@ˆŒUWÍ öŠd‡—Ë78æÄÑh{ŽÖ:¡j2znMâ;LÑ%³ž)¬çÃd÷r0ù@`ÊïŽÕæ–ß²ê|Tø§ÿ Ž©ã;ëø4Í=ô§Òí$Š[I-¥x¤–ÝØ¨}$qE9aŒädV·†~ 迸{hÛt»U,rÛ½ñÖ¢ž6xeÉQRXÑjŽœëz_Œ¬¡°×1‹9Ṏ?,ÛÉ÷ ÆÄn±Ô`© Š~µe•Œ^k™"TŒ Ç'¦{ýk ÁºT¯©Ì)]èv’‚òµ¼òn”„æÂ2a³ü8và`WEJ^Ý4·:¾Ï}Ž“Å:†«âŸÜ®§© » >y'Žé 7gµÜÀ3@¼ªW#–;xëW|1®i5Ôµ+ /PŽÎÐ$WWVÍLʇ!FT9 ÃpÈ5ÍÜèöü.KÿØê†òÚt¶¿½º14(qp¢¿˜®HÉ| í#'ù<'/ÃMMžäùãÄi79„fÜ‚…ƺ³¦篭´cÊý âÜeÌŽ‰þj^Õ´ëÿjöåàiUD[ZÏ¢²3H6!Ž1Ôgï?¢»/…Þ±ñWîµ nd–HKÁ8¹>\*‡z¾Â9!—<žNÅ|Åûx¾wø·§è:4óCuâ™g³xßÀ°Ãeqr$iX€¿4%qþÒäôõoüêñ~"^ŸN›-uKyµ-:I•PÏhŒ²@dC2»©=sîr;ñ4¾¯)Mmc‚ŠúÃ\¶=sKðˆø¡Øi7–R›xf qÿI·e-$Hªw&Ò¨2Ã9N•æ4ðݿ¿kšÖâÛSÔà1_ݤ®n&yeÎÀA8g#žãšõoê°hZ‹îµRVM'K»Ô­ÐÈêÌb@bUòþbw¿Ê å²:×…kŸ³íÕ‚oãñÇŒ$ñ¾§¶Á>Âè[~ñ‚†vw÷‘€2zg5ãÑŸ¼Û•“üOWÙO•8­‹Ÿõ¯Zx3AÖ|- \h³ÛÛÝHÃì÷2NÓùa£…²U݆ðGÊx9­OŽÉ¥=Ö› x‚áfÓ%›LšÖá©ï‰&f'<ƒ¼åÏHgÄOÂßµ_k­åýš,QÚéî†k+9ÖÔH>S( Ž@ÀP ±5Ëx+źŸÄ xcWñž™šî±¨‹ÆU`‹§€"„‚NKHd±cÖºáNSW[.¦uêFqKÞgŸ|kŽ/xƒH¼ñ¿oŽs+ØXÛÛ¼þjK"Èì®§†EgÏ9§?@þÔ^ƒ^ø% üFÑRIõýbÒÞ (¤€Ç&Ü*í$*®ï0þc®yö­ðZM]µ³ñ wU¹ÚØ&<›Qæ#ÁòáNÖÂü¹=+VúãÄZ'Á†^ðì±kZf˜öú®©º5–ÒÖ6•³’“ó¢mÈ#o#Ž:íVnJOgøT`ššz^Ízž?.™?Çï¶½âý_Ó§·°2Áq+F×åV)X›”nÛž ã€+ÖtχÞ!¸ÿ‚€xšÿÈž×ÃövŠò`Hš„ivÉ娴Ï)¿¸ÇŒíøîþDѵO=´¶öz¯™q£êvêT·ˆªvnØ£$mR¿tæ³> þÖºe‡ˆ.añÌš~‘u—¸¼)$@nf³9#µhêɯݭjÞ¤Ó\“µG­î}iâhžðׇü9z÷šŽ£¤è–ÖâÊÚ/.x䂈U†4ŽrWhëœWµ|"ñ…¿Â܈^S}¥Äó› òàµuäÂV.Hçn0Z¾;‹X¸ñí+¡xŽöå.t{k]>ÚûW¹pËs ,ŽÑ;+Ï,e›9Ú{`é>ø‹dߴLjüâË[­^ðïö¬nFã/Ù%T»·,ØÝ%³‘@?1Vf÷ð*RÚ=õgÓ`ª9ÝÞïôûwxe|}¬øŠãE×ÃÆK_>;϶«A:I5ÌWP˜•]B™à`2k㟇ÿ5‡zխ߆gšê d»·yXï€í1•1+”‘Óà À¿DtiñQÕµ»4è¶úöfdmd'šàd‚\ÉÚe8‘Í|…ÿø% ü×løãMðý‡…›á5Ì-|Rñ¾µñÞ;ÃóêÚqŠ(Û?c²ICPÏ6>l3³¾:^5ðÅúއðôxÁ÷mý¡c3Û­„s”W!~Y6>#wRIQóœðTdö/°\^iª|w¯x‹[[èFµq©ÞZF©­I*¨LpŠf‰B¨PïÜ1œUÖ ¨;Çqáq1Jz÷…æÑ¾ë:ïˆ&¸Õn/'ŒG ¥½˜ÂÚ¥bE°ÜP³™Hà“ÓŠø·Qø¡q­ê_-,lu{‹I=¼-o›ìè÷+(’a°ù]<€Cã±5õÏÃ=õ}^â>±â´I ÜÙÙ‚8Þ;”ù÷Æ„ÆÒ!D ¸|ÃþÊß,ü5ðsQ»¸ÒµH,§ñcéÑjZ½ä^^²¶Ð²°ÂÉ•RfÉ}¨À« äÊŸ$$ç-Mê·ZÊ:F×>=ø§k|·Ö-­\K{,:|P’Ó +uXS€Š¡v€qÉ® \Ðçtº|$¼G÷ƒ'Ѓ^Ÿã/ Ú/õ 6þ+}6ÒâX`íÌ1ùK#m&$¨àts7ÚMΛiq0g’(ÎŒ(·P3Ž9ÁçîaçȮϞ¯KÚ]#šðÇÄMOÂ:¬–‹4¶÷¶r !˜pñH¼‚=Á­ÍâÜÞÒîšÎKɯu;‡žæIYX±-»Cïbr:ƒê+T°¹Žøò6å#‚kCÃ^SdKûàØ!†ìýÖ»f¡Q{Ñ<™ª±j ŸU~ÿ¥7×ÃÄÖ°Ë2À©ÄV %íÖé c$§æb2§ŽJŒœý¦øŠËâ—Ž-m~Û¿ˆ¯¯!û=ÜP7í8EØCà1šð/Ù“á^‰àß^øÃÄÚÑû]¢•K(>_$¨2ñHR{Žõí?iû‹y®4…ZU†¡FˆnŒ,#º™OGi›ï(ˆÏ{W‰äu[¦¶û[ˆçµ)O‰¿e¯…>µk¯v2Au‘åÚAv{!?¾hÎØ·Ж'€x®{Ä?µG„ü/àI¼ð[LÓ´«8®–[‹U¦»•—${ŽDýp7.ÑøwZÿ‚4?øfæMv[„°‚_´K4ËÊÇ?½ç$žCÖ¾q¹ðŽ›áïßÞ"ÊÑÀבٕªç{nÛ‚p0;Šóœ¥Rê£vòØæÇ:”ã¤_ÞCá?ž%Ó>)5ÅÛ„{{Élí!C<ŠåKª> T霎Ýëé?~Úþñ$—º6¯¢C-”°%µü3¤rî,îÌ2&×@Tž#±¯”¾i1Þøª^ Ö¾¹Ià…áÝ o7&i%PP9ÀnH$ö­›oÙÓÆßn“TÓu [Í2Á„‘& Œy<‡!UBîåœè•íøæ}GµðÖ‹m×WöîõtäºEŽì?"° 7sž€ñˆ^Ë kêß™ÓB‹œ•fÚ}ŽzÿW¼¦»¬Yê,4ZÚ~ÖPá9Ú8-&T6[®*_ |døˆé?nu7»·Bnb¶"kkIIå`Ë”inp úf½'š-¾µ©'ˆü#šÝÅ•ìÛ^Ü1†9²:Û6Ð’Ágܪ0Ê8"¨xë᎗cãøšî{ÛÝCP!etód…I;˜3fRØ'vFz^zkYis¦t¥NJpvïè }¦Ïâk™¼'ªÚÏ3G­ßéÑC¶âòÜe *© `èë^Aªü4ø“«kº…çˆ4ëÍ;J½¿)gªjN‹$íÀòÔÈ*¤ü£‡<>£ø·¦éÿüS.§¬ivº¯ˆµg}Hê×ñ™®K9a$Ȳ¸ T³…;xS^s©þÐ>ñ¬×6Êú…Ä›®Ýâk—`3\Ÿ-¶Œí^¤sœ×u<{¥Éc)âSr‡-šnÚ#Ò¿g}Kĺ¯Âÿ /ˆaÒ,´ûkWš{–[‹¼ÈrXÆ Jw²ó¼ço\íP2;Ô)BéÊvõ:°Ù†aZŠ•8Ý-Ýyñýþñ£à 凊N‹®Gâ­& BÚÒ]³Kµ%ܱãÊ|ñ°lŒZñ¯øÎöÒçÂ’xR8oµgM[è­íA‹ËŠ&Q&ÇeÚW €œdŽ æ?‡–šÏÂa¹ñö±àÝ&îÚÂïOÓþÅr‹-ÄW3$Ž¥y T¤`6O~5»ðÓà¯Å?ˆ6z-Ûé:VŸ§Úi²[[µýàÄ&G ìwV*­ƒŒäŽ+Z˜ºG/uyšâhC:^Î6æºÛ¯™óׯ/ð¯[¶Ðo£Õ4Û‹ÉdÔží]–Xdg,/–êÙ˜€F@+'Âÿll(5+†Õl5ˆm¯öÆî“¿—7ïZõYŽæ;ù†88¯ t?ø#µÞ½­O{ñ—ÆßÛ’™·B©áQ-Ò’¤z澕øûxö|ÓÑ|¢YË~¹Ý¨ÝB’ݶ{o#åÃõ†#7ÁR¤£M¹K­¶ûÙ¦‚1Zuß*üOˆ¾IñÇ2ê±è üU©[¬²––âÚKL+)2Å>Ï,ñ¹ùC-v³WìAñR4¼>:ŠÏÃÑJþ\‘LìÒÊ2X0hÉW}‡N+ïÓœoçŒóŠ’Áù@JñêgÓ³T饟æ}>ƒp4]çy^GÅþ)ÿ‚fø·âž,üQã¯ZZEp^?³hrK2G»pQ#Ê9É'žÙÉÿÆÐõ¡hž*ñoˆ®-lŒMµ”PZDY#XðÚı “Î2O­}@9LúS¡ˆ•;«’Y¾*QQR²ô_äzTøo.¥ª¤¾wg‹iÿ°‡Ãxí"Õü5g«-žÓ½`B # 0:’~¦»~Î>øâ6Ö<áM MÕŸq7Ñ[/Ú~lîÄ­–ÜAÁï]ȶ dŽjDAÈoιÞ7Sâ¨þöwRÀai|Òù"•šØÌ¯dœ+G”aÁÁ?åÕcñ^±Ôˆ†íG¢L>Fö)÷«ý£4»½a4¿ÛÞxwZo½kˆ“Ü©<8ÿi õI"W_qžµ•âé>7ÒšËÅÚmž¥hãýUÄB@?Ý'•>ã^ÕT¼ÍnJ¦à½Ç÷jº‘ãÍ,ïÙÙjVÒ¸‘Tlõÿ…y7ˆc†ðíÄ—ŸµËÌSO¹-=‹§ œ¡>£8#5½uðYð<ï?Á?ÜZÇ»'LÕXÜÚãû©/úÅÿÒ–Ïö„ºð]ÒZ|pÑ®t .Ž$´ôȨ̂oàÛOµvP©ZޏyÝvÿ€Îz´éÔþ,lûÿÁ8ËoÚÆîVß㮇s˜-oâF¸¶”ú‰˜Çùǯµz¯€¾6ø{⚳跱|óæ+!ú88üðk¢²Õ´ïéå´ùmo­å!Hu`}EygŽÿcêײj f¹ð~´T„ŸMù`f=䃅qZ{l.#ݯIw[|Ñ—&"Ž´åÏϼõøØÊáÍE,¿>qÍ|ï7‹¾(~Ï­émâ _éàÈäw2EÕ>£Žõß|4ý§¼5ñûäPÏ’®„ýÆë‚ ãùš¹eH%:mJ=×êU<|%.J‹–]™ès4’áUÜ•äùÓâºK¨kWI#“•d;¹°O¾zW³}¾u± žpxç5VVÁùqÍO+a€PI@ÊŽüŒ­EÚȇ%ÜŒÊ=EG,»³Î3éK E<“œþUGUÔ£Ò4û«»†fŽÖ±É!T±ߎ*¡ =”’WlÅøñ ×ῆe¾¿Ì³I˜­`_½s6ÒU¦qÖ¾DñGuÿŠ)Ž®÷ɦùŠ&ÑIá襲p¼’5ëgsûKköGUi`.âÎÂÚ'šxàU8ó3óà— tà×ñ—? |)©_j·Z~a¢Û½úÜß] fdfÛìy ¡ylŽœ×Öå¸%†´¤¯/ÈøÜÓ1x¹8AÚ+ñ>Yøµ¤êW¾-–9ìË9¸7ɱ¥f_)T*ŸX€8-ŠÄø¯Aum¨Ü­¬z~ƒläÛ´{Vâv_•r2»›¡?Ž+·ñ¡>®ñê^#·qj·\[@íd#1‰©%[Óšç¾x"-3D};F´»Ö#{É¢¸e $vìv “ì¤îcÓo¸¯«¥?ݸ³å*ÆòMmÔå¾èZ¿Ž¾#½í«Üý³Q¼g‚Úavƒ$‡¨E >œûý1«|Ò|K%¶‡ájOké&Õa‚ÜÇoe$HÐ4Î3óŒç¦w+_áï‡ÓáF™ªOá½6ÆJ1{rd“fîÀ#Œ’xãÞ»ÿî>x×Ç–¶Öº&§­j¦ÞûUšêúFLÊ[r¡B¹ÆKdà’p+ž¾#f•’ØêÁQŒ¾%v÷éc§ø5öH¥·‡Iº–Ù,àwSЈ¥Xlu<€0ON8¯2ý¨%‘§Òο-ÂkZ¤žd–ÒJcM¶b@•1Ì’: @¿(·sŠì¼-¦Ëa®jš5ûGs%ÌòK©\[ÛaˆJví„‹èP+Nóúg†Öé5kQä¢_´I‚îƒupÇ’^n+Ž/ßS‘ÙR¯³„¡äpñ5Å·ƒïA¸/3GÀùl­W-;FrW©ÏZÚ±Ô#¹Ó5;RÝÜ]¡NF¸;VL‰V-¤o8bÀã'šë5ŸèÖ¶¹Ó-íìîu\ȧfeš%*¿8n»²pz`æ*¾ðý”s^[Ú?Ë”]HŒ#Ãߊ•9¤ß(©CÝŒ_ÞzL4Í'—^"¶»Ê\Go:Ø´fXàhA;ÑÛ®èÊ`v*sÚ½OáE•÷Å‹{}GƶZkZ”24 hg ‘w ùyçt"¾sÔ4ÿË©\èÖQÝiÚTIm{¥–yÄp p$Á|ˆlz•õW…u+¿ ü–_ XͨÞÉe<‘[ˈDÒmhâ‡,Fì1n•͉ýÒ»ZX6êTP‹²/ø»Çðüð”Zö­§éÓ œAqqçòD=d`ÅFÁ<ÅyïĉRüIÓ¬®/-ã0Úܬon7¯Ý Aár1ÔôÅ'Å/ ÜGà?èÞ)¸‚ûZÓü­RþÙ?s– Ck/†Wr¹$’£Ó5³á¯„±Ê¯wñüé¶¥ãÄA —p»Ã•p0/Þâ²¥¥Í-ÎŒ\¤ä©ÒZ=Î/âž™á_Ù§‡§¼’MjîHQç(/Ý1ô'w$0}«¢ðf‚ž+Ö´öðõÌi$ÖÐÇ:HH1²…ýîRxäúV?ÄËËÏ|.Ò®5ßµiOyxnåŠöÀIec@8U8 Œ+'Áú&µðŽ×Äž*ñ%ËA,V‘&—Üù¾\L71•qò¹ V'O=ëÊÇ4æÜ·]œ=>JJ0=_ÅZ]Õåäá6\Ghe•¥…ؼÊW Iž›?½Ðñ^cñÛÃS_]Ù^jBúÆòkCb—°Ä -òDÄr†ò† ʃšë´»Ù|Eà6-v{Õ—ìV‹$è˽Ü*´¯'÷·6ìã¨5´×ñO…o®uÅ$±Ú¶÷ÚE¿ž‚5êÞí·nN7pkÅsP—5õ;é«£ç}KöBðþ·â(n‹c{}ejZMJ8a¸Š.B+J–%Øàò¤Õ=wà dž<:­`Úí´Út¥ìàŒÅr ciiZg]®ß¨ÀpI¯¢-¾ ÏðwZº·²ÕuCqvàÜ[êwFìY(åbVê’G'J¡âÅâk©mµÍI¼©üâöÓù¶À)8rp@Gç]´s:—åµÒþ¶2–\ÒÜøcã_‰þ0øgHeЭ5=7í–Ú´…yꎒUQµ•³‚A¨È½Ðuß…ÿhê>–æÊîÄBׂ[‹tf(7Ëm#àQûÆ?ëò3ЍŸ5}0?…´›k»ÒK8-T5¤%_,0r<Å;~U`8Æq^³ðׯ:†¹ðòMMo‘ cÞÒMn>eUYCžA'ÏjÆ5bÛC¦švŠ–ç7o­¦­âK¨4 •Ô´k1\yÉ›[Ÿ• ATç]$ô;è1ˆ÷ö~Õ,,u {››½vwû8[A2Œ3H Tg;¹9ôë]–«â»h7kâ-&x%kÙÆ-îw!ÈgxÈisùõ®ÿÄv¾ º:Œ—×I·–Í–ÕŒ²ÀŒ*ýÂÇž€ç­„e4–‰“WÉÔ¹ð÷V»ðýåÅζ‘CsK$7OõÛçÛv䤓Ç]òmÌK¤Ü¶ª¤i#G‡ÉFïw8ç®vßTÔpº…¥µ” ¶ÒÁ€³( a·c'¡àœ|ÄÕÅÖF·©˜lnc{x¾SߨÉ'ŽqÓƒ]‘§g£8“»æ¹_W×u©õ+EÐm-ЬnùÛ,›z¶àÜéŽ~µbK;ÀÍf&”±h™d&@§–=zŸÖ£·ûN¦d–â@æ”mËP3µN¾õgLº[{€ö2y³ Ù#»cÜ1‚Fî ÖÑ\«]û›÷l·,Ñxb΃H{ëÍþyKmÑÝ[·RR]Ã!»¯lU- Â÷#žâçÅ:m¼öÍ0šßíq-É€©Üü2„ŽsZjÚ½à¸Y-È’Sæ³8S̪½xÇLþµÒÚéÖöQ‡ ,®ñò‰(‰¥èrrƒsÖ³ïnÓ¹ÅQ©>kžUñ>æÓUñ=ÅÞ©‘ÏpáüÀÆGÏnUŸÎ©xOTT·ŠîÛX̶ۈ ¸«²”q(ùHÇ Æ<æ·~&|!ƒÇž'³mã†ÜÊe»·[ÆŽG“„|‚ª ǶzÕ?ø*?‡‘y·6 ¢ÓË‘ÜFamÜç Î3\ô(ÕWSz‡[·Scƒñ¥ƒø²ûWÕ¼!sn‘ÜÌo.ZæO!R?/%c|m  +qÉÏjæ4¿Ùƒâ¯ÆYn5ÿø²ËáZEö[=óOMjâíT×S•”"n!UØ£•9¯á ­î.´­mHa¸H3›ái[-•qÜW£M4Ëì«cy¿1eeÆ09ÉÖ•*:VPßï:iSu›rØ«aá«/|/f««]ê=¢[Gpð¬s¨ÞŽ]ŽHïϵr>=ñݦƒe X ©jw×ËŸ§Û°\º$’ܬåþUÙ×׺¹Ó-µ{[)…Äuj†Ê¥ö®Â«µÁç†ùpz×; [Ç¥ø²øø¦ÎÒÙ-à’î)â"Ð*@ÐwlcçäüÜv«§hÝ“$º$rÚÇÄ«½q¦«êopé¥ÅºÍ°òù‰Cd0 ÷eàŸAÁ®³GÕ4 JòÍ´øâÓç¥ÝŤü²NÊ{Ä£ç`¹‘¹æ¼¯J´Ó´èíô­+µÖå¸Ao{zûåŽ"¥¼¸Ž9Æ; ôY\Àî£ýÄt¡Y«”ûÍ»¢ç9œt­Ý(5fM:ÍKs›øµá <3ÅOk:.Ö…•ûAc|ÌXiò\¼ú¤]]GvR@=ëB{hâ½k¯ µ”W2L!yÙ’ÿŠ6b>ï³äsÍy¾à-7âÜI-’î iÕ­Äw%&´r¸Å4M½ ù‘¹ÉäƒX—¿ þ,|\xjößㄘ–0’,¼C¤Æ~÷”Ky7»sÀo-ð§;›¬©ûܼÚö+kÝÔô‹Ÿ ZkÚÛ|$žßI¼žRÒé×¶æMä¦báKYp^"cŸ,ó^Mã¿‹ç‡u!¡ßiú‡†üO®]ŦévR@'´Õ%‘›dÐMòçˆ*¼­µÕ‚!,£¥zìéñÃ_înÛÀSËg Û¬ZŒ–fÎîÎåþe‚xØ·,TŒàŒõ®çÇ:$+£%½ÔJ°‚Ò'™æG;1È(Â0Éù—­>HNO˜¡+«-Çx[N·MD²¶¼k㬞eÙožò\…6;’þ¤zVιâëŸëMöÉ":¤IþëiÜÍóUùYIÁàg¿5Çø©¼KðïYÐ5?…:5ž»áÝëo®é×’I Õ’;€.`ºrKˆÔ1hˆbÙ\2÷í&¹ÔµûµŠßNÑ®lãbÏ,ÓfÂç0à ˜8Ã7¾M,?³Ÿ½ª±·:QåÝŸ’¶¿­þøÃÂÐÃ*·²5Ô÷1Ý3«DpÈ¢-£nÜNíæ+Gö¸Öõø’ôêM5ªéßg¶´µTÝNÈ»Ÿx¨s¸óÆFÑêlj^%›Ãÿ¡¾ñ´)©Gm!Kyn"wˆù* ùx^1ž;ÖçÇÝïÇ~7ñD·Ö‘Å.»iØdïcäædneùKz.qÖ¾ÆU%' KSò‹¯fÏ-ø®é_4ÏŸ‰n5mSFm?N·Œ~íæf_’vv>nøcÆLÒµbÎîÇG†ßLµŽåc±€Z¨f@4<´þ$÷ÀÁO„’x«â拦蓣:‰/.Ó˜â e÷È í\‘Ïã^ÁàïÙ~ÇÇú|×Þ&Žs Ù°m[R,QÝB†ŠØo,í½‚¾xÈ­jª2ç¾–aí —õcÆt«;KÍRãD‚å4ˆ5*C%Ü`On…r-ŽCd¸`æº/‹>Õ­ô 6ÚÈ ø­CÉwwý¡– Ë—;OÈ0ªØp¾Õƒñ¿V›Äÿu?F²Ž9e¸‘|‹bÓùQ,jŠ»ÝC°ò£Œî rÍ]ø5ñrHš~¯Õ-.¶›snHá1žs¿튥R*¢^v&)8"Ç…Ñ,ŸÙlõ"…¦›ûA^YWqE´®ØØå÷d‚3Ò¾‹ÖüYy£hZ«ž³«Ü$+t«¼Ojð#äð¾L—¶:ó\µ½–‡âȧ²6²+ßYFÈñ0Êg Ï*Àï;{u®ÏÅž†ãáè¾HàŠ&f¶g•®,¬À‚ÇËÎOzå¯V.ÎGur:ž¡£ê¶E¾¨$´;›¦<AnÃ*+JН¿åÁR:séÎW‹ôÍ3â_„ì.¤†Îþl4 0µ®I ¹6…Ô#ê+‡ðŽuX>¾»©Û[G¶æ;9lí÷ìCŒ´Ô–Q°€8`OñWsâM>ëGñÕ|1{jt  Cf·£  rÎÃæRÀÍyÕb¡-R2•hÙ•ïÂíOHÖ`þÆñ­šEdº´\‡“¯’Tº¸ÇËÆ ¬MWá¶ãˆI¦øÂÆÖÑ.¼èµ-Œ7méå:ÅÇ™Ÿ›§< ñ^Ë ýªÇÄz¢ÚKiªéú”–ÒhJzÈЩ’B¼”RÅÏ#28Æq#ð§ÿ ŠÖy´½nX'´.²Ü"Ç¥Ì~nè£l`Æêà ‚žxPÄ»ûÎÄÔÂ#æ8.§ý—¼Oymá½^æòÖXæ+wkJ2XDdRQ$ù@ÀûÝ+Ô~%i©ñ’âÊyåÔõ EŽÄ0[ù»¼Çyz6W€ç1ãŠê¾/ü?KýGÓ¯®. ·³®­Ì)ç*K±”!‹oÍànnœž*‡…5Bw€xkK´ˆI/Ùbq½Ò ‡i’G$åݲy ž÷*μTú÷8£JP÷%²þ¾GŠOðÓJ×õí:Š_iw«t`·K´‡Éº…©ˆo pHó_]øB}'áÕŵ®å?nŽÜYà ug†'vS‚YšVcð߉}CÀWº•ÄMæ£xcì¹’>a”áPPÁ”†ô¬-+âô¼O¦éÿnuÙè/w>‹¯C$s\OmrѼÂïæc"Å*|¨¹d\n8$V“‹ÄC–/åþF”j*2mè{oÇÿˆzŽƒû`ø Fµ¿‚ÓGÖVyo£ 1D‚I7`ñÃ".ÞÍî+?Qø­}ñjûÃòÀ÷ý‚âD‘âTû;É+¬0Fä‰XJí‘Ib2+£ñgˆü ûSØÃñwFÕÎ?ØÝišœ’ÇåÞM²ÙnûªHãp$òI¯ ý–>+ZüOø™i®Í/ÃÚLjWpIYn”Å´¡~ŠWå>¼wÍpai'cïÃ}GZ¤d¢ÞTz—Æ…¾ø£ð›XÂÐC¡éE…Χtucðb4TG¨‘_Û@Ù/†´¾ø;Áúæ§¡Ýë÷öñ.† …ÁÔ-ãùc”ÆÕUb¤Œ Ö>¿©¶¢úÆãH¡>’X¯å€‘º°‘yPô$$‘ʯ܆^5Ê|Yø!âÙ|{¤ÜÄ–še¬vú=½˜h¤°ƒk3Ÿ»Ø“€I’3×AI{’–Üä©8TNrƒ¿—ùÅ øZËá?Á+'ñd3Íâ/]^x—SŒ\Ç0(dû-ƒ/ Ð@ÄFQænz·À?Ù? ÿg뫉—ÎmJF¼[hÊÜ$±+ÆÿxÌE :‚G¯ð§áÔ^/ð¬W?œÚéÞѾÃg ¬R2FCí%·³(‘ÎvŒšëh/É>™á è¬ô8!ðu •¡bŠG»2…=áû3nñò~ZÊ´Ü¥ìŸWò.0”bêtØãÕ•¤^Y·`2¨'‡˜ütýžåø`/×áõëkö¶šu‚Ý—‰`»å Á”1R ¸S¿jU< ­Z·IítkäÂÎWt°Íå#2Éêxè@Ï Ÿxëã7Áí*o []Øé7·wFq¦Úþææ[y#„³ÈÄ™ÛÌh÷*°œœWEU)µ*nÊûûHbS‹ºêu‘|D×¾þÈþðÜöPÃâIµ„ñ 6ŽnM†Ð|¦ Ä*I))m}ð¦ÿÃ>$éþ=ðãMugᘦÑï#¶fhä7Æ“ÁéÄ[W?++Ò¼ ã·ìÐ#ð†Š|C«Ï¨øÄØéqKgäÇ¥Aû³sjò¹ýäÑBÌTp]ÈŒšë¿aŸi¾ð÷>Å%È´Óu3H²4’©xä¼=3† ðMrâ § N?ÏCˆöudúh'ÅŸÚËTñÿíƒð’-*ÊåàÓµµµþÎ’hËÉ%ĦلñĄ̈ʳnPI /8ɯgÿ‚’~Ï÷mì·ŸbþÍÝ2Ίmaê&“8s“€2Œz ùã—ŒôŸ€_ðT{ÝÛøE´-NÔ§†Ð‰ˆÆY6/DbÇg'÷(NIÅ}íûg|bðýÿÀkÞ u=7BÑäÔa‚ÂE†-Ll)ÏÞ.€€Rƹ1ö¡Ršÿ‡¹éÁ¬fJ[¦ÿCòãÀþ/þÆÔ"}bØIonÃÌÉ+ç ‡+ãü+éß ƒF–çPÔâ_]ÎÑýŽé’I,ep 2O÷¤Pr6°ÆFr x÷íð¾x»JŽÂ]+ÄšM¾«heÁ(² cmã(YA=óí^›ðÃz‹¿gmQµO‹PðÅÃ\M¨¯*UYãß(.(Á''žƒ>½j©KÚV•Oi('·MgÒ®¦ñn·­¦´|8±J¯qÅö{Çˆë ™Þ¤°)½HœãŠè.'ŸOÑâµÓ³‚k˜o¬'K‹Íã¼°¤ŠáçÙ…ËÁO½Gmðúëà_ÃïXxZÑ.tëè&ò[yïžÝÄÒ >f/$deùŽNG5ÌktŸ†Þ)×—L²±Z“y×_½e½{“’ÎcYÚܮáÀ=«Å—¿¤u6gF’>CøÁá[} ÄÒ¶•sxöwSJÐGw7›r"mydè]É,@û¹Ç8Ís°kSèÚ-Õ´†ŽôýÞ6†ØSv›¶xæ¾·ÕWÂþ=bº2[^ëZ½¬Ó!¶’àY2wçä–éšõ/Ù§ö±ñΪk-&k›8ãKùû-²’à·:€2K~5èÒÄÆ;Ô¹ÃJ*ÆÑ{Ÿœ> øysñÆÖ:L“[m¾p[— ráêv‚G¿ZôÏ|›áoŠ'³ð³¥Ü%7Ã#¯ï€'„Ø:žùÈâ¿@>'þÏ>Ôü=ðkÖÞUäÄj!°=ýðqå¬+•‹ ]¤±ÁÎ |“}ð;Ƶ½Z%]2 8ãd’”¸`‡ ʸûÇ®3J8ùâ&œ}Ø®ýO3…œj(ÁÝõ0¿dŸƒ(øâÉmKXéd*ê¢å ‚æ Ü¡ÄÀn*G óÓ5öOÂÿ„žøk ÀðÆœÐ\ä+ù˺DÀÊäÀ8Þ¼ÿàUæ­ð{áœiñ±’çÆÎL¬˜ÉgÀs‘€NqZ^ ø¿¤ø‹Æ–Ùë¿gI.QgUo‘A"6åÎã!~lãžk f"uäÒÛÈôðÊR‡ÚêuÞ"¹¼Ô¬¥±×fU–ø¹²ò#e ®Jgvv™ÎxÈéÍy.£ð»Áz80ø†öÞÂmBoܬw²Crì>g”€ Hw1àd  ôø›Ro"èö·–zu­ÃÏyyu ùä‚AxãA–SÊóœ VvŸáï¶k1O|nï‘nÅ»[ħí(›  ™xÀʱÈúsS|±»vDVšª´W8ï ø*ÛÃÖoàÄñŸØî!1Èbf„LÀ`Îå@ò“ œ îèRjßð“ØØÚhé=ÆØG–A%¼¬ç‚C¡ !qÐåO\ñoõ«»³§¦‰ŠÎ ÓæºFéïn8‘“œVÖ‹ðêæÚ/šÚÔ\ #y>Û¤2df4B²§¸ö53ÄÁ½]Ù1—$mÐÀð7†ÚÓVµ·0GµÌÂFd¿ ÎÖÜÒ0d%Ø2´œ¼3ž·ÂwÞðwįx‡\×% oy ~nðd/l•SƒƒƒÛÌšƒèYåÑͱ¶Ò¬ãk›‰c)¡@@>é;òä“_?þÑ>:Òtˆ.-ôB ®µ›¨¤h,ïÌÚ±¬$F›‚‚;Nwq^]gZ«÷V§ l\èÍJ–Èû7ž4?ôÝVûàcG.ƒ¥Û+ hIl',í‘’HÝÈãšñ¯‡¥ÇÄ‹_øZsh"Î[I-mnu‹‚ý._*6];*l$.zŒšøÛÂXöê|ç ~Á·~8Ò,í¾>øŠóZÓ­,Ö=ª& ¿qi%9$ö ¸5èžý‰þx O6Ú…4ãóï\/›p™³œ)Ç+œõ¬q“Þ€ÏAÎ9¯ž¯™â+¶ù¬ŸE¢>Õah+r&û³‰oÙÃÀ©Û]ÿÂá´Z.Ȥm>2Ê1Žã½aàmH·i:^›kRHÑ>˜ ƒ[ã$ôö§¤%±¸ž½«ÚMîÙÔ°Ô!ðÁ}ÈÌ±ðŽ™§Êíc¦Ø@ïò±ŠÙ°ô$/5b[ŸäxÑ—¦6äc§O¥[b?¥4ä˜àŽ*œž¬Ò0‚VH‹À:¦¦·¶º6—Ú©E™m#öÎßjÖØ7qéÀ©!·‚ ,qn늧&Ý›„a²#X~SÜg­#Æ0F*ÆÏAÏ¥/”IéOW¢*Åo, '¯zQ¶3Ö¬y[pTqצ>JM1\bž3õ§öãÖ§XÀcùPFÑýh~£Ý\`]­ÀÎi6 9Á犕@a“œÒpHéT®-†*€xúÒᙆìþYÍ*€ÝÀüiÀlíš­öÆöå÷zR@!†îyÍHÜŽhqå6ÓÈoÒ•®®"=ðTË­A¦[êVÒÁWJ6¼r(up{x5k¸>ÀSLaq‘ŸÎª2bv{žQ­þÍÐXݛτú•×…oò!ý唄ö0žwù ÕqñWÅ¿ ¯Æ íz|dªiªÒÄ£Õ×ï'â÷¯]'k’>Õ±o:ð}kªô´Õ×ã÷˜û;ÅØÀð§Ä}Çv qáÍB„“ V®Câwì·á?‰sý®k#¥êÉ“ýî¥Võ `65Æ¿³¦…âK÷Ô4U›BÕœäÞiÌ!g?í¦6ÉøŠÄ:—þŒk6Ñø·KB3=¢ì¹{–„œŸø ?Jè ÜeÍBv}¶ÿ‡0­5j±º8K¯|Oø3M \èð®XÇ„¾?XùVÛ±ük¤ø}ûYè~(º6>'YtÍF3‰a˜ymàÀã¹=+¹ðgÆÿøè”Ó®|›´ûðN rF}N þ T~ x_ⵆ¡Ç_Ç"»Þ&Wl]=™hþí™ÉõyÒ× =;=Wߺ7,/í5H|Ý*h¦FälÓäPÊyçâ¼Rø㟄wFëáV°uË$bÆÚèíž5þêvÙ®J²N¤£s¦ƒ§N‚kÄôO…>š+ÂÏ4¾Vï²çmå™Àè\u¬+ëëm3J{k«[:q†Û@pˆT´—·ANð†£%¿Œägó¼×³–ÎÒÎÚçËY°Uãj–û»½ÈïXJ<ÎïcjUT‡¢iÖZv¿àÍWVðôÉÒ~òX¥zlR¡C_v #®HÇJò?i^#[-4Øéñyš´ÒDvÂ<˜Ãdá÷÷+O©5íW~ ‹ÀúyÔµ¨¦´ki…ÛZ0Þ»výç’ºE`|;ðޟ㈵4ñe΢í§/m­c¹ g·@¤à¤œn‡4'fŠ­RÉœŸŠü}¨émytö J‘„vU[8Ô •|䯏=:n£áï€4Oh–z<ºä¥­ÕÀ¿¼š1ötiaι؃qÎIï\Íýþ³âÿ‡qé~5·uºÕ¢”Ocü–‰$…„JÇû«´gœOz±¢ê6ž†ÅZ+Í XÕî/š&`åWŠG (§<ž(æm=L5‹Jçà-Rÿ„ÏY°ðfzM¥½ÀŸSHó:\G" (Ì1’_·ÍÀ\ ×зZΗáÔ{ý®ú~`Îì# NJŒ/«;GSÐW˜h? o‚ðêžµ›LmkYû1^űïå $™Ë –pO,FÔo¬µ{õÖ¦¶—\™[‹ìa¶‹,÷yÀ@ÛöîÏ9®zÒnVgvÔ×2Ý™Z?ˆ,?hmwS¾°þÞÒŒ2nnm3c0\¨E8 ò‚§ƒŽëšõ=KG³ð¼Ö†;A¾÷˜e’‹q#ÆX Ç“Ž[è„çÔð½íÍÖ¹y{­_Ìo–9b¶œ¢Zn# ™Œ0ù÷~aô¯/ñ¹—Àz‡¢ÖßYšÏU¼[©ž}MÃBáÖ'*|¿)û¤ZÂIò«;)sMévbZ?ÄwÄv ½î‹ðïR“Ã^„F©{äCq²%‡Æý…Ïñ+œó]ÕæðE­¶¯ãGL“IÕe0+C:´Q¿Å*r‚<sÍxÇïOÿ œ’Zk6zm­ÕIJiöšaA f\¶ÀTg$œ·-×=ªþñM¿Ãë Í/Ç­¾¯ ´‹-Õ¾ †I@ÀÜ.çƒÓ®"²xHÕƒ“w:>²éÉ(­w‡â‘âxôioµý•%K&x¤'B:7qéŸZ¾'fÐmçñe´j—z¤7 nãªZ4EU±Ç˜Šww'#5CáÿÁï‰ôgÂúÅõŽ—/¦é× ëƒj…Éòð¬Øî '5^GciŠ4ÝGM¸¼t‰ç‘£š 0FøY¶.OÌÍ€3ƒŽk¤5¼ñÖ…jº5äׯp^&ÈP¬TÈå²yéž•†FÝþów(Ójä?µÍ#Ã:$—ú•¶›±‚I¥šànÆÀîÅ›€2IúWÁŸ uþ7ÿÁVü'«øzIäŠÿ_»ÕÕŠïtDÒ®/“ÆÞ§>ÃÒ½ßöÆøák×÷W­m%¥Ëx{I´šÍOÛžæÑ~Ñ1bw«)PB¤õ5áŸðK_ÍâßÛ¯BÖcšhì¼ a}paçíWÇöX-ä#ø\Kpç¾a_^~ƒ/£ÉNUÖÌäÌ*ûœ‹y5ù£ôÎ=ŸçQ¹¸]ªC²ÿù·(¯Wñm<-àìÝ*Xåßgœ~mÓ´j¹%3 1$ddq\O‡ôƒ'Ä[!¡Ù¼qL_†Ê&¹=ËmÇ ®KPø«o{¯^Xê%ÍÛWȮƇ`(Ѐƒc¡py5æÒR•]:sš¦®Î‚Ú+F+«•Ôty£·¹’ÐÁezKîñsòÁùry=xö³¨x·Løƒu‚ôèìÀ½Š32+2¼Ë2ñÀ*ÉàúW}ლgÃÛxŸ@û¦¡¬ÛÞ_ËpJy–ÌÙ6Ù^de³ ÝCyæ¸ÿx&ãÃßõàýv}JÓZ1ù7kyqÛrU<¬í”¼£’ÉÇO_Úµk?¼á•;ÝÆ´ðø—OY<5%…õ¼Öë ´†_³NÌ %'k.áˆ9ûL:ì1ÿhêFG·P!X™&|m<}̼¾Ÿ]ðf§¦ø@¶qs"h‡HKxåò®£š)AûãÆÂH#ì óóqOÆw†ÚõŽ™®²"(¸{}Í•!*…\íc›+Æ+¦ƒŒô¹ÃV›¡±¯Äí'T×®¬†©oi©Fì‘[¤ÈƉ#÷ÄÙ<žqÞºÏXE­\™¯¤¶66JvÝnB¨Aàg8žAä+Ì<9¥jØÝ\êözm×Û I­Ñt„–#æêÃ…Çã^‰àO ÜxgáÍŽ›¡¤V×d¸íp …”2#·FÚâGŽ6éBÛ.sæ±'íÎk¹ XySÙé°oz¥X˜2’¹=8æ5䜒yèkã=–›àëZÞ«2èžÑm×rHB‹T(b@9\‘‘øöªjÚZ碥*®Ö8…©}t°ZÝ”óR)&™¦;|¡¿'$òç.;fºK@Ôn펱¨^ÚÃ$rƒ…œ~dBƒ–”€æBæ ãÞ¹^Úø@¶Õ´{«]JÒýIŠòÞmñʤc†à} ¯WøW§É¬Ã>“0F³Þ¦YX+Ç…8'¡n01šàwFßÌÖÑ„Rn震„¯nõ˼»‰í§»Üê›~eî¹õÿë×âí ïO:váH ½æ¦bûjÇbnÍ¥—ÌžGl¨eR{°#€z7Äßê~²Ög¿ŠG¸´·cm ˜Í*®6ˆ # <€Ië^GðóI¸°ð™‡Ç^:‡Ä=~ê{¯ìänn4m-JEM)awQœ» c5Ó‡“ÖHU`¬¢ŽSJ×u=Sö…³Ðü14wÓâßjZ…Ì–d[@Æî;{o1üÑæb|ÍŸ,ôתÁ¤Cáé/.5$±ûCk«Åˆ%1‘œàmÆx^1\/ÂÉ'ð·‰õ­JÉ ûf£{oŒÇj,0o`¡ˆÚ±«¼¸<ã¯Sé%»ò¥Ñ®–Il§Ô£’嘾ä‰NPœn9Ï'×D¦¥/#Žîؾx®äÕí¤[+9šI^K†#]ÅГåž@ô\8ÖØëôä;Mpl–4q,ÅÎ a·æ''ž3^Sàï E¡Ájú5Æ«ö[§ó£šgy®&‰ßÏŸqËJù$äð«Ò~ëBÇÄñ¬Ð›ËY0¬›ü¶Ou9À<޵œä•˃qvG9âO…z¯ÃÛÓ¨üþÊ’Òäƒq¡êð#ž»¬îFáᜣ)€FÎsÏxGöˆ²×¼Oo¥êmqámN£ó´­i>Ë#’¢M±ÌO‘sÁtR2ž{ñ]ßÅÛJúò4°j[\±’MÞ[˜ÁýÙËòÇðš§áßêW¼Ò$µ†ÿM¶ÄòÛÜà?ÆŒÆQY8ÂQýçÞt7(YÃrߊoˆ3Õ„?e°ñkZØGtŒ¶¢IypFFFŸ»Øk–»Ž=ñî,u5"GÌ¥”@g9ã¯* ø[Ä>+Ö£Ö>/ê–7-dÓ Ah‰ojç/#Òȸ-è½ê?i6Ú\7—–qB‘ï/-º|‚ GU'…\óó`{ŠÇMÆ¢pzAïÔüîΕâ­zÇFñ;ÜXO$¾Z¤ÚX±…¹À`s–Ç~½k&yz…æƒ{{6’yw2Ü5ÂJ‹ip¸É\ ÄãzåøwE¸ø®"Ô¼?mɧB–÷fêPKÉþ¼°É#€Z³ñÂÖ~×'Ó´§·’4…ÍÄwßl ©XÔ0ÜÁræ<Ž•ö®1„”$õì~Zã+sEht>ðµïˆüqyá†÷I ^!´ŽµGÁºc»ssÂ9#±ŒkéÑá…¾¸Ó|A¤ùþðÅœ—ö’\»¼w«#´Qó[s©¸³¹P€HùCàçÄk{?;;»Å¸h¥¹Š5CâD…‹Ížmà9é^ÍñkâOŠ/m´ÝÉÖïLËÿ‰|p,³^ÊÌq匀m,Äs’0iVæv “¦œYâÌ—>%¼ñ7ŠXÚÙê¡ÆÈïÎÐʘÔ7rÌ{W™\<>;×5-WMsÒ ‰B‰\Q´Ÿ®kêËßjú¦·¤ 6-;Kº´0ÚEmÕŽEr&mê:|Ș’2r@¯—|uð×ÄÏÛÞ<²GivöÑ=¹]®ÿ êF*ðÕ.Ú9ñ¥I£Ó|'âèµ:ÏÄ7÷RZÚønâ¹;Ì® (E“Éo¼7ü¥rä€Iú_ÃzØñ.™"[Å$· W©È3¹È—¨ù@9s_ |?ÔaÔ¯ä‹_GŽÐ®r:1Ï údg‘Óñ¯®>Ïa¤øM¬ôN[Ö2$Ê’]‚tí¸Ú?vA –8RHÉö¨ÅÒV¿Ütaå͸^µ¼ž-&Y£Ž$Œ, K&èYÁÏ9 s“–éš¶žµº‚æaÍiŽ {¨äLcnä ÉŒNnÇ9ãÑoWUE¦Ç¨XÉc‘+,ìYqÌE‹c™{àϦðÝÌqKc I=¦œºkÞ¹]ÊÌÙÚXmrx' I¯=Ç•\é§'mÎú][ûGÃÖh5+}J%6òÝ@V6[‚NèýŠG¹@à9Îj+á7Žm¾Ã£êͤÝHÉ¡”‰ä ~ñ^@+Ï¡5GL×á’km>ÉC´ò»G Þ¡àó…œ`å¸^™5¹ ø>Öîö 6VŠëX–ÚiãuwÁ`p>\¾k–¤®ÑÝN¤Ú¹GÄZj›-aõÈâ“GÓ QB..☙ Ȥ˜Õrª»à³ddV'ˆ<;{á¨o%6Ö–¡’1n¥HÁ’;| sÓ5gN}åÓ\è7RÉhþMãGy #pÌÎK㎥?Áz~‹ã >öæóP:]¼ÅÒÑ­·Iò£²¼&ä#¯%N7˜¤½ÔW»QÜà´7ƾ'·¸¹º²ŸI± ¼Í1‚6Ë®Ò –`5™ñÇOÂëûfÔ/ ñ>žÓ[ßÅh©!ÙÖK0¨ 9<Ç>»­ÙÚ\^]Eš# ¼³ºÌ2¬ðFŠ~lmoœçŸ‚áñt*âáïqË™®@iŽù–ð„uEPX¡ç‘ÊxgQ‹NÒ47ÆÑÅÄ[%]>ê8žY#‘Šý¦]¸,YÁo ÂÅðZ ø…4ï†zÿ†ü_©^É&×·EhÑü¥ —a&ðdÀ;]k®SöÉ©ýýýLáÆ^î½»£[Ä>ñ7ŇpÚ²ØÉ©›ûµk÷Iž{‹I5Fû(Ž ¡Ê…%H ±HŒ`zwÅK±ðãAÖ5­.âkÝbßI‘"ã|· áŠHJ*bL“‘•¾NMeü5øå§ø¢Kp‡ZŽîk9..¯]lïf‰vî·‘— ÆòwàµêÞð×ÛVÆóÆñ½¾±w,‘ÚÙÅåÉm:G˜ÃrŒ¬`á·Ÿ¾Bäž+Žstí´E^Z®½Ï”â‘øVY|E¡6—âS$ñéż.ÖS½Ò5Çîƒ$œn`æ½£À?4Œv" \mC_¶L2[ºˆ£…Ô!Œ-Y«†f\Ž;“¹ã¯ÙþmN++Ï ¹{vctÖ¶k3˜†ò"È»•pÃ=9ïZÿ³ÏÃÚeÉð­ŠèðÞH‘Þ³mù0=²+W‚Ñæ»bêdSãq@9Î9Ï?—²Ž>¤©¨ì¿3¦O—s㿊º'>%j:Sx–Qáí:k¹-’ßY*WEûʱn'*H`ã&¶ÿd…ÚŸ€~&ø¿[Ô6XiwÎ#‰v`^F °d•Úß6ì‚zw5íš–º3@ú´NÒ,qíGð0ÞS žVŽŸGÒ|.·>$¼l£()oùÑ )&ÜðrX¢àóÅi,Cqå]NgE¹·©ñÆëÆß´¦¿eá{5¼ÕêL ¶Fe¶r¨¨PKWqnå˜×××Ú¨ÿ²ÿ„|ñLŽûÃv ÚÎТ››˜!Rÿ¿go™g˜Ä©òÆÆx«¿þé>Ôm§ )gNHĈ·‘›÷c _·Z1ÓŒ)¨ÝGó:°P•r÷µg’~Ñ~›ö’ðT ãý. fÕÞÃìyR,Q¯¢1ÂÆø+‚8Á' Å_ë§ü/ñNá -º~t3­\=ÑFV»PŠb“{ÛÃã 5ô•§ŸÂžŸQÒ´»4Ô6,Rm #¹ˆ³mVB† žÂ¾vð6«{oñ©¬f×4„ŽC%Ã#ªI*—ÍÆqµryçÆ«óóSë±ÙR|• š÷Ÿ^ç½Ùj6Zßö|,ï}©inú|—*é÷d eçÊV;ŽAÉÈ<æ¾[ý¿~ê?ôïk^Ð&_é×·Ú¥®™t“[­Ÿ—¼4c!ƒ‰J; ã9¯Yøçã©´ÿxGOѵh4ÛK¥k‡k¹%’ö//8ˆ.cE,GÏÆvÓŠä¼yñ(ÛM—‡mßÍËÆÛB©+´åñgæõ8>µËGÚQšœw83 Â1NŒ#©â±Çíö„øÅkàɬ´³s³´oª!ƒû5aPí6ôÖ\îÇ9Æ8×Ý;K-Àñø;×ú–§a§ß-åæ«ɶ¸Ô®Q{–VÜÉóàÜCÒ¾MøKâ[Þ ºÖîïÌú®ª³!xcÁ\üÛ›Ýx'ËŠôSñ-,™oËL+Ù“’dzW´xá‰ñ\—s{ ûË v𖝧*$Öù;ù²<ª0dl ÍÔ¨•Ü¿¯A¬C¼WÌä,ôȼSâ‹]cP¸‰45|³N°Àd\î†;Fe’Lî!I;{â°üI«iÖºµ»øv]5f˜”¸¸…ÛQ½`JÓªð¹ØhïšôoÚá•î•«I¨x»Ã—ZÄæSk§\[ÌÓE¶6Žv³ä™‹d’I$×Íß¾!Ù|>»ÙØýí˜Á$;ã^Ÿ)=2}«’¼­©Ë‹­ì/s²¾½¹Ùu-­—ÚnbŠKÅÛµÊp<´ež0yÀ<â²§ûP° imq+Z\µÅ¹™ãQzÊ39cµrX`€qŠÑýþ&ø3^ð½ö¡¢éºˆÔ–VO/RÝö˜ Ê ž6–ÃcnX`ç^k®ütßÄMSHÖK}¶ b‚Î9‡”dy\¬’àà…P@\ú¯Jºµå rEzžewVq•Û8¿ÚÆ šN…«†ÒxüýBê8ÃÀnCªÇ•p¬GÌÄàt5&™ðŸÃºïÄ)ÖVI¦–ØKo,³E;’„3®Ñ–;$“jôËcÅ3AÖ®<ñ¦ÇRðÕÌzÈ´¾2ÚiÒN¥RèƒRñÜv±ÎÜç#÷Âøn¾×´}Ï[¸@f–ÕK4Y1oeÓ=ÎMsc±³ÃÓ„ÓÑ­¡ÈòOí_}»DðïÙWö8ð¶‰n<@š§>¯quö™¯r9¡¢?Ä:Ó”63Æ;ŸZ0 §ÖªÖÚSü((sïOiìô¤Ü?‡ëž”¶@Ûžx£òF? ~ÒçÍFK:ã§J|¨l*~lÑßÖ•vHç=sJåïC°î5W9ê1Û„ñœ¹©†8õ¥(a{ãÞ’DÞÛ‘•çŽ@÷Å/¯ZW_˜Œ Ó\‘ØQ¨\ Ûèô¤“ÁzÓöq‘߯éÇ×µ5v'¨Íà Í1âÝž„sRžAëÓ¯¥6D$dsÇãTÞ÷!ò±CøÔR›ëV0Xý:óLx²yªæDÉ3ŽñÏÂǬ%×,T^/ú»¸ Šá´‹‚~‡#Ú¸™üã†D·…/‡Š4Øùû5ÉÞ dŸøé÷¯a+ÎFqš†XÛæº¡^P÷^«Ìç•(½vg™xgãÆ«ß›$ÚN¦¼5½Ò˜¡ëødV¿Œ< ¡üGÓš/Z[^E*ád ÿvAÈü køÇÀZOìM·Štûkè‡+æ&Yª·P}Á¯/ø©¤Ø~ɾºñ£â­M´òR+]¢3Ëw4‡äŠ9€Ý»ý’¬x®ì<#Z\Ô¯]NjÒt¢ÕEÌŽÅ? -¾ÍÝ\ÍÄ\[ÛI·m¸!{I$ýk£¿S 6ö…²´÷±•ƒní†%aôÝéêÕ³âÜêÚEŒWÒ¾<Áp’DF`Z#ŽCp3šÇ>)ƒÁé$¶†é-¡«¡+*HÒ,r>m¹ÀÕí·UÛÚÊìù¸V¨Õ(Ùv8ïÚÿNø/à] ËÒjþ*Õ4ñ4 X4ë-ʤ‰Ç*‹!xãžµâ?†/íÌÑÅst#bKHσÃc¡äà “Šé œUú^**œzúY7¯4pA*ÉxW »ˆ眓í\·‹§ÔþÞùvòé·BþãËó¥wy%ÈÉ ¡xÁg?A]EÆ©?ƒô5N hl|èlDí:¨Y%”EF3™œµsÏ\UüwººTŒÆâg‰ÔÇ´>pÙ#…$z‘ŽœŠê„m©äJ]Ì;i5ŸÜ]k:žZàyžfD¬í¿sÜ÷Jò:µFêJ?i×zuÖo4q°"’Ò¤á–HŽÜ¨aµYs“‘é] ¯‚ì­.›ZÕÖÎÎXgtb,P©Ü„`²äqÆÁ ç<-àx¾1|]ðå—ëû»ô:‰Šîy¾ù…#ËÄ € å~kk§èeÌâûŸYjþ¹ñWÃHõ_‚^ìÆâ;Öæ'P]äÎß+kgå\ö=ëË|¤>‘§j6úm兽ȴŸóbkˆ”ýÔ-œî1zæ½cã¼^øc=¦—"]M”0C/ö7Ø2sòŒüÀ ŽkÁþŪëûW?Lû†Ç+åK‘¶îC€]A]Ý{ŠæŠS¿.Ç¡^éE½Çh:Ò^ÊÖÒÊàÞ£5ºLñ}ÍéÉ'¨Š í<àñ®¼·s~úÉâò2«&\1 :cFqž¨!ð¡oª"øwUi‚Eáchb©v#äéߦkªÕ¼s?„õ‰´ËûFÓ®51ï k$[ÂÆJí•—¨Ál¡=éXWªáÉÂÑu'iìrK?të/ëÚ¬¾Òü!<–:æ»\]Kb’fp1s’±8ãƒ]÷ƒ4kmOVµ{M*ÒÆÒ;zb6–PøLÊÜ®ÔbxÎkåÏøÓĉâëÿ³\Ib’•¸’ÔM…·PŸ(Px#àrrk«ñWƒüHÞð–¯â/êcOñ5µ®¢¶¶4!'‰Ù™í$fáØ¬|±Éù² 䃜í)4wTåRqþ­äz÷Šþ<øSÂ? 5v+ËIôÈi»·Vòr û呲Hë‘×åº_í ¯ø{^Õ,4‰meû;Ú@Öó}³S̃žYQÈ;‰VùA¯BðGÆÿø{âEå¿#‡Hµ×à{»yu8Eº9DPÊçqP»ÎâÀì1|[ûN øsTÖÀÞ(™ï­¥‹Ãk"y¶Ñœ‰&7É]ˆ_°B7m'²¦µijq;¹©7¡GÆÐèz-Ìvö—º[N³]yŒ[ÇpçæØò©#–B‘ž½O<-–¯ªjsO!mྔÛ]Fñ«p?XÀlAà×Qâñý£àVM^95 /lþÔ§ï­gØ„@Tü¬ äÏõ5Ëßø7S×~Ýh^¸d¶×˜YßZÝ“ÛÚÈÀJñH­Ê›ö”ÁçÅËÈ›æÔô£/yY>i~7ñ×ÅÆ2ÝÉ‚¼¬Cwj‘ÄŽÚ´ñG õHòXÿ.ÆIëæðÏ‚ü-â Ãe i|DÆïíjÓÍq3Ѯ˓C-ò2`dr¯FÒ|5¸±þÄ+©[ˆ›ûDÌog·†21o(g‰7¿ˆã’jµß´]bÝ%:…»N°É8 ÀÚAùã2u<1Á<î­9òr¥¢1¢áR¢œÖ¶²,%¿ö}´•TIšW…(#ñ'¸¯4ñ¯Ãm2óZ–m6ñQnX\ÅnȱÅq•ßéÁ9n™Æq]O…uؾ x~úòÔm …ë[´yóC:ƲáH™ ȹdû¬Ï¸Ëï›u¸Õï´é¡K±ÂáY/›hܧ%FZói)FW[õ;ç(Ír¢·Æ?‡ºÆ¯§hVzUà³±—ûZæê)ü¹a‹>Z#FÀÇ2-›‚màšÌñ¼k>5{ëf»šk›x®n­QS"I{ê6ƒŽ;תü#ñíçŸ5yüqÕÆ‘zšb< 䨄(årFrø8#Šòí6æßIsd®#žà¼’ˆ]ŽyöÎ=€®Ê•ãd³W7´ FÕ5Ý*ÊçO±0Û¨ÔµÖî˺åR  Ïæ¹É » dsUk‡÷†›áíJúÝSMÖì^( ]ÇɰD ` n­Í>¹â;jÏn.n„YC‰~lûªg·}kÑ|y¬éþ4ÔbIJb-5$|…•°õpáTg¶I§B³”ÚH²RM³çï‡ õ? jRßêw·×v‰ož¶ÈÊlã,r\`eŽÓÓ8rk¬ø3¯Þë>¾ñ ¤'PÓg¾¿´‰¤žG•RšØ³ÄOʉŠ6O^£¥gxÓEšÇÄšž¥á,Ùië6Ûtó]ÛË—9'''³Z¾ ñ] 5fÓ,­Ö?&#fþAPäœ#å$±Ï’Ozî…FÝ÷ô<©ÒäVos¼Òå:ÞŒ×:­«Æ±’$yU]T§ @éõ¬–ñMˆå– .êi®• Œ&l¨=WŽyÏ|žxïMñšú…#´²½ƒLU*™|È­†ÎÇÎO¶9Ÿ…ÿ ðV¯uzuGW¿º8/32¤~éTñœ8ó]°Nm6J”Õœv;L<쬫ˆâÝ*©ò˜(„g#=É«š½¶ã5ìÍ­Ô¶·Q„•&u)&Ì6Q•ÉèzŒÂÔ4øÕb–ya•žM²Ç#9#=3‚0AÈ5þ³oS .g‘y2 àAòm?x䓨ŽõÔ£%¬Q¤ª¨-8ñ?ì›á\´ñ'Ã-RãÁo¥êK>¥§xl%½ž²¥³%µÅŸ10ãtêªÿícŠï/5Ùáñ6—3iö÷?<² O¼åÜ®1ÆXv®e<'&«¨ú “Ú QL–"PÓ"Ž›±ˆÆv“íT/­õ ÂÒE⦻ԆɌ;oéµOVŒâ¸q’å´ªnatië-ÏE—âå½–u¥^D5©!$³ÊÛ$,Ã0FÁã¿­gêz¡®iྛ`no Sq­|`’Ü'È RùoçíÌF äƒ\_€Ù¹°Ñ7\ø–åã†6£6f=é“õúó\§4=ž7Ôum4ê‰{`è°ùªÞVÈÛ`3t$ÎNzVͨ½ #^“§ÔçH‰¼Gqý…3YÚÀûì€ëcpOuïWo´éaÑ![Ekbv£0A†`9ûò;Õ¨t iÉv\Eo É…X`3¶ÍåHê8çò­ÉmŒºdBAÀì7(#æÀ#°ÿçfÚW5+jbønqâûKkÐOOÔ$‘ÍÝÙíUö¸‘õ?ywc‘žµsO·Ô<töºä÷o°O5—zŽ>]¸ù³‘ƒÜŽÂ©ØkVšë[ÌWÆ»J¦öº.øBã# À95Sâ%ÝŒôH§Ó’êËS¶>k]F3Ì mÞO\@Æ:càtF›jÏcÝèÊz¯™®^Ýß¹´Ð³]Èv~èÃg#kºÔ4¨ßU÷ú¬“ÚÅym?¹ …$|¡AÁÇÞÆyâ¼ÛáïÄ-#Uøsˆ<,š•¤R™ÔO‡rÁ¤;•K lÇ~ù©4¯‹)áKñkâišÉ-ÇÚ‘ÇÙàà’ *üƒÈ+‚(´·f‰}¦Î×Q‡û6R4Ÿ.îÂRB\Ëlè]—ƒ#eûÊ“×ëÏêvñßÝÏ£­å¦£YjÏ•ŽxàÆ£æ$g]øµðò÷á§ÃÕ­ì—³O$•€‚»S,>`À’ |§Ôf·Â/Ššžƒ¨Ä¶êe‚(ÁP“)'8`åøT+ø¤Þ'ø©ÞêÎòÿh\ÍæN‰ò…fÇîã9Ÿ( uù®ÇöqðtW¿`u°žòÆ•šAe—%7〠Á#¡¯Z„œ¡ûÕº¹ä¨þñ:OKžô$ž_‰6ZtÚx³¼{¨Ú)£•w܆Œ G?t¤C{1Æ2G\úm¤#Yðâ¼zsG Nϸ'08Ãlf=\n,ÇúV^¯áõÒñ8‡D¼WŽv–âÒQt%–Ú)9,H‡b‰Ý'y#¨6.¾:mxÖîïþÿ7±é1I4· n¨s;‰|½Á<µ‹‡9È~•óOƒüG ïö„Ï¦ÂÆØé÷ʶs ÓÕÙ D Ä¡nQ¤~ ƒšì¾ üB×4íÄð÷ˆ–ÞmR8BùMqXZïV¸/±óGÌáUIwÉàt;Ë“¼w_×B©ã$ýßø&çŠ|áÿ‰6ðkx7EÕõx5&â×M»³Õ]âÓd…R\óä)yY‘Ù² •ÍMñÏ@‡Æ>…¢h~(ŽÏQ¶ºIEÝÓˆæyUÈË¥ƒ«2 YG;³Užm#áÿÃ¥›Kºñž–z¥Îk6o YŪù{BÊò#ò„Øã<©¯%øà |qáM3VÒîg¼¶Ñ4È;‹÷Xo§²f ’!'ÎĬAÚFÀFFN<ÎÊZ.ãªÚZG_"3ðû_ð'†`Õl¬QÒïg1‹Æ=Ä«!YRHÉÊ>O9àó_K\ü|¼ð/À[?xÛMÓ4ñw9ÑôÝ.ÁÜ$b0 FƒnQÝc. ¹VÇ%r3çÿ~ .áëè¾ ø/U–ë05•˜E:¢[ÊT «y~X½ ón¦°ˆ4ë¯x›Nðˆ¼>a²>Rè·~"Ó¥äÈ%dtcº2å”l`v”ÝÍUUí‹è÷òûÍ)ÉЋ[·ÑŸSit;û[Y4 ~ÚIõOßEÓ’dW|g#?/Œ` é Wc46ßÚ >‰{ ¬²y2,“Îe`q´öíXºž‰¦\iš’¶±¤ZÃ0hg´ÔXÉ$d(-.ïŸ?RzuíY)ò¶’ •bÚѯŽdÖüaâ½FÃÂíý‹ ²Ëa ¶³yn/$`†[©&érv¨êõçŽù<5¢èúV¯ÂÓÉa µ”y›” ½×œpá\†£ñoú³f³M}{a ÷ÒÂæVQŒ9ÂŒrF ïŒÕwÇÐüYñŽß ­5—6qÜ3Êlám¤• ÒÈîà§Ž*¤å$’‹·vf«E«Å\ƒ]ø¥ã/躮‰¥Ú_\hÒÈkr³…X¡näÈç“Ö¹Û„^"ñ÷Œìõ½3³Ù[Ë(k‰õH µÚ¹FG,àŸ#œçšöÿ^ñ¯â‹½WÇúõ¾£Æ®×wÊnYFL[²Bƒó95Îüaøøþ-šþ^éVQiá–ÖÆÕ¼˜â„œ¦'~1óHÇ®x®S—°Ö+SŸVNŸ3ÕôG'ãMcCð5Œš‡‰"QÕmGÙ¼×|Åä±åNy$ƒ É®/ÆBóã=­´úýÅ–ôlko<¨ÐçûÄ1Ï¥\ÒšÓÇr_hÜÃ$šy†sÆnŸ÷ŠÊË!ª…¬=³zçáÜ‚ûLÑôÝ/R¸{›±j¦7Û3LÛ°¡N$®8ôéX©8ï¹âÊUekÇsÉtoÙûS¸Õ,¿¶&šþÚkÒEÑ;•-ÇUxÇ<ô Ó‘[õÔ¶ñ0øs¬ØxjÖúFŽ÷O¼ÓÖâ+Ç «,g—9\o“ZŸ³ß†þ1×¼I®‘¥ëZ¬_Ù‘Ü[ß<–š…ä»Q,̆5h×k0ÀÚxÀ]ÙÉô:)®EË¡7€þ;ê-½ÕÏ}áµ·ðeî§7‰¯§•Ñïl¾Ïàaû¶I#%@E\a°Hzg‡Ôü£x?Ä6:§‰î-ÏŸå™5/iëÓJ›ìɺÖÙÃGÀÆ ñ’9>•Õ©ÛëÏzùÌv"¦"|²zGD~©—a(à©(Ñ[ƒ.Öùyþ´d‡ôéO-ò‚Ƕi®ªI' ®U±ß¾è‚aìi›I9¥Ê0ÙÀ8É¡È ùšM-ʸÀrÜàqŒ’6c( –=qNÆ?„ì4Йݓ´tàбìRF½=SscÔŠ˜\SZ±7f0FAçœÕ& \Ôô ‚sAbIïM"wcBá°rå0Ý“íKEW61ˆôïHcÎiÄŒŒ`})Ùùã¥K°&Ò±9ÀäûÒ”d^€“a –À' ¤~W9ëíEƒšäeSÉëœS‚(\¸Æ;R•ùqÉ4å#?Ê=v#lmùH?… »§o¥?.H¡cþx w#1ôìqK´nÉÎãR:ŒŽ¼þ”3É4÷%;‘°ù_zF%Ë‘Š&SCä?ºv*ý™Y½?.´Ž™ûü‘ùŠ—$/8ôëI³ `ã4‚舌¯8<Ó@Ãp¼‡UÕíô«yžöhÐÅ‚rv€Np9ǼÇÅÿµ¬v‰‚ížêîòÙolœ5š#·¢Ø>F3À䎕هÁU®½Ôa[N…“z³Õ6ã¨Çµ5¢œž1_%x×ö³ñ^“ã¿ßévÍÅ´Yîí»­­ý´(ï7!N×ÚrŸ¹ü=kÖ>þØþñgÂx‡âuæŸá[ínůžÚy˜Çbf˜À}à¨Ã=wpN+jÙ]z1SjëÈ祘ѭ'õG©kZ¾ƒ¤\_êóEokjwvq<QüL{Y¾ ñŽ—ñÂÖzçƒîâ½Ó5f‚hØ}¬Tô÷S^)ñWÄP|~ñež¥à;”¿Ð¼5¤>¡K¨D–Z«Ir±")d-.$À$…Úw_3~Ñ?·f¯ûøÖOüÒ¼;¥Ëe¨ÍNèÀfLÊQ¢ò¾Q´°Ý¼~^3¸ã¶MJQÄÌeMIólшíD“¢¾Næ ÀÏé^wû\ü?´¸ðËjOš’Þiðé¹Kg4×°®ôSÑŠaØ·©­ïÙ ã4?´7ÁßxîÞÉíc×íRò{Pwy¬É"ƒÜFÁ8ȬÏñ]xóŶS[ÍmäÛÚ<ͱ¥H6lxHlƒÉíZe´çJ£Otìsfuà©ó_KioñBkmaà‚¹kg0Ûà ïiÙØs÷T1®ySé]þ¡ð®×[†Öû]F’ iEÝÌR !!]|¹;mÉ8ãé\çÂ/†o¢øŠúÿ\\C§û8) cL —¨Ý½> v¯L½©xSÒ´É$MF(ÕÔ»`ÉmŒGâTr?‹Ò¾…Ò‚Ýj|ZÄM¿qèy$¾ºñ,ÚÌÚâÈâ;¹c+01!]Á™FÞ„õ±âOizí¿öO…þÛk¦j—ñB/b_ô»ö…· .íÛbïÍšÖ}MþÚ>™®?ö¤šz9Ô qmk™”Ѫ’±åpNAïZz ¹Šú[žfP« vò(X-]ÏðH92`iS¼´ègRj>êz•´ï„MDyšf“$zM„vºO™ 4–í–+Œ¤Žï!b¤GÐ[Ѽ! xŸFB¶Ö ¨'Þ%]:µºÎ¸ý"+;-#P}œš…¼a-?v7ý¡Ã*Ê ýöÚ¬ '÷ÍqqøÓVмF,üav&f` 23¹HÜ$ÈX ¾ÝÅl¦âÚ2œ’›Büuø5k§éÚøcT° >éM½Êy¨ÍÔáÁc=ÿ:àþøjøŸK¸»ÓgÓláÞ×W±\à ¼±³ îÛ[zåO|äþ=üB»ñ‹¼Gi¡ÞKg¢ÙÂ.£· ,—I•ÒBÝÆ(Ù‘ø}oØÄ,!²†Ì::K>û‚ryÞÿw““QS è;_ô/ûOÚFܽOL×þ8ÚxKN½-þî|ËN-â‰@çç#;GàÕÁÞ|HŸã^k¬ÙÄúnÛ6/mun¯F˹ƒHØ,XÛõí'„>^øÞâ{¯ i÷K©«µª>¥*I¶ìnB«ÀS€HbI8éŠö=gÁ޲ѭQ%°†ÿF öØådÝ…RÈàç<îät5çbjS£Kvv`ç_?î£ãÍGÆ-«øçS´gœù;O4N‚BWp 8å@=«Þ4ÏŠvWúFµáù^ðþg6—7oi¹ˆ%0Ï ‘, õ$c¨>eâ‚þ'Ñ^Á}« F5cŒãfÝc³ørºW‡ÿ´-tøt}gÙiÚÍôwòAq ù²Ü.H Œà溵½’'M“Ä6¤^ݬe³rðÄŠ“2mÎwòñ» ö¯/ñGÅntÍ3MÖ…–»{¦A~¶QÉ‹dD†¤,˱†2Nà ×á_ÛÂ×Þ2Ó<}¬Ksÿ %ñÒ – ·Q#|ªŠD,7‚ÀŒœ×U6ÜtW<÷G¯Ìôÿˆ>1±×¨¶úH·ÓïÔlŠâXˆ¶0®à¡Ünf@xùƒö»Õë¿‹VZ‚öÚÊ60,ÂâÊyVW?z)I /ØçÜÕÁìùÑß®ßä-…Ý×…¡–ÛIÓWQþØa{y ®šñy r±ù·¡$uNùmÙÍx¿í/ñW\ѵ}sKÑ¡—O]eµµ¹dFOÆçÌ(’(,›Wå<¶O9W¬| ð‡þéKià«?"K»¯¶Ï{¨\›»©ÂWyÛ,@ET 0:WÍþ(ð•·ˆµËü;ÿ .–è®Sí¡íLŠ €ã G!<Æk¶ý>kš÷Æ{?í^á|=áÅ7—0=ÃJ·‚ˆ™ôÉÇý:ŸRs„aÌ›<… órî‘ôž©fo­¥Ô5‚ö¶ðºË4°¾Éæ'—òãvœ:ã¼A&‹ã-:ê÷O¶”éw® Ý)!ädçpL•mQÆ2sÍGñQ®µ=NßIÓ®Ò»_- ¹F]¶©UrIõà álߊÚGìçàßÙø_Hº¸Õ5ŸiÚ-³†Û,Ë$ê%v^ÿºÞü…ï^-*“”®žì÷%»&‡%ŸÂ« mü=÷òËyöûÏ0•w-ó21Žã¦:Òø;àΓâHÞok“ÜG<Íw%ãˆî-g÷Jc@ `’8%†2Ù­Oü,“Ä5·×t bi–žöçEU5 ¾YVÚ* ÀFÅKg‚p+›øu¬Oá}IæñÍôvpA6ÉdÔ,±Œ ±YIÀÛ´`“8¯fœù’‹W9§IûH7èz†|wá[Èu}z(£ˆ4‰JÛË8ë‡û¬9ãx®&Ç@¹kÅ¿½¼X&’O:4á =‰'ŽN?]ñžÏãVˆÓ|?³»M>ÃQ"i’Hö–ùBœûÔÙZË­„¿¶’KDvIU$Tc჎GR 2ÃF—V?gB‰öV>nùŠŽä˜Ü}kJÛQQ,o¥Ç`)(.•Ã#®ÝÙG ®™Õìô:aF)4÷îu>ðÚ4àÞeª]\ Qæ +‚O*8%‚…=sÉW’üYøo¦øKR’=Mîæ¸Ô"¸R÷,º±åÏõ㻽[›-RålVÚ]œŸ1!mÙ,œ!8=9í[ÚÆ£¥ëÚd­âBÑ̸Œµ¼û¾lpƒyâ°—³«+3Ž®óå–§Î?¾'®«àÕk(Ø×"-Œ¾eÂDÁwHT1$±à=ë{ÅÞ.½»øm$ú-êEr^7[g€f=»If ’œ œ“Ž;W¥èþÑ®­c¹–êhtû 2-£´-uÁI ór:g¦êçõÛ«iüi À±Òìà¹X ºŸg”ÈÛ°>|:÷9ê1Y{ªÐ¹Ñö‘Pæø|Œ¿„ŸÛZÇõռ[:uäÁ‘¡;Œñ)áNÏ›†œ{b¶­Э,—ÆS‰®ä”Û± ±É#2œ±E_”mÇïÖŸ¯ê÷Wú}­Ãø 2)*gPá0§’Nâ{õ'·LVŒÞ&Ÿ[²Ón!´’CJ³ònÔDÙ7‰n‘p3»œãÚœ¿-Š£>KFÚ¢¦£¡K6VF7ŽÎC/@¡œ å€»½dÞêfÏO‘®U‹"*gøïŒu~%¶¹m"“l&h‹Ê -'˜¢MÜÊþõÁê–ÐxJ nW.\G¹¤YrÌÙc“•jöí\ʂ緙êJ´¥Ò8/|e²ø{qá×ø—cªêÖ±kKwc§YØÉ5ÝÍÐFAåF6çÙ‡Qò†à(jÛ×tØu†O%´¶›s¨Û§™Ô¤]ÃÓne˜‚U®7eˆ%YŽ+©ð̺GŒ¼I¥jÞ"±´è1KÊ‚èÆF™{‚6+@vëñ-†™}ã)ç´‡}ÓȺ9Pª@<¯ÝíÁä×w2½’²HçåN›•õ:Ïx*ßĶörx>7´ÓlE:|³n¶È&˜r GQ‚+Åt¯†>&ð&«ÂÑHu­Ý\Ia¯i#÷–¶ÒJZº€¢¿ÈŒ‰ç.àv–r¹É÷_x† îÒÙnbµ&1ÆŽãt§œ¼rO¦yë\ïÆûK¿„òÃâ½NÕæ†ÆÞ{C± ·,7‰dŽ2VXw'—æÆ<È·Œ«.q6þ køŽŠö‘ô™¨¨®¹WÌÒ1¿*[n~~üøÙ/ÆÙ¡¸ŽÝ/í.>Þ¢ G™¾XÙUK¹+¸)<íž}«´“ÂZ®¿%–§ªk¨É qݲ´­ùpPƒöà•À« >é_ tëù¾ ^À±ë6©§Ã{<Ž»äb Œ €Ã(Þ¹Æ{ÏâÏ Ãðù!Ðuó¤%¬QËuquåKt–v8à1ìr{×Ób'ÊÔ´õüOϵqNOSǾ+ëš×Šuص–’ÿfE)‚æx²n&(TP˜Ï0pIÀ­;iñèš<^)µ’= ÈÉ)²3”ßrŸqcó Ø  cךõ_ÿoi6øÐ/åh÷D òÉWØÃƒ»8þg‘\÷Ç/C¥jöšáK}Næîi¥µó$Mª±ìÌx !yv€H$‚yÅB©ª¦—ù™ÙÇVÎ6ãÄ:±ðÄþ+¸°Hu8õ‘qf ¾^ HãPP"9!³–fÁPx·R»¸ø'5׃­#ÑïÞêM&E¸-%Óù¯µãŠLžì‡we5µñ+[Ô´Íq|/¦é˪\ÜÜÐY²°|¦MùTQŸ”c=ÉàVWÅèõmCÂ66ßô‡Õu‹ÒK2ÓÉy%¬ë+ˆíÂ|‘6Å÷¤Ö‹¦š7Ü©5(Ù³‡ÓÿeÉtoË6¯e>§â=IÄz|q¹X!B1络nÃämpM}û<|ÿ„&Å,¦¿º¸»¶‘nníÌ6¨T“¸63; íáAÍsžø¥}dÞðìÞ!ÕÖÞ@’X˽ƒÛ(Á+±÷î$€9®ßàæâë~ïVøÃ~t…¸ì–<2ùÉ1Rò˳Œ“ò¨'¨Éì)bjÔiÝÙ[á©Bœ¯ÒuMb¸Ô-´Pg¼Š8Œ¢5_1å” \íŒÐ÷ÍIkd/µ£§Ge÷Riö³éÆx|àüÏ1å —!6õ9=+ˆñ.§¦h~$ûax –ò'ŽO2è’ŒŸ.J7ldÖ x–æãÅøâæí(l’ÃDÓ!˜á¾És Æ×+¢K¼F¢@¤€¶pHäJî…:uE÷™ÂRçIlÏJÖ¦»º°þÝÖô[˜üqªËc,–³}–êik$» gˈ¨7q¸cž±øÏöc}ŸÅß|G<W âÜ_ÉLˆ26áï¸ÍŸJî?l è ´/[øF{mWKÒµ mšÝæy Ó!Ï™í#HX8 á¿mÄ~x+D×fÅ©iIæKm¢Ë’̈îø,ÃpÆ8kš^œŽ×v= á©ÐN¤“º;/ÛXÒþ>xO‹àeÞ¹}ªÚË”öñšÆò‹ÖÈUŠLy¹ÚKÆìp>cñ†¥vž4—L𕦫 z-Œ:LámLS_Ü.|ùfˆ ckШæ±>|t×>ø‰5/]ͧn®öò¨Rë!¸G¥}'ð—áÍÍÏÅXõÿøMí|câ–nï#½Ón– §Ú7Çöíådx†r‚å;@ WJÃýM]»ÄÂ5Ö)ÞͽOƒã‡Œ´™ô™õJö!¡B"ÓüÂÃì+»…Æ>^AùO¯ëº†üuûEéËâ_ÚxaZ[{[9ïía½uÞ˜·%ƒns#.@ùHœWØZO…¥ñމ§X^$)q¨Ü+œ‡6¨£/.1ór0 aNGÒ½KQýˆôOéMw¬Mgu-Œ+4´ òÁ åeØ ‘Ð`;žÕåUÌi­¡gÜôã­8¶ýãç_Ø7ᇎ~;|?¿ÓfŠÓP±Ð59,UghžE¹(D‘<Œ0B˜þóÙ# kÓ¤†ÏÂ:Å–­AlºÕžëDK)ât ãÈßj°8ûÝýjÿŇø_ðÃZŸCø‡­xvãFE¹Ôï¬8ÃùŠØŽÌ¨áÈ'$ž '¿:~,x_ÄÚ»â Äñ ^ ‚Úõõ »è§Í+Ý>æ•ÑIfÜÒÌ­·s5˼mI4ùPçGØ$ê'~»4~ˆxŽÞ;ψÚ5³ê“h×(<Ùm¤€1˜·c†û§â¹ßxí|"N#d·ŠG/±‘ yÀû£‡Ç;8õâ¾9ø3sã}câÔ¼y>¥ic­Í™3À^K©Ö%U.²•ùv¢þð  ó^ßá=X¤´‹Yšíã„7—ä$ÉŸ¼¸S—>‡Æy朰’ÃÉ^ižmJ·—%=êvú‰¸øál·¾ ŸìöÖàd¨’62N P­é׊æ4/„Þ'ÑõmCPñ©s 5ÃÛY±qp½â±ÃäÛŠô?|Oð÷‡F¦x—R—H‰¦FÛ›u™ÀÿVæ?àɀȫºþ½¡XÜ&¡â«Ù´È"`Ð=µãÛ‰beŽÒ=ñøÖj¤_ü=6ù¯©ËxbîK¸ôïøhG´yd’ Z5„à+:ªôè€ñÍzwÂÿéÚž·ðÞm7Ã~´™Rw“Hh ç?êíЕgc‚°GSÈæ½JðLZþ“§x‹ÆWÑéž³•¥Y7&Õ”¦5rOËÉ$ôàs^ñëö†¸\Ý$´Óq q[ª®~Tã«#-ÆxÒæËE}ž†7”°' Òl'“Œu1Y|wá|7ªÛêz4WSÛ Žåì,˜½Ð”ß¹Úœrvàã5Íø'Æ:.¯l×ڃ躄Ͷy®³(ˆg$˜s×¶9¯\ð>†º¹´»Ô,ãÝ´”Ý‚½#æðO´tlÚÖåÑ¢å.g+£㾫}ðú8,¼;¨É¤i÷V£ HÄ&XXoV, ·Û’M_ø'ûJX¦¡6­®ê^n™ndTKxÚ ó·c,Ÿ15èÿü%¥|mÒ%°ñ…³EÙͼ3[’ŽŠÇÝ ô#¥|µ­Áð]”2¬zÞ°Šy4Ý$é1±Ï°û€ù² ,üdë¼-™sâ/ j¿ìD:Î讦ӤY |€U'X~VrØÉÈ Fy¬þxÜÖT\’çÕ¯ëT|÷'Àï |;ø øŽâéõ=?Ä{G¥éÓ‡°´¸»8 Ís1Þì`ª9Ív~7ø‹ ±H—:mö™u}7Úã¶½‰®í-dËTÞ©º,JʶIdšë྿g<»nµ ©5xKÕn£³mÀ¥Í„gÌRë’2X Ý ©xëTׯ†›¦[ÜégMhäMV%[›{£÷ÌQ p§*…·dðLõ²l¨Á(rGEØóË_ê¿ õ­>ÃÄ6ÖCOÔäy`’,¬ªŠÌ©œª2œ‚:ŠôÛ”¿³Žk\´r¨d%JœœGÐÖÏ… ^;’];Ço‘e}iµ ³Àä›i„ûרx¢ïÁ4mâ,šu™‚Ö[£sæ…[ˆüÒº žAÏ9WÃF>ü>gÔdøõ¨T–½?ÈéU¾ð0<õ9öªÚ.«i¯Ù­Î2\@ýAƵ‚åÏ>µæJ6ÜúE.Ã1ëšB›ÉµM‚ÇÔž1@RµÁ;*ýýéÇçã±§ªœd‚}…)^rqÒ‹0À °ÀÍ »õ©<¿”ñŒô¥8\ŒôS°Ð0¿609É¡ˆ-åC¦Ñž¾Ô¨2éý(Ü@Þàþ”„¯© ¯ÍƒÔŠpÚWž=³Ò•î;ucB’¼Hý(ÇRŸjsðH<ÿZLñž´$+Ü@2ù>ôà¹9np*Ñ{óB‚9êsE†ïq.Üã>Þ”¥výÞÔc2dŒšV*}?­>·z +ÇÍœÒ+e²3‘J£©ÿ"† Û­W¨· fÉj^1ÈÎ}éHÊ’zõ¨åaeÝ‚¨’xäÑaÜrCßµ! O\ŸÊ¨\ø§K·Ô­ìŸTÓÖòéŠAž¡çm¥Š 'æ!A8àò/ÚWö·“à_M¬XYÛÆ÷K,mÅ2°.ňY<µ à’:V´pòœ¬Ér²½ÏlcüLçã^ñŸö„Ö,þ;é~ øW6ë¹#G¹>Z´@;K9î rTsò×7àߎ¿Ëø~Óâ%Þ£\kÚ…ŒV¶¿fk[IîB´“®2¤Æ’´k¸¸fôª¿¢ømáo€×:ý»x–_Éqo+Þé󖼕.dÍ•º‡V«1Œª3u潬&\¨ÔR¯·mÏ+u Õ ûíùä0À.¤jþ)ñI[is5µ¯Ø¬Áf'ÇîíñºVêÃv98¯6Ôµ¨>i7:´Z_ÙlogÒÆÒ[¹,eÃ’‹¹·ÒʧÈcû´Â”±\˜š÷'MR“ùlxx|d§;Éh|ƒñ;öÎ_ü4ðþ¡§j:ÄZ¢½õêÝêMÕÔ’Àc1Ç"Ͷ×U^W 0KúáÆ¿‡_u¢šd6¾m-R=.úó͹¹1Û$ˆXólŒÒ«’·#'å‹ôßµu–‰á/QðÆaoæÇw­!’K:±g+$eŸøŽYw3-ÉÍz¯‹¾3M¢ø·XñdZö…ŸÚi¶÷iijÄÛ¤2.ù§Èï1>P ”Á$`Õ*•(µ3•b¤«¸ËuäzOŽ~#[xÄ÷öº5®¥ê‘I©XÚÚÇlÖvÒ"#T¦$9‘÷¾0væ¿:¿i?ˆ·>5øÙ®^\dsù‡{…U NãÜ»7#¨Å}àOŒ¶7µ™ðÚ ¹çÓ5ö{uH)ây!’M‹&Ò[Êd`ü€Ôc>&Á<~×ãÝGRÕuíOHÒâ‘TÉqo 䓲ãÍxÖ?/djfÎx*L7- ©VÓN¦ØÎjДiwè{oüWEñW‰>ü-ŸL:‡‡|!á»Éï ï#Ìž!”Ë/˜"@ÀľkåËÉc³üm™áo]Kt!·ÃÇjëlZO>D#äDÏ$ç ñOþ7ð¿€ü%ᯇ¿gK‹M N)óg†(À/!î%¤ øã/œóZWàñ„·‰£L5kQ/“ors‚RAp¬Ýž{Vu\jIÊš²£yÏpåAå`ó@zØó“šÚ†[} AˆLHó®ÅÊŽø…K;ƒ×«"~8¯&ø‘ñbËÂCM¶Û-íýîôžöTœô‘—ïg=21ŠÙ;4¢N“NMê_²ñtZþ¢Ísx—ñ2O'|˜YX…Ž6`3»¨+òóÞ¼³ÇŸ®üy¨Þj6RýŸT׌·76^PKˆdR ºT¯¯SÉ5©â—’Ï@Ž=oU¸‰oŸÏDšŽì îÍ€O÷sÅdjÚÅ¥ÖŸomâÑ—s9´a!’8y"Ff듸íëíZEsj÷2U#¤z}ñ#U›ã9±ÓlÚ[Ya½‚ëçtÅ,nÊ䙊#¼ã=pk˜Óe°>fƒ Ü]j©ã¹í⻽TŠËJ–1å«,lG‹d•<]Ñð±óíõ»Vº‹Fv¤¥ÿy –ÚÙ#¨''­\—â¿fÏ[­žÝñBíiîÓÍq¼¹HÑÌíà\žn­k2''?…‘Ð^ëžÐþéÞðÂË&ž­#Ø=ŒMµ’8† ħ‘CæI9=*ƒ²¼ž´j wez²ÝAk2ˆV$ ˆö€Â”$7¯<Ô58|i}}zuÝž›`êŽ×vŸf‚ïhmSól¦»Oh5æ›nÚt¡£… 7¶ß9”®cãiÈl`­eR¢¤­-ßqR¡*²Q‚ûŽá·ÄMÁ¶7Zf¹9Òb‘¿Ðî‘p“Æ@ÃÉ»åÎüç$3F{>oé6½²µÕ-DçW†[s­Ã6ñ[ žzÉ'TÎŽO°5Æë0Ó|e¯¼>'±K)[ÊæWÝö•ˆ•U˃¸í}+”Э'jzF±¡kçD†øK¨jZ ºyî 9C•Eݹ€=vç¥A«ütø->1%•óè׋«X[Ms楅ìnÑVMª9È Äön1–ç2©8_KÅ™¿<2]+뺫qxt·¶û]„’dG$vÎ$µÜp734iœàŠñÏŒ^-3ëòÿÂWÜwMl–±ÚË ~LÞJ3™rŠA‘\‚U°A⾋ñêkß%°7~"ÔM†"÷§F³I~Ór²±G¼>À¤«·=Œšmªë¿ |Wwiã´Ñ¼c¢j6VVÓÈ–)•ȯ•²Gu«¤¸*\ªûö;~´¢•÷êy7ƒüÞ+šÞørM:+‹k)ÿhÀQWoœŠŠ¥€0Î’1W~ èÐÚøOYÕ.ì5]F+É¢±²1M*}—†ÜÓI0ŒFߘ‘œt¯IÒüàÍWÁ:JÇc«h|ok¡iÑ6Ÿ™k¨û{Fåh†ÖP§q<•+ThÙ|2øiweàíQt‹ËÍÖLd1C m,\È@Úgï–ëžµ”áÊï®HÕŠKS忆Z´ö>;¾/Ôl.%ºU²³´šçPä,@uP7·\dâ½ûà$÷7öwz•å¼¶¶êgàÚ¬HEÆæ*2A ûq\Ïü%—ð~Ÿ©Km¥Þ꧈cºÊ;Jd?1/Þ\}Èöª~øƒ‚ô5±–ñm.5 $t n¨¯€s’Gã[ÊÖS–Ö9áQa­w{ëò:U5IîußÞ[Ék¦»3 ¤Ë;„` ê¹Àê;ד^xÑþ9þ×~ðþ¦—+…,î<]ss)G<’E5”Ÿî;qÊöâ½oâp°±øw¨ÛÁ“ÛµÒ (¸o8fa÷°ØäúWÊ¿³çÄï k_ðPÍi¯o/aàçÒ´ä…ZhgfpÌÄá(Gؒù)a½üJrç¦æºþ§Ûpkež°ž|)ڹݷåsü\p~•Í|bøZß~]i«¶“=ÌQ}žù-üónã¤7‚¡FC’IÖÛ7Ù.[MÕ%†qmȲ& @ÜãéÎö«:Þ•“¦5ô&7DxÑ «ã(W<ç¶}jèÊV¹J6Ø_? 4¯‡žÕ´/ Çu²î?>ùÀEšk—;Þxóbë´’tÅy¿ÂoéüdÕ¼BÚ]gFô¹$ˆ ’sæ ?1q@#®1^óà¿E‰Õì-LVúM‰’yÖ7ËË4¡ÏðTçžrZ7-ü\oÛÅ~^žú«µÂj ¬7²º’Uü0MvÏ÷°qëÜç‚%tôl³¨ªkÏ’$Ä¢)Îxëè3ÜzV.àOhép®í#H‚9€6²õhö¯,xã¿5ÐÙøÂãÁ¶÷Ëyk#´±Çio³ä|Jrò3ïÇCŠð]OÃ7z®©&sq¤ŠxÄ*X7\ð:žy®\4«jäb*sÉ6¯cÑtQƒ#u#cô5âk+} ÁÐj—ÿo·ešõ#ò!²Có;4®0Ú>è$ãÒª§¼¼Ì¥V8}QÍèzÛ|/ð5¶‰áÛßÞiiû›ÛÐÈÌù‘å(«3Ý0 qÒ¹?µ^»àO Ce¥ÚÜ/ŠuI­4; ¿µÆ¦Õ^OÞêlþ²%F‘‡f šÞ×>\µ÷‹å²»ÄƒÎm1ÄpÅY÷mn0Ü€pj‡‡þ CP¶¸ñ6d¶xQ-ôøØ…B›@}Ü·Ìbrîè+'5¼ãrÔ¡ÕoÒç_ðX½ŽþÂ+ĽX,¥±m¨D…Ó•rÀà“ÏŠ¢t¸Ž¬¶ñK4W … Ë¥ébÑa´IFd•^a°‚ÝAÆ0£8æ¦mÃNçKq«’õ#ÐRÎçÅv×Bܤ¶°Ì•€H‹¥ ñ^…§Is{ «%¬)am™nùØìí.0}ýºû×›j~,±ð审I§HðŠ|—žFÞØ…ŒvêÏ—þ1»[O¶jO4E'´‚8›í~gk-€%°>ï &”"ï͹f£¬Tñ×Áß]mcC²hî¡ßpc·”ˆÅÉ ´` F`Ì :ƒX^Žçâ§}¤=§‡¦‚Ö%ó‘o–è-•T¨8=sÓ5Ð|@ðÕßÄ©­¯Yt‹ ƒ·i"™ZùU2§,ë´±”Ÿº2£8¨4Y|lmiÚ|f§›S™¥–-RYeWmkl…?3† J€ZÖ¼­Ë¹ÕBQä÷¾gÁñxR=[¹ñ&©µ,šphô« «˜‚êwA6BRçh;˜ƒƒ‘è2|×ö¡oê%Ðnÿ³5Ø[Y<©ÆT9Š ¢¦6ÿ$â>ggú¦JŒfÚNÖ<“ÃÍð•%—Àþ"·ñ“9j©nï–ÿ­FlnS¸î$ý®‹Æ7?õëû%Ôu-7HÐõÛÈÏ «‚âe•†Y@ ´•Æv‘Ø×xß ôí#Á:<ÞÒo®ìu}BÓí¦»æÙ‚°w_, ÛŽeÁÁèšÏƒïþZ¦â{oìË;ë¶…o~Õ¶%‚±ŠbÉ…<&Ð02*ý²r»W~eºR‚²<{YðòhÙQcÌÖõ‹èãŽòââK™m£ó"Çʼn<€ÜŒg<{ŸÅmbÿá~ªév=¼^Ò f‹Qºº"U…):F­ºfc†*ß(e‰lu·É|Wã|qñciÚ k:¥Î¨"ÚZ%7W%Vm‰OÈUFiaèTÄÚOgç²3¬¨Rj+~ÇÜw~¶ñ-Ï„õ&-¬r“s ܺdîTléÿð³ã¿Ó(môÛ@‚{Ävï;ÁÙeHùw{`øíÏñçDø ñ™ü3¤h0Ëi¥Ú)¿ƒ>sÙÉ7Î^!(YƒîÞF9ÀÆMyÎÓ¯ÉOtô;¥FT©IÍ{²ó?9ô/Ks¨H“Û\E,rí;ÁGC߃Óèkî؆ëMøð[Qñ?‹t=ì´Ù$e¾¿¸(øœ¢£©ù@;>vÆ~@zVOìïðƒÃ¼I‹>#ë×>"µ†è\O§:ÛYÜL»ŽMÁc†!ŽÐz`8®óàïÆ'᦯¬ÚxÚ-Bx´ø>ÄÚ=ÔQ<>L21@b#Œ‚~q‚T8ö1˜·R›§gç¹äaè,O}èö=ãönøý§êº«®ø‡SÓßÂi§6©ˆäAoå2ùˆò”ÞÏ+ÇÊ¥ˆÁlôþÒ~ÕtmÃÁ³jqÏâ(\k{€û­C±™ÙqŒ8Lœäžkƾø;Mðß„ü"¶–ú‡u»–k(ؼ’$òyÌ‚5 GÉÚ¤“´¥r3ø+Ä^%Óï|Kãýzø·_¼KkilµOÐ,óËhÑ2Op±†e‘ÆÕ [>¥É¥¢GÓB¬iA+?3?öß»³ðß„õ•ø‹o ëýûHú%ÙxŒÖPÆé¹6¦\!Þðç¨8ãá˜|Iwk¨™Ë4ÿëxÈôRsŽ:äp+¾ñ÷„5k{óu¯é÷*·…ÕžžÍï.Q%`bŒ—tÙ#z–'žµ“¢üñ&¶÷¥Ï‡;ð6‹§F$HÞœê3b6–O;”\rÛXàŽ8¯²´íÂFgÕ|m§1¸È“[Y¢“ò’1(åÁÁÁ¯Ïo‚ðNüQÔ­o“E›@Ð$ǬêJ-,àNîYþi;"’zq^ÓáMKß±ÎqiðïWÔu=Nyš;Én-¾Ïd:’ flžNÇJâÌ0”æ¦ß7mÿá…\”mV÷[ÇÇ÷ñrkúeïÂ?\xžÖCåƒo§‹¡o#½_²süL1Û5íZ…¢ÁðûOÕþ9øJÃPñµ¹?Ùbå¶¶=ˆpìp>^pkÍþ ~ÔZ‡Å¿\xwÆÚ§ˆf»»ÏÙ’ÖKxm•Wq*ñ*ªœßè|Cñ—IðµÀÖ5ÖîeŸÊ¶·Ž˜p>ã åÈÓ#åɺP·½ó¹TãqsoâÔàþ2þÒ-»pž-ŸY†ßQÌ0Ùݘá†ÜmX Ç@kÂ>1ÜjW)>Ïs¨[q$‘L÷RÈy胦1Î1^åcàütÖ.u¯x´{h%ŒÃg{h¡bè#¡Ï8ÝÜ _Fü>ý’|)ðËV›ZÕ4dÓë"8ÍÃ4÷x;²#SòŒc‚GgÒª2¥M)MkÛüÎW—Ï×3Óñ>Zð?ÁOx[àôÞ&ø½áßk:¼j›¦\Èltÿ³­æ™H9mÑãqÙÂàƒ_HþÏ+cã?†Vš»_Íu –P×ÚiÓ™võ Át^›†sާéZ¯ÆM?ÄwZ¦•á95ÝÝn#ì;ˆ†ºÆFå%AÏ9¯)ø‘¬Ãic>¥â(a:› IïÞHª𜫒xìi}vRM%ÿô¥Nb»/ÄïtÍ^ÆÎfM.¡* »‚‘ú¾œŽOÏk>'‹X6¾‹O†ßË&2¨–989ÎðNN09¯•ü¦xûÅÞ7ŽëáG´Hôù7Ȳ%Àšà&@ØP#)É eºWÔ^·Ôo<3k{ã=KM¸Öm'{vkD ˆNƘ’mçnõÀ^+*îI)I¦Š¡/išgsª_ëÚ+\üP‚óU¹ÓgÞHŠH\/ÝFs‘ê8­³kî“ì÷±¬më ™ßbÈ˜ÚÆ3œ©À åIè=!m¿´ï¯õï½BÝ`Ý+˜R,LS*OÝã¦å>Ôé5]'\Ö!¸°Ô/,Åô†6¸>K²2àÆb%UòǶ~ZÆéìž¿q®ËWþg“k~>¿ÖüBÖ 4GñdZ|­yv•f€Ìd›†8#$ŽuŸn0½ð¢ÛiúÝö™h°Jm®­å¸2–EnvÉópÃqÆN=êkýNÝ4YÄżIw‚ÜJ ¾R»¤Â4'P ò0¹ê*ÜmŽzPµï-­ã'ìÛ¨üv¶†‰­´ø¦gxõ)#šæápĹgb£r6F€=+¦øoð—Fø¤ØÜé÷:¶ª!‰d‰Œcý@_ nŒçºƒòòNkJ†ÏÅzEíÏÃ}Bk¤Ôe·O)w—0—ä¼®pO' ©üZ±øêêÕ´‹ +ÍI[í¾¡3Ú¬hê㌊¨8 Ëxæ¦'dô5T!Ió(êguu ãð³ÏhÚ\»fK›æ_.év…'`1Ë&ñ‚0prFKáj:'†ï4ÍXi–Vp}¿OFˆYÜZÜ—VF±¿`Éē淃à7þM.A«ÃöÝ2æhîìÇÚÂÅj‘á%‘P¬Y†BôùN2y­Ø®t‹4‡þæk›©75£4fo6%éç•X’Šƒ ŽÕ2wZPåuÔ¥ÿ :ÿÂ? WXVŸPXM9õ‰2i–î±26!¼Æg2ªw=®wÃréß4ë{ÿ Z,ú½œ¦îý­î&´ŠæÆ-áÎ_Ý™@¨Æs·©"¯x»Ä:ãø/RÑtmò)õûöÔÞþÅ&µÓHÉY‡X”–-H8]¹À›YÁà/…rèW×èÚ€»0Éy bÖ9\H䃙L,¹Éù]‹1¬êF‹”¶þº×›nZ~GœxÏöºñ~âme ‹N–Ô<‹snL^K0¤pø€#£ÀÿµÎñ Lð¸ñv©¨ZêÚ-ýÍ”q$¿j»’" ‡am¢\`¾ã”`_Ä¿ t߉:¹ÃpÊ.·ÅÕÍ2K¿ÎÇkìBÝK``sëš³¯Ã ø7öж¶ð¥³øªþÔܽέo2´{K‡—,>ê¯ËŒn$õ½”o½¿­Ã)…u‰Š”¹“{ŸciØkš3#+ #Ì]¯Œw>Ø©Êôÿ DAîOzr|Úðe«?JZ #äÇNE/ƒ×ùPTŒäž)Nò¨*÷G·êiw`t?\Òçåâ0GåB ÷†Xëד@Îì°ü©[…ùqšWûŸ7Ö–Ì£[÷OÊ<}(P>bsšS–<sEºŽï ×ã;©Ï÷ºJpuàÐW4m¸&&Á·ŒàÐê>QJ¼9É>”£ Øp=9¦Õõm*öëBü œ‘ŸJ0§ äb”/ Ž);lP›9 äÿž)vœƒüéIËvÓzrNp:-mĘ3ÆÒ”œÿ½ëM,XqÇ=*9®ã¶Œ5Ã*.B‚N2O@3ÜúSµÝ»+±óÌDï#*¢Œ±c€I¯ø‹ñ£TZYx~kWÒd½hî m;b B¸É†;Žx¨­oÚ×Å×gÛÍÃò7ö†ª¾D‰o68ú·Ì8@~é'±#©ãá¯ÚKRŸà·ÂýA¯/î`›Yhž,,ªòF²o•b?ÀÅw€Çj“´gì`0“æ™çb1qJÑÔú·ÅŸu‹&¶Ð<;l!žV†X®Òñù‡Èfl¬Œªùr„`“šÖbøÿZt‘llgÓš)­ –Ïíp7]Æ2²0aÁÀÉ8⿼{§~Û?↑&‡áߨ6‰¥ýžeì’c>{#_$ \†ù‹ã9ȯañÄ4ø[NÀ‹¨ÅgªË²,ZIu9Ù•”«¹£äÛp<â»ý„¨?y{Ç5Le7Ó÷{–tÓ ø§ã}Ο¦êqký¾µçióËiæã,gžáÔ¦ØÃÅ8ÇLk™ý³5 ŸøÃ^øu§YÝß\yzŽí?™$¸ÿSl *¨§3oÀÈEöÏ£øKJÖ|ñ—[´Óómj4›t¶-cÛ%Ç™$×d¶ÒªÌþQÉ!¸{Iîäø©âèv·÷ö æ\ÞÞ\8QÑ,Q[Yùl h÷—›r Ž}+¢ï5¾‡%XÆÜTµ—ät×ßô„ Ó<=¬êsë^(Ö%„‰mìÂ\ª´ÑG;åP"D" W,~aÜžy¯Š~ ? ~$ZΦ©„2¥©¸¸hõMæf•BFƒ— 0Bp+çoŠ·þ<ø…ñ¿JоëZ}þ£¤ß´òI$¥­,‘ÐYI6íŠz¨5ôWŽ>ÚxJÑŽ¶÷¶­«ÚEm¬J¦öIšcˆ¹”äÛ©-€ƒ‘ÁæµäÑTž­ô<üLÓæ£¢ùšµNâŒì5¿Í,ºBÛ5…¢ÞÞ‰¯ÊrÓHz»“¹ 1êG ­ÏÙƒáF›?ý^öyî5Ÿ jÔ¿a²–A ¼þ] Yn‰EÞŸ,ä…Ú™,M}mñöd‹ÁBê—ö¶—SۘƙD –¬ÛüÙHÆîTã9Nx8®{ÿ¡:TºU‹>‘¥Zé—2´0["Ëm ¥P4Að‡°ñ–9ȯn–-:<‘V±óñ¥z®¥FyŸÁïØÆ[­jÛÇom4 ›=bÓQð¡»î%Ó!r\MqÎeŠáw"FJ¹ÇOª< qâO€Þ×SÆRhVš5õÌ—+$¨¡/p»äršHà QB“7v'œñ§`³ð׆<9ð“@i|3¢Z/ö<‘\ùÎhóžúBÃ{ª#7–ÀN¹ªÑþÕ:V·á(޵i¡xcH½`âmBéah挱vu?»Ṁ'’Àóšä­WwðOG ]á´Šæ{³C¾!ðņ·âkhõ£ÛA¥Æ·O8‘¼è›,qÈ€£­»MOðÅ ‹?Å£ÜhQh§S¶¼´F³[[Ÿ=C@П‘ù»€Cü-À®Ö0øî¼Etº…Æt¦k8§¸0›•™@Þ¨˜h•Ur¹À"LŒç‹÷_¶éVÚ ¤—Fñ,ìåûI\壗#8è£9'éY* þèb1®œjmùçðVÊ+;PÕuŠ+«MêUŽüÇ—L„¨ ð¹ýâx¨> xªiüy¨iþ2²Ó4ÝXÒe±SöëÇ,3„ùˆ„F;Šñïˆv~9ðO‰ìãÐ5(ôC¼²ëk#déë I$Q¸$¥‚|™RÁH'šô?„Þ(oÍàí[à Óu­Y Hµ 6*] ‘«ÆFyÈ5RHâ•>E­= _ˆ¾/_,[ø›U³Ó¼ˆ>Ä-#lîHÛÌO;³†`9üyÝœÚ~‰®jZv§se¨Þ]Í«ä¸vbøP$\ð¥†pkÔj3A‡Æ&_YÛË ”Ž»V5"q,qoœe]rÙ?1¯?ñ^­¨^'ö­¥¼66îàM$¤ÛBªV8ÂKž>‡ŽkH^VlàÄG’M"¤š\BH¯õf²Ç~·Î¥]ä`B©ÙÎ2N¡ã®w[ø?/ū׈q¢X]F²³°o-ü ?ê÷œî=Hã]F·¬ÞxLû-†‹±[¾è§–Q¹,€3ëžÇ5£×¥åüž+–5‘!Ž'±‚D?;(Ú°ã¦Ny'’8´½×s'¢l©ã[=/WðÍÆŸàÙâ›NŠÅRÙq"N™#…¨õ¶+7á—‡´ñ'Äk?ø7JÕ>©º^ÚÁm9ŒÊåÁYÜä’#Æ_w¶kš›Ão¬k"OëòÏÚ Ã Îëy ŒÏò ¬€¦= í9ÎE'ì÷oà-Ù^K}c¥éIj—·‘„’9 Q‚È»š0¯§9ÏZ_Šž!Òt®­â{t›Rfû5»C \ˆº² »›xV rJé“M[sÏ•UöþºœÄ+ 7âÏŠ¾I©j7¶ž»¸Ô'Òä¹ò´Ø¦Ž)‚Õï%•žF“„P@ žOŒΩñ§ÂÓ[XYØèZÍÔÒÉL’Ä †àƒ?6àw:WM¦jqZè6·:‡“DºÖ›í‘}©CÝ\ÆÙuF®à¾Ð\˜¬×ðÍ­ÚëÓ"5ò3´–’P’ºG6Öú×%UÊîÏs,Â:”®Þ¯oC”ÔþêPü³w+§Áki)¹v” CÝòöÍ{7†ô½.ö“Ä:{Ûj7¦[ëźÞE!ãˆôbï†íƒœñ^eûUêÆ?‡QøsXÎi¾Ôïlã3¨ùv3ŠÇƒÏó\Ò­'$£-M¾«Êí%¢8?øªO³µï‡¼Kmö+m]LÑ\8Äöt©‚S“vn#¦Xç=*ÏÁÙ À¿ ~._Ü|+ðö¯ÜzSÞ]ê×÷òÜù(Ì™‰ Çh«1<}Þ+gá¾—§ÙÚ[îóícEUUÁu ×Ò¤ñ÷‹õÖÚojrèÇQG»KØ·¾¨CÆ$hOp­+ º7¥uʤ¤¥èÂ$£{^Ǥø»Ã:Ç>è÷^Ñõ=wQÖnÊê+G𯨹"å|Æ]ëÚs’ â·>*xv]?À2Ù\³¬ÓÍ©Œ–e*C+ã pyú×£ërǤi¡"Ú|§H!Œ}ò¤àíŽÕfü+×5ÆKZYf{«hš8¥‹ç$õbþÙõÁªSäKCªQm]ö8o ø¢ÇâGµ? x†))ZæÚi[¿P*ʲç íÒª_Ë{ð ╽²Cç]\À\Df[K»¡Uþ1µI Ûv¬Ï\Å£¸wÙDÒÌûA* mUlõˆúW¼xWÆÚ/Š~¼~5Ñl¥Õmܵ“Ìö± GûÉ‚N1ÁäWzå‹¿CÏŒŸ+¦ÕúÁ<ëâWŒ£¶²°‚üÇ+²´6ÒŒ@§Ê@!”mÚGךæ<áùüKukquo©ßÀ¾lóHî<Æù³½Ç`ä$`œw£ÄóÙI¯Êºô“ò‰ã1s€£¸Ç×GàËXî!–9ÞïìV2Y4>fÑ";&÷ÆFÐÀ27Šã§ˆsÑ›º6ô8ß‹¥ëVo«dÃjnm¤PÒ+*Ûkr6ø Ž™χ¶—:µ¾›h¶}æ€Ó«`NÞd U‘Ü }Þ;·ñŽÖÚ\Xxjhl´Ûh¡HÎFÅùN © ƒ–ÀéÍp!ñî§k.™oekkkymäìyq,Š]x݌Ñ^–nÖ¹ÁŠ‹Œ´=ÆóCŠy'µ‚ñeÞË${‹aoÊãÔàã8ÏQ\Ç~ §ŒaŠêÚŒ’ßß}æ†]ˆxÛ ³Îp{¯æ|[ø³£|8Ò¤—â&¥`–Ò$Og!"`Ê[hä08Ïj÷…ô}Æž·°Ó,d mqæ@lØùöáP`y€îŸ»Ž9®ÙÆI¤sE'îÏ©{À>¶øw¢Ë£iN5KØYàK»«t†ãaÎä8ûÌ #''Ž´Û!tÚ4£¥¥¤SKöxSw˸üîüÜ·Sì}*þ‡$z~žš~&…7´ï̬Ò£w~ `œ`œSŠƒË73Ë,þLR]¢åPÔgŸÇëU·6….T’Dú-ÂY4¤Á$e!wù™9ÉéÓóÚ®jú»ê­°¹½´h¤.¾Rª¼a€ÁÎãÔàŽ8ëÙ·:|š|LÒ¬r϶^â0p6ã;§Þ#&²Ñ¾Åx±\ÊDÍ1í“n8àžõ³JHn7ÖÆ|²ÑõI5OßÚÜÝÈ“ZÙ"#ŠÖ79(ª /#pYŽì‘ÆoÖÍaöY-¡ûK³n‘Þ]­&n[²ç°;víWt먒?´Z?“tdÜf2¨eLc‚z÷ü«f÷J…&‚ãL¸“Q‰L‘y{d<)!FHfqÇÓéQI+¡ÎªQå‘ÎüNÕ§Ó´}:ÓFŠKTÕ¤{©ˆùw©9Î:•-€N déúìrZØÃ©Æ†EýÓAå›# $ÆFNy óŽÕÉüxñ]õƇª&Ÿm…•Ì,ˆÌÏêB'$ã°çž•WÞÕ´4‹Ö„·ZdfyÁz¨á >QÇsÛ4Ÿ¾®paêrÊÑ=7á/›­ë[¿¿·)5ÌÎТ§ï¢XÀŒ9;²¿6 ã8LJñÇã¿ ¼/m«xcK7‘A4rÜ#*È$¶ ¶pˆ€Èòã•Â6=«Ð<ñ îQµ¶‘5 ¸¶K,§6xó7sµ#ž„uå?´wŒ¬lo¤½Ó´Ë^úÞÆém­,‚Ü®ã@c,„»$Ÿ½ÁɶzÐqq»ÜMbûP}O[Õ4ÿ3PÓe¾št–CÅ̂ŀ(rìÇó]^ƒqâ-Y²·OìísE)Ï6£¨)¾ ‘æ!)‘€9ãkø7à-gÂþð½§‹5ûÍcFÓ-ì¯ÞËt»£\²¨ä1äqŸ^k¢½¼Ò<{4ò\éÏo-º‹g˜Ì»ÑÐn,ʯb~PXµš„£wÐÏ™Tµôó'Ô<úÚ\—š†µ©;³¦Ølâ)~Í+JâYÙw!ù²2ü…ªÍÅ…ÿˆÌ·þ,´¶¶·‚ZŨ’U€Rw:Ç÷2xÏnâ¦[jº&•ÐÚÇ©é2JË5¼7 öŒu$Bÿ+wƒÝ})5w´¾K­5Eêï-±.æk€Qˆû ämx žãÚ´Šç³6”¹/O#ã?þÏÐj÷ͫݔ’8bPö°dE4ä†/´z€£#Ÿ}¡ËðÓÇÖ«¯ mcR¸²6²Ç¤X °·9Ä! À,rÙ‹}+¾OˆºFƒ¦¦ Éº|« Jfd ´œ{àcõóˆ_´“c¨ÈÚ.«§Éqn.'wf1Û) )`1°•ù‚îÎA^ãrœüÏgdÕ·5®/5ðœ:–·Òfœ­Î"Í{1Êî`FÔ!O$ƒ¶¼_â8ŸCð>­ƒæ·‚o?Èó®ocCl‰ »å¼Ïœƒ´dÆ1]gÆß‹šoÄ-M.éå³Õ-¤ŒÚ[œO 6úŒ±6`òÑ×BùçÌÆ6ãׇ‹©í&º[±ôX%Ntý•M™àÞý’¼KðLÚxOâLj45DC*\iº~×¼xø óɸ:R>]¯ØȨ"Xéº=Þñ_Za0?²Ò?ÊTFâ\×ßþ>×$Ò>êrÁ¡C­j÷nltXd[s}uHšQÊFHlœ‘Ï¿!¿h?¾ о"^C©YêžÕ-/eºŸGšð]ÚÂ%!Ö5iApˆ§hMî¹9ùNx\TñuÍ‹Áà $Ü}¸Ô.´x›S× Ôs©ÜÄšÄ ˆ£…GȧNË´ÀîÄñ_~Ó´f¡âÚZK¿ßÂ[LÓ-ìàe&×Û¥(:±\À’pÑ߇ ŸÖ„t= UZu(¤Ù/ìÙðªûÄ:eÌž8𶡨X^è鶓­óécò‡ïn˹/Íü\W á]^ø_ñÒëE×ÛI½–ymí#$rZÎ’mhö¸;cÈ*zårAÅu>9øÿ®xµ4ù­tßøFtë!:Å­¼˜±–êVþi$šRòÈÄäéÆM¿Ù¿öQñ—Æ–Ô/|%¢jRX¢G´ò*[Àò;cÌi%ÇÈ£æ%Ï<úûn£nR©d&¥8¾U O¾¾øVûÃ_ §ŠïôVŽé‹È¶å ´¶EdU·g`X°‘FàŠ`’[_(|uý¤õÿ|RÔ´¿ ¶›vÒEöKT hYv?”ð˜*F3Žü×Ñ?ý”¾&øŸ]½›á².´öÛ¥¬³¿Ù-Ü—,ìÃå!² ž2b++à§üßDÑõ‹~Ó:¶½­ê34³éšn§"C'× sЪǜ׉FtÕIN³Óñ:9êb*…–×<óá…¼gâωöéð»Ã1ê·:S ¤»Ô¢1[Ûf‚pÅB89€:“_gè?ì´ ~=']ÓR]AÑݯ..ÐÛÂà¿»',Kq‚@ÉéS_xx×ÂÑxOáî—{ øgHT[h´p–°Æ©´…2x’ìIóÚ´Á^ðõ©Ô¾ ¶™púb4Ác€ù{Ñâ]»œ³–Q·#%q×ÄB_ lhÐöq†«Ìá~ i~9Öµ‰/ô^ÛÄí0Ú4Û‰Þ Œp¤à t ´[>ýŸ®õ¨þÕãÏøWJÕ¯™LòÍQ«*•I`Z\`íïëW1ëÚÔŸ -tÍ;Bդ󦼳g’æg\¢rK¨‚¹r@³î¯_3Aqç<Ö¹goš2xÎÝçïc¹ëÚ³§v­×¾¤¸Åkc Ûã·†<5â™l|X×:¤3*h¬t‹–– ­òÉ©(HàžEmiŸ³'ÂoxžßZÔ,¼M¨_mYã¶žC1™::¦I/”©<÷¬{\Ó´þÙw€Ëû¥•¤2arAÚ3Ð{×Cá'Ø’âyöï]¨¥s$~‡h뎽GJÒQj-Çr!É/^Ç!ã_Ú’ëáv´!𦃥éRX+¬oä «ˆÀ<¨ž\•ÑvÛ•ðoöÅÕ>%üU:v¡³ÂöÍu櫲†`7my#’@=3éZÿg‘ãntðö¡n×R óâUÞØÜå‰;Aë´ôéš›EýŸ´?…š’ÛkڵݵâÂf‘ccNbRãdH»d°-žx:tÒ½Wvy”>» îMû·=gÂÞ/¾±Ö-¦´{ ‰Wí—É+ó6LÂtÇñçÖµ+ѯÖËG•t-¾Ò Ⱥ`ÄIŒòKc%Ôþ5ÒøOƺ_ÂM4躅†«meyn×kp®Òè¨âÞpì™Ë8>Ù5.]uò2§Ê“·õæ5¼tÛoìádþÓc˜K Z£n¥o• x٘Ƨ’däun©hc É,*àÄÎY3`t';‰dßSyÐò~½Jžø««øžÞâ÷ƺ6•p4ë¤·Šæx~Ó%üM²"JUr¨Y~F99`ÅihPcâ&§¤ø“ÂQiz­–ŽÖÉyu¬E=´r4KåŠeYFdݸàŽ1Š»eá9â×íí4+ˆt_ iV§Ph¤RòÚZ¤® ³ ÂË„_–G`À•$sA¼)gœ÷~(†ëN´¶Qj.e’¸Œ˜÷™ 8Ûå2êê7eÀÚ)Í%Ë¿© §7{[—!ŸPÒügoªÅ¦ir‹É,%‚y•!YvBìnXÕòC*ía’[=9ÿÝi>ñ<:n™«ÜÃuÌÚzÁk§™Þ|ùòáP’Hè :±$f»‡þ&Ðn¾%‡‡µI¯u1fß²¡‘+9vyà TªõPväs^miûFYØøie¾Óä–}Aå.T yn%•év*‚‰ò  *1YF¥·'Z(©¹Y]Í__²µ¹–;»½5/§‡ì‰rÊÒMDB¨Œg ê0ïŽ*? ¶«­_Ø^Ac¨NX0ŠêæIÒÊ9p‘[¤›ãÈbŽß"‘ŒÜŒòš?í§ZXøAðv¢iþ'ÕfdÔïšo5Á ¹&P70ú÷æ¿ioÚJÏÁš½ùMBöò4–F†i™bWÉ €ð£÷jÐ9çÒ©7î­YÏ_N0S†¾‡±ÙüEðö=îŸáoíËønž(4«Æ’àDÒ#+›¾y7ì“p$¶Üg¼gâÏÂÿüb´ºÖ¬n#Ó4ÍAQå´žáZH8ÕHw“n^F .Âï1šÊo ê¶Ói $÷Z•õ·“Ï™Ÿ%­•0 ù™!Š‘ÈÆ+Ô|/û9xwšÚjZb^½äav™nÜ¢IܽNzbº/ŪϪÁu¦Is*CEöMñ¬1$ù…¶ï 3Àåzf¼õZ®äí'§‘ôx<–®¤*ËTº#eA$cREg,À´Hê8Ê©?…Pðؽ³ÿ„”F5ïö6WvN0@‘‚qÆsW®¿âk¢^XÏ{ygä{c¹·'Ͳp VŒd½´žsÅyPŒyùe#ê*NQ§ÍwØfý͵²`ñ­. <œæ¼·Pˆ ñWÁòÚê3\i·6[x’?°¡€Íí÷9Á¤7g9<Ô×©ËØPFyÔëÒTZå•Ó 5HÝ«1ÀlR®ùZP xúS@!¸Æ;s\Ý –¢ Ü`IóAãè:Ó”½Iü8£!ÁÎÕY­!½ŒŒÊÉæàK† ‰„9×§Üζxo*A 4l× sŸ1ˆ_ïmïÛÃôÿŒ·þ'Öµí5µ˜oE£Ey{åä Dš&òÑ›vvFbŒ9 c5³ñêÿ„û:t'KŽÚàÜ- ‘ÝmÓk9%ŽKÉö%Ž+Ídÿ„0i¾ø•ñ#ã=Ãi–þ)Ô–ºtjMÝæŸkľRò744 78Àêxí¥¨¶÷<Šø·)¨Äï¿fß Yø FÒu¿í;ùÓPÕWÔ>×Aw<»·E¨4x$(Áù²kèëψmãß+Ä~ ÓößÏ™ÓOŒH±xÎÙàˆ~bFr@ã¿ 4ýÄú%ÌÞ3°û5€“0<ñ|²í9ˆéæýÓ“Œ+¹Ö¼wök¦iå(íSçV;îd•dR§i1¯V`S­(«3‰ÍÊR•ôüÎÆ´Žf÷úwˆ.—KÒtx"Ž}Fîd˜•PþaRCÁûð0zÕ­#öœð潥߷€#‡Yì±XX›XTIf0ûb´e•·1'iP2 ¯ý©,ßZð^·È´ží¥ŠXRâÒIbrÈD 9áUTgæpO¼›áö£«ø/FÐ/üQtEž›®­ÛÛÄdÓb×Îf›hBð¼"-££Êï5q£ ; ¬—ºåÔõsâ¤Õ|sª'ŠUIì®ìà·¶‚H‘T„wy¡ŽÐN!HÇzÅñìmÿ 3Åz6—âírú-@Ón¥‘ã€ýºáÝÕ–g‘ÁŠ6gÜCp[ÅyìóâíZ A-œ1Ú¾¡§[jwZµ´ÅînogBfß¿%WUT&ÖÁ9¯£>xþãQk¡m­Oöë Å“Q¹»Y&Ž2£t1¢ñÑcº®[<äÙÊà“Žç<½è»½ÆšÝÇà =K× 7ÿjò4»8là–âôG_<÷Œ7É,7`2Çž:KŸþ ÚÞ`Mc]Õ–x&’0ÍeelžY‰[ ÞÃ#¶[§Ø[jŽ<+g$VivS,š„Ó­ÂÇåÀ­²F,ì3÷±·$“Ò¼ãö©×´›ï[CàûË¥ äX³[ºËté»b8bÌÌO£9唹]™Ñ…ýç¢GñBÃUý§õ­jþvÿ„ƒIÐU§¹†ïUÉäຂ0Ã串ç­vß²ÇÄ-Sövø_¡xGÂÚtçú-“]O¨é×*\]I9šbÁ«³0, 18ÈÈù¿à‡†uÃZŽ z”š¦¹ªAb~ßsåÅ=ßÙweœ€#$žCI½>÷㞇û;øNóIÕ¼A¹Sb"šÎqwö¸îP|†_™aDg’Žìu8oE˸‰PöËÚ7ßSérÛSøÝà ê~½¶} ùõ)í®$?j3Ï*DÑœæ0 A‚xéš¿¦i›¼I6“§­`†8…ÔrÉe,‡ K¿ ÛÇS÷G'×Ìß?nùn¾7hVÛCøyáû¨åýå‘FÛ¹ttb£j2³Œ•݆éÅ}=áŸÚübÒ ×ü ©.¿¦kWÝ¥üyQ<ŒË"Û…aìêS“‹VG>.4¥J3§+Ëf7NÒ¬-4{[]q„“EpZeyHÒŽÜÿ*§á¾>’î_ìçÕåk϶,r8ŽQ圀pp¨F3κ9VÃJ‡RÔuXc¸híöâp²É†.@ù²7p54>6²ð÷†î®ôyíít†a”3ËŒd08ÜqüëGR i©çB“isljê¾ –KŸj–’êÓ!TÓíÔŸ²É·$ðÃw\s“\çºý¨O4pˆÑ!‚É  .!]ß(áK;úÖ|¾6’My¥²±ÑûÆÓs½°Kç€ô®o_øk­ø§Síõ(¢”2¼’¢ï¹…J©0«€§iÎ0NMsÎI$ç¡èaðµ+6¨Åÿ]Í-7EOë録‡†Ü1-±ÙC8ÉÁû ž˜¯v±½Óbx"Õ¤{«ËT¶hFFÝ„ýÅP0_N+ɾéGVÐ"¶ð…ƹŽÖ;íÄñ® ŒP¨bA'ISž§¥vüòx^Lº[ÛÉ,I$dàñó×ÿ¯\ÓƒRzÞçÒà¨U¬£BÖ]Nüh—Ò=2X>Ö!¾öó¸aÂõFAäîÎxéZ‚{½Dl'‡ç`å¤}7"W®vŸ^2+ÇüKã8tf¨ÞZé׺œ«eA¿{tüáøœàžxöÝ|?ð§âÛˆï<[¨h[‘4W ãÔíãP»¢Ë¶ÇÝÈç’1Å'x+£|NY(«IïÚçümÐâ°ñ~§â(v¼;¼å ŒüžX_­XÎ¥öébšp·Q±!–GaœPuôükOMðÍÍåÜãĵ½³C–4rMr’žR'UÆÂ}OL Žjyº-°3ë¯ÈŽÏÁš¿ô!m£ø–-2tó'¸6w&K›’Dqªµ€ÁÉn9Î tzdók—VÇUžêÚIHšâ\oòå*Iµ@Ëqü tÀªs[›MIh[Ïû€îä‚:œt5ÐxjæÛF™%ÔáÈzt çŒÇ𢬽žs¿ ƒ†’gaá_†:>§gv’Cpš¨µy–þíÖT|±žpYŠ‘G5—ká y¯?³¼HÁã•ÆÖY”Ó'rõ#°ôô«:ö¤5 V¶h ,EÓÍ$ò;ñžzòhuytv° ç’ØI=û×.µµhïtc‡ø^ç°O£ÿaÞ²‚—–ùÀÛ)Ç|wÁ<ן|hø >*Y™~Aâpâ eû2HW'Êgn=›jÌ+š3 ÌÅ ”n` ’+_áö©wª6¼ˆDLíÇ3Ü…6îýTc©¬ÔR—2X©ÆÝO ¶»ºÐ'ŽÇÄÖ3i—íÊ[É*ÉŽqÄ€ú©ü9¤‹R6ÐiQ[i)¶Ÿs-ìn&Þd’RYœŒuÜY¾¦½ûâŸÀ´ø©áÃ?ú š®›(G‘£Ì‹å7Ρק §ükƼs§'…íŒvðËo*†Å¬—R'h62 àzãžI®Ú5aUÛ©çF’Z=‹ÏŽZ‡‹tù¼JU᱑¤DüŸ´æˆsó€íÇs]€ü}oâ{ûèu;°Û­ƒ˜­ÙT0?xå‰ùÉ\v¯ЭìuonÔ£·šàGƒ¸œ¦Oç]=¶˜ÑLÉuçœ š<¨QèÇŸçZOùºš{>}žÅ ø?Pð|×ךãµûëw/>c$%´ â$AŒ É©f®ïÂÒXZë1-ý˵”ð´1©ãË”²y|öçžsÇ5ÉÙøÆúÍ#[«¨n ³L,!û ðO­nx:KCZš~[Iô¹¦ŠAlP+Úù· ÉÜÀŽüæ¢å¹¶9ªáìùŠ>3ðĺwŒ®ž(-æÔ†òÕÁ UÚÜã W×Ò»x#†óÁú`†ÔÃqneŽiã“ RG Ç8õíVn­´ˆ>&I´Ùa±¹yVᦵŽùQ6*Ê3˜ÿ‡§/`V’ BÁe*Nxèq×9©ïtË_ˆV0·‰­Eì¶o¾Þú%1\Êî]”åÔFÖzsVoôÛ;‹ };D·PåKa-é´¯®Fy®¯l¾dG+59ÄðA,¥"k–Åh2^Ù•70hÜ[#¹ÁâªKjòÎæø/‘¸>v•Eäç ôæº=GÂÓK[G$…·Ú&!Z@0ÌÍŒ*õ!p{ÖMÏ„æÔµìî »çýʼCdX';ðvSéšÞ5ck§©³­ÆÉêcøîÿVñ¼V73Ëe¦ê3ϲO¹v–Rcb`•:×}áäÓF„ö7ú£\j\­Ç™$1ÆÀ=r>ný뜇Çø3K–×Nµóâ‚Gl¢î’1Œmã± ƒŠó_üMµÔ-µ;­fò×J¹ÑïC\¶ñ•¨Hé† ÉïÅaz®.rØäÄV•9٣ѵ­*ÞúC­±ù šL1rsÎA^¦¹ŸøN;Ÿìßíßí 1b’A8š)#ÎPELcŽkˆ¿ø¯%彃Ïlî’K²'2dÅœc<îtÈ­Çø…à–fµ³µ’àCm!a,ç,<ÅÜvåCuïÅcEºrå[2¨Vö–çKõ-ëW·Á­4yä{ Æ„¸%ñÉQž=‡¥uÿ ïc 0hqÛ;_Oþ“æÛ+,qd!³ó3`äûûW–]üP³Imít[ˆ®æÔ˜­¹·•~P˜çF?0Üz}¨ñ¿ƒ­vE£h÷˜Q›yWíLäs’Ò9àóÀéÚ¦JM\Jp~ä^§Áj·ÚlibìîEÝÂ{—+“c8èà3^à³àÝFÞïXñìš®°4»Qy-…œqD.·ü»‰1EÛóçqšÂý¡þ&'ˆ¼)k ìVú©+,ÉœÂ~mÁÉ''00;דx?]ºðδ¯`Y„ˆmåã|N0ëø¯õ8j[;3óz•¢§ª=fožñ.¹«Ú§„ôý*ÚæÁ­ìÐiœ„cù²s’ÄîÀÏ¥Xø/àKÿ~Êþ1¹’m:ÇKе½·\ ’‹±¬œ¹'zˆNDxÈAë\§ŠþhžÒïµ»»ù’ðÝôí6ÆœA„V y;(HËsˆÔ³÷éœnø:o¶þÏ>6ž4ó-.Ö]Íò pÈЦàYñ«9¬Ú…95{«~b§«|ë¡èÿ ¼U¥i¿ -¬´™¬ôá"Á¨l†-ÓÜ÷©ó»ä,W8är;ý3ðùVðµ–¢¾SXÍ ÇA„“ ´‘ƒÏ!€?_­~ii~)½Ò5È¥H]<ìa Ù1Üàœ+/—#Ÿ\_fxcâ·‰'ð~‘­Gïü#öºYwFˆD%’,+*079ù@ãjñS‰¦ù›ÜÚHÔº¾ÇÑžÓaÑÍ´+3Ú»a‘BÛß-íê }#ðÛV±Ò!ŠÙu:þÎöÊ[V†9N$mª’¬ø|›ò “œc<ŠüºðGükñcÅ6v>Vkk™ÖâéDg1FXøUEóޤóŒWܱø¯Gøâ}6çæÓYÔ´ý2âê KkbcO-eeyU2!,¸b¼ƒŽ¾67 •å«è{x:¼±çåÐ÷Ùa±Ó Óô-[ˆµ!Xí÷ÜyÓÜÝŒÊÿ31 øtú~|þÕ|à¿Ï¥|l×µF^KöM2XÞ] ‰ôÔ 1˜ |Ñ*…*rgì¯Ù{ãˆ5ŸI«|aÓÞßOóšòͧ.<Ѧ'QŒ†Ç' •â¾Yÿ‚¯øzÏÄÐÒ×GÇŸ¾Yü ñ›Z|=Õ.¼G¢Ýiðê–w³¼í²3£¤¢ :4dàòºdg&¹ ü\ׯ4ñ¦]êÚ„~rªöI1ÄIæ‰_Éϳ0É`9ÉÍkx«[Q³˜¤l¢=å„`Žz±€O<×á»UwÙ0lœmyxgi<óÉÆq_cøçÃþѾ?ˆu› Ë 1\Åk%€…’wÛV0¬yÜã ÅxŸ†>1|øl—øÂÆIuròÃç„xf—8îÚ¬¼ú`ÐשOKú ¥8Êj.Vl­ûüjµø·©C¥è÷nò5¢ år 3Èê¥d<11®ÐÙrjæ­â¸ôï \­œ0xÒÊÔ5ÓµüBÒWQ*Çûµ1¼de äçŒVÞÍËÝ9¤à­×¹…àŒÚGÄm´/ ¾¡¥­« bžÅŒbï –óiœgOAŒW¢_ëQLí{§KyP™š ²ˆà¿ÀûÍÜzsG…uørÃW_ì-'D¹kY!¿¼²Œ\ÛÙ–Ú’P~g-2üƒ’îŒ1«Ú‡Âk-/X´¶ð”ºNŸ7úX¿‰\‹Ä"%T³&qÆrIÁÀÚ‹¶ÇD)Î1\Úúºµý¼Rê1¢ÞöâVgG®[t`AXÈ'<={M¤øU5zÖãRÔæðíïˆn ¿eQË(•vvDTà€v‚HÆ9ªz牦¶Ó#7±ÛÊtX9o,U[É“+mòa£ÁcÀ,NÖê4߆´kàæÕ²Õ[GÒÌ7¦« ÎÔ¤’0Ž#¶‘ó±ZDä9©„[»yÍ8óIë§‘í¼[ý‹ðæø‹OÔdkÝU-ZQ'ØD~k(ŠåFÎT6HÀÜ #“ZðgŠ]³Åc¡Ü —Õ¯§ûDòÄ#xžDbËÙgc’è¸nk€›F—ÅÚþâ; ÿS¹°¸žâùíÉŽUHRó2‚ÒFò32™<ãmhx MºÑãû/õMÒ[]ÝÝ$0Îî8n"`-³””¾N[§8®yÁEó'úôš”}î›üEi¥ßxÂ[ {ùu­. ed»[”²bJ(ºOœ©tF•rÄýü‚1ÍËŸZiz4ÇN»ÓµÆ‘­¦ûEÜòD"Ýæbç ®ñÄGîøÃ)ï“]/,uÍN¹¾x…¼D·FÆK¹d¶X'ó¢EÀ; FÀ¤#aù æ¶ti>ÙªÜMâ¡‘Ÿ²³ÆÁ®mÄ,‹J0Ì¿yFò™PH<VBº–½¿¯2Kk‰àxµ {p–P[¤‘ÌÒ€U8Så²~ñ‘´ç3BÐbƒâ±ªxªêþ]i¬ç„V¹KtŽH#Ä%U&Fy"@9Ãî$€0"ð=î¡ðùõj†Îi$µYÛND‹:¢3H<õɆiHIwbÁzšµ£è÷_ <]o&»{©>Ÿ§Ì±™mlžâF<¸¶¡ ­óüÌ8Í.HÃTµêW4§$¯c#â%Þ•ðÇÁ‘jÐÙÅ©\[Ëg Áoqq$˦“4V’ÀœJd2?“µJäóžRîëLý¢Kÿ…UxÖÞ&[ä±ÖmV ]£Ëy!PV%F ;p n<ZZÛSÔ£ñvÖ^)Š Ë¤¶;nöÜÛÛ[Ú­Ì@1Y&)!¹äœƒ•mÞ­ðóÁzÃÝGN½ºÕôï xO(5k!¸›Tž$ó! $“( y ãˆtâ•ß_@qUï+¯^§„øSà>¡àÝ~êãJšKíS\H,­u¸‘ml ¸Ç$óªOæb$ŒíÞ[©®ÃâÁ¦ñŸ€N¥ËáX|EfÊâÓQ’êRаH‹»ä7$íT ½y¯Tºñ†…u4z}Å«i]ßÙìÌ2­¥¬ÇÌBøW•¥ìm½‚žIáA“ŽAâ¼£âÇ…-õØé7„s”+hÑ€ó,r–;·²å¹Ïž8®ëÅÿÓ]Ь¡Ón+k§&52ˆ¢ “<àö푞ÕÃx_á´Þñlþ4ñ¥oŸs X´»>Tte¼X/Ì·$àœ QJ¥Z’U+>XÅ}燥ã+Z »>ŽøGû ø[Àúõ­×…­d¿ÕaÛ"O#±HÎß¼¾î2HÏ5õW‡´„Ðt˜-cÉ \÷'¹®{à¶Ÿa¦|>ÓdÑ b¼ˆOæ æMÃ9'©<÷æºÃÊýkÃÇb刓MŸ«e¸Zxzk—¨âÇÞô¿t烞}Å"ǼdzÓ|c«Aáo‡÷Z”O¨ê+¹ ³ˆa¥p2å€ã¯ÉN”«>U¹ÝZª¥Èp ¶XséëJTô ñÍeè¾+²Õ4hî¤qÑ™mä²s›ˆd?Â@ëÉô=+Q”H⦭)Sv‘TêF¢æƒºH¤vçò£ç9¥*AúSJœ£#Þ±¶º$9õ¢BíïÅ.9¹>£µý¡Ï­Ëa¿18 òð?*óïŸJH§j¬.‚ƒòôÍ Îxã4ì täšM¸ÆiuVç‘×Û¥7tïJ9Éõ>”sŽÇÜQk±ßA0ÂÐ[?_ZVîp9sFÑ·‚2zRµ„4ôžôªç4 uíHWqùHÈëH-ØoCÏÿ^¼»ö–×në£i6Ò]Éxs2GÅm£yÇ}¸¯G×5ˆ<;¦O{«Ê"·ƒ˜ú’îIñ¯›?i/Í kÉ­êk§Ï¬<ºZ$Ÿ"‰ŽsÓŒŠîÁÐu&Ÿc›UR†ç–ü[ø—®|Kñ•߀?gáes­ëZ2j“ÜÄŽ`Ñ!,Ï?!`0™<ž•Ô~ÍÞ_ƒ ´ xu"¿Ö¬ËÍ©jj^Óû[Pœ4“Èc|¢¦â ''œgUÿeß„)ðÇ‚RßEó¬|oñ#\iµ›ö€™t­9 “[ V9M°ÔƒÖY²x5ì:÷‹|-ð~ÎÊ K«Ý_T¹ºXlm®‹]ÜI *sñ~™Î+‰Òlg›ÄQi‘$”išR2ÑÇ%}Np1ïÍk‡¡k»éÐã¯UÕŠZ_©Þø¿^²]Nk/CªÁæƒÉ#‚l d®2 däñ[]ô×_ |/i§Ó¯u湺M9£abIýäœåÆÕmÝ Èæ¼ËJñF¡âï_ÝÙÅ µÅ¥’ÊBylNîrN0sŽ0}kšðoí „þxÎ/‡º|³Ÿ h·z?ÛLYkÉmàYFÑœEÀ?w;˜WG+kCÁÆ)싟¾sÍ}5ã›(¼a£\Z^©’ÞåH‘ dc¡ž{f¾@ø}û&xsÀZ½÷ÃψšÎµjšæ§&©¡ÜÛN#¶Ö Ùk)”©_=¸áž0 ¾š…gñMêwã²ÚuÒgëm¢5Ÿh?4ŸNt]2ìjÖ«yi=Ý’Î]d\#¸ÏÊH²Øµ|·¬þÏÞÒ´Ïk¾4‹Ãzÿµ«Õ½Ó%ŽÝí,´˜‘ÁØŠÛ–>¹d+¶EÜ0ãêÿü$Ó~3x‚ SÇ×ÝÔ©‘¦¥,êv(ò…áx¯Ö±o?cïi1Fmô8ÚæÙ¤•.æRìΞ[ù°Ä¯ ô_[‚n÷G$ø~´ãɺýOÎï‹#Ôô ßI­²Xí,ZÃÆêHEtg(ÜŒ1€¯³¾øŸIÑþßÛhº s®Ï$6–ψY%ŽÔâÊ:sõ¯Œh_ø'÷‰¼ñ&òÓL±’ûÂìL¶º‘*¾dyc¶tÈĨNÒ ‘ÔÑ~Ïß|_û%|ÿ„ÛÆžøq%×Ú·2×÷…Gþ"3¸Æ`¯bjé)Æ{Ÿ-YTÃVtjÆÖ>îð¦©vR¼ñ¦š„òÈ¿hÛ}ž+I 𩵸88È«ØÂC<Ë㵊Ê1¼Q…;Ë€YÁÀÃ6 öç©â²íḸñ¬1[´¦7‹ímÙ…¼QÇåg*`'“É«´ð~—³n3[››p¬ü“0FÉË€’+Ï·%Ûf°ŒêJ0†ìu†¯§Ë‰d®.íãVdÚWk-¸dŽc¶kbÆXôsvÑ Ý˜Ì;ž>‡­kè>·Ô'ûL+¾48%ׄnŸç5>§àí>M+Q’ø7ÛQÒ$ (O%ˆ?1ç§¢¼ÌENi¨£í²\¾xj.MY¾…Ù§özÔn>YÛêš•®„ÚCIa$çÏ3ʤkv ÷sÁcÆAÇ¥ üyšlR’ëL¸1J“¬Œ&„FŠwDª„‚£³“Å\³Ôu»›Ë+ÛÛkˆ.ã¹ zÒ;Cr¥#t§sÓnNI”ªïÜ£F0~ówü‰5¿ƒ1[øîÓVðÄ0xŽÞÑà{ö¹,3‘'HØ€ 0Æî«9ÞöÏPDÕµÝ.3™ŸËà ‚„gsß5¹¨x¢xõitýORŠÍµšä:ÉÊǑܜ+° p0½r÷wPø¾]nËáäÚ¥y ÇovñIwåÄ ÈÛ¤³ƒ%TqƒŒŠˆÎ£ÒF“¥Kš7°šë Q;<“ÚÚ2yщw³ÄÜá1È ‚3ÓjçôïÍ Y\Ùëv—ÇT,¢Xã„G$ . Ÿ¼x ÈÛºóÀ¬» wǶ–kc>“¤Úi×ïäjÂ×U’Û†óÊG…eM²FÆçŽ+½ð¤ÖöSËeqµ†nžl"9±<̤–G™F@?/ ÕÚó&4ÔŸ+_×õêSÓ¾'ê~ÒÍî¥ÜÜ\\LË0°YÆ6y`‘ò»ßóHàšnƒ$Z•áñmõ›®¡<·ÓZMnDkæ­‚,Ê<Âx9‘ž+ëSGÃóO¦jA-òguš´Ólo“ ¸ù``¨PÇ+ϹíSÂwíFÒ®¿á×b†TÔäÔU,ÒE¹™L,ùÉ~Ú¹-ÆìSN56_ðÙªzI«~oõ:χz%ÄöÚ,~!±2}šöóiÓ´Ko«(/´ÁTÿÊ+­ð¿ÃØünmõ–ò{ù#Š˜áhRXËGs™dr;8Ï­pš¶»âí_VƒE¾¸Ñë®Òxc¸dQá%šÃGÕþÃ{¦ÝÍq,0ØÜo’hÕÎÕÝ. b ÔUN‹Né‘ÏÅ«~ ê<mwâ€ÿi¶{[»µûìeµ[ ÙÌ2ÉPC)wŽ uæ±6¥ï)´¯±Ûè_ïtË«‡ÓVƒ#]J®‡o˜x;@#ÇN•ãí:?ˆ1n»·†ÔȃiŒ“Ô Äð¼SêWW&9’Ùlæ/€pû‡+ø0Î;f¶¬ œ¬‘Áµ­¥xSÃ^𔉠Ù-”&˜…·í™€'–8ÇíU&ÙÐê=v+ø[üb²Õõ=^k--c¹†X \E¾]›$uç½°ÌMz猯­4­Åº=åö1ÁÍÂGÁY$c…%ˆÎÁ‘Ï<VŸÁXÞNÎkÁ´„•Ò¢ªET¶‡©Í-öô;_üH—Jñ‚xud]?JÔ¯%ºÔB@\<æ5ï#tÎÀ¸cƒŒW}ã­[f…#3ËnYËÇ'™´î =ÀÜ;wç5åúg‚müAhbó¸S60d9Èä‘ÀíŽOJÞÑô­[ÁÊZù ¸±ÔTióÇv¡ã’6Îp§¡`{ÕFÊW¹Å˜aãY;+yuMzê JÖÆg†HÎÖŒe†x%zÇ¥‡‰otXŽ£3\­½¼»wª–ór6¨`:}î½Íbk> ÔtÙdºÑ×ìv™!yIË$ˆ0 +Bç±#¥ñ{èºÔ£ÅÑ_È"Ž9`¤|èT’Hÿg©ì=sPéóè™òõa:.ÖÐèü3ñPK¬ H\C$*ûãsÄhGÌI?wÖµ­ï⻲6%ec?ĪÇ׿n}+„Ñÿ²š{öŠžGýoÚ'3çN:`ãÚ­iÛ6‡ªêé, ;Ê®À„@~g$6ãŸZtá#JUÜ>ÍÝm¼Ø zn¡æÏ‚ª2e ¨¼gRøªê^7“U‰¾ÃgžkKh_`qÿ-d‰ “޹éÚ¾½ð ³FŽHÁ‰É`zŒ/'¡éë[á²kZ-”l‹äÚZC )o—xüþà9äû×eÚ÷™è¼eÒSK^çÊ6ÿ5È<ùWVIîGhfh<¨—pÇÌrW'¶ksàoìûgáïŒVzÿÅ©_³Ó.û%ëy»Âʫ،ô硯jñ…Ž•¢Æ’ž{ýÂÿ,C3dã'’sWñDVÞ2 R›yghšß÷jÀ ¤?ucÎzƒ]¾¢ëegxøfRÜ'®r9úWñXÓü¢ÝøªíîeÓ´´ÍÕˆQ)»ˆ‚ÌK($m-œƒ€Etû;ìm {xòµ©_ã™Ö<;âÖM%öÚD´‹å»Y±<©ä‘èȯ2´ñö«ðòêK{t”áäR’ºäžAéߎÕÛü,ñÏ…>8øfÏ]Ñgû:̪é<¢KW€|Üí#å+ÀÇÄo„z}üÖÓø†å ŽæhŸqG¹ŽíÃø¹ µgÊÓW8¾¯FmÙê~Ex3öqñGÆ-R;È-.í´‹É̳ÞN0¨Œßx†|ó€ çŽƒš÷ÏþÂ> ³Ÿv»{¬Þ$ ¹ÞfX”ÈýÚÁ8ÉÏ ×¡ü>ñ\ú΃ªk^›GÓÚ8qºm¼Ù€¹/ßµL.Írþ0ðwÄ+O[.•£\Íg¾[t].Î[…IQ¸,Ñ€Y Œ‚Û3ž=kêe‰•¹S±ùú§N64<_áï Ïoej—A±³»³Ýy<*‘¼(ϘÇÝ=MpþñÖ“ñÇ>"Гlt4·cchÊÈêÉó.õ”ÙÎw5•sû7øïâˆvËà]¬w Œšk¤×ŽQQ¥W¾NJÆEzïÂ/ø'oÄÿxêÃV°ð±¢¸gYãPµ€žP¬K–_Ÿa$xÇ× RP´§«óêS\í(ìx/íð—ÞðÝ”±BÛ…A‘ç•Tnà;’Ûw9b3Øcž¾¾nuo|S·ðŸÃ½]®eD1\¼ï·Ó-£µ L»jÃ¸Ž¹¯Iø»ÿ¿ø™ñoRÓ÷6…§ÚÃh#šgÔî’¯V8UÞ_8ÀÀ\k ø5ÿßø‡ð¯Rž|I¦YÁ«ÚY®­î"{¨ÇR9ÁgŒsÀ¬èW‡²å©;ËQáèJ›´–ïs®ý”ü=·ç]Cy§èQ=þ±w¨–kmBm¢8¡>^S&Ô É%I9Å{gíð§LøîÖZçÄûÕÑçÒäYV÷OŒÚ΀:°I%äÛJÈF*ÇÁƒ6?~]F驽ø–(Vyµ(§i|´}†S;o—ädóXñoþ N/[ëþ$’ÓR:ÕÄ—%޽ˆ˜bÚ(Ô‚ÛbÈÜA,ÅN+ÊÄÔöÕ/·Sé°±„i¥}N7Ä¿-5}Pð׈4e’[MTj´›ûËT‘G$’HB#ÈÍ,£{cå^p WÌ·/ˆ´#û>GáK©îì—N¿½¹ÑcšA$÷·€îXn‹eRÍ$Û”*d í ^çãÏŠÇÃïÚKS:‡¼Dú'ˆìÜÜé7y »…Îù”%6•%Bd}ã_4ÁA>kúÏÄ]&ãQšÕm5)¶³Žßìò5ˬPFˆ…‹I4‰dúÇéT)º³Š“µõ¿¡ž.k’É]½ó?€´ ï\]ÙxzÚk˱k4ímî‘âw;*õ%Wæã°5ÊøzÊ{?ùvŒŒ’²°r¹)Æñþuúqû%~Ï>ý•~.ê‹®ZâïSÒ–ÒçU™Jý”“™¡X¹¶Bœ’W¹^Wð÷öƒÄ¿µÿ‰ü1eÖÓO?ÛfUŵ½½´²¾Õ”È~P»”Æí‡ŽkÚY„!7ðÚ÷<,FSŒeÉ?c¿Ùþ;_XøƒR¿ŸOû†Š+RÐ\JÅFÉžB Ån$eW-’Ø!A¯¶²Jd‘¬ndo—(­ »8 P{ŒWyàߊ‘éwº1ðÌOt†Y/tµ–âñÄ„*ƒÌØWÉ!XtÀò+KǾ ¿ñÔ÷r¼ ­cQ[˽5í^ãìñ¬D!ŒÅÌ È •QÀ8ɬãN[èi(BIÊ;ù~b|>ñÄÚ€#kmÔ[i’%œv·^uͳùèß:à–ÉÉ,x®šËâž›ã‹É¬çX¼ØUC0OÊrǓֻ-3Çú¾…¢hú¬7p¬v ÝÚ\0õ[p•¢¼q®„ln³îN1Qs¶†±Ä.Ww§[£Í¼mñ,xcS»ƒÀºe冓4?Ù–¶6Í<ÏUÙ–P®“9|®ü– àc­.µ­iÞ¹ºþÕ{›ûÛWFI®ŽÃhUvÉ8Lg '䜡ž'ý¢¬ôíbH¼²=KS™o!ˆÊÓÇg"–F’$,Gk>T}âFH© øü7}‹´{MKÑ¢™Wý-/n$š6м´$)#DyùXd±©§ªÚÇŸ?7$•Ñ»ð—ÆQÍâÛ3£ßÜj²MÊð_ÅKf@}²Ê‘áráJîaæ$ ãw’蚊5 5;TmOìa¤¼º¼:LãÎdYClÚá8˜¿pRج_ƒ~²Ñî´¨4MR*Ù Ž×O²X?µ55+€fÆõÐO® Ý€¸¿Š|?·—NÐ-&Yb”[»,bÝn6éHR®X»]Üe‰Ú*ç4šÔè«Uaà§?‘Ýxµ¿·tÝgN‘õ+ÝVµQk«<ÃR,¾dŒã'Ï!Ø:£…vÜvÖþŸñŽ{/ß^x.®ŸPAw-¥ôFÒK(w2ƒvÜ`¡¤$’rzm¯™®?iÛývëDÑ-ô»èn-K†Iµ #ŽV‘”»2†ç"40È6©ÛžkÚRãÄúˆïâðôVÂâA¢ë²£I *Ÿkd¶wB†93$›pU ¤æ¶ösåJjÈšX¥U^_#tø›KñÛ}KÄm½Ùi ¿I«OæG½­ŽØ÷É"5 pd†cÖ‡‹õ/øC4}â™nì8J±¶´w–ÒØà¸¸–mäŽQÇ<ñZ? µ½7EðÖµo§=Æ­§Ý^Á¹šI#šh’ ¤M+9m®1`J’Li¨GñJ>;{KËç3_£K³7¶³nDò¢¾tVÜWpùDk’I$ç8µ¥ô;RjKFúø«©=ì~¡âË-kû*ùÞïFÓPµüÉ72<±?‘½™ÈqŠ—ÆZ„õφúÇØüGi²ÀÅÜVÂökkh†Èü¨a`#+•Mì ùGŠÖ×/oaÖçƒÃºNµ:ìñéW:ΘÛ\² pÈ.GNåbÜäp½Œ­â¯ xËÄWr%ôvº,ouibús*MF¼¸TB®ãËRÀ“Ò±o[ƒå’åoñþ¿#¶ðÂ{›O„—­åä:s¬cʾO"âD2DÆ& Æ9p,Œ‚xU_ÙÃG·Öï5¯Þé“i¦m”L…c¹]ËåÅv*2ËŒ*®â2Ù"¥øX-üCiwiñ>ÆóF·ñf®ÚsµýôPM:eNäÛP!\¯Îxlò+ ¿ñxŸÇZÜÿt{mÂÊ8_Hº½DߺÝöíEbwo Çs a°O5Œ¥%&âuEA%}ÎSñ‰|càw¹ðOƒí!Ôµ–º†úÊvþÎ1ÅÁD¬ò)h]ãd °Ní¸ÈÆÒZÜø á6¯ªø>Áµbéç–âcÛõ Âûä–mÆ8ãhÝ<Õ‚F£ðhx/Åx—Åú]¦‡ójù…åü²³ÜyjÌÏ'’ä+ |±‡§¦G¡xU·Õ–ÛT½³Ô!Õ Ô4‹}?ýL+;´©Èù¤+’]‹†SަµmÛ”ÊmÉîþãÏü ð¶×DJÔ¾!Cz©<ì~—ÆÄÌÊÏ6<ÒA%BúÕ‘â3 £[iZMµ¤úŠÝÁfîòʺ[Ä3BT¶rCƒpœWUñ+R³Ò4ë»vÔä‚ËH´ò–1çK \*4h¿5«[?ì÷ú5ÓÜNñÏ!‚òO(,Q…f-°ngíóm9Èá>|YÐþ*jÅæ©_/mcit{ë8¾Çøb¸—nrÛ›'ƒ+9IÉótüѪÜ$¿ÈÇñoì‡ 7ž Ñô­vÞKD–ÚâŠ;¨¥a“²Acóqž¯9Ô¾øOñG¤é×ö—’ê1¤tÏÚeù%Y”ü±•#‘êxiáë‰ Ìw³Ç+päG†b®OÞ¹Åp7 ´꺃êZeÚ› ëçÆÍ…Xƒ²7ê£p-µx×%e*–ÿ©Ï,k{´×Éœ¿À=;Rðo‡õGHòä}2é–m:i$U ¤I…'vå+òŽõíÿ ¾2Z|KûDÚâÇP³ÁšÚu+"ŽÍ‚ý+‹øð§Lø_âûèô§½f¾÷]\4Îì8#qç Î:W®M£ZÀò^ÛÚDo6ä´jYp·qÛâ¼¼M5NGÕåj˜xE©iÕ=~ãA¼>´’³*ù€1<õÁø—ãIð…Õ˜ñŸun³E¾h†Ù&€ú§ Ô}Òk¹´ºvÉ*¡Ô6sÓ½s¦ít{4±4±” îã£3,¼¤i:ÔÚ†Ÿ§YÃpY¤¸XÀ’B~ñ-×'Öµ qO#9#¸Í4¯<Ô¶æõfÑJ+D šM§¿4dæÔõ¨ía†6ŒñŸ­$󜞔}î™ú Þ'š°Ó°º~´ ¹^”§æé×ÚôäñUD€~ﯭ+!Ü@äûÒ);¹hbzô8ïIÞ÷Õ OËÎ;æ…ã8êi éC)#¿6)Îx÷¤¶:Ñ»œóFrǽ>[ˆ3Îr@£òzõÈíJO¦{šÏñ'ˆm|3¦›­YÕzÆË»¹&…'d‡²»3~!ÞÚÜh×z}ü¦>æmá6me †=ÃmãÞ¼#Åšk‰•y¸­¶õ:M1íM„:¾»kei}r’^Ú\K(dBƒç'RØPHrò÷ÃMkHøÑûBx³â·Œ¼:×~ ðœÍ¤ø_Z‚´Zjw%³¨]$]Ù%O(6þy"½‹Æ??áø9sÅ'¶²†Îoãó$Ü÷WEeAª1À8\'מø—âçìÕƒ<ð“Dš÷E,·lÀ‡³Žßd¯¿ª÷ÌÃ$d…Lé;Ïò5ªÚƒ½‘Úx»Æö^ðÁ[8­cK†’f%¼†{†ó˜$kÌ<Ý„ó’1’k/â#Þëzf¥q¯e xzÅ ®­k©HÜZE°;Ns• å¸%ÁÀÉÁçŽ×WñM‡Ã†z·Š¾*ÙMyö¥Šéí­ìZP# …äVUÜê¬ù$’2  ~N~Ñÿµ÷‰¾?|CøŽ<ÙôOÄtYÕ“ÌvÓ¢žFŠ Ý8o˜ãî¶ÜŒ ê¡…xš–_{èyµëÇR³Òú$oi‘GñöÙñ‹¼5wïƒü so•¨há¹…eKk4-âžI\1þ§"¾‹ŸGš} ËLÓugŒgim†âku–cÛ9'½y—|)yðöf×|-¥[Mkâ¯iQî£xÚåqÍ"Æ@Ü-ä Ä­†ç8¯k×¼9eá¿ &®ö:†§ui¾è;¢Aj¡7"mÁf}êrÙÀõêT’ŠJú- ¿i>n¯]öñGÂWŸ<>4íU¦½Ô.&hÚú(÷«%¬Å» ¹Á$1Ô×O¦xNãSøzZE3Ì·ÆÑæ"?—¹q®P1Rqžzšó߂ߴ-ÇÆo é:‡uúÍÞ­rùVD–(§òâ1äåÉÞ»œŽNâ:Œn_ë:‰ÖÞÊé~Ëiqå5û0¸FQ€œgÛïXΛQ×Bá6Ýú3ÁJÓtѪ––HÙJ·U •öÖÏì¯>‹¤þÉš çŽou íϵÞ\Íj†IÚ!.é‰$ŒnHmÓ©,·ÿWÐ/­~ xv§†öîêÿS‰%JÇ'6E6ŽÁ¼åvÚÞµî¿fïêðÿ„4YcÒ´&-Ò¼[bVb7b>cÝ: é'Õ“—r# µq6Ž©-Žî=|zðlúÖ±r,nõ95UÒc¶¢¸ÜÁRç8QnØ2mîœïx+özñv»ãÝo^øâ û-ãú‡¬%Ø–ñó»±Ác’OOhø;ûKð»ÁwwÚl³jº”‘>ë›ÉIX÷BG×`ç(Î:æ&×ZÒ¼.?á>M³ƒÃך•Ü0ù’\È¢hQJXbŠ]ØB£,NüŒb¼zØÈÝ“>·,ÈÓj¶!]íbŸ€|%£øÀ£Møwg Zl7On¹GÆNáÅ›9ç×4UÔc¸·¶º–&»a$‘†Ê£ã•ŸN+¦ºøsáÿ… Åö”5OøJõ¼Ò’g7y’É»j.ÅAƒҲtÝ"=VÿL·ÓeIÒm6 ÈÌi†>i2cÜòôÈÔ“ç“=™J ݧ%§õþf†®.!Ô“HÔ —2É/—nPnis÷S’ÄçëXß¿gØ~*ø÷Ka-­å‘ûm•ÈSæØ\Çó$£¡#w\Šô|0û-לf¹K…Úè–¡¼Õ™NAR¼¡îlU/ŠZÝçÆ+ Ø<[«\ÝiSÛd²±?b7jÊÀ™e #8ê3sU*–i¡PÃIÎÒÛñ9…ÿî&øL³Öu+ { 8YÙ{™dmè¬FPsÎ02@##޵›áïèü ¦^xj/%î©+ý†×Twݨ2£2JÑÈ ”h²èØ\ÅS×¾ÚÉáÙ½q£{hVÓ6Φ9ÑrYØaA œã;éŒàØ|CÓüâëE6·â A5 ›‹­/rX¼¸U¤Rʱp¸@1×$d𶣬Zùõ)sÇÞƒ²ìoXx¶ ]3íM¦\enžÚKu`®îpØËQÃI]íoéz¤>¹½´ø[c­@Öú|sƈÁKHOÍ ` ±©ÿ–ű´ÜV7û/ìOêš3ø{T´’õ'–m>?3÷òÛÇ”$ä$l\ ôFÚÒ¾Õol4‹Ó¬h ©ê3Ijæk]6 …|Ädž™Uqòç’J€zTJöI£¢3öKz÷ÿ2·€|sq©È|R·O:£Úýšðî|/Ìò N|ÌØ W¡ø³áe¾…­]C,VÐîÏ–±€<ÔRp~ŸÊ¼þׯšÂx+UТ¶Ð^Æ)L%Ïœ-GŸ±<¾Í*€É¹S·œ×©ëZ´vŸ§øí!þÒXƒ}¸¦Èg9Ô"e£S»2+*²pi·£¡Í'ßúØÉ²ðŒSOØ,åîcÀôÍXÕ< ªe¶‹÷HbgÀÉfå”cè9ö©k]æùôÕ¹6ð\;”…˜®ÖÆðA$ ÆjüZÊh¾3ÜLÖæe‘‹ß‚²9'å-1€Bœr4JvÑ“’Mœ¦—ð¢á糺ðÇÚ"}:õ\†Ãìde`ÙËÁsö‰&ž$ÚL›H10 3¸…à qLŸÀ1xsÆðjºÍÔ÷·ÀM4Æuh8‰Ê¬ p‰™C—˜°àqJÊ:½Hšçz#CÇšºøGÂRøo\Ó­&´{y!¹Ì<Òd?6ã)Áãû½ëÁ´×‡4¿…:L+rg‚O¸Óm\4—¬‘e]À'6àǯ¼a¢>¯=ãøÇSÓíZÞÌZJÆ3$ø…™—C ±oºC2xªÚ´–úóZé–ñ@VnòÍØÃ ŽûTŸ7!FïÀc9ÆÓi§f*´a/vqº*ÚüW=Ôõ ±Im­"´ÐÈ·GäÅq&cžE,7ª‘9Q•Iº¨õ­5´g†[ë{i†"UšQ ²m£anðé\ƒ´+/ ]>[[{åÒ丘¤0¼qJóI¼ íbç$ž[8À­OŒ~8ñ7‡m“þí ÂÐÙ^ÞØÃy¾Û•zï>`SºŒsÈnµ¥IÞIX˜Pº–»‘§i7VšôÙÍ ³/™Gi3ž ’v“޽êÄwÚ>«yªZé³i×7:cù7ExVëOv@Ê$„2r>„WšÚüwÔ?gÏ OÄÓ5kí6xo4ëQ]^:Ä ±€åHp¬«¸ÿUŸ… .æÒæñ*è·Rêž.¿ŸS¿’%Üó\ÊÙanG– Cœ*IÒrW¾‡-ý—»(¶ÞÇÄ?õk_ÿÁUÑ>k÷6w×öbøÀ'†ú;ic¹¶Gv#ûßk Þ¬o$ñ°8K|Òãiòœdô®WáÿÁO†Ÿ²Ç†4ïxÖ{ĸÿ„‚]SQ×/¡3ÝË©¤ˆb_ž4,Y|¾ÛØœõ¨|=ñ3Ã><ý¿¼;­ü%ÔíõMëÀóÛÊÖÁ£ŸF¹3n"eûÛÁò@Œãäf8=+ºmU‚åOE¹Á:r„êNnɵe‘ôÞ“¨Ã¥´;­:].â܉ÞdEE\áÈ òú|Êp1K§'ö{LÚ|Vë ÄlÙÕÊààå°p3Îzp*î}=ÇÃ}:úÒûʺ´šPòÌ<ÍÒ)ÆÌÄp;{UÍ3^±ÓÞßþ;YE´ûDßf;¼°9-ÓŒŒœ{W•$Þ«q¹Æ²ÐϳñT—š·öV¶‘<‰1!WTÇ!¾@§pAéÔW®|?½ñ…Öuwsog~Z)mP‘öè‰$Å&2þ8ãò;ýNÃNñ•ô/áÙ#¹ŽŠ…bÆ„±ã¨lçÛµ'‡´½%oÖà5ÝÔªáíÙ™>þ7¹Î8è:ÓŒÔRîs¹PžŽÇ•Û~Æ>ñÏ‹o=¶‘£§5µ£=´†r¾Ig›9;cêçß8«:¿ìåá¿€^š Ùì!,óIt£Ïb¤œ&çŽÜ€1Ó>õëÃÆiEía¶†î2ê×RÄ’2[ Ü“ŸÀp3Ò¡¾ñ>‹ã]:+³Mp¶lÏ,É&ôNy Êp c8éíT«ÕG`öVœ}ÔÒ<ïAÑ.´+M¿KY¢iBñLD\í ˜‰ŒòIÁ=Bšè¡þÓñ›iksyö³2ˆd|à+·)éšlë.›,W³ËȱD­(Ü~ð]½Xgö'àº'Å}íN³«Ok%üÅe•ìÞ'·ÈË¿¢|Á”¹˜sÐÖ_†hk_xëSO 5ÝÎ¥ä V‘H`7|ïÎNô§r«ÜÖŒeRvNާѾø›¤ë¾6·Ó$76×ÓDò†xXZĨ‘û3–8瀯F±Ò,n®%º’æ°k†oLíã#½|Åá sN°Ð.®´ûë=˜J¦S8Ç 9äg ŒóÅj/ÅÕо!ߨ闱ÛÞØlßb¹ @`2»±Ë`Œg•ɬ嚸è¦ÃáéR‹RÜõߊþ7ðï†ô ¡¸½[Nk,B‘?È=ÎÜg§k>ÓáuŸÄ¯4Ö®µ§ÞBñ< Œ©R­¼‘Üõ85ÀÞxu쯧Ií® Å’Eæeb%Û'sd·=ë?Ä·cþœišýò!·užÚh:ãr¸''èy¬©KÛ4©Ë^½N˜Ê“jQ[?üø9ñ3àåž¡¥üfÔ-<3ý‡xlôkV¾K›«ØI'‘K.É$c=1]ý·Ä­cIH—Nuñ—ù1Z=â[Ãc™d™×*œŽrxäÕ†ð›x£ÅZ™Ú< ¥%Ì­#~}ä:œä’“’ z†‹ð_Ož×m­šÈ¨»M¤³zò8ôõ®Ç/}§¹à¹{Z²™—áÚ?PÖôû[ˆ¬ü3 Esš¶)§$hÞ+ÒômKZÒíî4‹@ ÕÛÛgmôæ0Ï*|»ç @¬Ø·öæñ–ƒûHx{Ã>×YðƵpêÂâs2Û+Te.7áXci8äžÕçÖ~4ø‘“©YݰÒâû-ØŠñ¦§xÂùeBäx `^½Oï‹/àOXF<;áûkå–é­ûK{|ä €%”íËÀqŠxl|`¥íbž›+?™¾u}£m%½õÿ3ôÇGÖôÿ[Ü­ì(ŒÆf{Va8Þ6°ûØÇQÆkÎ<}â„3üW‡ÃÞ0Ò­5_é6qëÑÇ5´S=œR>ÄÀÃï >n  |}áßÛ¿Sš”Þ!²{»ˆ•.fžêhò¶BU~QÁP8#ëšè¼-ãOüFøËñ.öÆãMñˆ­môKÛ»K–Š0ª Ë/¿!–I3qžНA4äìN¾¬’¹î?> ü(Ð/£×õ‹O'|9Õ<= K}¯ézý•Ž´)j&VŒ]M'Ê‹ «–b½%±ŒðbVJ3•— œÝ'ìÝ?vÿÕ¬äÿ‚rxwÃv‚K ÓÄ7:†Ï³ÚX[G|ê¬ÊÁÏ#†H9ë[zÏìƒá›;gмK§Çkyâ{¨¤»·I3@‘¬ ;UqÂç¶O¥qÞ<ø½Âßè>µ¾×¯üC¦éöˆ¶A£H&Ž!æÆ#EËXnfÚÒp2k¬øñ·â¡g§ñ!,‡…õ[5„]%Ï‘=ž¡;ÒÚÝXc!€ä¸mÀè×Õ©h¾Fô¥†Ö)iýu4üðçÀ_4[XµËûkè-ÒÏEŽ a,0\“/Ù„Š ® RÌwa±À5ñ_Æ»[Ÿ\yÞñ=ÏÚåþÔŒÆòo»ŒO¸½Ä¿ã‹±|mgy=ž“+ÈÖ±Èd[a‰Þ¼–UŒï;°zf¼Ÿâç콯Å☯™@Æ+›F#ÌFÜ" rÛSç䌜qK F\ÕÞyyŒÝnYSWŠ5?g_†_õ/ˆ²krèºn½k¥H!–ú9$ÉTåÕŽìîGcŠ÷ßxnX|u¦ÚøAu;{ßù ºtrIJ]Üùä[™˜FΫìá¶Œ¹øïì»áiÞ4Óu;N½Óµåhˆ•äYO”à¶cÁyw®H' óßÙåßñÃâÆ‡âÄÚvmáÛ¹f‹K]…¦/±f%¶Fê¥y9öÀ5щ«Í%{hC(û8Åjúé°xãÀÚµŒAþË=Ý—ˆ!ƒû<Ù¼r}¶Ú%"ážAƒ¶)¶‘‘ÎòÄü ×Oªø+þ=.åBç'æ<j½÷À¸ñf¦|DžââÎ÷TmA4ûýM๻*ŠéQ©ÚÂ6 FHLÇZãçæWæ:¡K–E éº?…¼%m¯-þ™ª¶ƒp×Ò|5eâßC©j~]” Š&’ð<ì…’D!U¾Q·æî9éVaÕ´‡Þ&•tùt‹]?N•d·KÒ1#÷‰"·Ü ezõv¬?¼o¯_ˆM=µÇˆlåkKqfnX¤ÇÍ,±äDËÁ,Fp}Moh_°æ¥â­ïu84¿ÂãrDdûDåÌ‚&\m,['ƒDã%.Vì—Ü{Ôç+®X‹ªx¯Å?|_wqàXà>™¢¹y5ñÚ’® "|§ ŒǽXøã M1,,[ìñHò, r hÈ9 Ëž¸ç8¯r¿¶Ó´6ÃÍ}&Ö "@0Åvõ$Ѓ^SñcÂw¿…âºð‡,õÛÆ`ðK,!n-Îr$*»NHÆ¡®J´ì­Lëö³„l™Êø&âëÃÞ)°_êbòR¾ysh!"&Ê‚À’IëÇJô‹¿ÛÚB¯i·hwn0.ÿ/wc×·Ò¼ËÂ^ŸCðÜú¾½e.•¨Ý9ŽkiïÇÞ¨\ÆükKAñý§ƒ¼>aÓ¬ÞmJ[«Ëyá‹|ÄHFœgŽ1Æk“JñNGÐ`1ê)FM"Ú?C—_ð•Ω¤Û²ÝiM†ÜFe~l&NÌ{àÖÿìã­I­ü(Óžè^‰£'ûRáÉÇ'#sšÒÒ¢ðÿ‰­ïQá·˜kDIuÇÍç€6òÆ; w«QXÜX=´XØÙZe ¼PðÃ?(^x®+'Ñ£‡*òÄAüI^ß™¿æ`äãSO*3Ö“cœ¦EQ¸ºò˜ìséϽ©bPà”¿­CZ»žœd¥{{šEÆóžçò¥ ž(pwu5 Bór^)1¸NsNê{œÒ¸îhÔ,# r2?­.p§š6çž3A;zzѸ€¶gŠËeŽ3úÐ:~´€óóÏOzvè4(Ž}¨?)ͯ8¡¸7^ÔZê÷£;OçHH9 ÅeøßÅÑx'ÃSj¨ó,$)8w$ðÓä¶kx䙊KyåHа8Ø«*‚£¸µt:mÖ‘¬ià¬2ÚA#L‘»¡s1%È''¼‡­zøL4 ”ê=^Ç“‰ÆJ¤¹ièºßȇVºÔ vÿ„vÝ¢žúÓí2Ë2yÉf«ŒîN¸’¦+¦ÐüŸðˆ£jïusZù1C0U7[~y†:8Ïlði¾ Ô ±Ô4;X?{r‚æð¾ï–ÕŸis´áŠ€ ȯÿjÏÚCTÑ>4|=ðÁ™õm'Äú濸¹‚c<–zrÇ!tà¨ùÕU²½ gŠî¿2äŠÔå‡+—4¶[÷Ç-üBðg‰´¿†Š³k,\WBKbî¡¶³€F~î3[¿ |amk©êŸ¦µMW_Kxï$A‘å¤f30rn}@Çzg‰|mwð›Á7º¬Þljoî4Ö¾ÓìB¢jqwªžx-‰Ksòמ|tý¦î¾ ü ›ÄºÞ«¥ZëÜ n‚Ÿ2G¿{Y§-`c‹hqœ+A¥h§7N¢Rü7öÆðf³ûaxWÂÞøO6½k¤iÚ­õޱoh­—VPA#¢¢¡¡fh¹`c’+Ķ™ñ#O:?Š´á5ËÍ$Oq/ÞfŠ6ê¾`ÌaXu+ÒŸñKöÅÕ£øâéÑý“R»ŒèÚ+üÈn-Ðùm{t4Ò<›€Ë*.FFÎßoþ%ø3ÀzküI·}=|A©F°ÚÞ°{¸‘Ð*o‘‰ ýáîïbp8¯c FQ#•®|ž;JU¹¥«¶‹¢>­ÿ‚}ÚZünø4%øŸ‹È¶Ñy>l³à¶ÂÓ¢+I<à+мiáM\ñ®±¢\Ø´Öúm£x`º-†Œ-dld»³1ëÅv?³ÿÀ¨bÔ­üKñ6Ý´ÒÜ[[Û¯1F¹Ìw~p3ÜÕJ´b¹›:ðxj˜©rÁvùŠ¿b-㿎ü3âˆ×z„–Þ¹žì“$Wm•T’G61mƒñœâ¾€¹’ÎÚ=D(±ãH†j:¥mͪBwdm Æ1Þæ°õ‹…†9äßpCyœQÜgéÎ+Ê«RUm¯ÁࡃøßV_»øÑªèþšÂöÉ‚U‘%±Æq×â²ü7«¾µâH&ñ]Ý¥´å I´ëb·S¨]ÌÓ’¼v @T c5«¦=¡ûN²ÉíÈŽ6¸(¸Ë~îHÏxÏQ²Òï®u‡z|VšüÒ5œ—1\F0Œª?zs´ŽxÆ@"¸å(§Ê·=ªq›IËDYñ ¸¹ŽAkp©sp¶ës!.œ–i"CȈ€n;†â8"®x>ÂãAðÅŒE…湬ù­ sêÄÛd‘JÉ,¤ ¨ݶ€¡p@ `W˜éÚw‹´/‹}GÕ/n§ xgíšÂKÜnIúæ*–q¹¦ tÁæº=2=[N†ö×I›Y›YÕncÐÓÎ æÞÜGÝÀ$fH–W%‚Ÿ•0Çœ€:ãBJ»‘77geÞßðNÇÄzž«­ë—>ñ¯¯tøn®^ÔU¹U–$Úès‡ØB€H,Îkšøw ÙGDÐc†èä´¼–"ŦƒçÉ~ðDn˹É\õ¦øHÿ…iu¢Ùܘíd³³¸¿ygœ]½” &ZIef?¼2±@F1^»ð–ÛKñe•ÕüÖ©´ÁÛì*ÒÇ bGi@èÌNÅÉ“JJ4Þ¢‹n ”“â&‰¦k~h®âÒ´ÔµÁSlªù'$’¸ê{ŽÕæžø[7ŠuŠYolü-m¸Å*;As¨©Ò ›ROn¤ú_Me¸¶†ò4Š4 ÀÍ({׫Åa×õHmã‹ÃÚ¬²Ï˜ËÉ-È&Ê«Uw`H'±®x~óX£¢4](¦Ý¾áž7ðtºWÄ4ý6ÕÞP Ö!ñÉ>ñÝ…À'aFN+µñ>§áÿ…_õOQ¾”E’ÒÞ9%{Ï1ÀsµŒŒ^ääsÅEà˜“Mð5®½¨jWWúÆ¥b±\ÞêL$gî|€€)qÐ@¬?éñØëüU:_ZË }¦Ò'`¯2\E"’6„ÚÇ’AÉ=ëUèÈ””´DÞñÞµ¨hWþ Roæ‚WضA¡‚V\¿áÈ-pI'¹5Éü[Ôt^ÛØ-à»ñN½2¨³ˆ æxÝ4Çxò‘s‚_Œª ½FÓ-¼dÚ ‚v·°[û[ØdµÒ #&&Ðwν€½uÐ4O ÞFºv•>kïEŽÙJƒœ†bWwrrI94¦ý›÷<êjÒŽ¿×Ìò'ðÜâ?³Ý\G1¹,Ñ«Áæ4ˆJîL¶ õÎ6’x¬ý'Ctñe¤¶R$Ô\@âÏk‰E]«€[ ž:žÕèÿ#´ÔuY¡Ñ„62i¥Ù¦mè¤ÈùY>bpåòGC\G‡nÔx{J¹Ótû¸ ¾‘UÒHŠ}ž/˜‘x;½¸ô¥üË™£gK¹KS×µÛëk)|CE;ZÜ]FòÛ—–PDYHf' ÀÀp95‘7‰ne¶³¸×µp–Krm-ÌÓ4³0Ý,`±†òÎìŽ1ÅnÝ2èÚ|¶×‚¶j;¥"WidhSiØ»rA-óqÏQІûÂZ§ÃË}BóT—VÛ©E·•&#«nUËnûª¼p?z·¥8¥¡Ï:v{ýö2õ »[-bËP±¿Š{D›÷V×f9”¢£¼ÑÞÅûà lŒ¨Ï[á_ˆ¶ñØê—ŽížKÙg(×íö¨¬Ôd¢F3™J€ó‘íÉZøGSš?/ÁÐÙêwVÜ »ÄxßÍ9V,Q;±´†#®+¹ñ'€Ü6×S_Î٪ɶˆ¬R`†C…±&dóëW(&µhJmK–ÌéþßZøP¶­à½¸½in¦–7‡t É hÂ)]Îq’zW=ñ^úø¾öû÷©Y@-¬npv+>ƒå`G''µRÔ<}¯Ù[Me¨²OodÖQEi¾ÞÕŠ¹‘ƒ8!Nw±äúqVõ¯ XËâ›[›?2Æßɉ籂iHð+"yDŸ—äf^wn9UYû¯C¥Ëš-3ž]"êïY·ZKmíP+DÒƒko;±FÚ¿&÷*Ë–çƒî+wƒB‘›Är]«-©†Ù† !žwPÁc ¤²å‚¸Éô®Õ>Z$ÒK ê:„ítvžé¼ÙØòë½Éí¼¸ÀÎx5ÍA"|,Õ$‚/ ™g>zê–± ¡óƒ¼·Ì›Ž $qÉ$×ZÖíœê<‹q¾TÔ®’×ÄóêóL.šhU>D¶,AgÛ·wÞNxàUÈaœmà'œ×=àºÓtûý.s-±‚WUxAÜ\îÀ` ªO}¿7BG‡à-kHÓþ"^x¢Ò}Z]2þѬⲿÙölj ¾öu`÷ ‚ Òµn­ls ãø¹=˜ƒëRäàí¥È‚’ŽÎϹâ×Ïwâ_´[̶7 }–k¨`•DvÂ* †ãnIÀ æ·ã×/u/ Ï6•p.lâCò4ؑӂà ÌOsÞ·¿µítmz÷ìöúŠÎaÚ>QÚ쬙 ’˜VnÇ<`ŒŠ4ªxÖæçÆ×3j²ë(“ÜÜÞ<1¥˜ÜcØ ’£g#€zÕ¶ôн¬º& ú¦­q¤?fV𬨿» ´ #`äüÄç©è)mcÔãÕt [ÅšD𬠍@S4ìðIæ£FQÁ-…Cãp8ù² o|Iøi¨j:´?4+û–†ÖïT„¢F¬¤HY_¼1€Häf±¼:kÍ¥´‚òÓOÔ¥6Ë‚Dš7 ¹²@ X*3c‘µ‹*⥠Y:œ×MéåÿÝñ?‡⎩ª]^è†K™K»»Éíþγïlù>h$î#å … ÄЭö~Úú×Lr ’·’—‹¸©û€‘ÀnG® ö¶žÇà¿ìÛã[ö<¸´‹”ÓšÙÙ¢–E!dÀg%‰ƒ×®+E‹œ©ª u<êÙtkâ#]½WOž÷=Sösð¶‰â…»ܦÆâæ{ËT«µÁó¤x*WkmùGuÛô«&øs ëZ¬åÙª 6C&ï(–!XqÑwl¦|Ûÿíý¼lþ.xRÏÀºõ´~ñFƒ¥Áª[º‹F8‹÷q± %Á ±I$±Û Xhž0¹Ôô}Yîôø/`½¿k·2*ÁäóÎ~UË#œœÙ&¼‰Î¶¼©Íhº5ÍÉ»k©À躾›£x^X™ÛJ‰_̸uý÷šƒE'‘£`9' ®oZ†þ;›‰<;®ê²X¶£Ÿd“÷¾M¹^NÍv𯇠ø«Ä±Zé7šMÛÙ^¢¼öäNáÑ6=¾~PÀ³ß$ŒÖo‰t_ìU¶»¼µŠg»'PtÌq‚‘ª"©Îá–b8 æ´§US|óê] ÂUeͳ8»Ÿ†úßÙ·YJég:­Ä²³evœòØÎ3‚0Gz©ð÷ãUŸŠtoxKÀºþŸ¦êcÔå¶$Û¼æì$O›i<ÈG5ëÞÒ($Ó¬µIõ‰æ³ûl™ ZZ S¶9’[‘ò–ÏÌÙ­hz>‡cq&µá­2K‘Zy#†7Œ2žîÎ_½(ÖöÖŒ­sÓ¡ˆä½–‹oêÝLxô-nÿHÓ£‚[Yí¥Q+È28®ÀAÆ3òûV׈µÝ[KÔ-ÖÞÚý#T{rÅËn™P1Ç8<“ž1X*Ö­<[©ØÛü<¶i`·ŒŸ"Î\úd.7qœzÖ§†üN| ×-â-:öâ9dŽAgæº`(=òO4Ô=—ćRñ‹=M=WI¹ñ/…‡ü!0ÜZ,–Å&‚á‚Á»9`ÀUÉ<ƒÚ¾>ñ?õâfÒíf‘âÍ34çRw;áNOҾȿø§>§,–†Ê1j¾S[í.ÊBî(ÎýñÐc¯•äÿtë_h7 ¦è~mNÞÙ…´°¯•wlï€Uò€FNXdåIæ¹ùTÒŽ¦u2ʼ¾ýMO7øu¯ëŸuù¡ð¾m›¦3Iqsœ¬`ž“ÌO=ñœäf½GðÒüEº²àÉÈÚ}…x~£û] hÝx£Çºí•üEmc/ØãÝ´n2òÀî>ƒ×ÛŸ¿àŸš‰×£¸ðpÖ>Á¶2UDe@åŒÎœžr2yúVÔðt!Í-}'Øb šåùéþgÓší’ÚøžI|_­ý¶Å[.e‘<Ùr6…²NÍ•îO<~§á{;->üË+Ica÷•¹••FCzÎEu¾ ý4¿ ØÌYŽPAU¶§·ë÷ß±î›bŠº^»¨2*çsÀŽíÓmgk_³v»á«Û}ká6»oe=”k˜‹4D°9ÎþT÷8aÔâ´U`á;_î0xiÓ»ŠÔð¿Š?ðOËÝ#ÅWú^•âC§ØÚ?ØnlHm,a$ ÊF$Þ¹BRíSÁ?³ÄÏ Oo>,´›í)èéß0ÆÓ)™ÔÊÀåzŽ99¯pµ×üiê'Æz}åÜÞJÞJ•R¬L,y$¥' Õ\ñ›®~ÔšW‚<=|uWÔ>× Lú,-§\™\—bÊ F©ƒž'‘ÏZÑÔ¨Õ¹“2¥Nª•ù_ÌÚ–AâÌ·/½œì&ww(<Ì`á@ásž~•Câ_»{½'̸šÎU|äÆÄ:þ8ï_êðQ_ŒkâÃFø1-ììù‹Ì±½2ÛqAå¯Nà>•_[ÿ‚¬|Oðî–Ça‹O†U´V·ñ³ôóŒmÀÆ mK¨ «ú1­Nq©ôݧ…-¼=ã¿ɦêÓi——rI¢­·ÚYÄqï>àÚNYÁPØÉëñøCOÕt¸^yf»6òõºÝäb>bH#:WÄŸ³íù¡~Ô?ZóÂ>Õín¼5¦Mi}þ•Õ¶”“ÈŽ<¬;µ±PJpçõžñ—Eñ‡™¬uÍ9cveeYP8"gæÁc¸§8Ê3²ÜÊ•J;Þñò?<¼3 [xÛÁCw¥kKk´,w†À¸Áʪ©;ˆ ÏøUÿƒ²Âkž$ÔnôOâ«ëKr'ºy$˜éD°PÛ!PŠAaË'ë_~xƒöQð׌¼#lñéþ¸¹_>ÛC·pt냲CûÓ¹˜(vL®ìa<±#ÒþÝjþ’Ã@Ò¬l­æ,™,íRÀʶ9‘P°HÁ/ûÆ=W†¹¨©BRjV¿oó> ’T”œª4­ä|£ðçþ ÇâïÝ:ÞÙ^ÙÁ|ql˳j3‡E–Kƒl†RåI%ÈP½WCý‰ü-­x;PÔgQ¹gŠ]=µ+¡c ­²°ˆmã<–SóI( ‚Sšôx—ZñxÕô JþÇM…]I.Ì’DÑÌ|ëxV<3HB®æÈ·<áO˾?ý¡/| ÌZ\Á4ó:(¶2ù‹¼aˆgùq¸ ŒœÔrsÍ)õ;*SÂà-¦Óþ¶=»âìÿðßÂvz&žšve©êwÑÃ4–ùî"0ÈZ8‚bV@Þ_Í…'à g…c¿†>*ð=ÆŸ%½º{[V·»¸¶iØ7Ìëñ(ìIÚ§œšòŸ„ZÂ|~ycœÀù€ t&¸%„£Qèµ&¶QMèÕ½‰>(~Ìþ<‡@¾¼ñwÃßøH-žÝãy¸Åå»ÎÄ›ý´Œbb˜‡ÆªŒ×¥øP|(´´Ò®§’ÌÅ9Ú%ÈóLÎrljÀò¯Ò Z¸ð?‹!ÑînR}SXeû*Ík,"å´’Ê«·2ÁAÝ–äŒæ³¤ðÂx’{‹MOÂÚš| š|¦t†t‰üÄhU²Ióê aSù`Õ¼×êsTÊR»–¾hüü‡âέàeî“J•ÍÓó ÷'pV Üœð?>ó·¥á>ݬµvÝà&MèÛ#Cú’¥{ö‡û8ø ÇÚ=«Ýi“ÚM~?Ðæ2\iûÆöÚÆÎWgRà ' ÆÜÓñÿì=á¿ è÷3x~K½Bî7,W#ý ±V(ꪭ†>g8(šà©„«ªû™Æð–à–ž¬ð‡Ÿ’ËU[ÖîDtûX…n%·¹}’ѹ'–†NÏEøÅ¢´S¾›§øf=Zàïût‘Ë$Öê±hظb͹²XžOV?Åoø'gü!úY¶o·Ø«¥]¦w.NæŽ@ŠÂ2# û˜7ñšà|{ðú]+ÇÑÛø‹Fñ^›`d·x£h£¢²–$Œœ!ð²ŒÚõ½¿Sž5±øgÊßÞ}!¡àoøbömaý§:ÜÌé4gí^ZF¨­’ hsœ’ÞµnOÙ‹Á¾4ñn•.‹©Eo¨ÚÝG}pȪí}°‰~BÇhUÇä Žp |ûáËK½6úf§q2Ûÿ¤G%öË©-°¡ÄACœ|¡z àž†ºß…?´¾á«ÝSPø‰£ê7//qb-f‹Ž>ya”;mÏ$(Æ+ª†+ jÕ»žÆ0æ\Õã®÷GÕ–Ÿ³Í øÏâ\j“ÝkWöj±mšÙâËÈL¤œ`\8PÛ¸õ ‘AýšÆ•ñF÷_ƒZÿ‰^§¦ÿg6—clÈÚ™-¸´ÃbgaùI$xÇÉ^ý¹-×W{½MÕ4ønä“pšbÓ4Û‰ÞÛ‡|סøþ PÚÔ7 ã[«{ ¯'yGÙ£ÞÐÚ‘¤}X>óÉÎ;VôqÊ¥”ÕŸ™µ<×ÜW=™íZßìã¤Y^Y·Ãÿ±Xj‹&•mpÅâ‘VVó^PŸy3)$¦>`€p*¼¿ <_âÏǬkZ·„4kÁ`öö‘Úé²]Ãa$M‡’”®$p1÷ˆ5œß¶¯…üI¤¥¾ƒ¬éÖ7º…¢À×ΗNF½#Ià(Ýœš—áçÇ¿ hþ¿Ãþ%]w_Kx ‚óSŸbJèpY¶|ƒ!åoݨœšÓëRÕêB“¡SU5~Ú3­ø…ð«Ãºî«qâ ýá5iÕm#»²F†úèq`»! çs“€ç5Á~пµ? | ²Óþ «K¸§ŽÚD¸›íKw&Ò<É<0 Œà 8PuÐþÑ::i›mbÒK‹ÅwA=Èo%ö¢!aµ›v>by½&‹ñ‹Ã—–Cq©ÛM ·@ït¡e”ä•ÏÜ<“ž'­#‹£SHÉ39á)Ê/‘«ùk¼uà¯y–šUú¤òG,òÙ¢ªÀŒŸ}ö”s¸ç?(V>£ã{¼ gvò4–‹{pá§òÍŽž0s·÷ľ0ð̰Ims¨iNfŒ‰bóÔ…\s‘ÔžFÐG8¯-¹ý’¼âTœÑÅ©NÖÌ ŽL uØ6¼YúŒŽ8ïMÖ„ž‡L¶i§M»/ð»âŘ‚çÆvðÃiù¦í¢ 4€•" ÝT0ä±RØÏ=pþŠø¿QÓ>éškÛ%ä·ÌÌÉ$–âB~k€Hå@xbGAš—ö´ø{wáßKo  ¯í%r 0ÀSÉØ1”ýÒ¸ëŒt5ØþÂÿ 5½wÂ7ï‹^ËMÖ力k(%E3ÚX!ó$ F×ò23ÓŠÏV2Rœ­äsaLEwNjÖ=Äöš‡ÃuÐõoý¦Ñµ F¼Ôõ1“ì ’R-ÒîŠ0§¬[wåyçš÷o|q²ñßÂåñW‡²å¼GZj7Q&TosŒ¨až†¼ ㉢յK_ øzê ?±#ÚXXy¨¤<¢A ð ƒ c¡ç&·¾ëÓƒ·¶>(·´±ŸD o¦ÅÊÉq¸6@_‘vƒ×‚šÝ©ó Eqe2œfEºRꬹ$ª†ÈèsOðÿÂÍSCm;\Ö¼Q›+ vPÛYFVæåˆ °œýÞIÈ'ät«¾+±ÓàÖdÔu+K‹Å£ºÓ%"MH*ná” ç$l ñži7ðå—Ž"‡âª\Ûê6êCqÄk©#"î>D>Âr¿)ïž•Ãx—Âz·ÅýJBÐ,5È£ìz¥Œ¡¢ÓYˆU†PÃ+|ÜŽõÑx{Åún¿ñ6?k:T·:>¢ï'“}cq³Ë(s"˸ùxÀQÁùëzÚo…¥6 †(ÇŸ²E.áw dŽ8¬ýšÒúÙ{x¾krÿ[Ÿ"ê?ðM¯xoÆ×ƒÁ÷f¡qx_íÒË¿ìÈ«´œÀ$Û­OðÛþ +oàÏéš—Äıñ%Ä7[ÎØäB@)¶DÉP@÷æ¾™ñ/—D†âÃXÖ¬êÁ/ï.¥Ž7Ut<¼ê§jáy9ɬM3â¶…¤è¶–ºn±§[›=Æmï"ŠÚèF]ÇÉ““Žªr3IWöN×Iþ'=< èõVÕgð¾‡oaám2Ak É %¼¨î `DpÅAg‚r1Ðדx“â©×õ_ì«æÕÚîÎç -œ.©,m€Û¦Œ¸é×zڛ¯áç¹—T¶µ¹Xó-¨¸Ü0à7¼>µÄxöåð]ž‹¦Ýø#ÄšEœqÊï—§ßÚæÉ·¥i!_–IFPà‘·#éŒõ®ib åûÍ­±_[…i)&­Øîtͧý­µkT[É3 ’@Áùˆç‘÷r>÷«oÆÞ$ƒZðd躆,Rëʽ¹·”,¶ëÈ*ÊØ?x +×®9¯¸Ýø•,ô]yµ ;yÚá#e†5ä+rŠÇæN:àuöï<a¨üEñ,ŸØÓÚ Ùæ†æ9-‹ ²Ç,‹‘¹FxÏ×°¬_%ehè{8mJëØE]t5>üvÕµ?A¤è·Wzž™d¢Þé"¶$‘¦@s!!SoÊ9=íðÜGªéñ\i³ÚÞDÄ6Ýp꛽G¥`|)ðå߃taa­®Žöhm­ ‚&P!mÙò#$žÕØÇy²Ä˜-àKg`žZ  œqÇc×Ú±š‡-“¹ôY}øeï»§ßs0Œã'‘Éö &: ”2i.§ŒŸ¼>´¹ `×ôÐö•Àã§4Ò2>n‚œÍ–ç’) Úž”[K‰÷¸ÏZPÜrÖ“9ûÞ´™ÉpM0ôlô¦ãwO¥'ñp 8äÑæ+ŽÆU[ûø¬mÚKÉV”d³°§š‡Ä¸ÐtËÙÌ[HŒ…sØÿõ×Ä-Ñúkmý–~kK,P€ 'ó’ÝÆ3Öº°˜9båe²91xÈ`ÒrWod£>-|EÒþ!xgû7Ã7æ†ï7I¸+B¡óÓyaµz’G½~düw³ñ7Ž?lo èÿ„C½–ú=%å‰Ú ± ,ÒÝJ†2EºÈp~S´g â¾ÓÒ¾êw~&Ôtj"Â]CP¸×.jß=»ªåŒ™Ám«°c¸ô«_ ÿeßìŸÚÄ>=·´þÕÕuqýŸ§¢Oö…Ó­d·H&ýõ QÈU-X×Ñ`iC$·GÏc±Ï¯gø§ìƒ§xâ.mm£iW¶zf…©µÝ¿ÌÆ-FNR'bI2Ÿ¼ûs´2gÒ»­Wökÿ„GE½O ÝÞ_JÓVÜ /33ÇŒg9ðê<Òx.#Óntˆ-³.>ÎÑŒàÇŠp1Ó€ëW­µÉ|;Ó]@Ël jÉFS” yeõ<šºü•%ÌÑ‹Áýa.g¯‘Åiñ$¿ 5 Ï¥Œ:ŒóÃ@e"8mƒo˜d–=:p:ÖVðÃÃúWÇmOÅÿaÓíõ­vÚÞÂi¨¸ÂŒÞX,2‚‘ÉØ=+®OÞêÆI#Í,e!¶³å0'ç(ÂŽ@ì+Ì>1x’; jמ"½‹KÒ´Gút¶›Éiƒ,$ò©fEÊça߈”yµŠÔíNI\çügû]x'Rý¨uïk‹u*xGD³¾Ô®EÚÍim+;±F€ŸÞHƒÊË È2kÁ¿j?xÞµ:·…l4û-'µ°·ºsâ€yQT}ýiš•Ì–ÚCG01[¼€îÚ ¸Ž­yõªÊLû|¿ µ¤)rÆ÷Ô™I¹r¥ ø|dº…-ϼž£{CÜkeãW`¦F-åœ\œ¤ÜÔ“ø¶ö+æ»ñ²]ZÜj=,máDX”€qrŒ ìgÜ­¼À‹â'-¯o—LÑPYjæÀÁwg`%‘DªÍ4§‚|ÒIE xÚN*ÿŠõ8å]7S²³·‹T–Ö;e¼žòId–h#.àÇ)!UãÝ‚¼0*aB÷dûº{¿OćÅ´ßüI[«uº‡BÒR8žÃì¾Zj3¤¦lýÝÍ( ¨ÆìÜ×}ñ+Æ+gg¨hÓßißÚj§½„oscs3€c_" üÄrYrp9¯%mJÛV»µ»‘m'ºòà¹@mŠ„ŽG8Šu\H'+Øã¦q]‡|[g­xvËý0êwqµÖÉOvˆ•Š"Ë”%ùqÉU\sÒ%E$c$åÏOëÈÏñ#ê6íw¼‚+›&û<ö’Ú²,·n®Ñ˜¹`2K`óðs]_„~ÝÄ«§^iòÙ´v±ÝÄ·«­Ê• ˜$8Ã;në÷T1Y©ãÝRãÃWÖvRYÝ]Ex²‡[fEI6m(Å›|œ|À»ŠíºˆzŽ•áåÑ´¿ ë7±ê·sÂæÖþÙb»HpóĻ˺x¡çš™Í%h¯ÄKžM)½ü¿¯ÄƒÄOqáÉPø’a¶šàÇÄe$Q´bX‘a™IV qxÏn3ÆzêxŽê =LC¤Åel×w´ñ&¡tˆ¥¶¸BJFäàš½eªÂI¡Ù4[Ûß=ûÜÈÊ\ÝmR$ÒTIòÌ>m¤Š‡Hð¤šeÓ=ëC=ô³<Ó˜A ¬ä|Ä6N2¼z“ëZÂ^ùž‘Ùjlø]‚ IŽ–$·¶fâÒU’E‰‘YWktÚŒõÎkg[ñÜñËw–Ï Mq,ØÝjí5›ª*ýâyàf°Í´ÑOgu Q—w%p'@>ï¶k£Kµñ‰.áÓ§Š"URؾï(dN8éè>´¥N;2'7JWG â«KÏéúž»á!¼´Ò­çÔ.ïœqɳí!œ¨*ÊŒÀ(?+)ëÅZÕõItæÑ켫 ÛYÛØe¢ÌlIdIU˜ç9Å´(åÕ®4bóû>ÓW´]*y n‚c#ò΄mÚSå*çk§¨®ÿX—ÃVðÕÛés- •ø[FÉÊH B†ÊŒädb›ŒtìU:µÛÕÿ_׿q‰§ÙkòÿhX5ÅÕ¥Ä íÔó¶» “Y…Á1Nö9ÜxkKX‹K³[›˜nä‡Î…ä3¸8nz¨9äÖ¾—â ´¸Ly!Ñœr™aD^vÇŸ—p1ïT,uº×/tý:ëû4Z˜®-$ºD‘ïf»Ê¢¨1ä¿>GݧpZ%¨Üç/2³xƒJðÅ‚kÜE ™Œ½"$W ¸ä’àæ¨x³Å§¬1^É,5D0½­®]j¶›÷)'pÈ#ƒYZdKÃ7‰4Ù¬n …å1=ÌBDVŽFó0ß;·]£+SÄþ%ºÖ4[‹½SJ¶°³³–äyIp¯w%³1HQvý×pUùÊ©S‚zÖ©¤­!¹;Þ''â+­nÿ[ºÓì~Ù™o3ÆÖbHŒìêÊRIKrŒ2ÊÆ@=koPø›/‹õm çR·±†úÚäÍmr¶Ë*¢åãmÜ€ PO qɪÞ.ð´V^ð¬ÐX^#êZ]Ĉ³] #µ’0$(©NæUgÝ“¸˜ä Ë0Ù]é·6Ò]iÓ.ùfÉyVêWxCÚ0»#q! ÷â¦2Œ¾›¯-™b×Ä:Æâ( Òa¸Ô®/šeŠÚÝTO,ŒÀ¢®[DWm½p@$ç5jÛÅëckjsE¤´° µ†s,“ä;g*J¡`v•Î ɨ,ô‹˜§¾BÚM#9²DŸ…U>VIÂä Ü㊎ÛNƒEòntÝ"Ö9¦ç`;å¾b¤e¢¸ô9õâ­I-2÷›V&°Ž:î|1 M.i;øí`ï·!Ÿo'Ë^xsLð‹kÿ -­Åi®G£ZMö-#ŸÏµ‰Pº»$9tÆP²•Œí5ÎZÈú•©GQžëQ2y±D¶ÐÇ Ga“ÉýýÊ ±Ë â»?†<ërÖRé·w‘Eqt±;"‰ŠáòvŒ“€Hɪgk«jR‡-÷*¿Û> ÜÜEàë?ô«§m$ʬa ón0ÀDÆ×Ú9íÏJÐ𦉩x“]ÓfkŸ³h·ÎTÝBUÚý¡-7ØbÀÆç|±cÀ æ’Ùè7Ú½ÜVvînã’;˜š0¦@ã±’8#ž2}q\·‹¦½]¥â®—Ÿq#[_Kѵ¶âr‹ n*6«õÆp 5”•¢µ*\ðZü?‰è_ôû‰~\¥µ¿Øõ‹Ëût•I"kx˜d³>èÉ ½z௴Í%-ç¹½´‚[ðÃ2©c…Ú²!ý㜹ÏòzÖ·ã)´«hm|5-ìÖÖwE®Îç<ï¹Ë‚àa[iÁíM×#²‡7z´M5칎),®ÌñîéµJý99#ŠIÎåF”ÂÊ ¥ÚýQÖtý;WL‚ù­ì"“ËkxåEP~N¶AÀ`w b² Ã7óx–É®®u]&å¥Ô.Ì“ésL´Ä¤àîWx +m䳯jº—…õ3m©Ú&ÕÝf˜Åtï Ü*¸*™C‘2N3žT稧ø^íïµ[ùµ+kÉôûÛo²]ÄFB¯¸<2Qž5£»\Ïs6œn¿3 âçí'aâˆZo†µ ´›{½Ãðb4K'“ Šþ^%(3)pHTòÙ ù†+þ.é_ þÝß[xo_ñ¹pó"xíL·wo9fÚ1ž[ÎESð–¢ÿÛ:ýžƒ xƒÃ¢%b½½ ×AQ‡C·p>ö 'W¡Øÿnøkà-ιá«8¦}¤ñY)2K4Xhßs’HæMÛqÉNO5sk•&gË.XÅYl·<Ëà·Ä­WÇ_,çø§£ÝèšÁ`lofW™T}ÙÆünúדÁE>$xž×öJ‹ÀVºeö¥áë{»{‹i¤ó¤-ÜÈ±ÍÆB‚Ð}kÛü"‰ªÝ[\Ïmoy$ê‘ýŠBQn¢S Š3׌@éQ/†ÏÀ7:Å‹­*yüAå„PG X&V > ÎÔ ½É_jé§(Sš´];œ³§VQqSÕßUÐüÑþ(·…üKmqq3Z>˜ëu ð—gÙá"¿ð•ëšý€ÿ‚þ×ðÓ_ ¦šñ_é ’k^S:År$,°Ýù~É n3ÓÎð¯ìmðÊÊßK×4†ž Ð)Ê_¼Û±£yâKør[ŠÐÍ& $Š9ÛN³6‘\)EY!ÁÝ3ôÏN¤u®ãþ¯QÓõ³Œ]¢ºP/$x–$ FìG’Ûˆã#‡añFãÃvšŒ·> ŽÎ)Æ‹a¹¾‰{M,d¨ŸœºŒŒO¥®›Ž¢ƒƒ“[~¤|6ñ‡†üy7‡TjQÁªè—bå…ŠH±\ s±'XÎIPÙlHÇ8ö³«k^/Ó/t]/´ýXψod>Õ$à`e€Ço‹¬~øÃö]×ínl¯%ûFð–‡ËYDêáoªåqpR_9ù@¯ þ þÐÚµ«xsÄ톹ÿD†å†M¼*´}[PÕš8®%‘Ú(àŽ]Ôƒk·`Ëq“^iâ½zÏÇ?a“Iñ~­á{»ÍAmæDÑÓíríË×Îf¹$³l€½:ÖÇŒ<}â‹›·ø{Ĥޒ9ŠÖÖÈÛÂB»%žIé‚xô®'à÷ŽõOˆ¿dÔmц»e=…í—ˆ @î#¸hx=ÙÇCƒÖºÛ¨|g¢hÚ¬¶Þ'ÓõÐÛeŽøKLV5ŸŽ3!+‘°Œã‘^ÿª~ÃÞ)Ó¬¤‡Âë x€Î϶'ÂM QÐn'ç“Æ:‘À¯'ñOìâýsHûN“áýCUŠPRf¶¸ŽxÏ#ä[d€x9úWRj•’“Žý·ÿ3¯VŽÕe+÷þ®Y»ý’ü{®ê¿ÚÚ&²ÕàRZßS°RìŸ3 c…Â’lŒš5‚t û»±Õï 0¼¿5ÊÍ#†Îäà õàÔ_µ·ÄMCH[mtä·ÖÚG¶‚[¬ &r¤²… wÂŒñ\æ³ãÿµûÃgâHb»Vw6÷£ËIÈÆÌúœ}k r¦£¿›_ä9K öe7èˆ'🎯4©¢¹¼[ Y<¹$]A™¤]¬UbÜrÊ8¶>Ýx–OÞÙøã]Ðíü¨D±ÉlàÉpyýÏ™½V2UóÛšÓñæ«t¸5?Ïv/ •¡’Ihã Z2ýõp¡ÀP0­Ï\Ô^ýŸ|YâMkT]7÷ÈnœÉÝ/™#ˆS±NÒå²7cŒ`kMÍ6¦¯èLaiÙs3B/ÚÃÅ^ñ]µ‡„5}VX —ìñ}´,¢);ŽÕ Ž3èGCKñö÷Õ…Åå¿Ûåšäƪñ[¨ €`±ë€pzètÏø'.­§Êº•Þ« ÙHQwJð+¹}™ÈÈl­ƒ‚0Esþ#ýˆ¼N¾»ûC{od‹qpc„¥Ôá°ÙÌ ÎBd’>”T§6×5ù}Jœs 5i/¼à¯m¯x¥-ï|CâqçÌD*¶ûœÊs€ ˜Û¸ä (â©kŸ´Žu=æÏ×څ½Í¬ínÒLLˆIž 0{gò®öÙ§Zðôö—>)Ðu9á‚9e³´{vV\+:¦v3G;Ox¨t߀:ì¶vI¦êó$êî­4ybËâÁ {V1”e&”]üÓ9SÆoy‡‚5kÛ«IüKñ¯RŽòEx!äå ,rèwgØW;¯x¶ÚÇÃ×vºW†non¦¾7Ð[µÀvw/–ÌÌpØ\°-êM{‡ÿf‹Ð¶Qj0ÚBge” cpAb"aƒÕèú/ÀmkÉuÅis~ÓnhÁRY‚…h<|  Ý+e(U•šûŽÌ>UŠÄKEüÏÉâo Ú['‡`ÑþÕ‰î®EÏ™!r~fÝœ»¼|¼Öaýž´»!b§E¸¶„NášòQ²çž_ Ý‘žµ÷Ÿ„>ø[ÂWrk*Òæ.™ A ~j®p2û pŽ{Sü(þÍŽ_‡¿áŠßËõB’É$eL÷[¦ÞIsZ*SMµ&w<ޝV®|[­hºÖ­^\i ¤¿‡ìjb8c¶ Õp¹ùð:œvÉÏ?'‡5 Æ+©XXÝ^ÎóEùY’$aÎ{¶‚ëŽÜ×ÛãàÞ’ºÌ'â›m¦k:ä@XÄö­s› ¹'Ì0Ä€w3è+¨×~xRýã)rU/$Šá`™¿| ,FX¨Q½ :œ|´á…¬•£- žS^Q´f|"÷ZçüaiiªMp÷ZŒ=´v¶£Î´Ypd<0eÎAëÍt¶_5 ýræ!4×vJe»º¸‰FØ µ·8%W Ê÷çõ¤<à\\é¶©uu¨],V±N’Â-L·¸ºÐá’â‰^Ur¬XË"—vÒŽ•œ¨Î“T“ºë¦ç¡—a'…«Yuè{v˜XÛÇ Šº²žUÃSÆ=G|z©e‚E?tm‘ôT±•…¹Ë!öå8?0úW’×côh/u7G&ÙK7*Ê>ð÷÷©ºŸ9?­B –8Ì$C©Î íôl†‡®£^ðÒ¸ç?‡¥0†¢§vóÇsQI‚}H=h¿¶bGÍÎ:úSXï t§ÏåŠä~5üG›áwÃûýWF±:¶£cìÖ+ W¸v` õ9>ÀÕAJmE+‰ÉGv7㮲|?ðƒÄ7*@d±p3ÎIÀþµð¿ü--gáf‡w«Xß4]&Ú{ÈF3 ݘǒ»±¹gÊúö¯}ý¡>1j¿¾ _.om§Y®¥`“!’áT ÂX×>Y¬%TÅHîN<ûáÁóñÝ<ˆñ¨iV7^dxE´ño1£¼î;‡P:×Õ圥VÉŸ%b½­XÆž¿æzÂωVš‡€,Šf“Ä:îŸnây$R'.Í*Œ9b© G¯iøgðý<à©õZÂm¯Uu‹™"}­§. o—b¸ä“Åp¿³÷ÃÍæ>Û%Þ¯¯é÷³Iq‹µe+ºn•Ú뵕IÆ0;W«ø¿âið†}4÷fYc޳$O%‹…RQy<·AOV‘Z2Ssž’-xoãu‡ü·>ºŽÂ+¸– 2Û3±Ù§© ÍÏ8ëŠç>(ͬø×EC໫h粸‰™gBñL»¾q…þ%^@àœu®Yç»Ô~!ÚxwM´¶Šo±Ûë´Œ@rñ3®S$ªÆ rÇ’ät¹ß‰_¶÷Âσú}Ç„ü9¯ÿjëöól¸ŽÄÛípDi>âå=£“[¯C®wiòéÝ­‘ÔøŸãÞà\ëš%ŒúŽ›o)µŽá"1µã©9HãnÌcï`“Šø§öþý¼ ñg‚o-´½BtV§¦Ï¡™¡–g’q Qݬ‡%z^IºþÑZÇÅ»Éô-(Áo¡Æ­¨FðÚI ¶ÈTX•ùlU6îÎO9¯ÏoºOŠ.ÿik{‹ÿx¦òÚêþÒâÚÖëOŸÎ¼Š)c} lÎ3œÿw$·×¯ƒÁûß½ÜùÜ~9Û–.ë˹ôÿmgø_ñCV:6•2èZ¦…—~’ÜI%$Eá呉!IÊç¼kæÿ>!»·Ó$ðe†•y¦hVmÇþ¶åq´•ê¨Ù8SÐà×Óž&ý‰ðŽâ8­|Acus©j.â<§c$QÆåÜX“Áúixóàô  ÓõŸ÷þÔ­5=ÒÞ^Fê³I<çy…žV2GB+¯ÚÒNíÝö<Ú”«IrF/æŒ?ÙGöeo|2•¼DÓ :ëPŽê-ÀÁæ]¬Jw¯Ì ®üd•=Ï>íû>øö÷⎫ã­SÃ:^ýº¶ð&K›¢á‚ «’§T£:n\ò¼—Yñ³x«Ã:ŝЭ5=/A³Ú”V×ÛHð̬c$K…`Wp*G%†ÅzoÁtÖüðáõmÒÏC ˆôë4L–VÀª¡c¹ƒÉ#v|ŸáP0‚±®þ°Ÿ3üvq£h¯éþ&Ç‹>ø_Ô5øM5kºÒlíì’æ?3•ÿ[å«’åÁÊd‘žOŠÀ?†RÇãÿÅ­ÝY^6™¨½ÝÄ{[ý,ìŸj§21'®=k?À¯¬ë–Ö¶¾0ºò-³3Üjo'ɶùXÈç*w®â½3à姇´Yµ-Kð^:YªÅæÜLd¸™÷ ;‘Žà Ç¥aQªQwì{9u7V¬lößc»—ÉK¨DÒ?ÈÊæ|àr{sÐ}k’øk{⫉`·}¶ÑÊ¢±pØÇ½túœ,×*¥ZI®ÝQ‚óŒ1úŸÏÞ¡»°håX£…Zbà+1û«ÀÈ¿­xê\ÎçÝFš„,Œû=+rdWß,roRq˜Èm\t ùŸZÏÕ¼;q¬é’F.™bž@ì“FSh!JœdsÎEtÆÖˆ¥ò «@pÇo,ãŽ=?liUƳºÞk[‹kWZ=çfâÍòç8ÁëÚš|²½Å¯C̼að¦âI4Ù¶iþ(¶±Él'· Bã&Ü?ÎÁ²§œx­¤“_ð‡‡.ÛL²Hõw$¯ª\?Ú0èH«B¾×9Ü1޵mßè7‹®à™à·¶†ï¶&hcÛØ„X‰˜ 9>•.¡â+=b ‹[{-.tµf¸Š[¤‰"ÚÆlƒíœô= \ê7«³7¥+Ú+¡ÃY|={{m/Y²Ó®ïàÔížîf/å ŒÛ"ÉùÍ<®FBŒ¹ Ò›¯[Éá}R]7Ü\ÛX>Y Á¢g\£²Œd>à$Ã=@©5ß¶·¨:&¡â­FïO[XîSÉ6Úli);€W ³"©rª§‚:Q\Ù\èÚ•´0Çq¥ê[-ÜFë÷³§Aù‹u-ÆOPªY\¹¦›×ïÿ‡/Ï£:öÖÿÇz°Ò//V9mmo޿鿯 ôÎ:ІÃL“LŠQ=§Ùí"{«É"F; JÄ"«°Á$ɼnþ,vgQ×µ_Ïy¬ß¿äpÅ<3‡Éääc’ã;¹¬E®ïµI‡‡.¥š`—W3)[®9ò‹òIÉ\®1Ï=ió7¶£„-ïI–£Óî¼;áöÖücy#i· Í´Q\"Ï•ËLâ"¹nœò£Ò´¿áÓo]$¹Óâ‹Ty#œÜyï1Š%`&\ëó Æ `‚+*=-¡Ky4ûæÓ?³äŠâyc,‚eØFùÚÞ_Ìp0RZ輡_|Lð„úǃEÖ¯cu2ésÝC‘åC„òÔd‚ÏûÂÅQOÊT³MC§$ôV ^RÒýÍ=3R¶Zi0­¬Ou+Åg]€‚v†Ç g=y×U©øGEð…•ý¶¡©ÕNŸÍ´’¹TvsòÆøVÂî;I ÔW{ªŸ øÊ›ÝêKh˜À¶ÿ!UM¦')åä#Q—%Of²ü7 >¡Ýù»±²¿¸»c4ÒÆ¤™å“h ®>U¯šÜ\²µµ;;ÿ]ÎïÀVâ  µç >’2m‰á·0œ˜žL}ýë*_ˆš„åÍŸ`eÆî'ÔídŽß× ¶9ÎÓž2zeê°Úø¯P—ÊÕíí¡¼Ô>Åuò•idDb#SÑ7p<Åäæ­éwíuøº·f·Ò1¸yyýÙ_MÁ9É9¤ç7ÖÝ %8ÒŠ¶ï«×î/\|X›Å7i¥§]Þø†%{ -¡+ ”ðï(³ªŸ¼v…ëÔœæ²ü­KàËKÈ|Y¡}¶ÆÒód>bÚ\ËG§åÁ «0 T’zâ± m'JŒGp¾\dIÌmòºƒÄÈÌËÉm¤ZÂ]ãLµŽ/ <¢[uùJ‚®9ÝG|œÕ§S6¹OGýu3®þx×ûM†£ã ?N¿¹žIF8:‹ZyjŽXÔ,ª¹ ö?ÃŽk‰Õn|Qñ¯WѬµ &ÏNÑ´mnµ{Ç»Ø!b™6×`Ò˜ñžÞä®ÓÛ_¶©¬j×—ú¥íĺ”ß3ÎÒ7–{wRH¼Ž _ÓEö–—ßmÌw `œÝ2+܈÷1;$pv+t Œô­] kus8Ôv³gžø~ÏZðųâ˼¼ÓáÓMO|’Çz¨³´`•YdXÛ;³†rµÒXé#ľ/›Å)‘¯tÛ•ŒÞî¸Á°Úeb©]„’ø A€½ª…ú¤Z·ƒ­–e³·vyæin¤¹‘¥g)"FҀʊèH^ƒ$Ž­Ý27ðÞ¤$³0K¾õY£rwr0+Ï^ ô¨pm]Š<ªêûùÕ¤Óïô[›ìÍO^´½º’úÖÞê(XÚ«"…Š7|«osÁÝÁª¾Ò_—Ãchìõ­m{EÓo5®t³ÍÂÝ,H²|Ñì ncØã$ñž˜Æj;{˜^Z¦¡a¥Ý346¢-æ•MåIÚ@Î Ç­k ­2sNÖÐÏ][¶iŸ ¬Þúu"êÎö(„S[üJ§„ê\¶8Á®Ró–>Öô¥Ðìÿ\µsnf»œ}&Iä–UÜÙÞH˜ÐäaFÖB×vþ#³63 òBßé?̸`Ä‚0¤¨Ï;O54ºÍÝî uôýÙ5‹é.^O'iŸÌ«=¼j¡PŸ.MÊ2AœgãuæCJZ=æºgÂ]kAøá{ã-;Äw7:…퀴’ÑÙL*P†QNRGÏáFãߟsøñ¾óX{ØßÜê,¶Ïpû¥Yœ€ eº©®_OuM~ëY¾‹N‡G¸ÓfK;N´ÝwkµÐIçIÁØgð\òkgÞ;} [Ÿè¶Ö6ö ÖÐJÑùrÌû ,¼€r2ØÀÎOCJ«öªÍ —îäÚzõÜÝ×¾Ãá}.[ùug›L”Lm})‰æp>^í»@)^½y¯ý¤§Òü à}*yQ´Ëÿxš;s¨þòÕf|Ë%Ä£î¾Õ„±^˜è3]‰ôE>)‰ü_«jwÎ|³äD„—V…ÐåÀ$)!‘Ú¾wÿ‚|3×~ ü ¶¾ðÃø‰<+¨<—)gvŒ¡ŽF‚5Èb¹P 2FTiJsŒ$ô5ÄÒÂÕ¥'(^ÉÛÖÇÑú…tï†Ú…ü÷ZÐñ&¡®í»[õT’##(@Ë10†px#ޝGmKRžÆï䙢…”n\Œ©ÚP{W˰w‰ìü_ð"msÆÖ³[ø›Ã¯ö &Ô”¤"Udº‚à•`¬ÄŸ™}«ßü9w}«¥¯Ùn–T»…¦Ýƒ±óµ«žÊXñœ†Ï®§MS¨ãØùzaìÕHF×:µZ^iżA •âe/+€7êzuúÕÿøI¬ô{+‹én¢töÉL[÷‡$.Ü|»ˆú ×9â]óÁ‹+j±\Ì"}Í1yÍ(*äÛ÷¹ã³ïü:Ú•¼w“ZX"ˆÝ\1L1N‹¹}‰÷Ç4O“vmm6µiŽXÆÒª››ïgœƒž*£xkFøÏñ6;?‚ÐèÚ¦@Ñß‹ÛæÍʶL1D¬J:‚ ŒÖU-4åÑapU0ÚÕMwþ·üUÖi]L³DðýŽ¥s±µÂ­»K€:œõöèjžûKhºíåÈ—í¶BÞ=ò¡Ö.¼åNXqØq‘^{âÝ Qº¶Õõ}6u³íb‰Ú¶>w.Ëò·`žþµÄY ›Çó´Âm¢ˆ2êíBªºÜvçÖTèBªº7GAÚk}»žÍ«ühÓžÌê73Jd¹bŒvm`J6ÑÈ#vyªÓüIÓô+XíR&*Ò·úµRNH#¾yçÞ¸?Ëáë˶wÖþ£!*ÂU*îG`QùÔž7ø\5M9çK.5R̉9uS¸¬x9GËÜdçÕ¨;]ØÂ¦"zÝX·ûA|A]cáÆ§ˆˆ²=Ü2G›e`²!T  “øW ¡xu,>x‘Ïma½ÜùAPI*í?À Lï=‰WCáÿ\iÚ–ß 2Gs'ú8I3$Iœ¯›Æ ã t÷âq­YéWÖÚ×öu´ÐJ·Í$÷¾º£D– C κéìå?ƒ¡ÌñʤV–±O㈞ִgðü1ê:–Ÿ&-³´k$cp‘¦pØÃª…B¹ê?êŸ|Káë½V+t!û<°Ä~Íì¥ÁRû>uÚ0 pFIÇLzׂ>.¯â5Õt븵h®­eO³›„•bù‰P`îÚv㎠ôª>-Kð%¦7£…o.dŠïÏH¹“¯P1²AxèFkOžiõ4†"pN*-ž=s§¯‰­c³EþÈ‚yòn ¹–×줂TùÀï\Fìç s𯵸}ªO¬Ém«x—Ä:­¥À-iszdY·;VEA)Ï1`8ãšõ¯èÚn¿â=ONÒï®bÔàÔg¶‘'É{‰|Ҭ̖'9Êœ ÞõÏèÞXîe·2/Ûlo$€û³¯ñ Êx=†1×4êÔ•$Ñn¬1 ~GÏÞý¢à’ê÷¦ÓK¸˜Iq5ýÜ–PFAɲåalÙUÜHzWŸÂs¥ßý¾óÀš–¦ÐÛ[Ï4¿k•Lò¹ùSh@8Rw‚Üã ò1]Á‚^ÕXûH·3òéÓXzjmêüÎçöGý¥¢×n.mµÈ®#µvKxÍÖdˆ®b?ï|Åps€ b¾‚ñF¥eÛµ]m:ò-kP.ãR¾óŒ¬±¬jÄ•lìS¹†Ýǽϭü]ð“IÑô Kd‚=* #iak7ŒM Û…’Y]²[%¹l0yïü[Ò´íCNðçÄÍrt±ÒžGš9mæ¼»×& ˜Ò)í·E#¶’j…5ù¼BºÒèZ605âÜI{öu}¹+0ÃnpTn‚Xn#ÝÒ>躗ÄÛ]cF»Ômla¹2yFXí®÷ù*Rgv'IqòœÆ~öG>ÚB²ö’÷_oÀõé¹9ÅÓø^èöø"ßźo‡/¬cM+Nš-͵³´Ý»ªmwõŒw%:³`ýÑŠ“DÖuo M¢Û|D¹¹<ÓAi KA¶|–"—]6ó0žMMOâU߃|Ao}wjúíž™`îínF&Ý3 –˜ã RF‘Ôäg6ÃÆ:¾¹â†ºþÌÑ þй;ü‰ÍåÊD»IUŽ?• Gå¹åIÇèÆS^î–ßÌꃤªsAûÝBøƒ¤ZüRÒ JÊÞò"ûTO|„Äw¤JAÝ‚FÁŽAÎsÏ0ÿôOxzH¼)oua>¢U‘çvœ´¤oÛ‚å: ØÀÁ4xÓÆšWÂÃ}¨];ZEÚY ÁiÔ°î”8_¼I`ó^4øó§Ïq¬ÚÚ_#ê’Ãþ$®nVÌî\¢"à/Ê3Ž2_’q^t§šNåT©K™½¥ÔíþMÿ W‰´½7ÄvwZôÚ¦×?˜²42 äÂuO™‰Q’}+Ⱦ'Üx¢ÿÆÿÛöþ}sVÕ/fE*4qY¢Lxi”aJ¯^ç8£­ðˆn¤ñׂ5kOÜGq«cvRE†;9fRù%—q©9àcŠô?ú¦µ§Z¼þ¼³xf`w$K•ó ñãÈéÉⴌܨUnY¨·ø-qàˆüs¢ÛéÿµµðõÕ‚™æn¡#µêK ÿªòÆ>v~wœggÁZÃûk. {Jº¹òâŽ;dšÒîuI–rNà (FkPø]âOŽA¸Ö-®<ÿiû4ånc”ëVˆAÿV¬¡D›pX̧ëºÁ Ú¾™q{c§Í%ƒ™„Û¤)`ƒ–\œ)ÎzŠéji+ËäŒU Î\ÊÇÃK7S³im´Éì¬îmc¼³òÛ¡Y@ÉÜ8Îïz×Ö>$hÞ¾´>%ÖôÝ&)›~.&TóUy*TãžsÇÈüLÖõW±›áÌÖÚkZ»=Ä_d[µ¸‹iù@f<îçñ¯ý¢4ß kqÙøÓÄ/|º‘–8JJ€1¡ <–Ü#VÜ2ø²U££éøWÙFòè{¦­ªè߬¬5 kÚmΕ­$QÁ ’+‰“w·þzª’¼åWž9¯,øËð‚ÓU²kÿjªtÕM¿`†Skk Q÷¥•“=r~\î5ÁxG㇔·/-Úh凌f7ÈûØä+—‹Æ§_ñdÞ“GÕ—L‰„¦ð@a³„ì«>Alœ©z_%ÿÃwjÖKÔ3#+h<à)è?JÞÒà¦:…¼9wÄù^ÏR˜bÎfùÕ‰+‚1ÿë¢-ÍëcK4Ãbg£ûÏ®ßE´½*n-­¢]‚-¦  žº0G'ŸÊ²®¼¥_Å=ž•ŒZtPÛÜ^Im òË Š;0%±òýïZù×Hÿ‚‘Çk{og¨é¶·^pÚf[ ®Á”Å#°àû×sáoÛ{š…Ķ>(Œém}V•ÿ0—œŒäŽ3Þ´åvÖú›Â¾¬”bã鱡ñSöUðÏÅÏB(ý¨5ë‹XbÑe{=×ìßgq¼[’HSä·ñíÉüªUiJÑŒn»žf+O >XÇúüϵt¥øÊÃKÒ4‰¯ì5;xžåÐÛ»Ú@’¸Sø;%pŒ…S?xçÔÕÿø½|ªhö:ö›©krÞ\ïg´#·[Y#rq´Ž¼©Ú>_ýŸkí;PÕ®ü/ãX¼—”O{2é÷2¬÷r@Ù´h²Çf]Û''8} izgŽ6ãR‡MÕÓûFñn.»{u³˜#)t!Ø ±u8ï+:ÖÓ„›‰êQ¬ëÇž~†?†|.µñ 'ðå¼×KukÔ÷wOe;÷H¥.à¨[-œòm|:øŒ58íçÑô´»=ZY!³¹–I Ý”•sJT.ŠAŽà×_§xb†Ú ½ãGq¡ÒxÞÚ'Ú’ 0®Îý „;x31Áêq4-OP…ì#Óçib‘_íi7˜#f]›¤îíçhúöÒîtÖ® ’u¤ÀŸºhØ”e،𥃆ùpÒºTyds9'-Ÿ¡JöïZ»øŒ,C[ùéöt¹'b„M¸J „®ï›×8Æ8ÈðN—«¤\ê×û ºž ì—¢<¢¹%‘H‚ß69n´ÿê¶RÛëO­ë ”€èÿ¹‘ te“ï6v‘ž¼c<×5¥ð†µ5¦·ªê2Y}˜ùPÅu¶+¬¸iU¾RŒBÇžIÆy«¾¨ä½ŸS³Rмo«éšž¤5]-4ÛcòYˆ£º¹læE‘²ìBŒ_—îôÁ®{Åþ1·žÆkI"Ôôé´RóÆæu¸èÛRdÁ%öÙÒTŽkRñ©Ðô«‹Í:…Õ³¸­®ÚI#û@LìÀHQÚQáBã¡&²~(ü`Ð#Š{] Õa½»5ÄècS½vãqc¸õÎJ©è1\õ±‚Óî”ck½|ÿ«O ˱'aÈ@Üû,Àà ñ]‡Æ¯Ž£ÄwZ•ï‡-m¥ðÿ†JéÉy<˜ûN£1Þcž ¥ºnäu õ¯ýþ\x‹â?Š>$ügÐÕ¾Õ¯4FÔ-ŠG$0QX‹¶ ® ›^OÐeØ.YsÌó1¸„ã˾v>†ø‘ðÁì<9áû C«ê:n© wóIw$‘²~öI.7Æ(©8ÜÙäâ¸ŸŽ¿¿áRü8¶²ðAc6£¨#\̰TBò$²¬„Ú=8<ŽÖ6–^7ð]ÅíìsGa<ÓÄw6ÌíD „Ëàr0zøóöÿøã¿Úâ·€bøcaqyá¼ÜZöÁr– ‘Jwü(XúÖõkTP{_¡óøÜ<éÇÛsj¿¯¼î¾ߟÜ_ê:SyÖO­N_)· ¢ÎèâÉÆq’1õ=ë¯ñ'Ÿô]}59µ!b×vøžx‰‹Ë‘ÿyôؤ‚ÞÃÞ¼k÷ðSDòožÃN‹íw3o$ÆËÕH<äžqÈâ™ã_Û|að41i:ÍÆœö±Ivê¹G–<ËDÁ-ŒôryàVÁºµ]¥u~Ýë“vNï[žÕâéºÁß|N½‹MŽñ¯mÖåçó•YcM±õ Q£ãqÎsÅ|•û þÇüàyõÉ5‹k׋¾ÆáHht¤GàÄŠK‰›%I,r£±'ïÎ"¸ß|4Ð>8êÔ~2øoM–ÖØ]\\èwPÆÐjM(_³Ër·ÊêªÛ“$nö¶Y--¥¸i=ÎPÆé+yAGU%ºƒ€r*ì²E}ö‹DfŽ!dŒ ³çìåqž;œTN—3܉aé;9!ú¶»¥ükІ…ñÎ×FÕõkÍ=mÍc·RÄ àãÉA…)’C¨Æ:Š»öß ëWú4Ý G¨’Ýæ[d¶‚ „¹bNB«å@þ.N pÑøE4ˉ¡ŸUP1”b ” ǜڡðÿÂXüA¨^Üx»EÔ|A¥]"AwgñÄ ûìÄQ†<¨>ôF”i+œXÜ +ûЊ¹câö·yñÇN×á]i·—Zf‘zËt¶mº1£WÎív¼vnzW§ØxvïÁÐè·ˆ°mÔìÒãPòâÂÆÉ£d…÷Æk°øU§è^ð$Z'ƒ †eq+L˜I¿,ˆí'ëÒºýÁ×>7 u ØA(ó#PÊê¹@Ýõ'¹ï^M\{œœ9v=Œ»'XZ~ÑËu¯o¼ÂÔt¿"þÁLêMómÉ òä|ÀV]’mfðÛ€åg-÷z géƒøÕý>êÓÄ©=÷†n’êI"}ÂâvŠdÈèÈêÊè ŠÇÕn[M½ŠÞO ™#TKIq);U@Q“¸öʹ^" V[žòƒJרÐÒôùu‰u b¥Òf ˆ@g¸ÁÎ{gÚºŸøÞÂ;Å(²]NìÖÊÑ3´ª>T ÎG×5ÈüZ7žS¢ßƶ÷W#r‘Hw“æç8,§Nq]tžᦟ¥^èQi÷·Öê8„Ìím•#l˜* °à×b­&Ž~m,ÙsÆ·³x7X¿ÔtÉå‚ãRÓ¾Â-¥S R"î,ÒFËÉÝ)ŽW¼ @½0ÝÜÚ³jD¯…"n …úp@ô?…÷ê~=ðå­õ¦ŸdcšmFêá7@ŽªvÅ);d¨ÀÎqNpo}„§¯×ï áÿ ÃQá›KíNÒ+¹ SˆÜ$Œ²¹I< `pYb3ÍoXéŸð­ït O O“+c3¼„ˆàÀ‡cFT‚6. ëÏæ¨xBÂîïÄ÷°øƒN¹¶¶šÇíj ´CqF3’8¿CZÞ=øs¨ÙKv·qØK•$ìˆ}Üô·’ݨ”)¥t÷*5'&Õ´%°Óí¥ƒÃ·Ëz,u QÖÉ EBpη"%¦1 ,N0GLÓtm.ÃWÐu=wÄvÝÉ’;tÒH[j»2ˆ±¡cõ¡¸ñÝ®§¥ÛÙA ÂÛ³Fm,†3ê9$’ÝúUŸøHí`ѵiôCu¦Å§Ý]YÁpð¬í1…±çÄ0NÆ‘ßñ¨ç²Iþ†Š ¿3> DX–÷O±°´¹rÂIcb/ŒXñÎv¦=vLø{ñN÷Å÷¬—±ÛÝ\<ÎiwÃUvÚ£j·np}HéŠÒ´ÓŸPðý¦­s¨Üj?Ú¶ÉuÓ§•ç£pph#A¬­L§ƒ4iáµ·Š5»•¦fA´™ucü_.åZÊš¿ŸB|ûlej߉|'s§xúê © /â„yq–vÎ"ÈÎÜ„ùqÐu©e¾·ðŽ™o/ˆQ5=)4×Ó””Ì<Æ2ù¸îø=“ÚªøStº‚Îï)ß2«¹äG±Åeü@º}bP-?q¦éách ràðŽØ½ LiÊO•—'¹Ÿõò5$øm៉úÎâ JòâåìâSMJçNm%Tœ~ð,À *®0Mm.“¦ÃáÝ!¼'y…¢‰¼‹©¾Ïæ`É‚nUTîmù @äœãÇh3ZÙê†Ï|R4‹²(CfO˜a—£ü+ ñÕü¾¿²O™#¸°ˆÍ$èpÊù€F9ûê|:²³vìNN7M[Ìô ü1¿“D{µ;ÎeÕ¢^’$3«‚@_—…QøÁ£iß¼sâˆqßëWsßÃggo`Ÿ½¸’LáQ?ØŒHõ‡ðçã—‹4Ÿ>§©ÜE¤m4ª—‘ @aØõjCãmçÅëÙÄÒÝ+é’­Ý…œ Ç  Läs;®wr@Éû¼f•(FŒl¯þ^†UTªËÚËäß©Ò[xŠÁ­¤·û4·¥ž*³,-Ä;Œ(p3Ç#­Yð¯ˆm50Û:ÙnÒVImᕌJz®86:ãŒñ“Xº¤™°¼DŠÓ¤2<€cr²ãr®~öpIçLÖ‡€ïí¥Åʼ\ÜÆeA Ï‘’H9ÁÅ*u]G88´ãcgÑê~Õîu[2_̶‰ ƒj#Z"8ýß#9“ÎF+@éž·Õ´Ö®õG‘[ʉ‘±°Q’¡Cçqë‚+–øÛãÔðOÛ­EŸU7Áa–Aˆüæùn˜¢w Ø Àð/ƒü§[|Eñ—Ä_$úŽ©¶ôÔ°(ùßrqŽ9õ$Õ?};ôä ÕïwÛõ}»\ÕøŠºœÿBø8šV¯>§-¨´ar$GÁ˜30Ú¬ª‡Q’½iž,–óá÷‹îü9.³c®êšdñÇæZ»´²‡BÇ2Ty¬AUíot«¯¢éb*y’8¥Æï:6A#8¡NO$d•ŒZ8ðv“¤xfÐÞG,âèË…ù‘eŽ-ÿ>UN Ìʶìdö¬ý£¹v4qœå«ÑtÑ|ÛýÎëþ"¹ñ zf¡{ml $ÙÜîò8Yþo5€À;›’:MVÔ ’ñ.äK©M­¸Œiº‰’s 9ÌR6ïfTù$÷¥ñ4‚Â{ 8®¡‹‰d¿»D kó’£,Ò2¨÷äÕO ë˜Ðôø~Öâ}BÞ=A!GŽ7Š'-´³?ÝvP2‡•#ꜹôê;Y«»"Þ›©M§Àö· ,¯²Îêê6¹’7–FvÀÜ7Ëž@ÅÅZ‡Ä—ÏbÖºT±Ãk1`—v)5´ÒŒ)b 8 €üê?øNßÄSJþ+K‹;d’7°¶Òy *C3¼Ž6ÄíÙŽë“ĚɽÑôö´Ô//$ŽÁ…‹aÁQŒ³×'­m»ë±Îåm!¿q·Úµï‡´9òCt‹ ‰:An§ÏVR$£d)aƪKñ)¼_à‹‹ï Ëeo¦ø‰`Ô,™m‘U^-È<ň† G,3‚Ý{Ö~µ¬NþQl÷m‘#ÜNÇŽ*M«¦[¤‡ý`­;pT·¯¡ÎGçZªP“½µdJO™# ÑÝ5 F+¿ [*ÇL‘ ¸†9Öh¼¶‡š‹"ºØÜ¹ùw“XZŠO¥k—pݫŠ[:d…¦¾IšE„ÂädF0W‚ÇV.¿Ú[Måy€ªв}pr: ܶÕn-|;¥¶™c[Á@’L‚gR¨”ß+nŒú󞵜©*z¥qÆ£›äl—ÃZ4W°KsßM{§$³ÜX\Ãþ˜è¨®;¶Ä”ÚF3€+Lü:´ÕbVi­ÝÜ…•ŒÙÜW'vTœu9Ç­d>³­6Ö×ÁI¦XÝ^Å ·dJ­ܯY_!FAÜC`v®~÷Åך'æÊê÷ÅR‚aû ±‚ Ž5݈ã·'&N íÆk Fÿ ³gD_-ܵG¡Zé×~ ¿—ú5¢Au´5ÃZD^0#h$‚ÚNÞqœ‘Xþ:ðœö—Ú$Ci“\ØF׌‘\¤Ïæ/÷“.vàŽ3¸äâ®é\ßO̱ËŸ4Û-±šuË!Ÿ(Ф`Ž ŠÍ÷ƒ¢Ó´}ÆÆæÒýå¾ÔŒ¬—onàjÌFKÃp÷4B“”ê+Þš¹ÎüP‹]¿}¿NŸ§Y[\*êBëO–öä$.¼BˆcQ¼ªäœg$†Ìâòv¸±ðf•{Í4r—ԭͬkûèrÎGÌV–•uªx‚# ½„Ö$ݳÌdœfTêòHÄÌx× æ¯x†A©^ÜÜ@‘–‰#ždÇ™,`6̰êpZœNËDk&ª+·¯¡Î\­Î·®Þiš½íÕÆ›kkoÃOZbRá")°»ïu`Xœ| sTüuⱩxBî s\ÔîE¶’ëû;MÓa–{ñ{TwËgaû£’tªš»>“iö0ª5¸DaA‰ýáýâ:ãòæ¬[è‘xwâ&™ªj-°ý’O³»<÷ åŽü…Ë„e€Aym8{¼Ës8·f®Ž³Â-Ôë>1ÕtíŠ-|0-å”–%KyÕ£Ærw#‘Á®áWÆmS»Ó¬~(Ù]x]½ó%ƒHÕÖ1vÛd Ñ’®èÁÈÚåŽFMLc+]hŽ™Î1I;7ýjÎ÷Å>‡_ñTsx~ãU»¸´Sv \Fó $íór¥þv*‡sž)4mKSÖü<÷ú••Ö•©IrÊðJèf*€$R3Fv†*£€N6àšƒÆ>!¸ð Öˆßü-ºñšFžKÿ(ÛJµH@ ‘€À“’>R:Cájš–‰cwã-:úÕ&ȸ.Y>b¹˜`ŒŽ§ç¥o‡‹JòØÆ³º‹êké“/‰$´Óµ;»x®dvf½ºŸlAvgk±è䊣§ééâFx¯.¬ä¹¾Î~ÐnHYw÷±ò‘’ Lð¾¥â]zêM-†œ·‚!Ú'—ny~è´’8Ïz’ÿÁÖº ¦¯g|öÑê™ fi›mÁò¥‹¨v$í*Ûzdnâ·ŒãNVàp¼7´m­Î“À~;þع]â…¥«Â· äe6R>a"àÆàó g½mx¦[ŸkÓI£ß¥ß•x¡¼œ$ãh÷…ÀÀVÏ ×‘h¾(–÷Ãż_nð^ˆ@šÝ]]¡cü%€Ã`úqQɨÚ_É2j¬ºŠÀ“I+»äFÊUW-òtÆ•ÉJ|ÐÛ³ah8Í™è>øñqeª.«ñÚ=SGŠ".¡Lª¬dä>F[zƒÁÈ_ƨüMñ†«¨jú¥¬.4>ée²s†º¶ŠHÁQ,¡@*ë(À\áNæ²®`6V1ÿkµ¬ °JE/r¨rH|g®\cž´]Y\ß\\#ÙM}rlVåLw&#cn›@Î8ÇËó`jѶ´Z6cP¿´ŒLß FÆÚ=sÃz…Α³\]Å,Rcì¢,m àùƒ$ œsÁ®“ã>¡}û@xVÖãMõï³M oäÇåj, Bs…}¶“¹rØÜ0FnI{cˆ!kÍ3Ê[…Ä$©ÚÅIÙמi¿ ­R ÝJ?ˆºI’8Õ’Þ=;Rx[ p e‚üÀ|än¾èÍ$ùÖ§6+šQ潟–ö/|R·ßñÄš¼3‰ ›WØ–ÑÎþc–tbñ7 ¸;ƹ­#Åø_âÕ¾³£ÞÈSSgª2eµ•óædñàYÆU‡ºÏødžom|5¦6§"Bn,ï¤Y,n¤hˆr×nDŒ«¸‚£v:W˜hÚ€°Õ­.%´·x™H[Ü#·w^7ž‡#ƒJ­7YIuìqÊ›8É}ýË^)ñv»«|Õ~Ó _iövs}E%þËÓg§Pˆ‘›¤¾J Çœ“Àù·öœøO4ÖvñüÕn„O§Ýj:Ö¥w ¢ÞHã9T…$`í·nÌ¢#L@Júkâ>»yðïLñ~"ÔãÕÖÆ ?ì©§Y–ÚùäCóB‹8 ¹òsÇ^cá¶‘á-?â%Ýí׆nôË&×Qº\¶èŸ +ýê½þeV“EL#)O™mýw>OB•evµ>#á–¦t¹/<:4ú|ëÜKi5¬z*­º$•Fõ*O”œ×ºøáÖ§¤YØjº<ºL“ßÃ4sZ5ÀIdeŽõ$§¨=ÏcÀ:?<âxBË_ñãjúgˆ%–é´sù¶¾Vð"h‘Kòç*§±÷¯ñ¯ÅíSÃ>#]>Þ+f'Û@f²Ü“À|¶Gû"·„eˆýÔÕûyy —²“¤öô¯ìÃñ—Y]!áÛÛK´ˆ%:ÌÓ&õJÄÈ Ü:ü¼ ít/ÞøkÅUìÐ2g‡+±|ÉÈUHqÒ¼?Àºf›efº¿‰4Ù Òo#mBS:DÆ*3÷rH÷íœW±x?â)4h´ Ggo§+ Uµº’5–iiiTä¹É'•âWç…^Y¦šÐö2ìgÕšŒçªØ÷ÜÜ|XøK¤Þü(‚&{ã-ÅÄ’ªCÇæ£ù³nÁI— Ôà `dyÏ„nµï„v—²ÜN"Ôî&e”[°‰.€FuùIu*ªƒ§ ƒ]öâk<Û]ø/W}/BKÁhðÁ)£جc‘°ÊŒ”Ü×#ñÀ°xm4é5©5NîÞkûFâ5‰æfbã … •É$Œdç cR´éËÝ{žž1]:Ô´or+E‡ö„Ò.4?A7‡-4`b°ySÏž)D™v2ƒ’ eB(\6rp6Òiÿ²L_ ´í_PÑ/nué-âK¹¥Ÿ-…i6’Yv<ðäWðÏHÑ'²{Bªà©R£1÷o›‡#Œƒšûô÷Õü.õ{¸[K?°!ÖòƬ2Žd`K;eŽG¯ WÏ>:ðG†<9â-Nö h“SÖ$Úf\¸2Šëæ0ÜÙ*:ôÍxQŠî@3¹Ayë¶¾±ñ?‰bø5.±oãs§êsk[„péöæ;;eŽ0«ä§ch|(Á “Ô×Yð³]ÿ…“áQ­xÖÏI±0«ªÜBñEQ€’:`ac£¦@ïOë2Ã?h£{u¹ÅG)¡U5j·>uøsð¦/ÛÚÞx¦î9ãû ß³•h'[ÈÕá2ªÉ#ñž«׺´××µ‹R»Þ!ÛpÃdaRåO½Ç¦kºñÿÂýWûB+Ÿj–7s;3HÓ-’o’VFCÄ÷ª:o%ðVƒqk±§ÝËÜ’Gu‹Z%âÂ;£1`XIÇ·J%Šœÿy'«<\M)àêZh÷?ülÕ|1ðÏLK»ˆmõM80¸†Þ7¸–å#B#V‚å±»<溅ÿ´Åνáx,~'ÚYK§h^Ú2†Á%ùðb]îîØ Ýƒ×ñmß‹õÍÄ1Ù6§¦¹ÔAY\„’ ²¶ÈëRü øâ-sâ™ð}˜Òµ ”F¦ÖO3Gò†s¸0뼑È9À³­µ™ï`ó‰Ô|©t>úñE·‚¾?i’Yj¶öw2Ù²Çj“ºŽ¤a“iɨ3Šó{öÒ¼W®êÿðk©a…-Ù–É&KEa–î’KIÇ=kÍôÏ‚zÖ¥ªYi*Ÿû 5¸7’NΫ*FK0xÕNrª¸ùO~µÙZø^†^Õ|A¦x›^¿Ö/–£Ò.uHþÁwçÌÑHy3ò´lÃhãç*›TS÷ŽÛÓÅ®lL,ËŸ ÿ`øþøfiôëÉ[x“űÿÂÒoøHµ;-69ç†1E+•UX6ñó¿›ûÖáD@w®¢‡v×à°ð¶ˆö–âH¤¿š9^=äFprÈc5É8ê¦ï莕)¦“ùÿ_ðK±x…5_κåݦƒ¬A$ÎrVg¶mϼ¶Öf@Ÿ¸G×"†÷ÅÚA”jw7Âkú„‘Ùýž9v®cvK&e(6®ŒJ³ñBøEƒâ{êz¬Ú´Úœ²j‘¬w‚IßÎ+7–Hˆƒ«’ð¶…PÁwteÇ¥M*åzÜæ†%ÅÛ˜ï|w¦Á®E<÷–_Û:¸ß,òÊýž(]„1ŽÕàóH“ž•Qà¿ø“§jPésØêw1 ´¶x¯<²v옠#ŒÇ_Lb¹ßxŠêëDÑŒ-¤mZt$A¨X2pFÐ'¦;ŸZ‡À_o¯µ¹¼?}m¥ÝX½³O ÍîÔ(Áù£ƒ ’zv¬UiS’/c¢0K¦ìË~>¸>¿»±´¶:r5¼fEŠ6’)¤»î#!þb7³pYAÇhÐOÉ¥ÙyÉ€dòÁeÇN}«¢†B…Àèx>ã­U²±L¶Hícx :U˜Ô·ÝÇÚ£d¬^·”¢4hçq#zVÖ™z,4§hd®äŒ† p~µÌ£¶ÐÉËÛÖ¯>§å.BD•ôïÿê­éMÆò3©IT÷M‹]q5í?û>Uv 핱ßœó\յɵÖ&±¼É!$õ«Ù….¦ë`†îÆRWqŒ²ðÄ@'ñÇGWiãk :£Øç=ÉÜ?JδD“Üt©ªrÓf=˜ÛÜùIÁvÆ1ïK}ŽõŠ½ŽŸÊ“PR·qÊÜ2çõ5_Å:œZ‡oo.¥0$òHÒw ~aïéïX$ÞÆÚ#?Sø‡¤i“G¡v°£Ë! x<Ùè9ÏÒ¼Qý¨ôÍ%¯ŽcÖ ÆzÎÑÛ#F,£iÙmæZUHòœ&pHVø©â?‡ºÇ‰´í;Ç~!-½¿Û§³Ž<$å¼µO8±þ&eË ôÍhøgÅ>ðÞ¿tÒ]h#Wy&»°´´džâï 䓸W ¡PôØêkèðø%K[elKâ–‡7ð’ãE‹Â_Û?£Ôímµ ™'ÓìÚ6Š"%}¥å¬Žê€ää"Žz.¹ãK ¾-´ñýžæÖãÍÊÙ½·ìr@”n“€HçŠä>$x;]×ôŸèÓ-ÚéÚEÝæ±~Ñ€'»2Faˆ?\8-ÉéÍ^Ôo¿µ–Ñ­¡™¤i@>Z£¡oÇø×«J•ÒZ<\ëT¼–ÆÕ¿Ä­_SРµÒ.&¶°¶ŒÄ~^9 Ôä’y4ž:ñž­£øwHƒ[Š2¦G–  $I/˜¡‹Js‚088Ï5Ðè–v4—µ¹ƒW¶––Xó5œ…@Fenn=”ô¬;¯…þ Õ¡³ µiÂ$‚Ô™b„* í³ ÞÙÏ(ÆþêÐê”ÜôžÞg™ë>¹ñ%ÅâE­\hVóÆc-°Ÿ{³ud| |Ø\“Œ`Ö*ü.-5¬ú×Ûe· ­u$% ¬2ÕmVêTƒÈ•èRh³êÚ”:|0™.¼ðžJc/&î¼dô­ÿè¾ Ñô©¿´d‡L·idµƒ&É0S³d«cqu#Œf´¼)I.§$éBœÕ£vÎ7@øqwt>ÄbGš´aßRÅ × ƒíŠÒÑ~[ÚݬºÒÆ­oåÛ+—Y°¬ìüÁÈõ>µ_W¸»›C:-ÝÆ£§Ámp·*ÑÈ•ÇÞV8ËF¸Á9æµ¾[]¿Ô­tùmÖÞxÊ‹•]ßÂä¤r~\dWUÊ)Í´’;/e¨Û;ÝGWÖ‘¤ªh÷ÆéD¬Û8oäm<AUþ$|,·ðö™}s<îìfk’¡UäÇSìz⮃Z†›®ê‡„.®&Ôõ[s—ö¹ÑHÚ>ñã׎«Æ_³~³â›ølµ?ød‚Ü;ªÌ"R —l{ äšâR­R¤%FK—¯vqO r³‘‰eoá!º}’;ŒÈAÚc=Àö#ñßè±ønå»´Ò;æ7cåÃ(äd“žØÏsSi^±ðljm4WR¸hT°ó÷‡`1µÛ·ÍÛž•è—Ò­íæt½’hÜŠP­Рܤô\àà]ÕjòZ(ì‡5Ex+žWq¤Iw¡Íugp­qb¨ÑØF ²ÌÎøo%qólêxο¥ê>’Aâ«{»]ùˆ¢dÚ@|c,2=k«ñÔxF}KÂ6·ZŒ7E$´‰CMip%^…Š6ÑÇfÍ7âˆu]zxôôâÆ5j‡oÞH!ð¾aÔp@àš9ž‰-ÊäŸÄh|$Ö Ööã&4¹ÍÒNX2ýÜžäñïÍz7†|o/û¨ìüé„7îÀHç8ö¯5ðχ—à tñn÷Ïshë(št8Y† ¤|ïÔœ’q×¥«ø–X¯-ܳCh¨@ýæ~aùGÐ׋ŒÃ9Ô¼_/Ä{> éðøÀ÷z6‘c.Ÿks«Þ\-IJ9’ù¤XÙîš7Á‹|žkìX±Á⻄6Ót/ˆ+©knòl`«*†ó-NÖMÑ© ? Iž8ç¯5­ëSÂ4óJæ Óœ <`ûþ”ïxN_MwóE [ªFD¬#hÔŒ—@G= â¦.GÏSs¢¤áVë{îVø‚gÓ¥¼¶°žEì.R7¸ˆ’xƒ\䤻‘‚;V׃~!ÚøÎ{‹mIöê:jÀ‚I™„R´œ±U<ˆªA<åŽ: ‡ÅWÀxúþ]*Xõ U³kHŒ1I w0o¼r€9êpz×9=Þ›eª%ä:ê\]@ßd–ßJgX¢€#ËLPääûœ]ѪùRkB=•ÕÓÔôfñM…»jÉ.8Y óp‹òŒ±=G"¹}7áÄ77´°A©¾K¸RäÈwÇ4*e‰ ÷FhÉéõ5rÞÏÂVž°ñ6¥&ª¶zs´†çÌy-fgçä`¹v)Æ@èq^¯üB´ðŒì/¼(²ê7×öËaäZQB»È ¡ÙÉÜs»¦°›æ‹ŒR×ÚOC_ÆBA¹g Ê¥f@2¶ó7¯û'ƒs\þ¡ 0[x­•X[2J ·ß‘s‚¯?©®ÏZñ> M5¼MfÚN¡«“Ú9æ7$áA nìA~ß øsþËprèÈ!™“ýfÖd þÒJâ¥RXi&ͪS[ò™6×zLr D7¶‘ªÊLùg9lÛ?ËŠèü#á‹MÃz–¡â[Xu+»ÔÔ¥’â-ß¿@ ¾ÞŠ©´z g­hG¢\辺¼µ siæHÆ]†7c=øÈâ¢ðćˆ¼«]øÃX˜Ùê Z^•ad‘ý™Ü”Y¦ýò™SŒ…;J•9¯^­zuéóEúù4)NŒ¬×¡©®µž‘eý™k%ܲ ®£fYÄMl—lÒÊÒŒ’yc€9»vÂÕ|W#è¦='-q$0Å,c:’<ÆÇ‘Ž3Æ3žMrºÌ¶·öÐjóêém#…óíf#× OCZs £¦O:Y]š+T'ƒŽÏÓ#ñÅq¬;v{ž¼gvdêºMü7u¶ø¡•^/¼«÷H`r ÁÕxï_ÓañÚ|—Yy«,–—P€ˆ‚f^TÆ™}£œÍBu‘yªëbæÖãT¸º1˜HA[VÛõlä!#;N;Vʤ’½Ž9%)+·¯¯ôŒËCAøu=åíôúe¾‡¼«ßÛ­¬Ò™6¢‘Îá¶ÇŒ`â´<¤ø¡¢è·þ˜Ëg«ÅçåYZLd†CêÙ €:ã"§Ö|Oyâ½5í﮵‹-Nú(fÒ/!Yã¶Ë”'htCΚ½£jéú¬—0ék»wšaaöfß·äÀä€ÄãÓ½c%)êÙÑ{%¢¿žæEÞ¡u Ç/†¿±ã„+Êñ^Ë+4± TfÝD”\Ç+֙࿷öµÏü$—šÖ‡­ –¶±Eï<-ÿLe+ò`6ä [¿e¶3^7„5ý>þ}V_í;ËùÑœ+@ñ)ƒoPΩ… :T_õ+N}Q¹†]c³–)íAi8Å…"îRÙn@SŸ½X󸻗óYn»lÆÜ²xFÕ ¼¾}ZÌÞ%¬ÙÆ&º%aEò;•¤>…ÎN?á_ÄM5­õÍ#^H-o"X.•' *»°66–!~ê’Ï<Ôš¤v¯®Þßèwib$¸{§1G2$žjÆÒ2‡f!Ë¥›¸1\ºÚ ñ\š¬Ö~|6ïqi!óáP o/,!bSÈ s]4Ô\läc*Ž2æåzwÿ3£ñÞ¸u|9Òî´«í[O¿¿fº² éÑ̹ß$ÙWT,ª¼<ã9 ñ}ö›§j·÷6²Ëya À³%ܬ·S¬ù>lC®Ò “ŒU]ÄëÚR6I® ·O"ÄȬÉÏ1Ç‘ŽŸð¦ø'Ð.$“Ä_hÚ’iöiú\L—öŽ­åɆT«ÈÀÊp9­=Ø«&s*®rSµ­µŒ¯~Óþ øD†ÿÆ:Í´:fž »ÃrªÖFe!ü±È`F2z=+á¯í¯kSþÎß?á7¶°¶‘ã7ñÇ wAŽ×h<ÒàHjƒ~•ZًÞ'ø‚ÃÃú+ÏcÛjÒ\B—sEu»s”ò%píôÆ{ êk~Óü=ãKß[xŠ[ðÝ…ÂD·z‹ý¦îܪ3Æ pˆØ~~IQ´ÍaϽ§LãÙn9… ½Y˜Ã`ŒöýKGµð¤÷o^Þ)³ µ¬JÌÄgqÂî'¦p2k¦¤•«GR½’mÆ‹¹Ãé~i¼Í>È,W ÜþòO-0€±!½xÀõ$õ[šrx‹@oøJç´‡W´bÏj¯ûÓ?,ЧªòëƒõívÆÿUø¡uªèâï§OžÊúÎm;ÈþÏü¬4s‡%ÉòÎå` ’1ÁŠ ‰¼I¤Imw©ÛKb­!š)DBE_˜µ~lŒäçœr+xóT³Z# ²§NêNö)ê~»ñ¡5¢/ú3(2Îͱ_p'j¼X Ð õ¨¼cci ­ŽëÍVÙl_|1E)XÊwÇœ?¾G~µÖÿd8»gŠkƒ<².Õ±¸-¸ d“žÞ•_âN—kœöúÅ夥…äp‹Aû׺Lüå·hä8#µtòÓŠ÷Þ§ 'V¥GìÑÌøháÝ&©Ÿf—R«À÷ÄDÙb À£žü é,ïíü=Ú·Š"Óbû3´à`Ï ðqû´T$´Žä°#1蜹/×NðõÄÚÝÜ å¨¸†(¤‘ü‚3æßÝÁÎvðAéZ¿ 4 ?‹-'ø©áKKDµª[G}%¼­#:•p¶2®¨ãïu8ÅìÔåx?#¦¥YQ§z‘¿[+]ýãõ;BúöÈèzÍÅժŘ¯Å¦Ix—ri1Ù4Ë:}¡¤š8ˆg]ÊÌ&Ðz (ÏJ]kJÓtÙï"ÐRýtǸš{c$ÄÝF…Ã)gÏ-Ž äƒŒ÷5Åxoá‡cÒîmì®5 ^k—–êWQÞÌ#wS—ÿw`"ƒš·MÓNñ¸B¬g8òÊË·ã÷›WÐÜëZdÈ5[-%¬ZæLKø†Fˆ6Ÿ”‰ äç€y¦ÿk^J4„Ó4ë‹X#–=:îêà§X¾oôv¶r§Œü§8<×þ΃F‹RÖ¾)Zÿgì ’ÜÛ•¶HíÑ~cÊvb»Ë± |Þ˜§xŸH°Õ¼á;»;ËÝJûR´i.fžäÞZÅ’¬Â¬G gÁÇÏx§ªûΩ;Ù§ú¢?iÓø;E·¸Ô$Šøï"GŽ3oäFêv3}àyµIãïgí3P ¨ËssáÝõ5(ÒÒSs4—3زt’Òg!bÙm¹ îð*—ˆ§Hš!¨j6÷ðßmŽ-¿¢YévpÈí©42´’i×¶Mä$‘¸ œ¶&CãÆyᶦú}•ž­s®Çö»M²Äöé%éžIcˆM#j¯!Ã’«†ÙÝøOÃ>·|DÓ-.âþ)o5y#ó]†Ûû§ ò.Ô ìãh,x¸¯ˆ^›Â^3t[‰Äm<þT…-Ô²U(H ãæ(9P995§2”R‘”9ªKoø toÂ2ÓÛá÷‰u{Ûë{Èbf³{ÝE—šxœYÀvbÁðIn0 føïTM{â,“ø{QUû~¤ïökGg°„*àK+»ï8Ý÷Hõ®§àž•áÏø#SÖí¯­‚¾‘ogo¤Ë*E ÜM™Ð¡$<Œí¹N£ ·ŒŠ­áOxjû]µÑã°¾†O±[iß` =³í2\HH«ÀBÛÁäg<ñsWŠŽŸ#YòÕN¤^»YÿÃ~% {]¼ƒY†tÍ~h74V÷qÈXÐdJ%Ãîl‚J“ÃcŽ{Cø›„mæOX^xCPÂMo¨ÈÉgu¸œ§É†_»ÁOÌ(5¾Þ¸—°j"i×wp-õæ¢$´H¶à¹“a[giÚK|ÝJï<}ñ|tÛ]kQÑcÕî¶ÚÍm ›Mm¨NœÊþnTÂä¾G8“u/û²¢“joë©å:Ç{u5– KO¶`tž7½×H«Ç—“†ldãŒFjâÜM>°¶ºåŒV¢êç„5ìr-ÌL€¤£e0Sé+‚ø‹û0x_âlžÐþø áå–¢ÝÈÇNûM¼é¦EA°Uva>3ò…Á&»¿ü@MKúLŸ¤–óFÑ#xtä†Ût+FQ6§oŒñŽ˜ê:àùãd­ùÜ¡5ªG!¯|OÑôÿ6—s%»Þ­ãX²¬ Éâßí6®ãHúsW5 Øîgã – ç“×ü+{Áÿ°xžóFñ\ÖsÅ¥ö¬:½Í³4FY`TNêÎC˜Ò(È »†FqY¾-Ôn@ Røèëö–zÅ®›ÖŸye ú%Á1y±È7yRÅÃÆAÆGlœ‚+DÒÿáñcŦ@ÚzêÒ±µË܈Ë6þdlas“ÏÈÅ5'nc)òÎ>ãõ:­WMmKÆñIk æÂ;g•ÖâÞ5 ÿXÄÌr|¶ço=ëCM¹6Úþ™wy¦=½Œþaiar)Rà³3 U9À¸‰¡Åu/ˆe½‚úóìPæÈ¡™QƒG"(,r<Þ9É=9ȇðâùô÷¶ŽãGÒ’;[Ë´i…˜iÃ2Å 033mÉ”ÜsŽo€ž6œÜãi^뮞§Îч¶v¨öÙ&‰ñÞ÷]³¸Òoõ4¶¨‚+Ì<„œ6ãÓ?1úW[ð·ÆpøÂßÄË>£«­xzÖ[Í&ÏTbb¼ LÀ‘*;ÉÈÆ3[ƒ|®ü2Ò_ź摭C·†´“æ!².lÊ3!Á-˳1àOwðÚ×Âþ&¾¿ðŒrÇe6–Ÿc’ï™dS¸e¼¢v·Êv—!†Þ@ȯðn-].§-z2Qœ¯R—ü?ñgÁþ$Òµ…zMõÇöœvÂHtá÷Ø,‘ÎXnh={×©ÙøKÆ~Ö¯›â.ƒ¬X[¦œ¥onïU±¸g˘Q_,ĻЅz×ñ]|'â/ }¢Êö+½&K¥¹xƒØwʈÙa€H±'©¯gðÆïþÒ^¹Ò,`¸´ºÔïÕ^&Fsn ¼LH^;! sšÊ¥JªŸ³Œ<¿­OK Jœ`ÔfÔõ²èÍOž(—Äž+¸ë6Lå?w—2Mv?3€–ˆ½þ¿…vþ0ÔSF»¾‡ÆºÅœ“CäÁ}'KÔ$nš;µ‚ïZ²„Áeysn“Io9/åïUˆÎ ã±ðöËm©êz%Æ®—?Ù¯ªÆ—š“[¤6µ¼²™ J³F‘ÉÔ8œœ±¨ü/Ðtx6úMHÔm´«‹½P\ê—+sig2²Í3M”\Ø;XqÉãP×õ_Œ~m/À:”ö“j6וà m{²ÊCíá#&о\q*Fª­Ïn–•¢ß6»ìCuaQÅÛ_ëæTñÏ‹c¼¼Õõ³~‹<òGN—Í4)ÙÕX‘W# !;|²2zׇüLñmÄ^BÀíyà†8#óeys‘…K1«9T•úhyþµeâmsR’ïÆ-e£YÚ[ïUWIn.yáYAÀ<ûΰ|câ;‹¹­í4ƒS¢¬–È…pK’°¿1Ú9}ëkSñ‹âûµ\7úSî…ÄAšEfUϯ¨è9§éÐ7ˆwðuùž¡q ÙÛ\¶Ÿ¥^ëº<Ïae%­´P5ÊLVWcÊ»…Ú1“³qõ®âÏR¹¼T“YÒ¥[ÍVÍ$žIca8f 3$a ìË3ƒ^Vþ0Ô~ >¯mñi¯5?&)D—*@wxã@$j äõqž#øÙce§D¾!“T³ºžWºG‡PxU̬Î2™T‚U[UW—:——³ßô=Õ˜P£/g'ªò=;Rð.›ã¯Šz%Å]"]QtM&8â1ÊÓCn³;fYá…;¢àåÙ@Ï<šÕø¹à/Â~Å'ˆf‚ÍØý†;x¾Í Ë»åÚImʼ†<6=ª—‚þ:'‹|-©Üé·6¢êÚ@³º0¶šöh¤]’¬l´cÌ_Þe™\í+Èñ¯ˆþ1×ü{m‰¥Zéúvƒ³ .õó܆RUZ»8$× Öu Ý©§knscñ”èS’KYuÿ2‡‡üSßÝÙÝ4wòÜÊÒFÑ7Í [TŒ„üÀ0<žI'Ö¸ÿ‰~6ºð­”º—‰c·Vy0[4‡vÖ#nÕïœ÷­ )ô‡Ëo§i×–·ZŠÉ2I)Ë´›·UížX±Î ¯/ñˆá3ø¢ÞxÄo‚Ú«oì肸gYHó%ÏÝ¡ã\æ·¡&“ûÏYT’çÕžwñÏÄ^6¸]SÂV÷÷7z5É7F'A´àöÉÍ{Ÿì­ý‹SñF§*Z%ü^\V—oss$‹™V2W !_ @õ¬­ÖÇÃåììíÛDðÓ[ì¶1©]÷ ßyûËŸLŒ ú'öð~¿ðwÅZ´^+‹TÕ,t¨Ú¨FrÁŒ»± d’Á‚–`Iï^›¬•'­ÙžÖF¯[ü'­|zøÜ>ÚZè·Zö„WVAVrϾتòÚl‘¥ÊX+À®t?üTС¿Ð4ë›-&é%‘.§¸DµÓDYgiðKF0cÚå@%…}I¤j×49¥ðUÇ….¡ðºÜÜ_Í*µ¥•ôddo’PæUBÅ<`2ùGÀ|e¶Ò´¯ iOâ¿°¦Š¯5ÄN2DÚÍ¼Ž“3|®¨\¹\ªð܃šò,¢œ¤µüc1 «Êò—ÝÛò>cøYñ#ÆÞ¹Ó´öÑ.­ZâT¸½Â ¸gLìr…ý×v85ÚøË㎗¤êZ>µâ_Û»}¨Ù[Ý-äö+tcÄ‚Ú4ä–eDÞ7€Û³ÅAâjÛZ¾~YßjÉf’ÜÝÝ\º¨HKòÓ°#.0‹·F5Üx3ĺn­5OÁ:5ö4°=ͳÚmòbRDi“ºd _<ð1[Ò‹ÄKXÛõ90𚕔죵ÏP‡â ðxrç\ñ”÷Ñ£-ÌÉ̉%¥ªðÀä3G½×$3d–"¶¼ ñP|X¶µº†øi…-Ru–ÎRe˜«ð’¸#o HÐñ\߯ÛßÜé¶^Ò¬tÛ[ËrŽóVÝn’‘f&ÃáFèFÑš¥û2\뚇Ä=&BÖf°´)J€¤)P ­žçw¦EsN.mÛî=ºuç)ûûwó=â-“ê:™=ƒ_é27Ÿq:‹u²FÈâP9Jÿ°¹ÎkÏõ¿®›ý¡™jlf”6˽ðņÛÇÊÃzb»ÚcÄ$Ô¾(^ižSioöe–2ÌƒŽ ƒÆxàñU£ðÍŽáHT¶Ó£’Þ%kˆ~S8,é ¶HN“‚s\qšœZoþ 5gíÒ9_xúO†ÑÝxWû2Ò÷È2JÒÌÂ9>l+'61òÓ~ü/Ö`²Ôî1sNXf!÷e³É“U×ÛĚ΃y¡]>£¢Z·Ìl.rb'ø ‚7`…Èì ïR[x+ÇzÅ$Ö`µð¡iç…O#·Þ„Fà®0y`}ªIó5dÌh`§V¢”"õò6tŸiÞ8×/ÛOÐ[OÕ4›o²£o&Û{§.;c#ƒÖ¹Í¾%´ø©ZkËoi5¼q2ÚýÛå9 G¸ž¸!ÉéŒW¤øoáUż±©­à™üɶã°W'éÍu_ƒìô•_²B€©ÏÊ02NO¿''ñ®iN”Ô’Ôú<6K9¸Ê^í¿œÐ|#q­ëóÜëÒ\,v± H\ñ²!w€)@8•Öé¾µÒnnf²FYnˆ2±bCc§À—TÕ¬¼?içêÓÛÙÂRò¶Õ°¥Óµ»]r×ÍÑçŠâ>›£p¹ªÔOyì}. O½Õ©onÝ×µ9pU€ëŒâ£ÙÉ÷©ä›ŸæbŽ­Ø¨w1 G¥Líç@#è¨ü @™vúS¯nÖ;B×,<¦IÇ sŒÎ]ÅÔ³¢è+{g©i—á£kˆ‚vj©ä°ÏpF߯¨xRúæ ÛQóGÇŒä 'úþ•ÓhÚdº¡µ±ÔD 5ÄÎxeU>ØÉüs×i¿h‡I•綉ÊÄì9+ÿë­kFÔÓjÇ59§U«ëøÎâî {ŽÕ埵‰×Ãß®mL….5YVÚ$É`åœ?Ùê=œ÷³¬ ÒHÛ@&¾Yý¥ü{{ñ'â–§¡ø}¡ŸEðÜ~trIû¡$ªŒ³Ió`ì:sÅiÃJ½Ee¢2ÌqÃÓwÝì|›âŸˆ`ÖµÏßÃÆ©ce%öéIt•MÜP(!¾ö#+Ïðû ÷O‚¾½ðíÞ‹¬j¶©wy©F©nd”HÐâOÞHBýÝÁ²«œºVW„e{_qø–úóËEÔãEìòVÆ×dlç/°c9¸ýàëŠúÂrXÙês¶‘¬~—ˆâ^á'È9õ`<85õÖm$|®Äs6¬wªéþ Ó¡m_R‡Q:4"=Ýàó/WîòcfBç8žÇømu}[WMÚÝ`Ò$ ¢‘-òÉ™Q ƒ‚sµOÃ7Ã5?[%𸻲óL†_Êšã¡L2vӟʺݖz³ê×ú®›äêV³„‚Î)÷ÊIùÈ#,ýuÏ'ŠVäwg¥ìÖ{š²OønâÑ®/ÚI­,ÄMüø•Ûï=3é\áð‡ü%Fy<2¬)¼¹®Ì‘·.¹l’¥zžÙèkÄõoZ\i„>‘ l¢ FfNŸ:»ê½wmn´Ï Ü¿‰OEs‘èiö·–!šÃÃ’ùÑÉ–×7‹'™S©Þ9ðÍUóŽ¥ojÔxŽg²ÐdXíù@Î9É8ç=k Ñ-×þf´†6¸¶¸k˜¯sÏ»dcNø‰kðÙÞøy„‹ ‰ä‹ió0ÀðpN3é]Ž*ڳ܌T£€ýž»áwñv¿s3ÿlAv‘1Âȳ0s³8\ ¼×CÆ»ñTŒ™!°…„Š„uV#(_«Ž3Ó"¹o xž/xNÊášPÚŠ€š‚BÁó#o™UèElø^å5 &{]*ÍçÖÅÑ&àHvˆ>àOâr~cÜàÍa˺}Ú8Êé\ô #ÃÞ:·}þú(쑯&†éç`yh2ªŸ­y]ÄKÏüh‚ÛÂ×Úu–§eͨß]Å"Y,1o±Ù@HF8Wy >»°55)nµyo¼Ñ¨ˆûÊ«Àü:Wñ]O é:^¥8¾vXOµ»„ ñ!~bŒ7dã$qQ(É/vG}'©rÜéu¸.¡ñ6±i§ßjÌ—ÖQÛAonª‰§\+´†k¦R‹æ^/ΰü)á;İÙê·ÖEÍÄ+>¦CC ¹R®&oá@ÙÆ~n“ZÞÕ/õï iz§„îÖÍím㉂E¹šAð.#feÚKlç‚9®âÇÅ^ðõÿ¼C.»}nÉ}p«e$êÏ´&øíâ‹ŽÐ àœŒô°ðåVœ¶òÜxʼÎÔ£¿àpþÑu=A,µMrêïíY±kl#ß1dˆÄŒã?+.áŒFz`öžÖ¢ðÌòéZß’²Àv@1ȉØ9 œ°#ŽkÏ>üO¼ñÆ®ê:¾…­iV÷%»°ðÒOj±ÜKkˆ±%Ò‚Ü$&ä¨àœWJ–¢ßT¼·²»Yµd¢åÁû™ÀcŽ„üÄc°¬ëáþ±£ÐªU¤’‰ÕêÞ1’æhí£Ž'´¹qö”y7Ék¸–QÂäÓ­R2çǛ‹˜­ –Dm$ÇÛ†v9êx¬¿ø¾_]NúµÔñ^Éòy8E!P)ð 'vIÅ3ÄßâÕ|7g-®“a1‘X–Ê“º[6#TžÃƒ{fFM¼„TnÚÁNpyÁôŸ2ÚËG†ïÅs¢ø~ò9/<ù`À‘cuÉ»óÉPA\`×!¨ø½>#ø~î4ÏiÖS]ͧFãJ‘íçhܼs4‹€!q¶òGÞŒñUΞ†OÚ/y==NžËÁÚW†4›-Uµšúe”¬sDò´#e£nbw ’ ã5Òéß bWÕ ®ÈyÿfVŠ'^7eŽæPÌOÌFxéT­Ç™ÞA>¦#´·Óu8Rã[‡O¹•®–Ú7)²I·.rÎ"}È0C×i­%ŸØ×L(÷B±‹›ÉšG¾xž66JXï%Õ¶—sÆÜ“\ÍçÅßY°ðÕýƹ©=͸³²»I8â?Ÿ¥•‡€Ús€+·Ò|w}s­[ëw3i·fæ[k¹ä2F¥æØû†w*HN:ðj#)Twˆçû…g¿‘ÈxÿÅ6úoÁËÆðÅÖ©â¯)­´ý1wÇ%óVBÓˆ£$ì Ão¸'½þζºð®…wqá¨aÖííeŽæ9ì–si$jY#uÏ™†PÁX`ä®G5Æk¶"ÒÆ|9*ê$²À»­„+¹sù’ì H]˜ÇZëí¼qy¢é“hz!ŽªÛÊ<åcçÄìf{œ ä޼â¹e ”N˜5%y£–ñF»¬]jÖž²Ó \Gz’\\Í [ÚFcÉ’';aŠœ7ˆÏj¯û@ø6ö{ëMÒÓÂ÷¡ZݯìµÉîlͬ‘ìW ­µ\1Éܧd|Ç#¡êqxfÆßMÕeÒµt2±ó>Îá ²±|´²Þ 3ÓŠÏñV¯©øßAÔlµ/Ĉȭkà,má—ÌÔmµT¶y$¿²iw˜|Ç`ìH89^ÑŒfˆSŠ•Þ¿‘Ÿ$¤¹¯§w©Ñ_øšÃK‚ÒÖÞÖ[¸#TÎÈ)œútb¹¿ü?±ø¡¿‡õ =bh¦Šõ^hÕ•çþ äî ËéÓ®)u¿ɦx®ÇBðÄ‹5Í¥ÅÄÚ£O§ÈfŠU〹n îÉç¿’o®¡â¨£ðÒ¼÷ KÉÆÛ+;S€±€GÏ0'åòwÆt”µÐ•kY7Âÿ„6?4Í#BðUž—¦X .gê^ytÏ$¤s#ž@Ú ,@â³>-é’øÃKºRÕ!·Õô\j1ŽH Xw‚2ÇT†ÆNzŠÒñ¦ÂXmöÛHºšÞ8¯5s™ñæÐÊwr9Æ+Ÿð’ê^6¼¸ºÕf¸šFÒ˜í%;ÙíÓ; ÈFG. Œã Ó§J3JRá)a“Q“þ»h? ­õZè¾ÒìtT›S½7ÑHïç^—{O#·,ìàá:goLUÍt·ØôOÄšþ=ÂͽôëD6ó$(Y ß#!rÌrÀqZwšìš2ÜXH¦óÌiQ˜’ž¸ÏO™‚îO㜥¨X›H.®´Ýé$1XEkz²[[„`r(\Hà„© Áâµ¼IðãÅ^0›ìÿ 5?Ei¦êsYç[YÒêêcÚ!*De 4¡Yl{Q±ðÞâ#þ!F¼‹N•ío$ÓåT¼Èá¤2œg¡ZN«~]Érö-)]ýêß¡ŒúuÌZ¢Gw$“Éq0–#8޶SÆÇ •®•Mcá;N“PöRéz4qÍ<Æ2;Æ­æ+ |ìT” ó9Í>ê I`Õ'×~Íuœ%¶ÓìoU†6V>UÅäŸße@ýßÊ ÉÏ=ôâlüq©iŸhXÚÙØOg¤ÃtÙËJѪ’ùÆsŽüV޶–‡LÓœo¿úü~óºÑ¾#iÚçŽÚÛWÒ mF(|è¯#¹–)4Ù ,Œì|² 0vÏÍŽ¦³dÐÇ‹-4XÊÙØhwº…ìW·pÀ×réêЖ¥ªÌ’n@‘òXä`b°üYãë–žiµ« `¨KÅaiç´¸_™%|±Û†È!W=ˆ®ËáÿÅéðþ…§húÂÿÞø‰íV+hþÑ4’Á"`Ʋ5ÄjIpHMÿôÓi¢5‘¾]jìïÿgøKU´ðŒïµ{ÍWE¹Ð¡³µ‹Nžcrc;ð—Ü®²” !‡^Õó¯†õ[ox¶ïâ;üWТÐÃfÇQÓ,ÿÒ.žh2‰:H .ì#HŠ1fÅ}ñcÅ~ø{?&ðn¥y©ë–6Ëeýœö‘GuÆ¥÷y¬P²)-óÍÓÎ+Mðæ•®èÒZèš?‡üÛ'›RNÞÊÁ܉D‡³!y1Üß—•^ÛõÐÂ3rÝY=Ö«ô<ÏáĦý¦þ[M¨Ããý.ïÂúˆ·“IÔZçL–틌³ U Õþá`gëþ3ŠÓQšÑîäm´ÿ³ÛÈð+NQÙo‘òÜl ¯ –9Ÿ«kF±6—q¤ë·­­B%û5¥ã_ÜZÝ»„Š7*…¡v+,ÿœÖWÆëÝS\Ýü;Ó4ý3Ä6r˜.4rêK+-H† ¼7ŒÛLßóÊd1“´\“U¹OU§©.PŠ´Ý×nߋГÇz‡Š"iÅΛe寰ùVÖIrÆ: ‘Jï#˜à‚k#ž ×"3Í6™¥:âQ5‹Ù\¼è¸Æô1È Åó‚BÀgŠ»q«êqxfM3Ŷ¶Ô-á‘î1þ‘qm!ŒŸ-™J» <“‘ѰkÇ¿e?ÛÏDñ5Õ‡„õ]ÿDÕïw<ÒÆËue<®2Y~o20̪9œœݫҽ7x¯À™û8ZOÝ¿ÜÏkø‡u­ê±^,VËý"Å$ÄÃÌ‘€!¾ÑÀ%ÀR6ŽNi¾ý“5?éÖÓhú¶§6¥ûÉìt€[ñ¹C³ž¤rvƒNõÛXÞXkš¡sa©XXˆ¦i lØm¾çÜc©ª>µ:]ßÚæµšq.“C°Hƒo‡¨<•1­>KSvù•°4ç.i«öìS𮟠¼NËg&pgþÏ–Úv21}¥ÛkŒ†R9È8ç5Ù¿‡¬/§­ÛÙ\a„b06G<½~•ÅxÓöŸøg£hÝj^6½ÜÂÎM=-åžú›î!Š5,wtR¤äæ´î4½OKðÝÆ±mgªhöñ˜Þ8&Óäšòê"O˜Ò[«o¶E\17œòª<˜¼ KªÜöoñ=L*¨rhúwká oáö«¦éÚ…üA¬ÛF jw—PÄŸÚO.GʪA*¤©ä¡= 'Rò†ß´=^Î/ Í{srÅ.¼K·R!ÜÀ\mE ä Ú<Õ}KÆZç€?:g¸ˆMn’’9ر߅sÀPq×·ýûExo¿~ h–6ñOá«=8ÛËenV)^F çí8rŒ 2Ž„ “šù;öø‡ª|#ñ]æ—ðî}ÆMe$ÓžÿV+›XÁ&8òp¨I˜ H5vЋÅQ•7̶Ôó©aé*î-hö>±ÿ…)ãØiÚ·‹õöŽÕ¢hînR"‘_NY,ç`z…è­í_áo‰>x6$ŸTÔüC6•Vkioe¶/"oÞou?0GC¹'ƒŽ“á ö£ãÍKG×õ”ñV™i¥Ç¬ß^²Ïg¥YÂ3#J’7É4Á ±t÷V·þ6ÑmBÓ­5]<\Éö!¦d˜²üŠÏŒn`˜px'ä×ÎâÝ\:qRß{¾Yr÷ùŸ0³O¨x§JÓþ.Ar¾ÓÙ¦»žÉãµ½HfpÏ SiìáAàôgãß´¿jZxøCq©Úh0î‹N–ñ–ÖÀÙœ€ïó1ØcÓ=çů€Ï/„|Amu‹«¼ÜÊ¿hY\…FŠWó ãªÏZÈøQ­øgÀŸ ­¥×¯|#eã{A#iðÛZ™nl–PÊßlžAåÆvT¦XS“ÐzY{Y—<>öymT‹Pªš’ØôoÙ¿â_ˆh?‚ší†¥¯Á©K¡ º1  ã"EÂüÜ q´“ïçúïÄ};áÎý?NOìq#2Löhë)‹nævl“òá²ÃÝJÙýš¼ªüøÁ¡éš«›]5m!7ÒÞ-¥Šhã’F`C´†<îÇ8'½Æÿ²þ“ñ/ÇkÞ°‡XMa"ûe»]Ën<–”“!@/÷K1pG=«ó¬C–Ñz?‘ìÅOWÄ´.¦BøÞÓÂ>ðµÎ§o%Îe§½Ý¬÷*³N_˜HÙƒ3`mÀäòÜך꿴m§…uëÛ›k+ˆlnWìbXòÎV_™¢V?s#¸Éǵ{wí'£Y_ø^M+@K™ÂÚdvòÉȳ“çQ–2IA-žBZøÎÿÂ^"øâ ¶vú®•¥fíÚybÈófJÃËPîHâ³Ã?mRKÏärã%^†!rêºÁ>•ø[ñ‹@·Ôl¼5¢­ Ó´8íB[]\*L²4ªÒÎ×CF²1"``po~ÔÚÖ£ñ?\¸ñ°¾¿¹‡Užæ;K(tÍ«a䲘­[û‹åÈŸ–]ª¢¹OÙÇö@¶½ñ‰ñ—Šn»é [;w¼ùQãb%™Î0ñïxUI|†%p~^—â÷ÄÝ}4=2Í4]gR´˜HškY$"@ÌB~pâ0I!8SÆÑ^…dœTV¯ð:14¡ˆ¡V6’ìxVû8kšÖ¢fñÝŦŸ%²Ëqe#|­®áåÄGÍœã…=ëÒ<+ð—EÕ-–Sv6¹"öêK%²&;dUxelÉ1Ü *T)i~VlO ~ÓÃÃ~"²Ñ¾!ø‡ÁϘfuKkh bâk‰ÃY‚ö“’pj¯ü¿YÔÿiï‰þ'Õµ_Aã=?­>µcuv…c»³’êê-6Ý6* d‚(&~2¤¢€w“[¼=EI¹é°ye9^Û]VÇ¡Ýx”ü·—YÔ4è´­I’;m=®&}>Ý¢8v%ˆó¥}Ê<Æçå{× ñ+ö¤‚æÖ¼K«Á¥èÖ×V°ÅÅ«<?ŸE ¬¬ûœ… •ã“^kûj|jñÍŽ4߆òèúž©ˆ.à¹ÓæÓíãeô¤.é +òÑ–F û²J¶•ûãìŸàŸèMa—áÛËÍ&; }>æîÑ.ÛM··ÚódM. žƒ89$œcB0«UÝ=­c¾†_Z-òNñMŠ.ôÍN9--F2²FXÓyl~û*ª #¦ñÐæ”©*sö”ÖÎFÔ"»Š+Y€»I.‚ª•ËiAÜUºž˜Àc¯®IðRÂûÁºN­¬k6v¾ Ô£šö[ymã{kEs”·¶ùß F 0Ø&º¯Ú×ÃÚo†uKy>M£Ë¥xrÖóY¸°»òÛM’ x¥yâX0ZIüÈòsÀÀ“šÉñ}µÏÅ¿øzOIy§\k-.JÃcH…¡«É dGge'1¨’¨’•=¯ÔòçÃõ)·k?Àô¯|-øakg'Œ|[¦xÅ:/€­¦¾Ô®¬Ü\Z‹™JUÑ[zU¶»B™7„4ï xÚž5Ó5,þðÞ¹ªMh- ªÛKtŽGÚÙ³1Áb9((É9ªš‡Ã|=ø5¨|?ðÿÄOèúGŠ|ûUt÷¶+Èm¦rÓ/–¹À!Q” ýãèš6›¥hü3¦øûz[+kHn//c»—Q¶,b\$·.„JÁ.Ô#Ë` g:õ`­ªØõéàÕŠ)rÇOø;²þ©à]?ÃiáÏê¶–Ë¥i‚þÖÙ®â’ÚymÚ9%qR>Ïæ¾ö•ƒe”®°®ö§Ò4߉~?}CSÓïït{ßVO³¼ö°ÙÃDRLU¶.Ö+¸1jïÆß‰pø2å Ѭ¯%Ü$Xç½Y>hw‚?5¾tèIÆzÕ¯ƒž$Ö¾#è¾)ð¬RiñAãHí¬.ⲊE¼¼„K‰%ߪ±ÆÄ³(É ƒƒ\XyÊjNjö3©*x¹ºqZ¯ëäj| ýšî~øž}bÇS‹[Óô9^ÑmQÆ¥©°U–4 •Æ_pœ’§!FsÜêVþ¶Ö›âާªþö÷uíñ–kÖ3æBªcŽIPÊœvŽƒgø‡ƒ5Mž)4}Þo+M‚ÒÔ«K’ˆUd$að['®ãÆj§Œþ§ÄÖ_xoÃúµÞ¬Ó¥´MüñŧÚ[¶].ò–Q².9Çi¯iUÝhÛ†<´ÕÏ6Õ~^j7:Eõœ~ŠËTóïàf9r ­—å—ÀÜ=N3]φô˜ü)wgy%ýÄš‹ÚIÙ¼ÕŽ οzXÐX ôÇãQøÅ:v­Ö‘ðnßKûDq>-NþT·ûÌß¾ðJl!Õ—nF®Á×%ý¤¾ XüAu}öyd½€ù0–™ä…­‘ŽøY÷Ž6Ý+‘ÆmµŽˆS´–žg{â~mZØI,â ͦÞh‰Ø3Ê£–Æ?­p·:ÕÄ^7µÒílãÕ$Ô÷!/wåy@;¹*WwÊ;ãÖ¬üJñ]‡ƒg†ãÇ÷n‘$p–†I¡y¦‘7Þ¨@B¡ ‘ÆzÔŸO|kâ=UðÅëÏ}âJ@nTÃ8EVWr®Dô\äsY{&¤¢ßÈìÂåÕ«µ'ðõ¹Ôx[áÅ–“o/Ú-£…n&2ƪp€àדœõë]®Ÿ¦, Ê©Ƙ1ÅÂîG¯¥sþñV…¬øûXÐô%ݪxjÒÕç%xHn7˜öŸLÆàûâ·¼Câ o éßk­í”³0ïì=OµpTö’•¤µ>³ …§†‚²EéKv®Æßì|l~Ôí%Ó£¢U-¸àà1tÆk‰ñí m«\5†´,eFŽC;ÚnYne¸ðÌ~çÔŠò-w]Ö¼U«^ËâmH´Zt q(‚B‚ÞÏ Æåä:}k» •T¨ùª+"ªâá #¹oÆ_¯>'5Þ›-äÍctw¤p«ý‰™ÔßшۻÈ=xâ´ü%ñ>ÇÀþ³ñÄOj¢{1%‹j›kX§eËfæ> Æ » Hûµæ“x:ãAšk‹ym¢Ó¸G’I[%Ç–¸(  ™ã$ñë­ëU´|@ÕÚÃMÿZ$±|ëi3:‘’ppxïº4éRäV±äVÅF¼•ïëcꯅÿtïŠßt¯øFtºÒµˆ¼ë[ˆØ4w »Ñ‡U$qƒ] àdã¿ZùÛö?ð燾øRçBðc„•y×Ó],2¨à“î†ÉÈÀù½kÔ¬>)Gªê ky:«Ñ(Ùµ·`÷î;v¯šÄ`% ‘éÐ쥜R¨¢Òzìd@í·i!F}Î3ô«Vq}¯B¾‚â¸XÀFŒ>Ò[x+ÈéÎ+ ÃÞ%·ñ +öÈe¸ y!m2ú‚¼zäUý#T[¸!Šwò§“P³™Ô!É'°k—ÙÊ›·S¹ThsGbGñ,úµ¥ûÈøHmÁ•0=ºþµR ÂBû™UUK31@’Ià åüsñIðä·§DS=«HÒBÊv¸'&¸ˆ~0ènnü3â»I£Ñïtã,ãÃ%ä›À[q´n À[=\0•ªûÍiÜzp‹åûCñÏÄM?Á~¿ÕômoLš 8btÍ3Ë*FŒeèˆ7G©8ó*øB÷Ä^,Ô­aq§O9[‰£„<—vEî9ff(Nqž¸¯Fø‡á)¼i£ ÚÆ=3Kµ<5°*eP¡c†U|ïT2O¯Z¥áI4Oé37®d)cå;i1Ù°ÚÀFŒýЀy,:Šú 5(S¦ùW½ÐùœÆLMDã{^FΙáo?Ã:=¿…¼:n¢–u™c™ŒvÃF îØ¤|¸É8Æ1¿ð®¼Y£xéÖé­¢ÑmQ®>ËÀxJy¿1pñ®Í [&F8ZÊø½ñ×T—CºáTL‹kWHöÆìÃ"¸Æxë\¯‡µŸkºAÓîÎã\Ô4浟Rž±(lB¯ev.y"¸é,lÛn)%Ó]J„šŠ­n‡ iúŃ5¹î-’ûØVI­Éa#=” õÅcxƒÄºµüz}üm=ÏÛÈH¢M¾e·ÙqÔ.wݸ桳øRþ øh#ÒfŸ_Õôø‹»ÞHwÞJOï Œ|£ á{p*ž‹¨k:~‘%—ŒTØÉ¨,W0[ZüÞZVF=²''¦x¯R—/5–¬Ö”å7m™¥sàËÙ´8µ<Û¼º¤dÃnÈÀgߥ_ñGˆ<Þðê¶Œ5ywTŦš0“’å'¶+:—ˆ-nYmu !²BÿkK*Ý´}¤íÚ9çÈ­¯i–› KùgÔ®4øËGml­ ‚[çl’I8ú•ÔÓÛ¡Ðå Ûqš¿Šü;¢øì¼! [Bˆ×ËiÞâvÁ>J™Ž99à“ÆkŸD“Äš…°µtû%œžLÛ€Æ"¿) “Ü{ö5<÷ ¤x¦7ð£ýªíÙ$2¶Ø°6‘Âðù4ïéºm¶¸Ó[Á%ž‹:Éwt-˜EçNÙbÜŽ¤’rÜÒjÞm-‹â«,#’}1äkXKæÚÎùÀG|ƒÀôÍq:´·×Š—ï´.WÌ~çç¾+®ñÄñOwm ™öLžj˜zÔs·zt áûÉm¢‰ÖåžeÂîm¡UNÁ܃øõ¨§MÊ<çljòF0’» ñM½ÌsÛ„t0H<“Œþ#ƒêi~ü7ÕtX%KøÒk––5vÿWä^ç5§ðãB–÷[½Õõ%q1Gi#åQÁ-»iáHÎ3ß>» ]´ì¹ 3¹Ž:Jê¥I5Í.¤ÖÄr¿f‘hñ\Ä€ÎîÄàR3Žrq‘zÉÜj q*µ» d¢A%KÔsÒ§·ÖdgÝq£\.0£<ùÔK}ýžñA(!‘QÇM˜ïÇnHü)òkÜËŸEfs—z•¶Ÿw¸$QÈʱ¼\#ÊžÀäŒ}k£ÐôØüU¨ÞÝÁníqrI9ÁHÔƒ¾sÏÖ¦Ð<#k¨Ô|Ocn×3JÁKŸ¢Ä{G¸Áük¡ðd£M¸’ty1 €¸9ºqYÔ£^À±NöLåõï…sêDlïdñeÀåF:drMq>^ü5ÐO¼ÕgÔµ&¿&[ÍD¼‰ ¯˜YaŠÀ#loÉèµ{^ ­=ÀM0„T˜€HÆx9sü«ˆø©¤½ö¢Ëæ<~AÆAù˜wéYEF¤4ÜÚR©M§} m_L{K›1¡^ÜÍt²¶ÉZ V$n»ÆqÐóޏç­TÒô¿Xëºv¹ác Çib©uwoz“+@xÎŽs•'¡ÍußìWT° x…^<‚ÇŒœãŒý*O‰§ü+û(K³4gË$gtgǽb©Ièµ±ÑÆ›¿õÔù¿àÿí©ñ³ÇZ”ö³é±$ŒÚeΙÝÙj€Jwo»’/Ÿ ‚mèA¯iÕü Æ}VçN’ò{ÈLS[NøY-ã.±ÆÒÀ‘ïÍhè:Õ¶¯¥. ®XãhC†ùGã'œÖ—öSZkh±sÍ©¶&iK ÿ¾GÓë*”úÅXÚ•U+ªŸ‚.i÷šG€¥Ö4«8¡±ºÅÔÑF<„ ¼|Ì`dóÇ¥s áïüAÓÜDš|Wq†ŽIù"(˵烜ôÆsÖ®ÞøråRçF†ê2.LÇníÐm#Óvç<‘ÓÜhÖ¹®ÝÉâIbŠiÙš&‰?wh *¬k»'€“ܓҸï(ÝIhtË’Ir3+ÅØXi2YÙB )!ž[h¾bìÅCOÞÉSÓ¥/ÁÛ{hn®´ýVPn4i&Ó;e¯WÊ%wgø¿x8Îr•kÅÃJ¸”ÜA<®#A6æØÎ»°qFÐN=* 3þñ·Šå®mäyÊ^ýŸh ƒß$qZƾŒŽNy%­ƒã'‹ÿ´|5¢\ê3ªÞj³¼w "ïÛÿ<ʶܨÜgÈøïÃë‰oô…¶?dÓžQñ†G¼üÃæbqëGŠ ¦«`º’ac¥\y‰y+Kc3°Úåzº1UÊçžØ8«~ ¿ŸTÕ|9©@`žñu ‹tgh­¤eÊœ6xu÷­i¿sS^´îfë>¿ñߊ&¾ñ"Go§^ÛÇgæ ÷wQl@êà|°££B§s™8â½ãÄŸêÞ]?D¶×Z[ó£´‰Ö).›iÌ9ÎpË»€HÏJó KÄð‹xÆ]QbßdŠÝ"•¯Úàdælôùeó#Ûœ€ž¢³mì׊ï^éyÓ—p\ù}WŒgÞºhr4¯¹Ïˆ”¹ìúmØÊѼE¬hž†H|1m>³{lBõ-­¤‡pFe”e˜dÃåÇWkàk~+Ó­¯|Pš@¸‚Ác×-´û©í‰d@ÚDŽ@ŽWgPî"²nõ˜`-k¥í2¤ÜJ2"Sœ`wäŒ×³Éª‹Ín⺿EŽçxýãá³é×4¥…Œ¶xþ¹R?àz_Œ¼[á­A±ð7ˆ5‰ìì졸žÒÙ¢NÍæy‚fRT Ü«»¦ãÜ ëµ½[Ãß~øïMð.©¨Üiv6rÀº\Öð®¨Æ%93˹Aéžp ¯*›áIŸ^0Èéuw…\G)`cÁÊîÇ8Ü~†´µ;eðþ“.™%»]%¼-o=»°Fº\†Úî˜9 †r=Ȭý‹q²wczSœd—*þ¼Œ¯ø‡Ä®± ÝøIšÕû>âñu[Í·B¦fYdΦ4T$ŸâÖç‰õ-Dðχ†‰c-޹­Þ%½Î¥u}5åÖ¥!.’D-£VFzóâ Ýk¾)ÐF¹×6Ú|6ñévi/•c§ÃÐmóFd9bFC.1Zúþ‡cá©EÚúvͺ·üºèÊz±È±äžiû)6´þ½McR5Z»Ûk6¿¿3*ÏY²ÝiÚD!Ô¢}^V»Y¯[J²Gf${3"D~îÿÇÒx‡ÄÓø‚ò;Û.]+ÖB+‰&Ð=–ŽÂí \#‚ò.FÒç5ÏøÇßg³•ÖÝ$yšD–Pä<“c±9äjò?Ú⟎<ñ/ÁV_ü/>£áíAæMm´»¿”*‹™ÀL Î¥ÍcUìÖçUJ´Ý>g=RóûR×üqâˆZƒxA´ÂðÅoy§Ü_ß(Ôˆ]àž I—Ü0H œ‘н x§T]&ÚoŠ öw5ÞØJɾGf) ;±,s‚v“Ò·íuÍ´½yckÛ]FîÔ¶Ÿrc[‰Yï…X†y .â2AÒ®üBø¥¡i_®¼W§ÙéÚvššYžxeˆ$BJ3C€b½IRqIÍ+u3‚ªÝ’ÒÛÿZœ¾Ÿ*.Ïse¨5œÅå$4A7ÀBc÷dàŒ0¤v«‰|'àMuãëc¥Cw< §\oͪ—%HîZG-’ù8ÏÖ±þ|M“ßõõ²š]!µ‰•æ0Açyž$Ûƒu cqÆA¨µ[=r ¯NO^Ø7ÛÝ/¦ .ÆUތƙ Çj•̧t\¥ÆÒjß1ß~-j:§Ç[mÂz%¼š6’SûW^Ôn<” <åCoûÆ]ѳ6Fu8éôË[˪èÞ(Ñ®eû`ó-¥ÔœÚH$*É»,%¤,3‘Sx_öwñįi÷šªx}-ínšúKg¼I™äFuªvçhgÛœnøkâö‹ðçÂZwŽ!¼×™ãh¬î ¿—2Hq†`Ü.ÒF:ëŠÑÔ¾NhÔUôN›/Äão5{¨[[kÚŽ—¨ÌÖÂyr[ÊÙå%¼@ð#P7 `“Ôž+CDÓYâÔ%Ôo~ÈšlcFŠG‰‰Â(QÏMáAÉçæ³ü9yg§x/µ¿+ɾ‘c·Y-÷Ĭp<¿˜åT\œô¨žÐI «¤É òã Ã…ÝÓ'Ò³µ+M7IÕ¡m.I£¸ŽO2H¢/ËOºÅ~õÏ5æ‹ñ3LÕm5Ù-í/à'O‹QÓݱ—S+«BâK²ƒ€À€@lôÎ,Yj×:ÅÎ¥á{—ˆ›g¹²3ÜÙ$’¯š¸nY6¹!p@Àä`š®i6µÐ˜Â*ï©gDÓ-îõ¸¼/gnÑ_]\­É»Ôr_Gr;¦Y.TIi3Çi´½þÊâ÷Kͦũ\M1·¼·xr|K|Çw+d6“ÜUØüGoà­V-J _OÕµ™’=5숋αi ”ÆCQ»%qïQ|Kðî³ðõ4Û½oÄ–—·à¦ý.9Dò[!,¡ä,3´pêUU²yÀ§>^kF[‘½dµôüáÆxÒÆo^Û[ÞÏwlº^Ï:k4ŽFqû»yC)&6,Çz`ãŽæ¨Çâ$Öµ[V±Ôµ+kh ¹µ‰¥–ÚXAH¶¸HÀ$`úü§­VÓ4‡Õî<@÷MäÚ¸®’eó"*aŽw2ck‰ ¯94ù»z-ü_äø:ÿP‘ÂÁijrÎ-Ùc$ƳJz»üÂ28ÜxÓjß­¼9g~~#h÷“ßZ[¶’g¿Ê”%bUbƒqÁã=¢§´§g§R©8×|•~[oó8ÍS@¶ñ Þ¡¶µŒ¬ ÑT¹±ÿ„~ H¼Ôu*Åe•üÙ—UÜDz¹Å_ð”Ðx?Äš®¡â+ëNóZÑCZßZ¤VkK*·AŒ+ ¼…?;c‚@®+ö|ð&½/ü iª\E©ëRÙÃÜvaP÷»ÉcåÈà–Ç?tfºDðÜ–1^Æ5ìh×Ìš)ZÞO6ß2™¶_žGD1'LÛÀ5·µŒÞ‡#¢©«JM«ÿ_Õ‘2ø‚Üø“TƒÂ›à¹Ê>¿‰ŠÕd‚«,Š 3prF sÅIðG‹ÂpÕ¼plód².ò¥ÜLÉòüÇpe*@\žÁnµgV´ø YtûÔBÁm’iD¹žo4|Ü‚£äd×’êÞñïŒü{aâxÖ{=.DhÛMÓç¶žÕÐ  É“#¹V6¨Ü@Áí´kÛïjzF¹?ÙµE|4+,Âx&Y#1 ßü ³m'+‘N¤=›÷áú— E½®lüR»Ôõûhôÿé—òè¶° ùc†6g8HçÛjFclƒ¹Få88®+à¿4øÿEð6à‡¶šn³zu½Iu}†O´ÙÆ&·ØË¸îã†lFa’XWhÚ›Ûk1ÜZ<1Ù¬‹5ÞØÝà’›¢}­ÌcfUX¤¶9& ›â†ì“YO è6W˨v•¬em· …¤‰à êx'¨ºqäµÅ*s¬¶K¶›yúüŒ_øÂž-øí‹áÚëz·ˆìîõÛÛí6Ð1Óš6ˆ*J`¨q)Øz ‡9Ín|6[ñ|ewâMwÀÃú"@5ûÉmu¤arQ*pÛ‰ªã½sZ?…u[ůÙ[k7V…’ŬmÌ’AûÈ«+)ÉGÚÄa‰ލ𧂿׼gáɤ×5-MágÕ/Ú7бó̧v>fÞ0;r*êt7¦Ÿðw"K8ZÚÛK_Çëþð÷Ä 'Ä ðͥΩ¡ËöÍ6âKd2ÀÌ1çÃ)\¡*I Ž7gƒ^áâ/ƒ¾+ñc ð…®©ý«Y«¬÷3%°;ðÀ«[nT‚¹É'8¯&Ð~/]Þj:v›«YÙêÚm´žSÅ>Ô–³„`»ˆÇ8bA91ê¾3jšw Ð5]SN›ÁÚ¤­œ1Å, e"©ùUÝ‹Có(àœñÅ*“pŸ5õKÔä­íèÁÎ’Mõßþñ™ûq_éz}W\³|¹mDŠí‘ŽAÎB œ¼×¯øGÆ:Mωµ­oÇ2i2xwÆ1˜fÓ§Þ]U¢M3±$LÊv® -Æ:לxöKð_ƒ|S¤ÛéVÍ©k×ñÛY®˜ÎFã#)E70 œœqÒ½ËÃ>/ðΙá‹-?Æ ¥YÚAv¶vió»Èáz~ñÊ©93ÅuTÉßè|hEFRÔä¾!.¹ñCáµÞ¡¤G·CðõëÀˆrÊáÄaŸÿUÉÏçæ¯Œ¼wñþ/ÞÉxÒj1Ø$¬!ˆûì…+è;’OMµú+ðÛFðO†ì.­N±¾59…ôé¸@á£ÛB…V ŒŒ| ž‚¼ããOì‡ðãÄgJšm/AÓla–êî'D–ÚçP»e*Æéãeó£Vgsʳ°$ü ×Ð¥[Þ‹åg.7,uµ¾¾§Åºo‹‡nšþeâ>(L«·Ú- ¬qŒ|¬‘îbª7(Á>¤“šò/ÚãÁ7­‰5­~ ©ôÝ8XÚAöiŠŸu­®cq gnwÃÃwDÚϒ팟”â˜à™ ûD¸"ýÈpf%×åSƒ´N: ø:&«û(ø¥~ é:„ZÊ'ó®`V·ÔH±"mÄ3»¡=«ë?xWEðN›ý·dÐÝ.­kr[Ë›†Ž'ØSp1Œ/žpy§Ä½{ÃÞ&ßg é­Í…¼"îÀùQEo‰J©xѰ…·188LœW‡‡­,º¯´‹Öúúuc…ƒN[I—†¼ãÜYxÃÇšqÑô;»ç»ŽÞöáI”Ê“´D|‘/˜ÞwÛvà×Ò¿~&^øçáJë:ðÓíµ;˜¥Yc³F,-÷¶H\ €"7©`Aùåª|b×þ$Áuá gW¼¹Òü5¨Íqy¼ö³y@]‡<î ˜ÁÉÁÀÀ⾺ýîÂÚ>¥'‹ïmín´ëI ˆé' •V2+|ÊsŽ02HíÏ«˜N-º”—ºÕõ92ºòI¦Ò‹Z|‰¾'øŸCñ6©¯hÞ¿¿Ò¢¼Ò>Âú”æ%•˜8›…ÚÒÆ¿»Ý½É=<ç†þ 4^ýÞ¿k¬Álßhº¹šDºžö0@Èc´F‰€Y˜ü¿Â+ŸñŸÅíþ¼¹ñ*ÈŸc—eºÍ1h£eEŒ`€½óœ×Þ~ÔÚg‹µÝ6ÛÅI­¾“E%–— üŒÜeóЯA <â¸ð²•Y~ê/î4Ž>gmkÝ?Ð÷ÏŽúM†%ίâcÄ7>ðŒ‰ väFÖQ ®<µV&?1Ãe,ËÔ’F:ß…ž#е›¶OÄ«Cðö$=ÍáF·)»ÉH¢NŒùq€Ä‚ÄðMd}’OË©\·ü#sØG!kÍ+ûI¯ÿ´f‰Çö’¤ X‘yŒn\ç ç’øso«i>4о7X@³GªiW³q ÂŒ’;JßxH…$ìQ†x纟"‹rvkS¢†¤kÅ?‚÷ÿ؆óÀÿ >#xëÃz}…ü-áÍ4\ÞivúãÙ'ÛîöÙþiweÚ2±ÚÛ‡š°ä¢¾ øká¯ü6øxÖ^ ³Y´hî"‚Ý¢qE¿”ªYx1ª« 9c““_Ÿ¿iý;ãUå…ÿcTøâ- QÒ5KÝrÙ–[M M´¾†IÞ@3ƒ²6m¹5öÖãè4½jÏÃÚ-­Î§a¥”‰~ôhÌóo.òc€Ï–98PHÍo8ÊtR»^¿™îª4éÔr¦’—ùŒÑŸ\øŸã½Åú®ªÞðü:¾ŠðºL»É_.@Uò”yÜ0ؾÒ4/é)‹Ã70Ùͨ4ÑC}v«`¦5$¨C’óêk#ÄmôøµÍWQŽÊÔM$—wH7 ¤ÁÉØq‚Q@äŽkĵÍJý¼9nú¥æ¡>½g-׈6éâÊæXd–e†2¶¢ |×P®cRvž+šÓVhèt•6¥7k”¾!éÞ*Ó®5}DðŽ“â;»íHì–í'ñ­Ý%ä2»ùvñþò«$ªÍµ€?.[â¿„ÿ´§ŒõÛ{-zõÞ©G4‰;–ŠÞH”DCGüa tÎ óšýøGñ?ü#²Ó>.xkÅš.µ«Ý $M>K¯°ÛÛïŠ JáA 1+’ÃæïÅyrþÁß !𗆡º°—×–o¥Ôúeã+O.ö»”8*P…*§Ë$c&»pî4R×õæqbUhÍJ‹Vëkk÷çÀ*DúweºÕíü:&ºM^k˜Ì%P¬$mÇÊP›­‹_ƒ·š_Åo \ÚBšeí¥”¾L±ÚÁg‰‘æc†!Üä€[®7áÃ-Àþ‡¯¬­.$U”Z¼ÚŽ¥{äL£Ìo8yKÄ%KrÃW¯Ûüf‡Á·–Ú®™;Ù“w$Z£†¸°|®ùÌA~mÁ²¥A àd÷K TSO~‡Må4¯¡ó‡ìåðéüSð‡Y¶ñ&¿¬[jú¦»ªÛ!Õ´Ç‘í­£¸11Fl![…ŒJ̬¡¼Æ+ö øñHý¥µwN:†ŸâM5t-"ãM.ºlÖ¢)%Pw€|õß!e<Rv“^õ«ZÉã/†ú®‡á8.oíµ¤X®&¼Ö ÍæK:ï/†Î@,ÐU<-àÛO‹ºF£¡|PÓ#›F×-$P[õS-âýص]Á’â1ûÑ$|¡y­ã |MmÜä¬ÜÔ£NV—çú£æ¯ÙWUÒüQðîÇSø‹­Ø·ˆ§6Ÿk}{|¨ºX,!.ðäób¢FÈ«ë?„þ?ðÀ¹u?/þÐ×Jàê¾#}ú{܉-¡Œ,k„ A39éÍ~\~ÙÞÓ~|hÕ4/†ö÷—ÚOÃ¥M<ê±ZµÒ¢M w%ôèž\21–e PÉÅsÿ .<'âXHø­¬Üh>óÚúHã’$ÍïÑG3†V$*ü§h'ùrÂ,]>h·gÒÇ–³ p’N-Éyïødþ׿·Ö³ñïâ5‡†ÿgøVöH­`±ð½ä²™L²••$ŽðHs),RP2 1RÙé_dþÉ¿µ‡|áí/Äì®æÑNŸ­Û5¦ËèobÞKGNã›¶‘€Fž3ùùû ~ÈZºxsÄñKÿ Áuö»ÄY^N-Ê¡)ß›¤–ÀRFÒpF×ìñÆëàOíë¨øgÇ:¾§ø¶ñeñi'ØìVh"ãòØŸÜy¥¢ FˆLçŠæ«‡§éAkß©ÛßINQ³{iý\ý3Ö~Zéö÷ÚδÚÕ¦»>U”·Ó‹†Œ„´Û#ÐnÄŒ©Êàž†–›ñËQ{ÑoiciLˆ’ÈÐ}œßÞ.IžL‚REbF9Ú®R+Ûßéºêê:¾ˆ«}ý¹4¶¯¶êÚܱ°’BÌ3ÈÜyc’=™üaý¡ôËè4ø¼¢j ©A+^ið‹YäsæD|»œî,Üœäg5óŠu%$¢ž¾GoÕ!Ý«ðïá…—†•Îiþø¯ñÆ6ú‹íã–CÇi$æýÕ°U£!ˆ©ã‘òÖ¯RqöªÊßÌ\±2¥îS‹·¥ÏOø¯àIô«˜­õB÷7qKä)i•£…™€|ªr0y§jÉñ­CÁ³Asmuuy+Å5¾,ÝRâÔñ»$©6*9ÇÝã¾E-ö/ñüWgXø³ñÓV¼fX_O®#‰NB”ùÎês‘ïÞ·üið?Šõľ'ñ-ݽ¾—[ÛÛ5Ø·†âBÌŠ§“¼‚ÝÁ­©Ö­ZTÝ:‘q_©ÕöNîç9ðŸSÕ´/Ö¾$ñ6±©Moáx§…¥bS "Æ|•Ý,Pä0ƒsÜ4u_Šž+øƒ£]ÿkjZŒ¶ÐJò½Ê…¹Æ"`06ž3Ú»¯‡²|º5êEgâÛH^9D–¶¶F'ÂØH²1;‰bw `H=9gă–ÞœÃcu.·¨|èãH–Î$jT–wÎ ÏÊrk³÷j¢vWô:eVn*åcøaãkŸx1eŽûûI¯…»‹`‘Iv¬Rù˜d9'Œž1]w‰í×GÓ®aÔIÕ5AvÜDÀ(H8î8 Ž‚³­t›; -"K+i" ðïó7J¸óþƒsn8: ¯¯ëðjÓ»²,ÓK—ûà}ÀrNvœg¨ëZN7jËCK5nbÅÿ ]/Å3Aâ­_NÌ–ê×J¯"Jò"‘ÒB¨Pp6Ã*ø†ëXñl>ðóiÚÜSÛº],Ú„p— ŒùqÍ´4|ž=(7’ÄúY–[Æ·™Œ³K ‰FîLdŽ€ŒrxëUu[†YíRêâ1òNË•  €þ'§­L©ÞÜÆ5(B¶“‘¹¤k×vsÍ÷‘ió*¤¡ÈóJwŒMÃŒû×ñƒö…OXÄú¡¹·ŠìæÖ(#÷2g%C¡TœG¥kén×’Þ+Äkh`›kK4B£vIØNÒzàg<Õ¯ˆ_´x5=<1e¨Ý•F’öçQ–Þ0œJûÌU@ã<õ¬g†‹•äÎ'–¤íNE~Ý>ð]ÄOvuÆ£ fó-I’ €Ä|‡ŒrOã^ñÇkßxYüKà]&Qiî Ž#Ûž!‚J¤¥P=rxéÚ¼#J±V±Gecs=üCw–ˆ÷+µJ¨öä3KðËÆ÷7ž3}ÅÔî6¤w,á\`€¹Àò¹Æ ô©–„õåÔõ({L©âk[«+Ðaû-½²FÁ ­$¿yÜàäŒ Ž”G–>ëÐ…]9rÊ;×6î¼k{pf·Ó5kíWIÖ)î&‹|N¡~p„·œ‚99æ±õ(šçW¼xî.'[ç‹$á–] Œç¨xþ4—zu²Lëup—2«• Ë´9nþ‹ŒçŽù©om×û2M¥ ¾š@#‘pQ€zü߆;VñKVt;%©ÒÜø=ÃW¨Š{Õ>Ø-_)Œ«Â^™;FîØ÷­'»ðÿ„!kËÙãŽäsH DwÁ+Ç8SÀúV7ޝã½FÓJ°·Cþ“w8EÀ9=ø5Ój;t#(û»³ÛÞë:÷…íWR —ò[)¸òZa&1… 2W=3Œsž1YB…Ziûo‘¦µ)AJöþº’ÚÙéša‹IÞŒ„I$“ ö cž‡žj¦…«ÙjÖ—·óÂd^#¹1ù‹–#åaœm zöëZ×>¶†kËŸmÙ<@\íR†Bqã§Lwâ«x^ÎâÖ9âÔ!ÈÛI„§È§ê?1]2iÅÜëŽúüMssúT¶¿º’bùåBä ¸ún#êkÏìõŸìO˧™ÒÊÒÕáŽ*gî`žÙQŸþ°®×Dzý·FH-ÓB0Ö.Þ=ú†®:÷áúË«Üê!/ºðÃm‚wy8fÛÏ‚:çÜ×=J1ògg#~ñ¿ðçUŸKÕnÆ­"5®¨Ñ%¾WÙCsq“ÿÙj7‚þÚItæÑ†EûÄôÎ+€ñ=̶ڥ´zt1Ì4™’BNCa°ÃÛK:»gªeê÷qÍ›PCOfîáš{}ÛD„œd…$Ž¿Q]ª§î³ Ô÷ֿĒXªÉ1*€u P1ìzð}ªh-±­-½ë" RdV9Æ21Vôé×PÓƒÂêÎÊ{gñª’ÀÖ¡¦\\9f°À2¹õ®¸oc’¥Ôu5­lç–õ­wù6Öè0Xãv®J׿Ž]85‡îÙ?‹nÒìNRIàVyi4}xší°eE-Üg^ƒÞ¹ñ(|AÒ,RÞÚ{XmäóTIÉ sÎ 5Ï_UfiA7+£¦·ñØŽM‰ŒÑ’p3×!·5ÍøŽÿûjH¤µÏ9R¹Îzð§êMC&és×"8âˆ9`£íÚäg©­-kÄZ7ƒ4;'™ìãÖu su§ÛÝÉ囿W`‘£vl¡ã¶3\îTá£ÑT§Q†tÈ­t8…èýöìLGDs·é‚+—ø¿cý§q áœ\|С8EØ0Y}ùçê+Ð,VÙ&K¨ˆ{mKlàžV@äœqžk‚øé¢Ì~&ÚÛè>`Ò ±I7Ýþ“#1pa´'¹­¨·Ý™ÖViçƒ/ÖÒÚⳡR˜ê9Èü«tx…f´oí8UOÝMÝTƒéU|9cš<— ©3¡IÁb{g¹âµ¿²í¼EcsØÎÜmNªAõü*œ"ÞÃM¥¡ŸoªÉ¦ÿ¥ëíµ%]Šè3§Ú¶ôÿAp"žÙËÂ¥|Ü}ìc?¥s7è/Ym¦Øb´Û÷Çn=jï„­§˜2[@£¤Ž9€¬ëQŠÖÅÓ¨Ó7%³¹Õü3Ö·Z®§2›,«»åÇC€ ÇC‘Yž%×ÚÂÏ쓱û=¼jªå·JÀ'¯n~µÒOv—Ö0Çnêék&¬§OÐäíY>#ðÚj \Ïȱ®67N*!Ê´»¥>mYOš¾"xnõpÑI°Äà‹¸HÎ×õÆHϨ¹íÃSøKQ½a+ÎÚðÔô•a˜ÒGWˆ»ªòÅ£2!Œ`žs[v>#ºÓí¼ÉC½º6ÝØû§²æBòC¬iº”b_±Ú«›¸cIÐêºÕÅÄözžéã0ØÍp#Ùp$ùaXrÇï‘Ó¥xwí ñßÂüGcŠ©¤üV³°óEï†/§ŠÚÊt·ØšuãBUàšP@P@Þ§¶Ié]Úx§K{¿ éÚÄ÷*!µL±ÝéÑè† 8›sŠüÀžy­_èpCÚÜÅ‹[ˆü¥?óÈ´6{;õç5bÞù4?‡VíáÉo£ñ‡“M’öµ÷(rŠï†ÆãÁÈ#žEZWÖ$Ñ›“q“ºèr6Ú+ªh«¨5•„Þ¸¶kÛ¤›77E#?èÛÐ0URPîb ´âºÛÙµm>çþ¸íl-µù µÅÅÍàyçyä%§„—R¬pK¼b¹ýwÂÓk^“Q³ÒfŠ]zÔ_jðÃ|­~ov±dÀ8Ã9,9ÏjŠ_xb-oAÑ,F£¦\;ÅÕä“$^yɲM1$Ì#•nr^y¸ÎI\ê…éÝôê]ÓPðDñø³ìú¢ÎÆò;ll¿"#H¢ìRU[k%²sÍ\Ô4öÖíõ-FÃO·Õµ(®d–vX’%^ÌÝþ¬’>\ݼwª <©|"ÓΡ£x_N‹Zif…âÓ5»ŠÖ3*w–}›ƒòd<ª• È'¦ø «x³Yøqâ øz ÍSÃ6w¿h¼XXÉis|Ò<× æÌò–F\&NÐGaRŒdîäŒçOXE-Vï§ËðF<^)‚ÂÚÆ+5€M'ïU€£,#¶æ9ÎOJŸâe½ÏÃ9uÍnÁäÕ¯a³Ž+»¨áýì¸ ü\(b0I$ žj·‰|1¯ø7M²ÔüEýlºÓ‡‹pYà6ŽÄ¢Çå7'†ŒãÏé |Qã/A¥Ï¥[ …¹š[[¥x¦ûEĻдh[jŒ´E[“Ï9©TZiÇò5–&*<÷ÐÕ³]SY¹ÔÓÀ×X¤·³iéwvñ„ƒ#ª1Üß´*¸‹CmoH©5Œ7°[›VM­»º(ÇÔ–‹s˜ ðitH¯ ³x¼)§Ã~±/Ú5e—÷:k0+åÛB2Äñ•÷«ž%øC§k+á{YdÕ¤ºÔic‹ìï´Ù¬²ç q'9ÁÁÆÊj*ïBdÛRÖÝÿ«Iàû¿kðMáÍ> Z;&[-Fêgû<ˆcÀ1c†ËP >ù­kï Ûj>Ö^÷M½µÑX4-nMe$œÃsÈ(U•ЀH'ƒU´/¼yãM[HK;Ý­\9šíˉº’ í] \>r3Ž•{ÂÞ×<ñ6ÂòÛ]±Eµ½Ä-dšBÊ0 6ãå¢à°õÁ mÝħMGš÷ò¿ÜEkáKi-õ8-¬n¾ÕgwË\(’Ó1VUa’Ûþmë8ãÒ+é¾%¸•†›qwyk5Ù¸’bD/”€yªI%Y‡Ì1Œ÷ÆuüMã=ž:¼> û$ºÝˆHî.ã:LŸ&US9fÚØÜ8ï\&§¥êšNœÚ…Íö›qvÎfÔ%š?wä!1áÏÞùK(o#ƒNŸ5N5{ÉëêiØËq®.46–ÂÖýD <±€\yÐH¤óm§ƒ•ô4ÝjæKý \·Ò¼³c¦ÝF¬ÉhâÖÍ.H¸ mI6+6Šæ³ Ñí5”ØéÒGmcv®­÷—²3+I¡à¢Ú7u݃Œ ÷)‡Lÿ„]§ð¬E^[¸Uía-ºc—\IyDÃç¸Úã­Í)ZëAÓ2|¶¿™ÅøçL¹»Ö¢MDÅÇ8žiͨ·ÅUc`§¨u‡L´–ž¼MJ ày/VÞi#ßheîHÁ¬'Žõè6ôÍIÖüGomâwkÁpÏ-ÍÄMºV²1sÀÎWf”$‘š¤’~F<ñ¦½í_ïèžið·RÔï^ÑZUƒT¶ò'±J¦ÓåÈÇ$gGQQéÿ µ{È.u ô{ÿ+L2É,³Ÿ>þwߣ’d°ÇË€’M_Öoî4¿…:¦‰£Û4æ[¹5©ƒ/ÊŒUœ.Fc §ƒŒŒ{S¿´¡ÒV-bÆêùVêÝ¡†Õb –$…DXÎÁ¸rp»yjµœyc¡‚^ÎÝŸÍŽøÏ£ë­¢‹­>æ[Ä–_(¬²é¯*ƒ Š0¥òáÊêy5Ð|3ð¿Ã¿Š—Œ>'ñ¹íï‘ÁÊÇ}lˆ–Y“»w;“âµö‘žkU<5i<—GpËËËtwTónIŠÆÀžz×;âø‰0xVêh®õ}*çZ†[(~Ó<2¬Èƒt “´†fÜp Ó9¬}”Ökäi6ëÂÛ(öðdðÿìEàÞÁ«i^)ñ®pb•.u)0èP•^0FN9Ëkÿ±ÞŸm©êgB½Õ¡·‡xÄÂv‡†áÜ Ž'ïÍpÞø÷?ÓzºZÌtëE7PbÝ¥•Æ6¡8\ä±?]½Sãž§kâ›KRÔµ´¸-#WYL`à"RUU·pç•*®í7ë¹ÍNŒéI·R÷îeé_³×ˆü&,5mHu(m®Õçw‘¿yó”””åXá sÀ'{â­õ†‰¤CX´½ðäöò0ƒ6>e¥îìm;Ô…PFa÷XàƒßÑüñÂ]cáþ›«|Qѵ/&¬ªc¸ÑÒYbÉa÷ $Œ1ÆEvÚ7Œô?‰ú Ùý§MÕd‰¾ÉuÁ†BÙ$Kæ2ØÏ"£ÚTMs-*¤“sQæ]ÿàŸ-§l-í-§x.·È?hËqg‘&ðãæÁÈéŠÓð§‡4ßë¿ÙºííŒÉfÒØ;šñ·æEÉÁQÇÊHà½Åt>2Ðm~xCUÒìtMFê)u-ëwq>ûhãe £&Aܹܥ1’úùoŠß\ð߈5 Sâ”êFhtë2éfmñ2aÁËÆQ£®wã r+У'(èôüKj/V¬ÿ?Ïô4|Câ[o‡Z¬vš÷°-ôdGp[!Ð`0'¸ÃÓ¦} ,ž4»:jß\Îápc'Œ4“…;€瑞¼c5Õü´Ò¼Mk®éúäQ».ɬlîã—N˜oËê\‚xPOZÁø§¯hÖm4½rî+KÛâïm ¬»&TÜ]U‰Î@RBž£§J¸Tö–Û{~ ȱu8°Ñÿ³üYd°*C [•Ux,7ç¯#× b¢ðÄš  KÏYYÎòF¡¦NE’Ý-½£UÎrÃæ^F+; þÑv÷?ît¯Å âý^æÛN¼’BöÁmÊùÁʆ1„ 0÷‘ÍzÿŽü4šÏÃkWŠÛO[=F5¹"%–¶ÞK§ž£ çµc^PæösêUM6àõG”xïã¾…wã¸tŸ†w‘¥‡†õâÖnåY ‰H·*n'và®r¹Æk¡´ø¡¡Ùø«[Ñ4ŒOªé—°_ÚÁsSŠxöJ¯…Ø] rÛH8ÇâOÙgÃßu›ÂÚ¹’òÝc™lµI­cp.õUo-dÚó1¸€=Kkûø?i~$ð½÷ˆ4Í~ÔbeV›lª8Û$l̲F{‚¨­](mm?S ãy¥uò:x-µ/ør}&óIÕ<¬‰îf¸³ÔΟuiFçË1b È8$Sr½e‡‰-ô‡ZNˆ×Ú·…æ»’m&k•Y.ÙæØZÞhˈ‚—BCƒÁ+…Öþ¦• ÜxÄÚMaá«ÙîÓׄå–Kâ7n„1ÏÞ¬о×>#,«ð—WÓ´ã§“ªÇ=å®Ý¡¼Õ,Gˈ†Kr:æ•.£W–Ÿ×B«×Š´í¢=§àþ‘ðâìA¬|_Õî-o´ëy¢›J{Gó¾ó±ã–#¾R8ÚÉÉØ—ž7ðUÿ­­<'£^iâñ¦µ’)56™Áûþ[¦T€A>ÝESøQgá­/Áúu·Ä=fâ}bãOõ}BÖÕÒ95_.eµµÃ­ÙGwfËFkOã>—¥Å­ÜéßâÐ ´i¢6”Ãqj¢0Äd“(Ê@|YÔܦ¹eÍêûѨ¥RñO_=É6øÛö˜o*(µ½@id€%¬–h«$¸`»‘€}²Åu7Þ)ð6âmÅ>>Ô¥¾Õe“Oµ–Er1ò‘Õ.[OC_2øsàO¾/øfÔkútZ\ÈZ@î¡ÄûX`m^¤zdŠì¾þËZÒ|^‚ûâ¡¥èú®æžÞØYÉ-º‚ì"$|nÆî‡ßÕSåjS³]»˜á'ZÖœnÏ þ_xoþ©¼M®\Y[_ë„À·76Ëc³võ0áOÈ~nƒ'oZÛø§¦iŸu-2ãÅZý½¤Ó0‚;‰„s>ÓåÆUWïoÛ»ä\æ½ðÂÛá³φô9|Qâ(Y¢‡TÔ yÒ×xVùSd~OCòôê h_ühð‡aþÐñö‰`¾. Т¾œí³Áýãr0HÀÀÈêÇ(ªÖtïÛ¥þãÑ”ã(rÍ%n‡|Wý”õo|sÓ­´Ià³Ó|ØÞIFaRü¨f|/Do—$œö®'öºñyø¿á­ÂZη«|=•Bø‚å­¥·™škyežc5Ì·HÛ­ÛøÉNä(Ø mÝFªj×çæyRT¨¿s«<ÿàLjüE x»Gþ×Õîì-¼Çµû=´崷礀I$={WÞÿ³÷ƒ$ñ…奺\Ë{ei˜#¹Y¡q#Â{˜¢b^1Îcc†àéóŸV|;{ã4•­Þ£³‰4öß$®§ÊXå”|ÍÏõí_pþÌŸ |=ðOá•­ô}ý»|PjjVäÝIæÂŒM„¸’ ÎsÅF+NiÔ’IÄôr˜Î£÷–ˆèµËc§øSðÚkÖ6~%È’‰£ˆI}o´|‘dª~@Q…Áæ¾6ø™ûYÛËá¶–äÀÚ°!<¼š0N ªÙ õÏ¥w¿´O޵ŸëÓiWwÃ<SÆ8åöí¸,Qüœ ÏVÉ<×Ãßï|Ýz[XŠ[»Œ9q•fcó£“Ôû×Êáé¼Ëï=äçÙ»öžÂ“×fj|ñµß‰|{®O4Ï#9Bâ1ˆ“ð=x<Îkú|:—€õ˜tY¡¶¼¹ÓHºeTeić/üÏ*ï_+|øDÚ\Ú]”Mh“jï”Ê;tû¡ŠŽŸ(Ýï_a>•m¦xvÚÇÁJú=²G,V,&k™Å_>weÀ ‚ÃŒç¿Ôc°Ñª£²²=Œ—.•z*]â§ì«¦ê6×:§ÄkBÂÂÕHŠÖÐvÛÄŠãpŽ$q»žøè|û&èÖÊûJµ}aÖ .¬'¾˜^¯˜UDiò(E9ÝóB€OÊq]–¯ªÝx?Â0É ”·V·QÌg»ÖKfX”‰X1*7) N1€qÍkh:Å—Ä›+í?]`¶W–íðmRnI|ca‚:N+8ÇØÃÜÙ²ÊðÔ%û¥vŽGÄÞ+µÒ¼)¬ÛÉq°Ö¶‚Þ(ôèc-h†–p¡blœ)bd#-qÛü=Ô.u˜üGg¯±Ôôû'²šîIíÝTÏ4‘† dˆÑ©;q€|³á÷Áýgáˆ5OÛ_é—>°’k3Q‚3s­Go$êæÝ¼Æ)qf8ÕÔn`ê¸Ü3_DhŸôÍ. ý_ź|¶Úe¦Ö¹yn¦ŽñÝTîS ¼–Æ@T òŽõ¬£FíèÎßkÁÝéØâ¾|*ÓüðÉ›àG…!ðŽ…jͬ4+x‡—¬ÒmQµÈ,ªdrI'ŒU‹7‰4í>×ÃGìz^–ßdC\˃ÌÌâ0Í·9äœ8òýã·ˆüañšHt ø×Àþ ¼Y-¦WºW²½ ‚Ž7ÌŒ PÈcÓ}5»_ x>âßB-ç¼—ܪý¦– U°H`9ÆNwŒ/kíÓ¿Ì(òÎÎ Ýù™¥â²ê—Ú–­ ÜY+F²Cn¬¾J‘& ÛÉ7s’[ŠäÎ…·¨ÞÄ#¹’ù®2ñùNd$¥]:î,WŒ1[þ#ñ¥Ÿ‡¡‚( Ö©wk¾îçíâ†Ü‡N퉒ۈÆF Ísú°š}ÅôöW&=¦"y7<Óèòl‘‰(K(ù³“õü*oƒ_nü=á]oÄ7’³´—7’L«,««´*À 1Ï'“[_?e¿ éÆúW‡lWÄa9{h°×w9Ï,[ˆð­.ÒHPx5ÕxİMáéÃbÒâ}V&%ŒçÛB7…âÁ Ž€×Eái'Óïl$¶½µši`ÈVÀm±ÒcF}¬«·nòA$±Å:•%&çÕJ;%m#µÍŸ Á¦hÞ¹¹ñÞ š¦£)¼³²µ´Œ­ôŠ{î&còª“°Æ½k™ñ.‹&“&›s§Ï Íåî%ž8¤µ ¯Ë´ó‚ m=ÕÐxb Wñ«Úx²ÒêîS§,¯,¯ç%ÄŠå܇9 /Ê1Ùæ²|uñŸOÕ¯.bð¯…^â;E ͪ,ÒKȼÉ#…ã#äŒdñª¶¨¡Êîþâ”Ò’±Ná%[uŽÂHZ(7rº’Wsñò¯óלc½tñéð‰uYü5h[K*ím™H†AU9,Ç’rI“UüEq§YiSØXjÖ‰4Ñ´s]Yo•ÆÆlx9ä`ñ\ïŒ5Ù4-jÏSðŒ\\]ŠÖñ·[iÖl£~ý¼Ë!ejÿßC5©{xJ›Ù›ÎÒ‘“ñã÷ÅêkgðŸÂWðÆ‘ùÚ•üca@ù£Îp['Ӝքz¦½bڷĹ༾ÌBf\XIl¨c$¶G6|yÔ¬þ(†¿<sâëŸ Ø·ö¯ˆ^Qi§ÉxòþúÝe`L‚5MªªÜÌ20k³ÒmÆ›sž ’Ô¤´G¸\—û@eSŒìãNµ²»÷¬:qÕ¸¿Ëô9ígJ¸¼Ôä0—nÞT!¦,Tƒ‰7m\¶@êqÁÍ?û:ûÂoÕøŠæÊæR¥‰ ¶ëµ¤;G$”ŸrF; ê4õ¶ÕuH¯. ƒUƒN_9ìæ·W·’L²©(Ã9Ár8¨¾#jw:]ìúÿŒ.ô»D™&o2+{k\chPzü£h#$œž†ªSv²eÛÞ½ÿ¯ëÌå,µ95©®o,^Ál.[e£ÚË#=Ä„åT¨ŽsÉ­©"kW¼¼¹–×OÒ­R"%|ïr¥Ù‘-“ŒŒ \Õß^Yx»G†Ǧ½´’™,n£-2Ü¢’wp8Ôg½X}kÍr]<Át×2¬ƒk@A‘p\qµNÞvƒØšNi4ºš¸îsz¯Œ?²5gj¾d-oºdYq"ÊJ’AÃŒ1À#¯5gì-©ZYÚÁ¹˜¤È9T ‚Ø*Ò“K°šÊ-³YÁ¨iÖÒ e”$¬±¶Ù01œàŒ“MÐ4CÃúUÍÝ…ÝÌ6Qì‚i Ò«Éód 9,ì@áqÔzS“ެ"ù4=«ö~øM¦\xRmg]’âîK÷òa†9Lp[ãFØs¸àõè}8«0ü0ÐþxÇ[º‡O…§¼D/4ò\ç?ícœUÑ»Š“×±Ëõ‰Í©EkäYÔü6ás¨ÜØjZÅHD¸s‘O'8ûݳëCZYé>1 ¤G⑱9P¤//“Ô÷Çnœ×˜ÿÂ[âɵ›˜®¬-ïäºØ,c†ëv€0wåÈ=NÑ×Ôs^¥áE¸ðF±¥Á®Om¥§ÈòË.› IL:—<²©$ÃkyK–>ûÕô=%Š…8ÅU~óè-ý­ü~&Óî-îíßÈiZâÞk_ø5Á['Ïœî[\Í⛟#X(’(Ç–±à–ÏÝtó\·‰õ)mŽ¿w5ÝÜ×2 -´!¤‰€$÷¼HÉãñªþø±ã=ÞëÆIlÖ1B|Ÿ5_q‚<Ì|¤pØ=qÖ¼Ýd¹¢´ò9(ã£Q¥$—¢0lo\÷à]À}Ú麬úŠkÝPˆÞC.*žTƒ‘Œƒ]˜xóBýŽžwîêfÜx8Ãg<:DWqØÊ¨é%ÖMøù†€2SžœsÆj_ Õ¾)·‰ôñ¨êõÆŸ.ŽòM3H±Y;#”Ž.0^5b@ꢽ¿U¶:šC¶£!ÀÎ]‰äçÓU/ [[XÜÜÜZ€ÏpIÁbX•8žƒS„£{¤D•Iu·¡ÆhºÎöñ\LˆÑð#GÜÍþûgœz~µÒø;Kkç¸7H’8!€ OçÐãéYWò¾$Ü]YœÃ~wJ£…‚í`G'd{ÖµÞ‰wh +4䢾}FIõ­eIÚ$ÂQQNfíÅçös/!ó#)ÈÆî;b¼câ‘ðÇŒÅ߇•Or­*É›+„S×$óéšê-¼qye¥7Ÿp$¼…°é(Ú{ãÓƒŠâ5Ϧ«xÂö0ÞiT(:ïc¡Åk rŽèSjIêl5ìú•¸šʲ³ÄÃ~@!‡¡éõ«Z$Öš®½e®i–SêZyd³žæ%g· ÁòØò™üëœÑÅLJd‰uÂ]^l´8ù™ e>¤gñ­Ë;95&7i Èp@ßÐûZJ”*+بÕ{MÝ3Ô­uÅÔ-ŠHÁc0·•ÿ{  ôÅdø‚å¥Ñ°ó§†äFÛ³ó(äö8=?¯}4ö7:jhð³€ÅNå €yáºuÇáš—F¸ûuµÌ÷ KËpeÁ9ä ¨¥Jƒc«'4¹NNêcw$ë$~QYKÓ?/¦ßÔÕý/P¹ŠØ4gi‡«2àŸ­\¶ðúßxš'rÉŒ¡›i`‰žr=A§¬²ê³Új?d‘šY&…mÜüÐ>X;±– ´7¸éMÎ7šW‹[‰ï^.@Æ=ªIÁÇõý løq¥Ðcš×R‰¬&·£…£òÙCò êNsŸzÜø3¥Øë·Zæ—,%ï.ÚâB±Œíl33ü¸?7#mëÚ£ºðŒÑÁw.¡j‹s¦NÑÉ'œ^KŽBíUÉ ‚CqÁ®'QJ[S”ef­äs~"¿½Di|=k#yÎCù!Cî-ó>ÖÀ$gqç'µ©iq-æ—¶¢Ë3U’DÞà|DzGO´d1ØØíxÓåBÀãç2@ª>ðé›\I­îeµûf!Ä_?yó÷{ä¯=ûV±ŠJì9ä´cfÒí-l¼›'yX3`päV.™د¤Œí¹X}ÏAŠê5¿ Ï¡’ÒúÍ"34rY›iÁ)ŽÇ¨'‚+”PZx¶êÞêáö"'Íò¸%XŽ uö4 £;«Ü§.W¡ó/ü÷Rñ.ðÏÁ>%ðMö¥bºF­%•êÙÎc·ò&ˆ´sH£«,±¤jN@0Ç9ì1ûvj<[kàŸºšêÏcjª$ûÀɵb n ÉœC ר>ðý·ôSFñ0_Øj1´RC"† ¸•=+òöƒøy«~Ê´>¥£Æ.,[D½‡RÑ.÷|ÓZ’$†P{•ut õòÎxnt£F”Ó¤Ö½7Œ¯„©Éû›4~àü>ñ{kz)ÓndVš·¹ÖS̲® Y!ÓÙƒmÆÔÝU'–'¥[’ßJÓ¡x41­í o6;fµ(²-Ší'‡mˆÜöœQ*¯¦£¥ôüNMWÓþ)js$´v¥½ÅÁ/Vöé$‘Æ·É$…‹˜«*æ³üZ×3¶½Óu‹3>¹f’,7ÛG4²[±E+Ûc°ÞŽ£‚¤;èèÞ)okpéºÖ› måÈ/dBefi0ªÇ‡c´’ÙÃœÕø­OuãM'K‚ÞC¨ê*#{p|‹xÃK<ÀyQ@ÀDX“»¯Né6‚Um's¢ð÷Œ5 é-¯E¨N+ÝA&Šx…މ3¯Ù儯;]wœIH c‚9?xòO…ÿ|Má/ƒÚ~£¨ÚÝj–wšh¹™ W77 ÷dÈ Hó¾S•nA©N†%±º_ ,¦Â]9ä™Ïöh®ïâÜ7,²`œ`¯j´¶¡ü%2Ewªµî¿(ŽÊX’8­ôûKb»¢lî`^5Á‘‡,¤s.úÇúô&2”]Ô®ÿ¿c~m:×ᶯ·Œõ [뚬FK;&YE#åšO)FèdÕTäaG=k:×áµå߯NÂöÿT¸¼Ò´8î­t«iü¦Ôg΄Œ; ÈTýÒOjn£áM"Î_ ëµ+étÝNÊMR+[ rÖó®æŠ'™-00&ܶ-ÜàSÓ¬µŸx›GÖ¡Ñ͆¥m,ö s$d]„²®Æ$íóØù@‚ØïŽ7“öhÆdÔnŸwúŽ®ßx÷L¿ð¾§¥ëž Ö<3x×·Ù÷³A¨Ánƒo–ÓÂw\Fªù‡8Éûت:üàû c]¶ÕSF’üÿië£Y½Y/m ¨Û!v8öã í½q:^»«xƶö›{k¥Þ}ª’ÆkÆ…5 y! ¥ÙC‘”™ …§_ø¿W“Añ†5?xU4Ëí2¨®ôû•žxå+pÏoqËÈ^À O@¬%O›g©¥-*.gî¯[y÷^š>=Ò º¹ð·Âµæ¹÷–¬ìÆÛì±õÒ|¡šPÌ3†ƒ®î+¤Ñ¼yã/xKPðÿŠn´ßxÞÒ×ûBÍlmÄl_…X™ŽÇܽ1#Ò¹ïʳ[çâö Ntøì­íÒÆÜÆK•d2ðìdç%³ÜW¹j~Òõo\귷̾ Ò(®/$’[†ó¼µ`²‘ŽäP~ösJNñ´[š—»;oÿ½ãŸ‡:¬!¯­5¦ÐõnÊ(¯nâKiòÏÍù)vê¸êHä׉|C𔾠øCRñ°øm¦éWÚZ™´[F¹›hTr¨¹(¬T0Fî…†Gg©ø“W¸”èúÿ‰î¼3­ÙÝ,Å©7Ÿ4òË(á"X°$仓’9ÎiW-×ÄÉ,>'C8†ÚÊ{K;é-à†Ü©—,%*Iqæ¦`XtÇ5$àÝõ] ªäã›Ó}¬ÿ¯&t÷çÖbšÿ\¾ÐÔøcQ[M*W{Ëó¬b@2Rw,29$â¹Qq§j¾ŽÏÁ?jy|<î¶÷OGuk•9²¹aòÊC^l9]À.9®×ám‡†o< ¬Øë“xÅ2¤SÏç"Ë!\äF| J6˜¶zŒmF|Í¥}zÑQŠç[½5_—æC6ÇD´ŠKë« ÖÝ£¶6Ы<ÿ½ŠG.ÅwJÿ+“‚I7‹µ}+ 6Òê;‚±MareGr¹ÚÒoåÛ+¸y¹=3XúN§qsy5ìú~—in÷³ÝK= ¶òÑÙ„QóGŽ0œUû¯XxÂú›ˆî.5…¼qËj±Û|ÔgyØNÖ§'‘WÌígqÁ]{©_ð2/¹×|LŸÛº¬BI,Q¥œ»Ç$j ‡eÆU—#`9µŸáíJh|YŸnö¨l³¬I,["dsŽOÏŽ£nÜ(÷ÍOyáùµ›¿·øªX[PÕD·L^=ò&ÌãÍ\¼T&zí`y­T¬¹lC]MO붇u4 ãy:¤b]I-£Ú.AVWIæÃ(!Yr2r{—–֚w†t½_Æ\I¨BêVH,ŠZ”™`ˆ…–ù6†n8"°%Ô.­t©/bXãšóËšâÔ¤0:`2~ðÃÇL äàÒØk:¥ôßÜØ[Ï£ÎMÅ¢ßÌbYÌ$…$ÎWj‘¶1·æù»Ô¤ït>EËfÎÛDÔ¯lu‹fål—_ñËÏ;¼±ÊbIaW]È %AéÇ+ÅVš"êÚuÞ…§›¿H­£ÇqmpÐßÜÉ$ãt'Œ¨ò¨…TŒFqX—öQÙkshmŸ5…ÝÒ3]Izð¥ØmñŸ1"M„eyÛ“Ž¤Ø¶ñ×üJ­a§XØ®£­5ëHš“—"á*†RŽ»³¹¸Æ ÅrÛâÔÍÙ꣧áø:LÖ ñsZɧÉuª¤ÓÛ3Ëx» š I˰pÁ”±Á$Œ'r^ø»Y·œY階… ¸¸²KëBÒX…Q¢ßÆÄyGT ©n8žø•ãHµOQ¿Ô$¸ÔžXÒ/?ì«(êê¹\•xÜÍÊ€õ­Øé÷>4Óü-ñTÑü-=ÌRË=â˜îD2•fH‡(ņYO©i<)cð¯YGøiuq¨j¥¶ЉlâÑðˆRÛæïçH¨9bvã×ñûà4ŸÿiŸKñSµ´ðŸ„m%Õí¢Ó®c¸¸ÔnPem¸X¿¼¼•‘WŽ}gXñžc©A?†ô«8µ­ãds,¢7-’,fXÁî@eb qÓž[Å~'ÿ„ÃW‡Pñ–út×"Öì- ‘¦Ø®fx€Ú±¨l‚ |õ®¾^kÍitT„}›—ºÖ««ÿ#Ó>øƒLø?áø%øy6™5ƒî’fHãhîXä’]FC“œàõê*ïÄü/øµá݆{KK­uü—²Ýµ$œ‘˜d€®Äðr dk´¾Åï‡þÞ³ZÏÌ·vT¾F‘¼ÄB£i|9 œã' ­[OxgÁÞžÆÊå-õm6îKØÎ£8vhñµÕ]Õ±ÚÍæ6àc¥yªÔúßÓó:5ªR¦Ó]žþ¦ïü3uà-pI§ÚÜf9EŒ–q@Îmð›–IÆ›v€Äc‘ÍWñÆ…â†þ!ÓuéözUž±‹8.a™Ïf¢´û°¼žcÚpG Œ‘?tKÞ,ÒþÒ÷†5[hÄÍz×+¬Ú‰7µ¼Of¸ t {W¤Mãû¯…×[ø—F}KÃúœ1\ɦj“™.­Kƒå²³FvƒFî8jéVš[ÿ_3‘Íüµ÷·_–¿¡—6…m€´÷½¼ŠÿR½jÍlÆâ0P/Ú6!QüLÀ$`^k¤ü ѼK¡]ø£FE³³Ðµ,œ<›á¼pWýGB˜26þ]ÄFEC¢Ë6§âÛW×Úo‡îä™']:æ{;VV§”®Ž%(ä¶ :×añÄ «x7LÒôylŸ@»¶‚WC˧°«‘‡]Û@cÆp¤ò+N[µõî 2]4ëþG—ßøBK˜îßÃ3Í"Epñ#91³(<¿ÃAÁäµ±ðçE›þyeKd ä_K&æ¹18*쥜 î}ç‘’ƒ­]3XµðÖ·äiö6Öš#ÙI=ôßg¸½g 6HÎd`@`G÷vžµCÀ²Þêþ4º‹^—NK¸F‚Îh†î 7'?) ’#ž m*“”\j-?JNQv]L}\×4Ÿ ^êþ ¿°ÍÄRÇÄöñ°åHc"1ʈ±@Áw°<ã5ã>ý¨î<ây…„ZiÖ5+úÜ ös<ƒ.2AÚH Nkº¾ð^§icâ-cź­¿ö>­j·v:lq,Vöwª¥]Ú<ääG…Éo•˜œµ|Ù£~Ï7´­WÄz#j·vv—ÆÚ;¿(Á 8‘‚L¸â5“·&²ÂòÖ«)=­©ù~.­XÉ{5dvW¶¾§ðæMZMVúI¤¤pE,ÂU•™OÜÈùpIµÔ~ÆÖ:_ÆOˆsmâ}FêçQûWÚî-Õ­í‚ÆÛcRÝ%›ýý¤ô¬ûïÙ7H½ñHñÄ+½._¶ÎžF’ŒLv¨aÌQHÇ;üµTÌÃæ8ƒšö?„ž+³ð¶‹ªi¿ Fý­+¹8ò­\lß!‰Næ_˜ªŒýá®îTéEû4Ü»›åô›w®ïn…Úgál6xŽû@¿e‚óÏ[{_·ÜYÚiòÀY[åÞfvýá!X«=~ý¼üVÚÅ9ôµéÓ¬´ÛD¸†[)-ï$ 'HÖEV˜) |à6³1ÁùHyëz‹<¢øš÷Æ^"Ô5{Û{í)ôÛe ææ6O!¥y¤«áÔ|ŸuyÜkâ¿ø(uψ>'þÔõ« gYü4k=æiuT¹€4P´Ûe•äfk¹žð‘{ÔmåÁä¼,[pM¦ºÿOÌÏJœ¬ía¿ uïüŸCÓ¡‘î‡ØÕ¼‹s“;abÞ#*HîHõ¯¿¿f¿ëþ?øE¯ÿÂb¬>Á¸32,nÁ€r>_œ©Æ~Q–#ƒ_3ÿÁ:´½ã_ŵOYÞ6‘¡XÍl#@v Ý$Î#LaŒ°ç=>ÌñÞ¢þðÞ•ý•o XëIw…œj±CnxÒ ¨ËFZB%ñÆ+›6ýÝ7EÆò—n‡~]BXzM·£þ‘ñ‡í+«Ï©üJ„x—S•b’ê8.fˆ—‘¾Wv}ÄßuTñÔ׊x_ÀöŸ¾?5Ö¸æ;}2{”ŠVÜÓ\+Æ –Ú0¿¼œ`Ô×ן´?ì¡wâæ¸‹Ã—ÖÉmwqͼÌT3 …lÈU9 >Näó^sá€Ò|4ø;âOxÆO ìÌ<;¤Or× }2º» 1¦ä`.½x9¨ßÚ'Ì¿Sæc–Wž9ººÜê¾iV^ñ›]¥ìWÂçM¹[’WT!@þ-‡llFpHès^©>¯¨Ou =°vƒX‘,„¨FÛrÁäBp1ˆÛéŠÇý—4ß音ֻãqô»-BÞÉ.Ž¥3aÒìÌL*–À*JJZLa³ÅqºÇÄM_Ÿí/^™4ø ¦Þ7|Ù ü÷`ÙÏ\q_G6êÖt’·/sîppthóMŸ@ø âi¢Å€A¥:¤acu$m$ŒH9;Ö½¯ÂkOøÖÒXüý.êÙEÀû=Ó-×pËÔíË>ÕÝŽIÇ­qÿ |iuâI-õ)kq¶Y"(ðÌT«mSÆqœò^§·EyâC¯Ë¨^Ú4æóMò¦íýÝä«1 „ù‚6¶ 뎵’¤á;ËNæ¼é¾vµ45ˆ¿´E¦™¥_é7úüº+ê77N‹´!€‰gîòd ŠØtãŒÓø‰â[xÿgfÓü/âµ±ñ•ÝÕÌ’j Ë+¹Á!0KÜHq…Ïò@Uùyf/Æ&™sáÃmy:°k‰d…¤qg$…\åÏh$ž03Ò Ö#:·ˆ®Þé§Ý#dÛ F†P¢ãhÂŽ+Ne5½Ê^õº–t ê$¶½ºÓQZ;§Áv”G@0}¥›Ó‚XœàcœšçdÖåÖîieI]ÛdæFÒ@ Ž[œôäVœ’wÃv³\ý¦2e¶€Ú œ™H-÷[ 3ÐôÄ´ÒÞÊ#xên'@ò¢" 'çðOÞõ«²fšÈ§¦$/æÙÜyÓy¨v¡Ký Î1ßw:Vµ©ZDë$Ó”‚qyÃjG”Æا„=óEýÅǃîaQia¤éÑ­ÔðÆ7¸‘~@éÁiäeAè â Ón"Ò.#–íVšX9ù‚“ór29Ç\™-û’®Ö¤i´µÕ¤ÉÆ‘„ŽURÁä1`r§åÇLÎN1Ðx#Gµ†í~ÚÍotÖÍ’-…Ú»œ•ŒÄü(9aÊõõ«ià‹ÏøBÚûƾ%HÜÈm­ä]-£wÀË.âxéÀ©´ëB–Ò{iïìÚv…r×+!Û…U9Æ;û×$ê+>]Ìg^<­§¯Ìæõ­Vêæâ FîÇûJî;?=cT(„©1$l`*ä`äg9Í:ÂÐi~º’ "{¯%¢qzñ°¶‡Œ0v9 –ÂÎrk´¶h¢Õ.¡Ö.'ºŽÚY!Œ´%#P§€JŸ˜“žžµÇÝÉ?޼«¨õ{[(nÄkg¬ñÆø‚žqœuçê:¯–JÆt1j¤m%cÒæIâ󼽟fÜÌm±8$¨Ú9'zVªÚØÞµÃÜÊn& ×G‰b„œ²†oݳ01ÆO½tÉàË)4 š]ÕÈI$Þ²=ºbNIÀT\‘¸‘Œœä0í¾Çàïê>"ñË[GeH¶Ç¾y Ü"‰Á#cHá@PKsÓƒZ¹Å½Î¸baoB¿‡¼SŸ¨jw~ŠæÖæh9‘£ ¨ÍtÛ uŠ6µ‚ñËi7¹-ÕK‚ÃŒqžô‘xÊêeo4ßÝùw¦y“Å %v¢œc,Wr³| d`ÖÇÇYãø£iZ¯ÅKÝw^m}K_êï±`²¼Žˆ†UV(ü¤ÌÓ¸î9n;Lø‘§ßÙÄ·Ñ]hRNBééuŒ^†ç…ðUŽ9ÆsíÍkF¬1 𣶔ï¦ÞGOkpf…e‹M‚3—Šêb¤ümÛÏnÏ_J]#KŠãX‚]IWÈ Éå¦?yˆýºŸ­M6žöðæÜ´i$b_’:8ç;T:na’ÖKi%’4sžHÇô­¹z•»j'[áëVû¥§]ØeÞ5ºVeÿTØ$ƒžS`Çcƒ\^¯«k^$Õg›Â ¶ÖÎíl<‹æ0Æá-.qÊçåàóœVìÞ"hµ%º|ƒ"gÜÀc’xÁ銅ï,¦yfùNÕy7wÎ9íÏjÆt½¬e±Îð±¨ýíŽ_…6öÒÇý»{{ª\j$ZIrQ–fpÀü»A#vsŒ ×eiqg¯XYZjqG-¥ºyoᣠP¨ 1P1òýr+WKð«]Aö›ùRäŒ^ǯÿZ²ïô±bÙ]ÂÛ=¿:pŒTy6†œ‘\ºMìÖÖp¬¤å‚à>àüOJ¿sã‹M9`¹»h¥šù¼¿1ùºØ'åÈçÞ©"òVYI‚)¶ƒJÙ8ìHü+•@ŸÃÞ¿M?VžïP›Ì3»mÖL†)Øœ¶O©ö®dÍ{¿3ÈÆåõ+GMY[ö€øÌ|9ðìë6÷Û®m┋XA09Àï´‚3ï_8h¿¶Ä‹Ú{Xè¾»º°¿_³ý¦8v'”FCœÁ<ƒÜ×¼øÂÖ ÇŒî®ï%¶‹±!BŒmmƒßú×{à]žt½ÖÜÚÚYÆ!‚5ùÈÜÜzäí§t(Ǚɭ;x\šµ9©I«vÜó…ßlõíoè«d"„ÅkÆ•Ñwc<(9=kèo‚Ó46+¾#F,y$çÓ±®c@ÒóT·]U0]Üù<ÑÅ“÷ZOnFk³ø‘âÈþxsOÓ¼?Û$qÀ¥ãMÁ™¤Ï* éO[NXîÏ~¥9(òÁjÿ­NËJðN“¦Áiq}g¸Ó#·S›vnwìÙ9'Ú¹ÿø½@}E¸2]›‰IŽeÞ½s–àUDøÀ|M:k[ý–ýàIdØÇ|‘³ŽszvªSø~÷áoÅomsúMÆlѦ—(ÈÛñÉ1¶ïPO¨Íy‘¡)_Ú3—„æ›öÊïµÊPë~%ðŠ$_^ßAu§Iµí¤nƒ¨àAr2+Ït?\kšÂë¾&µŽÎæåå‘íÑÌ`69Ül›š­âOxçã—‹uÅñzoü!Z<W)g¥Þ\6¡ªLÌ«oö‹…(b@IÊKe€®?h‹MÃÞ%²Õü?qi¬èº+ë"•$¸²,ЪÛN¹Úò®ü§ ±¹ïWËç·G §{$­òû®]ý¦5 B]M¹ðÚÃ4’³Ç¹ˆW%U‹«q·qÇr¾õèÿµgÖü'–ŒÜ¬q2NU·Ç„ úJóŸþÔ5†þ¶Õ.þÍm¢,oªµ¦#7…j€ÐwᎵwöbñM҇5[;1'‘uyö«C3>Rý̯m¥›Æ»(>X_©mÚðHö]SRR®âT…=Èì3ïXšl)eâYÀ$‚¤¨Çϳ­5á©j¢ÄDSH®²¤§ËÜÆÿBOáÅXÔ,äò\œ‚ŒÀcø—¶kJ~ãÔžu-„Ö®…¦©4ˆÁÍÛ‡ àT–¾,óôf7«þUFßÏ?ÓšÃ×õF’úÚ4GÈfàcnA#ñÀuôùò °¸ùÁxÇFäsÓ½zqÓ—sI5gª0­~ÜxŠk‹û×bÒ‘´÷g} ýk”@{¯[]ÛCåçÜÉq[iÆG|ã>ƽNÖeoIc¤Å<Ë3—Äh Ãz“Ó#×¥E©xմ丰HàÝq%ÂÈŽq?)RÞÇ?ŽkXIK®§;½>‡â½> ÍÉ  y!Â>rÑŒúÕë׺}Ä+æÉ8ŽdH÷0vøþ,“©­ï[¦‰á²«ÊeÊ °÷ýEqqišÏ‡õmB[··°ÓBM} ´ÄÝMõVT‰g?>p= íYV÷bïc®„½ïwcÔu߈Si6¿j¶Ò¦J¸ÓÝ>×u*Æ#v û“Ën` RBðkŒÕG‹ ðÛY|'²ŽúóFž+6›S¸ŽäÀŒZdÉrªYÀ¶p§9Ä—w–ÐøÄz]Æá¤êO9»v¸‘ÓdŒ‡çpǺ¸Èé_|i ÆçM-YzøœSåW‚]¿àî`Y_¯„ü;9ñóJè‚ʶÐßc G9 çךä5èü5¦èò\x‹PÔm!ŠÓÌ´sšY\r!Èù½T¶ kÖ|YàBÚX´Ø’Y¶7œÂ2£Øž„W?}à)¬-m,¯]#hâ”mär3‚8çjêtÒWLå…W-Ö¦^ñ—NKÉð¿B×RMOì«x×zdÑ ØVF–V KFq‚z’x9®òiÊÝi È'“Ó<õ®[Þ!Ó5MwUÓtILóøe¡[ñ´:‰]–0AûÁ;nQÞº[»t¡+M5Õô¡d[xÙVƒ’ãp~î8etÁ>•ùGûn~Ã,µñýçÄøI4ïøŽÞmGW±ÓfYaðÞ£†;œ)!¾Í3¨ž2¡ˆ/(`¼ úþ½ñ«CÖ?gýcÁ¼C¤i×þÖ™´x/gÉ%“¢Èê€òÅ.<äØQBñŒef”Õhªðß©æäUkaç,¯m×ê}g­üÕ5¶¾Öí´ËÓ~#˜ÝXµÔ1Ï’hF_fRxÃ{æ¸ßèÏ‚./´‹Ù.õ;mzIdón"Ž¢rª­nŒ¬¡ Ò”œîädW­ø“âÏŒ|C¦ÏàåÒ Ò…ºj÷2;¾ °p€>\ü¡Ù9áH港xuþ jV·:Ìmx“ÝCä[ÌñAga´+¶[æ2†bḠ0pМêBÎMùIR1§+õê?öfÓlcŒÚ_ÜÉ{«Y¹+{-«[‹§ÉF!³Þs’áI­__llüâ?@·W·m‰Œq¤­€¿é ]§ q’1Г\E·‚áxn¡K+(4ë3x¢6}ÎÃæ`wm2I'ª¤Úˆ×´q«ë·c¦\L¢[‡H–3å„Welm8@%”Íi(BR×t:u¥éª}Èîo¬|G§xRÔu6Ô¬¬ Òõ»ä kk5Ì¥eˆC’&” m!ˆê þ¨¾7´¸²ð¼†é­îÝíÖ4|šAc,ž3Ž1Íqº~¯7ˆ5iä´†=AA=²\G4óó\΀ øÃ¬GÌ@^IÇu¨Ý_èÚn±w ¤ö"iþÓåZ€ „<…!׃óg9j—/>¦nñVŠZüÈ|3á$‡ÀÖ7¾Žûûu.!µÔŤ¢âI0Á™²ÛwªØÀûÍÞ¹ßj÷òk¶gW¿¾›MÔõá>Fyp˶%•F<·ûΤ’pA _ð¶õ<9à½cþ+ÝTÖ®îÚ4ˆ[æêPYæfBK†n[¾xÍt¾,šÃÁÞÔæ·’÷WW¹.°Ï24þRÅ³Î“å ¹} DA çæÏ5Öx›ÅÚ4ò[j—ot©ö†¼/wm1œÃlùŠü¤®5Ëè6úî‡bž&’ú í3P+5¸³‰á¹·”#Ʊ&JË€ÛˆÊ1=y®’‡Ñê~8¹ÔôïiKJžþ"G›lm²²|»Ú£ óN@ɨ|¯shÎT÷Z^f/ÄÝ3SñÅ*âMVêþÒþÉ´ûËùíÚ=>wÜùQ‘ÕÀUfÀÇ~ «šÃx´¿Šæ™i¡Ï¨é:;k‹µ* UA,RI…ÚÍÇÞÁùÏÞàŽµrµhºæÝNÅ4½nÎ1qh· £·–ž^Ðcb>`T“†<U¢³øÛRÓ.g½¶‚'·{‹|˜Y P²m!‰R1ÁÆ ÏÓ²VÌäßMоðÞmn–䋽ÍÌ÷vñ§Îð’ÌOšåw´8Ç¥Eñ@µð­œ–ºÁº¶¸™¥PYžr¡cQ½>U0HBMB5í-4+Û+ýZ°Ô4Ƴ´·&áv›ŠO$Ò;oºÊa›ˆ4+Íc16º™ºh¬/%Íì’1P†v 8$mÉn¹Í¦›¾£‚M¸µ·DC±‘–š½Þ¡k­Ar-î,-”΄ª¢G9Î׿<Çs¶;M7Bê#ïÙ•Óg?½bËœ·á«áŸx{D‘ì<+5‹âÝäŽQá”p|™Ï™¸õ'wQ[z&„·Ö7¢öî4KXšul…I¥ùTÇRoN´ù’~dòË{¶¶Rø£Qò"¸H/íVYH ‹c''1gõ^æ¡ñfŒþñÒů5ŒužËxí•üÙ {Z5|.Å=9ç&¦Ñ4¨e’@²]\<Ä+ÆO"œÄ}Þœ{ç4È,âšêÁu›ôæÈˆÂ€F.~èOÖ‡;½Ôve)/§Wi ¶Ó°¹šx!6äÀÌavŒðÀ :ŒŒv±¦jséš XGŒR$lÍ·ý"ÞR¹.¬GFAöÀ­#Ã?ÚÖn|O(ÌnÂ)b—b"“œäðNåìpkÄ@ÓÍÑÐ$Fº‘»•ùehä *z’§ƒÎk8Ôç•™N +ØÏ‹N·Õ¤²—‹oÚÑÚy$r‹…‘÷¹”cqÚ: â›wᕚÚêßɾk]Bì KÃs}/šÙùdP_jrFÃ…9ÆkBÿBW‚mCI¹_ÊHå†çW²HþiQ[øŒê–P@Æ u~:øÃg?Âm?GµÕ'ñd——OZÛPŠ6Ö`{;Ëm6ÂYg°]á¼ÏG vž gœÓn Ò5MX“àúÞÝ FÕä pеˬ¡DN„üùËeP}ã’3Óµ×f‰/´Ý3Ä_|DÑË©n•ì!Fhü‰‚»@ÌÜJ)$eÊcÀ>Nú=ÌšôV¾umFæVŒy‚ùÈŽÁK¹#Êrx$üÇoRqE)Åꌓ]?¯#{⇤é—6¡æØkw÷ñ[Ë©Gåzû«‡%€ÜŠ”~ñïUõOXÜøÚmJÖ<k,ú1_2Þð¹DŽÒE}¥£Ød'»PIÅbø×Ãý—PÕu-CKŠ?6-lì»ÌÆ‘Ø6ÒÄ(‘œ‘÷³Zÿôë CXÓ›âÖv³X‡ó–ÕãiÄ¿}•‰bÊ›ãþ\)Åhî–—•7f¯"ýßÃÔ¹ºž^G4Kj‘˜o‹ÛýªæBÙ¢Œ•1¨!‘¸,z‘XƒÃvw¾‹C¿˜xœËöYöè$ q#=½ÂÌJlxXòø ¿ZôɤÐ|?¯ÙGðúâóSÔe³I쮯gŠÝíÝ`Ò#cΔ퓸¸ó\6¹¯Øø‡Áº«ÌcKÏí¤–k¨3^*æGÌÑH‰]ƒsœeO-bÿ®æÍ¶­ÍeÐïµë_ôO ézµâhú‚Ø[]Om*Ì÷†"-ˆÊs Fã{F£ gÞëz_|sâ_jk?o‡O¸×4k¯6Î Ù”ÂÖuÁhã«ìô$’*}wí~ ð­­ß‰âo[ßéÒI§¼°}°A ‰¹„mʲ¬¹ÁS¼|ËšÊ𮋬é7Þ%¼ñU£j6*[«Ü^CöC)eg+±XÍd^8Q(ÅGšt8©¥$½£Jú^ûü÷ZùÚ¾‰we¬è°xÒì5íí“~m®Y¥$G$NÅI$© á8'“^IâoN~ÇõÝKBÔ-56·–ÂðâÖÊÔîÚdÚŒ²8ÀVÛƒÎ~·üMàH-5E‚]J; KûÉ!´áî É ›¦ µ× …ù”×Sá4ð쟶øáõ ßkvS]hpÛÁäEl± ¤©Tg÷ŒNUÁçµIF•½—Wýu;c/dÜ-¿õ<ãWÆ}Wड़6º·…ïu­Jî9T[ØN¯Ô‹¾[66¬Šr í ƒ’ÅuŸ²÷‡õü<7Þ&КÌêêÚ„ /–H¢y_Ì>TƒçuÀ$!ã½OörøUwãÌøç§hö¾ñF²8£½–iIóʰ|ò¸ ­“Á +š‹Æó|7Š=+Z{ }&²ˆãdiX¤u ˆØîÌj‡væ$àR©Z­EɇKÝz¾þ„ÐöUj¸Íû¾GÏÞ*Ò¦ø·ñiu}3_Óô½B.tS$þVÝ«º6f rÇ 9$±5§ñWZ¿ðïƒ4Í#ÁÒ­®™f -¼†ä™ñÆãëîkÕ¿f¿|M[«ÿ 뺃Ét–Ñ·™$è#8*Wo\8'ŠÑ¶øy¨xPÔ¦ñ'ŒŒ~ЭŤ᭒æé^ra «nl¾FHWqÉÅtA.HÁ;[£GåHÊêÍžOñ#â#ØÚCÿ }ÝÒÃ!Ë‹wi 'Ó,}ê·‚¾'\x3Ç6ßðŒiÖö¯ ¶ŠæîV_=ðÅrø8ÛµØ‘ÈØzc5­©èþñŠ4{­gYÔ´Í2òö HŠÚ%Ê^\4ËTòY‚*¹PwÕJ‚H­‰úÕÏ…¼EàOø†÷GŸÃzv«w‘ ÜiR]Eªê2­Ôcí0TåÕÁ‘“šíÂRp³•îút1ÃájR’œ·:Žtß„¾ðާñ2ö]oÄ÷7ÖGJÑmu$Áv’ºk©'Ï–ÜG å¡eÜ:•òOÛ›@Ó¾.ÍoâïƒZ~›§xRH%ºÝê .¯«ÞÈñE!’G÷TªåpˆP¸Í/ÚËöSñÏǯx›Ã6zn´u»tÍUŸìZo5íýÑÁ!$¡cŒ#ÈC]ôÿ î>ü0¶µ½Õ´‹¸Î¿_é¶,é8X "ŸsìþVp1Žy©«8S£©ûüÛtô;'YU“+Vó4ÿàzÔš[Å¡Çuso«êRÛæƱÒ·™ûã %TL pHúWÚ.tÿëqCâkM^ÊÓEÑáY'LÛA2™ Ìó1tW•Çȱï`¸'iæ¾vý•>øBÿV‹ÅÚ°¹ñ…´¶bk$P[° ¸Hƒ ì¡‹·8•⾉ø9ðêÛCð‰!ÑlãÔ¶ž+kÛíEõ:„Á’nò±–*:dzáÆ×U$ä㶯Ôõ)Ó•JQ„½K:Wƒ†©ã‡7ÖG¶:S‹Û°Ë'úLLäCn‹ò³o$–ÎÕÎr|Qÿ—ñF³q¦ø{Á~¾º¹Åú\éÖ·Q)k™d·˜È“ ,I—¸=þENõöŒ²hžø]áù|x¾³6—ŽÊ÷´S\D^ hšyò0A ã5óÿÇßé¿~"xW^ðÖ§¤ÛøkN•oõ¿ê;M>ÒHžW’/0naÜ8àäðÑ¥?o Â7Šwž¦õ\hS–¾óØùö¥ñƒé±Ÿ |(ºñ7ŽOü :Vµ· ƒÃò,žU¶óª‹­ÍÌ„ Ï¿îzŽxoÙÿö¾ðåçÄ?꺛ëÅ].É´œƒ­³‹odmŽŒœ’ÐÙ‡_š÷A«+K ²NGŒ\3ã÷9V³´g $qXÚ?ôÝ7VÒ­/ä¶³gHT[©Úq…Rp;ãëT<_ãKË}F8B±t)39tÁ'#ó_øñĶºÅ¼ú½®g+üéæ ß´à »Œm uÆS^?´•zœÏDyxŒ[sæ{v=_Æ?tÏ Ãr±Ý\¤Ð]O‚8Ñ…Àf˹r0©ýÕë·>Õ‰ðoö‰°ø•ªÁåå¼3Ϩù2¬Öòù&õæ@OÌ õ¯˜~ßü@ý¥<9¨Úè6š¦˜«jc–êc°­³e‰×8W‘ˆÏ$Œž¸õì·û-@³X˜ÀM缂FÏ nå¶ó“žÕ´a+)t;>µMAîb*¬nà4ÖáŽe9]¹ÈPpxëë]ƶš_‡þ&Gs£ÝØ]Ä-`–Æ 2Õš700•‘A$±~åÏJ̵ð#[hq·‹n¥¤û Pœy²9€E8ÎG&´4]4>¶ ¶ó¤¸Dk¼+¯È0†r@ãðŠs»Ž†UñtÚµ‹zÕçŠìžßÆ2¿•·#hPÑ:©P88ö¬Ÿ[ø¯Æ>/»¾Ñ- ·´Š(¢·º7$‚e¼¹ã‚„çÔñ]ÿƒ|$öɼ–ð¶!¸B7lU<++çž§½râg m>çV!¨I;\âÓáåÞ©¤ZOp°Üê%ì$–8_©,ÇlŽÙ#o¾}«~Ûáv™k§B±µÂ\DÛ|× 0S…Ær0úàÕïøz]1íÓL"Åî y$‚Y3*§PÊyQѳ“Æ}k+Ã:pxZÚöÄ›‡¸œÄꪆÚòcû  ÜrG5Š©¥Ó9~±.k6tö–Z†-,-a¼µµ¶‘ö/%n¯k;†sÉ–Ú§^yñsâì–¶^Õ~ èïâ+ «ÉRñçUµ…-Ú"Rxåqó‘Qp>ò±#8¯:ý´ÿj /Ã^,ð?ƒ¼1£ë¾.ûeòÉswaËäBÑK­£ãl“3(^X(RÃ9­/øòÏÄóørÂùïo5Si#› Ò[û!A£Æ¬WÌäðªOb*n­§~¥Sª§+Fjë¦üÏaðWÅK}+À7¶¾ð²Ùx“Äs}¦ÍµÚR6wo˜‘´àåGtb¼ößN-uÔ4òE!ƒíŒáä™ÓpfwbCŒoÝàÖεÇaewöV¶†âI „ýÀ¤.ã‚9çì+&ê i“ ‡͈žrHÂ3Ø‚H÷®¨ÒŒ[hôSmj´,j Ô|â ‰4=Y¦Ó®Qì§Håýð<°leA8®{çl.ä™Òx#Bvœ s××­!’9“|²ÌK¸«­nF@ížsÏ¥LèBvæØ¸kªZüiÐæøù¡O§|Fky"òR4ŠWòö,‡vøÕzœIèõ®cÀº=–•áËh”oáàmm­’v2E· —9É?62sÇ+ªyšhF⼄}¡Ÿ8Ç_n¸¬ÛèÚk\Íb>Ì„;=Ì¥³&Iù¸är>§*áI(Áh*îMjtöú‹²'åI ÷·8Áêqî?J­ut±k@Í÷Y÷Jëÿ- çƒïê:U &Á­cŽRvÛ±V”I)è¼ðzrsI>£k%…ó½ÄR]Ç#G%»9óShà ¹$€9Hl»®›šZ|2ܱUýÒHƒq v‚v’kNÉ!²\ͦOÝ‚ ¶Óê1ùV?…ü3&²|½:úΉù—Rù0±'ý^H9ozž+c§XDI+²Ç`4eN `>èÏLö¥e³gs¦¿‰m¼Ÿ>C„PPõÇ8æ ºÕ…µº±¶\ÿ«ÝÀnÄ¡â²N‘=©…¯Ü|ªeŒõö¤Õ®­’H’<–†1 å·œœ±'©$õtÀ¬¹l®Ëæ²VEÝNú}KLf†×‚$É9ÀÖ‰#p 2c€?Ä:ŽÆ¹ûë2½¼—7‚|;L%—ÌUç©'8Çc]·~÷ºÔ–M|ö{B$yŒ7ºA)¬vZO‰4©43?ên#¾-ÙÔŸ”‘·$ù€ô^üXø‡c§x¯Ä£ù·WRÈ·LB*‚ÄÀòè=€¯Êø+mÜÚ?ÅmHµ—ȺÓ,æ À>ß¼>[ûxãÔg½}9ñ›ã5·ÄÙÎÛ⇆5Ñ&‘sáë9ßK¹‰n[MÕƒÃk4 !#{,ìøFÕpzQ:~Ò1›]M°õâ¹£-×_SÝañˆ×ôËGÁ’4ÑÈáâÅÁ]¨[£Xðxã5ÌxÂÿõŸx¯T¶¼ñ[bòÎØÏ:: Ž8w1ŽíÕ]@Û‡å'Ÿ•ÿe¯ÚŠëÿuèþ/xÇÆ%½EÍ¥…µ´vË¢[@cˆËöˆ@W3«Æª’¯Ê¡œœ¥ð¹¾!jðø^]>ÿìº'‡ïb‡Ry’0C“òä?Þô꧇p÷ž‡M*Ôë5fÚíÿ?ÎÞ‡Ú߯âÑôKsz±½½ú0 X•eª®z0ýª§Â/ Û=ýýÜ-Á·iö­œìËY‘ë¿ëëIûJØÛx“áý»éÌb’ˆ¥Äg#+}ÑÓÈà w5£û8,ð§>ß§[-¹½¸¹š(ÁùH·p$äîÚ>õXT¤œ›3©'4…ñ–±†]V¦)$ÙrTâ?âÇ89ë]ÿ  ‹íCJêväIÀ òzŽÙ¯ñ-ýÅíô’ç¼Ê±$ £Ü?Öpp~¸­_x½ü:‘Yêras¶)–ŒY”g‚¹­t:q•¼ÎZuZø7;isøVH§DG:³Â듸¡ÿwƒô«>ø™¥x¢ùbñEÙ°ºŠ0­æ&cÛœä*Ø×¼Kmâ_Ä ¤·HÆ8Ç;6üÌGc‘éÓŠòÉü$4{‹™Á{é“í ۱ª°Ï¨Ã`ÄÕû¿vú›ÑÄ;^jèúMºÓSEÔ­ü=¨¬W„jÜ,aLc=@<€}sgBÔ<áMJKýJMd]]µäÒµ²@DŒˆ¬4ùQ@Œp:œ·V5äþ×õG{)%PIåŒãð¯MÑüf5™g³×õÛAö†£D oØX`’F:šÊ5J§3–ç]LK7­‘ÁxòæøßÁ÷wš¦«Ÿá»yÝmÑKI&rª¦HÆmŒÉ€r `q•®ø~ÚÎâÛYŠÙ¢icBÇÎÇÊê˵°x »¾¬_Ú«ÆËðàνâètÑ«MḌÑ鑸ùÝ-—$»ï`àsZV°E©x†=KÀ0\iK ÝlâöiYòc¶À¸g-žG8¢¼W+„6RÒs_èdYÿfxÓö[¼ðÃïÝxoDK›k‹<[¸ìÐ8 vXä;˜ª'˜=+Õ¼#ñ[N¼ð…¦£oåÛÇ{cöÈ`Î÷ (b‰¾À_½´ã5Áx]WN’º—ØŸí3j1ÍòyåÆP«~ôËlÀ¿`+Cá?‡@ðÝ…¾¹h·7‰'·xlv ©@0ƒòÖTäðéõ¹´¥N£W²þ»žÁ©jòÝi3ù³D|Ai&¥d–…ÙC!`yËFËŸpk…×­µOYÛÙxZy4‘t ¼Ô”½´yû§Rì8Üx\î#.ƒ¢=´L²ÊÐÏq1µÓç32¯Þcœä…ü3YWÚŽ£§Í©Ë ùVö·ß¿l à£N}r+HÍmÔÆU";ÞѾ¥ÅŸ†¾Ï¥éÏ)’`%Ë4ŒÀ3;72¹` bIcךݳÓõ‘¥i‘ǘSqS’y9ç÷Áø'_ƒ^×dõ+©ÖÅ£’+VTy¹/!ùNðKr£¾Æ½KñF—â-êy`™ºf)"p7Œ¸NsÀcÒ‰7¦ƒ„©ßsƒø‹­êZs@Þcq<÷6Á4·k+1,Í(+®Ä>~ƒá««Ï ¥î¦†80dº® Ÿb› Éã8V#ô b²£ñŽ¿£]_ÚC{yyk 6VÉåÆ×|+³ªT îGJí4/éï£ëpù‘A3<‰%UÙAÜ>e,»K{f¹*JIè·:)ÉTm6´…å¼·™í"†T¶E”®à£…GLxªþÒtË­r×P»ýÖ ÊaŽRw$`Ÿ¼¾¹Æ1ï\Cs}âˆá¸QG;Ëó±p#ú:7C^“à_=¼º¼2Ûy6ÛÂÁ4‘üÛT?ÃÁ9ô"•g8iÐÒ’¢Û¾å]cðÅwÍd±˜ä+q4, “‚Pü¨ÃŽ€ ã5­Zë7†ñô‰šXdTÛ Ü+-¨#ï0A†VnAíÍwzãiÖzcÙE} ÄÒ‚‹î+ê_Œ?Îk›¹™í£‰-nÄ&â]©'9+ÉV‘Ž@éÚ³JS]I|©Ù5ó8O èw‘¶£e«]­ÕÞ´7LÍd°[Ûª!TÒ8ù²XœÚ¾Gý©¿dO øöÌð§Ç]gÅW^‡Rñ‘Ô-­¬¦žIu„@#uxò!K„‰b‘HÙ÷‡CŸ³uêZEíµäk¢"90ðVp,›NG#8ã®+ý¯>ÚKàOŠtm+I²·Õ.í’æÐí1”»Ú[f r ØN0KzV”äÓwm# ô!'Å;k½™Ñxcã1ð´ºÖc’{ÝRH·ÚÏ(òm”ÿ,Æv°ÞX6{cÞ¼ÿGÑ`Ôn&¹ñ£qâ÷Òá……æ§q›—ƒ‡œG€1å§@YFrqÏÁÿ°ûøûYñ”rü9±½ñ’HòêñIµø…¤GWðî§â[Xü[}¥ K;vie™á.Q¢ U„ƒnð@%HäÖ7‰>l6Žúª]\è³½µùBFÖJÈ<• ò̤åX Wô²ëºO†¼9œiu©Ëk<ØçÉæ`¶ÞIØã`Ýœ½«ªµðö£øGQ˜Y_O©]O¶Ö²Ü0Y™˜€Ì®«ŽTõ­9•”L¢êsl¯òµŽvý4ßøÂÊMjêÖMBÄA+Y$J­o¨Ø.ÇùA@ÏZ¥u{k¨hßiÕ†™‚à–ÝKNP*¢‚¯r›1TsÂϨÝXøzK¨å‹N¸uŒ›«ˆ|É.ݤۀÎwm B®IÝŒ fŸ¥içû>Ò¯´E§ÂÓÀ°,aD¯%—` ¸åI• AQœÓnÚ²IrÛúòÐçôQþ›s¥ö¨¦*Û•s4’·•æDQFÐvˆØò㜌t.c¼Ó6krYØ iÚEŠéEÄ`¤+÷MÜD¬Å¶’ẫxGKšêÞ;?Y¨u{¼Éæ1VwàÁHnqߢ¹ŽÿXŠëûfÜ;ù®îáÔ¥ÕÆÕ¨P6îÛÁÛ׿5j¤#ws'6•½Hµ]ëÃrÜ­„3¦¨ÖÇt7·K(•–<‰‹¢}âÅŠàŒñÇ$“èF½k?ƒî¯âÓÚÚXíõ &µžöâA‰Œ‘…†rAóTO¡Omnºž¦ööÚÂ5Ô¶0ÄíB—VÉÉ=׃ֱïô´Akkqy<ꌀÍpæ2 o%dbÈöªó74·Û¡¿oâY¤¹·»Óî/çž9·_¹÷nX‘3Œ"±© ápiÚLjbÔõ½>M /¤ðõýÅ“^ÝM#$”±I$ó9H#rÆŸ)Pv\Sþ}ŸZð½æŸ|Ÿy ׊bw:„±1 <ò̫溎ø&«é+w¢ø^¥Žålõ<%µìD›X¦Mù8 l`Šžw>{f7½˜äÜ·4þ#xIð‹la·¸—^»óK¯²B† {u Ê¥Û&o›ÊýÚŸ•X¹®_ÚÄú›ë6š¾€5 ­GoÛU7Ël㉂ÈʼnL”@¥GÝ5×|<ðW…ügã»8¼k­ éRÌÂ[§¶ß!R›#X¤Ož4Hç#ºÚ—Pðï€tÛ/á6½c¯j:®Ÿi¤5Äš|q4Í »G/˜ƒæ˜)‘· ´œRI¯³uòÐç”å*žÎ)í»Nß}¬szU¼ÆM./*X`Xô¦iUfŽêfw%q¹Ø*) ‚1Üôª:®úþÏ„-|;‡ceör‚æ;{[ëÒ™@ª]£•[qSò¹šå¯5¹´ÍIç»Ù,ð϶+ûw`¤˜‘c‘á8Üüô#ï <ªA¢ÛÍsý—c!3yömº´0^+ÚÃÀüó9Ç{Q¾æ‘}‡§ü?ºÑ|K¢hz/Ä‹ÅÓ|!4‘Çpºlqº‰òábî–hÁej¨š'µËÝéâÖšêKˆ¥†óæ•°…ØPŒå·`2‘ÆO3§ÝZè^Э4ë}ÒÝB×i¦ÙÙÒ ~aw#’~õ#o÷K Œã¿ðÆ“¡IðºÿOÑmu ízmRBÿf’!d–é¶GQçsîQ åŽâÀxr„²ZªTRMݧ¥´²óÖßðNNM&ÈiÚMƃ§[ZÃ2Iþªí$0¹b˶æ%'?!ÏP;Vî¥i'‡´«»ä‚ê [ˆŒ1»#¹N<Ål¸à€xôë—m µž¥$V–iØæŸç%ÚÞ%b[prÄx¥:úf¹¾k}Q'¨ "£a· 0ç=ë’IÅûÇ|zIÞ µºñ ´+§Z¢ÂÒ@8hË¡v±%ÉÉÉ8ÇJÇñ[éÞÕ-`–Þ ÝÄ·­7ÈëÆK¡9‘ŒGjÒ½·¼Óï®"²eòÁ1 ab²ÈåNÖWÇ Î5•pš…¼>aûßj‘šr-b ]öð¬H'œîïŒÔÆK~¥8êïþD(ð„7ñ-ÅáäÛtûa „±Üa`ÿ1Æ6ç8ÚGZ<;á˯_Ê-•R%‰ƒH‘ýÂGÊÈÀ$ÇÝõ«þÓ®üA¤kl–’]fXÄòy¡Pq‚À˜=»Wgàÿ¶š±M|²LÇäTCû²ÁÉö>´ý³Z2}”vF÷ƒR˜Í­\F÷!v¹X’0P.Ð2íŽÃ=NMaÝhóèÍa8Ófû+5Ê+ H…Yp®:’võ®+ЯüWakâ)¬ïÄtPy®¥~ENpIσùU OUƒRé¢îdž9sÞ!P¹/òäŒg¨çÚœe8»±{%hìpúeü^ðý®«oa%ñÔ¢xKÝçU1»PïŒsœ·LƒT ¶–êâHmþÅ-Ô®†EyK¼J¶ÞT–Þ6‘1õ®®OXø–ïJ]¾Ï&¡n'Uf 0Æ6’Ib?Ô½m¡Úøb/2Ãx3<‡tŠŽv’‡û„©ç®rj¥UAhµ"4%{-ŒíçËÒe†îâEPK¾õ aÁç;²BãÉ'ŠÆšÖâ÷V¿ºñ*˜­¬¥´"á`¶˜HAm¹{Ië‚:t~/ñ†•ðÂÖâçÅ}†ÀÀ’ð¼òK6H#R}ÎašÇ³Ö¬|auc-ÕÕÜ2Le´Ë¹Ž2˜‰2¥‹`c“SÊîMhÍ%îÅù­½ê^ÛFÐÚÞOg¦ÜI% žâ7 ¹Ó9à»…Üäfº}'Ãz•·ˆ@ÑÕ­ýžß02,²,«†nJ†;Cp~¸¤øõàχ¾µÑað’k1êzœ­çAæ™·Æ¥™ß&7lÞÝÀÀ$pºf¡§Û ?µI¨A£ÝM­Äp°3Émœ’„Ú¼²ÿ ž¸Çl#dŸFy³”§¥gæz¶‡£_hÖÓé? 5ˈÓO¹2Ýiínßo³Þ¸•÷' 1R~è9bzW—xÛMÓ†¢tÈMõýä6ëɼJ.ÆÏ69£Ú2§j#Œ¡ëŒ×Zñãj¶ÚsB¯°¼&gŽ9ØãŽFy“äŒòGÞêÅ;áÞ‡máOC&“$Piú…ŒÁad7W; ÞŠŽ¤Ç9S‘0*|°Z¯ë¿õØ»â¯ ÙøëQ¶ñ?†e¼šY­µk[›‹CEŒýèòYœçtºzVN¿dš5ݽ¦³sg2Z¼óÜÝé×jßëqÁ ä+mñÜÒüAÙ«ÇzQO+LˆÂa˘³10çpvË€ Œ:Oáï ê>+¼·¸·X-#»€O<Ëå¢Äâ]ïUSôû¹È4ç4¬Û*0åÕ½Q…ÿµ4í_ÊÔÊ ùl–âuóí™X0]Š1`}OqÖÝ|5²Õ¼? õ¾á½BÆ {$vó¬¤ÌŒíçÌg #<¾6Þ –ça°“RÕ¯m–òv:`XNPvžLùA(;2Y¤=6ó™©ø&òïÃl¬o#ƒBºm¹g)e+†%g8Mûž70Ç=*#'RVoRæ¬Ó“: ê6Ójšn‰â‹çð™Ö‹+•¹ÉÓÑÃH˜aó2å¿‹äΜ ×Ôf·°ø½q£ßêºÖ‹uesnoV(бåC÷à‘€eS[§>Ÿ«Eñ'ÁÚl^ :o‡õ¨™í¤¶3ÈÊûv¼9ä ¹9ؘ®[SÒmü+ám1üA¢Þiºä)æ\_Ü\›¨Ý<½ˆÑ*åU‹¶_gÍœ1ç4F)¶µ¿nÆrrŠNKGÓõ*]N4=>{ý`¯.Y®ì­-mU¬Ò‚n™zRáw £åÉçšÐøgã)|7âë o^´Ñ¯t«4ºÒnôéœÇ< £@1µUl•ÀûÀˆuÏE h_Ù—vòÅ>‹¥¬W7› zŒ/'’K<$ǽpí¨'×+ójþKßèÃQ‚âò_9.BI<"2É Ä¿#œ#*1ˆ]½ê]>h^{³i>{ë¡ÛÉã™§“R¹ð ôæÆñá‡J…Ýf‚y6rÊF‘¹1Ó-žkçÏ ücÖ¼cñsÅZW?´üC¨x.vÒµýdépÛ[_·KníäH@y—"€ãåÏÌ3ëÿ~øR?øMÖêÿTŽÚЮ¥óºýšæ5ŒÇuhùe*ÄîêÀlÆJòï |IO‡f¹£ÜÛ|Eñ¡5ûjÖ·—öBòóQ2gmšH³åÐ`ÄðkiN^Ë÷QÕ÷Ù 3Sdûž%ÿ n/ƒÿ|*º—yâ¿]É šE”Šˆµæ%"¸µöHh“ÎØ¬ùüЦ´¾0üJÓ~"ÜêzêÉá¸/!ðåí®•åÏbÚÔfrÐ ¦a¸,3àùLNÞùËàÏ‹u.—§C©hÖ0ˆÿ´gûB:Ç qäÛÏ$˜y9(œ›s‡QŠr•ÚëÔü¶5­îßúõ<â.¥ã_êš½¨i¶&—‰¥¸Ó™pn$Ôõç‘nÍtñX R#w¾‘ðwÁ[»}[Dñ é÷Ók: ¯©Þê7É ªn§“Ì’[ˆØ+´À9@›†2FÐ:mxfûû{Åšåç€ôMcYÕ<-i–ƒ~¶K4+"²¡¡òÑWríû¼šô=Á¾"ý¨¼ce¡øËFñtˆo»»±Xí-å|Þ<¤dÀ‚’IÏjà–.N /wÏ[(5=îcë> Ô`ð¬ŸõÍGP±K¨e»Ð,JH·ÎŽÒ[Çrb#WbÛF995CãÀ¯ˆ_üaãˆZž¢ø7L³KëÈbÑd[ãk(Hd·÷“NëÂíA< TŸ~ëž ñtþø¥j’ÇfX[¡!§ºô&F#{Œäç°¨¿jßx÷àßìÅâ+¯ë–Ú|—:Ú_Aä—SËçȱ¸ ¼,-µŠƒ†ÉùAÍpÃí#ΞïK¤sS­ídÔ“²êt¿³7tOü3Ô5/ƒú¾¯¨ÚYÝO´6Z–¶Ðè×:c´“Z,ðL„Ž7;Í´€œŒq^?©ü.·Ó¾xáƒÞ}³G‹L¶OH×lc¾hçXa‚2€ïVXš7,r Ó úoü’ûÄ>ñïƒ|ðE†;Ä´†îÂúâmÒL#Ýo<Éœ"4d€xàJ¤zT_³?ÀÆðÃ4¿ñ„vz·‹¤µ¶ê|ÓH–Ø“rïùWg orkÑËj{<,Ÿ7ÚÑÕè,Ed¡Ò×#ý¥¾ë>4¿ð5Å–®tx4{kø'sV$x^_%U$4j‹Œä’1WDðýÅœ+oe<Š©j°‘BeT€>ó,NXó“ÈÇ¡|bœø°ÏâKyüë;c2´ó‹x]¦Ú‰g”ËK¼³‡ߚ༠}}ã_E…ìí×AÒ¢xõXLlyqA‚røåŸ#o™Åº”Úmo±è®Z~¥¿ \iSè0Zü2‚ÓJÑt9F¶Ö×J!\Ƭ"IȦBòà©9¦x3â'ü'°øºëB¹°Ô4}Z@Q²Le•mVWd=@qXÏ6õŸTÑSÃú¼6ÖÞ@0²_Ê@VhKܤl0~fF-Çðóœšë¾|%ð?ƒü7qo¥i–zÜfëĺ¥…ŒK¸‘ÄiöùñœnB>PX×Cš¦”ú´æÜYCA‡ûFHàóÌ"—óÌ3“Ó ˆ '¯×Û¼°mÄ—1ê6ó:Z\˜Ñ.Q­šx•T“$C f,0H8ã<>û\û6º·¾{‹se'Ü!–æMÀùìˆÆ` ÛÐ’*¦¯§ËZ^%ÝÈr“7430kœ¾#Ó½Wñ3Ùô%öFׄ~ Iñ6ÚôÉc‚êöüXÀ©kæƒû·’Id-…H‚ñ¸r@×âØ2Þÿâ$~-›ÅFìXk\M;D‰[y¶†ˆ ÄÂ<”¸Œu'Ѭïmôˆ§³Ô ¨R p"·¤Ic`Ìd'ïœîÚ8õÉŠêÖëJžÝVäß^®æÝþ¬8p;zö>µÎðª3犵ŽYabåw÷é£ið΢ž´û<—7sGF¡"ËJ%îy ’ ,ÇoJ˜$Z”z|Z^§çÝÝÎmïmc…³¦§–3Êp¹eÛû±—ÚÊ[ֆޙ~÷(°Žâ?³Éä %eH¤#hpüÛFHà’2*8í&¿†(OÚîY%x#ˆò…4ž»BžIàz×E.IJ×õ.¬¥N S[‹áoh¾Òú±œ^Ä<—(û0RB•# l‚zöô¬Ox‹@øs¤ê׺£H`·•ï$˜üÂËŒ!'¹çh÷>µ•ñâÂxÒÇGm f»²š$F¶|©Ž&ÿf"0 Ï5ä_ï¯|a¤ÝxElLÉpÉ$f9 H” Ÿ$ bœúÒœWsåçõêsYó|IûLÚø«V‚ËÃÖòÞÃk‚)mK˹™I.7¨?Ãï]_<-yðßáŠø§ÇW7pë7°²][#Cw£þ p@=O'<×'û%üÕþÍy}â‹è­^á•-™Ty–ñó÷OLü½¹ÉÖ|PøÕ¦é ŤkÇ–].€S+¶òH.½FBãÕˆÌT‚Äe°9Ç8¬_ O{q|²ß«G ÎAHÝc'å^sÓŽµO¾Šã^´‚ÒÖ{¹MÊ'Ù`¦žæ7p6D˜öK»1l`òEyã¯ÄMsÃÁüBžøiy0G Üß„?¼*† ¢2ÀòÅSšö­wÇÚÃöÿ^²_í}EaOš$23+J¤c’Äœô¯ý¨jÏx~ûíV¶Ö·W6ˆöR+dGµÎÔ*Gîßå$òr;tj5QE+ž• ÉTnß™§ð›ân‡ªXÝii­\¾›#Cö­J6Û7Ê7ˆdl—8'5è Î]fhµ¨šòhb{…µa‰ùyo“v%@ï_#|-Ю~&xN?ø“W¸Ò!óZó»‰Xž~@p Üc#9½¿àÖ‡¤|7ÖûÂV‚]Æ¥F©xíçÈOUT-…CþèÍ{u¨)ÁÆí3èã7V6KG×úÔèücñßQñƧmÿw‚õ$†2ír÷6 ¦Ã±ÀfV!œªãŽyúVΧÛë6öïs4–²/Ë$— Èù€Þãô«7ºÒêÞ&¼þÖ´r†äS± õbËÌ‚a#mp„®dÆCu¤…R¸xZñ¹• “¦Ö‡ÖÓ§õ˜s­Ú¹Øx·VüT“\™^ao“áAs’¤rFO\TÞ ð½Ÿˆ$h­ˆò­ãA626»ˆúôüéþ¶þÙûT·MŸk ‰ˆS… Ó,‹åz€I¯E%Â3ÀV"íµÀþ ñ_‡|+ jgÇ€0•x€£Éö³ƒ€‘ Èlã,Bƒž+Çl|s­xÛâ.²úV­áÝ ÃZ´âß²Z²¬È-ôø–á_pq3`uʱUŒóŽ=xé\²ëº‡„´»‹bÊÔYÝ]G µ¼¹@_cn'®w.lµÔÚjPÚ_ęј‚<ççÓ=(”\µ&-%bÍž‹g¨ÜE-‰ŠÅ ~[gÞÎIÞ;œŸÖµ-m´ùÿ´Ø¼8ù‘I“ô¬}Rˆo"äÆì?}µ†2+œøƒâÙdž¥¶!îË ….FŸá³È泋nVL|ªLÓøâT×|)&¨°Hês½Äw>énaÎØ^Oîp£ Àõ¯LÑüC;i"¤cq´b6;‹dçžHÍy×Ã/<~‹IgYnmì`µITa]•QØn_ʺ/_®•c3d´öª3 sæ¹Ú§½jà¤ìm ò#¬Òk wp4{l €„ƒÏ<Œð+¼Ó5 xlRkË{s©Z¢¡ºl¬3¹SwuÎO9Åe·‰á²Ò¤3Ä#—ËÞ˜ã, =Ísz޳y®i×wÐRwDJr±¹`vg¦âTc·Ì}j\›÷j"}’¥yBWGÏ>ý‘µO€¶Œ~ kë'„&ñ}æe¦ønöíòÊ UYÂ"ò)óvç¯PÆAã tµë[ï=Ê[_ió”»reWIQ°¼d«!l’HGq\–·}§|?ЖÓáô÷þ ºKE[‰–òCk«É -ô€,F5bÞO$€p*‚xºûM¾²Òõ‹+÷_.{™ï®‚’ÚmKÄäåÔ 9ç55©^ÒŽ¿3,75ܧ'ä¶²ó³ÔßÕ<iâß œ­õc’µÃÆá£+ž£'·_J’ØÚé“}äVææfu›3²¨P ðÔŽÜ×¢~Í ­~/ü/ÔuK_Óôy¡¸\Á<[¶²¶Õv<WP¸+Æ0kˤº¹‹U{ë[ÿ‰K˧Ç忚n%\d¬˜9R‡¨ë‘œb±œyRmhmGNµIF;Ç}ümc_ÃBÎM:W½‘î¤Ó5GIÝBlšÙ#g£€FvàÇ¡®i&¼Ñü=x^+K­^ÍHaùc3}÷G#r´xê2zÖî¯hÚT ö«˜×ÊviÁ8Ù˜+½GÊ@f`{|µNÛM·:­ÐÑ ¸·.]Ï“¿+·?òÐsŸL`sŽ"-FîÆ¶*ØÜ\Iw w†Õ$I +72©$‡¡H<ôÏZÆ»ðÕž“$—‚{È®®‡Ù^1 ²\D€º+—ê2Ä  ⵿°-b<Û ’âk– –‡{"ÅÀ%†sÃô4ë+øIôûÆZYão•Qw­²”*ËÉe¦pÆ­•YA-t!Ó®rÚ$zuà²[ˆZK–¡erɹ:®ÑÎäf·4OYê¼¶²Fšdrεº°ò˜ Êñ*ïi·ç$ä•à ¤ˆ\ø†;ˆ`´û=Ã]™d™Â®qêN>µˆú òè:ÉçO‚î78º­s îY#“’Û€îƒÍuF\é8îs΋j£º(ë è°jsê6×÷‘m}9Òc ’ˆ8ÊZ&ÈÈçï³­h£Âún—©ë -Ãæ) Õm×z]Ën¤:»;‘A0 >抚‡soá˜TH,´2Ù"IˆbCˆ‹1ÆHc“‚Äâ¬ø7I¹ñ׉gÓçÕàÒž–¸Ý¨«´SË+4~ZU'³fÆ3[ÊNZ¦s¥t£ÐÉñEµÖ£%ž·á-9­log[KYGÌŒ¨§«U{éZú¯•£è2ÜÚ?Ûn¼âÐI¨í0(±´.±c™ª('wÌy'3üOÓ5ñ¥œvñ¬:^œ&û:Ùíxv8vùU@ùFâ{’M3Oñ>^A£iSÅl%Ih_:gK2ýÙO™ó`ãžµ³‹N:–¡nn„x¾âúã]¸–ÃCž×A0[ÞÁpñæD 2*ž 6TŽäãÞk¾Ô|­“­œ—±¤pEkÙ¸j¯$`í,à‘Œ )çšÁðf–žðþ±¬êÒÛCÌqçÅ$NŒ¼“Ɇ`5ù[»|„3oá·Å=Z \êVÚºø{U{h-th®–q#Íçn φ?ºUÆzÒš¨•ô°®§+.ÿ‘«®^j§E½·¸»][OÑB«Ü@ò·¹ŠQ‚!UeÉ!€ã‘ÎV‡â«-jI#ÓãgšE™"hˆ*ì ’ÎX†1’ÓÁZÞ›¨"i ¬•™ Å´Œê’BÙËdÄçhþ á³IñëàåÿÄŸÝx~ÿPÔî4Ëì%å•­ÙxÚpX ɺôá©ÿáðö¨`Ñt˜]gÉ1ˆ,íŒGóŽÚÄX€Uq]Š1äI]¿ÀóiÆTäå*ŽWî’·É_ñ=Ã×rËá:M=ö[ jæ!¾Wæ+œ|ªs¸sÖ­iú[kvwr˶{h0°äç.7ž>c׿>ÕÆxŸZ¶¼±›MÔ§¹HÔ#Id€HÛÐÊ›À ‘ó(\lWAá¿Ŭٙ´ÈÉnDm/)qD±,Œ#H^»yjQå\èô)Uu+[ÑÒãK¶›Ä~]¤2'Û–Fq€…H%Žq´`‘žx®Xøf- ­_J°¹¾Qƒg’ 2’wuVÛ‘¸ñ‚kÐu«—ñ0> ðÃ,ˆ<ÞJ—H •Èc¹éßšåǃæñKx$¹ŽI­ÀM’n–'nÌôS:t©¤Ô^¡ZžšîröZÌ:¨ÒGHduf&؈#mÛD€ä¼óŽqž*/–{k«&M-›Ìg·…Ûž2NH޾ù®ïÇþÕ<œuÛ·Ót}!ɸŠh–;¨Fò6† n Sv89Àx’ÆÎ{yíõ[k£avâ ‚­†L àÁ€§ëéÍvÆWÖÇœãÍ­þãZíeðùH Þ%ݾ۴ŽiTIn/•ÆFíÈû³È@02I—KºQ}c`..§¹ÔJÉsÚbß0i~yU`¡±»?1œÖÜj¥×Ä»›ùoož!£m6ÕEHV9£8@T¯A‘Žç6×ÃøuñFöûÃ:]Ö¯u®Ãq5ΤñaµV¡+*H1µ$(ÀÃ0ÁëWÊú2,Úµ¿Ç5©¼i£ÉsªéÒZ^hëilŒñ¢O$ Ì ¬å²î~‘€C¦øJ÷áôR\Ùͧ0Õìî<‰´ëô¸¸ v£#" •˜`“œŽ:×=©›Ï\Eaj†ôÚÈ®]E­Ú,|LwHà3ᑃ>~ö#5­§é6óøŽçHñi¿‡SñL`é·~ê"€˜eèà|‘ì‘ Ë–à. ÓFù[&röI/ÁèÅ×øF=!äµ²içS$–òZÈp¤”À“%¹fmêyÜèE®ËâÏ]hš«Km®Ý^$Z¤Wžþ,DgcÊ.A<©SÎ+-­[áÕ÷‡.ü+áÝwC×¥Àû\ 6}®’J†O—æU 霮ØÁ5Ôkséú§†#¾ñÎo6«kkÑk<‘É– &Åm±*÷âÊÇ P­ ^ÿæDoVZk}¿àœ¾ŒÃÍ;F’æ×Sˆï®îÆøÖÙ¤æ8 µ\³;’ã<6u‰ïâk8tU6¶5dÔ4æòÃZlŽ2ŒØp ‘_¼ÌWäó? åÕþ&k:V…®ï-Žª‘À­:ê .¹„‘(†U‹89ÚF«xËSÐüOñ4ÞéZ›isÛñK½®åÓgRcFò°§å}«ÎXƒ×‹å‡´ºÕõbŒ§Êã.‹MáÝKÅÞ´‹Äzl–’5ä© ÜÈ’Äî1Ê$„>@ÀÉ´ÖÖÎî 6o*ÖØù1Iä)”ñq*(pÙFÏ,I +¾ø±sq­Ï‡îu9­‡íaÒ– Iáh¯dÚÆYdef;ÆèÙyãyÉ'§/£øZÝ'XÔ£SÓ¬ï­Ì3jL.‰ŽIL`ÙB7÷zp–¥åo!J«Q÷^¬å5ß jþÔ5 Å3^é_cŽÞB—_ëe–DópÊÄ…‘Æ%‡Q[¦ëšÀÓÛÃi«Zk¶¿j½U™¯|𸂒<©w³aW!”0*5ˆ>!x»â_Æ‹ânž×70Ϧê×wÐA5„ûsŠEfWfÉùLkÆÜ’ Áå_ ðÿT҉͆¦ºôKr¶±Ï<N6ˆšEiäVNH›‚y*¥(¯‰Ý®Ú"ã6Ôa=]ºmýzŸ"ü>ðìž Ñ%ӛĚ^‹b.­¢k‹T‹U»ÊíynfP§y.8|²Øê{—€ô_‡_ŸO¾ñOÚõ+‹…«%Ï–ŸhUXÐ ¸ Í—`ÌKuÝxÃá%ŸÂOƒöÚ]ã¬ô¦[©’YrNù…s’YŽ$×Ïþ+øQ¨èZu®½ãeºŽÊöe–Ò¢i¤›ÀAÚÙì{šÛë*´¹^Ýï¹ùyÖNT®«>þÑž ºÖu[$¹Òt;»µòlm,íY®UÙˆË1P`ާ¹¯«<cuyá#‹´ûme1µÚ¶äYÔ(V8É¥|oÿÿý˜.t?Ç6ÑE•½øu…oY”d0Û®w`ëÅ}uâ_G¥ÝØA¬Ëem&¢ ùS+Œk€[bà7™Ž9k£B…;BŸÄÖ¾¾Gµ‡çqJKS”ñGÆSðûÄwÓ|BÐ!Ðü?j4:­ÃG=Åæßà‚ Ç’¶OÝIëŠÄý¦¾h_¿e‹–ÑtËM?[[X¤Ú‘0˜-Ìžd{Ød„R7žxž+Ö¯¼-§|F×ìf½¿Ò/´HÄ’Ù8®ÄònÈ˸ùž3Ò¼öÅñ爼_â 3Fø }« vÒâ{ ?IŽÞP–¤~ô´²±3Æå8*T¸Ž+È•%R<Ž6•÷Ø'ðµ©à?°çŠå‹öœ×¼:º®›«Ãi¨­¼ÚbýžF8Ws´%Á1ÃÌÀöÎ Èë¿ÿn-3á—ÇKí;Ä!.l‰-î¡lñγÍ*,QC´€›‹7.ål€µËþÄ 4?†üSâ/ ùRéjë§CòEżvñ·™ ÜBJ*ùÈQ‚à¾µÊøƒáM—ÅÍO^›T²½›Rñ wvWš‹~îáRê/&Qm8Ê¡(ÉÓ¨®šÒ„±RWQZúž­N"£¹Ðßj3|XŠïÎ4äµW·ðØ„›¢‚M¯ó<˜drÀx¹¨x¢ÒÎøÆ×;´Ák<¥$1® ¡é´–Bǹ£k‹)õ{m/NÚÛh0 H©–i<¨ÐºÅÄR¥9Þç ‚ þðÿü%~"…üCô²F°¤›´ DyQònBädîÚ œVóºùU‘×N1¤›Ý˜?¤}cH½¾Ðn˘ü½>inÌY Ö4vÛ†ÆeIÀb8Èú=ÿ…¿f½Á·Zåçö½¤n.õ]0¹ÕZE“yt ÄÈIî…#Ñj#Ðt-!-­mõ W]†à-Í¥¾ž÷ÌžpVl„?êŽIÁêN{W[áß Ãe®Ç«x†Ö3 ¬E­ºÄï,­ÈSý¹f ($ŽzÓ¤£¸”ãÌßNÂ~Ï Úÿáÿ‡õO²­üf[©.¦DIõWŒ2@’dQ{2~îxZ _†÷¿t=[W»¹}{YÔâU”_°ºžþMÊAùÇ–¥y …Û–ÀÜÅ}kãëkÍ5|­<£‰–Þ £r0Î@ÎHã§=qÍTñ_Š%:͵¶£–evÚ‹H{¨Ùˆ%¥9$GBG^sœ”Üîô]Ž˜FM«Èà|™î¼Kn—}Ž'Ä’Dmüé%NŸ4ŠÆÉàdàÞ·tUÒ·O‰&¹‹NÓ ÜbÆ<Ïtä•‚«“´—l¸ã'Î]ëòx«]»ˆÅ¡Hˆ-î*êQ‘$’å³ó7™µHd÷OQø”ÚbÁÐ U¯ËupIŠÖÕ77W~ÔãŽ8'©;¥Ý‰Æú"ŽãQÓ“ÏŠÚŽgžSóÜ*¨§N}IãÑÚtð,—20Þ¾nÔ_Ý<('ÐãêOLó]/…ì—ÄzÛ}ŸT¶ðö†d7FæöA,–öéàL#6@³p1Œ×)ý©º[›k:á]þF‘CÀ$ã±'ÒªVµ˜“»²9¿ˆ~ÖüU¯Ä¿ð‘4:|°°k;HÀž À©Ë6Bqžv’21Zþðþ«£iñøcN²²Ó´k†Ù5è½ógÕ##*“ÊÃ(‰·%2C—Á>›kð¶ÛY¾¼±—×Úk,‘ ÝNIR8J˜òaƒ4°IP0 ëžÝ{ÃZˆu’É%¶û: Ç"m\ª&Ü“Àô&¹#%OÝ[3–u¾eú˜×–º–ƒ¤Í£ê*¯=ÂBÊá†Â¸÷{FÑœ¶p+2êÂÆþÝtïAq=ÕíÔfgc€TP79%†yÇ|t®ßPðŽ— ©»U†ÈÛ‘À‰™ˆ²ƒœœ€qŒ× ¨Omá½Nþá"·Ä,mõ ‰v½¬«÷›h%GO^ š›ó;©ÉNÏô.G§­Í爗U†kh<0Ï-ÂcÌû ÀŒ¶9voíŸJòßëÞ'¹²Ô'ø#áEñöÿÚZ·ŒüVÛ´½4-óÅmZiÑ@å&\mfåkØçÔ-.<y%¼wÒÚ_^ ÛÕòŒP2$l³°€8ÆXæ4yÒòÇQÓµ·¹‚ÚHÚYaÀvyb8Ìm….œÁÁÇÏ*)Í˯c9`)9¹Úï¹ó߃¿dÝ(üN>!øÕ­x·Ç~2×W“]ëb +*˜|ËX”¦B•ã À5î9¼Ô~'½¾“u{ªÆâæ3i¤éä$Ò¨"mRÌ\àd“ŽÚ:všaÖìÄ—*Övg$]ίuþòä©9gnIÿl÷«µñð“SÄ~¿¹œ¶ç76ÖrKtɵ™Ë3¾é Ç­uÊÍE=;*1‚Vûÿ¯øc­ðÿÁgðg‡ZoêVðN“aFD ·?» >m‡ ƒËŠä~¶]:•yi¯»õö8ø•/Ä/ kp^ڵ췦æÜ ­ Ÿ¦9À=¸µêzÿÄÕð/‚õ«mGì‘Gic#[:Ç»d¸>Qßvç·zÐðìoà…÷ͪèRßxlGaqÓ}²[‘pvîPb•ö¼¬À ?/_A\GÄo‡¿ð´¾5·‡îŽŸwwrðÎÑ»3ÂÊ£aÓ‚Xäð6žOiÅÒSnT×c®ž]^šJQ9ŸxöÏÂ^¶¶ø¡©]ê̶QݳZY¾76IYvAÇDÀ>˜Wž|Uðö»ûGü@°¸¾ž{ I­&ò9Ì_ºYYøV)È<ðØí^«kð¢âçÀ×Z~¹ª\ÝͨXCes*ºÌÉåH ŽÂ02rÇ9&½ÂÑþø>êÚò#$ãÁŒ¢(äÆã)Ú -´žGsŠ~Æ0´Ú¼“;¨àgï#‘м’"©{8ÒÎl­å]ÅŠ®v†qf#©éž0+ZÛÌ»ˆ4ñ*\2ïÀ!Ê·ažß¥V‚ö+yPËŸ{ä•ÈÜg¡ÇnÇŠÓÑüÒÇû9ÊÏs”(T¸ãwýõôâºâÚÕž¼tØ›M±¹[»w† ~Ôy•ŠÜ0AëÛŸÒ³îc °ý¡CÇFŒøQÛ‚z=zVå”·z¦›cíÜFO”»ª–)»Ýä©ç¡©¾ø£¾V—w§5ƒÍAÛ$’9V`£#†éŽ£ëNÓtß"ÝÞåreRÄã;»ýE>žt©^Q.Øå™¹ äúq]*ÍèhÙ¹¦Ú[ȲˬJŒwp¨2Xç­Oyc¦j1$6–÷w¨7ÑÆs‰GÊ¢@OÈ9#בTtm6ÛtK©Í¬Ê’L“4Ä ÁrŠFÖãpôùºdu¬Æ¾’dÛm=ÉûU¸GaòÇ%N=¹úT8ö)ÚûVŸum©-¶¨’ÉxîDaD”¡ô¶çÔf£ºÓ`Ko6à˜å¬a¾g8·oz±Ábñ†ÜIÌO$…ñàV¶Š±Á&íU ¹R2RGeê;YÉr­ VÚÆdZ¹Ô¤k¯6ÙìqyÊú¯9Ïn´-µ ͦ©…±´nã5rk1.¡;Û¤1"Ê…þ`=>¼þ85Vôý’ÿËe·-lÍ…Êî#¤x#ñÍ\u[©uuÝ3C›N¾D¸µ‘T²€öê¬\ùMü%³Éäð1Z¿4ñ×GÕ®b¸Ž[Ørèƒ{Êù¸㜯_£˰¼’M%£™¥’G`P+1Ó§Lé[LÚ.©gö«;ˆ®tèD¡dlˆä,T€½ƒ)lõÆj*R»ækc C惂8+2ü9ƒŠ&’2É9-Ù=ÃíŠÕðdV±XÅy.–/t_`ýÝÒ#¬€¸¨ç"¬xþÚÍüAqw§Ï%ô¾kDÑåHJ…­Ëäb[ÚÛÇ¡^Er“y—R¼Ð§)¸gŒtÇ#JÞÐõK{¸E¾™È£Œ+Üðq×ëúÖ‹õ—´Idº5æQ|“ò‘ŽÕ£ðíßÛÀО[;•–ÚHþï'Ƴ·:r:irÓ—+üž?à´:Åû*èúŽ ¡®4ÏYíVŒœKñ:¹é÷ãÔ+çOŽÿ øÝû|ŸVœßø³Á:¯†/®¤“|ïeÆÖæCêè6ãÞ6Í}kÿÛ¬~Á7RX¼E¤L©p'ÛÁúß…~`øJí­ -tI˜.wç-Œç¸éšèÁÅÎŒ“îqãêûBOf´.j[ïnÛû+i`ù%¾èíz ÷ØJðÌ´Nˆþ1²½¿Õ®e…4XíÈ ï3¤WBTОr bþÆ¿³ºüyÒ> ÞêpØÚøZÚÏS½–VÛ$V~mÀ”Æ„4°Ž1þÀZú£ödýžü=ðÇãŽâz»µÓ£Ytˆ€Wk+áŽå@.0ØèØ=::ؘн9uFÙn[SV5ZÓÏoÌû;áÞ§§YêV:.“£Zi…©´Õ¥ƒqmV~™óß¼ vç¼çƺ_ü#Þ=McÃ6è/|ãí¼m˜®¡ Ÿ9†>úà{瞀֗Ârâçâ׉fñèö·–,ŒÖëròêmœ§˜ݪ2„ÚªXŒrGA×ü}ÓãÐe7únؾÈvl`•Ü m‚üûs^E7Nòê}joýÅ·©Ëê=“âWÕ_Éö˜£C.o  ‘e;Ã`g*X†$ñ€1\N—ã›Ëe°·»™.-£.’´ß,ÒÈOÜ0޼çÒ¢¶¼‹áæŸcv^K{V¹“uä ‡€;`(ÏÁþ5ÒÁðþ×Uñ,7úÄQß=ÌM,r[F«Üy_˜©ùŒÜz>Ez4ùðš(ݵéÇÔ–‡5‚øÅP]^G³·-'—9ù¥l£ )'¿Ò¾…ðõ±º³Ò,¢ˆ$¯¦[Nݸ ¤éÛ‘Ó\׊þiž ñF›y©Ë5Äzœª¶¡"qŸ˜À\þžµè:Œ°$úuÊä8Œ¡QÀEퟡíïZÕ¨¦”Žl5'Jlã|JÚ…uŸ7AÝgy‘ûwÊ–\ž¸8ük»ÐäF±“H-}•Õ†²ò¦çD›hûKmÊQ³.ÐìÀwž?ñ…•Õב=«í*~á¬o†wËâ ŸYøRòÊužÕ4ÝZ6ýä¦iUnË6Ò}éTQ”yº”¥8èö:=Ž¡u¡øŽè»I¥À°ÁÅŒvrÉ Cùw™˜“^¨j :Å4O4‚«?,DŸNçÐû×§˜¯¥1øzâ6p`Á„Ž& œpXªõ8÷©.µC§Ü¤Òª†¸$*; ÊóëÉ÷çéXÁ]ݱN¯+²ÐÞÕÖ+ïZÍ!Š>ØËä9R1ê惘õN«¨îL‹cî#;Y¤#ŒŽ§ŒÅÒïîõnÙµ$Ž7Xø„1b# Çgκˆ-¤7kÒÈvîeFß…?P´º‡gÔ¯õ½X*É4B£ ˜Ðã«c“Ÿ½À« #¾­"ß#®|É ¨$mF3Ó-œƒõ­M\ˆd³*=Ó”ðŒw>ÃûV‹C4ÝîÎ:úÙ¯äŠ×L’M¬¹F2é·±n„ U]gËu§Åa„i"¾2\9ßö˜¶·È3À`~«øUχšü7ñ£èðË$G˜§t(—)Ù×v 'œsŒôÅk¶ˆm%fìøî<Ù-Xü³)R ê-»ŒrÒ¦~î…¸·ª14?Má›9.4wÝgÍ‘·g¬zr1ÏsV|=âÛ»´¾†S“Ë1ºµBš±d$}ÐÙí“RßèÿÂ)y§Èò2•‘)´ˆäû¼ãç#½pú{\ê>=Ú<“[ÈÌ–ŠêÙÚ\åžçž‡Ö´‚\·3riÚÇ¥ø~Hmõ&2¼« „€½ ¯ŽA>™æ¯è¿!ºÕ¦±ÕËD ¹’år6ÈË÷~‚zóŠó­WÇ¡uÔþÓFVfÕ³¶!…°Ç9`ÃwáÚ´õ{%“V¸žm¢Ý#ûNs¸gß#¤f´Ž¬ÏÛ4ô:k%í–—˜®·–hÊ€3ïzz×=­_I¥x iªÏr\sòîfg¾„îü+—ø‹¬êV:VœšmË™‚ßÅ!O¸ŸPiöšß‰~K›”Ê7Ý#ºãjn'<G#§Oœ”W¨ý¦»üEµ}wáž§c4ÎóÝX$Hq†/µW=ˆÉ¬¯xžßáÇ…`€ÿ¶õ9 Ï•ü6ää×hŸn+_OÔ"¿Õ4ûbË9Ž,á{’rªHèp¹#é^w¤"ø³ã~¡yrA†ÝZ5ÀÂÃ&r¸÷ÂÿœÖjñlR’ù/ ¾˧èúUÆ¬Í¦ê¬Øj—,²$FfÊ g¼Rù§ ÀVgÕ¥õŸˆ¼u£ñ=m&†Æéf diÚBL® Îü‚xüN ex×M¯‚'²´†!¨Î±_Ù«ªiQÃ(sÙX3‚= g^xcRºµ„ÝG\Ù©ò‘Øy€ŒäpÿÝÏqÚ°šGvuP©*Iùž¹¨j—Z¬w—‚5Ôukˆ7– ¦2¼ˆð °ÈÝ´äf°ßáD3Z,’­­¥®¡ö{uÜÍ*:¯Ìñìd`° FÕn¹é] ¥Ä^Ó¢KQö J^bØ2ƒÿÕT´ÿ\^ê°\Åm¢2|¥fVè[(@;~efŸF&ª\èW÷÷·3øqíy¤6’EŠ6UÆæ9=™Fz@àW¢)TðýÃ}¶+„Y!· 9o1üçØÍàƒ°üÌ2Â;dј’ÂÖöpCYžØÆ€*£.£‚ŽA`ÑÖ”†1¦¥×ð<ó[ÒÎ¥ãË É./ÞþXÕþÕµ­’V?(.0~b½yÃ{W³þÖ²Õÿ‹þø¥| âkí2âçN•g–£Œ¬…‚0ÀÆÆÆÇJÆÔü<ãìУY‰Ë¥´™òåžU(Xî_ã ž½À9È⦳ûDø—YøÖ_ ¯l®ï¦–îÉõÍ>[ÄQ¯óÔt³“ Gn“sÃJ 2~~2rkˆ»ðõƧg¥¦ž©¯]à ­³À-TM‘HΩ‚%t$·Mäöjνài¥ðÍÄZMê}ºê$ÅËÄŽWf0WùK}ÜÂàSç´ƒC]¼ÖÛžïlW&Kq¬äÈQÐçÌ>b–—9*vôâ¦!7h¯¸¯«Æƒr‚ÕîbøLêvW>!¼ð¥•Ž®ªÄ²­Ô†Ù%tÝå’@Œ7dœuã¡°‡LñÄm3Äc]ÜΚ\¶ÈÑË · ¦H ¸!Êœcžâ¹›+I5aâšÎÙ,]-">zxcäÊY¼Îdr…‘ºžSÍhxžÂA¦‰%R³·Ô-wFñJ!*\ÑÞXÎá³nݘ<‘ž Tâç«5§%ʶòþ¿S¥7‘Í­Miª…»‚æìOmd»žQ¡gTEå‹1SŽxQ[¿Ú1_øoM»ðÍ£YÊ'–æäÂAæ P} *O¯ÌË,¦±¿àÛI-ï.#ŽkK›Ë†ûBÄŠRIn}ë¸Ä¹_99 TÐ<[7…’ѯïÔµ¥´V°ï„,ÖíÊLãiÅËrØiÛØÐ¹l’DÆnR½ÎžwÔC‹Tx„Kp?x xËpsŒî:W9¬ÍÝœb–ÌoUQör]0Øž{ãÞ’×Á·p¼qx‡V†ÇH„ü˜¯d² 7—‘w~ñ˜³1÷"´›ÁÍk§®µB®ime-#ÆFíü—^@ 'Š”ÒÕM»{¨Ç¿¶A*Ç$ÊÍmœ‘]O‚¼ma øŠûTÖ4›RI¼8hPÌ$â`뀭¼/^§¨ÎkU ®XîsÎVÖ׸ÝYŸRðÙC³µÑõm nïu?í tK½ „’î¨û¢!p3Œf_ ø»TÖ´v²°„6 “Y±‘mØ5”ÎÀÖï)ýÚd)1ãœ+KAñ¾‹ãßx“ânS]Iÿ¾S-Ü‘˜£E–Ô¾[dÆÐ@ÙŒg¯áË{} U´ÔµÕ¯ÞH#°¹µg)”V×ÈÎ]ßrüåJ(À$ŠŽ[]/AÛš)Î)vëÿô?‰Þ7ø®ø_Ó¯¯¼5¢^ -®’]I„aB¹ó%†#¹Kf6Œ¨ îv¬hÖ¾3ð›økÅ‘kÖ¶6v·3bhå0¬áŠ1ÆÔ‡ óp}ËF¹ñ­¥Nm,g°ÖL¯n5o2Agh]U ùSæÌ CÎÝÍ^‡âÿ‡šO…þ Zéš‹Zj>'¾0 $¶…w_Í´®Ì’|èË•ÇB§œ`šÍ®V ’wþ¿­LåQ½ŸÝÓϧâsMð‹Æßuqà¤ÚÛM ³[=Ž£ÊE{wO ¢â&Þ|‡…ÝŒW—üwºÕ,|o©Áyáãý£®êåS·šÙ¦)©—Í ŠLYܪFx'œW{ñâæ³áZûLð¯ÙÜ›I®t+FgŠT[˹ŒH%.ãµäšó-câl_õ íPÐüG£jþµ;øŽÂâÉSû¨d}ë.ÖVb íäžûÁÇVÚ·m?Îïî>xµï§ø¿Ìï?gߨøÓÅ×¶wzî—lo7Øg,ÓÛ 4HFÃó1$îÈ ‚9ȧájš†…y¥ê·VÇB:ÕÌÖ­2‘l¢ˆÈ12$¦ FkȵÍëRš}Á>$Óo®!´´º‹VÔÈÝ™Å;ü˜ÁF@àp¬aº×Wàyõ xWU¸ðÞ¥&§h‹'Ûr­~ÙDðFŠª±+’IeH'4¥Ïʹ%ï6·EÆ0…NjÛò$ŠîËÞ(¸Ó|WgŠH-®mšm.vi$´d,É(ÃæÁ*Çv1ƒ×Éãj×—þ6k}>îÖÚ-’µ¼~V£l$ä2¦Ö!*Ù<'©â¸xlêß õºº°’}'Jg7²Þ}–ø^Kp²ŠÇ3G¶9ˆÉeNMs3®±áýZK¨–ÊâÜ$¼°HË-Ñgo#ÎVÚ²4n>V;~\V¾æ®kæc)©ÝEõùŸÿÙvlfeat/data/spots.jpg0000644000175000017500000001151612236612215013534 0ustar dimadimaÿØÿàJFIFddÿìDucky-ÿî!AdobedÀ , 'LÿÛ„       ,+++,1111111111 !!!!))())1111111111ÿÂ|s"ÿÄë3!1"2B# @$ !1AQaq‘"2±r¡ÁB ÑRb#s@ðáñ‚’²34!1AQaq‘"2B ¡±ÁR#ðÑáñbr‚!1AQaq‘ð±¡ÁÑñ @áÿÚ Î7Q¹ÕY}­O«—üï§µ ijÕ«òÍÙâ~›yÝ2´úÜ›FW&£.Ëšý¬¹‹Š'œÇÉŠ¦¬ÍzíÔÓØ¡Ð –™ûÛõ™θ·-gUwØsâ¢#öOIGV)&[ô?/Ô”Œþ³ŒÉ|ƃåúìq,ãÇ#„úEaåÙþ|§j1e]ûãu·ø–q›”î¦B<~ÏEc³ÃAŸÖ¦ÙXg”3W¢¯éÌìWâ×¾E5u¾Éô ™%ÏØùæßp±¬8Òfß%AZ¬*s®hõ­ê/˜òìõC‰ëÞkÝÌcâÊis.zðÁ‘ç±ñ¬¾Àá=Ž,.¾ǼÚ!îVUW‘_ÊWø‘µý«HZªp³©ZvÈ%‰¨|·PðŠ€IÿÚ•Н9óyÐL µmÇðu $¿\_±ä-©Ã¯ÊCñÈýù9èrÔ¼¸ÞãÆîÎË‹ñÉ-ª-[I1Ï$¥ ’×®[a»ÅéÌÏ&H˜±¬TÆ\ ÞºØ#™âz™$aÖX+džJ{KÕT«E 4pªq—•¤]¦Ë #ö»¢åiÃÿÚ—]»Û#’w’J÷”Ë ¨àî¦Êr»¶\b±K\¥O§q»p· 䈗* VËý'&È;””«dÃU–l÷Ïc¦^‹nüŸèI&”ƒ“¼)æ&YÚe­ï„k‚%9ÛŒä .WÄk‡v s×¼ÿÚÊž>K1þ#ë'€P‚Šç`¹Ø&v ‚a 3²\S;Ç_‡ƒ×´:f„dÊòµ…š=FX°±2ÊØ z¼˜Ò;a'I:¼ÇhÍ=[Þ^¯5н¾eÛqÖX×_âLþJ1ï@gF ÚD½^;£íˆÞƒÈ?ènø/ÖÚÚlo»0Öƒ20žª¤2õxx4GÁ‚ÛX‰ lŽX?+qØýFµ ¹ÜðαXÝU¥ëpñSK M{ûÉÈ)Z¸­Š†5‘¾o뀓‘±nͤ^;¥$?%×.¤ïR´^½Ëy™#­Ý;KZÔ³T†xb'¨Ù'W€·4õ-aò¶Î~­¼ýk˜<µÀVÞ~•Væ~­³Ÿ§o‘À:ñ*r×>O G¯ñV¯•¼} IkP­bh+D+˜Ó^Xÿ%µab¹hÏeíØ‘ÄÒƒQ©—IäŠCvÑ jwÿSÿÚ?p³N³Mì1Mm4ª8pöIìG³pv̈ö¨ÂKSÅ™3€vƒ®ŒˆzµµÁk ¢gã‹J•ìÚ ©}SWñ½W‚= ƒþÊ—!ù>Š´â™ÃìÕHÇ/šŸõÂÙÔn„{ò•p€9·v……Ùì*F]"Ño!Ö7l¢•Ð ÜH+@8•8Ž˜î¨^"YóT ˆõmg {x´gÕtm±¬ûW5Ö5s¯E欺u¥¾jÍ“òCÔô®aã¶æòç¿%ö­jx²¦[±ÿÚ?¡n÷Š1<Ë?Ħ‰¼m =Åz§©_4['Þ¼jW¦6„:·›ØP5t ü¾*åu#¹›|²ÂM³atú2Ü#ú¨ "o?å\£(šFO.yQ]ÊTÈaÊø“Ȩ¾±<]HÝq!²n8JÍ% >…þJO³Þ¢'N¬k²¸>õÉG¥ ¬¸•+rÚ7 .ã»`]òϓҩ®4&ªF%Áª8UdAd„,‡±D}øj«ÿÚ?FpÂTß¹1ÔÔúzÕL|¤3î.ºŠê+¨®²ºŠê+¨®¢ºŠ”r$xÏú§þ1Nš6æµmˆ•虈rNÁiU˜ÝÊohW-8ÒeY>Àäx§aø5=GÏÆp”L¢fî7 ÓöHÝCò_Ǧa-AdäÞæL˜‡Bh†&ï¨ZCF±pbi!µƒYì!dë”—ŸðV­Q”åçã#·òP„¥(ÑÓ´9¿z1»ƒ|—î2÷Î6‰@‡Ì¼Ô&I0ÕžV•¤Ñ¾×5['g;ÀœYÆËTè“J†l\‹]± ·aU$DFFËݤãýª¦¨Ü#w­¼ß½‹[ú’ó>'Õð 1¤ÈÊ0³Ø#fv„Ê’HÒYö8µ¥§±™÷›ÔLO4d%+œ|’ÉÁ!w§¤ñ”híéÈJQcS“*wÂå9Ï“WVFf7hq}‘µFW˜c·bxÙ?êø6cájŽeÉUÕFÓ{!8ôË+ÔËj¶D«V§¨ùøËa>^'Ù}‹N&5 _-m¨ÂqŽ ¦p_sY¹¨Âæ¿-ˆžV åžçñÔõKÏÆc9î SDÀÆ€ïíf;ÕwÐ忾ÕQz±˜<ÜT\ ލ’1ÌdWèªòéßšûW5½?¶¬· Hž·-OT¼üe²¶)Àâ,ÚÖ²ûZÑû½I—ôòúyˆÒ9ã+æŠ}å}ÅÊ-}·;f©ÓT–{T5tɘ=g ëSÕ/?÷"úQ237Ê-%wtk“L‰½Œc‚>ó›XUî@êDGZ‘SZÎ,“ÆBC0_ÉÀQî9czÓ¨4éæþƒ¤h&ÉÛoîÉ–ÈÚ~VçJQœ&#Ÿ+pQÑÑ2sÿq"1ªÁÑeé뗟ŒŒ ’›J8—o@GKéµ!.äZ6L[#PÌYj| ÈT\ÆÁ»ìSiÖÀXך¶óiø*r⻃qðeT , øï@ ¹jzŸŒ†r>A |·È`H±ÿ4óiRûoý/›±#€Rª\ï¦Ãå¤yôñÔ眻¤á`åÜæL§=“¨acZE…ˆâµ;˜-6ê¦ø­"z|ÍsÈtÙ >¢Uk[QÀsp8²Þ…¢2?!" m°€Oé*~£çãN›3½©¹[rùx/—‚Âw¹|¼ò¾åxà¾^ ñÁttÃ~˜·¼'8ÛøN¹Ó‘Ô2¾à#›b¥W~¨B$ô™I‰rÑžœê£W·1?Ô-å_V;€ŠKšKŽlÓ«R£:Ã\j°FÎ%ÊÈ@LŒ£{)ÕöàÔI_Y È@K<ƒK-ªËFŒè‰žÜ¯Š:°$D7mðeÎdÊÇbœ„­ÕOkÞ´¦eØÔÒê{DÛÀ®æ‘¦_š#¸@•àYÁ®RªoÜ2ÚöOÿÚ?Ö‹Cxº$ø„q-ú—ï ª<&j?|aÎ2µ¾ 3D yŸ¡”A&1ä/Æñ%4^1Zöõ¢¶‡ %Éy4ùÁ,¥æuÉ¡êLåÐìôËËWÓ©]VN7ãvÍ»n9Áð>•ó·®BZùzâ &™£ÎïŒ( Tz]4§ Œ/o9!5—O™÷Ž<…퀭\4§Ö&w ÕÛŽáN·â¿œâjAÓØVë~ˆT‰°Æ°àð ÖA«æý0!e0áYaÝÄ’.¤„w²ž©µûxPQáÏ¿¤°¥‚šÏêyãÌÑ—´WÓD:2^¾Ùvi~HàI€2Šãn×Ðg"ÎH’ù댩Q5ëü §â¸A6wlsOûÍã.]-ÀðížÔ^áîflùïúǯÿÚ?aÑSq›KשôxcAúã4FÔû ÂŽ„€×‡“½áYOÁþ`À%ýÙv•J[Ó±(¹{ë¨'a¨`Bg0ê½ZâÍÅÓ:Ñ]÷õaÕ“™Û°‚ãÓ}ð Üë9…_`hà ÄMtÀXBˆèc£É’™¨¡Öwï›^áÇ‘àpœüd /ï³¢Üüßw¨)Ý3ãƒwlí†Í+Ð6ý`Òà¨LºéÞ.áÀNv¹ÌIštøLÀë¶ž^W»NqNSßü2%ì”GWŒä ÌüWw¯y-dÔR½¤SÓcƒÝᄯ WW †)aœžîßx¡vCÃÆX”Àµhvu{eËĵòßež3R”†Õ…æ`€'Cïß¾~+»ÖÄ9DŪ_Æ$ÞÝR>h`tÞû+‰×Ž3ztiã¾:ŽÎ1 &pÜ£íX”r~tÿ9]:0ÒvoÞÍÿy` ¨_¨a“q'Nšå#¨íŒZÖ0uÐ3AÅ5ƃé4JaÔ¯ýOÿÙvlfeat/data/roofs2.jpg0000644000175000017500000037617012237004736013614 0ustar dimadimaÿØÿàJFIFHHÿâ XICC_PROFILE HLinomntrRGB XYZ Î 1acspMSFTIEC sRGBöÖÓ-HP cprtP3desc„lwtptðbkptrXYZgXYZ,bXYZ@dmndTpdmddĈvuedL†viewÔ$lumiømeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ óQÌXYZ XYZ o¢8õXYZ b™·…ÚXYZ $ „¶ÏdescIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view¤þ_.ÏíÌ \žXYZ L VPWçmeassig CRT curv #(-27;@EJOTY^chmrw|†‹•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿÿá ExifMM* ’ ˜¢ª(1²2Â<Ö‡iæˆ%8AppleiPhone 4HHQuickTime 7.6.62011:07:19 14:22:24Mac OS X 10.6.8‚šè‚ðˆ"ˆ'P0220ø ’  ’(’’ ’ 0 0100  € Þ¢¤¤¤¤Î2011:07:19 14:01:572011:07:19 14:01:57Gª¹¡M NªEÂÚâTú- %d ·d ¯$F $Ld{§)ÿÛC     ÿÛC  ÿÀÞ€"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ýq´Óç‰òÀÿz´c¹@Þ]ÄQ†XÓîæXUncMßÎ’ïìw,O˜© Çà}ýkꢵÔùF´4Æš’DX(>˜ëQˆP§ÔÒ’ÓÌ€³—Lc¥N@yÉi î­$šciXçu{Ë8 •DÑÿ9­-7V”c„?ÅŽªÒÝÇæµ½Õ³:gä•FGåÚ«Éöˆ-•íFˆ"=¸Àô­ZN69ä⸴’\†b;z×<ëqÖù#©=*Å–¦‚SçâÑ1‚²zÖÛÇmw *È„‘‘ŒtõÍa¬‘¢Ì§Œ<¿œôÀǬd¸e vç©)SKHÈOCZÖ€!U*AîH¬êN= Œƒ,S¼È%…H†¹­öd€'Óù×PöÖ×Vù#ÿ»Yí§ n Ãö&¹ýº–›ºLÈ!ÔaëÅXŠkÀ• {`þb®-«W̰=qW``#ªqßµL¤…Êîg»)\ž×¥fܬ‡ ‹Œqõ÷­›ÛEò™ úÔQ¢4HÎ d€ÀñN2V LÔ `ÜALŒqUäIÉ$lzÚ’Þ4vT ƒÖˆm°à’ >e¸½Ê¶ÓÌ«‰W£–ƒVJ¬Ö¡”3äÕ¿#dÅŠ­%¡‰·DNèO¨rW)ÀÄH¡Šæ@SasžyÉ4ÆÓ<³ºó㡯4Hñä¬GALˆH’‚dܸû¤ñV¤dâd•¸6¬k»Ó¶)Œ²O€Èê:6ºc.ƒNjUI —œŒ |ãäG24™ïÎIˆ }ªä):3G&vò¶k¦òcp@8çŠÎ–K°À1ÈÒU9„é£-­U¥S‚̼Šém]|…2aXõ¨B *6ÎG&¦*+)ÆzqYÎWÓH’&‘]FŽzU±3~÷§Z¦¬Œ¤ð¤Õ]¦ub7`ŽœqŠÇ•²Û±¤Up‘Ú ’]ƒiP8&¨½æÜ}ê´÷ò©ó:ƒB¤ÉnäÑí˜0ß»æïI=°YÕԜҲ ÄÖì$DF^뜰ڌÒÅŒF ©²¤Ì®‹/´È7ƒÏ#üóJטLØu5Ê˨]$R]]ž8aS=â˜#h¾]¼¿|VЉ<æÃ\ù—ä+H#^è»(Cn…È—xUÝŽr:Ô72°‚Ôd4í©Eü͆çhä{ûÒÃvÊ#,A^„úŸZB{cŽŒŒž? ƺ‘¢– Ѽb}«¡A36wQL­kæ€@÷^I¤{„û m#ƒÆ+—†ø¨òœžª@è=ëV2Lû¾OâéXÊ™JZ­¤Ysà§ojÕ ®ðñ\ÖìnÚÌàTq\J‹Œ3ÆM'NáÎÑÙn„ÄŒc#Š¥4¢28ÏJç¤Ô%T œœúu¨ÚøÌ¡~rzÔ**U47Zì˜Êç UI®öGÓ äV[JàËéQ«4’e€oJÒ4’2rl–âõvçš¡ºIå$œg"¬l6æ {w© ÀN+T’!«DÞ>pÍÇAÀ§”ÛÓ`)åÑ[g±Óš”<=Å1Ø¢É#Iü*;Þœ7(.ãôéøU׎/+8Ž~nE@J‡pŒH+Á V-A& –P3Š´n‘"'vqеåÍ,J<æÀ=v©ÒÕD+æ31÷ïQ$„–¤Fð<ŒÄåAÈ\úVv¡q,–§l@eÈäþµ°`Mà…;‹c&¬›n;ry>”Õ“œä~övâÏ’Þ0ØúTê ²F<Çò5ºÐ"íÀ,@ãŒÓ<¡¸ ½?Õs&%Œ€Ò4;R¬=ŽBö—26â@'°·Ù‘î=R¸¹UFÆ=1ŠjäÉ­¥ çbß¹úSÎÝç$‘Ó&­<²J½o^•NXóµx8®˜§b­{ehv©…cÝëÁ”‹q“ßhÍXky7Êžœu¥kQòªzap+X¨õ"MœmÊê²Àªûš¤º]ÛI…‡xÏPx®ÂhâV!ØŸAŽŸ…U7§j3.:ñŒ í…K+#š¥-Y—“ZÇæH‚I:ØR*—8xÆIçŽ*Ì·)Øî#«Ï’ý”’€1ätéT”¤fÔc±¤‘ \í“‘K#Ǹà éПjÀ{©Ý°dxÈ4E¥—†9õ5~Å­YÕl‹3\ %S~SUlvNµ£œÎØ‘g¸æ®.‹¸ FűÓ4×*Y=Žu¤b€cŒ~uÆêÖfˆú. ;@;½dhÈJ‡\úô®r\ŠÚJ²¹”¢€CŒ(ÁüûTε5oTmFŒÛù3].f›&3µÇÌ!MY´Ó11S“dzµè+¢:9,v®8§>ƒje-.æ=xƒë[¼G™V8¿$m9ãžBm²3ÇsØWk&™jÂ0ã©<ÕY£²‡¸ :æ‰T} çBËSÔ-âf’Hçˆ Ýמ;T7tfuʆ$u­oÇ –SšÓKx¥@‹±ëšùo¬r³í4Î^ÚÀÄÛbbªz qV¸º;‘8é[“YJdŒn 穬ä;¢IØÁ¦«ójL¡dE5‚M‘PFÄò¸¨RÏ1p[c­kÄ6¹ÉÂõ85`…b01ÈÔ{i QMœÒiqÉ&ÉT¹'€Ç#ñ«Ph1YO#ÄŽ œ‘ž+mÕ=ºr;г;1m§¡j]y²Ô"ŠÅ*·;V[œ n2*ÎÈ“ƒŽqP‘>Vç=ºÖ<×e¤ôy|­Æ9ÍZŽéJ•ðF*ª*€AçœÔ“E¨`K“ÏJ‰Y‰&µ'Ú¹ÂH0û§ùÒ‹@ã~H>€ÖA¸xÉ䓨 ™uIW'¸ô£’}Íõ.´ ÈÎG©¨~ÈÀðqß'‘u$}ņÒz¶“Ã"«$Š9Î ©÷’…³•l2†ã’ML-Œ‡ ñSŒ7^ƒÞ…!eb¦j\ØÔQVKW_›{ž€Òà2…pÃðéS8¡Àôàžjœ—;îùH?•R»%ØI-á2|¤}i‚_ºTœçš¨÷¨d+Ƈ¶iŠå¿ˆö´Qv3m\¸P(-œg¡5 #¸Î©K<°1'qCYÒ_ÌÌ *2:õô­#ÈrFÜs?+ŒgŸJ˜âDÁ!³é\ÌwF9郞ŸJÕ¶œÈr¤s÷‡QNTí©*WeÙd•"Þ£v:ñH]¦· 3Ç#š¶ë˜°AÎ9úV`Šh3´`õÏJÍ4Ëiî=§òÁ/œHÇ­WûY’rQޱ©Ìv‘%ÁÁê:PöË"l'kºGz­åd3 å]T•>ª›‰ÙÉ@ “‘Ím}˜ýŸœ“ŒU6ŒyêäÇbhR»‹±ÎIö“{—You:’-ûƒmpßÄz`Zé§Ž%ÁRíè{û×6Dɨ3«©P>l=¸­á+™I%©WkâûÙíSB« ÛJ²¦1É«o¶â-ãb>ÑȨC8¶ •É'*“2z½ ”ãåHõ«À'ˆ1䜓UáUk`êÂDÉŽjú¿–ê§g—Ó'üñYËrïrœvÍÑq‘×'8¤ºÓĨ¤¦à¼ŸZ¼Z#;y,7t!j¬·æC zÔsJâqI¾Ã¶ówr9\Tá<©q¸¸#R ÛÎXåÎA¨ä•–ä*¸9ä󓊽Y™qáIaÈQЃŠÏ–I¾÷͌䚩-ëŽP±bqÍDÞy¸›wqŽ•J$6hÆciWsØÈ£(ŒX+1tªPÂùiNPô#=jTŠUI'¿8§`½ÉLË#cqU'§JT1—ÎrƒßŒýiVâG-ž˜íšŸÊO,’>lgh®€Pщ;ïȨÚ`òÂòÝxè)ÛWïƒíÖ…ˆç;rÙç4 *¶×܃%±ŒŽÕ¶c(œ)ì\{ÖŠÃÓ#¸Ç?L±¨Î ?^)¹…ô±ž¶ò³ãÞ­%«y'=}ªØÚ1’p:÷æ¤ór¤ zЇ6$1#eVÎÜ÷© 8$÷<Ô 0ò[ñ¦ w1À\v¥fÂêåÊ8ÆE)š=ßyG¦*°ù€à} ;ËfÈ?J9BìY'ŽÐµWf%}G ã5qmAŸj¿¼A¿y´÷÷¡ÉDkÞ0DIÇÍøzÑö#Ô),V溥˜ð:u5#G…—§'§Ûù Ù&qrÀÁ ’ßN•™*…|9§Æ»Û¨áÑæ?nkžŸOiݾTž§½oNº{™JŸC—w#'åd’p+9žê{‘ú àWsm @îŒÊ]Áãpùsô®‚=8ÆvçðÀo±Æ„¤y—ö%ûÅ—dBO<Ÿj?á¼”~õÀ9áV½rßKˆ@ ~•¨–W _­a<Í­ŽŠx IþÕ&ó6d÷AaUeðª‡îóŒç®O¥} -ÔrrØì:U€€q´b’Îk-c“BKSæy|«B»ž8ÀÏš|>Õ cû…õ¯£åµŠA†Qøi‚Ê9@kEžTkTdò4žŒñ[=SI´1¤}G9ϵtðèÒ`» ÈéŠôeû¸S× S¾È»0¼~Ï<ÊR6†XâyÄÖRáyîâ¸këyGÇ 7ݼè—M8Q½&½àéÈX´»ÓŽ•ç×¶7í3¢ÀGÃWlsÿ]£/´4§€ž¦3ÚÜÈHGR7Àªm¥ÜÊv‡ºµz¥Î˜é(T·71c‚³p{ðxÅW0XEbº± ˼Ñá¹~‚ºãš#™åõ0“@˜Û1,]³ÈcX—$Þg– Éë‘ßð¯b²f©n×:eý–§ ÈQ¥·™dPèȨ/4èÌ‹ˆYˆõ$]³;»Õðm-KÕ„£oǧjr#—9 Ž£@ËÊYŠ“Þ­–ŽQò¾OO­y7±ô.#ÉdÆs¯½gI˜I#iÎ>µ#‚$;GAÎ}*¾÷ÛÔïUÂ=ˆ•ÚVE‘Bäª÷ö«¡ÁFÂ'‘ȦÅ`HlsŽ:Ô LžK©ñÛ½ ÜI[SEv˜‚ïÅWh£ÜJ±$ò3Ú¢VÜÙl¨Çcš´  R¥Oò¨µ…kî=4A[¯b*CjŒ»ÏåU•v¾žzf™<®9ö¥fÙZù ¸9êséQ»€v4Œ8Èæ³þÙ"’YOA=*…Åö׌8lûÞ™­#NLR’F¡+»'’8ÎzỔ²2sƒüê7QÎxÅf-ÁkÌ3mÀãßÞµPw1r.<…”Ž®+9.%†ôfÚsµ‰ïV6™:OSìid¶Õ•pŒöÍZHWlзԔÆ?yŸB{Ôí©°`Ø/ ä}kZ:²FÒ÷{Qåȳ²”`¬xÏ8¤éFáÌ΂IAÚò =IÏéV%š7„¸eNkˆ¹²v"[i|§>½Ò«Ä×f#*àà„n%‡OTÇÎÍé˛ҥ±Æ8ç>õL´¶²‚‡wÍÎjz g@§.1Ëw©Â@ ñÔ ¯ubBs2¯’dŒýâ{óQ·šó—wÆyç§OçZë¸6269†®Ã¥2€b,F9Î?*N¬b‡ìå#@&b“DÑ1‘Þ®ØÂñÊÌœ¶AÇ5ÒGb‚LKSžãŠ¿ý ãê+žx„Ë&V‚^~|6ÍZQ$&r U[2ªÊ¬=j±2@çwËšç•¥³6^êÔºmÜcozmΞ¤+XcÐÕ$„—ó1‘žµÕdǃÈ>´(O¡-ÆÚ–q!G^G#­`ßÝ$W»Èlž8jêjS-É ŠÊ};Vn¢¦âe*JçŽJÞwÔÂZ¢Ä³Dm–EenüçšéRÌ$“ÑÔŽ3S­¬ÞA˰ãó©-ìâÆvõlšé‚Š9ä¤È£ŽemÌT«…ºŠº%m1©xã¥2D’Ú?ÜàÆŠ*É1œºhnâŒlOÕB›)ä(£h| t4ÈÈ•rIšÑÄBp:šÎW.)XÎÌ0]€­–ÉRíL—jXp VÄ‘EŒÆ ç&«I°ä "õ&IØÏ ”ùˆ{’ˆ“Û…ÇBpiF¥B3;àt§AöoR:œBvñ¸ öïY6_+hd”)Vàb¥YçuXKf#O=j,d,§ Š—8S—B–X¶ìãŽÂ¦TvPU²cZqiøœJ¸,”tÏœVN´Q´0Ófr@Ï«"éS 1•a×®Ej$IÀ#'Ö¦ò”ÐjÂU™Õ%Êq@ª cŸ§5qQBsÅH@ï@n0Åɳ¶”G*¨bMêÍÞçTR°QEÁ¥©ZÙÒd¥oΪýµýl7PŽå¢$~™ E†’(™CȈXáC0©;W#¯^ø6M,\xŠïIŽÞvÉw0Œ¡>„àçØs\"Ísw'üP6-hº­åõÁµÓñê<Ðdqþêþ4;“`žÝ¦‘Z;››wÊ#êæ¼GÄþ)Ò¼9ûTølêzÆ›=Ûè7VÑ[#fæYLˆâ$‰ frœÐǼÑ~2êßõ]7ľ#Ñ.<öx#³ƒAž]>òiسJ%”Ûn äÖu¶‡á_ þÖÕ?áMîÞ¸Šu6âñƒ eØmà“Ï5.æ‰Ã¹êÒkÞ8Õѳ<.<1bÙÍþ¶|éö¶ˆçþúaI„´­Ne—ÄÞ Ô|Yqœýžî_³Ú©ö·MªGûû«º³Õ,õ . ë<ûi—tN®áô<ƒõ©b¸–(¤>e Z¤Ì%V7ФºF›¤PÛØÚ[B‹¶5‚!Aè6ã«>—8/nQðHC¯ë[ BFj¢¨ÆojŽBKjÒ2iœ•£-L JÉ’±a±÷»{ÔY1 ÌoÀàš’+ˆ¤ !QþÉ= Ks,ÍÝ ÇjêMìhÕõ*¬ãÍÜvÇ5Ày[~ÑÇSžQiXJrÉÇtNžFòzžãÞµqkR.2ܺHY$€ä‚9 .’t™’9ëÍd4Ðy™v%Ïñg›,Ñùm÷U}¸ý)¸]¥dhHªm]§ºU;Ȧ’Ý^ÚFŠU`;Ó„*„ºà>sÓ®*ÒIA8cLsNSìJ‰,6½OU==MM*ÁådžÇè¥Û†\•ÛÐö¢aæ Ú\à×3m³D•ˆ„‹¦î1òóSJ¶óÂ$ ƒéëY«æG!Y7ŽjØ‚B@ù°xÆ9ö¦×Pò)´Q5´Š¿ÁÈÓí-PŽ!c“‘œÕø­ñÏ ~u¤–˜‡ ïÞ¦UlŠŒ ‹jUÔˆ•|Uø­á#vÐ à€x&¦‹*ÌzzR¯”[å= ×<ª¶_*)MlnUÁÏn”ëyÚ)0ûNO\V‰ ŽIôªUdù†yàÔ©ÝY•¶Æ¶øåŒ”°öéUù«­Ra¶0ѱSõ¥¶?y‚1P Sõ-9` £}9¬éæ)GL5$ˆÅ~V`OAíY­4‘ÌUØH½9ê+h@ÊR,¤a€þñéÍX«BÏ=ë,Þ„»elOj–ó;6Y[©íZ¸K¡—4z–Ê"“Œt9¨%U¡Hܧ?Û"uÎîÕBåø ‡ÔŠqNú’Ú$hqlì3“ß¾k,»Æ¬FÖÇ|f®%Ú•*ÅÈêF:T[7üéÖ«G©•®ô+} 8PÄÇÊ3UVFI›•Ï@p3W~ÌÛ·wr:R Iv Éê=+NdM™fh÷àNôˆÏå0}Ì{àô­¶/l\«0ۅʘÎ*Nh9Yœ#dd€8欣1áÝsÖ­5¹å^zÓ»çlÍÉ1¸28æ%Xä¡Î9ja|Q¶ìúb™öi‹d&9 ŠQg#†6¿oj–Ðr±­¨FÁolÕQ~Þ[7@sÍ_]#‚I$ŸJ˜ià9õ4¹à…*sÜÊ7›†à ÏBjÊ\ó„çµj.™Æà¹ •tèUx8ìzRö‘)S•ŒÖ}Êp¦8ˆ®íŒ1í[+m¯ðŒS]bBFqKÚ&/feêç¢`Û¾nO°­ 9xïU™†8>ÝêÓ¹ŒlSf+õ¦©ëÏ+•ÈcÀ<ƒPåI `~Õ#žH؃ÀûP,s’O_zn~aÈÎ3R"³0ÇOçNÖ'È|Ç“ÜÕ„]Ùäý*Ì,äoePxëÉ­E°D-¸þX¬gQ#XP“(Eb£€Iç"µ%Ê¿ô†Ý¶mRqš%Œõ8¬%;§n…øcU8)ƒïVp¸íøU™€&¤i”wáMs¸»°œTIÁ@H#µFÓ…j¹|œà·ÔS2J‘€3Þ…eUÛAêL;ç覑–È>´›I^ÇÓŠP¤äö'ŠÓݱ…ç{ܲ²ßx“ØS¼ýÝ·J¥°ç‚ÀT‚-ÍÞ£•*“±lNpÉÇSIç8?6:Ô+ÝÀúûÔ‚=ÜóS¡ª”ØýçæÅþnONiáFGJqQéŸOjZœ‰w’)žaè?˜xúP'ƒÒŽRG±^çO±»x¤¼²´¹xŸtM4*æ3Ó+‘Á÷¨ŽŸ±hg»¶n¿»”ãò9…_àž S3H¤®Œxôâºà»’ãÏ m!±€ÜpN8Ï¥p‘Uý°<$¥‚±ðÍùžOïa¯Wþ!^]©ÿ áQ´sá‹ìߨhoAÅ]ž’pHÓŠx| Ã}E;g~=¨Ù–ÉªÐÆÒCH%½ºŠûü“Ò§òÎI9ü)¥6 8Ó£¡æ*³+8§5rŸÌØf“tÝÆ*UŒÃolþ•1D9Ârµé¹&4ŠìŒY‰åR"ɳà dñRb!ÉÉïVÑc´eyê Î*\´±-jeÜ!É03ß­@±À%±ÀjÝ1#²0ÀûÔI-òd‘Ó<ÓS!ÓLÇ0m„Ï×52y£+½@÷«äêŠì*©·Ì˜Èµ?h@«µÈçiÏ?(ïPùG9 CïÅiÇI3ÈÀõéW¶ÆÑò¼Žüpje;‚¾o˜FçÔóš™^D\8ó8ÈþU¬P«|…X“Þ¢1‚3µwçš\èj-èw}ÑÎ8Þƒ‰ðW#ùÔ¡$Žï ’¥º ¶Ùý>£¡¡ÎµÊÖêÈ@`xëž•t¢3£cÐÓÕ q½Â‘ÐÔÛ'÷€¼Ör‘j,€Û©ÎsžÒ­G*•Æzu§ nøÀÕŸ,íµg)•Ëb±B_$œ]Œ8 Ä}idB¹|`cñ>Õõ<CžÔ–£l™æ1#=OzV‰¼ÐC)4Ä帕XÄ9'úÒy@‚OOzÑF$9Hq¾bHÃgµFf‘—Ñs֟墌øMÝx^Õ¦†|ÄdòGÍŸSA'çÔÒ;üÜdþÜŸîœ{Õ$c!@$Žã¦Iþ”¸Êò¶rP挹|ìöÍ2EÛó íõ«G&ïºÀ{P“*‘ˆ@=ñWô'>QNµœ¤Í!¹f(Ÿù›ñ«ªB¦0wwç¥PþÐNqéS èVl{Šç”dú)Åu.ob¢2žÊx‹u¾éNg‚~ušVèVëq›ŽãŸÿUH¸ïÓÐö .[ /'ñ©.Nõ#ÛDÙ’*ƒŽF>µ(LwÎz{ÓqŸ»ŒúÐÌà àÖGBIn?åŽA¦‚¹ä~•‘H>¤÷¦<«’¹ù³Þ‹š-n°1HÂöëT ãœgõ¤û@ÜU[\ŒmcH0ü?Zp`Mfùäàç8늑f 3“IÓ*5Ó4æÀ犦f$õün#ÜTòš{dNÄcqJ02zUo0|Ì}F(Ø8çÒ«”ÏÚ-Ë€óœÊ—#=…S§hóKdö5<¥ªÅÃŽpqô¯,Õ7ÃdxI…ïò1Éýì5é;þqÎ8õ¯1ÔæEý°<)ǘþ¿*wÓCŸz‰DÞ•K³Ö9éÀ “»Žžµ™œ’3ÏÖ”=sŠ¥7U"rýòsÓ¥7~N2yõªÍ'ëLi Î2~•jSªsEo.È%Ù¿¶“çR–€¥žçwZóS/‹×ö‹ x^O I æåK0»G/ެ»‹ó€¯@ß0ó%¸ås×ñ®˜IÉêtÉr¢Q,C«2°é¹xüjË6èUv!`1×ý*ŸÊW‡‚>ZŒgæpGB+KܾåòÛ#øO9¤2Ûç;=85WÍvÁnAóJùÃ3#g¯JDó å0ÂÊËþñéMxPòÛ=Ô`Õ(DÊÆ­Ç~EBn‹JAGùÓQÔNe¶U*Jà÷5$3ñƒŸSTšð4ãØ‚ç1œs“Ž)ò²yµ6˜ÅŸ¼ v¥wm÷#FZ£ iS 0qÐã­Xû‘ >‡ËrÔ®E½[' â®Fèî–\ñžµXÙ¢¾œúÅJ-•£8™ƒÎGùÍ)IXi;’øO|Mtʹüø¦˜1.ÓsÇ¥FÀà À¯lT¦+RPç=±VVuõ b«ÇK ) _Ç‘RO•1ÌY³ƒšNÏpE‘0*Fü?Ï5_9$œú § ¬­±€éZÞ¤€¤õ$qš'r òóƒ´ú<ÉL0>”îCnÆp ;p £­Hfsý¨6í¤0ýiÚ‰ ðF9­sµ°Tò}y§,%[8ÒU$F6ªÈlpI§In»A˜­Ÿ)d\2©æ›ö`K.)ûbœRÐÃ[0I Ýé?³Ø€Åw`üǹ®‰mãˆêhò@9‚y´ryQÎ¥š‰å {TëlÈ9)VØ€íl‘“G’Uz¤õö¡ÖC!-ÔíÎ:qïS‘GLV—‘/̼ö @ õ$zÕÔJB?”ädÒ}™]‰×¥å¨áIÉíš\*’1Ç¥/h&I°ÊñØÓ’ÀÛ8­®¸Ü1BzqjN³cPW3‚)çi­¥´kÑI=ªÈÀ^9£pÇCPæÊåDB(·g`Å?bzÏ4¥úƒéQ3’éÔRæcC˜pp*AÄŽž´)۟×`~¾•HɽH¤‰Jœž}*±…7ÜN=êÉŽBzsÔÓ<¶åMm#9+‘í‰g^•ɰǭHèÌ2ªnîyî;Ö‘±“}1à’} ò÷éš“ì­ü,ØJ>É'b=øéZs#.V4083š `})~ÊÁò[´†07ÍD´ÅlgÖ МÒùDßÖ”FFzûóEÖãr1žz\úóÔw§ˆ°¹ÚÙÍJ¨wà†ç©‡$ ¯Œ`c'ÔR2ÏaéZ+`pHõ&§ªAŒuÏzŸh‘N ˜êÜ‘‘zÕ„dÝÜ÷«O§ç¦Õ·­3ì0íßž)ûH°P’dp8~; ÓÄî@ùɵ´ †VbzõÍ=-ŽÐ2OÔâ“qó‹‰ Œ¹ýi~ÔýÎOl÷¨^Þ]¤‚~¢«4R±ŸÎ…1JREãuÇcQ†rNrj·çvÏÖ¤H›n\g8Í>X¢T¤Ç“ó|ß9@Î@#êx¦‘‚2§=x¦9à6ìúP&ÝÉ—=3žzô§ù_>ƒ5U˜ƒØƒÜC» näú | ¤]1nsÁæ…“=Oâj–É>ðÎéH $î÷¥Êƒ™šˆÀ îÎF3SCœ‘žØ=+!\ž9Àêjxç ðy5™J¥E‘pOzæÈ»AsŠËÁÉÇ>½i ägoéG³´²5÷c,q°rH=|Õ¬¯‰fý¾ü9u§ÞéútðŽßË([$’[ˆãhq »3Ÿ™ÏNëÞg»Âbp2σÕ'óß™·nÈÝŽõCÝZ¶@=}ëòÇÆ¿uŸ O¨5‡Å¹kyÙîÕYW%•P—uܸ9ã¥}ÇðÏã¯ÃŸYéºü&-{âX­cŽi58 ›ßÈ—U`æêPr+ËÀã¡:’Œ´ì}^?/œ)ÆI_¾‡Ñí*`²°ôéÅ7í±“·r¯=ÿgù1ÿøÛçšF·Ì_¼ ×Í{œ¨ð&ì_–æTtj ëL‡Y&'+Ðx"³<7ÊrqƒÖ¦ÌùØòqV¡jëåerTåO¨Œ·)€§rõúÕ@³F~el篯ÔUØÝˆÉi4„›layvä¬a[¯ËÒŸ®ün^ûMHÏ—Áb°¨C4N0õ© YP¯\´“]`œ.ÑØÕ1r65$îëOóGðH¨5›W-2inÏ” øéüë1õ[˜.lܤ}áëW|´vfÜ7Ùèi²X4±'9äô¦œVàÛèW‹ZóGΘÿe—‘VF£«°ÆÛG©¨ÁpÞ`#?¡ô5´0¸(įæ1TÔ:wÔ²„ãa`§µ]YeT9a,gުǼíÈŽr*ê)9ÆÐéŠÆvdØñ.99$ö*xæ|’3‚pj»ÆP®@ÛŒåhÚø†=Ífö.íE×g1’O^x¡@“ò ð*¬d’qøÔà¨éüë&ireùN _íL7díëUU~ ©Cå±×§­K)2ÊÉò`ŒvòzóUI,û€É†Ë…ù‰ÓÖ‹¡ÁN¢šÊ™$6HôªÞjãå9úRù€vï‘‘IŽå¬qœG<Òîíë“UCŒõb:*O3hÇíJÁ}IþQŒ·zp'µS,23Ó¦ 9eùGOZMË£¦8»²G>¾•XJz‚8ç…Çô i–ÈQÏ9枀û皬%ÏPsÚK–ïšBæÔ¸Gn þt›G ž¥VóNy'Ó9¤3c"¹"ÑEÛÏÒ›µ9ÎOµUó]¹ÁÍ1æ|œ¦ ̬]ùLi¿.{t¬æ’rFáH>ÐÝTóUb9îh@;géPHáºG~Õ†bÝÇ ¥òw sÛÒ©2e{R==0:SNÐHE9s×xÀ§¾i†,½G­R™—³h¥Tàž  …öô¾¹­?"%Ç\JVŽ,œ.OÒ©THN“hÄ!É ÁéÆiËò®#Þ´ü¥SòÆ@…U•?êÏÔöª¨™‹¥` »r +ƒÀ'¾{Sñ!Q€>ƒ½/”ùÀUÁëNèVd“¡Ó¥8¨ÀÀõ©Z;UqÇJ1'LúQÎM»•ÚsÄ Ó|‚8S¸÷'µZ峎”É¢(EOôIü>p乎–ï *ÇqûŠp¿™çè+Îïa-ûch­"ºøBô ®ps,]Gò¯aµ·Ê2ð‡*1œ(áGùõ¯2»¿á¶tD ”<trIÝŸ>>ßcV¥ÒõGM M7èÿ#µE‘/¶¶ßž<äëÿÖ«*$®Ö÷Í[¹ˆ’B¹Ù ,;x5?–‹‘ zŽ t{S›Ù;“\Gk§\]ܸ†ÚÚI\®àª£$àrzv¯ÿ…·áíÄþ´Ðâñ¥ˆ$™m®aÒæŒ[$1ŽõcÀõÏj÷©$X­n?r'9ÊMp:fŸ5×Âo ^}¤™†•(š"¡Ù‘Ç\`y沕I^ÈÞœ  ÛÔü_ð_ˆ´ûŸ-«I®iÜnˆ †‘ŽÙÇ5럭4?ücðE”²ÙêL|Ají$‘…4!äVUÆÌàò?é:—ü!öR^xzÖý7+Is±-´àÿ{—ìÿj–_´¿!šÚ˜ksóCl·—,‡e9ûÀWç°„–"=¹—æ~«Z¤]ÞÌý6>a•Ÿ2of-ÀÇSSîs7³qŠžÞA5²2•š!Æå=~”ù<ŽFÀ2;šý/œüÆÅ ª[æ ïÀÏÖ§Há`F ‘×oSA1íÎ3êO§¥-ñ…T\ž˜õ¦äE¬Fãjœ—Ϲ¨Ç,=sÅZPD{]À÷"á—¸ìhRÜ®>÷ÍÔwÏéNÍN›w|¤ç¸=ªu U·:’3€Ã½L¥¨8Ù•Tæ6\1Ÿ¥Dbs!!2ú~wȈÌ {r)®pªÌÙëƒQÎ1™—*¹è9ɧE<ª]Ø¡¨Ý$Êà…ÏbzÔêŽPüê„}áQ)ûÞG#iäu¡lqúõ©„n9šVWtä‚L­HôdAØ)õéŠk1ÎO_~Õ;@ìüœàö¤6áƒOŒšWÔ\lBg“Ë#8õ>´Šá—æa»úÕ±lê8ê3H-¢ÈùÕ;c¹‘N-•–E r®jÀ¹Ldœã¯ËO[hHÉaQR xGF!@éIµ`„YÚ‡ÎqN[Œ>N~½ªQ8\ÐVÛ’q×5ÈÐXäÉÁlŸ\TªI%Hê*«4JxÁ©ë8åúS`™gËܤ Êzñ@ŽUÇ%‡n)‰>G,>¢¬,ª|Ø=Åfî‡Ì€+In:Ô†'ŒŽÆœ³ þ.Üæ¤71uÊñÐÔÝB%½7Þ¤òH^œãž*Aq]qÓ­/ÚaÉË~i>aè7f ÉP¼0?:Cu{¨æ£2Ã’ ÑfDÀFz?*Œ‚{Vtì«äõ9¨Ä½÷ÀÓå#ÚXØ©œãÒ¤àÆ>µ‹öÇC„r=NzÓÅüØùŽ\Œ¥R=M+ŽÙ¦”÷eÿhÊOlcÒ¢mBà‘ÉéK–M‰Õ‚60¼e±žÂ˜]?8ç§5„÷319vǵBrpy$žõ¢¦fë£uîÑyÉ8õª/~¡þñ5œVLs×9æ™å1'!³ÓZ(DÆU[6QÛŒIÇã©©SÓ8ôëX¾KžÙúÓ¼‡Îp® >X‹Ú˹¦oÁB»sšˆÝç,1צj¢Û±ÇóÖ§[gÎYväsO•"y›ö¢[îþ´žk›ÐóOXÈàÔ«VàñÞ—2CI²cÈÇ2‰ Èy5ecUQòç=j`AòðE'2¹YîüöãµXóãwÒ™·å9&±5MoHÒmL——hdßåÇ_¼šWÆB"Y¾ŸfßsHß¡¼Ó”éÈúÓ–ëqÁÀõª0”šÚ)B²(;[ï/|B;ÔÊ£ S²4“.‰½ôÁ§ãrj UãŽLÔƒopsRÒ5IyÑ‘Ï^Ôy‰þÐíš‹óÊæŒÄ9,3EŠæ“'õªÍ19'ص;le#yÇLvª­*O^¦ª(Æmôö¼œþ|SÒðÔcU%`Kœö G ÄZ¾XØŽy÷4Öu?19öÖ”o>㚥´ÿ Œªt…ø.yê1PÒFŠr‘#>å²}qUšUÏQ“SI eÎ쎼ÓE  ?àæœZ&jM%Ô,©":H¤pÿãR‹žxÍQ°·A³qˆyc žœÕ“£#æ8ôéUx³7·ù¤“»€z{Ôeú÷íÖªIç£|°<Œz|Ô‘½Óctk=ÎqV’±„¤ú—ăw’zg½Q”´×›v‘ŸÝ)\ÿ!VÍŠÙ›(_€£Ôž”[E‡c¹OÝ©õîÇñ5-›FåÕ °ap=+ÉneAûniq<Óໂ©“’>Й5ëjŒ½Jc¶;דKæÃl[g¾ “8÷¸ZÆl饻¿fz›¯›nèÛ@`@ÁèM2 $´†Ýä|Ãß½G%£0t¸À䲯HüÅsmâ cÒ´ýCQ¸ówˆžÍâOP±ÎzÅjŒ’rÐßÔ<´ðæ Ùm¬§#ýÃYÞWᆌ0ÒmÿôX®kUñeçö¹oqá=oMòlÝZ{é#KrZ2~Yvp:äjׇ&ñ[ü>Ðó†¬×û: €Í,Ä ƒ)s]è\©òÃSðFØÉ©x‹ÄšfáÇ×$Ðõ¤j©l“Ç–²†ÞVRzg¥}%¡hZÞ›¢iZž•eá½bÐ¥§žò=«0oõˆO#¾yã­r^!ðàøiãvÎò/мN—îl§h䌭©cÇ,6/ Çnõô^‡kq©|?Ñî/î¯^üX¢ ¥³å¹wSŒðkå1Òª ŸÏÐ)â±çi?#ßþx³Å(øs¬_x¢ê ©m5²ZÝ$ 5¤S¶L·  õ¯uWVR¸8êÃ¥y¯Â [m7à—j‘BÞ]ÈqÔÊA'ç#&½;d œžÇ5öw7Õ¡Ìîì|Vbãõ‰r«"–`ÛYƒ õÅHÒ:`#'‘éL8 AV+ü<þµ [#’+ºÈóï©–g—r®Ö=qRy’ïFÀ 鎵d˜Øáø= ÀúRÚ¼©‘jy—a+ܬÍ(`ü¡ÏLsR¥ÅÇqœã‘Þ¦QÊèn¢”ÆŠà•àœpi9.¥ 73…è‡H84Ñ+Ÿî{äÔâÔ1ÇpGZSn§ mç¥G4A²°¸sÃg‚“íCIžàÕÕµ &G€2UºT¢]£ エ•H¡¤ÙMn[ ™;í°á²zœžµkìÙ‚©úu¤û9©ÏOj—8±Y”i[W´gÁq Øù¸þ¿ö—ï·ôäUgµ?ÛV¡±Í¼Ç?ŠÕ¡fFw}Njo_,€ÜüÜçÔR‰Ž@ ¿…8Z‡ñ¤0Ƈ$®{ûTÝ óX7¹-ƒê;Ó×wC!òjÜn:jF1… þ45ä8ÊÅÓ´ç/×¶hßyçTGžrÞ•2˜¹Ê’sÚ¥«¦™)x»!õÈ4„ÄHHüzS—ÈÇ(±ïS©µÇ1‚HéHw+îAÎó ¸ÇÊ[ç&§ ŸÃFå1óî)+m,ý; °¦"¼©'Ôš$Ucò;'¨ ML|ˆƒRML`|¹ã“Q¨ǘ¿\Q½ÁÇ\zQr‰ÁB98=ñG”²¥³îj%“ž‡zœ”!GÇ\â“-4/Ùæ ¸1ë@Þ÷”:*püþu:ù›Ì¨ÞÆ„6‘#¬o¨aŽAæ°´ý#MƒÆZýüvVÿm’XÐÌ-³Ë(ôNµ°%,YVu¤¡uý}—©¸Œ‘Ÿúd(h¸»éj0ˆQs£¦iå2ÈqØæ³ZéËŒ¦½IöÀ«Æ ÇAÍ_#3çE¦b££œõ¦¬™8!³ôëO†û‘½GbEJ×19ùOÖ¥¦‹Ñ­È™°בP¹”!ýØOsÐÔï:Æ÷ëT^S¼b@Ù=*¢™2h“ɺ‘xt_¥8Y\ ¥ß?ð*®.p›Ó­Mö²ÞúÕMHÎ.KKjFIÈç’M¾µ‰™ÂùEœ2BøÛ§ä?•5­&tÚ-æ#×Öº!F›Ý˜º³[JkÆ=Ï0Ç÷ºW—RÔ~Ùßlk¢ _ÚªbnG9ëÇõ­Ó§\õòÈÁ¯:ßñ–w6…Óí+àÑ(ŒuÚn0OÒŠ¸J:{ÝQ­ UkËNŒ÷ص«Y£šGŠÿìùQ/Éó€§ÿ[5ÒòÚVº‘Éõú­Ù£´×æ´“ÁÚÛžiÓ'ƒþ­±ÇzŸEœGà­&vé–ã;?阯 ø™á£¯|?‚ûÝzb¼GQ§ê2Z3™,tð}+Oþ(á·û,1­ÿØ#0K{4ÓÇ¿`ÁuÜ23\ŸS^ѤöGwÖoE_«?#/[DKe¨^j×S[³ ’bóÕ[iùCŽŒ÷¯¡<'«ÞÛøgL‹Ãž"²ºŠ;dhšª¡¼¿¹Ÿx П§ñ§ÃmêëF¿Œø£DÑ ¤ÒG%µÝÛm8‘þh9åx9¯®u=Ä:N›®_¥•‡Šì4ý2Ý¡’É‚ܧΫÉܸÝZPØýj ‡Á-Ͻ>^ÜÉû?èFÿN}2è½Ã4q.ÜÊÇï8ϨÍwɼrq×>µçŸ,ã‡öfðbCɈé倜âN]Íï^’#ÚrîÝkô\ºË OÑ~GçyûÍOV #†áÆ'-ŸÂ­‰UÉÊ\fª¥°fÉúT©µp ñÎk­Øáæe¼îù{mã=)Ã~àW뚎9bWvNsŽ”á"mÎ×äñY´4ÉòÀ†=úÓüò $#ŽütªO:ö¸õJƒp<ȿ֣–ûƒ•…¹@2A@O#µKö”,>TëÁ‹æ*änÙ§Ë|¬žµ.š‘°n# yéŽhk´ ‚0}׃Yƒsäî^=¸©|¾ŠJ’GçP鮣çkbà»@~æÓ׎´ÿ·ár¨1ïÅRÆÑÕ3M,;2ôç×irDjl™ïYµÛ\&1k7n¼­Ln$gÀÊ÷Ç­y¬?¼ wã ;OèW¼SDª’1%É\ãÂß•wq\$ÐÇ471Í ÑÈŽaêzÊ. èîk8Ô_-‘›—¦i»i Oâ:Ó®ùÿi<æÆwž=h̉D\òÝzñÖ”Fw}åç¾)‚aŸ¾3Û"¤ûFô"¥Ü‡„Q““ëK¸ŽA'Ó5ž †}Ni¾v{g·êZli¤Mæ|Äsëô¥ó=sÚ«ùÑŠ<Ï”|§ëŠV¸œõ,8ÆOàsNó‘Ï5\? ާ¨ßÆwöâ•Êè±çK‚7´ß:Aü_Z„pÜ3õëF2x䎞õJÄ&É~Ñ M;í _|õ¨Bö)U£ž´†¤Ç™ò{þty‡·½4`¯(ãv1RH»˜ò8ô§ÄßëM2¨$2 äu#îЧƒ»ó§àîÆôõ5lŒàç¡ã¹ç§j¸üÙ?2OõÑWÜzôô£'9ã>´€¶>P˜1Ó©D¤'2çΨsÎ~”ì¿{Œõ¡ LÐ3®>ñu¦Õ€2~5H±=óÏ›LpGÓ8¦ ˜å7cL_ÂØýð_ÆŸö´ÈýèÇl·•„Î FqÊÓ²¡;W#Ž(äDªšjh›˜¼Â7¡ãŸš\D_;מµž$P1‘MýË6Æp3Š|ˆŸhi‹˜²J žÄõ¯‹¾)~Ýÿ ¾|^×<­x[âN­®iS®NÓãhvpÁ¯¯Á·?7— `ä WóÍÿÐßÁðP­cPDóí¼C§Å¨ÂÒ1±ÕBÿùy÷®\[•8¦W)£OUÂk¡÷uÿü?áô2²X|ø£| ðó_X@­ùËŸÒ¸ëÏø*½¡fÀ=J3Ù¯üSlƒÿ!–5øi‹æyÙMµ”c=ÑØÖ¬Kâi„%¢6¹ê´?—-\Qu>¦9>×äü_ùŸ²šÇü[ƶÚf¡w§üð4[ÚK6n¼U3¶6|abÆxÇZýdð/‹G‰üiâwŽ(›W°²¾ J'™n…Ï$žµü€Xkú¥ý½ÇœcKb<™dò#7 ÙÉæ¿§Ï؇ũâÿø&¿Ã-VîHîu}ÖÂõÚ@Ç͆2­œp{WN¬¥W–N瓜`©Ò¡ÏÛSëSz™9R=ê6½8úR™íÏðÆ; ·ZŒÍlvÇŸÏì(ù$äûŒmD`à1ú¯ßí&ÊgŽiÆò €öSòž™éµ¢‡O1¨ãåòˆ=†h7®N OÈç+ÍGöØCu½ð*»êÇ›Þj–ºD‡W̲÷,ÅJÇ9?ìŽ*9.gÿŸYÏ ÅRþÑ“ÌZíœS.§xv€@Ý"´ö2ZØËÛ'¥ÉÄ۶sg>£Šx7…¾X¤Sè[Š…µ ÷e‚ç¿ÕW»w'tÇUâ©R—a:±îlª_pBÎ[­+ƒËȃþëëXFXŠàÜÜzà1¨ÿÐ6a¼×÷$óBûâшáŒþöâ%*?¿Gd³¡}A0Xp²djæ³§‚ ‰óþ×5$sY­ÌabQó>^j¾¨Ø¾°‰t{Ý8xOMÿH•³oêIž+]/,;'|{b¹æð¦û¤Ýäsǹ­/¶¦2¨rGQ %â´ñ)IêtoµRH‰ÀÇR¹¨_W#Ú»y’e{ƒñ?ʰ^é7d—P9'Œb«yâHebgl¶…Gon? ݬ_fujØ·24<„¹;zz~˜©¶†0ÈÃŽ8⹟1IÏ#¹ïM2ªçžkE‚]•÷:VÖ×<ìéÔ­y½¶£»ö¾Õ®•øC!S‘×7 [Ó\m&•²á¶ÐqšóËEwý¬õÙ¾Ñ"ƾ¶_# ´æáÎìã9Ç•|%5ËnèêÃb§i7ÙžÐ×ÌîÀ”’vf¤ÛWk¡‘HÁؼå½pxëNÞË÷]±Œõ®§ƒ‰Ä±nå^oø|±md"vBOû1Ký9®šÚæ1£éë† -böyÇŒX:î,ÊáO|[L \ÔüM ø_ÂöWæ§”kgÈIgo‘z(ç̨Â_3¶‡dêNtb¢®Û?´w{]bðÃ'Ùæ“÷¨w…P7¹9&¾ÎŠ÷S±ƒX{yžÞ4Ó¡rˆØVùIdt#ñÍÞ›"ØérÅ塹…t‚JÎþ³š9ãðÖ¹Ô"èðð£ ä??Zük&£ >çîq³œ·?D>O5ßÁ_ \È%šÄK/—\³3@»X¹Ë€ñ+Œøzøàð>Sý–‡?‹Whù•²1Ûú¾ÿ³Óô_‘ù^9ÿ´Tõ˜ò$Á*vž«Í97™QÔ–WÜ *Œu,ÀSùWD¤’mœj-»´ëó¨hv—é"2Ì„’ŠTd1ƒÏj¾%`{Óƒ\÷‡51«xjY¤GŽH¯%‡iÆHV ;3[ûcä‰îõ®|-uR”dŠ­M£DÞcàääwÏ¥!È”9>Æ£<—ŽGô£g«[x¯I,/u%xÐðöš‰•0:ƒÓÓÿ­_7Zž:º÷«µä•¿àŸa…¥—Ñwß÷›ð?÷†9t ËKÕñV¤Ý°Û]›ôS6âZEf !Áã×5è^ ý«,4zO\êþ×ntÅÃÛE?•åF݉A ±ÜÂ2>•üÕÊ#žc$ñÃ<¥‰g’0ÌÄœ’IêIäžæ´í¢}žS¡UÐ§Ø Î†[^“æy\ìÄb0õcË*±ýhh¾ëVñI3ßé‚LyRl1Hux³ÇÔW²iÚ†™¬Z4ú>¥§j±¼Ö³*}ƒìkùÐ|wñÃªë ø£T²€:—Š)V ägŒþD{×èì©7íñ¼kâ /ŒV^µÒb‰¾Ýw ÝjsêRÁŒQÛÈ„y[@gcÍŽÕêÐÅc í6¤½,ÿUø#çñyV ®h'Å~ñ? Ÿ(ä’­Y»Î=qšâ<ž4·øG¡Añ ÷G¾ñdv‘‹É´Øž5b¬Ne<–+ÆzW`ˆ,›OLŒŠ÷"ܕϒ©I4Ë;yÚG®iÛ®ä•TÜpp’ q-ýÖç©"›M¢,ÙhE&8‘qô§,nzÌõôªy$s‘õïIŸ›æÝüª- WFˆŒcæœö£b€–3õ=jоGG8üià™Ù!㸩qcS.t'iLúš\§/~pMTÄ™â)O8CK²P¹òf÷+Ö…Jv-„|ýøÇ<÷¥ò˜äî@â¨d9r#÷H£úÔfö»ý*Ðmë›”~¼Òhqºèhí;Æ[ô 'Í÷—ëŠÈ:¥š–/§¢¯Þ&ö>>¼ÕY5ý Þnµ£¦X¶£ÀõëJë¸r˱Ðm8ëŽ3NÚWÊýkˆ—Lj'м0„ÀV>ŸUÿ……àŸÝãžbã+ÿ4äuÍ'(2ûÐýW´ÜÏBÛBÞÇš]‘m?¼Ž™¯/Ÿâ¯Ãëoš_ø]O#‹àÇ“œt³ÏÆ_‡L_,ÒÒw2¤¤ ’8äy5›¯E=j/½,&%íJOþÝg±„„X1úõ¥Ä%~ö~kΈÿ¶~‡ðë⧇¬~ëÞ>k†Pot;èD6Ûˆ ç‰YZ2AÝÐáy¬ýö͸Ô>#Ûh÷?µÓ¦>Ñ>¥¥k6÷‹k¸ÆWåÁÛ’ £šY–Ϊ;!“c§ªOð>ö&$Ÿ­Ç·ƒ‘õ¯¸øíá+Q¹ì‰$~aÓµDD|åýò+ÁôOŽžÕu›ËmJ+ [Cn²¥Íìñʳ;Ë%X‹ê¿3g "º‡ø¯ðö9•ÆZHÝÊ…[ŒðqŒãµtRÇájGš5ßoÌçÄe8êrå•_Òÿ‘éå#o¼ÒJM†'.zòÖø»ðíL`øËOÈ <™;ôÏËÆ{P~.ü8ü&rýËyXžqÆžx­–3 ÿ?c÷£Ÿû7ÿ>¥÷3Ô pnk;Ó Qv ^Pÿ>#°“Ä× €I?Ù³t[îýÞÙ¦Eñ›áäò¼pkºœ®ŒT¢èÓî.â1·°æ’Çáü½ÞŠYN9ÿË™}Ìõ‘gúó_“ðSŸEu¬üñ‰´7Ho.4‰ÀkC"=BåüE}÷7ÇO›yÞÃRÖµ9’0cŠ-2D1ás±àÅ|CûcüMðÿÄÙhóhš…ž¡oâ;;‹{wBë2¬‘|§vpH5Ɏ̰s§Èª&ÞÖ×ò=\£(Ì)WU’Þú~gᮥáí3Oñ,ñ”K—LŠIÚN@üxü*¹µÓÕXǦØ üÅI#éÍuÞ-³‹Nñ•Ý”~Ah\«y$•äO'ÅrÀ ϳ§(&Ïr¦*q“GmÿEò|ºÕôYt&´ómæ¹¶–íVT%ÀWlñ~o½Œ ýÃÿ‚nköðÂwž¿Õ4[¿Yx–è X5dy!$”e pØŽ„s_•¾ðøñì‡ñ³K†Ø´ÐøbÖæ*0ÎŒÍÁö W½þÃze×칯ͩéÑ_Á'‹$†ÑÜ e—hÉÁRœ©õæ¼Ü>a5¥6¾ÔêÆàe‹Ã*Ië/ÐýÛk€$+öeCèíƒùS<Ò~è…9Ïs_i?µßˆFñYÔô ™´ß²ÝF"S†1͸L¸é’Î=«Ùãÿ‡`ÓÄ—Þ½Žu0‰’ NÝ‘|߸Af©í‘_G‡âlºkYr¿GþGÄâ¸O3¦ïó/&¿+žöÒp32÷à UvbGÞ${ð6ý¡¼8vyz árö¨­lʃ,¤nàÖYý¤´Imí%µðêÎ.`’XIÖà–3‡ïÚ»cĹdåçàÿÈâ|)›Kþ]~+üÏ£ñóprIïOýà îÁ+å÷ý¦4ÄyY´("À’˜Æ¶\9ÂýÔÇë\g‹iÿl›è~ G‚cÄ××Mx³H@eª”8äžGÓ“â¼·e;üŸêTx;5Jò§ošýö¦%9Ëi¦93È8¯Îý/ö—ý ®|W¤ ­+á̺%ÄÆFšÃM’C,¸˜ÛÎÆvää#­}%'í/áÈæu_x©£ æ.dISÐ€Ì üBâ̾îó·¯ü —þ§fnÜ´ïèÿÎÄ_þ1øáW‹|)ceáßjº~·8…/5/=›Ù¼Ó ¶Û®2 œ°{ןj´_‹SÇžÐô›¯€ÚðÖõt±¸¼ÒüOuu–²Í˜”•bk·$»¯É]ûD|QðïÄ'Â1[xcYѵ ‰XO¨ÿy®6)F=ðp}+Ãü ¨é¾ø×á vûL:–«Gw-¢>`ˆPIÆrAçÒ¾ 8ãŠÔñܘy§Ö½¯¿Ü}–]ÁÐXdñíQ'§~ÝOØ™"‘gdÃd¨ëúæ›±ÎAßœôÍxn‡ûT|0ÕÉþÕ_xnbäÉ%ÅŸÚ!\ž¥âÎÑõ¯hÐç*Ü`“’+àÏßéâYîþ%üh¿ß°Š-*ïUHô+¤;6gúÌ=¤Õ®ö¿åþGT8kê²öTÝì··çØÙ³·!ø{áy4FÚå Ý*\¢1I͹7<:2ç‘×­}'+˜ôíV7˜A3YÆ» dä^>u ‰>h×pÚ¦—T’# xf׋ ã£ƒÍ{~¥wö^,k¨"¸Eµ‡p|­ß­|î6QV\§±AË{Ÿü?pß¼#!$nÒbbõÍv2pxÏ5Ëx&?<&aV#¥ÄQsÑyâºä†vݦóëÔ×éØ)[Eù™ã¢þ±?WùŒÛžÀÈÍsž%¼:}ª¶Ðu!ôH¢<û|εԛk•1à“ì=Hô¯ø¨ºšø×Dl×fs¡Ü¹Ýæ9 ½6‘×=js ü˜y? ÁQu+F=ͯ‡b6Ô4Ù ,Ѥàù±‡éùשO(o­|Çàoíh~(øsy»²†ìæù…¸ˆ !‰…ÎÞ™$Jú{ 8ÿH·“¸^nA]KãÙ® T&“wº@ÉbT{ð)Ç* Êö蹦@qö‹|ãûÃJ¿¼eUž6cПƽ×#Êåbeöäã ý*­þ¥i¥éRj•Õ­œ~i\*“ýÑž¬{^g⯋Ñe¾Ó´9 ñ_ˆm×2[ÛLE´ r–`ÎGÝ\Ÿ^9¯’üK¯x¯Æ­½Ö¿u þ²‚F¶µŠCj„ðb‹vÞîÜŸÇóù¯að©Æô».ž§Ñå3ˆÅÉ9û‘îÿ¯Çó>°—〒ê;{‡ñ%»Ê•æhÒ|ÙéÓóÏ 5ñ—íƒâ˜>)þÏ~xWNÔ5SâËý-"Õ Çnmcû@q Î¥£ ŒœñT¬´K-OdºÒÞÙÝ)n®¬-Ï˹Éäò{:µ&äËâXX\Ýß‚ÖÉ, ܪbe$‰Ðýp+ä¥Å8ªÐjI.º/ø,û(ð–„ÓƒmìõÓï²üÏË«¿ÙÅI]Ýø‡ÂÖžaÜbxÞ"Çî¶Ó†$ñŠÒ‹ö/ñ$6±¼þ%ðí¼8åÚ8(zäóÓÛ¯^kõ*KI,m¬`šlJÙ(fu¶Ê8 "_›ÎÒÇ$œâ©Û ;;B5»¹d;y:{ "LpsÓŒ×L÷oø#ÔÃå´*;%ò»?\"€ÚI¯²/n4ûÉZc…†õ#Ëf9Ï ^9§&Ÿ6£¦¼ð¬âÆEÃÅ<~X'+’~èÜ>~zõ¬'ãy•§ø/ò:£”á¹”vógË:Oì#áè´ë¹nþ"ê—ñùehV4XåÜ(Up@ÈÎsœŸJú÷öwðL?¾ê¾Ðï×ÄVz¼ð¾£.¡3ƒ”™¥®±ÊNéÖ¬@SQñN»ÝZ6“cn‘ÙFÁ‚$§ps£Î=+Ð<k ¯ˆ5m"-®®ï¼#xêË~ý€W9ÜNX¨lgƒŠx|ÓR´W?^ÈçÆeø8P›q׿{¥ç|V·\?†´$cf¹—i,6ãîöõ®Rë⟋lÀÊèÛ2«¸’xïÉíŠò{˜µjÿò=Ÿõw-Œ­ì?ó=‚‹nuV·]sÃq´D4Ñ[è¡T¶Ð[2áFxõ²n~,|GmF;9³vЧğ»@²Ë2ÜjrÀ§au;TmÆ@=Èn:VaÖ-¯4–¹›Q×çŒÄe„Üø‚à¼ì„±`žf@<ÆHzdÕ¹R›x¦¶–ÇQÓ‹FÖ'9<ž6Éo é«۳ήê(åTë|ÀÉ·!vd’qÏi–"´—Äß«& š÷¼•¿C›K¨m`±Ôuµ•‰kf¹–kÁ n`íŽs¸Ó?-lÚC¢}¦âÞM*ß|p}£Ëh‘Ð}0w‚ßÅœöqœ5Ë}]Óͳ³‘¡Ò‡“‡¿!s°2§ieÜAàg“Ñój×gL:f”šyÔä‘“D<Ȭ°r࿽}‡hAÆáÜóPáÍY²ªâô^¥Óe¥ß\øbÆÒÔ€…äŽ0¼œœ…;ÔrNy Su{KK%·¹ÒôM=™’hßM Kí 1÷@9+ÔäcΞ‹À÷º}¼··ëÆë“3ÝÍœ#¶Ó•mß#º:ô›T–çO¶·ÕåÕ%Óž`_²Në ÃôMÊpv¶WŒìrÇ5”h¨=YU1~ÓH¥è®[×îßMc¡ÆæEò_:G39Àé¸  výÞrjä7w÷zÄV÷ÖV6zŸÙÌŽÙL>frÙˆÇB/«ZeÖ‘s—úk;)fÝ èÊ„1?ë–å‘ò0>è>¦£ÔÅÕ·‡eº¹†hÈ×Kœº8É,GÞÇSœæ¦5[z"åJ1½"½´z­®š³Üê7íu4å¯|À²Eä»î!QW<06à¹-ÅÄ÷óÅÎlˆèîdhŽðÍæ3Ø. pC\ÔZ¾§uãX-¯¦VeŪHbS‘¹¶3 ÉÎÓÊŸ¼ÕV^MÕ¥¦5χô¸¾¹¹yþÓ=ܬHF%—*1”Úßq~cƒŠs‹wrdÂVåQÖýÏ&øœÿÂßÔ[çwXQeyŸÍf~¬w㜞xàtíZ? á·¹ñF´’$(ÃOR°f2$aèGZç|i¿ü%ê,ïšþÔÙFÑ Œ[òwB;íSÓw'9­¯…åx£]-0·Î’ß¼-„8ÁÏlWƒŠoÛR^ú«×,ž}ßÚ-­íín"¸ s¡jÓJ‘¦w9\œ°tž¬Tvª—Öo§EsåÃu.—tê'‰cêáÐ4‡©Æe`:Œ/j’ ­cQÕåšïOM7P°¸ŽÜ[¶í;S*N3€™'kêßNŸS›U"m_G2‡»·VbãÃ.@‘°xÿVa^ʨ“Ô¸Ævvi0s¡<ºµáŽ;vò®¼@¤’€9y˜nÝÖ01À5büÛÁ ¥Åæ©y5´'ž ²†º3(Q„ó# qÀ,µ=¤wWpÚÈ-E­¬âi~ÝöÅR|¯9]¸\'îÓødíYÒ [V:ËéÐË~U±`w•âÚ-ØäuvnOqDg.çDÜdÞ—×Ëô(Éy%ω,l#++Ï#È׋<±5œ»vƒ—8”Ÿ(è§<óV,-d¶±6×ײ–Qí®§¾)5ÀÉ[uhÆa‰sŒ‘ÔäU›3U’)\îÞ{VÙsq1CÆÝ4¼fVùCµøé\æ§i,¾*X|å›_¹ˆHö6ñ‡X®G•Y³µd¯PNTö­9º#Á4¯¸jÛéÚ½µÍæ tÕgܳo"Vó&“ï|Û¤ÀÈ;Ob¹©¯ç]:™®ìd7ä2‰ÈœÍqÄe¾òD¸A¬˜4¯ø–A¨êã[ nLà£|‹ Œ/$îi:í#†ëÎðŠt»=eψ$¹…È2JË»\·ú zzÅx/޵ûÏøŽ}Iã›ÏײvÚ"Œy’ã'%Ë7}+Ù.| ©hús[J×Åqy$ßÎ Çö{a´½Fdõëœò+6/‡Z¦›â;-Eô•{­Nûlû”Ço-Äìp¹o,@·ZöðJ„®ï¹åcêUšn*ÈøÃ_šÚoÜ´ ,H]ˆI$Þê¹Â†>¼Vlœü äþuõküKŸj—ΪCy.£2%¥Ó´{ßç•£r0Ù'ÔÅz_³wØìíMæâyÖF–in\ºGkd#“£Êär9ëÅ{±ÎpЊNÿ‡ùŸ=S)¯)ßM}ÈÓýžl¬5‡^:³ûÌ?ÚZv÷O$ߺe’B”J°s׊öÏ |4Ó<ðÎÑôˆ¬t­>þý4øàb2§ÊV=A ’wàMaü3ðw†¼ c¬ËkáíKOºKx-¦Y5»‹“„n`é(pù©¯VÔÖÒ]ZçA¼¾“S³·[-2âˆFvîóeÇfÏBx¯“ÇbäÜ>Óü§Ë°ó§+Ëì­ÎJ6æÛÁ:Æ–ßd¾Ž}6ÓF6¨¢/1¼À™Q´¨Üy'?íVnu+à‰mjËòk;RXìD¾ZÚ _1K)Î8ëÇÖµæšÚïÄr[Z«Iõù/Ä–ëûá(d6dœýk:×Z½Ã¶S[Í•6¤ÞÝ€% ×&g*§ÞcÎ<ƒX%7æt~ín’¹•¢ë•ÌPßê—qæÞ ËÍÐØ*•ßòã*2w’9 ž+²™î…®Æ—i$vš5®–¸uÈóX #9'8ö¬èõ6}'PÒ.!û&¤úUŠˆa®YóµzŽCvÈìÕ­BâæçÄÚÞ—w—Uæ¿k¼Öl7yŒÃŸ••ÆA8õäŸW`Œ”ed®7QÔü›Ûß´ùW:‰ñ%¤Äÿ¼B"E* Š—Èl={UGñdÖºþ—©H‘BnuÛ¹ìÃÅ匄dm’`N'‚sš¥ðýì®é–RJZÒ?^\,PF\Dr Ì#ð{õ5¡¡Ú¹Òü>5Ók«ZÁ¥êÚÄêÛmÕØàœöÁê¼r~´×™¾ÈãmuíEtý!,Z=N¢Þ5í´ä:Û,Ž2!dúŽßwœÖþ­'ö>›¬›kíFímü5eæ\NÀ¼\\ {î sóXk•e˜ÓLw\)QÑIù@ ƒ‘’r=*®·­èÚ>‡¨i>/¶{ýSÃÐç9BâWIž1žHÎjç%d½Ù^_ˆxÏQK½^þÔyÚö1"Á·ç§ϰ?…dxRØÝxûD¶cÄ·©# ç#§¥sZ–¡wñ{‘¬Ýê^’Î$²ÛevÒËå‘÷¼Ê¿t©ùvàŒœÓÚYX¬vÒê 3á#kw·ºb@Y;+'&¾g4¥(âÔmظVN.W=’ãÂÖ²:YÆ#µ³éʸ#ΕAc•p03œóÛ5Ê¿ƒu‹½RÞkmKHv{©-쥸Ò^K…(Hq½dÇê*æ™ã-ÓEÓáÖµ3£?¢êk­\¬WVû”*$Ò‚Q¤,Uw)`I<æµõ?Ûézd2SLÝ¥x¡¤’9åD–Å%îs…`y'9â½ùP”en[šÓÄ©Bêv0®t?ˆÖæYtß%æð}¨Çî0²Œc¸í\¼þ"ø§j¶÷=ºŠê`Z(Æ‹«¢ž9Ä¥IÐñ[—^=²Ðtȯõ¿iéºN¼×7væî'{K9Ë<ŠÙ"6!бùIÓ¨þ!x3Eý³ÅöPÚGª­ÝÅÅÅÃ"E§H2I,3ë^Œ%ñQ¿Þ¿Vy•V½ÚÖ·£ýÂiž<ø‰{)¤ùÑ­5X•°výã&ý;Ö´¾+ø×g @’x/ ?c"ìCg!>MÃàpøÁØ óÀ&±õ? ­ygÕi aæ[ÙiÓp °Ë´ŽäЊíÕe¤é5÷¿Éþ‡™RXèë ‰ü’ü×êyž§ão˜Yµï kQ-¯|Ey4Ns…!$B¡¸ãƒÒ¹hÎ-îxUEù÷ç8 wÅcêÆÞ/Š—“ɧ$fÛNÎh !c»±ã­zÙø7i(ßïÿ3Ìy¾aá)[ä¿DZ‚ÎþhÖ}_hÀÜÖÚ–-"aéçI–'žªA¦Í£è_ÛdžŒu+€~Ç&±y&£$Ç#æ çh¯5ÅÙ|SÓN©ðúÞÇÂö—ÑëzÝÅ’Üꜳµ›$L$ ¯Ÿ/œ ñ\÷‚¾-ø³Åz/†ï¥:Nqw«ÞZÝÁ¥Z,0˜â¹1.7înTsÏ$ö¯J–”#xÆÇl]zß“?Ðúmü/â‘g!¶µð0ò™NZЈÌ{>p¼gvsƒÒ«ØhZõΗw2[è÷=ô*Ö;PYEÉPÈ”Ž¹â½ám4ibÛpÁ-ÆÔ?'8¯øµâ½g³ÇÅm{ÃòM¥jše¬Û^\[)ƒ”¿ßàzç®2¼šLãé{—ÂÞ+2'•áoÜd²Î$‘?)_ÝÙG÷¬›Ïxá/`ð„îa ¢6y-Æå=r |cõ¯1ý—¾0xûâŸÅ}[Oñ/,|E¦ÛXK*ÛÛZ[¹Y0XǓѽ«îK›\XÊÁbGƒ³ùÑÏgngý|ÁÇû¨ù¦ïFÕ-D"_è"…ÞæÜÀ˜#–m'ÞÝßVÖt‰c³»y~Ũ۲<’ÜÛ‹PçœîËI#æÍxo„¾5|@ñ×Ç?xvÿUðäš&‘«IgVšjFc„LѰsæ6X¨ Èä㜾5 uƒÃ÷“`´‚ј.Ü®Tg§§µm)$µdI5²3xßìÞmοá¤Þ›`û äc™‹I€òäžêãQ°¹ˆ}ª)`Avd*L<`§6r>cŠðüHÖ4Ï‹¾’ÿ&ÔtëiìWúôq6@Îâ¤ciÏ<ç‚1Ь>7¤Ô*¿¼Â¶ §V”~ãëû>>¸³k¥×´«‹T>S½—†‘·H:íËqž}«?_ñÿŒüEàëëkÿO´‰DqiâÇ7Ü;ÝFqØGQ_éÿ~ é·Îlþ£Z’Ä,þ DÎ72…]¡ˆöê*[Ïeµo²ü-ðbêŒÍ©ÞøŠi§éÀÿSÉ“ž`+xâ1Ò^ýwn×9ªÃ,Œ¿wA_ºGÓ–dÓ¯`û*:Ú¢X ) âfT+cv3ÉE>e´¿Š+ˆS>¤ 1»d3„è‹‘€ ÀçŒzb¾>‹âÅ|Hñøwáý”Œwê×l îÉm‚02F䞀çµK/Žþ0Íek›_†¶íýÔÛn¤`Ø<ãrã$î#<ô®YQ‹š~Ñ~?äkO£œ_áþgÔ^d‘\Zj—v73RK(WÌ ÃÔ·ÞÀät'©šHÓ4ßë¬#{$h-ZgLÍ$¾\ƒvÑÆ|óÇa_*x‹ã/ÇÝ?J{¸µÏ‡–²HÂ8RßÃsJ`?ì(“$žyèéÅCá¯4Óü¢x‹Zð©ñˆ/u?±êÖ6aˆ$Km&do5Á98!ó†8kJ9t䯿ò*y¥%£NÇÕ÷2XÁ­YÚ­ìãq¸½*eûÊJº„ qׯãTíl_JÔå”ÝCuò¬žLÍæÈÀñ—gåNH9=>•ó%ÏÆ¦¸é£¡èJÊ'‘@ˆ©—÷R`38W sÜWK}ñcâÞ»ad|7àÙ%Ó™Ùo$’ÎÚÜ’Î’b2ÒevíaódaÈ®¯ìzÍ$ÚüÈæy½8ɸþ‹õ>‚¹¼¶¶‚÷N×l ½²Àß&Ÿ7š  Ð9#<µYÔ&µ·ŠÛYM2]BhcW·Šòè¦Ç=ãn6íã×µx{üNñΟt’Þø+⹕ÛZÙÁ§ÝÛ‚$%Qö9 €Ä`d “ÅEÅOÃ5Äi࿉“"º Pê»—÷l„¿8-µÛ=³Žâ«û¬´r_‰0ÎiSו¿»þ ôTîbº’Þk5tš!5ÃBK ÷yàžOlc«qjrËug-ž¥k$dªŽŒÇ…HÕ€É''#8æ¾K‹Ç¿VÂhßá‡Ä©­^&–çS·™<‘ ,ÞnFTu÷ëX¯7Ç fßPòí£Ñì”2×Wñ:I9ŽUO1d+Á"Œƒ‘®vY¿šß&cö.×þie\øŽöÞ† ôØ%g‰¼É–3$Û¹#î{g#þZî³q¥Ù¬º„X±·DSÝDì%mÄî«7#±>µó-Ưâüáÿ;Á>}Fe¹7O}âò<¿ß®Tï2GYGSU4èµcÄ3Ýkžø/k{chæÎâo²]K²,’a‚ÈœÄÔUÏ&Vås{tLQÏgÌ ž½Z>•mz-elnT·Ó`H¹Ô ¨²mW1¹Ÿ•w¤‘œœVm–¿k{¦¬8‚ïDŽuÜÑßE Êšݹ·ÞaJõ$òq_ O^°ñ ]Jøa§j±Üø‡l¬¤îÞAˆËúȬËÍFêîs>¥|"¼»Šus6£¯©XÞ,?tNI¾¼õ¤²J)Ûýżþ¼ãð/½f¾©oáûË¿ñƒ¤Eq# }:kÅPòƒå?BrÙT‘ÆH^àÖ Öt&tŸÄQ1¤zŽ§Ì®O”ÓÉ1 |(©Âðk廛˫o‡ðÝksüÑ¥ÕXÝiòÍ|Í Óg™7y`¸,Cqßó¤·ñÙcµŸÅßàSí¶ÖòÎш×,Øãrgæ9ïÍ%”QŽŽ¡?Û¥µ4½?¦}`¾$ðÍÍÜ2M¯éÇQcx'¿X`À")™ŠÛCR ÎHg5»¬|Að߆ô+„Õî­âŠÄÉ5ÝÅÃÃq—ñ»;cIÝœ+⣩Ãý¯i¿~-½„BK»›_Ïr$=Bù ¸c‚qÜT-n´[Ë›eoŠš6ÿ;lA~N¹fa¸ïg#i'.O\dã</z{ùÇüÊþЬޑZy?ò>ß³ñ‡†$¹¶ŽKG€$#}Íʲ¹E 3 6XÆŽãŒY‰ã_ èö‚ÏÆ¾Xíçuò­!'Ë’4ß"È2Ao%ƒŸîŒb¾ñ ®“¥jîšž3ñ4ú´ ßk¸±ðr4S³ à$¥J²àã# àô¬//†Ÿá¤¾![Ám\fÁ¡YÅ…¥ËÁn-Òßx“œsžifa®ïSòÿ2–iˆIZŸù¤ZoŽ4[í~æ95¯ M¨ÉkZuæç]£2Åóu%ãÜN1€¤df¹ 3ÆþÒ´öû‹­dŽü%ÇÛî!’8¼É$Ùl \,;Œgœ`žµñÜ"ØºÜø»ãÆ ²Iœ‹ -dD1éÐtíWµ)l¿á$Ÿìž"øËâmÑY.¬¥Ó’·÷‘«©P1‘޼dÔO „³^Òþz ÊêIòÛïýQõÃüBð½½´óézþƒ$ÊÌæk[·XY¤¹,y&92¹#©'êüÿ¼m Ó » ™mRx™5—bXÔˆã\}ñËŒç–M–¾ušzöëÌŽnxØ„`—úqÍxPI0øUðòÒã–ó§Ô®¯ò0r¬£qí’y³”0p…ý§çþW4xšó•¹6ôÿ3éKŸˆ›MµkV¹2%¥Ä±²[4“\ùrmÚ Ýó¡<2‚sX´lúfŒ-íü§V`ÌfM½2r ÑI×¹ßÔb¼VúÒÚ]RÎÿGøwðÓJ¼Hn®/ôqu+0à˜Ø8Û3€yæº ZÖô­^9§Ó¼}gl"·´ÑRÍ‘¸Úwå²È#äzQ—§i]ÿ_y•lF2KK/ÀËо"i>+ЯõÉÅ—†Q®¶Å§ÝÞÃæÛÇ´`9 ‚IÏ<úVáñ³acï…·j6r]­¾³6ž©pÉnyA;wŽlÕ3«|GÔ5$_YZ¾ýéz e“·,¤°cõ­Ox£ÃÚ–™sy¬ü<«ÃÅn–ÚÜÖ°N„ÿEŒs“÷IéÚ±¥‚ËêWsæwìÖó3©ˆÅF6·Ï¯èz¾Ÿñj+«K©®ô(4ÿà ± }CSH•ÇÎl9;‰2EübÖ¬ü-ýŸá˜|!±ƒÿe¬šÀBgb~ÐÏ'–vÆËÇ™ƒ» Q_$xfÛMñW€4íZ/ƒ>°²ºÜÞUß‹/np2@ 6FGNÙ®ßWðÿîšÒ!ðKÀº6Á¯%ÕšG~€G€r¸ÝóœsÇd©å´äÔºo¿ùj)b±Õ"Ÿ}´_æ{‹üoûGîÚÛÀ‡MŽxþÒ³jíbHñ埂D"RwÅy¶ŸñòX¬µ;m|1{©ÚÛÜE–ßk‰d|¤o™“Ë?3¹7gŽNÒü5geqßþÛÆ!ÿCŽÊ"ȯé.õiõ^j(¢³‡Vû]¯ÁŸ†pÞ…^+ÈY0Ä|™ýz Ÿo–®Öÿ·¿È\ØÞïÿ%ÿ3Ò!øó¤Iâ]"Uñ„nmÜÆ¶éÄ¡^(x–&Aü[òWJü©j_ü9|,ŸRø©ðö#·SHÎA+™ù8ùÉÜŠ@lä1¨Nƒ”Ä~)>'±µ¾Ò< ú\J²\Ãe ªNÉ’¤Fìø Ó’=k[VÖu'×ZOxsÁš}“ ËêBK>üó‚„ b…W/Œn­÷;Ž¥Ll›‡ùšÏÅoÚßÝ4<#2¿Ùü¸>Çq0FŒåãP¯ÿ-:ªŸ˜IaÅPÔ~3Ϥø….´)¿á ¹Všä-¦‰,l"ìØí‚V@Cã§{×O±ã(üÒ·ž·î­¶ƒwêM]ÿ„£Åc–^|që&mu¨#Ž?³Ç‘òy8!Ï_˜ÑnOUøÁ!¬ZV‹ÓÕ‘çºoÅßx\Ä”Ím6öš‚纞?%ËîwÄjÀ1™†Tð5íþ$Ýê©pn¿á'·W»ûSØÛxôÛÎc\*Èò¯+¹· ¸Ú@äà×I‰< \üOöó"O>ÍÈ#?2l“žsž‚¹Ky¼i>©¨Û^xûÅ×#]’}¡Àäü¨%™`¢®¡¯§üKˆ’årvõÿíE‡ÆI²¾"Ë4sZÍ.ŸàéˆvåŸq\êG ÜVå×¼Awfâ]âÅÎE¹Žâ ˜d,sßÐð;i÷מ*¿³±‚OßX¥¯ tïôy&à ÈFwzôêjµ½¶µ±o©§‰üA5Ü-½Õü²FÇa£Ü‡=1JY®›à¿Ëþ–oñÿ€V>5ñæ­ww{aàÿ‰ú‹Ot$–æúÂ4º ­’HVÎÕlŒ¦£¸Ô>']½¶øgñNßQæøùš®œ-Öb»q´ÊHÔ»ÐÕô]OÅ7Õ^ï^ñºÌ2)°½šFP8XÕö…89­ÿÞxÓã‰/ujÛYÒ&‰ ¥¼“ÙÙ„‰‹¨1«í–\žXåHÀ9W§†­‡­n_MÉ5Z—»Í{ï«ÿ1&Òþ0Üŧ^ª=íœR¥™¾ñL1Æ‚V%ìK†Qœ(9#ûÕÉ赫[¹n<#¤ëRZ4š[¥ÿ‹þÎ-°b€¬GÍ#‰Hzî|Kð–Û]ñ$ºôw¬ï+4‹úÕå¼{È´Q¸NqÐ ¸¯7øoð¾ÊûÆ^2¶ñfìÝY~Ω{+ªî[oÌ~lgïNk¡8.Ÿ—ù©ÊÛþævw~ø³sªÝß¾‹à;IîV%ž$ø2±å²í„pO. ã=^»Ñ>"ÃmeŠuÏ Go-ïÛmá>&¸XVàt‘ »Œ@v°ûÀä×p~ø&éÙî|?e$®Œ†F˜moÒ¹K° ;M.îyuM?N&Ê+ÖT ¸Œ0=ëÏÇãa‡‚“õ÷4S­+'ùÿ›9K'U±Õf»¶ñÃ]ͺûR5¶©pˆ“†‘¸;‰ê3´÷š€izÏÚ-qñƒÂ¶ní<+ýÃ4O.w²–“N~á=WV¾Ó ‰<›+EÀ!JÂ×µ9ô;'¶hÚÖÐ)ÊàÆ?ò¿·“ûü«êm}¯Àó˯éך¾‹aÆ],]@ì¶±Co,„4„îU;ðçïlR7ƒ<1¢jñéž!ø—¢iÿf@±ÛÛi"Y Gä&Xlr1Ïá]÷ö>žš<Ö‹mj°¿ÞclzÕ¤XÁl‘¥¼(‹Ñ0éUý¿m¡o›'ê/¬¿qÐxkáņ©Áñ·Ä†"8 ²ÑwFFxEÂO·&º›ï ü9³ÒâM_â?Ä«XnX*´ÚiŒ¶>o“ ‘øó\lje²±¶²šc%¼Ü©‘¡$8QéŽsQé3é:á’ïM½Ôo„W[&7;ð¬AÀºñZÇí)º²‚ºõÿ3 Ðpš‚“×ÓüŽŽ5øScH¾8ø½zÑagÓÃ’Aã,Ñ’ÇýâEhµ—Ã+íQÕŠ¼wªÝ*²µŽ£sökÛ×^@D  Ïb³$Ó­¿á&Ó)Ë$€óÜk£‹L¶ÆÁŽy¬¶ê-â¿ó4x(­¤ÿò<Ú[O‡“^Cq?Ã]N ,SOâ%GAœã‰8ë[‘_|6Ñüks£øïuû©òÚ¡©ÊÆ% A‘äù—=ò¼óŠì$Ò¢/†cÿhôéXòèÊ·±Ï ,e€å‰û«Ï#ñ¨Y½[5e÷"ž:jþöþ2ðͯ€5K«ŸÛéZü¬´„šCű°ùá~L±9ã5Ò•lí´ûcó8,¡ 9ÎìzW·ÉÆÇ“)ksÙnümàˆîîm®õ]VòäFÈ.Y ‡Ëà…8íÓŽÕg®xRo ÝO+^ˤ^]•ˆJ¾p–5w œóÓ5~[Ïx…ÓX´µk³o.èoŲÅbe$21’9®"äØé 5«/ë?ÙÚæ­3¶‘ùÜ‘°UW1#}ÞNJ÷®eni;ØÞrQV¹ßÚßøGEû5孽Εý©Û%¥”q4±îçæAœ<Þ&ðÜ–L Õ¼BÌÇ…,ߨ=kã¯^x¿ÂŸ´g…´ßüJ²Õ<:¢[]b ÙbXã2cèƒ2 ‚9aé_a?‹¾Çh–ë®èBM¤ª–\Ü“Ðb¹ùâ¥iOò:'‡¨’åƒyæòøwáõ®¥¤ÛZØßËÒê&œ#w‘™Î~fÝÈ=w^&×t+ÿ ݤ~#Õ¯n7o[výÚ¹²1_5ÜÛøÆ?j÷ðx·A‰.µ¸´¶XÛ¤ö´Y¶ñÎzç$zWÓ¿‰>‹9lﵟ Åw,E P7c 8õ®™W¦’¼Ñ„ðõ›»s9i>$E„üG«é¾ñ*ÚÁwklÖqCåÝK½_2"ã„ÉÚǯ^k˜“ãn¥wkuÁß6« kõd36à;ñ‚Ý9é^5¦j÷ZoìñòãÄÞ$¾‹Hº¶¸žþÖr×åcç cÔñ€=+Ä<7ñ«IñgŽÃz6­ñm5-N !ûV±$kq¯ÎJ2Èäq¹FkÇX,é©{6Ò]_¯™ôˈ„ÚçIß·§‘÷…¾)x—Ä^$þLJ7š>§<.bŽ;k˜`DM»™b'¦zŽI­ˆ¾$ê@ßÙ[®€|¨1QÛ_HðOœ3´¥ò0ß.8¯šô; {û7R´¶ñwŠl¢d{ƒ2j³yë".T,»·*ñʃƒÎAÍdY¿Šµ; ùï|A©C5ü‰5ѵâ̈6‚¼åÆJŽ É<“^lje©ÛÙ_yÕS—ü½þ¾ãé[/‰ò\Foôõg[g›azê%#‰[çlôÝÀV“xË_¾žÞå$Ó¬'ŒîLøröGfÁŸœdô<ŒŒWËÑxføhPA{âÞG®ñ™59·',·e†zÂöÅyÄ[ø*ûLÝŸ5ëÆ…­Í—Ф´• 矼rHà×f`ªTP-ÎzØœdS“ª×Èûo^ñOŽ´ý/VÖWQŠþD7­¥ÉáIá å÷Ìd;°Á#<ŠóȼS¨ê:Wü$Ήâ{ýbô ¥†ÛG1›Dg Hª¸Ç¾Mðˆo¾&]ø–Êéõë;k;x+ksÊH“vsóct<ÝMwÆ>øSâë«­c[ÔfÒï ycT’4¸ÚªSÉvŒ\.rqZÕ£†§QÂt¬ôê`«â*EKÚÝMÿnª±I|-ãH\Ì#Œ}Š&É+»œ?t$ñš}¾¼³h‹tžñ²9ŸcÙE¸Ï£õô¯„-¿h),ü:¾G‚|D÷Nîî¿á?¸EÉTç`#°Æ+é+x›O³ñÞ%×ôho,¢x,­¯ò±€ª“˜Ž…-ÔÖØ¼= -5*”÷í¯çcšŒêÖ›P™éÛöá]SÁß%Ú«´½½¸fÏ_ãëëWdñ-¥½üZyðWÄ)ÞW(màÛœdüÛðy}õ÷‹ô/†›É¯j:šÛÈ÷ ÉpRbU1åùª7ï_!Ü|høykO¯j®Jgy¿lý0 X*8lMÝ*W·§ù*Ô¾:‡è|©¨ŸNÑ5}&ñ_j­åÌ;“<…b=ø5ÈkúŽôõÐì­¼Aqg¨­öûéœX¼cì]¼á:)#“_9Xøçâ&±û)ÉâÉ|QªE¨Ç¾ÂÆ+9 ‘/–¯!ÁÞù#æ }+êO5í¯Ã¾Õ$oÌ—jÒXùÌø€°MãT7P+uxQƒ§Êïm-ºôÔÓ JS’”½í MKþ+íRææëVÓ¶b´‡ËÙn0E%3· žI<Õ{ÍVÕ<Ÿªê÷÷·]¢¼3˜‚9Š`2z8¯ Ÿö¥ñ‚\yqü9øSG#! Ãd©Áþõ¯†?5‰¾ÕßWð÷„4Y,5(âŒè¶Ïe1+ÌüŸ½è+ n]Œ¥BU§VëÕÿÃañ”'QSP×ähÁá½@ø"S˜\_¨Ôå·ûD©Œ6W¡àuô­€á\0sÅ@fR¤•;‰8ù«ZXÚÑzKõüÅ*q{ž©ysû=x‹Ãš*x«àî§p‹n~ÆÍ4SKm8t Nye$‘׃ּ⟄þø–ÿD_ ü?¼K«{Amæ³ ¸a œ¬x|Ÿ—'SZ÷O¶Ó@y-a•N˜¥‘‰åß=¿Iݬڭ´QxkÃò:†˜³FÌÅPd©$ýÒ=ñ]µ±Õ/Ët¶é¯NÇ%:)$õv¾—Ðá¤Ñ­.®c—RêÀÅ-ÞÙ$DNUCp;Pt `ÙÚkûÆbCÉïõ÷¯:øûCxïÂ%Ðt|-ƒLKçG»ðûÍ.NAÞ}k¿´¿Ä½_⇆4{Ý#áRYê7É Íoár’*Äጇåôï]Ôøzu¨ûn{«_oø&Í£N§³å×Ôöë]ØÙÊ ýÄn‚9Näƒ#€ð¹öâ¤[/Ûx“UÓÄ?c[;ùm‡üRÊI Ä)?½Fã^vY—K&£+[Ëþ ÕŒÆýZ)µ{ŸCÜévwv5¿›Œ!-Ðd?J׊Î"®»w/P xßÃ/|mñ2óÃ~# m2].yXØè m(dhÔa÷¶Î*ö±s #ã8Î+ ß<EIÊú\ÓŠUàæ•ŠY[%¡ÄHdí¸o‡6ðGà“ËŽ0×÷,¥” fWé]•Σ‘#æF«wïúTՅͼSÀ¤Â5 V7 ã•БÈ=Ž*0”eR›]¤k^ª½Ù3KÎ.B‡@ÏßãR™m·cÎvì’\f¾+oÛã ¼0o£¼{™†#ù$þ³¨Åt^ý¬þ+ø‡â‡‡4›éü'ö[­fÎÖu‹Ãq+2M2£ÛÎ8'œ÷Ÿ Ô_òóðÿ‚yŸÚºsr~'×öѳ¸Ù¬¹ÏcU¯l£–÷N&8Ý㺠ê¸V¶¹tñ|LÖâXÕ K—TP¸Ú7dKq#^Ʊ±R:ñ_Sš¾Ç³)E3Emm ÕåL¡vö{ÔÓGo °Ù´äàµs××nnwË!Hס#hâ~;üHð£¢hþñ:´¶²ÜÎÃLŠâG`ê2tïË2éã*ª|Öë÷âñŠ„9­sÞËnç°§Ç ÌĬRŸø…|K§~Óß´6©ü‰ñnúÌÛÄdؾ±° Àù }9ð×â?Å«ŸÚº'о%ë^*ѵ^ê7·}¬(²*(\yqƒ¼õ5ïÿ«KUí?ø'›<ÒQ³püà¼EªÞé~;ÑäÓa’{„G;V"Ãý¡Çµrž7Öõ›ÿ…:ì—Ð\Û_¬NØeÚ@$cèqÅw–Ì/./¶J"d¶ùgßµ“p`H5Ä|Lº{¿…^'ŽÒ $o±K `å±€GÖ¼|$¢œµ¿êwÕ»Rwè{ƒm¦Ÿáî•™§\ܤvÈÍ ¤ ûw.rBƒÔæºwÑ&2‡ âiW§ÑEzø>†*›¬æÓmþg \ÊtçìÔvHýd·Ð¼A“æøw]QԳظ~"°©ÁdÛœäb¾/ý‘|oãmöÆð½¾·ãk–séÚŒ’[jºì÷Q1HSoÊÇdãŽõöÄr ­â ìf*ž¾¸¯ˆr¨à99dÝï¿•ŽÌ³,C’’ØË:eºêotTo1ˆÎNx5vËL¸¾ÕÎÂÕ¯.] ,`ÀëÉ8©³¿pÛ†½mxaÿâ¯lü­ö9¸Ïû¼l¾>Þ¼!-›Hôq2öte%Ñ[ÀÞ,þ (ô7qƒüé|XÌ3¤D‹ž­{ÿÙ«ñŸ_ñ?‰"ñv ‹­ë’µÜrÚµÏk‰tv~Œ¾!×.­ïRãRÔVÚCójw'¢’:˃_ .Âßâ—Þ¿ÈùŸí\G/2KúùŸ´º5Özöš”EÀPÅà ‡#®j=;Ã’êºÝÄ:lP‹Çˆ<4›"ñœþ4ûÉ hÞX‡%®áŸúd+_ÂnnµmnÚ_dÒ'B ö+Šù©ÓY—Õõåæ·™ì}f_Sö¶Ö×~øŒ`‰t ØZ:að/ˆ‘Šü=¸òÕ£Æ=kó«Â5†›eöeýUº C#œXg’qWõ‹+ï 4Ú«Æú]ʲ€sõýkêŸàö×ïÿ€|äóÊñkm|¿àŸ¡–¾Õô]dÞÜ$1G"š{iT“=wøWcmXšF‘€ƒŒ…À¯>‡R½±øàÍ2)Dv­ ZÊŽCÆ=k wZŽÖ':…ʨŒ€Šx÷ëÞ¼š¸¬> r¢¯£=Zp«‰„j;jzTÏý¡r.­oà’×dÑ‚Hϸõú×”ü=¹?ð¼¾%ÚÁ x´¡•··#0 Àöâ¬[T–Íöj1äe‚0Ÿ×x&úä|Sñæ§{%黋ÍÈÚ 7ñ ~Tég4¥;=?®åO$Ò¾çÕRË·rJÀ²Œ¶2x< šò«ÙcšöèØóØçךzêÚ³"ùš•é9Ý2©<›Ëv.X–'«ë^^;LKfua°î‹m²¼˜ŸAZè|=iªê¾+ð—‡lnÙ–×ûR÷Ég+Á<ý*‚Þ’HÆ:W‡þÖöñMû?|ŽH¢š'×®Icò\ô ŽÕÓ‘åôq¹j-,e˜bjR§xî{[ÛxN!ºo‹_ ¢ÁÁ?ÚàÿZ©ç|?—TµÓãøÅðÒkÛ™Ò!‹QòÈçŠÉf'w¯Ì_x~ËMøoi{o¦YGç#±™tõÀ¶Ü}g|+·Åï‡R­DÏâë,¶èúáŽBõ¯¨‡åò“÷6óæysÇbcMK›$~‰|DÑ¿²¼Ft{£mxö×Ѥ…“Éœd{sŠMD±ÒRhllí­ÔËæ³Fâ[$ŒŽÃµl|WÃ|m½·“2íXć<ž•WNÒ¡ÒíîåT’ã~ö|îð>•òXÕ.¥8è“™êÑršŒžö7#´ŠKˆnÉ;pzgƒZP¶.X0ö#¥RŽÐFTmëþ5mqŒœu¯.г$~bL¼Žzf¢x%“Î&GiIÎ\õ«G’P:Øõ¨`s#t$çŽI®…fäÊï&ÅÊ–aŒÓ@YˆPÒ«®­gs­ÜÄ ¬žA̼È>òíë׊³9À ¨ŒîèzþU¤èÊÜhžÆ¾‹u¦­˜ë[lÊ‚ð±TÛùŽzãõ·kjš„¯,ÞÝamÊ>ÐêÎJ!$lcë__‘8Ç¥'d›>_6Mâ]—Cø¦æ÷Vº·ðÖ™§É|uã0 ÏØ,Ïþ=5z9ÌðÅnûeÁàçþY öó„¾¹/Hþ‡Ÿ‚oØ/™ñm¼{ü<Œ@­ÇêµúOà™Pü#ðʸ?.—QÛ`¯ÍÛeoøF-˜r¦ÐÏûúKáH6|)ðÑÞ0Út¯?êÅvñ]–¿¡†M+Õ—¡cÆð¿^@™ì$ØÀûWæÛ ÌCýê+ô{ÄÃÍð>°‰ƒ‹7Î6šüâ”|„ôÛÛê+—„÷©ò/;zDúÂÀÃÚ&A?Ûdãëzµö ¬ˆÿ¯âûÏ üLyÁ!íØÖ¾=ð¸?ðÄ:pÇ ­/CëxµõÝ¡EøUªƒ·Ì–úØrJ­»ŸË5ægq½yÿŠ_¡Û—O÷qôG澤V?Þ¡Çü„&¾kéÙ¯æðÏ‹”§ûbý'޾fÖ"Vñ¦¦7nÙ©Í‚:š¾–ý›Añ‘ ¬9ÿÀxëèó—l¥ß´CËË¿ß~óéùŽÛ‚r_QT™†áúSæ|JÇpëÐÕbßtŽ@ãé_™ÂìúÆìLÇi#Û:®ßŽv'?1Ѿe=~õq_ÀOŽžïkGÀç?»’¿HËäV¿ÂÿSäq_ïöóGèKäô_—88=+ó£Å["ø¹ãE (]rLO•+ôZHÜùA¾øÜÖ¿:W¯?OÕ¶}¥¿3Óþ‘ÿ rÙé£]`cÖH¾¹¼!¬£\ØnlpO­|ð/7ãÍ肚5Ãdzy‘ƒ_^Ê`L@F÷•¸LgÖ¹¸­¿¯¯Eú›dký™úÿ‘çO0¶¾µŠd’Id.BîÆI9Î=«±ýžÛ÷¢8„q‹}@³g¯Ë-b^é‘ÄYä"E„0._;3šè¿g“ ðõ”ˆ¼®¨°'é'5Ï…’”¡oæætW¡/F~Tx’/+ij§ËÄÒtÿ®¯]ûöðz’Fïé€ g'í qúV?ŠGüU×y>kŸÎF­ï„à7íàlàƒâ­;ƒÿ]M~ˆú³ÂRýÒGêö¼¼¯>>e»—cÂçõ®}¯3tdhÑ£Œ‚ÎO®*׊çÙâÝ}$p‘½ô»™AÜß;q^y6©&—¯ÇköYÍ¥Ä{¶«‚e#ÐçÜWårÃ9Õ•»³éUUFäþ,¹µý:!ªÉ*<çÍ„ðô¯˜~;"ˆÚJ EÒd Ž7­}1w¦YÉ­é×SªÛH\ÈmäùÙ›¶ì|ïñú=¿ü8dR»´›’Áå¤}1_AÚ8”—fpfš—Í3á +fÒ ë© ö” F“qµ Þá_†‹ö‘Vêb«J/Ðê|| Á6þ+qŸø“Øÿ—­~`kxþܘäs#qø×êGáfÿ‚rüW¶Y­ä•ôí=T‰FÏõËßÖ¿3µmQ—V•£[VcøøP}æGþæ¯Ýþlùü\—Ö[ò_’>£ýŠÆïÛGÂxÇF¨~Ÿ¹Š¾ñE/¦A•*@8*ÜŽ;Wñ½”úí—áv¸{d'GÕìX‚bŒæ¾æ±]–1'›vò7Ïã_5ÆÑ¿²·Ÿèz —5Kù~¤È¸w$ãÍmxcjøÅư³Ÿ$ÿ¸kyÕ#i$h#Œ ™ Ü/Ö¶ü.Àø’Y7«ƒg60Ù'äë_)”ÓkMù¯Ìö1²N„—“?5Äi%ªká»áo¨»± äH ’ì>CÉã¥~½usã=§¹cö[[“hŸêÑWB³ …ëû¡ZžØÞ/¾Æä/^üV_ˆäFºÒHtÛýjÏ1W|2§ŒoCº062ñŸjüæ¢ÿ…·þ#è9¿á:ßÝ??mæ—·¥x`[~:Àæª\]¬Þ+ìËžGCûªµ}‚úõ–öÕ‹3 ¡‰çsûV¬ šA&£cÿfN lðL|æ¾ç’íŸVܱ?@äÿ’oàeÿ©n×99þY’Gˆ²;ÖäÁ௫KòZò~AȬe»ŠuU†bq÷‰B3ù׿¹ä?Ûªzþˆû¬²IaaèZ©·8 9í^mൾ1xüÆ×í0~~P¯@v béçb½Ö¸/SâgŽ™n¢vk¸K LýÊñþ}kŽŒ?w?OÕs–¨ô¢ØR[w¡#­0Ê(ÙÀÉÀüj;©W;Ñ›vÓÛŠ[9-æFl™p3‚85”[йWD¤†™Jï >fg#Ú¼?ö¯Éð àëøŸÝp:äIú׺I,aaæÆB€B¨â¼Cö¡}0üøDo¥½ŽÖ®ÌO ‚KyRuÏãúWÓp³o+¾óG“›µì—©óWÄMsM›öMð¶‚žhÔ¢€I(1áX.rAükÈ~²¯Ä¿‡¤ŒøLl2Açþ>¾œ³øYá¿èzN—ÿ ´:,ñé^bùÐ+´€ã#žkÌ`ð—…üûWøCÂ1ßê>#¸µñ>šñßC¶8K¼›—åÏAŽ}F+îp‘U!*°Ö7µüÖþgƒR¼ycMï¹öÏÅrÇãýê Ëj-«œnùWŠ© \ÞÉ Ë¨Ã2È.ÜaæV qÆ+#âÖ«t?k(tó&ÖKôrTþ` ŒLWam“Ümàieë zO§Ö¿9ÍÓUj«nßæ}6ZpôF±@<^¸ ØU[{‡¹Ög´·_:àʱŒ±:õÒDkÍÄ–2î €arÜVÔé%‡«eÛóÿ€s¶®-Õ&¿ðö»§[ÙIjÆ’FË ©=žæ¾ûðÇÀï]x~Îîæ=HÝ4K#tÅXqÓí_ Ká;ѬµÅÖ¥a&ž-Jùßhy%œc†v þú‰á’ö=\ dãý‘]ù%ÞWGnR„nºžM­ü>ðí¿µ4ÿíSö»{Ï&Ó–wsŠ2FÓÐ}ká)5›ÝÆš•Ü:¯¨K$Ó˜¡XöpÒ1Rňù}@æ¿J¼^šK¿=¯|ûÓ_œº~‘©â-trâæVÜò1 ¯êkÛÇ(Å@íÂJrsfïìí¢Ùë |k¤ê0›ËyMä2F¯å–-l£†tà‘šè4…~Ð|Uáí^ÃHÕ#–ÂR¶SÉ®ÉÕÆøÏNð猴‹ 7UðÖµÅ!h¯,u0˜;H$©ê u«"´n„61Ï¥VU‹tDápM^:æŽæ5)©ÆÌà¼áO øFÿT¸Ñ4Ï¥åü) ͨß$‘Åå1!€’wjÕðµÏ„ï´xWðÏ‹uK˽Væ+«;R†ü·Q´&ã¸8R2}y®¨¬k`ï?.:Šá<~,ñ{¨Ûÿ–Ã)ÿa9úÿ…whU«)U›²è»˜}^J Da·Â„PÞÁdþ øÂ7‚¡ÏŠ!Ú0?Þþ•î‘ÿcÅá½2ÏD°Ö4«;Ke·j7i<¯³å ¹xäk"wfÕ­‚pIÆ:ñÉ­”0 CŽã5ž74¯‰§ËSU肎)^$Èú?‘¹¦jšÅ­Í±#°¼[wLƒ»%ºäp1Þ¼oþÁŸ4ð¿Å² ‚x®.ýº×±Ma¨Âždš~¤ŠGÊ~ÈçƒßY71˜Ê%ÁxÉMèÀØdŽ´°yŽ# S²¿’ ØXUw—æyŸ´_ xoö{Óto iÞ"Ó¬bÔâ’Q«j s$…îŒ2ôÁ¯aðôš5ýλg­_CöxR8tùÖ<ðÄ–-ÇÓäŸ'Ã8Ä›ÂBÑTc¿ž˜ýkÔ¬$xjòØ:íß GS´®jqX©Ê1©+6Ûè­Ó¡­ QMÅmcÏï> |¿Ög¾OÆ c4Ï4‘ůÂKÄr+Ѽ àÿ†~ ðôO°½ušFÔuHfÂíByÎ8Ç¥:-‰hUÊ)nÅ€&¬Ã(‚ÙLoAÔo&µ­žb*Sör³]¬ŒéåÔã>e{úŽº‰ög î:Ÿ\zW–øûÆwÞ·Ò¿²¡Ñµ çœI>Ÿ{pÊó@¼°~`îïþƒƒÐúw4ùô/ÙòÛÆÒøMÒíîUD·—q2%ˆ“!0l3nÀ“_¿ˆ¬bÔšk½^ÛZ½ bdek’ a¾èÏEè;W:ÀO£)ë{4½OK*x™µ{Xý:ðŽà?øÓžðޝq`è¦s-Ú]¬%€%d‰d,¤â;zTWzG‡SV×ÐdµyQjRÂc\uaƒ×Øàz×æî‘«jö^ë¾ñ@ðî³:‚ÓÚêOdº‚+aã,„y{õ+“Ó&»¸þ'üe2Òïмl¬áq“©†é –|‚ùÉ=EsG&ÛR²ìï§Í~§·R¥FÜ©¾êÖûŸè}«¨øC¾´žðØkvZœÙÛ Ñ\¶ªØÈÝÊ9¼â¼¢öÆh.!µÕ­®¬vÜ+L¥Fò ä•Ϟǥ|ý§xçã“ëð’øƒN‚æêâ]n;ÝÑ0¸†'KUÂ~érÀnv3Ï\û7†[Çú®¹©êþ;½´Õµ ›±%­½‚•ŽÆÙÜœ–<’O°®PNRšmëÖûú~§"­$¡5éú?Ðæüoðÿág޾#i×—:‡Å­6ñ­šÙËì!8;%²sÎ+Ÿ_„ ¼¯é¾%—Ä_æ}&u¸X¤KF\‚($q^Œ-$þÙ¶›ÉùÕÛ+ÆVÚ}”=¼³G#¬e2IÜyçÐu¯S žâTU(¥m­cçëe´yG¿sÑìõ'í‚òY5i4—‹ÌŒÁÊ´^kÃõŸ‚ß õokãøŸâÕ‹_Þ›‰-à±²p…ðãÞ½7Fº‚ó@ƒÊhå+jàcéôíZ/ ø~=¨RCw³ÝÁ=3Û5ÍÇÕÂT—³Š×Ô߆…x.vÏ;ð'ï‡þø…s¨Yø—â&£wu§Kj°ê]°A¹•%0s•Ç^„ûW ­‘ûJ;»;.ràg·áX6C½ü€Á³†º £œêVwÌk!Yb$a”޾¹¹sÇq¼%ÑhòqŽ2?ZùVm"3!Ë$c“ŸëŠúoízÛCÄú¬Tw>³ñN©Ú}ö¬±¼K{pïjrvÈå—${kĵÍCí·ú{ëqŠ<ñ» öþµë%ÏÂÍ=&™B5„{ßîòdN•嚃i¢îÍtö2¶’¾¼žõàašu$í­ÏZ¶Ž§Gw0½»Ò× bdù ‡–ëÀÍs>;ø¤üCñö”²|Bðç„ï4»i¬®-õI&‘÷²uËvôÍuZeÜ׃EI ¿Ú™ƒƒ/ÍÛÛë™ñ6‘sgñ»L¿gŒ¥õÞå!¶íÇúã=+£ ]ѯ̷³3­Ož¼Î$~ΞÑ­çþО…gýÛ™|-0Á¶d?Ê»Ÿ…^ð׃>4K¬/ů ø¸Ùèwv)ca¦ÉìÒê °ÏÊ3Ó­CñOS”±\¢:È<Äó>b„Œ°>µcÃ:]§Æ§kYÙÖK=ÌBáws“ëŒ}kÑy¼åì¶9þ¦¹’lô] Ñ^÷ZVÖEÇ|ØÉ¯2ø­hmþk1y`~íÓx¯V²·ŠY5H%f:¦Iv\œgzô¯5ø½/™ð×[äÜ ÷ØóXGzзt{“öoÐõ—ðÆ›ã_ÙÆ~½ñ‡|u­Ae¥Æ§"Â66Ô,»ºmàðMxôß±'ƒ¥všçã÷†á†æÛ§ÀŠ{çŠôÉtûKßÙGy˶%ò³×8ªš—†m¯,¥…ÂD!ƒóÝûq^Ö<öÕ+lßæy•òçRn|Ä¿ÿg á/í‹â÷ƒ5Ë ?O¹[{cA,æxžC6ìÎqÎìW¥YIJéÐ3@Ppx¯ðŽ•&›ñròÜÛ¥ŠáœeX»r? Wµ¹P¤DÆAé^^˜ýeA5±×–ag}Ê“02mÚ®Œ0T€EX±ñ‡†ÍáÒÙG‘œcq$‘¸çéYzßì¹àý;NiôߌvÌ¥&ûW‡YB£|¥†Ò@æ¾½Ó4ËØô»]Ö7"¿»%¶•8æ°¼c£Â|¨=ÅÍœ¤¢}žBRä)#÷X §8ȯ«Ö”ì’<¯ìT£}O@Ôµ FêÑ´õÿEƒO‚aU}‰Ãp­]ðµæ•¤øŽêóWÔbÓâ6…P¼dï-ÇaÛ®_Ͷ²Ñ,âI¢P"P­+dp½ê¡¾i-Z9ZÖ_5~èü§Û>µá½+éï ü7–ÙÁºÓ%¶µvvûf·:ù™ã-¢8éýöãÐ×´øoÀºm›Çvšy¾ž<¾Õpvcø£Tû…Zû ,ñ55•5ŸèyU.W;ù+~ðçŠøƒáÑñ?Æ/øK¡‡WÔ\ mà,,mSÒÊàÈAÇHÐýkÓ¬>i÷WlÓG&¦®€Iik#ÛØîï»ÒñÇÌ[>‚½9lìãÌe—Z¸‚ÜD§ù:Ðau0 4âÚ.žM¿Ê1îÝOéZdž„ÜíynG¶­(¨§dsv>Ò4ÓäÊ`†0xÓtè¶"ûayÇÔ]0i£µXlá·Ò¢ÎÕ¡¤9ýëN!·"UŒgøEJ®¯|XüÊ™ëßü+¦S“"4¡õc`·µ·œ)’Eþ9æoÄÔ:Ư‡>ë~#¼Š[˜4»o&Š—pŠX…÷8ÅLY|å^výãùRI4Mm,2"Í ŠVXÙr¬ÜÆ)B>ðêÍòÙ›ðð_É|¯Âm¬ÜHÛZ›yR7_ÊÛœ¸ÆkôÀ¾3Óþ üðÇŽtÛk‹+MfÅ.VÞr Â[‚„ޏ óÞ¼Zçöeøq®›¿øV::Jͼ¤O"D^6öWºé¶vG‡4ý#K±µÓ4«(VÂEj0ªª8À­êGC–2÷•‘³-´0ƒ2) ü§8 ý{Uv[ØâØŽ·ÐcýUÇQôoñÍãoÝÉíŠzÜŒ9äW:‹[.Q{™«ö1pUô¹›¤sݱö=èk…ÖþøwRÔäÕ~Ëuáíy—XÑd0»£x^¼W¦HðÌ|¹Qä0ÎjŒVòÛ»}‚æHW?êdãü»~mFqåœnŒìâù©ÊÌùÆ쮵í={ú‡ˆ.,áamâ j ozÖ"æÐíŠE2¤““òŠÂøðC[ñ§Å4ñG‡ŸOÖÚXGy¥ØÌ’êÖBµ$Ràöé_gk xoTiíe±»r„žÜ–BÛ3Üsê pÚoÃѪü-ð}Çì—Vñm¦‰oúͬŸg¿‚_,n),[ sýÒ¿Jãž[Z^ÞštüF±µyª+ÿ[Ÿ7€ñ½¶œ,‡‰dø•¢«³ÿex–u†òÐcAw~goítcœgµ©Ï„æ§9Å«?3éŸ ~Ï,¿e[6ðwÁ¯ê^,ÿ„ªXüCfº’fH¬–÷Š’[ =³Ú» áÇÉÓ^‡Åß5 –Ñ®%Ñîu å+öÕų’È$Ž;W´x›öøÒ“W‹ÅÖ>¿—Ã’ëØi!‹÷é *ËvòoT†APì8À<¶?þÜk¾:ñ†|ý«á-MÐWT½ñH‘®ïn¦óB¨ª6œ `rFFÞnxJRµÍèf¸ªRr¦¹[ꯧâ|Õâ ügð”PKÂ>'Fµ;:cûÀĤuéÖ¾\Óu?'í[ât­à ãIZu¼–F³Ê‹…`Cc?Zý2ø™â(u¯…>ñWÄ [\ñ÷þ “HþÙšXãnµ’â7˜¢¨dÄ%CH,2kórÇÅþÓ¿oø¡õKè|"ÒË¥Ü(]å&;x†r?Õ—Yìcjƒœ×ÁÊIZß3¦ÿmÌÚ×~¿æ}Gi6…}à+]kGñënuôû¥[n©$Ê $¦ðȶrj)cat0H?ýjÞµ›á­ÏÄ»¯Yëþ^±k¦®¡2A4Ip“Œç¡ÇÞ<ðõ–ïðöëÁZgŠcñËbj7‚ÎÂã‘4ìå<å‡ò¯"¾Y^SrŒlŸ™Œq”ÔRoð9Ép+9bnµã0üK¶ð$ž%ó|#¥xÂâ÷]‘oïä¶[p¨ #b1$ð;t¯¥¥ðæ?‹õ-ÛÅý«eoÝͰ·ŒËXnaœTŸÂ¼Æ´yücâ”ø™¦Å£êÚºËcvÚg™ ÿidŽ ­ÎXŒž€sÀ®Ì«.:·­wäÎ|V*2…¢õ8é¿j 29%i¾ x|Ëm¼/Ä·*r£,îzœWÒº«ÚùÖ—:}²XÃs§[^-ºHde‰\¨cÉž¦¾vÕ¿dï>·yaŒ¼-ýËMp° Y|Õ…ŽÝãçÏã5õ©¡éƒH¶Ô$ñN¥ivv6¶M,äÇ,j°rãSÍwæØHN‚T ¯~‰-|5v§ïHñKã7À>+ñ&‰ã?ÛM¥isj2F5û‚¥cÁ!C3(ôÇjùoþWã¾§ „ž=ñ$Á™Ty‹i(ù±ýø ¯Ð]GÂvÚg‚|U¤ëž ðôk®hZu„RÜù\LË»b‡êpJü›Ö|?®Øø†Þ÷PÑõM:ÜKón-X!;±÷×+×ýªß)£ËFÓø¯ÔªÓsž›gê^#Ô¼Uûø/Åšæ¥y«kz– Vòâ䯻ü›Ôv$hªƒñŒôÉÍz·â?‰V õ½CÂÞ#¿MJÃìí û«%¥âDÌ•Æ~mÏ–Ï|q^)hvÿÁ;>$€oä#qý¡z‹5“oû½ðˆžxlÞͤûNáò[3*‘Ï8Éâ¹ïu½ö¿î\¬aT®®p@ä.ž3Î+zMkâ-•¾øüe¬´rÉòͱmù°fy<“ŸÒ¼yF²vœŸÍ• 1Ošûίà×€µ?â&± jRYêF[d3+$v9bÓ²†Ü„ã©^k£øû+‡ÿ4¯'‰4íBêÊáŠÙÏj¥[p`pBç€ ó˜<}ñcMñ+5§Ä=Z ˜kyHµwCŒ¹¢'Ç5Úèß´Ÿí#¤Éq?ä¸rÀÇöíÆfI +,k€q†ÎI¯Zš´«MÉÆ·*jÏÝÿ‚uÆ¥(Úô”šwøŸèÒü.ð­çÃ;_»ð¦‘&§4¼×¿eËJw7Ì®ñU¿Ž5|a£i÷¿|1½Ü’}ˆî¥– ¡ˆ_’£œrÝý«‹öÀý¨Ñ茂%ðÂl‚6…Y:žsé^N¿|X×6·NЬu;i š;g#=1–áN}ky¤©B*ÒkMWây_V¨êÎMY=toO.‡­Cã­zF†I>x^Ý8‹X¹1êcý{ÖÈñDú†™5¶£ð¿Ãw°ÁŽ]vçŸÊ*ñø©âká½mƒ –âHð=ÁÏ&¯ÇñwSu»ò|£Ý(ºLŸá#žÆ¢ÿ„ŽÞE' ÞÒ<[pñÿnüW™ÉñrkXMÝß‚mî­OÞšYÑÐŽÈ aõ$t«ãã„A%Ï‚¼?Zø2ÚÃB{(Yô]ÕãW\ØÅœŸîûÕeY|qœ›êÈÆâ)¤»pÁðÓÅ6íϪèÖ:ryî¶z’JËåŸhéÎ+“þÊñgŽ~4š=·ÛŽ–‹s"ù©†<• sÇ'#ð®7öz‚Ò|Z]?O²²À¿*àmÓ¿'hç;Gä(Õ^þ„µDµó|!l«äHAL]N0ì[0¹“MÒ'ЯíâžmI® ÈÞXTdf; Áç¿åD²ì-8µÏø£eS;K—ðgÔúDŵ}@IƒÂ}zâ¼·âì©ÿ ßWbûWd{‰è˜3^`ƒLÐíõëÛ½54­@„´/÷²™Hê¤g>õæ¿mdÔ>ê`6×i2(˸\$޼WÊái¸××T{U•7cèM7Á^.ºðNŸ=¾=ÄrÑ¿›ù ŒM[‡¾;yXÿÂ=rèGQqÿ^Uñ'SðÇŠ´¯ϦxšÎìXhfÞïì:¼‘˜ù]Q€$`õéÏ­páüH!ûn³#ò„Ö®3Æ$é]˜Œ6œõæ~‘ˆœ/¢ù?ó>аøwãM?Å7w×ém$+–Ycb¤g'½*äαÆCmP¨9#©¯!øK¦e~ÒÞ»¸¸ÔRÝa»Üj¼Yhp8g+ŸJõ ÛŸ&O&q*AÚgEyÙ… .1”/ÕkòòF´eR2”eoëæÈMìwZkKnÉ*–(Y8n„qEµ…õÖ±k°Ýæ ­ŽJŽçÕÈè:náÝ'T‹Hk—Z•Åô‹3䬓1vÇû9'ïŸt+¡áY5ûønãGdrÁ*¬‰8G$»öäW™Z1¦ß#º=<¾ƒÄÔQ–‹©=LJµ}#SÒmí¬ç6º‚dº˜;[¯ß˜Æ\8Î1œdUøõÿÃz¾é$hT³Ò!¹”± +ÊÆpT•;‰PyÞ®k–³aª´šî¡®Ë¬êVêÖ{eh-ì•°L‚1”‚xÎqV|7}cwy ZO‡|2Ó_gHÒšME 9ÒJÚƒ†\¸ÊŽ2kNVÒÒëä{j«ä“½šé®Ë·—ùޝáo k[y-te¢ž+heù s+Êùlp™8$Ž0}+.óáî¥AzÖ²/ٴ땎ïìúšª,ì÷a¥ó=s]Eþ‡ ZÙ\G&œÓ®ŠM†—miwßétÈä–$€Äí<äf¸é|cà/Á¥Xké:t-&¯g¨²GåÒž~~@¼öª¡‡•[Æ Ý]8ÊÔ)¨Ô©ò¿Ïկ׹v†ñÞ”jÝa·2¹D‚A•› àôïÚ¸íGáÞÊ0ªç OE-œ)Nõv‡Þ%ƒP¾ŽçÅ>š[fó'°¸!Cgn»Ðñ^·aãm$âéÑ3¤\’LñÛ\)”\±!Uw:’ÌNî˜úUCâNÛìPý‡N¿ºÔÅæ­6£©í Ù‚ 2’vªˆÎ$þ=s¥Œ–ðüÀ©å0vRÓÉ·úž/¬xQ—Q†+[Áö×PÈ% ò:¶Ò>öÒ½ýê—„~jÚWŠüQuq¯øBC©Þ#Ù@š–ftDU$© ãn:úûU°Õ!¾ñÞ¡§_êU´–жçŠ5Èóc;NpAô®‚mcF‡Å–rÚjvÒYxLÑá±orïÊ’ÄnŽA†q–äTNX…ÿáʆ.”“ŒÿÅ_Ã7o ÎÚ–„e1ºà9³ŒT?ð‹Ï$3Æ.´MÁˆd]E)÷¿ôˆu‘.™¡èúÅŒ°2ݾ®åSÍe+—Û0^ËÓÓ§+\izï†u²,b²¹ñUú0"ù›c+–VÇ1¬H ë\¾ÂqW–ˆÑa°r—,n߯üÂ|Ii­xwÁ·š–•acâíN0Ò­µXÖâUÎ ðBŽOµu³V¥ÿ‰,5-HðÙõ–’ÒÝÈ—BDW‘ƒ¸ äHX8ükÚo%šêö“o§\[ÃbºpáU@ÁÌÖÙ\n @*ç¸ò«6›â¿xrïQ³×ï~Ësy¨O ¾Æ†L*ücsÎp>ïLW¹‘c}œâ£ùºÝßî<¼ç)§¶äÕºZéüÎ¥µó¾Ðž#Ò£¹—^Ÿ…Ete¹dyYÕÏxÚÎÞÃáŠu uXîmô«‰brIÃ,dƒÖºWÛúûˆú²ïøÁ>ømãßë‘êº?‰<#áýkÁöšâÜß^ÿjɶL³™£²‚L¨FÔ  „Ž˜Âu‹›ÆWŽÞ¿´®dx£Ó5fÛ‚íû¸‘ÈÚ‹ÐA_M|(ðMÅ·ìA¨x]Ë©k%¾²Õ.Ù£ ÃtJ$õž;ó_ŸSx*èjÛj…¦“©,’y¶7‘:Ïܲœg¾1ï^eEI¿yÚÇ«†Uz^çGy®ÝÞø'ÞHc¶°ÑÄí—)-,³°iecØ’dåÖü0uñ2÷E–{øœx_U²L­÷Ì Ë߯漬ø~ |qâ›6C …Äl@@ŽŸJØð¯§hü%ªY6©'ÙµeŽVœ‚ª’æ&#ðqœÖêJãt¯¢tñ7‰nü-ek6¿â9lö,±ÛͪÜIe”gj3”^8ÈÇ8¬H®õ$ñ*Ij²^_ÈF` œr >Ãô¬ z=Gþ3ÔôEº»UÓîæµRçˆÝ•Oâ5sCŸÄw‘ ÜK¬²0CRìù¾÷*j¥k³|*Z¯'ù‹âÿIm%¼Ó<99\8=‰${µ ×5IM¡{Ã"Û>ëxœf8[ûÊŸt7?x žæ¹ýFÃÆ:5Ÿ™ªXÜZCÕÝ,I…ìÁ¬¸5MZRÍi3–Ûp)8ÂJñ±ŠlôUñ&¼——·GRî®Ð­Üììdœq•v Á8Àé|Q®O¡ézl÷ï6™§1m>ÉòmíXžJ&p õü±\ º®¹ *ÓÙ,q“€òZ²ƒøÓaÖïmû5«ýæ¡RìO¹ë|HñÔ^=>*‹Äúšx“ìÆÔj€©`?òÈnB{c߯5’Þ'ÖäðsxzK·¸ÑðÞ=”ÎÏÌyi'’O'=O=y®ûfd½²µÇûLV¬Ûj÷º½…¶›n×73¤Q4€KœqëC¦Ìâ䞇¶?‰uÿ蚯ˆŽ·â$ÓÖ+(c³S0ˆ0$#FsÆr8êx¬ÆñŒ¶Ö7ÚzøŠý,®aò¦Ónâ,²ÆÜ2´g!qÜ€NjÜÿ ~))t[Xì.bc#¾«Ê7c§~½ªÎ‡ðŸâÝååºëº}‹é’9’ãí̲J8Ô,·húlžu•Þ—x¦qû啃¬€+e—sƒ]ÿ‰õ»þÇ¿µ,ÊÉÿ ––‘ù‹²C¤!C¯¨bÝ8Æ yGŒþ¾£\ÞÞèÓéñÛÆd’[KéÓånŸ…]ðl¶ó~Çÿ-l.ršÆ‡<‚XÌf3Æ€w;zÖtb¥/h›~¿#ZÕ)ʼ©?/ò>j7’£Ê7ƒƒSÿjHÄî߃ÛwJÑŸN»¿ñ€Ââöw;x$ŸÀg5ÙüðþŸâŒË§jVqê¿evÚñîBC ü:W¯Îœ9Ž:‰ÆV¹ç¢à?-Žªn­)u«É4[{»¾û,-˜¢i"qŽ}8ÇJý´øðîî ÒøOMäs± ãò¨®?f†3üÉ¡ÝÚ·ý0¾•LÖ>Ù>„)Äüå’ûy¹“³Ì‘úÓàÕo­nÖºì2©Þ¦;§#‘ÜŒþ¾þ¹ý–|&ï*M~ÛÐ%ë6?:ðŸ‹ß4Ÿ|&¹ñ.™«j÷¦¸£x®‚UvÛœ…`‘ÔÕ¼día8¤®y>·¬k:&µ¶ãÉuø¤´‚á®l¦%I3DwgæCÁçì*Å—Ä?C3¬:ôò4£.d†7l{£ändå·ŽO‚¥ái5¬WÜRÄÔ‹ÒOï>‡›ã~¯.”–3øwÃr[d¶Ôi‚Gc¶´Sãš}‰Ï€´[­ cÊÔ$qœëçôÒ¼@Êö^©ï}ŠB?E¦Ko©ÛÃþ‘Ì(?祴ˆ?2+©á¿”×ë•ÿœ÷ˆ>0é-â6¼ŸÀÆ|‰#ƒTÜ­Áþð~Ïã&†ÚÄ-á[¸m~ä«gp¬î¼õ @=±Í|ßç2õ–äúÁ ]0ÁÄDû8?Ö‡€Ã¿³ù”±Õãö¿/ò>–Ó¾'x*JöK­'Ä©$Ʊ”røÈ\àü¼c9ï^“á¿ŽÖ ¨[éÚŸ‡îümáÛ°Ö÷º6§1 ³ ¸µÞHŽ\€T.Õ89#"¾&KÒŒw"ç¯ÍÞ®6¸G6ñ©¶ŸÌWKˆœ«!¶ö’-•ÓÞÅö}SKÔ—v¯ÃŒyS¦Y1÷\ ©ÇQ•¯©|! xI°ño¼š•Ή®icOÕ4[éWí>“ÌÞÈåã$²äŒcžõË_,,kkhÿÏüöô*hãd'Ö=üãþ_qÞü>»¹ºøañ Ì‹bÇ£H¡óÿxgô¯Ï{Feðþ˜Ø!ŸO„ã>¨+ôOÂm£éÞñf›{ªéúd†šÖðO,Þ\jÇwöÎI¯š!ýŸæ]¤Ÿ¾Ü`DÝö§¶¨¿»rJÑXeæÙãæ4åíškb÷ìó#{âÌ£qdðLcÿ&&­›OißuùRt{OÙ¤˜RSåËs22””äý1‘Šê>|>»øqgñ VÕuÿ _ÛjŠÊ¦êä2,îÇ*{aמA®7]Ðu¿|-ø»¥hvˬß[ØZG ËFV[–v$»€¬ 9ýk©l,."t£r>`NìÆ:WÌÚoˆá·ñ-íÝ„óÅmn#ùyÉ€ZõY>"xKPÓ4«{˜ƒGµK¯hˆÁ|¦ó[„\q”ÿÙ‡5Ÿ>ÝjöóÿÂy¢Á,æ5ûK+ýáŽOBG5ñòê¾]l³Sìæá¾í¦9zãµtwº÷'‘ÒÞÿX·‰yí:nãÛƒŠÏûŠÚoðÿ#GÄZIÓ_ùŸVéþ4ð –³E'l.ïìùÚ¨V1u ÆHÎ3ÅzvñwNðv—~m¯ô~Æ [Á.®ðÆn â8^A»to‘û°8aÇZøÓQøj¾’)õyã»ó·,‹¤HPŒô*x5ÌÁâ-+Lѵ$µ¸/q&¡æÛùþX*¼«c=ÔK‡i^üïð8†¬U£M/¼ýsøGñ#Ä>,ÓuŸx¾étï‰7_l²¸¸­§ÒXâܱ3bq´±É¯fŠÒÓþvºûg‡%ÔžfÓm-š<$PõyˆÎù°£õùðÿâSüMøY?†'ÔÓÃÞ"¶]öw°±Gµ”˜«g?g›^>œó_l|(ø…7Š<"cqe7tÕ:tú Úî–Ý”$…—,cq‚»N¾ß'›eQ¡'%ëó>¯+Íe‰Œ}ëYýÞVz[þMmü&š·W·¾xOÃA‚kE¾Õ"@83ò¤dòy/Ž ¯‹ÿhOø@¦ŸÃ×Ú/ÄWø%Ñ™õw:ÒÏn|¤ùÎ{‘_{ü@ð¾£âßšÏl¼Q è²@‡¶.·Žüµ¹/?ÞÝÓ#Šüþø‹û(üIÐ|/{®éV¯§Ú@g¼K›Ë¸ }ç¸;¯'ž+ØáÕN¢rp^ºþ§‘Ä©M:joNš~Ÿð}OŸÇ:µÏ†­t]SÄ:åþƒálŒ¡F†`0p 9ïšÖÓþ,jzO…íü= ëŽ™¥¯=¬rLƒû©)ÎÅëÆ^¯=±†ÑP†v Ì0UŽ£×ŠCaWhÉ»tYeô¯ªt©v>7ÛϹêø³®ø^ôT³¸ieanu8å .rÁNà[''õç=«OFø¹¬ø7UÖ§}I5û­J_:ê X9U˜¾b²ŽÁÀéÖ¼‘tû{¸Œ²Ìb˜¿Ãzž+kBk©6&bVØ“`ªâ¦T)>€«Lú#Eøùâ=#ÆR_ë×0x—OšWÓ‚ý™`Û’¯$Üàîo˜wÅoÍûExÆëÅšn§öÞˆÈ'ÒA!¹W2vu…^¹'‚>Lš=EÄ"W ‚θŸ|×¥ü=µþÕмN²ÚIq{cf·VŽ›BŒå ¶xå-ž¼ãµOÕ)6SÄÍkcØõÏÚKT:…„>²:.orR·žT’Kõç(6äD¼ä09,lç¯Ö?hëíOÂbÃÂSTÛ“-Þ¥j"ŽÙÏ”Œ8àãÞ¾QÔmâ“Â÷¢+›™. pf¸û0Ž0§…€çœôªZ—ö%¥½­½•Ãß:Û†¸˜ú@*%§Ñ•[NöGÚv´V‰m®Øêqj 3LµŽIVy€ÆQÁ…$¶‘Þ› |µ×d½Ô¼g{ƒ5ëG‘¬æGhã™üƒÎÉË…X7SÈ"¾ ût+‰§½H7eg#èsNƒWÔ ß—ý£pŒ6AüÇZÏû:žèÕãfÕŸæ~ZþÓÚF©ñ ÃÃ%õ®ˆÖ¡c×µ †H®nrM¤nXÏ 9Á'Ø‚lø‡öƒÑ<=â?LŸR[i/“í‡OO6(ÏGú†Çœdâ¿>õ¸€Ú[­ÌMtÖáæyÈÃ8ÁéÓŽœÓ!¸Ñíí­í⾸·•H#Ë‹ò@\gk%´ÌÞ"Þ'Ú÷~ø}k«j·’XI;k·sfÉ:^µÕÌ®]„(2v’I·&¯Kàí¼ì› „$a¬W; ¬àƒ‘í^ ð9th~0&¡e|²]i‹%ävP[ˆ¤‘mðáÑ›€ ï¸û×Ûž6µŠoˆÚõå¬p&Ÿ „ääyË— é‡ǽc ?-KMÞ⯈n§¥OøoKøa©Yh– yi,&)âTrN95öžé|mþ›5A¹Á ¸ô¯˜µ(D:Ãl–Ó?hƒ¹ sííé_NéE‡€4òg!Efbʽ¬HñqÕ”[=IþËt(•^—NIÇãYš4Š|/`DŠÊ`\r½^ó 8é\—÷f 8*3×Ö¬)ù³‘Y¬çÍãœ{Uµ¶Þ•£D–~ô™ã¡¸ º\ìØ?!üi¾oïUË^úÔŽÀi× ß4»:{b¥/0–ÇÆ^(ð}ÏÆ?jóèöKA^Guùßƹcß…è*k¿ éËm!}²…:sé^©¯À­âP =Êöã¢ÕQcƒH¹•ÀÛ—côçúW}<59jÑóµ1Rjç€\x§ÁZí¤ø6+XÛYÛçßÜÆ¿%Špʬ@$ÈÝvöœdgÏ<ñÿÃ'ío¯jÞ!Ò¤²Ó'¸¼²:•Œ2Þf’3— ÉPqôæ¼óá§s«þÖçŠe‘î&¹R¼27\U}*¾{ÖæfñÖ«.òYµ† 8äÌÇ5âW¨”y£Ý£î2쪟%M_*{õw?~ìnôÍkÂ6–wgªiWvé-µÕ´â™2°ê=ëˆø…3/Á¯[HîÉ&‘p«.:~é¸oñ¯€?d/ŒòøgÇñü2×.¿â™Öæ?Ù†Gùl/NÕì±ËƒòŒãýªûïâ ðªüOãyÒî'§ú¶ë]8zʤ.pãð’ÃÔåè|¿ð‚æ×Zýˆ¼ \¾*¤V.Á.¥V¬Y% £x qõ®·Å^ðç(B@É{–+ìi~Ø´Ÿ³«ÞH2‹<ì£Ýã¯Ôש›Ë’“}¬c€»±À|_0êž8²ñU²…·×ìc¼u*áEÜ^ÛücÑdÒ,¥u¾@°;…Ü6rsì[«Ï‚çò4§gVKÔôŸˆú…¦©ð3Už «¥Ü ѱÉræ¼÷á5¬W~ Ôb’!((¸ÈÍv_´íXhî¥6…6n×1´àH d’ïëŠóo‡O{ˆ¤{KÉmwÉL#¶[®}«—6ð2×Cž¤W=‘ìí4û?ê–g_.&Â€Š˜­y7Âk(5ŒÖVóÆ$ŒÃ!à ã§jõ?‰ÖRXéúür^]^·ÙPŒ¯Aí^;ðÎÍï¾-Y[®±6„v;¸ØÇ ÑãšÝ#²·Ý(ä˜ÁÇ8¯Ž¬í#_ÚªÒÊ!ˆ“ʼn Ø À¯©.4ý8ËoãÛ­Væ›SǹÆ@Çã_)xnêY?i­îvóf›Å0´¬ßÄ^ãþµ]G:“JN0Nçì?…´¦ÔD>Z–òIçÛÙMáDLc zVßÃ]*=Câ%½¹rªmdc‘éŠ÷ËÏ iûЇ•‡Ê1ž+¢¤áKCÊjR> ñÇlu-öÒúÊ+«)“d¨é•a^C¡ü8ð÷†þxâÊÇAÒåµ¾K&¹´¹‡tsçÊär3G ó_zx›ÂÍ£»Á N¬Øl. óü«çýSOH Öb;J˜$…d4ä§°›q?;>)x+Q†éo<'¡ÙéVOÅt#º’Y°H$n|§5âþñ‡‰ü¬ÞÜh/g×;c—í6â@v€F:šýñGö]¦›u6¥2EfŠL¯Œàt5ñÇÄþÚøtÛø%5öÖàžá¤km™ùˆÞynxÅwQRŒ9­*ôÛ½CÑtßÚâ¤VÒ3Aá[° yaìõèç5ÑÃûLüEXÁ¸ð—†.yê Éü¯š])¬mî-´«è –-Û3ÆÀò9=Ï5Ée$Œ‚Mnßnós³Ü×­UI¯Óþ ë,6P涇Ôãö¤ñz ÉðëGgø5—ñæ:±sûNM}£Ki¨ü/Ša(Û4-©‰Ðýàr¼ñí_0%ͱ³‘T×Ttˆ>F~ñZQj‘ÌgŽÇP½’E€È#ž×b¶1Æ{j¤ñQWäüÌaõ >U/Ää¼x<1©x¼ÞøCÃÚ—‡,¥RÓXOr“¤Oœþì©$/_”ôíÅyü¶òB£xÁô¯¬¼ð—Ç?dÕî4+O ›]:d‚t¼¹hœÊñ‡FÈÁœsYWß —Âÿm“VÿHײñÜ¢¸xa á•8²k» ^¬Òr‘–2ž’å‹÷™m­g¼•’ Àd‚kªð­µ¾ñFº×ZKM*+¥{‰’3&ÅóÉç*–µ§Ec«K%‹˜J1%ýÞüßJö ~ø¾ËÀþ'Õ4‹á§‹%¸¸tžФpHœž8>µxªµ"¯tÅ‚§B£µIYú£èÍâGÂh‘ø¦ÓäùŠêá>ø?2‘ÿ ¶€Ø$B?˜¯ŒDvV¶KDâYxdlîCŸQRÇg¦Bú äÞi9'ó¯ Û%öYë<;éPû4k_ /Æ!ñg‚gltiãþb«ÍáO…úÄxš_Þx"hsšù ÛOðâJb¾¹·¸‘Ÿ„CåúŸJ/ü?¤5²}ƒû8HXgŒ¦*&<Û4ËãÒhô_‹m›IƒXð*h%-coµXÚ\IJJ¹Îõù°Júw9àüˆ Å(e<ŽyÏá^æ<¥Ü^¤’Mgk á$Ž@67©#ö®gSðmÅÞtàÚ³<» ŽË÷ÒLHÈ «’ÄûZõ°y7jn÷8qcŠræÐâ#–ÂéB¹m6ç™AhIÏqÕ~¢¾¢øi©üJð­µ—‰­tûÍkODòá×4xN£+˜®áçhŽ0C(ê9Î VñŸìµã]/á‘ã"ÚëP¹“LK[E(>×føËýhø~ðÇñt¯4øƒÂÚË\èZ¶¥¢^€[ϲ¹xX˜Ã2çi°{0?…zS§±³<˜Ôå•âö?Gm¯ôoxGVÔü% Œ";cÿ …äHÖ…{u?1‹ å ˜#b¼ C µÌQŠxðxºõtYnu}SN ¨]»Æ ¼²ªá˜ž§J[øÑðGWƒËñŸì‹ð§YMåËZÅlõ'æAÍx´ò”¥x?uôíèwb3ºUáj‘|ëªëê¿SóÂÃN–9´‹¶…Jù¿Ô°nçœuÅnÞ,|AÔ!ò<ÈJ£1Ï@Oóâ¿F¼%mû#ø«Áqkv¿²®ƒ¡E,Ì€ZÎN­c Çús] ¿f¿øêšGÂÿC|hŽO]}™Ÿ™â2 QE\ª¬kc’ž:›i3óÒXd±Ûä+!R¬xÁǵ|ñ²øO➥§ˆ$‹Ny ¶@Û$g’Ž>RqŽ b¿Wõyþiw–Öú¯Ã‰ZGÚ.šY,ì.fFýëF„´%Õwà»i ôã犟5MO]ñV2ê:~˜®%ÓWTÒž# <‚Žáƒ´çõó²ltáY©EÅ>ÿ¦çÐfc…5(ÔŒ¿Âï÷èøðÿBñ–›ªÏ¬é‘jg»TMÄä €ãÜs_VÛ|øo$+»Â–%‡^¼×ÆžñÏÄ/‚¿Ú]®Ÿ¤Á ÍטÒêFUv‘Õ‡(8ë^Å¢þÔn-ö“à›¡ýï&Xð3^æ%˙˛CȧFsÑ-Ozÿ†xøbÑ|Þ³éÎ$`P›ömøWp ÿÂ2b'û—²©ý¸hi_-¾ù<á[œîK©T§ËVãý§|C×½øs§H¿ßƒUeýErýa?âj°äüކ_Ùƒá ¦ƒ}õ]Jnñê£qû3ü6ŽÛ¦j±0)”§ÿf¤ö¨N—?îãÎcÕ#?Φ“öÐ¥„ù¾ñ×;˜:~Ùÿ?â/©×þOÈø³ã7„4ÿüamJ flbD²—l±py<ÿ¯*ˆî—aePzé_Kühñß>"i±ßXxsÄZG‹-@'¸Dòç‹vLnTžœ•=Ô×Í©c<Žp¡ûg¯cU:jìæ±•š.i:½î¯Ûê624SÄy°{©õ¾ÖðÄ]jhÿ|*ذ:y“nÖ‰û‘CžóŒ‹u=ëLûwQyâ2&ÐAÇ¡Èëô­? x®óÂúÌHöW åÜÂŒï/£ Ç…†&“F¸lML5U8Ÿ¶¾ø xÇM¶m:×Qû$*ÌšœbXodù‰Âm ’²yÈ'#ï[Es¥Ë ™1ÍFàpp˃øà×ã–‰ã-GÃWÚ/¼-sÐÅ*}¢r¨A=õ1¾0F>VÁ¯ÕŸ‡Ÿ<9ñá>âm á)‡—sjî<Û9Ç߆AÙïÐŒ‘^PÁÓš¬Ôm×eØö±tªce PNW黾öýOÏÚ[öoоü'±ñ·€®µy4ènÒÏTÓõ+–¸òÖCˆæù+†à©à‚1‚9ø6OÌ& Û•qÁË×ïÅûïÅð#U‹Æð‹íæh š³´»÷H8Âò8Ï=«ò¾|,¾ñ¿Œ7x£Äz~–º»·‡äNò„ölѶæVBJsŒ„5ëPÇáëSç„Ô—“¹ãb°°õ9*ÁÅöjß™åZºÎ¡mõ¥ª”Sòî<ßû‰Ìs©…|©×¤’÷ãŠúgÁò| ðŸ…âÑ$ñŽ$ÑKêL#•²z8 `þ•Ü­¯Ã ^ËvŸâŸIò†;ÕÛôë^u\^!I´´*8z6×sâ[} X·¼Á‚8QÏ-»#Jëü?­áÿøš; KRº‚4ò@, /Ôc°õ¯©!ðWƒga,^ ÒnEÛt˜þ|Ö“ü=Ò^1ök‹GOö%SŸÈÖ/1Ä®‹úùš}J‹êω$´Õ£Ôb76·ÈÀ´d 08ÛœÔÖ­´ýSOßei<.ª¸ *aÀ'ƒ_cÁðöÌG²H!•=Ô1ÇÖ‰~hr¾ÉSœŽH¦³ZÝb'—Óé#àYteò—ýày.¦´4¨­´»•¸{Xîoî·€ÁÇ¡¯·&ø=¡OƒäÊ£à×?ðKE6®#û|#ýTä Ú9³ë%—ö‘ñ¹·‚íÞâöÑ‘X©@è3íéT#²’¥…²YdccXœ wÍføÁµ¿ xûTðàÖ..-¬ça .ml}û¥s¶~%Ö,®bšÌK„ħìFòI®§¤Ó±ê¦]#Áž!»ŠMTI¬ZÆñgNMɼŒýðq»Å}ûá/'‹ÿa/øÄªÞêú:ý‹R¸9%ÄÌ3œuÛ úWä¬ÓI5Ä’Èò<ŽÅ™œå‰'$çêI¯»¿e?]_ü5ñ禹+s{a-Ö‘œ|¤®éG|8ÝëóVšmC™nŠjûu=rmM.næím?Ú YXs–Èä7n:WÒ¶SÆ>ÙÅok‰,ˆÖëÁö¯=ð¯ìûñkÅÞÑ|BÚ¿Â;ëÑmpúeߌ€cIi6ÂÊà @6Œ£el;F@<)¦åcB PUqÛÚµš58ùë ²ømãû-ÒŸ êãL8ŒÇ ÏàÕþñl2xcÄ ŸKBÙü³YG•=ÏF*»9ÉÑW,'v1H¤»)W)>öy?áõ«RèšÄWÝé:º`ç c.ÿ¨š#xåB:‰#+üÅhäŠNìzª`x3€¶R–Ç {Õ@0á·`Õ4ÌL•AãiÏ¿)B6"rÐñÍiOü$ú9U3)SßZ¡¬EçèwÐÿÏH]>¹þµoW¸üEæ6 ÌŠÄyžԗ¡M”¡I'ÆÓ‘ȯVŒÕ˜¨Ÿ3?7þ,ZGÄ?ÙÍwge-µí™ûTAe¸‘JŒ‘ó| þ"¾uÕ<ϵI4Šà¼Î಑¸cŸzûëRð¬ý§¼ssm¦M}ˆ¾Ïq³Göh<Æòä@Ýæ žÄ0ô5ò·Ä›vÀ±ÛÄìúuü±G°`²¤®›‰ïÅxU°o–ÉìÛ?@˳˜{tÚ¿2Šÿ?ÅžMewsi©Csg3Áw‹%´ªpc‘HdaîøWì͇‹?á9ý’,|VÆÔü6òÊ Y<’zdkñf©Ýó_©³ßÚo¿àŸØ Þë.¥on°0d(Éè2kŸÚ¨Ñêq(º1Ÿ™Ç|,ñÐ?b_Hò‹h¢Iå‚(7¼êŒ™ ܰÚp1Žy¯@ðŽïµ/ëvW—*ñÆÂ[xJ¨“c’A$q‘Ó°ô EðïÃ>ð©}áÏø—NÓâ´{½#PÛKr0¡7(‘NÒ €H÷­_øbÍîç×|Yc«éVš$¯k$Ñ´^eÓ!*¥åëèô[ècI|¹d]²gr{}*ßÄBÕüq;@D²ÅÀ[°#$ù×1àïùt–by¹çîšêûൕ¶EQ£èŠ^<—]ø)®é²éÖÐy·09î][¡úW’ü3hÛVÃcyÔmÎ1Î7 ÜñÎÑðûP\y3\ŸÃvoøLcP¯Úa9Ï9Ý\¹}G,¾Mÿ[µ©F5, þ7 v¹¶1m# Áií_;ü2o¯Æ4ø¢&Ò3a?+cå$HíR+Þ~'¼·7^ ,hßcŒp~Võï_5øJÖ{¿ZÇM+€]‚öPM<¶¸«ýt*¤oʰô;>þÇXÖ-4È´ý2Y– "ÅO2cp21ïïïô¯•ü4…h HÃ/‰íÆ=Åȯ´>?ö¥Ë_϶·²ˆ¨TÉýkãmíý¥tÒOÅòÿÛØâ°ÈÝç7èm‹Ñ(³÷ŸáB²üW²Ø}ÚúZæ&ûò‚âO(œƒíÇå_5ü*'þæ˜s•ky‡ñšú–`>Á lÿ*׬ÇϚ晑ð²ûQºñŠât„˜ñ«JÅåoºŠƒï1'…¾Õ|#¨Yø¥µi5msI0u¥Cz2¨Kƒ!™K±.Tà€œf¾ÑñŠtÙ‘¬ÕUFrÙÁæ¾]Á˜ŒÒÆd !Ksü«Ý î®y•Û¬[Ó`ø^+v›Ìc»=óZ=ªÏ¡j’²îanZ£YÅ7‚¾Ù>ø¡†íÙÙ—hö¥´Ôà·mB(’_*t1Ç„?†kÏ¥õ™·µÏn¥kࡽŒ“k©VI®"pˆ¨‘>:óëLÑ­É×­TË++Ûɸ?N?ýU,í¾ºÙ4{AÜ‘çÓ¢¶Ô ¦˜ÈÏæe|ÆGU9¯f·ðÙóøVý¼}OÒ/ÙrÙÂÞ<)¼‡Ö-ØçÔÛ¯JðOÓÿSëâíõ"$­,s]í#•39Cõ]ÛOåYº®Ò\ ˆòò‚rËÓÓÕ½4qùhT¨!zT#î#ÄÇÍÆ»³+h±µíÅí‹?Í™D…#Æk°Ð´wÔ5˜íã™Ú>7oPÇ9ç‡á»?;HÕ&q4w*ªOpTq^­ðóM–CovŠ&bíŒã€xþuòؕώ”z_†«ìòÕ%¹‡â ÛèºL7WîÈ1òúž…nx?Àx¿E{³+[¨—bNqÛ>õêþ&оߦD‰ýÏã* j|%±{o]ÀèÊÉ~ëÊô°+*¸u®$Ã/«©u¿d|…®YgøÃSÓãîÚÎù Q4cÁ„ðGq^ëà/ö‘ñCÃúŠøá\º’L-­'‹HkG·2,¸e,AÚHãɯ6ñÜ8ø÷ã1ä$klÇ|‰ýk7DÝŽô"á1¨ÄB;cqÝКúštiªJË¡òu1UåZÎZ\ý¥k&¾ðÍ…ä‘"Ë=¬s8^ŠYC=¹¯‚?i€š«§ê¾3ÒÞ×ÃZÜ6ï-ôø mt g2án£xäçx¯Óëm ÿá[è7Qaãm.ooÝ)9ÿøOâ÷ˆü9ã? jwsx›H³ð=Œò[ÂIõ ”È?»§…^çŸJðñYœpñæ³~K©ôY^_,MNK¤º·ÑºÔQ[ØévÑ*ÃzE¢*…àâ¼ëZ Ç È<62@Åwž$bgµhCI±·Te³ˆ—ÓÒ¼¯^¾H™âwÃô`ÌW¼WÔS’pLùêj£=7Á¾=Ó<=ð+HÒšàØê—3ÜN×SBZ¡ó8ÆCß8 ï^ïáÿK§Ëáç%¯m/ >tª:),|Î? ò?…¶?lø¥Ü.0ÒLU³‘0Œt®ñµ¡kz}ÄqÃ;ÚÛïXæ#k$àú}h•)8‘{Å_x“Âè> ñöÕÆwl¹Ô-o7GœI‘n!†@>Yˆ;]r¯ŽsX×|)ñ“öM¿Ñ§ñW‡'ñÍÔ‘ ìôi7dbBC,nKwp =«Ì¾;ÝÙj¿.SOð†±¢xgD2Xk&ò+ei»¦‹‰ʘ$mUeRC/Ì8ñ¿€³é—>=ñ š6‰™¤ÿjHÖîO;PµGŠa2ó½2IcÚ¿9Áe´ëâyìÚIþOë_ÓqXÚ˜\4éS–Ž6•´WkóOïÜ©ñ'Àz§„õ7LƒÄ6™Ôlç»K{Û-¤yL€Áç‡=±_*ß–žîh¦²Òì%V#̉vgߎµú#ñÛO–OxNídØéW¡ÀL–É@9í_ŸZ¥µññ›6‰ÌÃæ&ìð7t÷¯©PSÅ:kcäþ±*XUW©—oì0ìMjdbOÕ§Ư*ùbæÂázãÍæ¡[K±,ë§¼[†æE!¿ Ô7ðFšÍ¸¢Æ"ääò?:Þ®WMëú´ø†ªv·â^ ©¼îÒ‡\à€Šg—,¸M*0Ï&ä zÕ -Üù·ºŠ=Ü„<¯_|V‰mtÉ>c9Ëtlñýk•å‰+§ø‘Ï¥&“_üx㸼Öà°µ´¿Ô5‰‚ÐÉ$¬r@QÜÕé_¾x§Ç¿´7„¼«xÅþµÕuD¶¹¼›C–3o×fpΛ26ÎG4Ï…vòÿÃ[ü52*«¶±m’[†ù&çÛŠýÁð\Gþ¶’ÝžÀcýÖªÃгsìkŽÇÎ2äî~d~Ó²x7áÖŸ­xu}b]ÔíGw;Ísu9h3˃¹Tñ‚+ó‘m.%.±BîbŒÉ#F ƒøÎ:/#æhwù^dx%ú šËûKÙÃHÝùaèÊ£wgÇ 4ýSø£ø-l¯ç´ñùqGörNcç 8 ƒi,AÆs_R[~ÏÓhºªhöŸüEcâ·¸EžÏBI-í®#Á;ƒîê€X·N˜ W©|?ñw¢jÞ!±Óå²¼¸ˆÉ¹¨“\ÙíòŽ0…HT leé.ÚK½óÆZMÖ¥ Á$ º{´F?*ƒç8qÕñѹÚNkÅÅæ+Wå‚åKÓWØ÷hQ†äù¯Ó_¿rÙÓ>ÚÞëGø­¨xÃOÓšú-RïÄ—Wkþì…ßæHP¾àr»>ƒ¯ŸôëûÍc–7ú®‹|&{e’kˆ´é$}à@ÀSָ߈>!ƒV:®®šÔ’Ë/6—–W1¾DRf;ˆ.+ï? @Sà}´1ªý€«ÐÏ*ëÀàÝå)»ÞÚyù˜ìÂ2¥F6iïÝyŸŸúΗ¤j–’$:õ‹FÇ1‹˜RN¯sõ¯Õ¼0ö·2µµæzœˆ@B?à&¾£Ö,ìÛÁÚ}êÇ¡-äPêœ²Žœ×Éó¹žYe\";–ŒžþµÛ–KÛI¥¢F¹{¦õ¹ˆd’ öËjÀÿtå[6šÓB GyuóÊâEþMUi%Ó€ ÄyÃ)ÔL€éìÛå^¸¯^xÉnsSÌ¥‡[‰õ„·ñˆ Ï_/R”ÿVí¿Ä_ÄÑù/ñdRn·1Íyê4¡Jù·Œ-)ç9à¸Ç­rK,}ÎØæô¶p=–ÛâÿĘbÄ~8ÕQ±Àhøúâ­Éû@üO··xÄ¢çr‘½¬cÝ‚;Õⲓ:qÆÕë (]Ç‚ew$޹ô®*Ø8Ñ÷§±ÕGN½Ôc±^ínu­hO,*¬ã’Òœ¾I$’z’Iª’h³,ǾR gß ¯±þ~ÏSøçᧈáñ–—$óKÚ½›L«±Šî߸}qjúbëönð–û6ë¶k«™uè³wupۊ̃ "gîáÔ;qZaçV[+#‡V„v~A¾VWLýÓŽ¹¯Pø3ãXüûFø_Ä—20²‚ï˼ÇO&PQ‰öRU¸ô¯?Õô}CGñ&¡¦_Àc¼³¹x.€êpqÀàõÄU{+W¸¼Hö1W‘#ÎÒy.£_nµèI&¬Ï=ÊèýOÖþ$êžѧ“O׿ÒôhÇ›²BŒ¬\³ªW©W“KûRüT]EÛM»ð·V;VÿEI_žY]?•sÿ%¸OiÖJ.>Κr·È›†í *ñ¨ÕOžöüíÌ–Þ  á¥M%sžGÚý¯þ جµ›ZHYQ.lšh£f+Ÿ˜+åGâkéÏ þÑþ<ºÕ¬Ò\«Jeµ×nÇLt ÄWäÖȶ*²dg'˜ÙIÂ_]ü »–ÿF±yZ9¤‚Õ¢.®[ 0“N¤m©›JÌûçJý¥|C.« šx‡[óä“hûF7$ú23šïfñ޳㇖þ$ñÛu;y˜EfmBnF, ¹@#h<žÕó¸ }TgÌzõí2MB†>}¥ÂÄ°Ú ¤VGc.$“ 6ƒƒÉ=+Ÿˆö0çKn—ýM²ÚÖ´i·¿[~ˆß3rq‚qßµEìØº­dêÝ[ýfzñí^tÞ'Ô¤ÕáÓ£»±mFv-EÎ&+B…ò×#svȪÃ^ñoöÌsYhóx“LL»¾™©ÙËœvØeWëí^bâ Dž˜vý‘õU8{¢Ü±)z¦¿3¢¸MΡ}9kËuY @J®çîæ¨Þ\xjã0îàºóæ[•þ|×yñ#S}AâµðŽ,$$‰ðäî§êÊ þµ‹yã^ÎØêW1ê6°|òË6›þ­s‚Jà? ×¥‡Ïj}ªR_/ø'‰[†iYµ^þÞÿ€sßn¼=¬ø“ÀZ—ã+; NîòámîU#`²y.6Cq¼ÕH8æ¿<õ /î´Íg@×VânÅš×Qµ™÷42Œ†#ÕÁ‡æ¾ÐñBx³\ñnƒâ6ðÿüMôIgûóDð'—+ux÷*¶@FG·5KQ·Ò¾&ü7¿¸ñç†<37ˆ´ÙYlõh¯¾ÄdBv˜c–)<Õ™x\“ ɪXØÎ\Í=<ŸôÌhà§N‰­|×ôÍkHnP$O m¾\hKHÙÀEÙŽÉû}ðÇÁšÂßÙ#ÃÔt»êÉ¢Ës¬ZÝÏ-•½ÌªÒÉ#/:‚ÅNBŒ ãµxwÁ€žðoˆn¼mâoÉisa¾—ªkZŽk¦lâ¶vùœ/ÍæÂüœ}>u¿ ÝÞÊ.¯¤T ÙòZ7ÉÆ>l·Nyö®šàèÊó•›òä}' ŽÆC–ºŽöj×ûσ< ãÁñ·ÄÞ<Ôôox^ÓV0ÚièVCNÓü¨¤>_yepy|î`À¯£tiü-{⤾*’îË]±i¡Óî®]Q×LQäïÉŸš¡K…øÇæ+h 0'¨Ù!"¼gDÕ5¯ xJËQ‰ÒK R sò¼gfò;7¡î>•îß³äKkáŠ:½ÄÑÛÚC¢’IH§Ër 'ë^wàoA­x6k­M$}: q²nçÌo¿'¶Jõ±éSö²ª¯Çò8_:·cË|[cý©Y@Ó‹™^ÕfšUl«3N)þ“ËñÖŽÜ·úPGSÁªÞ&Ó.´Í~m>âS?Ù¾XŸ=c䩟O\Ó¼+:[xãFžPJ%Ú’S^ÃjX]ô9ý«={Çk4Ÿ 5—CÊŽöó9Á‹^˜¯9øyr-üm¶2ÒÄWŽáëÒ*ø¡ñG@ð³iRëW–öÖcR¾û-³©¿YžM­€3ÐNzÃ#§S^„c*^ ØýkøQ?Ú¾'èsÉ[É5³–BŸ(澩ž1%ŒŠGúWÈ_âÖ4º7ˆa°‹[°ž[k¦±¼!”žzpkëÙkbAàÇ¥i‰zžRZÜù«Ä—4NÆÉWíÎ72®äUpXâ#' Üžx¯þ*k>øiðÖKû¤¹žF”,Q†s{;¹$÷#‚x ^Áñ÷âî‹ð¶ÆãG‚®xòý Ó4xÀÝ*æYر@äËàšüÈñ ¾-ñ‹¯µeµx¦ypVÏKBsŒ}ÑŽ0‹’p2{×VF擲cR¤’Š»9ÍCÆšŽ¹í¦¹ooÕÒË$(’íGŸ”7à`cŒÖ_‚<+7‹<[-‰‡V™ ^ÁáTDé¹¼ÓÀÏ«ƒo…ÍÔíäÄî~ßvç#²v#éÀ¨ío'Э„F™;Bÿ,Ï<»Ìª *ß)ù¹äÅtÇŸð}ãªy\`“Ä>_ë±îCáOƒ´àÕÛâ±—fÊýžçvy'dm–ÇLY·>ø>Ñ5¨ñO4IÊœI{áK ݳ÷c|ü»”g~[8õ檕j«Y@Íàé8Ú.vòü:ð'ÚüÛOŽÞ µYTm¥ƒÛ–Áê2ËZ:oÁx®î-eÓ¾(|*Ö"†|Wûw–RÆãŒfþ;Ó5í {;m#YÔ¯ +%¡—k[*`bãp!G9ù=† Tñb,wèÚ†•£j·~fe†ÚÕ|¤Ç=GoSš*fqJÍ …¹s©l{ƒõoà‚/þݨxS´½Ô…Ó%¶¦ZkµÄQ pÁ€9ÉÏN:×Ǿ5Öµ‰5 Mô§…nõ)fµ²™óöhF7oaÇN3’qȯB²Ò¢¾Ñ¥ÔgÐôO–Rëö;qlŒmEôµËëõ¥äv–ã싇2Â2ЪôÜú×<Õ:Š(ßç±ìË#q¢ëÕ•»i¹ËÍgo§tEºÙ¼(±:É€A<äóΕS’7û8–1 )a°†,=0y®âÃÄ—ÄíRÓ¼? ÜÚA$Ñê–æÞvb?x#ܤ°!˜ü§<öí-2òÔÝ^|/øK¨ÛÙ’ÙÉf%ÿiN§å^Õ,Ê”"£7f|®'#ÄUŸ´†©üŽŸàOì›â¯|9)‰ÿ´=WHæ·gÔ'¼¹·ž9â]¢9P¥w}ìŠûgÀ±GÃÍ3Åv^&Õ¾9jÚõí¼dÍi§ØYÙYHÁM²‡“¾s»#½|M£x³LÐtxšÏá‡ì´`KHúVºÑ†aÉ`¥Ç¹9¯œ¯~"xžÇÆñj‡Æ~"¼ðók¢îãG†q!þ~æ…7s‘ÊpqØ9T)U¨êAêüŽÉ*Ôé*SZ/C÷‡þ›à´bIÓÃÿÛ@.Aºñç ýØÈ\ñÓÒ›aû8|/ƒM¹M+áÍŽŒ&œÊÒY_N$ÞÇ–8b9ü;×ã?¿iù"ð“Ùü0‡Çš5Ôò†kfýD ç »ä‘Ç$b¸­#öÉý 4YŒƒÅS\H1å™CüŸ€n¹a$Ý÷0Œ´·CõãVý‚~ k^-¼¿¾Ò|s£{9žîçL×çýã¶8*Nè8ªMÿêø-,Úl¶:‡ÅÝâÞu‘ä‹]ó „r ”\w¯Ï/ ÿÁ@¿hˆD­s£]È9ónǹ³Ôœ1Æ3^ѯÿÁCþ<ÇàýN±ð…ì/d‹ý#P{é.þЊÃs¤Jˆ9;w3{ŽÔ›®®ή~¢x›áŒºÏÁ˜¼%¦x¯TðÊ41ÛÍyäE,í `yddcxl à1œ×Í~5ý’ü ¬xÂëÄ~/øàËÓ%ª‰ôù|7¥µÁA…i\¹Æ1áêA8Çæ¾¿ñ»ãçÄïÝ›ÿ|I±ðµÔŠÖúvŸ,v2*]ÊÒ@¡ˆ, ûý8=Å_¸·ñ€Ñ5É¿á%m.{4žw¾k™ÈÆ÷wbè¤`7?1ãœùøŠwëó= #³µôôOó=ûÆþÐ`ðEÅ߇통+X×6vz¤³ý©‘Š3DÒ1Û¸´tÇS[^ñÂíCà¶™¢ßëž}oEˆAª2He\¯ #ÌŒ3œ†çu¯/Ô¼IàÍoàŸá +â¾—àÏ t¶šimotGÇÆž“žÍy_u¨I‹ÁŸ~xÇUó¢k…³×þËöUUùYÕ··PFî9ükU„憒½ÿ»ó¬Ôï(ÚÝúýúmÐúÖïZðœøÅÌðƬÉ{ÉmWÃå’BäÅ€ÚkÄ5øÂ/>ŸãluÝ(E½#¶1¥ˆ¶å 2’ vüEIàÏø÷Hñ‰Ç6¾MSÓdó.4ýv9㔓–hÔ’ËÎ@õÍ|íâZOüA‹@ðÖ‘ž‰hzhA²;TO”ÌàtáqÉ9úŽšP• .òkæßæÌZúÅeʯè’üß|CÔ¼ki¨,¶ŸØ–Q^¹Û$˜aŽ ƒå>ì8ã¾x×ý›'žOÚRúØJ~Î4w‘“ÂO.IíŽe/Õ0:Žó_ ø‹ÃòÃâHn/lukwžÑ ‰m¦ŒÄ@À Áú×ußçÓþàcXFÿ«‘†ù=>aüê½Âo¿RI%aú¬è"±‚å_º27̲\§±5t¶Vi¨ÏyäϘíe »æö5ëÏcæ)[Xd0É$—,6É™@Øñֳ㶎â;d’=ñ±ÚËŽœÖ‹D׎¶ZÏP’ xÎkì%kEX%Šå„Ÿ4B ŒO çÓ5Ë?…ž(Úq~g |4híiðÙcš)=fÌ8VÉS¶QŠý½ð°1|MÒ‰ÈÅËsø5~-ø@{/Ú·áÌÏÓ.§i0 `¼ó5ûCc ë÷Ðä*ÜYë–3$€÷Pb?_@±ßSÉTä‘TGR4ö®*ȹ¯¡u_ÙcöƒÐüÏíƒ?b(pâ ]sìc”çðæ·¿ þ i¦YõoøûDˆ ùµ? Þ@0:œˆÛНiÔ|¬áÄqmbTŒ ðÆ»/ ÙÓ ”ËlÜ¿L×!uäYÍ=¥ÕÔ0\¯‘LŒ2;†Œcñ¯Qð‰„è¥V[Y×ÉÚ¡ÆG;N:v85óüCQª1å>ƒ Šs—1ú?û5Xîý”ô/-O•öÛ… O4ä}}â³Ú|*†úãw“oi$Òm\’’p;ׇþËè'ý’4‚ªA÷{A?ôÙ»W²ü`‡ìÿ³v‘GªFÖe&›ÊvÞ õ(=+¦ƒ, &ûN&.¦2Q]Ùù#¬x ußjú¤¶Fêâ[“5ÌM²YLŒv…¼Œ#Wן ¾xsGÐ¥¹µ†Òã\²HÞ3§–Eвll‘ÈÎHúdW—kž-Ó|á]Roà«)£º&·–?´Ãy |®åŽ*§Œul õÿƒ_~Üè^¼…u¾Cn×d•›' ‚Ÿ»í_œÏR•àÞ¶ùùeÃêŒfã4µï¿ËÌò_Šþo\^5°WÔmðbÜû|ÌŽF{f¾`¹†òÎæh¤‹P·™<ÒÈ%=kïk‰­5ýN7³µ‡CIÄ(é¬ÙË*ùìÅ]hû d3}+WÄü3wâ{};HñÏìùâFx¦ljßFœTHÙ$ßË-2@¯¥¡_ÜZn|†"‹IFû3óúÖßQÔµDµµŽúâv”ª©„7ðw=‡½}ð‡GþÅHtýÂYb³kªí äüÇzíbøâëÞj:OÃÿídð‘xS]µ¾ûVÂÌP2ö¶’ãµlü9ð75 Zþk/xÓOš5XÚ-f·Ô‚¬”äägÔs¬¤¯ÑÊ”—Ìì툰ó´×µxWR°]!¼=«YI5¶­¡6Ë»iŒWR/˜ÊÊz{÷éŠñÉ,õ?Äé§j^×l¯cu µ.¿0%NåÈÁ9æ½Âþ}oEº½²žò »¢Y±Â<‰ÚGbÂ…;ã½rãeO•ës\¾#Z3ZYïéæyGìß§x®ï@ºÕümâm_ź‚Ü\Iµ&F’Q!¯Ê«’T+1Á$“ÛaK^Õ?lýSá׆¼%áÍ?O†èk?b¶4s3€ºXmÌM¼dñÙ|‡FÔ~[j–ú_ˆn¡–Â)‡ŠïcŽ9®7(>͉OQ”TÁéŠá4xfoÚƒ\›Ç~!‹J—í_dÓí¤Šk˜íþW¼™aù• $F8=øü¶tªO[š›m¯åÛ³Š_=4¶ìýªá =.Z‰$ÿ›ïR¿ü#Wö’ÑnŽŸiqáK«Xˆa½ŠÒìÀ±ÛJqçJŠÃr¡Éð@ïX^!øM Åû'­ÅΜ×ßc+yt"òʇ¯ñ׎ý+wâæ§}ÿ ÂÚu‡‰m!²ºIgŸP¸·ì°Ÿ:Ip~WQ#Fé’ ä z$×þoÙÞçUÑY<†mß1Tãlž™õ!™U¥Š¨ ß+Nɶš¶Í¾¾v¿cÏ–]F¶És&¯dµ¿eÓÊý üAð«ÁïðßÃ~ñö•‰ôëKŽËP¼¥õš±Ï¸H½pH=ÅG ~ε¿xªÃEÐîc{—hôëû¦•.-% Ç“v[žÙÉV¯íA o~ÉÒYë ÛôY­5-2%Ù*ƒnï‘ä\¨mÅNyÅzÂû/X|œ%¾ö(í.‰‘4qŽ@îÁ“P¤ñžõŸöŽ&8xÊU[•ßV»lÿÍYu–áž!¨ÒIYtOï_ªw}œôÏÙ›áµÄˆlbÕ|s¯›K´[›;Û›“n¤ ´r0IÉa=LWUñöyøW£xÖKؾXË;àfº™>ÛañTvÄ ƒ¬èWšxç§,¸54°”éRtÖÌãž*ó»:/jO«j-¨é.”Ës“ÍyƒJÿÂÅÒƒ1Qæ qü&½/‚~,šÅŸLÕü%¬œ%†¾ ‘ôuβÂ?‰º[-çü"ºÊ:«Ûy3àãÕ$?ʲ¥TéÎ üE}v-¯#Þü)un¾ñ™™®™qžp·¿c˜EÏíKâh¾W]ZÄ2p9yŸ?øå|­ý£ãoZÊ/mu=.—]CM–0ç×;qúרŸ°×‡5ï~ÐVðéM«ÞM®5Ϋéúmá+3iûTÝåSι׮Ê –"=‹õáEt¾2'†ü#~ ûˆPänqÏ4¾(ðN‹skokaÞ‰àáÙšíÚñݲ5|n([i ~rI¨¯WoxšÎö OS® +Ax‹êS©¥ÎÙ%NNH Ë‚k«œé6kºòÃâ/?üƒ¬­HxtÞÄÅ‘‡½pà x@NkÆ¢«æ›\‹o/¿¯à{õjSË ã©µ¯õÛñ4é÷0otK»{+5-4±Ü.ØsÎç rÒ1ú³ùÓÅ+Ö~3|FŸÃúÍ£xOO|ê7Ÿy-Áè é%ˈ2#-ü ýr©†ÁÑr•’Z³ä”q¹†!B-ɽõý%»>DÖ<¬ø–M'ÁVú…ÅŠOå]kR)Xa\d’€äœtEä’šöø Hð½¼z.•áûûÏ¥¹ukØBMqÍÄ­Ð!ÛÔtÆÐ21^ñ¥;øoU‰àëÛè¤ÛG“J¼4`Ì÷JøäùÀ±àâ¬]éWÞ#ðn¡á›S®ø/T¸”[뺳óo-!9VBFÖ\ˆÜd ň$_3ˆÎêUiè—MVžrÖÿÕ·>Ó ’FŒ\Uäöm'«íoø}ö<ïàN¯qoâ¤ñ&¯¦\o&}Gø$RõHå GGo­xŠíVÚXt¿†v×WpE‘{{{pd†v]YŽY½HùHÖ¼QoheÕ´¯ÙL ¼6–L‹û¶y !ùRBxfÎpG ‘^§d| ®]ê^ðÞ®,t˜¤"öL˜n/Q0 qŒF¹ ì¹Á8ëœzq>ÁKÙÓµÿ¯øcÌÄÞ»´ì|—à=JÖ¼]ªjöšÕ¯ƒô¥Û(´„ùS¹8òÇ>ZànÛס8ȯURðÿ‰|yo}¨M.™à«Eò-fòÙ]Ï‘µL8bqžÕì±|:¹Õ£Y&‘´Z£-Žbkͼ{‹OVíÇ^Æ~‹XÐ~Çqg“á +pE’(ÄÊ:p¼,`SÞ¹^aJuRJöß·ü9аu¹9¤íÛúìy7‰âŸß/‡üCÖ—c„KX`¸—v2üó\ÇSô®ïBÓ†¹'ÚmnâÁ"@­ÈÇSšúGIøeq©Zèºæµm7†´±µtË5™#¹;²©! ÷Pƒ É@<@›àŸ…%Y ¨#•0Ë(ºmÎ;“žõïaTëEòio3çquiÑ’çw¹ñÚü?·“à ª ¦òe_‘Iç§á\Ž£áKãYÒåÒ4Œ‰ñëõ¯¿ôÿ„6¤Çec«^ÅJ!™÷/8ä×êÿ³ýÄMp¶ºäaårÆÚKS¤têöX˜jsýo =ä|•iáË‹K³ P[Ì<‚ÄÎ…[wðçý“_|x3á/…l|¤kŸi¸×íí¢™nf‰U#fÁ*‘áç7^µä7_ |eg¢ÚÜMö[­¶ÿf2 pß&JžÛN=ëïßüñÆ©á]vÓ´*î;æ7Í$r'–: Œw5çãçŒi(˜7€Nóÿ3À‡ƒïæñ$Öƒ_Õ#7LÛ`´·… 1í¤×¦)·_´{NÊÝ|#}â Êß:Œ7ˆežU(t$ xÉÚWÚþø5¶­syâw!¤ÈM:?(ôÁ_0äàûWËõ„øcñUð7†tMf{[o5 ÅrD0M¼íF't’ŒH\•÷ñ¥‡ÆÂÉÝöýz½,nµ^DšVßôê|¥âKO éZý÷u=&s¡+ìÑc»¹>m”g Êñ7ï ùA9Úè+Ët3¢èzÖ¿ã}{Ãhž`‘–Ýd’ü¯¼ çh8ÉÖ¦³kâÝZßM&£¥@ X CåNW8_3X/ñ(<ãžôï%Ÿˆ> Üø“UÔlf’9˜[Z‚ Æ©Á•éÏ ¿ÓºŒ½üÌë×”â—ÜyV«á ü!¦/ˆoü9a¥Ýj4Úm¸gm=dá#1#gþ-™ÆqÈ®¶ßZÐt_YÙørêÂöþþ`ºŽ£p†=¯õjUS¦;cžk¶kÝ'Zñ þ-ñïœÑ<¿Ø–hÅ€‰r í‘…ÉR2@ç¹ÍGðÄh&±ãÛ+ûýêí|û-?RTwçpÍü˜’1ÎÏ¥vº´ê.Z^Ç7::ÓZ>§x—Á×)ªYGá}vk½bûþ>±åªui~¼¦·m´oøÒÕ¼â½rfa5ò,1«Îs)IzØëTàÔ'Ðþ]jz†•u§Ë¨»KéD’Ü"yc” y¹<€MOeâmJ-4ɪH%Ôæ±1M4*cŽÝG@O#«dóúV¸m£Í³Ü¬UL5KË’Í­¯×»;{‹ôË«h!ñÔÍÀjZÊX·Cò•8¯Eã‹à_3WÖ<©Û"ŽM9•ݽÎqëÒ¾C‡X›Q{ Qµ½?Vxdh¢hBQ³€Y ãÔdà×km%œz zýÖ¡§j×rǰ½¡SpÁT´ç±§Wˆ¥Üžž¤Ç„¬ùT¾‡Ñ“|R¼“S[]SÀ>¿²#«Fòä)Œçð5Ÿ/ÄOG’êÿ¼8í,{Jé÷Q‡—ž˜`¿•rïaðê~öóNÕ¦º¶7 5¥Ð,`¢¿¯LŸ¥E§YZÞø ëÄš†¥¤ÜÝâOÝÚ…ah ÈS¼Ý3êsŠçþÝÄ$ÝÞŸŸÜTxw )%Ê—ÍìtÖž4øq曯ƒšîŽ¡C;[ÜF7vl”ŸÒ¥´Ù‰nÖ[â7†ßpÚyìCzczÖo…üâ]OÀ0ø»ÄPØi÷÷ f°†ˆH”¶OÍÛ+Ç\{× ü;øS«Gỿ|DKiÒ´”±†Íc·‚ó“9pî±ÀéŽr–>iFvºß©¸ ÆqºOnŸÍ[+_Ù#PÖôÛÿøMþ/hWöH‰¶Ê‡Ê åp®§æÏLŒÖÏÆ¯Gmð—DO†¾'xÜjr;ÝH‚8Ò;8”³À ñ‚OZ×ø%áßx‹À:gÄOøSJðe¬ tÈî.·RÆ3åÉ)uŠ€prrz׎øÃÆ¿ü[ñOÆŽ»eoà­:Ñ.Rþ-4 ˜Ë’ÞQbÛ_rp àŽü×,ñµê¾ZpQiëwm>WOï6£„ÃR›u*9FÚY__š^g™hz«ê×Úæ³­èz~‹5Ã,’(ù¥¾’%Ú†YÂŽvãžõ/€´Ÿ_벦˜ö¶:˜³^ßm·µÔìKQÙTq‘ÎOû5Â[x†ûÄ^>µð]ŽŒú‡Š biKí³1‚ œdîUÁÉ^¹ãÞ½ÌxçÂ_ þjš\ZâjÞ5¶¼0ê:xc¼yœþé#ŒË2Üäg©Íw:ROkÜã©UrÙt9_øãI¿ðÕÌz/Ù.îí-ƒÛ–æ(wg$žò7#Ô ùƒÊ½“C›S»ÓÖh®n ­¬wG‹«¥ŸÏ•åsÀ®ºÿR×4›FÒµýÛZÖÜ_€‘Hü,bíñ“Îk.í3«k:\¶¶f'·Ó¦.¹ × FwwÀö®Úâ8gNþ§èGì½ûF|øu ‹ àŠ/‹´ûåñ7‹.ìm$•¥b6¬R4„ˆÉÈ*óÍ}«ÁB>èïoq¯é>'auødƒN3†Á Ëû½Åzƒóp{Wã‡Ã{CJðªëÞqe'ï%Ö'¾ÓÒâ-J|â8ö7Þ†5éŒÌH#œìø¿PñwnleÖ´ ÚIk‹júŸöDž6*wIvù^zEZôšq޲_Öá Ej•-»úýÇínŸûeüÕü ‰^=Bå”E~örEÉb¡H+¹[>£šÖð×íMû7x¦)®4oZÜÜBwJ«ph@8áù€Ïèkùú×›â~³Òt·ºûºâ"ýعfÆùîzzWŸi>#ø—à~}WImcJÔ'ŒGq¹¯<ñÆmOLÑ4»o ø{S—û[O·½‚óV;¡@ùÀ# ‡‹pÝ[Òº]?ãf§¥xN]GÆÿ VðÍÝÇ™eeò¥¥¢úF’ ù‰$åˆàœ ñXž!ø½ðßâ–‰¯ÂO¬Á‡f»¨*8@Â%¼î#“–  t¯Aû*œ²„•££ÕÿLñÝ*ð“U)»ËU°ïø½§ð׈.õ? ørÖþ;q5ðÒ4¤ß§<ÚÞr py ü¤òšOÅÿ]XM rx¯D¬76ž/Ô-–وʘÂJœtVÆ&²4ïø@¾ñ†Áé´¹µ‹Tµ¼—Cñ|‡Ï\’DÈ1’KøÖí¯Ã/ÙóXÒì¬õˆÿÃÍ@¤’ìÕ5uò›B”¹mгÉU;€a*)R¼Û¿¥+Ê1‚M;õþ®}AàØKðYþ)ÿÂOâÝ?Aº´‰/®[X¸eŠ8]ãóY˜+‚If9äð+èO|dÔõߨoâ&— Ã{s¢^éë߈¯®á–RÒèˆå6¯¹ÎÖ–B`á0r|¿övðÿÃcàeßÂ+K«GÓ`I§ñÍͯöuôO<Œ°C(a¹ÆeÀíÉÍyf±û9Ç¢þÝZg…fÖ¥Õ~ßÚ¾³.‰46ÞaeD±£l•¾rÌO+1ÅF6Ÿº’ßôõ]…öÕWW}¿Wä}ày,lþÚ­…í“i±Â!‘í§VcY—ÛƒšÁýœü<ÚGÄO‰ÚïÚ^øÜjìf¾x’9' D8_º‘…P9$“×üNð‚¼'ð“T×4½ÃFº†ðØB!ŠõXΊ1"óÁÆå=úŠóÿ‚>ñN…ð¯ûv?j–ÍÜ&eÑv#iqª’B»Ùx“plò8Â×ÅÓpÄQ“„¹SÓ_øÿ#ì1NT¥É_ÐóßÚÂqë?|±(ƒÂÿi–å´˜AŽ9nw)ß´q°m-Œcw8Íz·g4ž ¹‚;-aÑî‰P̨ÈcÁ¸É\õ€yŸ ·¿l-MeºÖm4›KhÛXŠ×Q‘spÀ1Xä'÷)Œ}À7`tç6>6xÄþøO¯Éám{Ä0É¥ùzdOp%¸¶™œ!G˜‚&·*A!†W“‘ŒcR0§:¶oºîÏM)©Êq§~^ϲ;ŸÙÏC°›öu±MZÚÙ'Œ½À½ˆŸ+€YˆÉÈv€bè~‚ÿö¿šIïŸX²¶Ó¡Ž+Yœ!*ï°9<ÈT ÙÅKà^à?ìÿ jý¿Œì¬!»Ô5 ÍVæçÌåCEäHÞQˆôÛÒ™Ê⼿À:N±ª~Ú¾)µ:¦­á? ìÏGso&¡9D-,“XF8˜ÜrNAÅtã0ÞѸB­´íý|­ø¸ {¥kRÒ{_úüO^ý¦<9{oðc^“Â’A§/بé28hîR¯ommxX¶ød#Ì[”\,˜äƒÁ8Ž ø žø-ý·à߉?äñBÄkm~âí/QÜáž#ÖǶ4E@ÇÍ»/*£8á\jUMÝ÷ÛÏåÜyÆ:•LD%J›I¥÷ÿÃö<ËÁz5üÿµ×Žt­Md“M†÷íPiæV!š\3É&æÉáTð  Òøý¦ëo iZ=åâ+W_²ÊÒû)xÙJ¾âw ݹd«téŠò µÿŠ<[&¥ãÏè¶6·Ì~٤ܛ[«×ogL¨0€ 2s^‡ñ~ßÄŸ|-c¢j+Ôü_m&³äÆ'´…n¯ÕcÌRJà(#¤¨Ã(5êÏÙ*pQ’oN‡%Uâ&äµê~[\x¿W–"¦bðWgúÖ$ÚµôÄfOŸ„·Kq—Žö?‡¿|Sãç·¸Ó-Wû*I¼¯·<¨#vÎ )ÏÞÏõ•ñ4(EÊnÇ•GZ´¹bÿJ›äi¤#®Ü×S¤øJóS™rò$l2HMùô¯Ñ ~È:v“¡ß›ûíXñ*ȦÖ)í¼Ë[$àŸ4—“¯øwLÒC¶¸±{q%ÍÄIþ™s Ïî£C…QŒ`ç¿ã^ øÇ´5ü?3Öã$®Ý¿ó»Ã¾ñ¯…µdÕ¼3­®‰¨B¥Rhì•›ž£æß•z­¿ÅOÖ*›ü_a¨á@ÍÆ‘çë‚+í&ø1¡-¾›*xQæ–}©ö¹-”©ýäüáˆèqœZ‚Ãà‡†æÖµ=%ÏŠ"¹°a%Íë¡û0R»•afâAŒçñÍ(qŽ ¦Ü^žË¹…^ Æ]k÷¯>¨ù‚Ûã?íö146?õH”Ýyáá·Ž¤õÞXüeý¡4fHõo…? ã»hÖCÀm‘¹VÚ7`0éž}»WÐÖ ¼'gާ&§5—…¦UŽÏí–Xžâg/Q•ôVô­i<7j—šŸˆt+™l™wçMtk}ã æÈIÎxÛØtÒ¸§»oÿ—èŽ ðv:öQ_øVx¤?´ßÅHm7ß³ÇueÏSxør:à˜HãŠö?†ÿ>$x§Ãú´¾ð¯Â-"þÝš[}p×z„xØÍ«°.àääñMoj× ,VÚæ›a¦_)OmÒ{qÝǨ“ŽkKøáÍ&Ø®#½ÕSPòMÕåÑ‘'’/»+à?ì®Çãæ¼]€t_$îü“ýlz™Wãýºui¥Ý­~ë–—†ô_‡?Ø÷šJ`À±%–’öù$¡©æG-Žë\—Šv†ïìí‹‹ç\y©a‰'l“‚Ä6å`HÔ³ÕtÙêzG‡u{  éLö—²Y±_9“ýe¼$¤ í’PXƒ‘ÁÉ1ý~iž®ÿƒztè¾o±õÿÛ“Pä„”RÑ[ñK]oÕü—sÍï|]áMÃVÞ½Ó<ËmHÛÉ%­‹MkÃü;`<±3þ&ÜY¹ëXž³»ñ–¥$Sk k¤hòu'žžkHHlì‘÷‡µzœ:&Ÿ¯ü8ŸÃE¶ƒðÞ[³ a’&ˆ»mö`…¤‹É=z'ðƒ,t«=7Jðå®¶ F×)rËŒ<{Ç2þ-ÄŒóÔV«†§zqRR}t7¶¾G\&­ªÍ§‹oóûÌ‹«Ï ø‚Ö Øè±j^ Úöš¡ò1Ð?,!?Û~¼=²üGá;âED–Þ𧇦S¦G¤íŠY>WÆV2»ã’ 浬|#lðÃoá˜ÓÂ~‰„7âÄùbç<Îre댃ž£™¸ðÎ-¥÷‡ü ©ë𛚷Ø.Ž.ÿ¿>ZÝD žvß0ô°õ!¡´·Ûóõ<ŠôªJ.­D´ßò^C%Ó®u?M¢%åòü3KuŽÎ•®/.æÃ‰`¹o³‚I|— ŠóïxWLñ> Émo‡|1lw¶0ÉäÛjYv#(çŒm$§5Òh’k?iÔÖÛR¸Óü>Öo–¦÷êöËæÁî\ q#Ê3×"»?è ’ñgŒ¼'k…¤3-´È—›Eä6ÃvcŽCä1¦iƧ;œf›]Ÿ7Ý–åÓŒg“êÿNÈæ¼ðÛ_‚ó]× ñ4Þð˜hî,´oìõš5e]²GÍ–K~jŒŘ]å ¬$ ¼3 Ý2:{×o}­ê“êsê—zt7Z¶mˆ„ñ+.pp„ ŒF~lõâ¼êÑÔ¤¶û‹ÈPcžÞµôœ/ŠÄVIVk¥–šo¿™ó>w!k çÓš9Ђ×%J1íŒf¿A4Y#áö„èÛKiЃŽ?€ øuGûDvâÙ¤Sóù‡Ê@Ï5÷O…Ë\ü9ðìÏÊŠý6Ž+ÍÄÉ8TÓLéa|›˜ùÊ–!³ÎH¯‚?h_ÞxãöÀ@IÎc.“jÚ­Ø|»G‡ýÚ(çqóÛ¯jû­nRÓSTxžG–\#Š1Œ×ż9áËÿÚÖã^:-¼ž%:E¬pë q$W0F‚P#VR0„¹'ÔàWƒ™W<;“>ƒ §)âÒK£<Ç^øYÿ _‡:=•ž“à+{XÑžÝJÉiÊúLßÂÃîòzàWŸxóÀ:n­©[ø#EÒm?áÒ`_·EfëÂÄF"e!÷œsþÉ5,Ÿu †óÃ~(ñ³üFÞ ®·q¬Hêç€Ââ ùOQ‚›AÇ*UŽêë¼Mð¢×VðLžðÎ,üq«\‹©¼J¬ßiµ¸È-;¸91…|¢v•:W‡NЩÊ®‹Ë¯w®Öÿ†>¾½FéN¥ï>·éÙi¿õsÇ,<=¯xóÅLÖÖVZ_‚¼),àý¢ßÏŠ[¸ÈŽ8#á@}û¸Ý· ‘^óQ´ñ¬ÓG¨Gg§]éó40#³Åu4|â2F@çÜq^÷â6Çá^›¢ø#KñG‹õû)í·^ÛÜÛ ™tÅÉìS"&9?Ýê0«º¦…á[ßXøÞÒÃOÑ.ãÝhbû79k•p2‰?9<–ë]us8©½WF“ùžV9MÅZýSqðTÚ^©®ø®çÄØÛÞhÖ7 gmu#[«Õ8ýÚô‘bÜÝ u ¸ð~µãé~ðöˆúªÙ0]FâÒçÉkÙæXw‘‚ünnFÔ1Á¯±>*øÎÊÇÀÚo‚éWÖŽ¶É"2ĶlÃ{$`àOœlűƒ_U|ø5¥ø;Â_nÕ,¢ŽèÆcš!¼¼òmÑ»¹83IÜü àW·bþ½J5`´mþ òøŸ ²êÒ£7ï$¶ó_׿~F]x:â)naºÓµI£‘¡â" )ÁÁd—Ž¡ê+¼ l‘\,Vw‘ùÃ÷Â5·"O÷°Fk÷zóºF§}-Õþ™§Ìò ¥MºíUÆŽ˜¯2Õþx"Iä‚oh÷)ÕOÙ”ã<_aW¢·>ždïµÆ(| ¥…Õ¤ÖÖW[EÔI`sl9]ê­Î 8«ú/t-4]Ô[K[‚<ØšÞx•°rqë_¬S|øx%óŸÂúZž§bíþUæ¿<ð¿Âþk¯ìE,OÙmÖ凜ã$g%Æ}x뎭¢Ûþ¿¦ž>R’Q¿õó>$Ñ5h¼¥^#Å—Ú}âySZ]^OsG’.K…sœ©²Ïöoj?ÞçÃÞÔü\Þ"ðî£f'»MVÁå€DoÜ#)ÆÖƒßµsk?ˆ|s{ªjÚ—‡<6ÑÝkqÙEºGcó%²*Œ’>Y áUFkꟆVgü+-_Äöïiªjº„¤íŠî9Ú/à ´ü¤ŸJøìÛJܱMìôWòüþãë²ú5åJRvÝoßV¾jßyòWÅ=Hð7Š-µoN|/”Ŭ›v‚{sÀó"$§œ[iYq»·9­¼iáàÙÓôÿ2M]”Ep÷p2M,ïÓz° Îxãš÷xrÏWñCëÚ¥”·öðLßgƒie$+1þ-§$S^eâm5µ¯Ú:ó\ÓáÒV×ÃöþR^ÞÀó‰&|1‰cR7€ ò玦¸ð™?»-×S×­—(Æ-=¯úòüÎËáåÞ“ \øžßR:>¶Ðƒ5²È…G8-ßcµUð‚-¼[ã SâF«ke­ZÛÉŸh%W(T•ÞyÎIû¹è©5ígŠ>4Ø-„à´Ûˆ¦‹2* KIËŽ„Œ ê3Årüaà½K°ø}¦Úhz¶™ †Íà,^åHæ9Îs0`NC¸#œç§©èÔ¤ôÓ[/^ǵ,¶X,E8Þ+W}.ü—t|퉌µGðæ›öˆ|Ms3Ũ]MQ¤¨;dMÄà°ÁRp9éSkz:…ý‡|4'¿ž]°ÉRo‚áGÜËJ¦FâGaߥ{“ð>ËÀ_u/xÃO´»ñ& ï{xò9Ymœ¬JùÊà;ÓþçxiµwÄ~ñ,ª+A¥ø¶êû¼aŽØ‚†óNpe(Ç\b½¨âèÉIRÖßÖ‡ÌÕÂÕ„ã*+ÿZ™+øeâMát^Ó4ÅñRÅeæÍ•ŽH6àž7Àuë¸öÍxT¾ Ô¤ƒ}ÍòƤf_<™ È`p }q¢|Cð¬µ+8õ_k ò}¦ÎÛ÷”DûÌ%ˆ)þ×OÇŠòï7†5ÝRç^ð5ÝäzdˆdvkVL¥ŽâÆpx>‡:\·Ôçâ×®m5qud“Á+ ‹:$ôÀïŠÒ}~Êvš[Ÿ ÚÛÚ£$ŠÔ…qÛ }Ö«wºÖ›$Lº Ê6x0ŒÆ9÷ýk¥ÐcðÔ±ômB"ÃÍTû#¶÷xÈ?…kÏ;™6™çÿÚ^žì4ÚI²ˆ8rÐåÓrã­}#ðsÅ?/ü_%ž¹m}q}±§Xæ¶dµ‰PeØÉŒ@ï^A=Ö™y©]ZYéªmAó·BKy cÀ®G°5n­â-ST¹·¹¿Ž5†ÚÞCçwR ŽNN? áÅâ¹Uš:ðôy•Ó=ž÷þOxOPÔ´èõOhJ®43*0Á*ûHÊäcªü?ƒâ¶•ñ-O‹?Ä@®öÉ5©H†9šÜ` w­ïÝkº¿ÀÏÚë³éº%Æ›%„’Í*O ÁBbW–ª pAæ­|ð†¹á߃1êWz®·u<ÓA<­sq$˜>fû–bÆCÎ@` WÉãsE r«J·+ÚÝþ~GÝd9nÕ*ô¹ÓÖýU¿ÏÈ‚ïÄ?´…µÛˆtïÚÄ:žš êZE«:ã8Ë$h9=xúWœ|Ó¾:ëßô?øÇâã{§µ:*[KdXíó"6ve†A=9Ï­ˆßÇ·¿¶Æƒy¨jš×ã¶Š÷GÑ–Þ´yRcæšOáDtpŽ[ž»s^óñZþ þø™tÅý½¡U¶»‹cC(_63Î9î±®LF}šQ©M{E8Êײèúmuë±íáøw(ªª?cË(Þ×îºöýO›ÿf߆rX>·âßÈ×ú–óBiL›#dNÐÇÓã­yçÇm/ÂZ?¬5_ÜZXèóϸJ>y@S¹‘rXàqé_BéŸô¿‡ÿ³jjšpm;Å––Mru§b×]Íæó‰#' ÆxñŒ |ó£¥jw&ñV±àMkÅV’ÙSUÔììæÎÒ€Ë.×`ʈ†echçä¸_í,Ʀ*5_*Ók?+o¥¿áŽ^!Ì?²rêxgIsK]î¼ï¥ïøsѵí;áçÅÙ¶7ðÔw¶v±}šþÐÛ´76­Ž’DÀ2œr0rë\oìçàß„z^©wá­sľ߉:d÷('aÉTñ¿o;jŽ™â„ú^³quc§ê¾º–#³êÓÌûŒÁpG'·jçãÐÿgi—m©èú;Îâ@WR’Ú@ê~W\ૃÈaÈ=ëß§ÂΜ*Ri(KTº§æúþÍTãˆÔ•*’¢œã£ì×’éø“ö~¶µl–ZÆï ¼¯"ÅtÁcX·Ýnc÷7gåöÇAŠô?Úwà>›iðºÂï›KŸ¶‚k8÷Ç#ª!xÊç!†3Ícx×Âþø«>›.§ñúôÙZ¬ém¨[´n£ø¤Fdcܰ9­»Oø¾Ûà$žÒ>&ë2ébt’ÆîöÚ;«›0&(äÏ1žÁÛØô?±sE*5¾±ïCF­£_«·—ÌÕq&PãZ—ÕÚŒõ¿[þ‹çò=;Ã_³Äšgìß ì^$ñ߈îaq¦kS 4]IÃ[MfTÆ‘¸ã|jzäòWÃû¯x«ã‹ì<w¥èpi3ǧAªëÖ¦ñ …&`‰£ÞªK ÌÀýká]‡Æ¯†«u¦]üG·øƒá™#N×­¦Y-œ’wÅ1fe9#*r¤tÅr—6¿µƒñ&ãWð'ˆ¾éZT×Ïw.–Ê|©·»)d%½ö•¬édù§¶œkTŒÖñmuê­ý# Ns”Ê„8Kf—n÷þ™ì¿¾(ø£Ã¿ WÁ>=µÒÇæîßû¹àpc°¸êTy¨á“¶úëî¥Óïò;rêÙujŠ5ñ6nÖíÿo7ÔðO„Ú§Æß|bñ5ׄW¾³:„ÂçTÕíä¿[©m HÈJaGÌ[#¦;×Kñâ_ı‡Àþ)ðMññ=Ʀ,6èÒ©´Ô0 «$21buS¸0 äa›Î‡í ã…Ÿ®£Ð¾k—¾ŽöW’âí%‡ro<ÆcVT\†r®+Ò5ÿ ¼Y­ø#ĺU®¯­xŽxçû7‡á´ÿ‰¥¼ÅW}¼ˆHžAÞÄ!`pA®|V0…HÔ©…N/knš]]ö~êáje“§8Rĵ%¿f›é§å¹ê°XüM²øIk¨è~–êTX&þƼiÔžóy¡|Ø×»®ÇÝ5ã <_¨Ü|~º»»ŠïÅ:µœ®—¶žÒÌ6± ¸»b2Àg–ÉíÅ}ÿìÇÁ­rÛÄño€|E§é­yý‘«ÛG<—c[W·gIÈèÑ©óã*)>Qð™¬#³Ôïô{FÑtÝFäÜþúÕ¡¹¹~ždŠØa8®L6/ÎU©FënÎúî›ÓÐÓ—a'Ë Ueg¿}<šZú˜?>-iú¶»¡èºËq©±Õ%»V³ºÓ'µ!ͼÐH#2ÁÏÊW ¤û‡ãkY¾]êšEü(l²ÖúlÉ!ÜÌŠsŒû69óÆ].o~Ö~mKÊ’ÞÚÕÔ+¢¥LeÁå” õêkÚgðþ™kqo¨X ? Ý=££4â¸S ¹Àpîä€y5ì©Ñö1|¼®JínxWÛYNê.Èç~ øËF_júÃj–Ú$ZŒÞjÁ;˜ä6‰T#8îÄTß´®¿¡@¾Óõ'°‡S¹ºYí.¥¶ó yx¦jd\ƒÅu²¶‡a¡ü šÊÞâ›æº”ÞÈ# nY˜³4™9ÏN€p8®ö…ð]–Ÿ«hJÐéö—¦ê ¥ ˆ–XÇDL‚BŽN8­êÆŒV§ÕªÎ{uüÏ¿fÏ„_¼y¥~nu‹ËILgN˜²+“ó³ÿËSÊäíî~…izƒ§hK‘m¥O)Wφ%òÊŽ1r3Ri:O‡ü=á?GÓt+N±µP-tûqqú•%Í¥Ýˬ¶ðœ°v6¤n½ѱÜzWÁfÙ¿×q ©IG¢þ¬~±•å E)(¹uÒßæQmÇbÊB’¯´•iÓ!Ïqõæ­Ûé©Ê–âV%YÎØþ§ïféS-…œw­43Ýï‘M)”æQŒcÔsPGblÒòþ 4 đəp;låsÎ rƳ·ñÛ*+þ}£IàÆÚæò(ßsHîÛÈcÑ“?wéÓñ¨‚]Á©½PÈÄ xAó}7ú]¿ZYÒõ„s­ëOxª±ˆ m°N:«wÈ>Ý*;x5Háx?´ín$gÞ0'ËÙœ@Ãñæœ/¼¦Ÿªÿ€L¬”ùÿÁ$š]jíš]ö1¡#fõfò«âC×cƒâ¶Ú]µî£®ÝèÒÂÌÑÇlCÅtøÀ# ȶöÎs tsM{k.ûãdÖœyVñnWƒŽX±8pO°+žõä¾#ðƒêþ(¿¼Ò5]MjÜ„! ›C@`£š¼] )ò¥æµó}Rûµ+ˆ„ésÞW—“Ñ®‹»ûô&gñÆ’ë±¢åY“pNx& •älÁeàtæ¸/|TþÎñiÖÚ>»<{οyÇ·E!3+`ä˜Ãà`÷GAñ‡ãO·‡m5ÛwŠ!¾c™²èె)ñ±ßh,ê¬\/a[ÿdÕ©O’T•ž­¯/G·–ÎGÒ£QÔUZ¶‰=õõ_Ž½ŽƒRñö—ýˆ­¤ ‹TyÛ©bm–ò)ÚÈóca|Ÿ”å^sáo ÁâŸjQx}3Ã~I³â)`{ßɃ—B[-sœoœîùNHù}îËO³Õ<-‹[Û)|5:´%-7ŽTRCD ¦ <¯5®i°iÖ¶Ö–6úV•d Äñ¨„(……#©î+ž¦?‚Œ¨Ðƒæ{½Òí¾öèºOŠÌg F&k•l¶¿}¶ó}N6Ê?B÷ÿ ôËé4eŽß7i2+݆ɑRv]²Ëóá™Ð0'ÏE¦¶¹­%µ¿Œ'Ծĥ2å™~Sk%ÆâY=à`“]~ººOˆt—Óµ%™40ÂO.h¦º®ÇhÓ±q‚À‘Ò¼ë\Ó"ÖuM:ûL½—ÂZmŒO öº2ˆP·Ù# ªÜù£0@8&½|¦ø{Jñ”µw×^ýÓíØð³ºžËÌš”#¢KÝ^‹ºîúñÖ£ Üh«áë+ 8´›DmÂ'––м˜âeÁ]Ýô+•ç5ÊÇÿ¼?§hºô÷º?€ ”Ogg¦§Ù縓a_6,cËŒ”œüÊqŽk[CøQŠ&µ€jzŽ‹ðêYÞ‡7 ’°;å’Èg$ž»1÷«¸Ok:ÇŒuKH5•ƒáÊÞß]¼?jÔ™;í"F_-á~ùÉ8%@?|zTâ¨Þ©ªïŸÏÈò«bUÞT†µ¾_/37Â^¼·Ö¯„µð÷Â8 Ù,fÝÈ¡B›cû˜¶†G`0Äe@9c=·ƒ.é´ð&¯y¤ømæ’[ù.À»‹Ì=áY (Äà1û˜ÉÁ'5qnþ"x‹ÅÖPxCH¾ð~— õoí„¶]iTªÙÆ9_™Y¢†`I5ßë:¿š÷Áš£kà»x›í:‘+ óᄺM¸;ˆÇO—us:xš•œ’V~iú_ϵõ7úÖQQ»ºõ^¶òîqúÞ·ãSÇúw†‹xNÓN¶¿Ž bòK™ZÞþ ¬^^ (A›’¥H‡5Ÿ©j^ Ô¶ÚãÂWZ/Ãí*oßë–éqÔaØ.Áò»DÌüÖ7‡õ-/UгM,Þh÷ÛÝù.±ê]ØE)]ñl$ö㚯â/‰öœw¾2ë5´1¹³GÓ$‚ ¨Sf¶•ÀŽR¹ª’qšô'ðrzïs‘N3µYOE²{3©Ðõy®u];\¶Ð4ÍsÁÖñ5ÀV½06¡ãÛ¨R³"ž$8ÁãŸpƒÅñêVÚÖµ¦ë–¼Qý‹u}oöh.ä’ï|»Â†ÁÇjðÏZ?†ü[¬j>!Ö¼ea©Xh/åiÞ†ÿ|ƒh–uòË*v¨ùr <ð=—ÄÖÚ¬î¿aÊl­¯"&LNdÇFÃ(#°ÆkÍÇNŽ{'n¯¯üuac[[Ús&ú.ŸðÅ­ì|weqâí[]WIDe²¶¶™Z$*§÷Ž ðOð†úúW ¥Ø¥Å±$åñ¸Z·­xtêÚ¾›®”»Ñí-íÞÝáÓO“ý¯É2ͺ6#…,ýack2ýéÃŽ¹ü«ê8^œ#NN7ÖÚ>›Ÿ+ÅsŸ´ŒdÓµõ]v°‘)AÊ«t'Ö¹Y\É5”–¡Úuè€vêz÷ô®Ìçª"tØÀc’FMG;i¾ ð…ÍËG ¸v9ÿ«99X»Ï§^æ°´?ÚÙxšóÆš·ö¦«xƒÉ´ŠàÀ±(ÎÙ&I·³gŠù‡ã?Ç]kÁß|;k£jz ÕäJò.tƸhŸþY9E`°ÞyàÕâQ¥ ϰ´¦ÔÅòèšûºEÉpÇU…ê?‡ÊýZüzü¶¾xGOÑ/í|Yã{øôÝJåÛìÜÉìøÏ%P’í8þY)þñ5ôöæ‡y奦¯¡ýš5Ûo W‹ˆ×Ó“Éõ=Í~)\~ÖÚî¢"·Öõ_jÏl­ìñ²Œò¼©Ç<“Ôš½¦~ÑÚkÉóèþ¸ çýW¿"¿kËã‡ÃÓI&¿¯SðÜÆ8¬UG9;Üý©VYP¤µz¤ê­sWV“­Ô‰R2Ž›y¯Ë›Ú;Ib¢_ êÊ„üÆÏTŒä{~ó#òª¯Åý2îÒòk_üBÐ/ä“|RD²´1/÷p þy溫biµ£<øeõVèý ñ5ôZ'‡nµ-XÍigåٔDz¯«Àð_Ä?êzž°šó@·ÚÍë?hñ©b’1Â1>‹’ÄãûÌz gÿÂÅÄ~ÐôM#ÆÚ‡Ž,ÑL÷z½Ôìÿ¼Çï”ÿ«U*¯nç&¯ø ëýSPø©&—&±ibïa i¦áb’pp¯2ùr[åÁí»•ò¹ÎhèÓrí¢MÚï¢>Ÿ É"º§®º¶•í»·‘ë¾ð³øK@Ð|‚ ¸/ÐÉ«jLÑܤÎK\HÀg*ä•F¯¡‰þ$½—ü+ÝÞÐ,­ueºŽÓJ·Ð!K9­¬ÒEóawÆ<—v³08ÎG8ªsx‡Yð¢ÇŽÏ‡­ÛR”\ǨiSÈTJ3åÚÌæ\ò±È\ŒëøÆ^Y%¾Ö¯¥³×oÓ62ÞÙË­Ì “›i¤P’œrBÙÆ¯ÏÔ18hºÜ¼ÓzË—füíÑl~—WØckÆù)CH©ieåæ÷}­Íaà»_Zøvçþ"¤PèÒ²•Ú~Q$r.VEÞê3ó\¦·áMwáÀÍSÅ׺§‡üEq³ÜØXÚJ.-ŒŒpWs·Ú0Ä€¤œ?†ºiþ,hÖ¿/5ÍWÁ:ñ†4§u­M[«]>2£tμ×ë’"G!A'Êø×LŸã߯?ÞñEΛàKXu;½SH ›¨¥Û¤Nr ¶ ‚@Ç ÖøxÕPUkG–2Õõÿ‚¿3›**££E¹5¢éÿþG9ðòÓSѬo."ñNµ²ÿ¼¹¶k¡5¬ŽÄ±Êa’. H®—B±7ÿ´¼E¯¨_éëçÞ}’̵«1Ì{É$‡Æ¶ç¶p®¤xßáôúmŽ›­ø³ÆV+;ï³»¦O Ò*+tÉ'ÔúÕý_^ü;¹¸Ô-Z+ÙdU1 …¥à>ñÉžœúW<«ûjüÑW·[þWþ‘Ó áðœŽ^ó{=’ï¿Ë~çâËëxòÏM u Ø®äwÄîÊ ”¨äã¹Ç¥t+aâO\øty‰b…fXö¢BÌIìHTÃM&ÏáýÅíõ毥øš÷}๶¼dKÆV5„)¢^…JÜž¼×x‹JÖü@|?jš¹ð—‰®UþØÖw."¬Øpcnº¨*¬ÂÝðs Ò¨Õ*5,ûÛo?ø$¼<á/¬b)ó%m/£×oøÍßÚš÷‡¾#ø¾ÇáÆ¯£øvÛXß§‹™í74á›a‹‘±¹<óŸJ×ÔÞëÃÚ¥‡†,4ûy튒}¾;—(Î P¬1×;ºó\¬–2[ü_½Ó÷Ü\5µóÄ^Oßkc$É5êÞ1²žßLðíÔ¶rKm>ah`vIØ®HÇ Î»£‰©õŠt›ºW7Çá)gÖ®•¤ùo÷˜:.`û÷öæò貃 ŒìtžõÕ]éöÿÙ¥–Ú+‰e‘B,ѱÁÎ;õ§èšƒ[ÝÃ§ÙØßå?—ç¡ù=W¹ÆzóÚ·1Í4J²[vðÚÌOQÇó¯¨Ã·Ê~a‰~ñæúç€-SþL–ö²$×&D’®2znÃñ­¯ xsRÒ4[©î/ÒŽË €v~L|¼ö5Ðø‚ÞM~#%ÔË;°% ÈSŽ€÷>õ} ß`Ø 2€%ó *W¸5Ý)$ÎH·cÄ®®/´kV¹ñ%½›ê!äû;y[ Ñ“•FÁ9Çrké¯Ù€é:¼SâË»=I6Ú†âbæSTv)ïóg8äšù‹ãlQ-Þ‰q7¾lŠT@¨\:÷>Ýk騣Mµ“à—Å+½VÅ h5ß7Í™p ›x·‚ëšð39·FR½otw¿¢»×¾!Íá-yí¬µF·:›0ûJ@„»±K€€ œçèú‡­ü9&™oá{7N¿¸‘bޏU’#áA÷Ž>éêñ®ĺ7‹õßÚ9î<%â#ÁÖÖºlZóC[æ¸Ë0V+½NÌŒžA=:ÕWÇòx. x÷LµK-"si®Åhßè÷jñ.æÙ‰ ÞcbIùñÉ×μ<¥F1„ÒRvkÍéªëøŸ]€Å%>iA¾M~K]ú_Ã?ïø±ã]_S’ÿJÓ¢×&M?N†åà12~ì™6±%‹+¹Ú ôÎkoÅË­êŸ|=áø#“RœM$¯$Òˆ¢žÖ=¢6¸e,$-´/Þ O­o|<Ô4K‡ÖpÙê–÷÷¶öæâðHÎ&y“æ2È•bOÏ‚ ïNø_âÏ xƒâ•õµï‰¼,Þ5‚Î…o«$÷¢ÐpNrÈÍyxÊØŽy¾NnEmVÚZýíÜú|º4eÊœ”yÝôµ»Û×±‹û@]´Ÿ5 \ôí^ò¬R8',²Å+’H›‚p¤äu^3Ç5è_¼¥ê³%Ö4ø.ômCû+}ÉíQwʇÂY‚߯ø£tÅ©Mk¦Æü+õÔò=±S NúSQLÚÉŸŽÑþÉô¨ómŠbuãýÅÌ1ÿm楳øûHÁ­Çmÿ­"‘À^}’x#ã«›±_²HŠW -[Ž4Ú8ÉÏ9íRâV6hü‚¸øEûMéÄìÔ<9©®A&ãJÿÇH¬É´Ú;GšãÁ^Õ±Áò¼ÛbZ¿dd† )Ç\žkÔím¾Í,²ÇÚ¤ãhô¥È™k#ò.sñ~ãÃ:gü$¿t-I×–â0x渉c!$Ý DÉa€‘žGJòï†ÞÓì?l?ÄKRº³më mØŠÁqØ€¸ü=«îϺŒ1ëº=œd)Óô‰.HÇC+3~xA_*ü1TÖi{åÐtË[ù4»+x.$¹¹û<(Û|»‚±.wç¦=M|÷UåÀÕIÚêݶájn¦aIÛ­Ï¥¾1K ¿Á‹»¹a–hìãYFÔÏ@ÿXN>EìO¾}ðf—ñGXðcx›KoùVÄ"h×6³Ìn¢ÁEÒ°òXñóynìk¤ý¤üY£X|>ÒtÏjíá£ÔÖOvw]Á…1ŸßDXªà¤° £5Cáí áKÛXj~ñ§…looÞËWÕt£‹É&hÒ”ÜHPÌ6– ’3ðùF½,V‚Ó0ã'êz öŠuQ¡Å¦ëz‡´ÍXG¤býä´¼ŠY9¦Gu ®‹’caØ|Ø9Wï*qŠÞËO#ã%ªÎ¥Ÿ-Þ¿™ÇüøF|Wákz¦»âȼu£Éص #ZžÒ¤(Ü7’ʹèêÙæÍr_´D~-Ox"=^(µÊÁ.`Òîž+kŠÛ%1“µ ŽvœŒœW¨üø›áCñVŸ¤]xŸÄ–Rê2³j.‰,ÖŠí…XÖLäž (ž+Ì~4üOðõׯ]XÔôOK±Óài#¾¾Q•~錣aÕÕ†NT:Î3¬ñZµ½ß—m¿àAPT$Þÿ3êHt´wW£$m3'ʸÆÒz•ôÏNÕet`;kk«ØDL ¤¿,¢£“Q†€ÜÅ|øÁ„˜løÈ2°${0È÷4¡ˆoDŸÜ%E-[_xÔMMçF[[y-HÃÆ—L[?|6˜ýŽùU•—X{)á‚ËMWU›Îºo±Æ¤ýã ]ßð»³íÍdßxÓCÒ|[e£^5ìrÝqØ€ý‰¤í O÷UÏlñÛ98¬5ñ†‹â]i2êŸaÑìXµÊFƶ0ûÁ%#5èxâ½¼&_V¬—=+uëøëÿù¼Ï6£‡ƒäªßNîÓÀËŸÄ ¬k fÚOˆnm#wÄSX¤{¬ŠuÒ%㕆89À[„©V¢Äb5[¤Þ­—vu–Z†©Oq¢øbþÖk Œw²ÂÛ¤gV!üG'æ—œÏNw_ñBXYÉ øzO³¼%–{¸ãýݱçpBx’\ýæä)<óÅYºEÖìàû=ÅÞá‹Y㺵_³M8_ùg 1ÂFAnãoSÆÇà} cŽîÎÔxSÂh²<ÖJÈ·ŒÍ»ÌÁ?»É$–_šBüäó\ÑÈ£6¤äý~­¾¯²è{‰%Ê£óZiÑ%Ñw}K:?„aÕt¹/u’ 8<Û™n$¥`pà`äƒÐ»uíë]ÿü ÞÖ¼¤ÚjzsXxWM•.ôý"'û*£FÁ‘—ËÁnrÊJŸ”y%ð}•œ‘][5ï†tI#ŒÚèÚb*Ì\•ÕpvêS ÁÎlëþ<𮋨ø›Æ÷Ô<%o6Æ‚öÖ2ãîY ˜“¼j£¤œ-{(ª|°§5Òû¿O3æ%Œ•W)T2ü== ­gI±Õ4뫦’- Ã1§•wg§"ÛG¨ ácm¸(ƒ¹,8'nAåÁÖ^&Žm o;Køaöt)¥éÒ=¤¥T`Žu`ÐÚ´í\1#‚M[ĺ¥®…?ˆüi¢Ûéß í¢G†ü^–¹v-w-¾ÀZß¡ù™X˜¦;Rñ5†¿}¦%„×Óø&xcvÖ¢FŸªJà”‚7~À0w !`J\F‘¾‹®_þKñF[‡3“m_Kj´ÿ#ÎÓÃ×מ'Ô´/øÄ^ø[oƒ«uöÍB9‘$VÒÜ+î·ÿj]Åy ‘»–cÆsø˜©Òt{ÂZKgªj²ù1ëñÈQ@pà äygªA!vt»ýÅZmÆ·&¥§]øRÂå ŠÒÎu’93†YvôU`FÓÉ#ÐsÕ]Xêž#Ð×Pºš}Ã$å0³]¯eÑ1Ü`úbµÄcã‡MÉ+õº××Ô)`'‰qŒò×OøcŽuÏx‰®gøi¯ém—:½Ò]C$³J§æŽU·Mn˜%ö`·U¹èÖ~/ðw‹|Vtû]Y¥ÓÐÿĺo,6º¡DË,#•T}äS‘ƒž†¹XîmoV Tž+T¤Vð¸ÐqŸeíÉ5bãöÿ¼ý‰uh,¼v b{ÆC###–\Ðw®­Ñ•:°åWÒ׿Î÷»:+eõUNœ¹šZÞÖùX©ÄßøËÆZ§‡lõ{Û.Êciõ™ûÅÂŽm£›îáz:¶W9WOkoŠ Ò}Þ·™ DÃ3²pЦÞAXý@õ®ÅÞ¶¸Ôdž´Qà{[4{˜â‰YãrH0( z¬xPA=+áÿÀM*ÛU’oëÞ0ðg‚.Õ¢Ô­´^@uÄÚr¬îNÃ’w\&Ù8á‡v{**Œ¬ù?›ó9h¹F¬W/?áý#Úµ˜4«Ï A¥ÜØÙE Û,oº 1D`}Ô\`ã¨ã¦k‰ñíâï„­´ïÃ6á;{Èn`·µ>LÓ˜Ø6Õ`37L) ‚NAÅC©xQ|AmwáïkzÃxR+s¾žå§™zÌ[t‘3–$³¥sž’ËT×t #û¢ñOÄ{}:öa¡¶ŽâÞÓÁÅÅ߇mÄ7»d±‡hù£uÀqÓ*¤a•Y|B²Ò< á}{J²Õ>'jZ Ìÿ³u{ÑVäŽFGò¯ÖíÃi:q@ˆ›HQ€A=ëïà£ÓcóÜDýíÍiQ¤º¸x®8™|°Pr§EqWs‘ ¾…%Á„†Ýqq2m,s• õÇõ®êXÊ)ä¯<ŽÕFæÂ;ËÈH!hÊá¤n$r šŠñºÐšz3M<­»+²“(Á•ñÜu±Þ¾¬ð¦Ÿ×€<'íâÚFÚDb=¸Äþ|WÎs[,0KI+'ÌKzý=ké/X¥ÿÃßÏp²E¢»I"ˆÜŽwñœÇ=Ó<%«x²Ê]6Â×Hbòu=#IQµéàFdQÀÛŽJà°ÂœŽ+BÛBñ%Ù¼M*êÏMðÝÚÖôÉ!o³ê[8D!Hò÷` u#׎5¾¹‰’-?Ä·X[ørõXdRß-cMìà¹IÉãš÷øYþ²ðn†m5³X\fÖé®­$Šö)Q2èð²‡YÏ+޵æVxØÙÇ_ÅEJ)6¥î£¬Ö´ïÏð¼Gáý>ÓÚ$¶â+}Kv¸¹•Ññ,¶î¯„T°ƒž>ï üÑ¥þǺÅ ø÷âß¼gáÍzÖT˨éIo)òÆSŒ:¿Öº»_‰þ$OÚÞY]Úhº-ã×L–6G LÅÀ?9“ÇNkØd·‹ÃÚ$ɧÜ\[£ª,°‡;®~ìî¹Ç˜Äõ3]|]<½¬iÙµ¯›óäeW_1±ö׊z_¢ò^ûŸZ~Áš÷ˆ´ ^ûÃ?<1ª>ŸOum©iCqå·V ¯µ€ÁëƒÛšóÛÿØwâœví6Ÿƒõ¨~i–Þâx¶§<¸1¶ÁÁäœWêW…õ Ø<){cåÃ[Ü츻höìšDî[Š/.pH'çzß‹uh¯¼Sáÿ Mlº·ˆ-"²Õ®..Šv+l² ÷;Ûh=kÑÂqDå(EÆûói÷%þgŸŒáoeNræ×N^Öêßã¢?64ØËâ~»u¾—„Ž«*HÐÙK­4O!Nq˜ö¹* cŒMÔ?dOº7Â;›ÿgÿ_¢éz»Ýjh7ÊÇÙ)êvÆÄàdg¥~šü+[û[‹DJ[ÙÛÉo„ÃZ9Ê<‘6q‚ ¨#ør{×_kãÇñ¿Ã¾½×´«_ o¶iz3êIóIÈ„ª1ËŸ•Ü.FJŽ£5ÑK=«Q¨ò«ß]ö<ÚùT)¶ï¥¼·?8¿gƒ8×4iÚÞŸ¬ø ÃÍój> Ôô÷‚öyöx¢‘GîÔ³0ûÄžHúu¤ñ%¦‹àí#Ãø/ì -ÍüÐMrê0òDÊ¥T¨Î‰åq“êß¾&øgÃ~%ÓôxšÛFŠò2Ïss&dšN²HBŽ pxÀÍT±m ûÃ;h—V—~û2϶L.ò¢6+‚1žkÄϱ±’öÕ)ÝGo7oÏòè} প:p©Êå£zm˯ž—8ß è–_|=§xy£K}Ÿov¤\J¨rË"žTî6qÀ#½w?`³ñ/‰áV³f[K–Ú9ã³c†•£•{¢†äÐbµï¾xbq¨øƒYû~•âISn£§Ý4S[»H€!XŒÁÈ9‡ðÛágŒµÈµøçÆÚ®¬ßF¶úDZd*¬Qç2Ê%W/¼År<Ÿ•JR§Î§ÉmmÕ?•ïë¡ëbý¤kÚQç['ѯӽ¶‚?øzß@°xííD,÷SÇ—¼v¹}H®3áÞ“wðàåö©¦ø&Î ý¥ï±´ÉeŸV¶·f,nX‘ráNö…pʹT.@S™¬é^3Ö-­`ÓäÒÅrLÍs¨N²›³‰þ]ÖáÔ¸œ€BùrNã´§¬üEñƯ¥7ƒ¥ØüM–%žÎf:sÙ7ß©ûâ5©ˆüÞgÊÒ$¬¨EÔ‹÷”“z«ÛE{½þçÓ±®fçMÂ0ƒ‹ïk»´¬¶û×VG“¥üSñ[øÛX²è±:hVQßMfó+`›¦Te`{ n@ç‚kÆÓ"dÍ(Æ87<ŸsÖ5]CÁ6vÞÖî´µŸû5æ‹Q¶´uÕÞ® >S ŒnlõÈÅr^ƒMÒ|1{§%„“j×Ouª]ZºÈó–À¸'%TÇl º8•Frø-î­Ñl#©8FÞõý糱ȷįOsw¢Þèº{ø’ÎÓϾ€jnt¹!S±ÝlÈ ÆA]ËЃOÌ?¼Sñ>Ò(|qâß \xjòê@úeíð’(È?»ŽDÀ1€¸ÛØ÷Á5ôgÂÝ|Bý¢µ]BøÜK¡EwåG$,ˆ‡å݃êIö¯Fý«ô+-oàLº/‡ìïÑÄqÇܧ¯ozéÂãpø\JNš÷­ò'_‡²›´nÿÈøWÂZöãØ¯õ$Ôînî%ó^[KÔ]Û–'pã'°¯Vø¥®iqéZÞ—h×±}×+¨bIÀVuŒztõ¯_ð·ì¥áðwNÕ5Ñ{Œ²³¥ôW #F; B´g¡Ï=óšóý_ÃW70Û%Æ™&£Z¼@ºhŒnÚ~fƒ…s‚ëOŠÀbq\Ô$Ûÿ¯1f”³>Ùâ"”emzÿÀó9"þ+ý;K¸¹ŽîÉì£- ¬ªs!8 ÷ÇN;×¢y7Ð432¤:2ôqŽyõö¨4Ï éVÞ³ÝÜÏktÓEö´ÚAÆLeN{Öåüý“me/Í3:8@½v…ëÅ}>ögçX¤“<âþå.u;Ëóˆà$0Ç{×uco ð•ÃÛY}¤ýœ0B>P{së\&«†¹Y­Le²Wvy=H®ãKÕÕ4HŸí oPì\ô¦1Î=k­Er¶ÎN¨óÏøm&¾þÕÔ?¶e2[«FmÐ2ÂÿÅ• zr+èÙîäØ|*Ö ¼»Õ‘¦¼ô[Ë ‹# (Ç͸|Å»±#§â·ú†®Þ&’Kh6éQÊdlr~òúŸé^¡û;Üj¢÷Ç÷ÓºòµÝº`“2›ukhðB$9Þ¾[6oêò×·æ}]ß#Ý´Tò~&j¿¿µ’FÓmP”ùŽUä˰==:`Wÿÿįˆ>Òt[Lñ™§ßIy¨­¼‚Tóãb©Ž€£‚py žÕ­‡ìÏu»Iu(ob‚ÖòÊspRHGÎ$W#€¬•9ùHî3\ŸÃˆ¼FÚ®±ãÝóÃúZž ó­œº(˜] Â+Ë*²J¨Á^@Æwt¯¾±K–.ÒŽÏe}¼Ùö™mE†|òWŒ´kwegÝ.ǯ|bðÞ‘¬ü;ß-ÜF±¤ÙÈÚ^¤¥’Tb6d‰3·iùsƒÁàŸ…¾ Òÿf½7C>Òí-­Uf¶’DsZÈ£wž’˜JNìääç9¯9ñÖ²¾+ñïlcÑ®îuˆî§¹6JÏ,؉ b%òºàq‘^‡âωZf‰ðÆÚ~¥a©xOÅZ'†.µì­D¡k˜Qi­åBRdh;NäÜ»•w ù´¨c¹!JwOU}µ¶Š÷·žÚŸW[‚ö“«$¬Ò³¶ú_Wk_Ë}ø+¡^øËã ÔµwŽâë]׿y•6«[#ŽÀÓÛ,}kôRêÚûX–[Ø!ßm/Ü…’Gn€a_‡¾ý«žÝˆÑW’N YVP[ý“Šñ{ŽŸ/t¨O]—‘·ä ºË/ˆþ¿^-ZåôÊnÿÐI¤Étfºƒ)$ŽÝ+ŒñÃǥɖÀa·5~?xZçw—â;HÉ Cú⹯]ØIáß´YkuÙ®R)AnOµ>k-I6ä‘ðÆ‹è¥ø…ãkŸ$[„H,Q·r~TROÔ“U¿g](ßÅòïxîµ <¦âåÏé^kñãÄikàkUf}÷:©uØ¥ðYøÏê_³‹üA“àìSê:‡,4àŠöÚažA~PŒå¥æ?0õÙŒÆîõð¼X¥<"’W}]×x’ÇQ¦ìº+žû_xvÏYøÁà¹îâÕ³—4Ï¡kfg–"Ë,½##` ¼3Ž•µá]ƒ3è·®Úµå‹Ã5´­…dÛÏ=²¹ÅtŸ´v›®ø»Yð¿†ü9¨/‡µ)ƒ^™o ó„. Àž9ÇÅy›xã€tŸ j0xʈº\š”jV•„vïlŽûLÖòG»»,» qƒ×ÈËj)à©Ò”ÔZÙ;þv²ûÏ¢Î0ÓxùÕ„\“ÞÝ4í»3þ½†«ûRøƒX°¿µÕô¨aŠÑomвùq®Ð…£áˆ%'æÈäñ^‹ûHxb| ¼Óžx-%¶ƒÍ@N ÞYÜQ}Êþ•âß |'e­~Ñ~6°×þß›¥#YévWRZ¤’´ŒK·–T¸êØ<Î3]÷í áçÐ~ÝXOsq¨xQ®­§··™Ùîì."}Åc™Žd‰Æ0ÊœüÄ¢ù'‰„¹Úz|þ}ÿ†2•,4éò&•ü­ßCºýžm¢ð¯ÂH4ÛTÊ„ÆÂ@8Ï~1ùׇ|gð·öïíwá¶Ôä·´Ñ'O2Éä_1]Ñ‹lÛÜï#é]ç€tïZ·ÂŸøL<Þ·°`eú¤›µS´¡ºGÛŒ£Œ#(=ÍxÇÄ?Ø]ø®O&¥­ÚI ¶ñ§„uP~Ógy—IDqã' $¤aÇ'¦Ž¤±R©ÎŸ¦÷·Sˆ‚ÁÆšƒOðßt~‡Zêw‘¯´Ë“¨…-â"]êN7+ð;ƒ‚=:fÏö®ž×–ñIr|Û¬ùgÉa9ÆÒØÀlÿ ðx­49„¨ùTõ'ùÔS½¨Ó%‚uˆZIþ±$PÂRÙîsø×äôáNM{Ÿsÿ;Ÿ¶Ö«8&ù´]×ü1žÁ­^âÚö§ÂíaU+÷ûàcæ¸'ñÞ¬h‹¨xkQ±»Ð&q©¤êñνʞ€}k½·]2Ý>Ó=‚´†?$[ð®;áÈí‘Ç5Ïø“á…üm¯ ßiÐ `I¥à ;¦qî£2ô ÓA cêrŒž‹Ÿ4Ó¿åòî|FoÅ~å4œVïkúy¬>³×t7“ÄÖÈÞ Ó\en¨ó;l#³³ø‰¦éú7‰µI%oGe¨Ǽ…Wqb²\œ€HV<Œ&u}ÊŠþ_–ïÎÿ‘¥Zø:4½êo¶¿«éò7WÃÞ ¿ðÖ“§£ÉvåIè«йÛò> ŒÇ®2Ëâ׆µÄWw¾ÔUÖÒõ«so-“¸\’UщÚ$ݰ¿ÊAé÷:®“á5M?L¶¹¾Õ®Á&®®6Ž]ÏDˆ{îòÉ5ÓW^…D¥Jþ¿Ÿ¡çQÂÑÄSæUlßn‹·©ZïÄZo†4IoüEc&‡«F†Eµža3ȹàÂêH›sqòó“‚`hš–“⧛Ş-»h泌OkáÛÈÚ/±¡æ9eWqlîŒqÓ'¡Ó|=¥}gãkNÓõ]nÂÞS§HÑ~ãNW#÷hÌ@–ÇAÐpÚ­ž›uâkoÇ?=Ähè–r»Øç%&âQÀ"#”\sœV~ÆŒŸ<¯Í.«[z.Æ’ö‘\µ£òô¿™Ý¤:GŠ Öõ÷[Ý¥„!^)TrYùÆÓÔg¨ÇJÆ×õ _x/T´×í¡¼ÒgB‘i’F¢ÕâDÀýõÿ`c#¯ÄKàÛ[«ÍBþÇ]Ô|àûÛ…»mH9$¹QóJ¥²±DFÅ· ð$ËÁÞ+ñï/Š5ñ¡hºuá:}ÕŒ1 µÀí¤ŠV!þÇ<ŒäŠÆ¾SjQ¨¢¿ÿþëÀÏZ¥7'ë£õò*\èxºá5{Ë©ü5£¨ ÐØD–Òj€p’2¨ ‘†à€H>‡á k:׆…¯ˆ.¥o[È6âiȾ»„ƒ˜¤nÅ< OÌÊqÉŽki>+Òt—ñOˆ­tûÏØ—¸âo*îê]ßh[laöÿÏ=À¾2£ ªüQÓük¡Ç®hðë×_äCëÉfb†wlŒ‰Áb©Ð‘ƒZVÂb½š¦£uÝëo>÷õ'ë¸^wUÊϲÒþ]­èrºï‡<§4χºU߇tx¥/vÚ}ÁŽÚC»çX•÷`·!ŸÔ’>nk³k—÷ÖÚ~¢ëÅ­­±–K¨e‰SOŒ6;1_:\d¢ ÎÐwàíÝ“¨OavdàÕ¤Ðmv¶£«XØ<¶¶Ãª£H¼ Áê3´rqÖ³®¾#xQ|Y‚ ¼“HÓ˜‹`UnØýØ„ƒ„Ý×–ÜÀñ]Ô¨*‘Ѝ¹­®»ž;­7)J–úiµ‹Z?Št}SS ¡ë—þ·¤½Õâ‘ -6zÊ¥„ŽX 8ïÐԺŠSñÑ-®¯ ðü[µµÛKG’Ô@TáLª6Gà:ޤkfHo5K[ŠÄé>´Œ%ãZ¯ÈN æNN:ç5Eî,/mÛLðÖí/G\¥Ö ºª©ûÒ‘÷³Ð“ŸJu(ÒQæ’võþµ4ÃVªçɯÞßÖ‡ ™à€fØŽÂÕÚd¶uß˹SžeÁÉè:V£Æu}r m í´ÿCn¦öúØœF$E÷¤=YûW…Øølßií¥|1†ÛözD±Æú‡—æ¼Ñ.<ØX™ä+»¸Œí=¶Ÿ³\hYè_'ÕYã2Ýêú›\ÛA½w%ÄCœJ?t»Q”œ€k’8Ò¥%JVoºüÎ긊•«©VWQÒÉþ_«;ßxBð'…­´m i:eâFÍm¥˜f%¥“Y‰$“Ë1¯™çð†|Wbó]h–z•„·Î뫈ü¹¤¹“/!Ï ¼ó’zb·ÀÞ$½ñ¦ø?\ŸÆÚ®¢eþÙÕ¼K 4Z (%.˜Å°M¹†‘‚$z.½a®xÄZ'‡5gHñ ›i¨ZÚ‹)’J–ÉÿX ãhêz²¬,(VŠsRrÕë«þ¼Ï?9ÆÔ­NMC–1VZl|ÿ'Á¨4¯iך^¢nRSÌ!Ÿå= v¯¡,¦o°*HI|¤{T„K¼²çÎzu¦éÈWV;÷m|•¾ï J1o•n|"´¦—7BÙL¬O5RÂùîÖõ,¦59&³Hlùr»Ðެ6çñE¯Ä~ɨø{I³7­b˜É»ŠP–ÝŒ“ò'²ÄÆ’T¾%¿ë»>žu¨Õ¬ùÞo‘ç—_ |7­|zñ7—sÏàÝ5Q,,®%udã÷Ы® ¨8 Äî䌜 Ï²ð¯¡ø/‚ü-°ü;ÞØk¾%º–ù4¸GÔŸMp›À)¾@pXg  ôzæsy£iÚDwŒº…ßc¹SosoÝÖU“i‰ÇBéÍ}âMSFøgð^ÿZÕäM,Cn›g‘•3Â#g½ú×Eb*]N7^}×ê^'êØx®I{Þ]ž÷ò>wñ.¹ñ+ZñÍ¿´«mׄÄ$Õ¼óö)Ÿ–áGRœcÉ8 ¶ <5`ø»QÖôÏáé´kx¬øIðÎÏB´Ô¼qâ&¹Ö3Gâ?x=üáMCâ-¦¶éöÚDñÀáw3»JÊGÝbHÚX 8¯DñgŨ.~Û,ú¯¤Égl_ÅTQ–»Òw•°gÍ.pG¸É\ÕO… ´?…<ûäkMNößjºåƒ»#Žfbp02k> ¨¼iñ2kÉ7K¤é÷­mÇ›,`á¹ùCsõ¯O—PmB0¿ÞÞ/MO ™Öss”´Z¥¦ÿðëÏCŽð_ÆO j—Ú”:•÷†µ9\=^Æ[I¤€ +Ä$H£òô'kcá‡Äï†Þ6ÔüA{¢x·H¹ñ HæâÈÈHáV;@“ÏÐþ C¬ø‹ÂþLJH–ÊU³XZÑcRÉç‚PH9Í*™N^âãÓÚÝŽºYÞ`åÉ&¯{¾¦6¥ü,ŠZ.­h÷>Q×Ñʪðê(9‰ Žv‚ elgcˆžðÌ6sÜé6çÛw}Q4(V¹…W–dQ/C¨Ýƒ‚xã| ñ=4M" Ÿx+ÆÞ¶Õ¦ÿB×õ]ǪÃâßx[_iMÆ”tÍ^X Ò÷c_ .áWo9_q,:qXz†¹â¿xçáÂÞxvÚãÆv77fêÚ-JK]6HQŒk‘-²B‰Ý·=xÝ^¡§xãGÔ¼%%äæãA°°¸Úµ†­AwbÇ´ˆy èë”#ÄsKðÿ\ðî»ñ]ñd×V—¶­8‚/±L¯åC!U±Èõ>¦ºóEjwr‡7*z¿K[ÑõÔËN„â¹f““Z+zßµ×M /‰ßt¿ üÖ!¾š-]¶°#¶V¸‰Ã7ÂJ©r ÁBŽÄò皺˜ þâHÙdv)ÔƒÎ1׊ëü9m,º5ý”oKÍÛÜúW{·-Ž;ërÎ’RÿÁå|ÕBQ›ø˜g©È¯Oø,–çKñ@ÓækÙ,fÁhªW웾ó3ÿ6H^~Uâ¼ÖÇ÷ZXnåY/ÚW8¼ƒÛûÇŽø¬ï~Éÿ²ì^?¶ðä?5 -fhVᆉ­Íi ¼Lp7€Ç$€vŒqŒ×°NÉe£Æ»…¼6èTà€£9Ïlq\Oéµf÷Pñn¯us¨_ÝÈ\Ks&æ)œ"äö Œ õp|gŒŽ«›¼®¹[KNç‹à| ±”¹U¢“æI½{zyêy\ŸðOÿΙsq£xÓâ߆Ô.¶jÑ̰(Éó‚¸á×±V›¬†¹øñ·\›O'l2xCTYý ˜È!O÷ˆç®+ìˆ^%Õ¬<7/†4˨í—Äýšð˜²Â>r­œ©Ç¯Zé4û5Ó<)ee*ƒg9Ç@;×f'Ž«C G–ÜïâºóÓ¯_øc‹ À*b«©_‘[–Ï]µéÓ§ãsóOÅ¿±'Æ=ÌI=ÿÃÝVÑåDóÜ…y\ôUR™$ýzs^wsû#ü}ÒwËkðŠÓYT`¦_Fy<ÿ}ú×ê¤þ)ºøƒñ¾Òìí-,ü:ݲ>« ½Õާ|×LÒܠ÷rTŽx5ôöŠ«mð®q·nO8í_#ÅùÊ„©{ J-_T×Ïo–§ÙðNGÍʽã$í»M?—ü1ñ§Šüey{û_·Ûm5idÔ4+VÒ¼?in’Om!/ö€óð¡~ï,@ã“^®xÂ;]ßHÖ<7¯x[X±+w¶§ÜŨC ͳ,¸ècÈuÛŒÉê ¤j¿¶¦•y¤´Rd¿iš9w‰pNÜÆóQ‘¢Óü:"X,ÀUR7ÜÉãò–Ú9Vr§¥w_ü_áýwàdËyõž«.¥¤zF¡g$W¶÷c"’< ÿq‡!ˆÁ¯\ýžtk}#àv•kbа²¼¬3‚ÌîX³‘Õ‰9&¼ƒö·Ó§¸>¿ÓìuI'h¤¿?z©´íñØ’@5ôŸY¡[vÖz;þko¸ùHЫNŒ’–ûßü÷ûÏZøy§[üQ¹‡í°†c 0–ÀõÆkæïоÓ¬¿hkCse-ÍÖ‹sðܺŽ  Îüm#Ðf¾™økðCá–£ðL»‹ÃÍ¥kÞRÌšõ´ŽšŠÍ´~÷Í$–ã*ÙVAÅ|gñ+Á×7ßµ&”º‰‚ÏT»ŒÙk:žŸn!{ôGÚwH%UxÎGc]4(ÓŽ.Uûéýt9jbfðŠŸ/•Ͻõ[ÅÑ-ÝÖ©$®©…µdR'ëÀÎüÝö¯9‡ÅÚÙø«åYØ7ŠìïdÄvq*£i ·‡gÏ1“÷‰ù#0ômM|asmº›˜%—/qƒºcÕ–2ÃŽ„vô¯@‡Ä>Ñ®$ðý‘µÒ µ}÷0@ ×Ñ¥=I=yü«ÇÂ`V{Ñæ—¥¿¯SéóLÂ8¸µÍË_ëî!—Å>!±»Ôø7Rñ7ˆ#ƒv™‡äYRê0À:«ÊQb‘s“¼€À|¤ž‰îõæÓæðºj¾$º¸.-l-cStå[l†@Ä,>[V.FÇ$]E”úN³¤/ÙõÛo xA2.oÙöÜÞ`ãË€u9=[·JڇľÒ<5¡xA·Ót ¦-¨k,ª²j.Ã;ò£,Aãž8¯Z4¨Â<õ½õý~)Í^­EF‚æ—Ìò{ßèzn¶‰wpíªK1Št–Åžß¼óíÊ{»pr9æ½§J´–вÙBN¡uïïæQ¼©ì¸áSнó^U:ßëÑj±i1Å „ƒf¡©Jƒœm络p ï\½¾™}á-hüC¯†ud¿{Ë×½ê?Ö•’âªämà(À#ÊÆâéM*qn7üWwm¿ŸGK+¯óé&·¶–~]ÿÝuOZx{R¸Òt/ìý[Å̃íSÜðiŠÃ!æüÌG݈rzœkˆywëÓ´2 WÄs|Óêwk½ã$c#û€.=1Šóý'BÕôMÞ×HkWIf“íšõÄ%]®N %þôÙn<Œc>—m ñ†Ÿ*éz^£a­)ýíÍõúª\éÑ·ü´˜.©?*¯ødŽŠ8HS²¤ï+^ïO›8å:?h´½žÍ¿%úÛçåØ^­¦›±µÓ ÖõËø6ÌoH‘Ff'äá}NI¯ ? ì´=u-t5íGÅXfŠö×T•%·gbáæÂÃáQòŠ£Å2ÃÄ‚ãö…Õ¼-q«é«¯Â‰1¾Ã‹y!lªJ£‡åeX܃HÈæ½eõ}æª^?îÁfiî°2^VìÔôè$Wg$ðëFå)k¾ŸðÇ-J°¨ùTRKK[S/ÄqøëIø`5CÆ6—^2†ÐKu§éö«™u8>Õ È²°ÎÒ­µXçi¯ °ø‰}iui©üJð6·á­? ý«N“Eb0“$d˜fg<ÈlÇhö»íZîîâT–}Û‘µ—ý”•}OJìt-;Oµ°‡ÄÜ .¤ß5­¬Ñq8Wø›Ó=;sXSÇrÂR­»Gè¿àÜÝ`$¥Ó•ßUºù¿ò9? ßè^*°¸ñ5æ£0¼Ó¦-6ue%‹éËÎ$xe”l¯¤r ¤Ò>#è>&º¼¹†YHÒeö BÊk7* Ûq¶Eá$d2‚§Öº DÓµ_éÞ#ñLMy§+}–ÙeeB´ûOïW8aeU€ld `êþѼlöZωŒ÷Vö× ¶–(íN¬¸h¦*FøSeIž‚¹©BŽ"|÷’'ËþwùXïj¸Xrµ»j¹¯ù[æCwâ;o\k0¦¥¦Õìí¤”Ke2²»óDzñ[þð½Ï‹â]oPiô/œ‹kH3º‡$˜á쩎9®XðtºÇˆneðþ¯ƒ<-=¶/×MµA$²¡f·R qñ•v*Á°08Étþ!¦¢ÚäV~2Ñ죉WÅ%”Ò¨4,k±æPóQlaHç¯ ÔOÙÍ7ç§ßÒÿ3˧ugR-GË_’ëo3Ý/õ ÐâÑ4(ì|=£X ·‚ÞÖ ±BqÄh£ï>=sêkæÍgÀÓÜ|C¾Ò<-e¥iZ%Õ˜{énmüß³Èì|ÆPzÈÀ–ç€p}«Ð/ü}á›mKGSÏrÉs5Ž•-âé$ÚR v ‘Ï¡Ü~PHäõ/èp|H¶ð¢x‰m¯µϾ2ÌnyÊ‚ØØ¬ãvÔ-–ˆTðxÊ5"à›æÞû7Ýút;#_:2S²åí½»/_¼ÊÔþé2øb |<ñ§Œ<2©n‹­ëZn§"¼Œ§(¿>àó0$»ýîy'Œix£Ãrè>ð÷‡~Þ>£©4Nš‹ø–âI¢°V],€nwfÈ01³¸2àæí”·:ŸüIlƒÚXÛü×W0°däö¤=jÝäw$¦“á¨.$™HûMÛ®öLÿÏÞ“Ñ¥{8¬|©%Mµ)=uÙ. íåí\ »nÿ¯CÍN½ñMÓoü5§x&/øÆÁiòh tÛ áãtÓfû<œ•Ø]ÌŸ|u!aÐþ3øJ÷LM+UŸPð5òIö]{F¸°–êãGps,Ó¬JÍäã &|&ÉŠúMѱ"‡Ã~í ½e½žå¼Ï%;Ï9õÎv¯r08×[Ûx_áþ•}ýŸc 泫I»P¼HÝjÓí 7œe†èô¯5fÔÒq•+ߪѷß[«?CÚ«•Ôv’«kig­—kïtr:¯Ž¾x+ÁžƒHÕt84íY×û¶!:£¸ %g‘ódb¸íBy.¬¦ÔZ_¶…ÕDr\7ÊÛ€àc¡<à ¥uàÿ é:­w7‡ô¶Ôn¥6‰¢5ª½½²J½µ¬g„ŒºbOÅhÞ†Ö]_VÔ5½~6'o³éÖÅË­¬Kœ3*­)ŸhÉàéåX|Ÿ}"Â倿H Ù&0>özUÐÉ';Ni_]6jýß_ÀïŽN•?gúôûº~'źOÄS¡iöº,t­ ÊòeŠÃPµ¼2Ãæ6qÎAFv!Q†T¶A`šü2¼ñ÷Œþ:øÿ\ðn‹£x4k“¯jmmª‡˜ 1FÄbÛ™ÁÁÇküCý˜o|M¯ý·Cñ„mâss—}bm€ù¡ØW## Mx_ÀÛOø@¾뺽ÁÓ¡½½¸ž;‹YM ;¿ïQ»\r{×™_,£„nUiÙKO+-o»ò¾§ÑásœF=(Ò©wW{½,ôJÛÛC‹ø›ñ‹O¹øZöÖÓÞøk^äz>«§OkçI¹ÀfX˜`J®Œ H„úe¹àé¶Þ±±Ô´­gÃm0f—U…RÑBȤª±ìŒC{WÍ߆¬¼MñkÀv÷ ,×pê²ê/“ò «°H@êØm£ØšúSâ½½ÿÀé¼9{j.tÍF7µ»HäDn*¬:>e=Aóá€ÂTÃ%ÊÕõÓ¥ÿ?Ÿ¡Ù‰Î1”±­)'k'~¶ü¾GŠë¾=¶¿ý©õ­2}+]’O,P-¥•¸¹•ÑÀs>ˆTn‹» J7+Øõ/‰ž‡Á²kq\\ͦBbBñØÈgŽVù)bÆø˜1·ä9¯ø] ^hÖzö­}«\ëWº½ùžKËĈ\\$j±DÒlU\„E8œš‡âŸ‡¯5Ÿ ËöEíîµií´ÙÑ]’ÜL@õ†î ®À¹·ûûQ¿w³qõ¯ÒOþÑ÷,Áæ·Ò!†Ò3ŒüÄyŽ6ð¬sN¼ðeéÒ<7w >»Ð丽‚ßP–F±‘p©5°}ÞN~`Ñ“# sË~͇∴ÙT•웿n¿.ç—|Bñ^½â?:ÂoÜivíj[W»»¸ˆÈmw|ˆvÉù°¼tÎxÁö]:×Å~ð,?Û:Ü1±E êt䵺@O%J’ÛÍ|ñsã{ Cö°ZêðÝCáá5¥ÚÊQ´òcâªxßxcôw‰|O¦é¿õmNúò+[+[/:{‰äÚ±Á2o—ïg¶+ÚQ£JQ½ãÖºë£Ýo¥¬|úÅ^½z°v´žÏM4»èïn§ÃÞÖ´Íoö§ñ|#ðU–‘ok|Ûã¹agco&rÂO,3vÉÀ^1Î3ϱ|iñ.»7ìÛw§ëpÜøÅ"<Á}¦Ü¥å­Ã. ‹yY9ã ¤ˆ­Œ8Íqßb»Õþ5øÃÄj1_K¬^µÄ×­´‚$b ”E €=ò}+ö‡²´¾ø l¥¸ ³} ù)ì½­væ•¡,Æ7…Úµž·¿ßo•;*RŽ ¥+'t×OóùÜÄøUñCQ Aqá_…^<Õ|=l‰Êf³„ÍÙžÞPò‚yƇ5ÏþÑÞ8ðÄß ô Z=^ÁôGiå3£ ÄwI3‚\4G ‘Ž+¼ø!¨ÅÃ;mÑXŠãb”μ7öŒøm×ÇÅöº+‰ƒßØìýÛL‘0tÞ@ [©rxèÐT>²¹ãf½uõ¿æyõ=§ÕÛŒ´;¿…ÿµ†4¯ Ù躿‚þ!ø{Ã’@ª|O©Y³Ôòî©—Š#ÏÎà*ŽN5çß¶K”[˜¥„îV%·ä=1Ž9¯™þ*ø"ÒßãÞ…¦]ÁöO ¦› `²0ŒÆ…œFËЮHÂôÀè+jXš1 rÚÞwùú™OZ4æÜúçHÔü#ã­ ßYxŸKÕ´Í:è,–:]ðY-ç†Õ}¿êŽÏ¡¯]½ðׇµMÚ?XÛø~Y…ŵ¤sl¹*@,¬ËÉWç “ž9¿£Ô<_à}CW±¸þÚð­Æ¯faÔ,ïíä´71g8a S•'‚§# 8¯W?´‡ÄY?gؼ+q­j’k×0ÿgx‰n‡œmуf'&QÆÜÿ?7|÷×á¬leûªÞëéÙu×þÆpâ %Uz´½åÛ¿¡úƒã øgþ"|1z‰Áž[-0þâWä‘7«~»ñÁêyæ¹xX’òM+Hñ¡á¯ʾd¢IŒ÷)7²‰r¶ržPzM|‘íW…‡€®®¡Ó¼Cö„fñFŸ¼‘ÜX:íio•ó–`o½}yðÛã_߈_¯¼/¹5Æ£’ÜÙ>Vú‚—D~¡£ÈÜœ~†Š¸lM:oÚFëïØTêЕOÜNÏkí¹Ò\ÿÂcc·K‡Ã‹®ÙX\¼½‚è[­Å¾ÂÞdàxÁQÔ†è÷…n4Ý{Ç1[êº=ï‡ü'9ìÆÜCe¨ÌùýÎâÛÕ¸}@bØœŠ¹¦|Fð·ˆái<%ue©hP´‘ÝjÐέô$Á…ž3Tu=tx»ÃhòÃD•+ñí–æ>˜?uN2séë_1R0…e9QµÞ¿§WÙOB¥j´*uy›V½¿^‹»=']×¼1¨µß†ôývÑmôKõ¶Ôe¶•ìóMŸ€Êp{{וØišŒõû˜4XÓGÐÃâûWUûÌ8`™æY©à¹é\dþ‹Å¾Hð̳xZÊÔˆ.5m9™P7ÍÜ‘ºåÛ%I89Íu:e¯Ä‹O^ø?HÔ,og·@,|_¨Û‡0¡ë że³z2œÏuZñÄ/uÙö›éòüúñ}^¦ ö×Í~ŸæzSZé¾ðõ׆|¤YL’!K§ž èìÜžB3#r~\äçµy¹ð§‚ü'¡_Xh–—:‡‹¯×ý#\šáåºWŠ#’%,@Oº£ §ã¯iúχ-tH¤ñŒÿ¥YG+Ccågþ>#œƒò0ä'-»*x®rßÇ6ÑkðÛ–¸´Öçeó"»¶idƒiËX ç;‡Êzç•,EÞ/™·²woÍÛ¡uJ¶³V]ßåêmh–Ñ蚈¾×õ-K^ñ}ͺ,qéq¨µI‚à”…òXd瓜w­‹ ø«IÐfñ?Š>$êI«Á&í>Ê[(…²ÿ±rÝ;¿L¡P£FA'©¹×<ðï·!Ôµí"+I¶5ο¨Ü¤k1”ü«è¨Iãsš×ˆmI/®Õ.ЍkHãa*Æ£‚2 éÈü+ÎXÌSk™_[_•}Êèöéeøk6Ÿ.—·3ûÞ¦ÿŠu['OxÛKÓ|=á³ï¿/=£ƒ4Ã|®yç(>cÜ )üW§êWÍIqm H ƀ¥®®À>\§¤y8€dÁÆF3^ËJM[WûGŠ6[ÂÜÇo¨&aEïH½ÛÑ{}kµÓüQ§ÝE⦎_ HŒ³il8»‹ Ÿº„ …ãÒ½ì4¢ÕHòútüõ>sZ ¥J\Öï×òÐóÿ%í彌³Im¥<Æ%»a®Há”÷¶zž‚±î4½kÅÚüz_‡Ò}ÃÖyWš³¦ß´©1ĽñÔ·AדZº§Ã->ÿÆíqá;õðÏ€Êï# ˆ…Àû­hÄáyQ€T’t$ð½ÄÅ¥|?¿ŸJУF:…ÝÄÏ4Q¸óWy$Ê[ ŸºÙÉæ»©á)A)ý×ýN9ã+Ön?}‰µ;ë]ÀøsÀ– yw#…–T}£< $yÞ rIÉ=+ ÿ å}+PÐíµ‹ýB©D“Ú´1ýŠØ,C™3ó+Ê0â¢}Zú;­SÃ:}¦žºÕ²/“s;•·š7,ØQˆÈ!ƒ/\óÜWEáÿ‰Vö–ŸðóZ¸ðÿ„üg8Že‘¯èÛHHK˜·|ß1pØù¸L7]Éò½>ö˪èBšM]¾û"޳à8ô ½6ÃáÖ“©|C»»†mSS¸¹ÏÛ!Ƚ럑Sb\© ´•Ð_x²ú;+ÿx?FÇÄH#ßý•tÄÁ¸;.eœž á×$à¹Wow®iþðãZÆ× 4ä Yrnï®Hë´g>Š*mWÓ­£¼0ýžó\iQÁ w›p“Ž0IüëË©ˆ•uÍ*wK¯ó_ÕΊpXHòª–“éÛþ äòx»Åÿ ukMÆŸañdzã¡:÷‡´ÇŽi¯cìóC¹Ü¯$ªvª‚(]Í&³ñ.o xeu/ˆZ-—…ädAªO¨ £·]Øò$À 0TŽHs‘»8Ño4ø4ÿ6±âRÓëû Æc?¹ÓÐÿì‰úžƒŠË“‘ø–$»ñÜéÉ*Ëiew‘]•·FGb7Ôñœ"ªU^÷[~ŸÕðxluor2´z_õþ®yV“ã k—ÅÚv¿«Kurq_¾[$sŒàÒ¡¶ñ—¯xÃ[´½·¾k©7[ˆ¤ -ãÏ!ˆÿ–Ô÷Šô|<ðåï‰àÖ®´»+x$rĘ_·ã%D±ÿ)åw çÛ¯Ì?¼lÚ'Å»Øô/I¦Xé‘©º¾Óbh«Ê©ÈØß(ã#•=¼àÅ‚FOó¯3Ðü£j°‰~Б¡acר×sc«iÓNgC»ÁÎ:Ñ%p5™¾pv’GC_Qü,1Ið/LÑ5Å•ÇÞýáâ¾\‘ãdd¯¥}Iðƒgü)  0.®“Óç5ÅŠV¥?ˆô@|»“¸¨;žÙ?Jùâv« [þÕßô¿Üý—M›O’dóíßìÒÜ •bG›4l· än=:WÑ××¶veíäÞU´(ZGr0?Ïò_Å_h¾%ñ ¾—m‹±5«[Ëe*ä\`ËýÓžü×Ïãñ㆒’º=Ü› R®2*.Ûëò,|Yø»àÚ[xÅ?‡µ­Yš; KË¥ŒÁðÒ6O@ÏAšâ,u{Ý'GŠ :TŠÖöçpHä×lFwÇ>£·5蚀ô¿ ø`ë^&0k^#šØ[ͨ³Ìa\퉙†JÆ?ÄšùwUø] ê7¼%µx|+oxo`Ò¡Ô¤‚t¡ˆDU‘‚ûrq»hœWËà+`ܹ#tû÷ùt>Ö®s;KúüOª4]>-N›UÔ8ïæŒÈï0ãrO è>•å×ú”LjßY32ÜGGjìFNYÀ<†|~@W |âGijx'BÕolþÜ@­©Åö¹æÍË)6–Ó±-J¹Þ3˜øØTž/|GðÍÞ¤Yi ì<јµ [‹ç‘-²¸ŽH‹d©Ý€éœ–ê0j®Wd䪭{é§ŸŸ‘ۃ΢ª(ʓӷuúy‡~é<øÓ£|CñO}§é6®¶ºcàArÅÕ£’ùë°©dS»³×Öø™o¢Âyi6ƒ¦[XøÛT¶kU»¶„$k Qîp%±fLò7ÜkCMÐ|EðÓá_Øx“Vñ¡ªË¨éÚœªm¯/̱`~âCü%~\à0ç5äžñ‰u/‰'ñ%ÿ‚®õ  -ZÞõ‚1Ë(…ÀS;K#X:V_V¬ß»SšMZöùkkþ¦?_£Q¹¸Zrk[_æ·:êÿ ´í?GÕ¼S­øëÃzÔ‚Þ'Ô­ãkÝ>ðÆX2˜•C[ÈT‚¤f6 ƒ·…¯§ü"ð>£a/Œ>"x_OÖ|Kw ¹WºßOPŽ(›ª€I–ÉôªV´o|h‡AÕ¯-t #€ ¿‰•Æé@Ç‘ “(r à㡯c– ÿx®éJÓH!óg|‚i=ÎN$(­S+rÉ­Öš|´C+ËšñOg®¿=O˜áý–¼;ñ â‹|Oãé5˜< ÄÒð€tu×ü¥Úø+P³Eó.4¨‚è÷e£¹QĹûÙ`y5Áx_ÃWpÉâAâïøgQºšK­.n—ìÚvüWG Fæ8ÜÛJ× júÍ®³ñ4xïíÊ?ºg½ FBŒòÄñíƒK«ßizV¿cez÷ÚNÂiã‘éä…\ÿ{ÉàW%,f.œcÍy9w×NÚž…\.¬åËh¨é¦š÷Ðò]âKxßÅžÿ„ÿI×tÁò>¯¦éÆ¢·k (nT"—ŽÕœeY‡Ì9¯¬üaãý*Ïá½­ö‡/ö–Ÿ}ÇJ_5’þ²`ƒzŽ£Ò¼é¼G¡é ÇŒ<=¨hšß‰|A«Ã ì[Ýš xßæ·U\‘Œƒž bGZ’/ é·7ÚµÒþÁ/‰di¯­bb±ÛBØ gäV¶ É'“[cåIÆÐqwÙmç÷w92ê©VmOš)^ÿ—ߨ¥ðßÅ>ñ6««x£ÃÚÆª±agXÝ,ÿg‰GÊ’¬ÙÜ}r*ŸŒ4äñž§e¥Ü]nn„,7eÖÑy—iíæp™ë·8ª?47Ò¥ÇÃMC³ñ¶Ÿ$ðÏf„y‘NT|Ñ…ÜG†ÁóÈø#Âÿ5këŸÍã­WÃæúãϲÒRÊ)­ C|Ðë¼îÁ$+.ãžNØ|MÔ¥.[wéå§ßrñy†3•B¬y¹“Ù}ï×¥ºÁñ Ã6‡ÂHôÝ>ÈXk–h†ç°e·¸±¹E;$…Àù@ §*˹XÄWÀß ¬üO¤]xÛâ.ƒa®ë„Dk¨Ä&Kxû¨ITgûÌTrp:(®CǾ<ñ¸Ò¬#Ñ´8î|M«Þ¶‘i¤‰Š†ÇúÛ¨¦ùQ ó0Î>öô¨p«Ô•¥-mo—£}ÅšbiÏ(Sã+üïê•öò<×ÀÞ+K>ÒÒäI—`DAÓƒÛÞ·¼A©^Y_-ªØGu74ªyIÆH=³Çû h3J%‡JYŽF_*ÙþI‡óÐý*¯ŒtµŸ ¿Øäuº¶VSn\Ÿ¾£ ¥É©ð8‰GšÈä"Ö<é–X# ÊÑI¶\äôSõÍt–Z”V> ¸TY…”¼y-Æ}OÿZ¹mÞ[éöw¶‚ÖkRÑãn<Ìrgœš–ú}Fã@¸Š;Q*¸Ã£6À©Žþ¿Jî‹ýÛG^ú4ÒÎÛUð’h¶~#Ñ´ä¾¾mµmNàÇifÿ®‘ƒ…¸'‘œ×ê¯ìÍð_À_ ü3sñ2×DzÝ\ ¨å1EÇ!P~ðÏÝ'œuÉæ¿ töÓï´cf–ÑÅVâ?³.c“·©ç¹¯ŸüQâo|?ø¡$ž ×µÿ î *EcvÊ€žûAéí\ø O–hê­ãî»ÖÞì1œã ©ª²edË3…çŽÇë_Íw¿oïÚ/ÁN±]jVÞ*²P·hä`:üË‘øšýøCÿÖ|{aáëß-¯ˆµi†1¹W¶IQ r9ÛÆpOJõª(R4‘à =Z–*çПµ‡ÄMVo†çÂxŠ-Å7ÂÒßÄwÖîMΙcvÌ¥bÇIäD“øFq_Ûø?Uø}ák9|ªøŠþÑ BóDÖïšæ;˜É ÒBÎ A"/ÌO–pTÃÓ´û  ë—×òËý«ãÿ«K¬jó\8åç—®1Ò1ü*ŸâÍZÓI¼3ß\Úy‚Åä†Õ§ "í\>¬IÎ|Žu‹s—%¹—òÛúÿ€}wPöiJ/•ßâ¿õÿðÿ…P|Fñ|Kâ/ê:•áû ©ì,/¼K§É5ØFùš%ãòâY7€I%†: Üøéãohÿnàñ"^ø\ƒR¶I&Ó¡–÷©+…Ymò |•hʉä6±úáv…oá¿‚Öj–ñÇ,Èfx¢B9ÀüúWŠ|Oµ²ñGí?à&þöXtÛfº¤…O˜»V6$ñ€Y¸׋†Ì]LO³å\«núyžþ+.…<#¬äùžÿ?#cáç| «ü8‡J·Ó5ï ËjÐÁgaâ]*{ õ0ÀüÖÒL K÷Yˆ ¸ dt®Vñî?j š¹·Ò­-Qå²¹…žèÝ©8ÐÆ»Ã'BÆH9ç횤Þ¼ÒìÕüIáù,Ûí’¿š±F¼*ØÆæR§Šã~ xHÂÔñ?Šond”Y[Èb"ˆ (' $’Hêjñ5èó9Οãù;~†8:u§J²~_š;­+Ǿ×&Ôí4=r+Ûí*/¬^'¶¸ƒ†`Ï :«b9ÇóÃïx#Æïµ¿øjÚîÿPYt­.mB8g¿‹gÈv±Èd­{Gíá >ãÁ-ã; 2ñ–“±é÷‰'•2Ç$e]Y‡-vœòê+åï‚ß|!ÿ4Všï†ìu‹Y}ºþûK}¡Î Xd¯#—ŒUaVØJ®©½:iþ™9Œq­7Mo×_ò>¡ñGˆ´M3BñBÅq`uì³VlË»y'#iä€Yzz×Oð‚4_„¶âÞ)X8À `` ŽÃÚ¾#ñí„þµÓt=Æ?_A®<(Ú–^æÞ%M«²î‹Ç’˜8É÷_jß´<1¹ã ø;Æž’-÷Ö~ß«`;¼HÙL`«á p§)`éº^äֽݛô4§‰¨¤”àýÕÑ^×î?öг‹[¶ðf‘q4¬“kqÏ$Y ¸ˆ™>À€@õÅztZm¤Ÿ ÛLxæ€Lªr% ¦â0êG*Êy 9¾Nñ߉5ÿ~ÕÚ_ƒ^ª¥ýŽ™ssäA§«¤r…¢ ü¤1Îp1œ{-‡ŒüIk¬?†ûQ• ±ºrRs…k—Q÷¿€sëš÷wÁÖ~ ø}¯j^›PÒô8´é­¯ü3Á›L¸!0Ž‘>|†\V2³È<ò â?†$ý©lµ/ø³Ã^ž CaÞæ8äeǘØ8Îfã±í¾8ñÖá/†úõÆ¢C$¶d„´‰¶?˜g ±=3ŠŒÆX…*tá}’òÿ/òXðíÎ¥F·oÏúüÏ1øMðÆ?¼ gâÔø‘â? x¶’ZXèvÖÿe¶]@›ÌF21$gn;qšµûAX|Wø{ðÛOмKâ=2ÿ_mvÊûFÔô›´i2ÝBÌ|²¹bcVÛ&rT}û%•Ÿö{¶a‡Ômßm⇌mr;äV_íƒ:ÝxÀ¡¡K›‡¿1Á!ÆP'ÌÃÜà(§™Vúë„¢š¶‹ó0ŽŒ¨s©Yk}~ãæÿAñëCð=—ˆl/| ¨)–}‘íÞõ Ë"Üî`„’J˜œsU>*üO¹ñ/ÄïÇáëmR}*çGNö›oaÔUÕL3~@쟻À9 Š÷_‡—Qx ¢¼…¡¶Ü­$Œ9çzâ¾"èÚ~™ñkÂþ$µ„¦­>õ™±Ô w?Ò½õ骱悻ÓþüÎ<¤éNÒÒ*öôìt¾ Ó¼} |m[ÅÒmô«Ds.›ª™íaÇÍ4‘2.ð¹Ë$œf¼sãwŒ!Ú;KÒ-´åÔÊéÐK¤I§Ì·1j*‚«$àÎ1Ö¾÷µ—oÃȤn´Ú-•ä~µðWÅI§~Ó^Ö â‚&5ŠßäxÀS»n:pzŠç£S «ÙÂÍõ»:’ÆJ‹jwK¡àÇÆ|;XMâ+Íf8Ûäµñâì\+ŸÅÍaÝêþÖ®’çÅÿtk}@åf¿ðŽ©.—,„œ’`8ˆ“×–&›gñ“Ç:}‚kOÓ|Ajâ$‹k¶=:Šîu cÂVµñˆü;¶ÊùÃÃy¦\³vGצ:ŠúØI­™ó’—Å˧ð‡Á}KFc¦x»âG„ïQ¾Xuí;ËtÉèeGËêwg¾k*/ƒúÔßgÕ<ãßø¢üL‘,ZnºÖwöÅÉ\²?ÝM¼–ó:d`ô>±`ÿ üAw ºm¬nÙ<ð€yôèx÷§Üü*š{©Í‰ÑüIfÑed·‘H+‘”ÚÜóé’ tF½TõÔÎJ—K£Šðo„¾4|/×5]FãáGŠ,ðdu ¾+ðÅ€UËc¬O C#…96ƒíŒU4ñŽçÓ§‡Tñ"x·L(»£×m"¼€FvÕ>ÝMa_ØÔV«N÷·àuP¯Z”¯F¯ôÏU°ý³å·ø¢ÝÍá¯bÞú;GIµÔ>Êd‹hÍŪ`‘Îâ6¶FxÍ}ûLøcMýŸ¼#âù-?°¼1®Ü-¥– nèC1BÅeŽ<²•ÚÁ³ÐŽkàÑoáKØÑõÿ„^š#Mö^I¦OЀ“oÔþŒ|ðkPÒÒy>_Qè¹u»ßüÎègØ/{ÞÒËúê~‘ÛjvZω´+MÕ´ë»ÝhïŠî{•Ù:ýÙû¸è¯A_Bè~ðï€tÉ¥Ò¼ÍoÄw æüG™ç#8û±©' Ðd“Ü×ã…ÿÂ?ø‹ÁÑüãO†ô¯»Í¥ÿbëB×QBí¸« жTã`òà`ö­Oøóö‚ÑôÿÂIeñ+ÁÚö#<þ#t’+YóÄdùa¡|¥Ë“œ5ËW‡dÒTêo{÷ò;©éR6µ¬¿3õGOðn‹¢ëž¿¬ÛÚÍusp×PØ\m’ÏM,0â(ÈÆç$–ÇRÄ \¡àÏ iÌš¾£«jºFžÓ5Þ• A~m¡µ!I2ƒv7}Ȳ@$ñÀÇÂ>'ý²|a®øçÂïº|š zrǯi–q†c1$I1Œñœ÷®zYN6¿QÝö]?àŽ¦?YòSVO¯ø¸Þ7ÄBþ-JÇÆ£GšÞE›OŽm&)šl©#íYÇîÎFUv¿ÝÍuz'ÆXS´x#ĺNŽÃȹÕ#XÚÁîCmØ7™äŒJT&Éç–Ÿü%&¡ymc©hš½Õ‰ÍŹº]åóϘ&1íÉö®¿C»9Ðo5­^ÚÎ/ \„‚T†%dœýÒ†0~XÈãaå½*%R´UÜ×®–*4°í»Í­4¶·go/ü1âßÜiw’JðÙF+D´•,åçÉrwx å“´ðj¼þ$Ó5'†ìuË{3•žY]àùrŠè Ç‚3Ðb¢½ðå¯Å/xbx‹ÃÞѵEx.#¶Ò¹ˆíÚàec cŒm$/\‰uŸ†úK;Áú~‹ájÚVêööÊs ºhåï#1ädä7Íž Ýg Éòߣ#RqÒ öì6/ __]µŽ‡-´ø[›û”slOÌÅÿóÑsÁãŠï­´O øÀ-¦G ¶±«j1’âô-ÅÅêäâ6Ý÷cäíQ…Zó[ÿ x‡Áþ¶“À½þ¹¯‰“ÌѵbY,5t߉bCJdº´` ¸"¸ÏÇãφºu÷Œèxþ}3Sñ]¼+$Ú´Ï :lÅ~ial†óGMý†@À$? ¾ øöïQ“U·Õ<)ã6ÔK{câˆÄñZc"XY¡‡9‚H`Cs\Ƴã#âF½g­éºŒZ΃mqåÙÚÚÜäù“8À¨?^¸¤£Šsäw]ßùz a’öš>Ǧxw]×N‰µ­´üqHM•¤Ò/.Ô.xEr3„<ÏËœÂ_xÇ_Òíêî‡ÊvDÞÑ‚N7óÏë^¡>¯o øFÛÁº§­¥ÌîÑ€3¹v/,“ƉggÉ<õ&¼·Ãº>…á?‰cO³×µ OT¹ŠInUòmä åÇ–½#,QþÏZúܺtãQ(isãó*9s»Ø±}ð×Á>;7wWºD ~޼‘y3)ÛØõ¯?ñ?ÀX|?áh®<=¯øƒM¾kŽ¢ä¼n­Á_8LWÓW:=…ýÌbXƒîù·È8íUµ_\K¢$z~¡¨FU•‚™‹®Aôl×ÐJÝœI.§É3üø£¢[4šV¯£ëŠv°xŸCË §5—§ñ'ÃNÿÚš=õ³«6é +6GlªvñÆjû6Ñ^ý0k.f¥¹\÷Z£çm'㎹òÙÞßÚ@¥¶¢Þ3[;ïã} ~€ü,øã¥è_´›+¿²êZÁ¸•ã„\y¬åÜ£fA<Ž=+ÀFð/ˆ¼,¶.ÚlѼ±ÌB6^:aÀõ¯§¿gŸ‡ß þü [ù4ý Æí59„s¤JÒÈN0#Eäœ8Ï‹„êSk𯔧Êü·6¯|=ñ+âŸ=î¹xþÓ—æŠ=»J¯_‘AïÛwOJæüU¥i^Õ4'À±i±k6×ÜxƒTÔîPIÉ,ïÖB;À=¸¯Sñω¼G}ðßTšÎK¿èí¤7)—Q¸rEy “Sï_–þÐüIâ/Ûé?<ãGÖ6Ûyqªš«ËÊÑ»'>§Þ¼š”)B›ëêzkVœ».Èû+âWÅí4x–ÏBÓ`Ö5¶†w›LÓ¤¿XQWv”|ŸLu ñ÷¼1à?†6:æ§âÝ)-5WËže’R[†$‚2¸9éÿôüà›}:kSi~èÅîvnRrséëÏnk•ÑþÁ«~К÷ʼn4Í+Mðí¬¬nîÓ{\\ *÷1Å‚«#©™q’€WÌåÓÁƤ©òiü×ßü·ÆK¨F§>¯ìÛmÿÁ~"ÒµOÙæ]G@ÕôKÝEÊê1\+DòÉ. » çx®bÃ^{oZEo"½”7î¯æ;«¦êyþ‡Nž•À\xiüUâ‹ë}Ú= Pñ›u6€g½Ã Ís,EJî‚58'ïdxÇ®ø¿àE§ÂÏ€ú~·áoßjÚE¹’ò×Åï4’7måûÊO;£mËÓnÞsÓR¦Î1r×¢Õ¾óÔÄÂ-[}Úþ¯©gÄ^)}B+ŸÛ˜çûC{•ÏîT™¿Ƽóâo‰ït/‡N“¥Ü7— ­´ñ@/!ت¸,xé\퇋¯4'ŠüAágÃf¦¦±¨žÚ ßêÒåP–¶R?Œ‚ ýâ µ¢xÏן–Õt/ø¶ )ŒÚ¾±§iÞ}¥„žYdLn ûF òƒ?Î ®8à+S«uªÝùùv=/®Q©BÛ=——Ÿsµð¯…ô¯þÏz•¿ˆm-ïõ û3.»uw¹¹r ˜·`ö€+á½ÇÆ= Î÷Ä–Þ ´ojl&±¸Q-¬4`ÒÀêÓ`ÈPâ@  ÅwW7µM:Éõoü5+-IJC!xî£ûÊ›‡bØÎ}¯Hñ‰­<'ðúMZñž8-Ä3f8 áAÉ=4§Ö‹QP¼›µÿ«‘–…KÞ~êZµýly'‰îâK;m~çÌå¹lkÍ:—WÕÛ±ò•׈5߇þ;ÖÓUðý¯†5 8dšÚV{Ø5œ"ýŠE†ÜmÞ¤€GÌ3ô?ƒþ&&­ C©è*ð¿‰õkxuÛ'íÿz¤«bÈ‘F ^roG¢/Œÿh{?jÚêËB²O%c#aù9ÈçhÁ# $wÐxÞÑ5Í-Ù¬s-ÛÝîÄ–«n.Œ>ë äv&¼¬^eJQ¶…¤Ö­}Ÿë±ôyvYU9{^7Ñ?µoës†²ñ‹uâyü;s¬Ca­ê·" Úüù>]¾AÜIætÊœuF+ÙüG E£YƪGoÐvüOá^'პñ¦µ«øßâ_‡m|I5ü{4­;S_2=>Ðd D<#¿Þ$sÏ^8ÿˆwájpZÛêþ/ƒNÔ­ ðu‹ß8½¸¸]¤#Î[t©bK&Cnç1˜YKÙBMMÚþ¯³¿O;Ô£‹KÛÔIÓW·¢×Un¿=l{‡|?a©ül¸ñ›¾Í¥Z ?<‡nLõ$Œý+CÄÚäI¤ë o-¥•›J±†Â¼ ôàf¼ÏÃ;ñƒô½>*ø&ËÀv„¿èºÕžªníd¸~|«Ê­¿DnPŸ— •Î~"xÇʼnñzi~¹ñU­úE¨ÚÚhð*^[D½#¹wq |àð[8ÇË’¿²æêÆ“jÖÑß{o®Þ§³D¹±.÷»]¯±ëŸ>øsIø)ye«huíγϪ»t‘ei/œäás´g°•âµFð‚´-2g—Ä‘CÇoôÛ¦ŽØ¾!Þ͒칎H$š÷{oÔþk7ƒûFÇRÒ Xõ­"{ru9 Ã#Û¦Yºn ›•‡*My'Æí._AÐ5Ù?ÑQ¸–ÞÁM¹Ü"‰k°ê“Þ´ÂñOÚ¦•ÿ–ù2³:¸`R¦Ó“K×}oóF„µ;\Ѱڭµç–­4BMݸÇÓÚ¶î`–ãN#/mpѲ”௿=My¯ƒ"·Óî¯EÅî¨EûD£‘&n6í=8ãÜ×£A}pÒ3Á&ëv8.ø ŸO­}– § ›bôÎwVÓKø~Ù]¥ib}ìq¸æ³£Žù’('¶ó­ÊÊû—×Öµ5 Av¿”'Y!]²AÏ$q×wJ½„Ù#M)1Ìrßéí]sIFÈæÅvy\³hÚ©©êòéÖ»ƒ%½ÁC…<íR:Ÿç_2xûVmXé×óÏawvŒci,²ªƒ´†îzûWÞZÄp?…®e“È’ÍC;ʪT¤ŒWÅíôVµÓäÑ,í­ w8Â<Ç©Ž{W=jÈì½ãcÀnu]Dj<â-ü'^;sÞ¾ø#ñN†þ9Òµ©~Xø–hîÉŠàÎñ\*0ÚÆ!´®@$òFî•àšV—yw¬¢ÛZ‰îËf4.2@äõ=º×Òßíµ‹¯ÚÂVé¥ZߣO¹£’ä.Œ™ÇÉžyë^¾"¬T5F »Øý=½ðÜž0ø«á­[RmfËK¸²¸¹š-2vµ’ÑÙQ­yC•|dã•#‚5ó_ÄÏiñÓKøge §Š<~·±OfŽ 6ò[…b—2É‚"ùò.Ie8a_qj?dÒoôˉäk{h”Op"P^ä”)“èŽ=Å|³Þâ¯ÚÎ-vÅ´ÙšÚÙ¢QN›¦‘¤cåàòJr öÍ|q.RnQæHú¼%4íÊ×=kKøƒã/xj;OŠÚ‰Ÿ T°Ö¼5$’[ÛJÍ„†ê&‘rT,êJ·;‚qŸðÕÆ‘­~Ôú†£¨H&µºÔÖY¯ü¸ß †uØ ¸‘…%A5î^+}¾ž+ȃ«ÛHÞS|¦R•AœI+Ãÿgƒ¾»øw{âOøsMñµ­[;ß^t$fo%ä" ôzõ¯6xÜ- r¯(òô²ë׫òÔúu—bq3XxÎýnútèzÆhºoÂ]zE¶Ö|7¨Ú¡:­¼æ9vFq™|ŒÆ9ô®7áÇé^³»Ô4O]ø_až0K :'/4‡>`Œ±$ÊËP ,Íq<tß /<¾*Ôoü-&¡ksai¨3Kqj$œ€NIg‡ %W+¸ëøsNÐ~[ØéÌ;{% Œ ® ÇFǧzô(Ï [¥ñ'òþŸáêxU£‰Âb\]“_3ÉÿiYZü;Ð4Û)-olõá"ý®+vC´"ÃàuàÖÃÏiw €xgS‚ûË„E«ˆ/„Ê T±@ÀÇzòï|7ƒÄ?µ¿‡¼;wo†‰ ×rém1òå“xs¯ðE¸’Ppzcõ®¡ðÀ×Þ·:¦ø;\‚ß˵մ‹T‚hTs±À–"@Ìm}Ž qâªáhÆ4nõëo>¿ðú±8©Jµ¶éòéÿù¶ítmGöÒn4û¸ïµ Híq+å­Èa·+ÔdÄ ûFÚhÃv²Ã"º]…xÎ8¯Ím.ûÆ$ý©¼E¤xE4Í7R·#PÖ®íÙá°¢(CÄÇæaŒŽµôŒŸµÏ†šM¶Ÿñn?.*ºÙx·FI µy€$Aunå¾ÌÌ>ã‡db;IPpÌrÙTåŒr¶×Õÿ]·ò:rür‚”¦¬»ôòþ¶+ü(ðîuûKüJ×í×Ì‘¯bŽMî7` 'ç8ÅzWÆMmgömñd:tq-âBf².¿qJŸá8Ï>õñìï®ü`ñ^½­ëÞ ð„5ß ½äóÆÕ-./›Ä¶—6ánt¼.Ã'*X³ ².U—æ‚3õ/Â{Í|:vŸ¬i××öÖÌ.-຤V'Ú@×Í^7šÚûö•Ž-æêö+Y Ž,–wÉÎ?JÆk—¦ãïkoMµîtÑJTbì´¿õÐôÝ7àþ“ÃØ5_x§ÅÚŠ’"a¹¼Õ§½´–NÛÈû§nÖ¬½kåoxÃÄv_íêûŸ_E­¦qz ÁÊÊc•W"#€Ù#'Ðt¯Ðÿ ª'ÃØÃ**¨]ïŒdýk⋾³¹ý®t³ž¤¹œ=Äò’(Ñ,@þÇœU†ÄOÛ(ÔÖýÿ­ñ8j^ÅΞ–Ýáiã_ˆ~ð™¾ø…ká}wÂÌ€]]xq$2Ëqó-óÒ® d»w2ü›ñ+âAƒö–»ŸÄwÖšv¦ÆÍì®cp² ‚À½ÛŒñŠû'Äš” §C.žæÞ8í|”ÙùFt“‡»ÆG ZøÚÿCÓ§ý³5=JúÊÝÆ-£|0UÚ0À~ð•!)µ(««ê¿­ÉÄÑj)ÂNÎÚ?ëc¯ñ§ìÑñ+áœm‹ü©Ù[…¾ùö’ ÏdÊé»Ú¼CLð!“Ç7r¤²iâ(˜˜‰®:gé_ÔLMçÚO…’1,R¨tqŽ…O­x_Œ?fƒÞ2ÔQO k²Íþ‡ˆCÔ¼$ll÷àzû/eMê´×õÔøµ‰’Ý\þh5Íaªê±º‘{ ‡ˆ¤x<÷éÅAák›Ÿ|@ÒîõC¨n$ûe­¤¥Yò¼0Py óŠý4øùû/Üü3ñ¥ëÙkM˾CE&Ò/##|9¬xv85V’VC2¯½gVœ©êÍ©USEø¾}B"ѼK«^hSÆÎç&PãŽ7 ΰ¼;ñ—UÒSû#XðÆ‘«è6xŠÊ5ŒG, ½3ž{~5ÕYxrÒmWÌT~sü«Æ/lË]º²Â¾Åë×#¥ípJ-´Ñõýýׄ!Ðmï6üAÐ|tú%ôÚv»§¬Â1ö•!Ï®xÇéM4ÖƒyÞÎÌÙÔbŸ ë ©ÛEt‹˜ç0¡Üf@UÃ:‘RÉá‹AtÖ:ŒqNv8ÔñŸâBÃBŽ bhô+›­ ¢!„¶½¬…¸æ"´çгjHÚœ9’p‘×øwö¸øàÿ…Þ ðwоßsâ¥P4«VÜÛÉ«qáz©P è}Oªxö¯Òµ?†s^x¶ÞÛJ×,RxtØ›ý?~vÉ79ÎCN0OLò+ÿø®ÚÛì~-»Óþ"éHàKcâ;®·ªÿ” uç<œŠàãоøÄúQÐ)ø‹iâ}rÎMLiQìµW]¢àã•p1¾!€v‚@8àRxëú'‰fÒnì5Gð»ÙɳZÔô¤êßiÿCèC1b¥HNpFM| £þѾ<ƒá>¥¦\Þ-ö X-­äÑÊ™ånt=}}kºÑ>5êzÏÂIçÖ,-ÒãNyvj¸¸)èÜóŸÎ¸MÝÎöÑœ'AïÏ­ì>%øçF6Þð‰5 ].¬ž8®õ÷R輕ó7*ƒ*¨Á› ŒdçŒKˆZ¯Ãé~ñ†«¨üA‡R”>Ÿ¨Åd«3Ü„ÞÑËêŃ:ËÓïoÆ<–â]>ÏàE¯Š´k;”–î´‘9äd9Ñž3Я5Ôµû»oíÝkP?hÖ.”5ÌñŒmFåaLò2z·zï¥K‘;­YæW­ Ér쎋Sø‹—¬Ýi:Ý´>Öî$3|×ËsÎüþäʼoRFS¿bq\ßÃy4»¯ŽR\M¨k£]3¸{[‚é*q‚»º«ÀãŒæ¹ÏøzÛXÓ®|mâY Æ™8´Ó-Ðò/Ýy t À3ê}Oà«÷½ý '¶p#û#+ªª„’7{šº£ ¦ºœ¸ª¼Ôä™ö-»ºÞ[äAÚsë]œNhpOǪ´w¶ã ñšèa™ˆr>\äW£)êxÔ’Y1’¿+ þµVXãž …y^æ­¶ä)àV„ êxÛ‚Ò±»lÙÀÂF²’Ð$–°²‘ýÑýkéß„дÿ„Ðjú}°¾{ù‡šS,>lqé_>+¬loݯTÔ|osðçþ ãâïiöÉw¨i·“ÚC!Â4Á¾MDzƒéYâSp²Üº Þ>{ý¥¾#xWÇßî~Cñ/Qð6·áÝe‘XÂË%Íш2Æ_1íp§$÷ãòÿÅëoü+ýƒt(íÕæÞ#øÁ¯ü ðnŸey«êþ*ÑoÖÚBÏj³™!i>yA_22õ“Û†ø ñ;Ãÿ¾kZΧk6w¶šµ¿—Qdy&–@Ȭç%²r:+æðÙuW7‰nñèþgE\Oïyd¬ÑÝø–ük>½ðż1ŧê6Æ÷ÊdAEäó &·<=á­áWìõk¢èð:ËN²2I&w"嘱äŸsÖ¡ðCZë:Σ«Ê¯æYJmíã(L1 ùÏÞ'éÅgxÞêç\øƒ¥xB)žÚÆcö‹Îx‘ð˜‰ä×.3Ru}7»»G·„ŒkËyt8ÿ…ö¿4_êÞ+ŸKðm߇u9å¼>Š'µÔ•ˇ[’LM6LEUIloÉ¥ã}n÷âž©£hºDwo£êÉ(XÞ㈭]§ Žqå“Ûæ9é^õâYš-ßMµ&!9Hƒç•r*ã<7¦Ùiz&¡â hÙ®eW‚çË…€3Ԓ˸Ÿ í[a±K‰¿"Vê»t¿wæ*Øw‚Âß™»ég߯ËÈó[‘xJÒæøgá}/Â~"°"$¶¶@–ú„jÈO¾§–”nFyÁÀÿŠþ!Õ¯>%[üH»ð™ººº»6º^¶ÑÏkÈêÉŒJ$±<ªª¨$×Õ=³x›Ä—‰{s:fØÆÆßáÌš›Mâ-*â9ÖËQÐdµ {²¢ØÅÈrO *¶ÇûÁŠó^ãà Üx;álVV÷k©ø‚`./5 °Hº™°d‘€Æ íŽá7^¶ñí¦¾3ÕÌ3¦b±ØZ<`€ßqcŽI$ÿºÇS™§Œ¡^´å8$¡­Õõ~ŽöOð4ž[V…8F”›”ô³¶µÓoÄî~|MðÍ·‡ ðƳ¢êþñ4ÖbòÏNÖÞ'û}¹?ë#tf]Ã:x$`‚oZxªÛ]ñ¬º»´Ù§»&÷Ï‘?Ò¡P#‡ü¬99õ¯ ø¡¤ésÍ{su oáéN¶›÷®ëœ nÀ”ö+Çs]OÂß‚þÕ¼9uâhº^¿â-qÅì× ­þŒXf%…É܆0 ¤Ã ìvàc¹É®lP©NU›¿.—é­µï×±®oÄ*ÑT#)jûèöíÐö­†½áØ<3ªEmuušé&@Á"$$ƒþÐ\S>é£xUžÑ}Vfyg™ApŸuß(v¯)›WÔõoŒ3iñÉF¥p,î™ËDä¶8Ü|¸ÏkèK½NÓÂ> –xmܵ´;bUݰ’8æ“„ãUɽËúîyòÄB¦4’Õ=_åò_©óÇ- }Cãn‡oà´Ý?ÇÚ”?Ø6µìöÛ„³Í)þ ›v®î„>ñ®OâÇ‚|CðËÂ^²ˆ^ ñ´×Ë$«â h¦ŠCDh§cg•$‘ƒ_JèúlzÇǸ§rc‹DbwS¶YÚ_˜’q÷sŽ8ïXÿ£·—Å>¶‹ÌF[{‡ÿ4g 8þ÷§ÔÖ™~aZ¥Jt›ÑÝì¯nŠþEæØ4©MÅk.»õvõ>&øs¯Y]xêH¯-´xZåq݂ۇEu ƒŒŠø›ÇÖÏnÒÚHö¦_¶)<²¢0x!³ßÃ5÷䯧:F-üÕBcÞ™@ǦE|Mñyî.´í{˜ìRéïdóî ‡kHv‘ÈéÁÞ¸©ÝTW:bÓM—ḓJšg·‚K¢vÅ4’þè1ã#Ø×Õÿ³þ‡¥ÉñûáüÖ>7šÆ¤Ë*C©)‚ßdMûü ÚäJùBŠ?ìû¤¸Su§ÂɹqüGgÞ¾Ÿý˜üGií]ðúÅôùí¤¸Ô%$µ¹ mh¶²žÊŽœûÓÄÍò½F¬š?L>&ÛC¥xQÖдú‰¶ŠÞÕnÛ‘ZP¹`1žÀ ùcá—ÁÏ ë¿ñÏ|9¥x“Äzέ-ÓϨZ«‹'tQ€ªP +œæ¾µøÕk ø­ÞÚù"î; IùPº†TÇBGzóo G?,f„9–â<¡#hUUáHɯ—¡V¤c.WoCÚ§M+ž)ñQÿáøE­éº¯Û¼S HðØh6÷@Íyæ¹Ç•½Ï³ï,‡•ÜN3^Õð÷Tñ>‡àˆ¿·ü=£[øìÊþ^›†(‰#xÀ`@xãÒ¢xJUé~ú»oþOb†e_Rô'²Kþ½¾$jºÿŒiøgÁšÌRVÙ.!ûeºÍck mòÜl]œ‡ÁRÀ Ÿ¡5;Å?< aªkúô^/ÐÌé ÷–zi´¸°,B©xC0–œ\2 d0É/‚ôÍ;Rý¸õ]V /JŠ×l¼î?18ÇAÒ½ïâ4QðmŽÏÍ·gd_”1*~„1kJù}Ô¼¯÷›b0ÓÄâ¦Ü½æþGÈÖ¼!iñcTÖü_¯é>Š M…ƒß_$lá— ô™vÚŽ –÷w És° ±ÊCìƒ÷œnÎѱÙV«æŒŸ2û½;¯]IËóš´/ E5ø›_ ÆyñSÄzÞŒ žÛ¡:\Y0–;„ÂæTaAäŽÇ9®³ã†t?|ñâxÚM"sv¤¶ßš3¹œñÓŠñ/ÙßÂþ&ñÇÀ[?êÞ=ñ&Œò.ÛkMu´†Ú=¸P#ØVCŽ»÷{`W=ñ÷ân¾ž×üws0ñFƒ©ÛHú¥‹yú­µÂ-g‹œ6ÐUÕ~S€ÃÚ½3Ë¿hTÕ[äc Ï÷^ô4w>Œý–´Ã¦ü ŽðD¶v±Â;wƒ¹ç!¿¦+ƒý©ô=cZÔ¼3yqchÃȼ¹ŠS‰®ªTÏ!ˆ®cán¯ñ«À Äw>2ðï‹<3å‹‹Ï Þé~J$<û5Â|ñ8#rº±|¹&°>7üX¸‘´_ýeð–°ßX£ü·Öâ(Ôù,¹1íbÛ‰9óÄ<-_¯{XÉ5óß¶¶õìcK‡p”u>€Ò~ü&¹øW…{à/ ]éFÔÕ,Õ$‰ˆÚdeòCƒžz×Ì?<â8|yðÇÂ^#ñ>«àë[Û˜m®îîɸxåaˆ £ÈQ·sÅG$òO¿|(øå¢øòÕ4+#VÓoâ´ í1âaŽ çô®ân«£ñ'ÀšyšÖÉ帓yÃ4¹ Æ:¸ó×ÚŠ¸¼U‹â-JMKJÔˆrA1gˆžFøØ`àØÅ|sâßxºëö®¿—BÓ/¯üLÑE¾• ¬±iͲ€ás°±ÎãÓÚ¿WåXχðˆð}ýëóÓNÑôý;þ C<6)<7š¢£ùûð"c¼çhûÃåè}M^O›Ô­9*Ϛɵßï2Î2êT`¥IZí/#¯ÔELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿÿá ExifMM* ’ ˜¢ª(1²2Â<Ö‡iæˆ%8AppleiPhone 4HHQuickTime 7.6.62011:07:19 14:22:43Mac OS X 10.6.8‚šè‚ðˆ"ˆ'P0220ø ’  ’(’’ ’ 0 0100  € Þ¢¤¤¤¤à2011:07:19 14:01:302011:07:19 14:01:30 ºq¹¡M NªEÂÚâTú- %d ¶d~ 3dJð£ÿÛC     ÿÛC  ÿÀÞ€"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ýœ‹îàÍ]:0äµ"[àÁç÷§‹\ã¨èkè¢ãcå%G…9 îOJvØÉfßqR R ¸ÔÒ˜$ž29=j®»™ºmn3b0ç?†(Ùnö ¤€ýÑ8ãšiÅÓh^¤Jb^§ž>”Ã1‚ ç{\ž¼“Þ–±ž˜)ê.R+n0 Á§¬’§L¶;v4ãÓ’Iõ`¶29ÏÖ†®% I’æL€S$ôçeoº«sߨª!¶NÇ4¥1ê*%šêj,ñœ|ã9ç"¦§¿¶Ebàààc¾iÛ¶¾ÁÏãYû%Ð|ÆÇÊOgÈ\ƒ“‘éY~aÜJ‘Ï^MIæL ¶I TºLi£@Æ\äŒzf•bˆRsè*»áÆqíS‹˜pÊžàÔ5 ´K1¡à‘Žr*â(8ùWU'Œ§'9©ƒ ¹WÇ= ®y\Ú*ÄÛvð¤ÂcÔŽqU„øvž­Iæ NHéSÊÆÚ&zG£lyär*¡”E(˜q“ŒžôùX)&[TMÙÈçÓ¥Jrp? ¨²Œc#¯ZrÍž­ŒÔ8²âã±sÊ úâ“Ëx㯡ɚ]Ǩ#ñ¨ÔÞÑ"Æ;P9ÉÈúR³©ÎGƒô4îE•ôÁ#‘M o÷íOŠ~29Å+•Ër/=yúR• ÜÔØçØ÷£j‘Ž´s Ùo.âÓ´›«ùö$ñ4®Z@ƒ êÄõ'㿳֩©û$øZhîm¦˜‹‡•!ºYŒ[îde¯±Ò½O^³MKI—K*gC¿qã¾?­x—ìÉáí7Bý‘|4ëh,Òhn„Ëç7Ú¥*îßyßX’O5›“çFчîÙôߘç zFÚ£©ç¯z²S=½ê=ƒ<€Gµj™Êé´Uòƒ?§ ÅWx\(>ýk[!S 3øÕfEiI,Ã\fÑZhÆ1ò>öOÞ‚Ÿ(Éaè­P 2EWòÃÎç9⺮pJ™œìÀeTºŽ8ªÎA'ÊÁefùd#^ÕÓGasžiDw3:ðѰR£ñ¬( »‚HÄÇ ÿ\àµvòÍ„Pù3¼Ò±ùäi ¬ê«É$ˆ»Œû4XæX&–MÇÆÓøûS­ÞIÚß…Y>èUʨö=Í4Ï-µ°“2Ë)—ÎÑŽÙ5>œÁ¯<÷6ò1(26@;Ðî¢ÅÉ©z;HÙb‚ 3·82}{Ó$·2I¶YŒ<” Ž¿Òžd¹mEÛ ÇäXÆ6séWaÌ‹Ãp—e~”ýO¥r¹5©º‰Nà·ØQ#¶G“%QD–oð¦Ç¦\ý‚BU1¡%”ÿ*Ѹ†ÉY!ˆ;»ŒÅ¿Õ¤-dŠVŠ ,ƒ…?êýÏ­dëYM½Lé4ÈIŠK˜í8L²sîªßØ÷q[ˆÙ­î `70[ŸLv®…tà¶j¾y‘‡;ßœ–ÆÒx v™÷9?x“ôô¬>²ãªÃ©=QÍ5¤Öz—‘jnv:üÌ#8O@ «qiSÌCϽ Ý–Œ^O¯¥u³ ÄBK“ü@d/Ö´ qŽH,ÙÈÍcaž€Ôá¿ÈØÕÏ»«÷ÃzÅŸ‰| ¤ø‚É•í¯­–Uçi#•úƒ‘_Z•œ·Ò…£‹GÙ†6Ò.+ã£2:×é×ì_ñ1|Oð¢ó—ӓ¨X“<(ç>ìŠ>ÏÑ«ÌË«¸ÍÅõ:ó,*”»kl>™úR…©@=ϵr~)ñǃ|¤ý»ÅÞ(Ðü9kœ¿¼HË@ É?JöÜìµ<5GSª ^Õò^¿ûd|+ÒµK»m.-o^H[Ê[ÑoökY¦ HÞ\g†EeÏÏ­ð/ö°ø·®jšN¯e§øg\I3c¦-Á•Ì`rÈÌï´X,M7.U-N§„«s8ÙOriqÅ(Å-kÌd  ¥¢ŠM•Ê éMn´úkSORd´9%P Å8vÚHúÒ*qƒõ§å}ò9\×§s†ÖÜh  L®NŒç´ü|£©ÁïLÚ2Ù=G½4Ñ/Q¬Í¹°¾µÃ1ãp=±VJüÝ@ÏOð¥d‚8çš«ØÎÅFLíʆõ>”žG»×Ö®q’p¦juhÇ^xäÒöi™KsÀlôY[©ç¥m(ˆ6CÜSÚ$b6º’ /obãI4bØc¿½ªEÉÉS€8Åm tdà&zS ±•ÎÞ„KÛÜn“FjÂÆqD–{Ðã<Ž0qŠÔåwð¢@ʼžþ•>ÙÜ^ÎÈçžÒ_0(fSÛ=©­or€“´ç[eßÊã¯&#ìpEj«>¤8ë, aц:Š>XŒg5£$.À–1Tb%-‡ ŸPiûHØŽG{Û·~ÿ1”pÙ9Æjg´R£Ë%}OzªöÅ~éÝÇN”'ÂI¢o´¶p[¯jStI rsÈÏZ¦ÐËÙAî1Å=#$Œ©È<çµ>Xù¬XüÝH¥ àõÜ;LPõè)Þa ü5 vvW&·†sÓ*Ê»¹$Ÿ­Ró##ëA“§#>†— sšâpS8úÓÌÀœr9ⱄ«Ž½H²Œ‡HµP×ór1’)âR €1ÍPG8n¼b¤G“‘œÖn)³CÏŒ“Èì8§¬Ê@Çž®'=ûÓ·îàqýk?fZ¬Ñ¤%Ëç=)êàIãÔÖz¾n•íÁŽÄ®q¼ãޏïPàk Îãù÷S\üʪŒÃ>¥Hþuå™ìeà‰ao3l38Ç_øø“#ù׫¯î´Ò§fÆgÇ÷Šœÿ‡á^cð7öKð\g£YʳIYò{èÛÛ.F{Aêx=)¹­R·˜µ„džBícî8¤ŠòŽEr#¾>ž•j&.ª.žBãåêzñšoš§9 })K‚£Š«2%$Ñ õìyµU°Ìq·=ǽZ;ryçÒ«´{ƒ`ƒí[Aœµʯd*[¯§zÏž5j£“ŒqÚ´Z 7‚%n:-DöîHùò;Vð•žçâû^®óÛi72Ûiíyr‰½aY‚çžO'šòÿ‡þ5Ò”øš[}1ÌpDdsó;˜{j×¶±ó6Üm.w tÉö©$±–+œ,NZAÁàëõ®·^;û6s톶‹>\IÓs¯ÍžäÖŸ»³"f‹ûÊ1œwçµt‹¢FÖênOî(lnúšbé¥ôÿ2 <¥c÷ü¸êsÞ—Öa²£#8y©oÖB¤þôáôükV[‹xlÑbÜäP±c¥mö€\9ù•ŸŒqïÒ¬ÿfí"{‚NØ\cñî}ëšuàÙ¤)I#7Êiõ$iì¬r ¨`³’;¹1(· ÑÇ~õ¼Ö—„xÑ ˆ¶á„Î "XÈ’ 4‹.òÙc÷«5ˆVµÊöLÏÚZXÓÏû¯×'ü~µqn&šGg!"^(±úÖ ÛzM»DÊËŒ6ܺtÀcÙ/ïQ¸`[€>•Ë:ñÝîtÆ„šÐÀŠwº”¤ ´g€½ õ-éZ–£Èþh£¸uØ’A4ôÐ’ Q¥ÄÑ…?t1éO1f‰y9bwqÉ"²HKb¡NqÕ¢› góy.<¡µÙÐ{ò+ZÙ§6ñ„ÆûÄrÔ©m ìxaò=?ýf´ª B\rzÖ*&¬tSƒÜšÝ‰‹§*3ÀÎj”n¢áo”Ç š‹QÖt­"ÆkÍSR°Ó­âMÒËur‘ªRXñ\rÑž•xØÏñsê|2Ö¥Ò5$Òu$µf‚õ­DþIÄ#$>Æ«[x{QŸO¶kï듹‰7ˆ|¸U˜¨Éár9¯ ñ×í7ð‚ÓÃZÖ‘kâ†×o͹Qe%±,  ùÀï^ã_Û~ëSð…þ—ðóáæ³ܶÏêz­âF¶ŒWnUcÜYÀäg=늶2…?ŠG­‡Àb*´£ù þÙÿ.üCûdêÚ…5F xV?ì¨n§›íspuÌ€¾@Ãm@W®× ¯’m5¯k·»-µ wPyY„i1S…ë•zû×½iÿ ô‹­NÿV¿þÎY‰WeYËÉ$áŽYÙ™‹32Iõ®ðizBê&ÚîææÚ p#– dT†AÎÞäsÐõ¯¶i-.Ï­¡—òE'm äºÑ ðF—`gKkùíЙ6ߘ²¯Bqõ'Ö·>xóÄ¿~#Ëâ Y¦¡$íþo©?Ù -´£3p_ipWñ® !ó´«û¶Õ--ìmîK¢Hu Áº ~ãî“ßšÛšúy-–Yŵ¢ÝFܹ/2“–ò fl`ob’}«ÌUê'u¡×,=KT{w‹¿h¿Œ(Ô§]oâ$¾ Ñça°ðÅ‚Bž^ò<ÇìçÊ•ÆáЌ׈Ëuá{]Fæ wPñ ÞY¶Ô5½×7Òw¾Õ•ÌŠ ÀùНçµrí{3ë’6—d4ÿß8K©K{>ì°ò"SÏ 3ï]w‡¼­^ÜÉ>«:ZÛNÀ¼X ;ŒwcÈüy­]jµ¼ÛüŽG4uŠ·æqï¨êúºÇ²Ü1"Ú"D’²³ ØaÄkŸáLr*Û뇂þ#hÛÊ|/«ØÆÎDaäß û ö=sÈ<ô5ïZv‘k£¢A§X[Ä®çΓÌÃޏþ#í\׈|5g®¤–׉>ëiƒ$2„ÇÛ¡­©Ñ}¦ÅÝÙ­úAû9~ÑoÅÿ®›«Kmeã;UÄÐ\¨þ%ÿkÔ~"¾¢ÏüåYßø›áïÅ›ImîçÓuûVkynûéAÈeÿhw³é_²?³¿í£|]ð|n©<Œ ]’[ÈÁ ÞÑ˨þ÷ªþ#Š÷0x®v[žF7é®xê™õE´ÌñEz6G—ÌÉ)„äÑHN9Å ‘É¥Ú Vܹ©äl¤§# ¬@ þ·áNfùˆ §¥{Â7<÷Q³\ÜG‘• ÀÒ4ÉCõ¬Í¸õQJí»œÓTP¹îÍ@êx$g¯Z ôç­frqŒO§éO†3{…Éæîi AÁÂŽ¼f•I+Ð~U@Üy+ÁÅH¦MžœtÏò¨p°9j_ Ù$¥L‰.sÇZ§“ –#ŒàÕµiGÌxç°’išGVN±¹?†MXò²;çMnÐ\µ¯ŸÚQ´ÁuSœ½@>¦­ùùä•úŽõ‹»:tê=c#vÙ3ÐÓ„Du?B·Ų@Ï@y©Cü㜎µèk•ŠbùUúSëì*MÄŸ˜ö9éJÛŠñ޼ûÒæh®TUhwwÇãɨ¿?‡Z¶1¸ƒœõÈ?¥)¦7õ5jlŽDÙDÀ…¾ 0í\œt8ÎEhmêQMe‰‘V¦C§¡˜ë_÷ªXcŸëïW ºyëÖ£û)w$àÀõ«çFJ ¬bܤ÷õ5\ņ;N{à¾m˜d:óÖ¡h'¡÷U©£9E³;oÍà žÄÓšq£ëžµm£%Ncû­5Ôíþ!ØÕ©àVhÆÑÛÓãQ•qîi1ýÑkU'f^Üz q›"TÆ+pÃá!$aÛŸz2¯ÁNOzkF§$1ç½= ´’$ȧçeÎ{t5b;…žçŽk0E2©ÜQ½1Läà—=TНf™ mL;Nxõª…ƵдpŽ=2ž?*Êk£m’È~àÈ¿¥Ia>ÛìròrvóóÉük Ñw5M ·›Ê Æ7äuû¦¼×à:¤²7#i¤•…‹åål³~õúšíä•e‚RT‚"~AÁ?#W˜üidý“<!Y -¥î11¯ïÓ­e*IÔHÖZ¤ýORÕõ;-.Æíîîaµ¶YÝÀXÃãç»1ù§iÖ Ý4óf)÷naœ ãåAìxv¿ðÏž#ñoŒ®/t%¼½—R°¸žçíR3[Æ“Åò–ÛÃÆ+¯Ó<£k~!“YÔ­¤[?°Glºo˜ëL²;´ë†È,)ìŠÅÆ}„éõ=VdxÈ! «Ü§$R.õòßhÉ#µr±ü9ðj¾øô똛ò_L3ÿÔ§Àº ¾ 1ê§cj“q´Ÿ½Üu¦ªKfˆt£ºgTA|aOÐŒSB6HÆW·­&Ÿk†ocšÐ@›#2È]±Û,y?SWÐŒ‘€9§ÎÉT“)€pQ† õïH鑵‰Š¾È® Ï=ª°“nlÎ2”‚T¬f_i–º¦…y¥ê6ÑÝØ^DÐ\Dç‰Æ¨¯Ê¯éQhüU h2êV‘¦kFÆ4¾Î¡X,Œz®â}ñŠýrM¤)ëȯÉÏŠGJøóñ>ÖãLÔ.7x‘£–æ&MŠ®Àä¶ô®lT“ާ¡€ƒ‹Ðý0Ó-id FÖ• 1°w­²ÌÐFì )ž»‹Wøa ê1[ÝYA5„M3DZÐqôÍtB!³=}ÅvB¿º.¦óg&lJÎÒíWR0bœÓ§Ów ’6*ä»ë]+[Ÿ8·SŠáWo˜žµºÅK¹Îð–0'…ŽW’2GÌsìjD‰a` ÏÊ3Œ Ùhš9r~ïbqU¤·†æBQ&zÕ*×ô2• z”É$1£Æ8#®i‘€efùxÁ=Ò¬ˆÞØáÔùxêzT'Þm¬ Â9õªRìdâÐÂ$]ª8nHùªÔI/³ psœÒ}š(×ÌùŽò*xÑZò— ÔÀúTJH¨ÂWÔ|Q§ÌN‡ˆ«@ìBI ¿^•Æx£Ç> ð7‡ÞÿÅþ-ð÷†¬Õˆi5 Ôˆç©s’qØ ù›Æ¶w49< á¿|FšuÄ/-¯<)2LAe<¢ž+ƒ‹£I^¤¬zØ<¿_JPlûMJíÈÀ~JþóOÓl~ש]Ùéö á¦º™bAŸv"¿0¼SûT|lñ-Ø|3e¡ü?ƒ+“eÛ¯â=ö<¸OºØEx§y¯jšû¯|S¬ø¢òàÚZÛ$˜©ÿZê†ÐmDîzW‹ˆâ þ ¯ë¡ô¸nÄÔKÚ{¿üÄý7ñoíGðkÁ÷0Çâ)¼O} †)-tf»ØÃïfAò.;’}«Á£x¶7©k4°ÛÛKl«¸ÜYÎqœœí>À w®wTÔ »Ñ'УMi-na4Z©@ØÎJœrHþ"x+Mµ8n£{,ê—>ØâwrŽ3s‚qÇëY!ñ-嵿—>­„:¤Q,K%Ë®>a´p¼÷ä€+Jt*YY}áZµ.gwòEm3ÃZ[iÑÆ#†ÆÝ_þ&…žgü²yÌAfç$ý3Í>ÛEðu½¤š°Ñ <[íîä g$n"ù²Ž À9ÏzÏ’ >ýc•¼Mm1á®"y®?Ý„ÈÈÈú×aaà4ÔZ×P¹6÷ [£ yаXåŽ}kªyßM~g L];vùG¡jWÖºt“C-ÎÙ5©í kQ#[‡‘‹:GÎ]ˆïœdâ½KEð†­¬]Çy{o=¦õV–kâdšBy9î1Øg½Á¾Ñô¿[ÉKr$‘ZâvÛk°»ÈÁ±aF1à“…Ç$û“ŸÂµxm/&pTƦísÚW‡4ý2 ·Œ?W•†]³Öºy ÛéÒ–Uà©ÃžÚ¢ŒO^\“îP0¤õ«I%¡Ã)6îÆÍ­bæ 0!Ñ$ª³{‘ڪɓ¬SK 0^:âuˆî^:`úV²È±cI¦î$LÁéUd»/I"‚§k$ŽªN}^µJé‚z}âo[xƒ@“N»EAÇÙî× %¹ÏÞB{ûw¯‚ëZðÄ› B “â+Gó-îb éPü®f>¨5ô•ä–òH|ÈÑŒd8Þ8ëô®o]ÐôÏè"Þáöκ â I úƒý:ÕÅÉ©-ѽª+•ìÏÐÿÙ×ö‘Ò>-ø~Y’?ÆpÆÆHU¼Àä ìãºþ#Šú¬t'­:¶Zž½ào‰°<*Úv»dÁí® %åAùd #óâ¿[gÏÚVÓâv‹m x‘âÓ|i@ã!c¾¤ž«ß¨¯gŠö¾ì·<œ~دib}zF &3XÇUÉãÞ¥ŒlÉúW§ì&º/×)>§:¸V(Ú¼ ø÷©6<{ ŽôÝÌxÈ9¯B2bÑ ¹‡ÞÆy8§˜@Çô¦«8= ãŽpiß>7wéךnL͉± ÉÓÕ#,pAéšUt 0Æ;RíVåã=ê\™<£‚.6œš™U¹;U†:Š‹ìåóŒß½4Ã"ó8ÆMEÓê;2q¸¯Ý`{â¹½vÂö{;=ZûLߨm–HðϰÅ!*¹û¤>nÕÑ#°ëÏ7uª“‘q£2ÐV0äö$~8¬ç±­=SKðõ¦;I`eŽI?×É)2K9ÿnCÉ9­ÝÒà)czp-‡éØô§ÄžQ‡¡ëMYÛnìj™ òqR©œ½Ïzf9çƒF@rO¥&¥’NœR—”Hç5[ÍÎz’8éR¬¤ŽFà:`õ¨q±¢‘`;‘’ª}êL~èoö‡J¬'Ry 1É÷§›•)ŽN:T8²ÔÐ×Âô$5D·;_æ%†zšY m 'Þª²å€# žµqŠhÎR³Ð¸.¢ dòzsR‰abzçÆkãRãçÁ©’=‹ÄñU*k¡*£¾¦©TÛœžžµ-ÉÉî VI›î†lvÈ©‘ÜgpãÔ Ï•£Nk±² G÷ˆXŸ䜟aMiä}Zé7A l±ãŸÆ”ÌËÔ?JÒ±œ­q ƒž0x¦y ³ªN3Ö8çryÏó©wpp3ýÓORL­²EÉ>¢ÇN8èZó@ÎKsê)D©ŽAÆ=iݒ⊞Só€ÃÐõ¨Í«;gæüºÕÂà¨Àqž¸©PñÁã¹£¢ySÜçîm—Vö¤Œ·Ìù…3[˜Ø£â­ÚÈ’Ý\]·!ÎØóè?ÏëWL{•˜eð:/ô§¯vLé-‘‘$ öI› €A! >ãWž|ˆ·ìð÷ÑÕ¿6cŠïõ-VÂÏN™o.㵑íå’†Vo‘º s^Cðkʼnû)ü9Òoå›OH†g’ ^9™‹ªáHÝÁùO5”êþñ\ÖìÙ¥ãoI௠øó_‚ÞÞòò^Õ`·š]Šù·@Ùö NkÔt›D[8¯mÝÒÚî˜G»v7Ü{rká¿ÚÄú.³ñyü#åj=½Ù½‘$±•_2U‘ÎÝé_Sü5ñdš—Á}A¦k7Ï y;£€ ¨é’Ì0ØíXSªùš¾‡el:öiÛSÖ÷d$ûš˜y¤àÈ{ η¾Y`]ö·VÒ•ÉŠd×êA#õ««*žq‚kV®qè´,(`»‹ÓÉÀ"›ær8'$æ…e$㘈Òu#y;B”äísÛY 1ÿתi +?š«×å*y¯ˆ|IûuxN ¤ð‡ƒuÝY@+½bUÓàr{ù¤'§ð޽kçþØ|C,i¤MáŸ@J³¦•`×l 7M6ÝÜmÅpÔÎ0ôþÕý?«ÐÈqZn6õ?Y/ÚÎÇL–îöò XÆé'¸”GRX€+æþÒß|7¨ËbàU/ ø³þ­3]Ô|;{5½—%¡°I˜®ì&WsŒcæéïÁ®úy¥;Ni>Èó*qc  ù³Óníu.Ž£ -°vQÝ‹U@9õn¡HÎk<ëvÖìðy ©_LŠål {„óWaÛ<€õó<~3ñÞ¹â=FÃÃþÐášÊDIfÔ/éãfç8#ÁÏã^Û¯·‡$µ±Ó¥ñ®¡áÍb8÷ÆösëvYFŠ÷òüz«IèÏ—ÎrgMº´u‰õã;òÛ?Þæ«¾ÍäÁé•=Mgh@GÞÏÆy© ô@óW‘kÖTÚ9œÑq‚žàÙÏ'4ÂXBúðzÕOµC…_1FxëS Ó'$ŒrG|­tÌÏxBðŸ€õ_ø§U²Ð¼;¥ÛGQ¼}°Ú½dsÙGsÚ¼~Õ_³C»Fß>+©ÃÖH>àÖÇÇo_øÃö%øµám$G6©©øRòdf4žY*sé_ÊŽ¡â{yeûoÚâò§U˜³ìà7÷xëŠóñUç Y¾Y€§ˆ‹roCú¥‡ö—ý¥Á‹ãÃ3‘ÁþÜšÓ‹ö…ø:†‡ã7Ã7'Ž5è¿Æ¿“dñ „̓wbÄu gŸËå¤:¶›¿.Ú^}ZÅøŠåx¹u=Oì*M|Lþ¶!øßðnp¾ÈOMºü?üUnÛx¿Â^'±‚_ ø§ÃÞ!Ú­ ¸:f —Iv!Cm'nFqšþAµ´F! hL~ö’~r¿Z?à˜^)°ÿ„Çâdž­›MC:i”iiŒ—>Q-€;ÿZšÄÊNÌ篔B”£&ì~ågi8`~¦šeRÃ%3œ€IâªHêìãxnj£ øšôÔœsÔ× §?twûÔãʹ•O£7éXÞcâQô©cІÜ<{Òörݪ-™}­®–^J{ñš“Ë‘cû©õ5¿Þ¤0ã×­=î£ÙòŒã­giuF—ŠÔk¬àä2‚CÖ¢ÛpîBÉ´þ‚™4»Ê¶öÍD³•nÉÇ\*µc6ÕË"Æí‰emøô8§,)ù·ç=ùÍ6;¦P0Í´úµd_ºÂ{ã5œ¸ò1VÞf¦Dœ…'ûÝ*¡]‰/±ºð)êÛW>yaŸîÔµ!Þ&ŒkÑŽ˜¥UãsÎ3YªÄ6<ñŒç‘Hò8õ¥Ç°ÅG³w+XXÄð•]ämdˆõÿhÕï!pr¸éšÄFoøIæ² Šë¡­2P£nb—+*êû{`Ä€F{†íUf·™A(ŠsêqR3Ü$mcž*!,ÇÀDZ­#ÌŒ¥ÊV_µ™ôŽ1ëœÕè’R2â2}ª”÷f\ºïÅVmJ, ³¦{ õ­y–†WHÜØA?&HêEW½•£Ólrò|«òöïT"ÕIq¸õÉ©EâÜk(wf(rz÷ý|~F±© -Ë„ ËÑÅVÑCŒ•$ýÿZ˜cŠo› Áÿ*p1ºîWÈôÍ$„÷!¾9ЯN³K×þ¹µygÁ/¿bŸ†…ãš ÚN#™e<õS‘šô»ò£B¿9Î-%?ù «É¾.¤`Ï®“sma«Â&¦Òêæ*A&Æ!Ê ŒíÈÍc%iFî]Ï•>8C}¦þо2·ÐíoÛQ»ñÚIªUc‚î<¹ã¯¥¿g;µ¾ø 2É!–ý/¼Û¨ÊãË2F¬ü+ç_Gâ3ñÏI“SÖt_U}9îqb#ùsã·wëÚ¾OâiþÉk§ë:v™ö]J{vFÒ|ߟvî¥Á#Ó®ôõçÛŤžBGˉ7¸<ž9ö®¿±åÚÎaU\’ÃÛ4ÖÚ¬N[oqëUšöÙcó$™UñHpeêž&ðæ‹¤¾¡ªê¶–vÀ}ç—–úôõ[‘£Ñ0nQŽ3Tõ-OMÑ´ö»Õ¯à±·ýäÏßAÔŸ ¯’¼}ûWhzÏü#VÉå£mmB÷å}Ôü­|;㌾(ñÅÄͯêbT-FÐ!_ï1ÎJûµÇ_J’¼¥cÒÂå•ë´£Ÿ_þÐü­|2Ö¼¢j$—è©%ôkæÊX7îâ€N0 ‘Jüú¹ñZ~¡$Ю.މ Òcý£Ñ~ƒJɹ ö-άl¥1—KK#‘€à³žH­ htçðáºo›Gå›É›{=F0ñ‚E|þ3ˆTU©¯Ÿõÿû ·…›þ#·õýw=SáOÇ|-ƒÄxgGð­ãjjx/ä•Ñ“;]=NrÈ>^ù«Úçí%ñÇÅ×&ê?‰'CÓ-ô D·V`~`†cùôüëÅæ¸»žÖ9åŪ@ª#ŽÏ ·'¿×©¥N½¸´‚òmSj±1±'pèKî©=½=ëdžcŠ­î©?—ü Ojy>ƒæ”WÏþ„×Úõþ¸²I®k>!ñ$“ɺ{½FøÌ»³÷>rp¾Øê*¤ $#È{ hcŽB"*Àd`Ì3×§Ò¯F–Q$PË}¦¹òðQxP÷cÐs\þ³ã_xCñj¤’­¹p ÜÒÃî<(1Ç(þÏÅÕ—3¼ÞŸðEý¡‚£U+ù-àñ:2éÎòò³*J‹•‰GC´¤úšÑŠØÅ7Ùt¯ík ND³Ã}£»7ÍÑñ’$W©üDðÿ‡ü)g©ßí³²½_2ÈYéÒÞ Ô|Á×#n o¼@ÏZ£â¿êšWÂm;Å~»×£¼S$67Úˆµ`¡IÜѨÀÞõÙO%n¢V×K³ŽyäS¼iß×CÓ`³Ól^&š[{|Ë)"IwÏÛ ËÙ'œóÓÞ›å»YIåÿl¹sºgTTBG|ÉÛðþf¾cø‹ñÆ:5·„í<{fÒßþÐþÏÓ„²E» BÎN2;òA8«Ÿ¼'⿈Þ$ð¾™iâ+](u˜§ºdûB°ù„_ssž•×G*ÁSmµÌüßù•³¬m]å]’=³Ä^9ð¿ƒ#Š÷[Ö|5áÈæ –é<­s+ãû u9ô‹©øÞ{߇–¾0Óˆuí.økŃɞ¥”€Ê§Ðóí\Ïþ^ø­ü:·wÖV667<0$Y ù³É8ç¶;V¯‰4[xrÞÓ\ñ”‘F¸!¿æ?¢©8ÏL× ªFšjI}Ç–ùª»ÊM¿¼ç< ñ u½OÄëZ>á+ ;u{`Ó›‹É™‹.[ƒÀÆ3žzb°<#eâ¿üK×ÿ‰¼EwáÛ a6`7•äüÌ P2#µj[ë_ô©nÿ³4íSV›tc–Û2ª0är8ÎzúÖôõK1cÒü¤iöîNPÔFå÷)þµË,Ri)Kúùª2Nñßÿ³ã/øŸÄ+ÒmΉ£É¥$¨­(œ‡EÝ“W“^›aà„Ó¬µ4´ºÔ,ÿ´>ÓöyJ/È»F=:ú×ÏÚ—ÄÏßÜ‘‹4].¥l´µÞ¼öy Ç¢×1yã;Jù—QÔ¼SªÝùÿghooDqôÈb ãߥg,Ty®•ØG+Y´—Þ}¥éø{&©5î½¥YË{0žò{íIL²Èªü½~êÇ¥RÕ¾+ü4±uE¸¼Ö®Oú´°±gÞO£6|Ô·QXE2Úh®drÑÁ°…?y|μãíÒ¾+ø?ìvRëv:®•%ÄxnmÕÉ\ ©$ WYaâ¯^Ú:é~%Ó«¼¾W8ÈO˜u¯ítßío†ÚýÔZ=íÁ´GYVÉ®9çÚžßeY­¬£2ÏrŽˆ"†« yБ€yÇ¥yÒÇ''s¦8mÔö˜fÕl¼G$šeæ™=Åþ .ZD++Ýü˜(̧€ÚAWõ;í^M&e»±7ÂG ¥Z6Ü ŽzŸl×ÏóèÏk®jW"Í#•‡™æ¢íÇC߯5bÕa˜Mey©ÚG1WšžBÍŽFQólÓU#î븥A¾kGcèõñTðéãPÓî¢) ŒÜ4sžØŸå\þ»ñHð÷„µMQî¡5ª}¡á·²’IŠ/$¤c–Ç¥xí÷|ms¥µªjËk;”ŽÒÿMV“©;0G¶yï^m«|[ñ“áJÊóAÓ®î@h[YÞ0xû¬¾µÓI§-iPij <1ñÀ7Ÿí?Åoq$D*]&ÂÎIbAÝ£>”ÝS[ðæ½á½OO ö»ÍB0.å{À<ÕÇÊ#rx¶1Ϧkó;[Óm[Æ—JúDsÝ*….X é1ØóÍsŸÙZƣƛ}s§4/¹ÞYÁ ƒƒÓŠÚÊû,:Jíî~¶øÄÞ'—ÂQèþ'¸Š×_±‰i÷™ãÁÙ!`1¸†Çp}k²OIszív7p«|ÞTÊX}Fs_“ÚN§ñ+ò=ŧŠå¸€$[–w AÏ=O®†×âßÄ]ög–Ê Ë+tbãp .á‚rË’Ù Å2'†oTÏÑ¿ˆ¾Ñ~!|,Õ|%ª‡{;è¶–9ÜŒyWSØ©LWðOàmŸÃ2Ú)oF­yæ»=Ç‘µKI#§ãÚ¾]Ñÿj]DYi‘ßxKSC ,2®¹ààw$gÒ½7Dýª¼âB×úçÚàlžöÍ–ÞÜg§¶zÙÕ’V3öÇÛz…õ¼OÐË€©q‘Ç9•$öqéžU¬0È[î¢K…'§CÚ¾~O¾Ö"š[;‹¡G%š+ žÜ7<Žq“WWÇÖw±^G¥ÚÜÞêQlŠ(ehâä8VfÝ…Qœ“è=x¢›2p’[Ô¶6·k‹hÝÇѸ!O¡Õ²Xõ8š?'gÝCò¯¿\c·Ö¼÷Âzmæ™áq­jQêÞ)½r×óÛ¹CbÐ|¡FzŽORrkNÞK!µœVö–^c³G`HÌÙ#>ç$ûÖÑ›!Au7uýNñ7‡ÚÒõÎwC2}èœte>£õ¯™îíõ¿|G´˜¢»BLr ˆoc‚Øî8©äq_MØìî®<ÉCÄ‹•„G´Â;ƒŸ½ùf±µOñ„RÇQ™§‘Nb¹}¢]ý›#€yíôª”oï'©¥:¼žìµLý‚ ÇNýqŠvä,~QíÖª*Ƨ‰G>‡šâó¸Îr¾õY³â[.þé³¹AϵF!„Œ•Áª¶ÂÛ'?^´‡Î!±'=x«åó&÷.ÇmjÓ*¹›Ë‘Æîª~SŸÀšþO¾=|9»ðŸígñ‡Â*UÃþ$¿X¹Ø']B z„¹E¾ÜûWõiºp¸ Øÿwù×áü#ÂSx{þ ]}âì¹ntÿx6ßQ  k›W0JÄz,P ¯#6¦ùT»æC_–«sò~ÚÏTYŒiªã)”-i }qÛ`ŠV#·žŸÖº-C{jr# :އ<þµ@¨tËdqí^S¥Ìî}JÇ(hehÚMÝ÷Œ!´•®-#‘ÈiÇ Œôê+ïø'?‰®ôø(°Ä°Ã«h ”ÜCEy\Oœþ8¯™~hº>½¬ZiZͶ­*ÞßÇkoö9Q,v‘!'!rG+Íz/ìÑ} xþ 'á)çÖõO¶Ãâq£Ï úfȆ렸ióÀ «‚zœz×<çj©_cI5RŒ´ÝÕŽãÏ9*wÈÍ.'^TozT2j ^KòÍ÷ÉéïMþÒN»¤Á?tŠúå>‡æŽQ¹#5æò|ÜäžÂ¢&ôã÷CˆoÒƒ©DGS’:÷¥7èI$¾}IIK±.K¹Mv§[Žý© åÊ1 œç”óA¼vC€{Zên?4g=~`)òù§æ?íreNÝâ•î—’LŠzðµ ½ˆ²ïÝ:dT'PŒcÏóúЩ¾Äº–êYûxL‚ÒŽ~R 5uƒî8÷ þ4&¤¦&ÄHËŸâÅV¿Ö´m7E¹Ôµ[› +N·MóÝ]L±ÅÈ™d÷¡Å%ª=öf€ÔÛi):IëÏQSQ˜Œ”=9®-|à˜,>2ðT¤cíˆ3Ïü ¶¬µÍ?PIN}+UŽ2<ϱ]¤»Ié»i8ÏjÅ{9li'8în¶¤nhKù ‚`zVjÝK’WMOûùÍQ™—ŒwSÞ©ÑÓaF·v_[à¾,ÁÞ™Ó†IdKW¦™fG_® sR›þDoì㹬»ÒaV¿´gfñ/^= e ;wÐÒX”­fm>¢øàäç•5½™Ùº}1T’úCËXÆûÇŠ›ûOa +Ï85^Å®„Jº}IZöfˆ££úf³§}êÀDyþ"µpk)“” Ú\Ó†­9EÏûµpRÙ2”£%¬Žz}âÉæï^c‰íU"ûrÅ”’ç,zƒŒÿ×Éük¦ŸU·™¶€…ÆÁÜÜÈn?•Yû]‰Ú/”.Ó+X×’zÀÉÑ‹ZLäêöÞmßh—vrrI¥ˆ.”“+‡8Çʘ­™Ÿ 9Ž]Þ€UD°Óäv,®¼ãž+gV”—½B¬_»"µß‰7è:Š0` œÀ?é“×Ïj^6Ñ¿àœ>Ò¾Ács„’—Ô.¤k¸aòŽé!b~yÏÞ>õïúÝ®›eàýjêY–xtÛ‰dyN‰¹&¼ÇáœQý‡ü  IuàxætòÙ0ZÙŽ0Ü¡¯>µ<<çeu¡èP«^Rvz£ókIÔ Ùx¶;i›G¸ÖF— ÛÛ fYL›YŸÍù‚)ÏÌ8Èãšñqqut‹Q¿Ïðÿ‚}&  ï4äþå÷ÿÀ=IôkýT¬ú„—ó•“ïH„Â;©Ë`œýxªÿe†)gŽm^ÔÜI&din²{L <šà,µû_ãõ¦›¶WÞµÄÿ»y¦¸Pƒ˜ävÚFãŒãŠËŠOM x÷G’ÃÄy5Øþ˸…¢·[(@ΓŸ~~µæ¼¾œ¥z“lõ–m8+R¦¢¾lõ Ú[éòDoo/cÛ·zÛ9þá.Tì3XÒø£LKMVÉo-/#Ó ûEü1Üù²[ìñÄ>QÆ0O8®-¼/®Íᆓê±è_hN§Ï¾¼gyœiXà3œž?ZȱðLJtо4ºƒÇútsx±UõkKeŽIfŒƒ’ gœzÖñÂá ¾¿_ÌçžcŒ¨ÿ‰oM?#±?„ÿõhPj—Z.™0’(ɤl„2刵ççâ&«âo€0øºÖïMÑ5 «·0Á|Ïzc·3n .qœã÷«sZønÛáŒú|‰«êåÙÜOx~ÏbzŽylpZ¦òòÈ XÚ6DO ‚:T¯µ[_ÙNßÃw_ØÖÖ–Ó››­Bf3NÇ%²ÄýÑ“Ž½â±o> ø‚æÚ;XµmF(¾B$›²®Ð21ÛÔD3Œ€§ælã©Í|ë6·{.³j7ÈðE‘çä9Î÷è+ZÛU»qM;ÛÃoT\yyÆYˆ?xެ¹åܹQŒuHÙÕµËÍNê;M\^kRFTH÷ò¼Ž$ç=8¥u÷ZØíi¶‰lS”ˆnLìqõë\­Ž¥yy=ë—¾‘î|U}4–É™_ø—jƒÀ$zûW£xVÍÂ( ¡Éi‘+»?0là5wIÙ™¥x¢ÌÁ2Æö1G+8 3ÏÌBç¯ÔÖ‹$RÙÈžcÌáñh=Ç©õ­ˆ`6Ö¨ë¤6¡X£E«g'vNìu95ƒíˆ¹¹•¼¦“—wØàt¬É9Ø44’úf‰âò_[98ê=ÿ ç/ô>G)öEóR ‚[¿|~OÆ~4þ/“OÓ Ú ,P*)Äp&à7úƒ^Ïeû=^xëðx“þKÝ>Þö=ÐÛÇlŒ:çœO½:r“0ÄW…8ÞNÇ‰ßøO}6ÁÌ~L—1yö¥!×'ž¸5Q<¨i¶‘]Xø£P· “ˆ¤r\çaœ§Öµ|ðwâ'Ãã_þÝΉay. ¹xå¶Œsþ©‰}—J£àßK{áˉµ©Ò!bÑÇ…?¿~ó€äãµJs†â¡ZHÞ¹¥kwñ>ÓSI4¿ÞLž^™Ô÷NúVÝ·ÆO%Œtš¥ÝÅ¥£åb{ExØsÆs»î¸>µ·äCp‹t]­`i0|®ÍÐŽ:¨¨¼»´•-Ḏï*Ío)Ê{ƒÐ~t£;dzo€¾5|Iñ/Ь¬ïü1¦j6òÛ™n.)4`¼ŒØP~ñïÅ}@º¤×íw:^£ ‹\W%•Iås·¯cÇzøÓÁ¿Ûöz£Ýè²´71BLæ€óT6p¤rø?Ãô¯f²ñç'[˨j/* ’E¾¶@"RÉ`€tÉÆIQ­¹•l<¥ª>ý›ãÏÄÝ/LGÖukÝ4Ã¥É}¨™ôkwkQÿ,‘ŠŸ›w?2çNqU§ý¥~ XÜG¥¨iúlÉ¢.¡=µÖ€’|»‡È³6N9ãkÁ×ûF_Š>‰mN­¨iz+’Ž™7È»›vOÌxÉÏ5ÝK‹¨­R£k±ÅS¤ù©SI÷<ã^{vñصC¢ÊÂÜ[ ž>nÿ_zÂCÃöªýõÚ]^n vŸËU$ôž„ï|œ|ÝkÛ…ÔQâTø™êÿ î߯þ’%ŒÉ‰,æmσå¬ñ—#׌ñ[Þ3ѧðÇü˜évÖÊÏ?ެníUU˜,ˆÛð;®O ¬/†—rëvâïNþÒK{¨LKÁ£o9~à luÛÜ ýÖþé(ý°l|Iö;þ+›ß)u ¸…bµ~@0õÇ®kÁÆÖöXŽgÙþ‡µ„5%ôj/ÚGÃ-r°O¥øÍ¯`ÒA-´Ê÷F#¡#8­›Ož¾¢¼TæáÌh‹d¤‡,¼7Q×Õù£ƒ}¦ÅàK½95_ø˜j7Ù>Ð6`ã ÷Ôï“æÀÏLÓ´ø!];á—Ù4k%›F[Ý[͈¨- ïús“'|Fªcb·_qÏW„pSwŠùŸ§_ð»|f€<þ*ApÂÇF—åýü`uÅ ñ›áôÐG/öž· rÆe…åѧ *¬¤@¯Ì¨5÷¶µð|öV:MÔ°Y]ßHež@¡fcä7úÂ[‡¿ Ká½bòûþ¿.Íìb³Ñ.Ú(ÿ´$a†#l…X‚%ç<`ýÚÚ<[޵ýß»þ Ï. Àíy}ëüÓ3ñ›á¨…_´K"O;Nr£¸ùzU˜~/ü4£X|_§ë¹]­äUÇ©b¸¿;¬/l“Lðëréž–Uó/$"IäêìIÀ?ï|¾Â©µÜ÷&¥qc¬êʺo„W3¦§$°$$³ó›”qü'kŒñwµ£÷?ó&\ ƒµù¥÷¯ò?DµÿŽ_ |3¢®¥©øÓK–&•b±…î§r݉r£¹rk‰‹ö»ýŸ¤¹Žø‹mg9`;­&æç·Ì‚¾#×f²¹{ù Öõãoá›Ag$ð%ÂÁûÂHpqõÁœV7ˆl<&.|XÒÂóØZ =ìïP%’±_5d}âFì1zÖ ðˆ/|àáko‡ÿ5K4¸ç:߄㽸ó¤vó@”ȧnìíùFâ¾ôýŠôKOþËÂiº¢Á'ˆeT¸²€$÷aTdÌÃï”$ªz(µ~|_\,ž%Õd:$Ú…Ä‘¡ÆUZg`§ÜƒŽ2+ô«ö?]þÊWÖé$fæÝnˆ8Ü‚võǽ|7ãjTÍ”*I´¢í‘ô¼WC“-”£6Õϧ>Õ6áûçÿ¾i>Ûq‘‰ ö"§k­Ël=0x4Ƴ|pÙÏ­~È¥O©ù7ï:Í(ñU¢ÌkHSÔ"’~•¡öÙ‰Çr{Um¥_Ù pm§U5kÈ“œ)À=1šPöm±Ô•EbU¼”vÏoJoÚ‰ÏËÏ~j#àaâ)†9©íZr@ÇÚMZä!—Æ’5\±*£%½‡ZC1RTåOCІt‘Sl¨¹Î?…yýMCåCæ“*É3Çkq9PÏM!q¸ŒãðQƬÜdqž*¼ÉõÝo#ÈÇ %O~œt®[Pø“ð÷IÖ—NÔ¼aáû+ábxÞ:ÐjÆxŠT‰$—›±¥,5|F”âä×dßäv‚IWî³d*Qs)6×ôÉ®VÛÇ»U6¾0ðÜû±·f¢‡?­K¬x»ÂZƒ5_jÞ%Ñlôm6Ñî¯nÍÚ2Å ³œ{VŸX¡%~ea}[$âïè˾'–i~ø¡"†ÖW:EÎä–‹ˆ›ï×óìÿ|ðçöO𦓨êm}¬·…á´[(¥PÉ$íØžÌ kǾ:x÷NñŸ…÷Á¿¦»ðµÒ˜®Éå±·O8›³ËdƒòäW¤x¬ÛÜxVûEÑ´Ë[¶Ï‡ÕKNÒ¼‹¼ÊP¡\Œw$×_gv¢¡‡mYGhþ1ñwŠ|;ýŽ™wa=¶¿%¥õ¬¶M3µœrmÜQ¼ ‚9æ’xãS¾ñö›¯k²ÙøsQ•$Ñ¥“P0½”;H1~ïiëÎsžÝ«…ŸâGˆ&Ò¤ûv»,Y™G—hën² ê>P[œö9¯6Ô¼N·wåç¹YKy!¤y¸%¤$õï^{ÆÉìŽøà»³é9m<§x÷Jñ.«ãm?ûZÓCm.á4ȆhHPÀN2€ýkûÄÿ íülí´­GX³·¼ûDÔ’ÙÚ7üÜœp|ßuâiá²KHâ£cî1bÿÒ¢µÔõ¼0Îè¶RËóB¨>Ž2yïPëÍš,54º³èKÿŠÚÛ^Àºl:?‡ˆ€…[x„ÒG\lmb{m®^jºŒW-©kZ›îеɉfì¸ÛŽ}¾µæò ^i¢]H|ÉŒD°bÈsN¶Óï5x­f·Áqö«ƒœH½‘x'9ëŠÆn]Yqäé)Ôî›Qx¯mwÄæRX—OSÓ5©§jÖZ†ugQ»³ŠîV4ÅþXT"_çîMrš¼?ÙÞÕ5k©k'“ hp Ïž=ø¯>´ÔWðF«#4(Võ—Ëf$ðœí^{Ñ9 Í$ßnõBx´­;ZÔãR0DÎ À8úWEá{‘w.£¨È"<¸Ÿ¡#;ß¹QŸÎ»Ï‚И¿e½á<¸Ì‘HìFc“É=:ðÍ3K»Öh-?J·»k7¼ûAb­Ãycr«ú©b8®ÚØNT¬÷8)bÔå-4G¦ßÆ-´g±½¾˜Êà¬Ú&n[²–8\ûUk¹"‡Nû1¿¸KÈ-¶½½ dŽ'Çü¶ñÛë]&§¤My¤iˆò]Z„VŠñãwš£= n7€W=â "öÇÁ‘\^ÝZ3G —û>¢ ìÇÜn99êNNkÎŽç{z/ƒ$‚;ÌÄÍ$îñÉæãÉ9<èwg­)´»•'ŠIa{²€0Âö ¬m%O é·3Mlá£ÊÅ"s<>•ÒAy,W7&ùc½Þ›‘#ùT˜¹5¥ijVw0‹´z|–·1Ù¥¯ÞòÌ›_ŽùïŸJtE ŲXéÌ·~x2 £gQèyãÞµ£•p±ù«ne’xÙ³s!z 8'8­=-o[k;ÛË8æÁv†ê-ê°n™\{äⲺèo%u©Õ3ÞÁcæ=­ë3>ZCr¿&B œgÓŸk ·d÷ÔÑm˱bqÉãô¬¤¾–ÏTµ¸žkÍÞe´ñ €Up~o©¬”Ö,_RšçN}^¢Ë£c#Üâ1ë¸ñMóiDé5dÔ´¹%‰m.-Öà ,.Æu œý4±jw:d—âòös1µ³ïq—=c,·÷×ö×–zuëÙ,l»o@\±çså@õqcñn£éu˜cë<¡c u*Ç ¸æ•ŠOSfFínØiqÁy3{» ¡Çü´\ýãúRÁm­ù³k×¶v}íq†1³÷Ãà{ Çû‹¯4½–gQ¼²'uÌÚ]»Nª€e¾p›TÉ$ƒéYi-åÉ´‹O›XþÎFa 4Š7ãø”7O©©TÛaÏ©Ôjsba¤¿¤c$’]6¨ ãŒ×•^E ZÛ^ÚÝEkp$ÊÜH¬d-Îõüv6z}ÅÜÓOýœñ¬˜1ƒÊã?xÆ1Ÿ©8ö¬ÝCI¾»[É‘#߈`K]ˆø ¨ëÀú­h¬˜žŠìú/Rñ(þÊÐì/|A ÒǦ©K‹¤)rXŒ€OiÁ2q\¾™ñ7ÃÖ¿t M¤è7ztÖ3O&©kbóÜDé»ps–<öÅkøºÚêËÃ:|º­´¶IäÁä*ù,…0¤È¤ìÇ$zbµ|;¥-Ýß›s`/!+×XJ…ÈEéµ}ñ“\éSÕØNrR fž÷ÁûViâ•&G·œ·Q$ò[ºŠ£qªG¢ØÜ_Ü›9íc²uŒ,a‘ò€]‡;sÎI­ÿØøoÄþ½Òõ]ØkÞÚdº4ׄˆY Ǹ'ŸP:×y¯ü>Ñfѵ©/um_Qµ’¯aṤhÈÚw”dŒc¦qXýj„j¤Ý¾OüŽÈà1U)sF7ù¯óŸ¦ÀËmfÖ©,ÄíV,O$’NM~ xâh¾øt; ßbS³f5ùgwsª7ÆÍzëY—nµö¸~Ýq.àŒq÷v¾ÈÑ>!üVÓ|§ÇgàèummÀ³¸1ò§8-†?ʽZU"«¶ã§¡âcéTž I_½÷ÓÌÙý¢$–ÙoÇB›Fžpëâù4½GTø®iÚ&› åæøn%h˜‰|¸pÌîqÛÞ½—âïįøƒà¶·¡k~ ºÐc»EY/yHÈ`{®9éÉ®Cáψ´Ÿ Ü]júÄ7òÛ´b°ÄÞAê~µ¦.µ9Î)h…•P­C6ÕßMnb|'ñu½Î–tÛ»²³Jsž_n3ÇÐúö¯Wi.¬5&k«Gv¶Dr[åG#€zâ¾S–æ×Dø×{{¢#ÿdÉ|×619„eƒ˜È9,>†¾»7ú~µm§êé¨ßÅ2íY,t2½Æp:Õæb!Ë-6=ÚMÊ)³ÁƒI:ë5ÒÝC6âS,¶¡–Ià úW¤êÆ}ÃòÂ?púåýÌ·Ø.ÛçwwÚfË€ä¨ìµÍé:÷„×~— •ç™"ï™/Ns¼„ ê0+^m=g,¶z>…#$&9ÖÓUiä¾fL>9àsí\^þ¬êNJ:#è+Øtë¯^Ø}ŠÏà ¬Ì­Íäm“(Ä‹´Ÿ,¾veyëOÓ´ý6mÃxÞuKkI,ÿ5¬Q †@ÊoÞOäds_9Ý|aðîµe}{ñ¿SºK}$Ù5³XÛ·Ú$ý§(ƒd¹ÆD{QˆåkÿâgÃh|Gcª'ň®f·ÒMŒèÚL$Ü©ÁóÙP&Aþ¯±’¼ (åò[Ëñ=Yc¹¶‹ûpñ-æ¯yâ ì4Õծ͢Eò „ÒeIÈb1òdc&¼—Xøg¨xÏñê·6ö1ßjzèÓ,!IvÀð@ÅÉçÛ~b™æ¹+o‹š5ƒ,îm¾%YêÓiPKAt4¶ƒWr£y&7À8(AÎsšæWãÞµi?†m­o5›»m3x¶¿Kx8›!ÅÀ &ÅëæEµÏO\é -Xu_y•\LÑ;úN©à]CZñuÕ³I6‘suª­…µ¬l¯Å<ߘuR#’0F@9¨‚5½;Ä^2ñuŽ—µÅ”‚Êͯ¼»©$UH㌎™ã-ÎÜô"–ŒÚ­¥–‰9ñ×ÃÍZ×J‚h¦SáÙ ¢™¾ey<ÙPŒ ÇbC)ëV¬þ,h:†•¦EuñÂQÚÃ. úTZCËorÁJ’Fl¹2í ÛŠé¥ñ»º·©É^TÚK•ßÐò»ÏƒæÖ÷ÅsëzÌ—º}¼{’ÊîYc¸¼“æ0Fè¼ö yn‚»k_€žMW½¸Òg¿™½*˜u4’z>‹ô>µÓ¬§³IfÔŸ¦x!Ä1M&GŸ!œßw9î{Öeä¾dÚj¬e=Š´7%L’HásåqŸ—8ón£ñ×C‹TÖšßǾÔíµ+í¢Š;YPÁ"‚|ÇPÜÄrAA†ç©Í?Qøé£ OÄ·Qø£@]+TÓ’Øi°éSÈâEý 3L àíÀl§ŠæŽ pŠMþ(ì©‹Œê6¢ßÉŸIÜ^hë"êv:Ö—aà —-<t©WRÉž»”Ç"§³µðôžÖN²ÞSÁѬoÌçïŽzžã#Ô ùB×ãΕ«Ûê}âÍÃZ–޶‚ £•šçl„¤£$mˆ€>V‡ÔV¾¯ñÃÃ7~&Ô.¡ñ„® ºÒÑݤ‘gSῊ8$€Ã倨¿áÅ_4l×àϪµ FÖÄx›Jºµ{ssà‹q‹ö‡ðôºF ³­”«y Cey-¶¯Ò[MúµF(­,-¸áŽÖ^¸98Žóö…𞯦êñÝi+Z¶‹7GíˆæÙâÎÐ…F%VÏ ß½ÆqÓõFj¬eßñ=‚óWÓl¬¼Uáý>ñ§²]FÂýfˆ–ŽHò¤•ç9ù¯Lrk3Ě͞‘â¥Þ¯¦YYiÞ!³Õd’ö/ʀơ÷ö $ûsšð‹Ú @ŸKÕà´Ð¬4ë}JËeɼ¾ŠAk:gɯީ ãžõ‘©üdMoN¿Å·T ªÆ‘êzžŸäË$J“E#kq€FÖE8áe)&í÷£W‰Q¦ãw÷3Ô¾Ñk}u%ý…Õ½Þq#MisnÛ£–6bÊê{©}+Ô<¯h‰w¢hqk/câyõs#Águ$dÁTȆ2 M£ž}q_3éÿ|&ú\[õë!@fb¨r¼£…'û£Ú·m~)øoJ‘#µñ&Œ×¢îÞæßM¸>Ú%n:¡QŸ“£gŸQó˜L%_®=4Ôè•x*iµØýð·ÆŠeö§Úx¶}@¾±q¦Ég«B—k >QÝò¹$(É'‚ÝMzN‡ûOx²m:Â=GÂþ»Ônn济8|Ø̉ˆeu9*p Ïq_ŸöŸ¼3w¦ø¤\ÛZkkÉö¸Ú™ˆßoy‘vää`‚=q‹©|Pð›x–üÅâKå²MY5‹YVÔÈþQPd‰H9kŒ« ƒ'õ¯§¥‹Ìihª4½oùÜà­–åU—4©«ú[ò±úT?ji›U°¸›áâ^ŽdÙÚÒbHW¾Ûó.2TsSÅûiü8¶žµŸ ø·E–L€gh‚’;n$~µù{¦ütø|o&µ:ƒê–Zvªº¶‘s‘±>I·`ùÛ0;‰O¼Zô; înÓV½¾‘"ÔžîæÞM k¹g±‘IÅ´Ò¡ä¢å‚zë†q™ÁÛžþ©58{'’MÓ·£æÏÑûOÛà•Õ¢Êfñ4h[nä° žÙB>•çÞ%ý¯Œš¼~ ð¦ŒÖkróëZó$QÕU"#:“Å~{ë—_³Mæ±y{¨x&Æ+甥Åä>™ÁFIbPeq“ÑH*yå¾ðU¼x¼)§ëÖËÉK‘.¯q§íÈÜŒŒŽ CÓžFq]TóœÂ¦œü¿öïürO Ê©^N“—ý¿ÿ~§éŒ?k¯]is'†`ð·‚¢R ¼¼¹óå”wT-…w89è* ÏÛ[S¼ðͽž“á­2ûÄP[›Û+Y®¢¯üóL*ŒžNæîkä/èújÚBt]K¸x Äïœ÷Òç¸Y\àíîAâºFßQ" m@Ü*LÆûF¢–qÆ€ž0¼–=‡jô•LdÕåUü’_Ï-ÑË©»C¿íæßåoÆç[ãŒß×ÛM·aâÍEe‘J°š`®Ê ôÇLv95æbr˜T—½)7Ý»ž¾ˆ*Ð-8A.É[ògÃ}¥ÙʌבˆÎ †ëN±ð(8ÉúÕ©/4 ®öÚ¶–³Hßv…™ã•lqê+Úî¼ãD’s‰´ý®¿¸ŠâŲ‡ß?0Ï·zÃÂßa{·jo°›hJW|r”%WÜdן>‡72“OÑš=8quNNWM5êÿàž(lµMr¾¾·Õô}ê²i‰|›cvaûȘŸ”vÚxúV—Œtß øƒâÅåíÝݶ¯ÙÞ,B3.eñ´%‡T$&åŠôi¼9¯CcqqðûÂѼ2#‹«KˆÜ Þ»¤û ‚½qÔÕ„ñ\C[ñ¦‹¦x,ß‹eâÔî”Fí¬±IæJz©*ÊUzàŽ•èÑÊä©$êë{Ý+të®§›_=„ª¹**Î6³wKÍh¬y÷ÅXÿªŽåã²wf ±[®Õ‚Ê3Èôí_ø™,ìßÂ%-c¿pÒÚòÛéýkí_Œº¥Ò|*+œcŽçRf’âqµP’8 rX×Ä>0¹wÖ´˜%Ë0  ò0Éϧµk¦£R62ËäåJW3串mYvJÏlªY±qØ ÷Ïz ÓÇ> WeÄqF&;€?ÝÏQõ«Àqùo)!ËI·$sµG@Z®ö8šh'–H¤?<&,'œkÏ¹è¸Øu±†KÑ®ô‰6*¡'æIÏjÚKhe±IbÈ`YNÝ£®sÞ±´å2ÚN‹èH÷€êwzVůúE¼‰s®ñ‚\|¨ uÇ@3Å)ÅŽ[ÜvZÝ£ÞÌR)w«íð>cÛMmCâ_=¤I¦]C À7D–Ò™WØöŸZç.m’çP·†IVxÛr2êG¯=ŽzšŸN°‡íŸd†EÙæù“,˜Ï\mVãÖ´µÑÇ9ÚG%ãï^Ûh¿ÙËÖú5°Ó%ŽU’ ­q)]Ï1>„äþ5›­Yϯ~Õ>Ðçxî#:œm´/ðF¦M­ë÷G_Zôߊ·2§Œuˆ’(ö&†ËƒÀAƒØw®ØÂÔ”¼ÎGY{^_#“øsñÄoÁ 7ÃÚƒi{ik$—ò±ä·$ã³ëYú5¶µ{ñÛBƒÃWvúN¨,îä†êW …Ü›Ëdu9ªÿ Q“àŒ¬ƒæ3ÉúWIàƒg}ûVèi(ŒFt{Ï0)Ý’^1Œ×]X¾xêpÓšTæìzÆšóèV×¶Þ$ÖcÕní ó溆3yryP>î;ã’kˆñ®§§G£Ü4:R^¼`Ãs)LX'qøÏÛ5Ûø»MÆíÃ(M!b¹HÒª®v•ä}kɼG¨ˆ¼}g z|ÁíÛ3†mäNóÙaÐW‘Rª»¥ÜÔbßc“ðõ´÷²hðɰ+1!Ï]™<~ªöú–¥añ4Ñ"ÊUþL>ìð1éïSiKv4›žhÞh£x·œF _Lò~µ²]ÜÚÃØIº\¬­+nÿkÚ¹ëJÒ= ÜEkM5V9VöéŒû©V$ÏÌÎ}9©g†FÕíä"(4xAó®HóÆà{ZÓM.ÖKHgx2ÆYd€®² ·a‘u¬vŽä&R$#ÉsÏùÅbª¥-ÍçFN;îßb5[8a]Ìe6Xó=Il`{TÜêúš^ÛA¨$nÀ³Z…ˆ¯¦v‚Iúâ¯kw7Fö1芸XÚÞ4\ êYL˜­ kýsP½¾šÆóiòÌk¹pÌ6€8 î¥t§¥Ï.ÚØ­…kq¨¦-ÅÚL±~òInÂÂAsp<ŸaÒ¬I¢\C©‹KkK›Ô†É{qpL*=N8Çzë|1àjöÅtÏÜ‹KåV{mÒ(¦Ü1ò°Ì‘¨#’PþuéŸõ‰ï¬ã›ÅZl+2”k+{id ·¨xÞ×o½g:‘ŽìÚfõHî¾ ê#ÒþüSm6]7ÌÒ´©/l—ìfa;4L >YC¦F>µò%Þ…¦ ÅÖ§©[E¼ i#%}ºã÷çÃïZèÿ¾#Ø_êz®«£¥µ­É`lŒi‚¸FÀÛÁûÙëé\M¯„¾éWVZ„-üK7Ú$š6’æCòv‘ÁRÞª¹ãœÒ­‹ŒiÁ÷¿æ:8)Ê­Kék~GÊøoT¾°´‡MÐõ»Å1 ­öbw€…ׂG$×KÁÿêË ¾¥ý“§n™|¸.]ÕãÚÀvçwü×Ò:ÇŽü/ðÏÅñøvïKñ7ˆü@ÖÀÃVo=ͦxUa“HÝ$c“Ç °ðÅŠKy?ˆà…¼»óaµY|íb8” (mˆÇÏ=qYÓXª¿Ã†‡DÖ’ýììqšî‹à¿ i¶ú^¹«[Âÿk¶´¶E䮢ÈÌÌ=8⬠W‹ÁkzNs¥Cs§<ñl$Iñ“`‘ŸaŒcƒ^ŒÞ+øð^±ð¯†míõß^ÞÃk<–Š.îšW!ÜܶpqêsÆ{ͽºÉ¦ÝÅ"«,’ÈŽd¯­z´2¨Ôº•K¿.‡—ŠÌ½š‹+.îÏÉ)¼_âOüK½²Ôl¼C£YÏhóßL—~M܈ù&pѶy#…Ï{U¶ý¢|z±ø`isÛ kSMVóÅÖAÿY!lÛÎÒ§~nÕôÇÄ/‚ÞÖ~4ê·Sø‡[°–{D"ÎÊÒº‘Y¶±ÉàŒv®3þ΃q~ñi÷w¯öfXóslGˆ®J™[‹´¢ŸõæzÎi¸§ 8¿™â~Ñ_.´MFÖym™õk¤¹‚ýín"ŽÝ—ê$“8ó1ßiÍtšíñWñ»êšM¶…u%ŧ•qÕ.¤^Ò“‘ævÜ vë^¾>ØÍ{mmqª^I§@´´ÈR3ýÐ1Ò¡×>h~ðÁñÚ‡ÚÒDùU¸È ãÔUË¢ã¤?!SÍÝõŸçþGÏÞ œj¶¡}§ ?m#XÈ9%Ï,çwb{ñ]σÚÚçLÓãDŠ8 ¹gBªÃüÙ>Ä×ëM¡ãÝlYË›y/\ïÉPã8àûשxAià»7ž(<ºÊñ|ì@s€=³’åFR›ž¬Ûšçû3JÖà³6±¬Ûw6ýÃ}zÀ÷¬¹·tp-#ºÚ–ÿ.Ì|§ŒñùÖÅå¹»¾³²…bŠ ®•ƒ#•ùK§'ñ®ï[ðíŠZ¼¯¬Ìye|Ÿ­zYZ·3>k<©ðDøt]¼ŸüI¨NÈ$”{Ù£Üʼíï_¨~ÓL¿¼3q IµôøÛk.=+òà´PxûÅgi’í¢›Èç Çô¯Õ¿N`ø)á·€4¸ñ¸gÓ 5]Øä̤– ù~GÎ?´£ÉìÉâÙVK›h””èZeÖ¼Ïá&“§â6³½‰ÔJ<ÔÜŒÁ@=xÚ½Cö£¾3~Í—¼¤ïÖlƒ|¸ý! p¿È“Æ× ’J>ÈÁÖ`qמ?\ÕbäÝX,•°5/çùgû@øNËAºð¾¿ck®oZÖåbÇ!”²“qÆ»‡:Á¸øCub¡>ÐP+61±²ŽzMXý¤,LŸo% 6—Ü»ƒÓ +•øU~Ñ[ê¶olÌö»¡f“i S¦?XãÖ‰ù%W*V:ÅD›P€K@«’£=O~üT1Èä”°FŒõ'# #§ÐU [S Ðýžò Ô¨F›c^¯Ç^œƒÖ¼g¬©…¹5G¶êÞ,ÔÓ]ºÃÞðTÚ[(òn5䟽•\ƒÍB¾%ñc\£ü;·Œ/!tmø?‰õ­d´H†f (稨™ìâ_’âÏB⼉g8™?Šßq·ÔèÅ|$vÞ2ñ :Õ™Õ4/ O¤y£íée£…˜Gƒ–ˆùÇ^Ù«:¿ŽÎž\ÞŠr’s»,­‚¿wzÕo2Ô‚æXÀÎ9"–?²kEŽ8 *–w‰Q·?ù™¼+ò’xÅ|öÃFðÒx€ÂPj+i¶É9Ày 1»ŸZ嬼eñ"óRÔ"¸Ô<'ÀþZü;+žrÕØ›(6­PM YêšãHžTÅH¤ R–s^JÎe,%$ôˆÅñ·ƒ"¶°ðׇ¬¼H<íTZDðHÙýáõ³Æzš‡þoˆRDV7ð\m¿s4~O˜úòÕm¥…7$C®*ͰÃÅ’GÇ5Íñ2ûbXJ+씵_kq|-1IáßÉâ‹X¼ÔÕ™ ´Þ$ù9Ü>^Ûº÷«¾ñO‹,üC=ÏŠ4íWðä–,Öɤè°Cwçn\)ÜÛYH-Ç8ªÚ„6úž•ud—1¬²ÆÊáÁ®ëEÒ´ÝCÁâÎîÂg›kG$ä•<ýÖ‡ÝaŽÕéåÙjµm)t9q8ZQ…Ôw8x‹â´ß®,|O¦xbMH¦“M‚ËHŽ;–ÌlÇ('Þ\ ž„â³µoüb²ñÅ?ü*Øl"‹-,šTÞk0$.Ül㓚÷#@Óì¼6lc[ß²2ãtŒ]ÉÝ÷‹I÷55ü¶£R{ #Ëygl’0elã#O¿a^Û®Þ·8cÅÚÇÉ? ¼kñ ýüG¦øwNøv ×$žå®´ó&L£Ì&0qˆòxϽ{¼—_¢kko‡’FÌ¢T›H ß¿8íÓ¥sþ†ÚÓö‚ø—fWì³4–ŽFWaŒtoJ÷h¬ã_‘Øo#åB9aRë5ö˜Ýº#Å®]®Ú&иí€ÜÓ¿á&ñ„&[X<9àE.>iE«…ÿc¡üë£BÌm¼œõªo$&lË)çθã›âSÒ‘«ÁÒë]vñ4Ë‹mGÁ¾Ôõ„ÜÖ—p[­µžH,Øä~¢ ¶ñ¯Š ¶kwðGéíÁÌ Ù²ª¦?ýuºâ)@wE\Ž2:VMâœ6ÕØ­?¶±oíþ ü‰X ËùŒÒþ$J·÷Ñjžøc¢r2ñéRLdgîðüjsñ"Yo®R†¯`á. N¢Aƒ´¯Ÿ^+ÇõmSѼG©ýI¤Lñ´‘˜œ(ùsŒäŠôÍ-|èÅË'–ìˆïŒ®Ö*2¸<ñÓð®ú¹Ž!PŒ¹õ~KüŽjxJN³\º/Rßü'Éyt%›áÃK…‰ö±x8$|œ`gŽõk^×´é/mWÂ~ð¼V«\Ӕɻ ¨O/‚¸ÎsíPh–ÈÇRR€•»l z€­tÉd’FΪ=xÉý­ˆJÜß‚ÿ#¡á)7{~/üÎ*ÓÄ“ ~Ìë^ð i¦`·RYiŸ¿àò¾RsÏlÕ¦øƒ©Ïâ›Nð—†cðz]"¤M§ì½ðd»ºàtÅtiËo#yk# ÜÊ£¢úûsY°é>DSÀëŠeÜí=ê–k^É7ø!}R’wKñeM[â÷>*¸O øcòiÐ*EVÕ¾Ñ$„Ù òà ¸#Þ¹éËáíÅŸ†¼1e>£o=¤W.wp#³y® Jng`ÞHל̷Ö>7ñ$w‘_5­ïÄ“K ºRÐùW;¶Ç¼7 â» ?kw–¹6™§ÚYÿk25¼K”Qc#q§ŒägŠôkŸk÷––B{›9-œ4À8]ûFA ƒ“Éôí_wF¢PQGÆVÖmŸbÛjz\Z4HníÈû"R)“'!qÖ¾lý¦4ïø¿öjÒ¡ð$:Æ­«A¨ÂÓÁ£Þµ½Ï—å8>dgnpOÍù×§¿ˆ>#XëZe•–‘¥Ias1E,$â>Q9mÃ88õêk"_øªÇáÅ·ˆüE¥øO±†0ÒÉpÁ yã'×ÔWªÎ5[±´aCsöXÑ|GáïÙqáñÐÖôÍvMvë÷Zæ d¸ò² ´À ÍsÿµßŠ|eáO‚¿ð¹¯iz„ºìPÝÉ¢À.$0˜ÜÀG! vä€3Ízf›ñ ÛZñ­gá»O ø¢;i#e˜Mã ²çåÏ>½*mk^þÍU¼Ö|#oij%XÆÙ¶nf8‚GçDq59ïaÊ„m¹åßµx×öÖõßêšÖ¡-ö¡hóê wòãËUªcäÆN®®=RÂÊ_ˆ~¥,öÐEzÃOÂw¢.¬9lìkw_×,ÛÁ¤~Ô¯í˜ì†â mæÞè>RxÆx$÷×Kci?Š\Æx«s»Lõ2í™¯æ¢Æná°.㞀v'Ÿ¥GqtÉâ–Ý&w"¨V$žùúÔLÖ«»t¡ÙJ–%úxöü[¶º±6` v³™1ó>sŒú{W–¢{leŒkö›™Ýd%€Ø’¾9éZfø™0±ý®ÙA ¦Ñ}}G¿Zé4/‡¾<Ömá¿Ò¼-4:eÜHÐJÓ"€pÜàý? ímþ xÎiȺ]ÊÒ0B™¯Žìž¤€£ùÖ‘¡V[EœÓÅQŠÖHò+¡xÚ,ÒØCSÃB[nz`uÍdB5=<Ã& ³ØaËÄÒ4mµ±ÏÐ~õë~,ð¯ü"wTgTÓõ ˈÛع#f98$ä“X0ZÛë±O©BñùNdû9OÝÉ2•6¥i+Îqš¼O'ørésû^xvâñ™v—;Í&x%ºu¯@ø™s šÿŠå¶Ž‡Oò êû„œgïtÍwWÚOì•k«-ÕÒøÛU¸“»w1»§±âºk_þÍú7…¬¢Ÿá¦©«ÙÆÖ+û1G #cóß)C•EÉ}çž¹•N~W÷0|:×4ðïLÑ$ÕôÕÔ'•ÇÙLêXî$àãڠѼG¢øwö›±¼’ã϶´Óå·htõ7³1RTÉ=9ü+ëøãðÅ£ƒ@ð¯Á©tS9E†Vµ´†-ªÙòÈRXÇzµ{ûMj4Ťü4ðý´ÛÈ­Òƒ´`lBsŸ\SxŠ~ÑIËo˜£F§³qäßÍa¨ê¶>%ºµÖomõý>ÂK6Ñ]Àm]Ê“óíp ©•ç~0žgøzð[Gg·9+ãÆzãÚ½wUñ牾 ÂÞ#Ö´84–,`´† C³Ùpêrä><ãáä²ý´™¥„‡FÆzô÷çTš•fÖÇ}8rRK©Ýø3Â×ÓøËVÓ¬Rµ“÷,ðÚ@àu;³ß «·>ñÝö¥5ͧ…¯ìÕ°yãHˆQÔ›;qê*ßÃoø“E𥟇ìdK=)Gš¯%¸wbÝUI8óךô;ÿøÒæéŦ²a·.xKÛœð:Ò©<¾&ïåcHWÄÃH¥o;œjü,ñ}Ûf;±fQ¾a2&:)€>•f/„þ$KÛGV]&ki$ÛpÏpÅ€à}Õ ¿oYEãÍo_ˆOâ]YìÆLëâ8€¥AèzŒæ½oN𶋦é—7šåÕÏŠïc0ˆîÄö±É× ² Ôyí\󩂣ѷòý¸C‰[¨¯™ó/ƒü©ø×\·“MÒþ˦ÀI]GÊ[{!‘ÎO&O®>†½ÿJømá_ Åhd¹Ôu-FÝþØ–Éd— *£m`—$‘žxÈô¯J6¦ëK…ôßô»˜€vYâòî™AÚW#ú Ç—X¾Ó$°ºÕ¯T^º„±]'L$ƒÉdvŒâ>1‚Xzñêbêͤ´=j8*TÓ“ÔÝŸ^‹OÑíѵk8î µ»®Ój§ÎÜ]¹·Þ¹Ë>™^ëÁÖ«Ü¥ûOå´T{ˆ%ŒNzÈs‚ª1Ï5bçĺ„îêâí5 W¾\XY¤W·¶€®2N0ªØÁ.ØROZt:þ­ªÉ>¥zžÐVÜÃo¢ø]äšò`Çq{›ª‘ÏË?í‘Å:8,EghÇæôEÕÅÑ¢®ßËvemôh4ïüMñÌ ­Nëi¤„{Ë«ìàý¡Œå{öÛÇ5Ú/†õÈ®¬ílïî¼àŒ"ͤZšõÑpHi†DFr‰ógaŒTþé:ÛÚè~{[‰a’êKÃå‰nLXÜd™ß :šëuMva¤dø^ñ´Ø—3Ä·îuò̇ýÑù×ÑaòzPÖ«æk¦¶_#ÀÄæug¥5dúéwó«Zxà×Áßø£ÁZ,×:E¼mhÍß™q{)ýdîK1Ï'¥~z|EøóãßE<ާ6‰¢ÈÝ+H‘¡VSÓÌ—‡oÃhú×°x“öо!~Èß!³TUP#¸± çú×dÀÙNzu.F:ó_^Õt3ö€ð}Κ“Üéoâ[iB] Ê1’9'W韆|os¨Ûk;¼9ª/Ùõ+¥ýÅÔ.Ä<¶Cõ>•Õ(ÁÔkDìpgÊS;»»?Ìóoˆ3HŸõy-¤Uhà„€ùONj¯„ÇÚ,u9H/æ_äpª8£Ä6ÚÏÄOK$7:t–Ïf;»Ü².0Uˆ gó©ü„é—Ø]¨5Ý¿’½*í9]=4Ò³:¯*EpàìËG'oµs~4]CPøu}—7±FdÛ4¢$.X‚ÇîŒgÞ»[Vžù%‰ãE –%—–Çjòÿ‰<_žÖßH·Ö䙨Mmp£Ë ±·;’FŽr9ȹ«Ï–”¥äoF.UO…o-ïàñ£•….åÚ[¾<Œ8äsé]–ƒ=„~Ò–ìkß/1´™Rw¯@>¹¯\|=ªøŽ-báo"IíQËKâ_*"qå¨Ù–À ÅÈ'ŒgŠô];á…ãÓ´÷³ºÑÚÞ€ó\€™ýæá¸œ©Ükæ+æt ¯-­¡”׫¤w<ûÀú?ƒµýWR²ñoˆ|Kà5í^[-^Åã—®: £ž•r á.»£´?ÚãÆwK«ÐËáØ¥xY³·xØä×°Ùü5ð•žö} 7i Hé¨ÌÇ8(¾als×¹æ¯[[xxùÐè1kºµÜc–é§ÚZ‘ü/$j8Ç8MÄçœTáx‚ òPƒ“~LX¾’´ÄUPK½™óU¿ìáá+ ›z?Ú[³iÓj #›ï Îq+yaĈ†F$€ëÛŠöû}Ç‘ŧh_´ÀBÆä[Ú\BðÈ€·ž~aÐñÖ“\ø]áÿ\j3ëúõüÓ:ù.¥*ÚX(å‚ í3¹c“Î+翈?¯,d‘†ƒkâ /ic©®ž’H8Tätezçô ¥X¥)Ç~ÇÌÔÃáªû‘Òî—àz¯Ä‚¾!ø=4t×~jÖbî+—{4RoF £'p:šo…gïÚÃ^ ºÕ?á ðv¥±ˆä{#àÕ@ˆdôâ¼Oі׋giWH Ç”©Ü8Ûq¿žäÔöZ~¯c#[h÷zÔ,&ŠÞöHã @È ²mO¨ÅL±ŠM]~#Ž\ãìü¿àž‡ñKáÇ¿x UÐÛ৉¹P¿j²¾µ¸@ð@óAÁúf¹=á·ü á3ªø»ÂZ†–æHà¶MCÊY'!2À*³ŒV–“{¯[Þ³Å6’Û[2F¶zÍÓGž{¹Vn>ñÉÖJkúá·– KÄúæ¬^BÖ’êz‰¸’0{+6Bì9¥W·c\.T%¥¬ýÌ´ún­¨ë>~›¦=Ý´SíwkcåC ]Ä9±Ç9Æ*ã +Íîif¶½I'¢PÉËt#Ú¯|døå Åsz—‡TlCö†í„Æz‘Šú?ÇN®üCM\Ó­&wÓÞñ¯´Ýš}ò,n¼ŒŠR yyàÖTèóGœê©Šä—!á…‡þ6ÒGÈgÙ²A¸ƒÔw¯ž~*~Õþ0ðÇ¿ø[Mð‡ÃÙôý&ûìÑKug/›.cG ÛxÈÜG½{LJ¥#ÇúC>֘㞵ùÛûNÛ4_¶_Ä…uQæjPJ§=´CùƒXð§û¼ýCLßÞ­Õ—öãñ–ðòxá|’cï9ù>½+Ò¾þÕÞ)ñïí á/ êž ømm¥ê׿Úâ[K|åTŽ6îàróô¯Í&ˆ޵ï_³ŽSö¿øl`oøHcQŸö¢œWÔÓÕØó+ÒQ…ÑúK¨˜ ñÔ*ÌäŒ/Îxǵt¾6³üZ²ãYCG"bEzþ½rÚâIµHe*Z;ÙUO\ Ý+KÁÉñJ' ¬ï•»ÿÖ¯ÌéG—¿ÅúŸI7|3ôýÔ?jÙ|S×¼9/ï‡C§ëSØ]fŽÖeŒ•ØzãšÐ´ˆ$Ìs|<øtjË‘¸onµáŸíÃö¿øƒmT%fߎpöñùœŠÄS»Rƒcü­ dôØt¯ÑåÌÑñ³~âgÖ? ¾7Üøûã&›ácáß‚t˜/´[‹Õ½²g’ExŠ)B@ÇÏ×ô¯WÖu_ éÂ& éícÜþ[Ÿ½ÇŠø÷ö)íƒà}Ò)еH zœÆÃÿA5ï:¬&ghÛnÅ#¸5à瘧‡PœRÖëò=l¦×™6zoü%º+ØÝC åÂHªÿ³±ûUüY§G§±¿¹†âïwË$6l¹9Èàי̤BÅŒ€OQR¢¿Ù‘%G>õó’Îjv_×Ìöþ¥™ð¾»¥ÛÅÓ´Ë42iv²a``àî•zwí“Þ¾Ž_è-nå/ž9 `f88ãµ|“£Ü]AûJêv+´[¾•¡DcÌÜ$`~~¸ç§JöQ6wsÈÏjÚ¾kR<¶KTˆ† ú›:µÜ—šœ7î—û0Y(L``ôÁ'·qY%Æ >½èÝÉ*CqÍ5Ê3NZó*OÚMÍ«Ü*:? ézn³ãë+ RÝ®læß½UÊd•äs^ÿ´7ÂÏøM5 Ûà¿5 «ké­‹ZkqŸ1¢vF Byô€ÜÂÐÒ1†B ÿ€šüãÓ¦Mö¶ñCË ³¬>(ÕÇ å˜4“c¿Þ­}fGF”°òr‚nýR} 3«5V+™¥nç¿OûTüµºÏð‡ÇðÊÇ…þÖˆóœ~½/À>øqñgÃÞ:]Áºÿ†u-KKÅ}KPY|Ã!p»B1sê+òïÆJƃ†\?Þë÷ó_h~É2Fþ'øÃnåA“ÂPHªz’¯7ø×±¥/eëÑ‘ËR¥JsV›·©Õ%Å…¯õ)oå[›hËæ2ÊNãŽ=zïl{kyD¦`ñ) G,CÍqZJEwãR¯–“½s¼â»õàš|“µ~ì|£¯O¿?¯4©£éißœÛDÛlÅRº;Õ¸Oî@pà ÆÞ+= |Ç9ùyüêì$³œp¸É9ÍsEܹܒXwÛ‘ƒLû*´¨U¾]¸+D’Q"r¤ó·ùÕœ4Z[^ÎD6ä®À$ã ݰÖ‰6ô3Õ”^-ñƹŽyªeP ?w`£(Ì:²ÇNø¯“-,¯ü4žw‡Dú6°“«Ü}ªÙ¥·¹f ‘œ/' Oc]ôÚÖ§?Ã)nt½FÌÞw\„óL.GEWqØpy®:™”¹ÓMûèzlV[(þõYžéà-w@ðŸ‚ßÁ6ú¤ZεözÞêI"FÓ:¯Þ# ¹‰5ÑØükðÔþ.ñ…õ]:þÂöû_¸ûµ»Çû. :ïn:F[q r+ã†Z£¯íá]-à¾Öç×5Hb»×5ÀºÓ oôU „VÙϹ'¥zøáâ;ωº†®~øZçE—QÔ!–îk© ’Çó ²Áó<°ñí_A‡u%Í+»œøºyUnœ-w={âžjÞ"ž =rÖæ[9m#KIû(V2.Ó»òÀŸQŒ×ç&¥%Ìš¦Œdû0_µ“µx9BKßœ×Õz•åþŸðãÃZŠ@4½"ë@+†lÝZ yMÃdÉ‚Tc{WÍ"±¼¶Ô4«”¶Žé#˜0XÔ±U*Ã9ôɧЭœ©nŠÁa¥EI½™'’¡YLjë É'*AôÇ~jå” ±Gˆ’^˜ÙËg¾O|U[ßJ×´VvV‘ˆB2ÉŒ«tcÉïYVþ&ŽOÏ–êÐlˆ„T—'vxÒ|?ácge§ÙY@ÿ4‘[Äެz±÷5Ð]KI¾µ¶ôw‰£&>6åq\ô¾®–JüGð•Ì»0ÑÚN÷L¢ó\”¿¼ k4‰¥jZטqþáËÉàžGç[+­-b=¬^­§€Yln ‡XÕmd¹‹B¹g¸šHÀ-”…Àtè {æªA~±ÍmsàŽsºX¤WRVß¾?•~h |/ñÇzݶ…âoè“8[‰í¯4ä°Ywî*Ê79$Gn+ë†ÿ…[ð¶×ÂJ÷6±Owtn¥(%äBNí£¶p=±Zaã^íÉ.R12ô¹gyv±ËþК'‡¬?ejÐhút:³Ùé¶ x"q„JG»®ÐXœ{šüÊ×JMiÊX¼¨ˆíE€+ô³ö£½~ÇÚìjᤓVÓb xhëó#Z¶¿¹»&ßOÔ®#B¼ÎêO|£¯;ß×ág§/êÏOI<®¾×èŽÏá¬ÿ¼j¡¼©µëubÃæ!C8ǧ"¾×µÒô«_êöq(Y/ïQ$Œã&EÜJ“ƒ’Çñ?Â¥’/ÚgÀQÜA5¶5ÀÅfB§ óÍ}{£\-ÇÆMBq&^I.bÜ7̸ Ürk£¬¦üÌs—³K±fIvüHñVâ­¾òÕQv€Ç½#áóy> ÕUåžþF!ÿ‡šòÛf2ÞøŸP—ε0Á< ­é^·ðþ7·ðVé>Ó4¬Uˆã“œ‘]i]]ÝŽõbÉËÉ’2NOÝ=Ç5åÞ8†Î N·ŸÚ·1ÅËzz¡f“aÚ$È8O§|s^ÅvŒk.lj¹óB}ÐF:÷¯Ÿ¾*ëÿð‹øP’+ˆ-"»ClÒ9ÛÁÀ_þ½sfꄹw:²ç¬CŸ`ñ6’—2Ó.#𞣩G3B®²ëék ²aK|¹õ+žIèA®ºVM;Ä÷ºVámxîtØÄp­Ä“ÝÎÛ˜´.…BE €»X°$cŽ|ï ñO‹t›[ÿZ7‚ô€û`†_ô‹×‰”hò¶¨Ø[ÙM}šN¡h-¦h‰2ÚÆCfIÚY$84’1,äû“_?C*«V)T•—ãòÖÈ÷ñ9Í Sr§Ëðùé©ÉI¡.©„ñ|KòJ²fY0XÔƒ¹w̼“‘’¶MN--ôÛ7ðÛÁæŒ,|ôµoÜÂ¥ã,¤ïaò¯9÷5^ú%M9¶Çò‡ùIÆHÿ ÷°ØJT#ËN6üÏšÆãkbgÍRWü¾â¥´Ž-†0Ì2qÒ­ 'ˆY †P;æ¨Y¬ò[͆ò›EcÃsÔVžìD¨A+Á'Ò‘ÇÌÎ._ øzØjs×I{v./­u-1n"~0|¼ÿ«bºOQÎjÖ›eàMJýì£ðn€É6c_3D·¶qÈ`äg=xnÕÐ\GöÉÎßÞCŒçÖ¹½OLYì£Tsiv£ŠáTˆ‚àAÇŠò³ ¢8…Í8¿'¹ïåyì°ÞåH©GÍj %ð’âÚ] GÓZE0ÆNC„éTíÏ¢}ïlW5smðúÚâK#àSs‰dX<,ˆÒêÍG|àãÞ£¹‡TÒ mjúÚûI–5Ž}Rá’0ýÝë·(ÛSœ÷*ñ±µ°ÐÞcæ¥hº]m·È‡'rž«Ón÷ 9¯’©‡žª…G+¿=ý»ÃW¥‹£í £eåªùt¾ï¤Z?…ô­'^†à“ i ʘ2)b %x£¦kÅ:†u}hMâ :Þñ²^¼n¶ì£9ÈXî~>ã`ÔVº­Œš jþ·Ónv)ŠïîŠÊ ?4@²“¹R7Ž@Åp+­I¨êvÖsxrâ÷Y³%Veû=À$çh²Æ†Pž~B+« ®~ìÚK£g&:­ N”]ú¥c³Ódaã]5ÖLu$ð>aÅ|ûW@«ûjø½dAi!ÏîŸüv¾ßÓ¦·m^Æo4„2ÆÉòŸ˜Wɵ®›§Iû]j³ÞêöÚ|²i6ŒÐÍ ¶Fe²9ôö¯†=Úu#æ’ͪAŸÉ " ™Ü:ö€ò¥¯ígðáÓhÿŠš×¡õë^~4ß µ£—ñ¢7ݳ×é^ðÎ? i|kâ;Áâ;'UKfÁ&] ?Û¯©¥£<úÓ¼,~™x°>'xŒ*®F¡# ß…3ÂH>'hÎÇŸ8qž™u©|k2ŠZãrnÙËž t¬]ê>#i2&ﴦܯËÜs_œÖ.`ß÷ÿSÞƒ¾‡ô>uøé µý²âk寂÷\_µÂO+íÍp¾ ¹Ž0îËZÜŽxï“øâ¾Öî~Éâ}Z'´—){(+æ€~ù¯›âzW¡WùÎBí9_°ÉpGQÏaSDèö»‰;Gn¦±ãºûNÖ’ "Ø8ýîr*â4IlQ#“iàýëâ½™ôÊG—ÛI»ö®‰¶2#è’`‘ÉÄ«Ïë^Ã&crÄíøõ¯ólíÿiíZ+ƒq&‘r‹åp<~¢½~I `#?‹bº±pÒËõdQ–²&\t{Ó4èÚeI©gxqÀúVbKKaäÉNµo´ÅaÂÂ¥HårAüëÊÆŽÌÚð0üKðùj½àÜ|©à×ÁR¸Ó?à -’Xä1½>^p0b<ãÕ÷G‡îb_ˆº uL^ F NÜçšø§Å×ú6û{xâ-JÆ8–?NÒÝ ä´(Tãê@À¯³áÙ¨áj7Ñþ‡ÏæÊõcè|Ûñ â—Ç·S»!{¹Y¶vå²E}gû"K»ãgÄ;~¦ãÁ.zôÚÿý•fÛè³¶»¢É.­¬ÝÙx‘n&W²“Qò™äÉÆØÏðž1ëøÕ¯Ù?X´¦³a‘§é7ƒîË< –m’Ä6œýsõÍ}>Ÿû\—+å™H$áï9>€Wæ8šSpPJìúÚRI¹2iäŽÚ“Ì1Æ#$üØ>ÕNÛP¶J‚mKRµÒ˜¨7„£ËŽr‰÷›#ž5ÓÁásQÑVå4„Ò-¶nû^³0óOL­Ó8n¸Þx |¦½CŸ¡ƒTþ؃Oš´‘ªO­ë+æ\È«’'•PK£jŒœ õ2þ¯Q^¯º¿—šRƒ´ugŸéþÖµÛ]éÏ…pïªÀ$ ŸôÎ ŽHä4„cû¦½KžµÓ#ŠK([ÕÅη{«Ü6Íò€ö@Òºïì­1nQœÏ®^¡Ày1Ÿl|£õ5¸°ÝO[‰„Ä0£ñ=Oé_U†ÀaðªÐZžLêׯñhŒ©tû¹-¨<šã^ÚØpä‚:ŸïšÔù¥œÒi’Èw=Úæ2}éÓû¦µ?ЬìIe´Óí˜ã|’,k´z“ŽI§²j…¡žËQƒ<˜dY}HÍt¸Ï±’Tv¾§˜ë>ÑooïnÞ ¼?y'™w=ª¬–÷mÀ̱¸(Ü2Ëœ¾|ñ—Á'ÔòvÕí-‰’ÿE =¬Š{Ëo6>Ã1ǰÍ}ä\@¸´›tc?èó|Éø¢©…´K€Å_G¸Ï$ŒÂçß·çƒ\•°t+«IjiÊÚ«£óC^Ó5Ÿ‡÷¤éú§‰|4²²½í®ëˆ-¢?y±å×'’F8ɧ´¬µ+9-¯&³½Ãr€»@ÉÇLd÷Î1_¤š¯€´ÉõÖÕb†ãEÔd$¾¡£Ècg¼¨>YGûá«ç¿| k³uq.†u vl¶³áÈÑn#ÀÉ3Z•Á=LgqÀùkÀÅär§¬W7ær¬:Ÿ ¬û?óÿ;$k:}Ÿ—w©N¶Î¦H­€l»óøVœ MCÃ÷7 ßÙ6íÁ!vmÿ/ÊÇÞúö5/‹|ã›Ø`¿‡M›ÅÚS4'ZÓm Oj£€—0±…sýÜu®ÖÏS¶»O.UXæ¹íÑ›“Áù;p;‘ŠáŽ6VZœÒÂÔSååÔú÷àf•§XZÞkG¨jWk–R¢ÜIJOåUeŒáÀÜ@µn±éVÈAò¬•B÷%ÎZ½*òÌêrh7W:_‡ômÒ:]+O{u•Ùþó–v$£o#·\ñç~ ÔÒÞ[Û}©ì›í>HO¾î®N+Ÿë »\k k#:ö8íõ«q~|ûdSˆC31ÆÐF==)ñ [P¸V¿¹“N‚4ò’B‡+ýÓ…¯û×UajÐÙ¥ÄïæÝI2HÝIǯ§µpº†³yi®Þ¤Zx–4”àùŠ à{ÑBRøV£Ä8ËV¬JðÜvö(m-í…ªá ã Ï ëšôÈ'’6м§µÏ…UÏÝù@áExv™²[Ê.ô¨Ü€ g`Ù=¾S^“§<Ñʳµæš’û±#1Š0L“ÔÖ“‹êy^zlv’›í‹P²—ÚƒyŒ’Äzàtñ¤µŸÃÐøŠúóVƒP¬yÙo¦Íq5Ëñ´†E¨î#šÈ•î$š&‡SÐm¢aĬç/éØ ô†¾´ñ‡µ„ñ,rÚÁb­‘1`\¶2Ø=x¬a'cOu;½­#âæžºÒ%Ñõµ­Áÿ‡¿<¿ðéX‚GÙÆ8éTò·)]Æÿ?øT3(Â6Œ­òÿ‚xµŸÅk³©m ñlý”¶›iþ™bv†À“FN0OMz[YAã²Ô5={WÓtYŒh¶úŠ'˜ÃŒ¦ÙÂ1êyìÆ~ðŽŸðÓTŸÃö>°Öà·g…n,c•%|`y‰ÃmîvqÞ¾xÓ5ïŽÖ”z.ƒbT‹tqèÞiR1Ôà+duä“MàéÑ’“§wêÿȵŠöñqul½áª>ÏÓÎ¥ØGa£i«oiíŠ ;}£¯víüë`jÞ!™Ù-à·ÓáåÜÛœzøÂ~ÑFK˜Š4£$kºD_ HG@O^zVÇÆO‰øtdñ¡g¨jcs[èæ)eÉÀR°êÛQׯþÉ:m‘mG–Øî€äzqŠáWÀ ´û‰îlô¸.° ’_ìØþ-Ì2G½|½§|@ñïõQ‹ëšlñØËrù¥D¾^8*pN}k›6ú®£yUo ¼åYmw<ä±ÉÇã\–kUÞuéú#Ñx¼Š†¤ŸÜÿ;ŸPê>5øYáÍYÚÝàžYW½€iwíþÛšá¼Gñ–ÂÝ#}3Ú¥ô1±^N±©SÆå ó`ôäבi~Öobæ·.ó%ÕËyQľۺ“í]ĺnŸ>¢IöŠVËIŠ)Q®f`ĶÜÕÓË1 ®y¿›9êq)ªTb¾KôFßìíá9µ?‹zß»iQÚn¶’+¦k™®Œ‡;DŽÄ¢¡…}]ãv_ˤ(Ò5ÝY®"¸4Ë'¹t!’©–Ç>ëâ•øñÀÓ /‡Ú‡­ÙêZ£y‰¹Ê † ‡„çƒÚµü]ão:¸Ò'ñ7„ôs©GXdÒ|My§"+Ÿâ1`¸ r ú=_c†poÞ»Üù<]W_ªr«[edo|pÕuÏü ¹Ò´?xþêúãW¶œÂÞ¹‰DqíÉÜê93^eáÝ;Å:?ƒ ²Ô|ãh.¤½Ê(Ó_©pOµWºÑ¾8Íf#µGFp£Æšœùî—Žj;?ã76ö×¶ZuÕåÈ'¼ÖïÁ·=?Õù„÷f¼œnbÚu%÷\õ0Ù§ÕáÉé¾­i^7ƒãï‡k‹ RMgä±#‡<ǵJ‘¼RIæFc]y­HmgÜÑ©Fà £¡8íUomï"ÔXˆpWÀ9úÖ4ïaÍ£–½S-ÃH#T”(?»è0zÓ¾ÎÒhH¦Q·,F:œVÄܽ»Hñ*¶ÐÕ#®)Œ‹),å~PbÀå‡q] 3dcÛÚ4sÈc/É,¥r[Ð lË$pb®r8áky´²·Ï(¸V^rx•^ky-áP“¹UÈg⯖¹wpY8¡} 0‘šÅÔ¡æÜH¾Z<%±Üõë¤d3ZG Ì‘ù¥r£ ~UŸ¦,­|ÙeÀYñž†‹èJîcÜÚ™a‚Ù(LÜ9õËjÞ¹ O6JgÓ¯¯ØY"P»”Ñî$cîÏ®æêÍÃD±íÛŒþõâÿc½O‡‘Çáûm*ïVMN7uh¡ Ÿœe;½x®\^zn5UÑÝ€ÆV¡UJ“³6/¾"x_Oº‹5K+þÌ󹿷DX׆A“¹fõ ŒgåsR]k^ 5¬òjb/eõ›{†HÛ>[ü͘ã?0!þSÃwøöëAñ5ýÜ÷WžøMw<ò~þy<9#I!븱”’ÙîjšxK[HŒrü>øY!fB4)ldçgó_?ý“…Œ¯­|™õ²Ïq3‡,©'÷MÝÎÖÖ¢æ%2ÉWUSŒsùW›üSð×ÃŒ?SÄ÷Þ9Ôô›ác •å–›¦R±—!•ä\‚ œž˜ê‘£LÄ©ì ‚3Ú¸xtÃmâ…hm“ÌTyh¹èWWxe+u±Ï‹Ã*Î7èy’~Î@)sñ+â0™š²zÝç5Fßàß |Fð|DñUÜzœ7/Θ$ÜñH¯áÁ`ú×Ò#BÔ„$\éŒ-Ÿ”ÉnÜþB¸ïx&âoë§“Fº·Ô#)isi$R\ÂÄeã|m8뎸¯NERR²HÊy3¶ÌôÝw\MÆúž§oîf2ƒîÐûÕ5¬­|O¦]ê2\Eh—¥xâ2²… 9äÕ %·†ÒIãg8 ºLî8ÆOµRûeõºK=ÄvË 67FHÎ?/zð*W”ñ­¯­ÎÈÒQ¤¡åb/ˆžø5ñ⦡â=KÇ>5Ñ5v±†)"²Ò³Gr­óÆNNò p­ðà¬Ò ¸þ)xýbv` hñlN?wšÔÖ¬MƧ«MˆÄö†6tn÷5›(š?ˆ˜ Ãq]ª02˜¯v|EQ+ò¯ÇüÏû*›v»þ¾GCàßüð—ÅÏ ëöß¼S¨ßé:¡½¶·¸ÒUUÝ‘”£m@vísŒsõ®»\Õt‹ÿˆú¹Ó5Ôí$¸g 䘚)æhö·µÉÞ2%ê>àô#¡²Ú[¥Ì͹q*´»‡>Þ•ÇÈ›gS¦júE—4»Í[S“N²·?kŽH¬Ú<¯ð¼… “»¶+ǼkðóáWо4xƒÇIñ+ÅšCê—Ÿj’ÞÏAbrªÆ‘ Æšê5 yظė òcÚø ŸAÛ¥pž´·Öþ+YxnóMÕîµùºÊ÷KmcmFXy’/ï’: Œ×Òå¹R¥ìéÅ6ÿ®ç‘Œ ªMJMèSàwÃ]GÄVÚ€øã]Bö9ĪƒFFg8Į̈™Á}+Ò~|#Òþüm¹ñNŸ­ë¾'Õ/4éím´x4¥GE”£–r0#¨ÆãÒ½ûCø[ö/ ÙÙj~,šöÖ2vÙiL–a¹É×÷¬;rÊïômAÒô„³ƒPÑ´K$˜mßtÏñ7sîrké¨ÓÄý»GÓòüÏ>R ­kË×Eþ‘âÞ ø6žñü$š„òéú„ˆR;x¥[™¾nIa´¢zë^ÓáÿÚé׳êÑÙ%•ܪV]SR¸k‹Â¤ä€îNÅÿd¥oŬhÖ±²ØKg þ+‹‰C;{ã9üêµ0žêÿí’vƒô^‚¶¥B!B¥IÕwœ¬»PC§Äá¬-ŸPº ©ÏÊ>„ÿ죥äËr»ogó@Æ»c€ëø×4¾2Ñó±d›eŒxÏMW+²÷,8>Oÿ^­ó½ ƒ¥ŽÅ~Km¨« `(À§Hä¢í9f /5ßéê¥M®©ÀÎ~ÏÇóªÿðX<Ž#³ÕA*fß¹êzúTªl!w>xý¬¾xûâ~½à}kÁšu‰ôÍ" â¹Ðî®Ö½fPÀ«äSžFxêkœý™~|NðOÇ©|Eâ éÞðùÒgµ»±¶Ô#‘µ £1Ž5 ˆö¹ NFòS_SËãm4|¬—Ñ)è ?­GŒ´Åˆ1†õ»åcÜ?V’‚zÛTrÞ×Ièz*L –ÁÙO%%ʰVr yáñ¾œ»±o¨¾hGøÕx0ðUü0èZ€—[ŽÐÞ]“Ê#¤œ#9ÇR9ät®kÄ>"²ðwƒ¾Õâ_Až—ihñk÷à&pÁ^9ÀDïóäœòF+™ÂtÒŒ}ë}ÿäÿhU¥RRs|·û¿ WÜÏŽ¼Oá½OÄ–~ º»'O‚-%£’5ˆùªþx>P$çoñÏÔ1hº~›§ËiÓåòÏï Ó‘É ;dþ•½á¯Y hv7V’êº}µµË®µ›èüŘª±wv_˜'õ®ƒþo¸®¢Õ^òóQ§[;Ù'ÓÚÚ$”¨f!™rÜ`‘éšðñ‘¯íµM­?¯øsèp5©: •¥-wgœØøgS’Î9 ½ÆhY~{€UÛÇnyÍUÕ/ì¼7£n¢¾Õ®¦ºÚ¶ú>Wœ–#h#¹Ç±âŸ‹ö:ÅçÙ´ “Ãút -­ÔÎduQÂùq8Âõ<¿9þá4kï ›»»Q¯iVW²KçËqª\yFîVùxvûÎ}=(…:’w—܈”éA{»õ¹gSKÿišIÕ„v–È®ßÙÐ7îó¼íó«¸û¾ÕRx [VED ŒmQ]&¥–k ÈÖràaZÞåeSžx+ìkš™ÕÁñÍ99^Ì›+\‰œˆcŒ ðÈÒ_‹>*,2S ¹íòŠö“mæD$7W!_è+›GÓ"ñ§*Áqö˶IŒÄäcƒŠõòj´éVæ›ÒÇáêÖÃ8SZž7áÃÿf˜Ð~Ô˜8÷¯¬m5 ©­áŽD@w’Û÷F+Át_4^#‚U¹b°L®7`gíö¾‹ûJ9¾Ç–·q’}XžÞÕ®>´jÉr˜a(J’|ÇFóË,pË,6ðÍf‘6†è>¾õïŸ5Ý/Nñˆ/uKµÓ¬^ÚR{¸d.ä¨aÆzqô¯œ4ÛÛ[ÛË'‡ß^eò–ÚâéÕdÉÂî qÆ9é_Ji²|Yñ,7'„ô=áwÙ"Aý¡}n·.™Èe·ˆ|‰€ Û‰ÏAÖ¼·R¬*ESZ÷{<=)ÂN¤´]æ‹c j<%U©ÑéÚî¿}ö€ñ?‰'’eæY5I˜¸íÕºô溟 Ù6«ñÚ j[­JÕ÷<Ë4¥·0 ryæ¹Gk |HË`1l“^—àȶøöݶ©&ݸugñ¯NJ”šÓCÓ¡UsÆèàuH_©‹»ûTYÞ40ܺ¹û¹8ö§A>½+üúα&à3æ_HÄÄþ•­­˜ÓŬ…>Qs! >µ>‹åÜ„!¢ù±†ëõúTСS•Y½‹©^ÎéºÍíÖá[Rù®ïaƒÇ$ìAç¯'­t_obñŽ5üVŸg†+“ ÎH“úÔ-V/Ú¬›pv’=ësöp´ ðNk‚ùšµÈz9_é]PÀsk-YŒ±öØöO è6ñüHFÚ µ¸Âª‚9D9úæ»ip]jV©4.aŠÎ6`:sŽ¿UÓ,"›Æ÷jYãh·°(åpv çÔ{t®úþÅ®^–áfš`¢V ÐÐ~»¨Óå¡Ëæÿ3ÎÄTæ­Íä¿#Ísssoe!I4÷œDlP€:dŽ¿Jëî¼7 ø®ÂâQ*…ÁT'%ps×ñ®œØZ4€‘²ÆÅŽA§_î3¦édë]4¢­©Ç9;œˆ|¦jw 6Ó¬LD…s¹ˆã#¸×ÉÂ]Iø‹}åÍÝÆÙÍÌW8eU'¢Ûë_sß·Ë@•Ë’sk†Ôü¸öÞY Žþ•n)”›GÉ^!°yi›dÞÁîrÞí~ø{Oc¢X‡P#ŠÛ÷l0Gs_Àͨ~×¶ñŒÈ©;0 coZýÑ‚Çáû%p|a¸ô©QWÑ`Û L!Š;ByaÆ}im„1ë@°H*¤ž„ö•4–ŽÞsœ GÊ@è{~5R+¤:´%ÕÊ¿C×88ükŸ¤YtµjÇN˨F îÈ<Ê£º êi–eVœgŒ&ݹfëTîÃË&زF â®’÷Q…Oˆ¥w,v¤¤eîsØž{TŸhxô†«‰Pç·z”YFáÐ( ÉSÓÖªÝüÖJƒ¤ßµÑ÷2l¥nì$™ŽY€Û¹Ž~•Ô±ÚÇo”¬Ì å‰?Zšßo“¹c" ‚K}ìúb©êÛ¥Ô#1Ç„ l`©î3UÐHÇ”yZé€hÎÓÎ ]v‘ào/8†.[‘ÍWº]·Ò«ÚFÆ0•Z†(á±2L²?îö°-ƒY(²›ÐÅ7r¶§vfrBÇNöçµq×ð¸í®»×'$“] Ò-ÚvŽÝßs±\ô÷®gT½ŽÈ©gF…Æ=X{}iŸ4¬ܪæré©Ô1Æ Òmü¬€Ç'¾jhu 'ÒæºWe„»Øwè>ƒš‹íÖ·)=¼rŒ‘‚6œn#ù×gÔ/ÐÆx—cÏâæ-9š"øÎHÊ·¼3g³â»su"ÙÚ$BI¥Á]‹œžÄžxö™ãÍZV¸TÑຈD°îÜXdèéÛ8¯AðßÅÝIð”Zæ‡àß,QÜ´^ïvVW€~làd\WæO Q/ø'éØjKÚ®}¿?#ÙD×tNÓ›D¹VÔ$_ôYµ+‰š(só° C‡ óm?.xÍv:æ‰/¯´Óuqi¡i¶©4×÷"[™€bbupÈ9'qGÇŸÞü[¼ÔüI¦h–¢þmÄîdÓò~MÒZ,“ž=:O«|Rø+áøwÃ:Íõæ˜oMxZ] Þ%<³ÝÇÌ‹$ ’£Ž¥87dâõí·ÌöiÊRR|É4¯fõó±èéVZ…´³«¬7Ój×DC§_XÚÈök´±Y ŒïQ×9¬uøqá(tŸja é:>š¯osv·Á‰r¿»ÆN#æ5Ù_éÒÞÝø¯MðÖµ£CâP–þI4ÑKn£‰cˆ¶v¿Þ(Û[cX0øSßü9áDÖu8ôðþ~¬_|’±É ïo–<ÉÁg|¤TrSRqw_&¿/!9ε4¢í¾©þk¹wðþÊÇP°ÓŸN»’æís E¬¡‘S8,ca¸¨ÎKvf¹MSÃ^ Óg’Ç\¿ñV›0!à–†âˆƒ–sÜÌ;Šö fðÒÇâÿk·Qj÷V‘Éiáé`w·6ë¿ †nç1R@Û\aðÕ§Š>\hú°ºw‰­§¸ÔæÖÌK ÜI–.èÇ ›¾þÒý쌚ކ‚”¯n¯möÜáÄJ“Œ#ú/>»YAªx?áÞ¥â­2òOëñÆ-Þ;mšl@HAÆ[pé’#&¯Øx MÒo®µ‰„à“Y×ÈåQ-^žŸäiK3„w§¾_æ}Ÿ/„ô˜íbâxà¨fSbÇiô8GiRþ/ó?Iã×í$ÓÅÚiZ(_iÞª”cÎÓÇ_j´5ˆ^Q·MðÓï}ŠÖrÞ:ó_–¾øÇâ+(ï¬ü\‰«BóIq Ý­¸w·ßÖ3ñ§`AÜ?Z·©þÐ~$—UÒ“Ãútöþ¶%o¡™;D`¯¢ÛËÈ$œ öc^ºI=ÿ¯#Îtè6ÚJÞ§ê ‘¼é1¡hbBNå3r1ÎÇõÜ»´?Fì ³Ç¯Jüìš}&¡¡Yjúæ°ö›Zûwˆy¤c|Ò7zgnIÇqG†h ßJž[é]‘×Ó¢Ÿ•\x.9ë^åðÛ▯⟉i§éš„.³·†Iõ=A&qo¹ã÷C£²¶3è*¡‹Ÿ2O¯õØR¡M&ÒÛúî}^ö,#.ÞÑ˜Ž˜fëÛµHšiYF‡£®î§©éY–Þ!Õˆ´½>H,ÞÔ±[‰[ppBü»{g>½«¿CˆÆAÉ?ZMÚLå£:5UÒ9u´ADÑ3»ï`ôü©ÑÛÜ,’cCÑUHèä~UÑç3‘ü#©©#eÉâ²ç“[›(RìsÖ|t}€oð¡lgG%t] þËd~•Öäy`çø¨È'nÖ#=xëKÚK¹N•4¾™[K…lDϯ=3ô£ÈœDÀÎ8?á^uñKÄz߆$ÒF‡‡,·×rGs& ŽÅŒ0(õϯç¶ßÔ¡›Ì8ã9 Þ¼'Çúo‰ü¬i6þ:ð½¾–‚F0Ω ÖÅy¢•Np8p‡ÐãúÝ*²åÅÛ©Ö²úÔ)©Nî=õ·ß±´|Ggw¬ÜéoýÛ²ý¢üÀ»Ó*)Žzýÿº+?W¼Ó´çÚ&‘o«Ý]XÜZ[®ÍÊò¸VÞ; §ÀÉäU´¹QÒl ºJ­°Xæ1Ùiq¬²H+4…þu= ƒÎI©¤êµð^¿­/Œ|5¢x®ÒüK£hךRÄ-”)ŽHÐdùr8ÎݧiÏ æ¹cÆIRæÒ^#™Óìü=eã(î¼7`¹Ñ`w`ªÎçÍv Å'ˆ5µÓvDÍçÎÂ4^+ÐüCio‚Î]]ãò#·ÚªYËÀèj}rîGø‡¦Úùfb˜‘?xç¥?c)OS7Q(èwâB–1¦Ñ•@1é\Ö®ÅoàŸ±XŽþ•nkÝMíÊ pŠ[sG» Ÿ\ÖF u9´³Ee jKÄîÏ׿°©„=áNz4Ö&êbƒæ =@õÖŸšÝ”ºõL (ÏSîkŽÐMŒ—Ò}¦[‡P%#ùw}O\W¡-µµå‚2dR>òòÀzÜV•Ž.k²¢M$&F•e‰w¤à€w/ úu¯Ò»™ô-乜4#4¡bJQ_š66VðÃu——hÌî`2FÎBöëï_£VrÅ?¢ ˼c§ûQK˜¸»'c´{pé´êw¤c ~•M]-ËC’JñHÙ$Õ¸e^=ÅUUä)+•<*)f<öëaì¤yø‰¶ñ¦¡ Ä=fiKœY]…Ú9ÏÙÈü½ëäÅßÅ[{›iÕÜY@÷‚°àG§Nk_ãÏŒu ß‹·vš^£sok¬².ÅR¤ü¬»‡ÞÎ+Á§×|ˆís!Ù™fv?pzõëÎÌ1üòä„oÿôð™+Œ}¥Go—sé›'Škå…üÅ*9Ûh:K[C½y¨YØZ³ˆí£3~þrN2²Œu5ñL~8Ö4Íj3gw/”¼•v>TžÇ#?—¥}+ ¦£ñá.•ªÞ|FÒ¼7¦~ÌšEï‡å‘D à±’9»c t= mg_ÓVmD¿s_É1Þ,‰tïËö†Ÿ¨%Áó¢žÒpñ°bxÏ÷‡Cï^#âÛˈžgêG‡î7xæu”³Lö¬Îø?»?­|áûEügñσ~1éžðž«›n4hîn?ÐÖFÞÒ:Œ1=Àä{W ü;ñ“ë“C¬Íjtû›»KÙܾÃÂ.9êÃw½x/ÇŸø«ÄŸucDðõæ­gƒiʈ¸ Fb 0Æýk8ÇšŸ»çùš)¨Õ¼¼¿#ɦý¤þ4¤oÿ„£#ï >,úw¬fý¢>44Ï/þñ³ƒÿˆ¬[†XÚÁÿ¾®×tQ,³Œg8‘Ç?6)çà¯Å(ßcøÄ Ì»•L1î#Ô ù#éN¦ÖÇS©EnÒ4î¿hŸŒ±¢mñö _¦ágoÓîWÑ|Kãhºî£âj:´vó˜Ò9"ã`nv(îkä«ß„Ÿ£“Ášú•º˜T²R8澿ýô«¿ ü$ñWöý«é7þ{?•q€å |§ŠÞVŠZšñÕÀÖøg·ß´ô·0gH›-ŽœàgÛŠýòš=*Ô)ÉXÀuÇ×ë_ü‚ ߈^)¿bZUDDgÁÎãüëî[wX  Ä“å†PHJÎ)_C6Ú2æYF# *¶>Vc‘ôÅQ³µ™/ ‘Y€ÞU¸À«vvI!•0¤“•ØyÁªöN [;9b%;Açµrâ!{¦kJFÈK…ÆöHÓ»=ð;UyâœÜ«Å2‘»îŽ2;Ö”…æ‚»¹þÌ™Þ)üȶ2±$ÅoJ*Æ3»d«˜ £åÄ€œô#§ÿ^ Ü³ÆÑ²ì Î}3V&“pXñ“Œ± g,fÙ³bL±õ÷úWE‘•Æ10C¾P™fü±ÐU;™üÛóØ%—9olиˆ\›‰*­õ¬I`”_‘÷HnÜÁÒ‡°+u*Ƭ÷Ët›„E° *½~ÑÏn8ؘ.Üðx⣿I"L¨U†GÊr}€¨¶,WMG+€f,:ßLÖj,§kº„2ˆvŽ\6F8ÛÛ‘éï_9|dñí÷€´]{M-^k»ÆFHT"ª–ÈÀ9¹¦éWvZÙ¹¶ðÅ=KÅ_¾ÇjÏá ,g7×8"'Ã#”ØÄˆøùŽA=¦Ÿ«|_×Òëû3NÓ| ¦jl$ºÔ¼Ox./]0 €mS€ sî |Iá¿i>ã^Ì4ÝvÖPöS©;­fëž91¹>‡¨¯JñwÅ|Yø-§øÄ:eΩ⸙`k[hB=ãÂÀùÜ1U+Þô¯¯‚Œ+¥8s&ûþϨÁãTèJtåË/%ÿ d}_mðcCÕ-‘¼uã{ïÆ™1Z^j‘Egz…‚2«b{æ¶5O…_$ÐâŠÎúËÃS[ÆÞMÞ¬‹9!yÆã*@åNAî+óH~ÏÞ)»Ý0ø}âÔÉ"ˆÆsé™?h'ìíây4‚Ÿð¯<\²BÛ—-ùA=>ùuçíÓXxE(Ãð<‰ýjrnSüWùž1­Kvþ"]î."yeò$•F^!3„8¸þ4Øtù.cE—+$¤…e<–ì¯c¾ø1ñÇÃÒHžñ´­/–%Š9ØnlbÞþد u–ÊâîÞàIkâ;ù²è³ÂYÚ,W!Çÿ èú;kÚüVbæ+TUg2ÜË(ÉcÈàw­ø»MÐ|w¢6—ý¥$©¬ÙL/Q¶+D—³€ç ŒóƒƒYÕ—2±p‹Ý¯^“Î Ü\1kÇekœ1#ÌQ±ºÿ´ {¢èkÁ-¯‚|M¹´"G¸Ô ¿·‰äÛ¶ÞtÜJŽøu~=M{œw•*sß”«ª‘‹ò.…'MÉy“<Š·8'fˆ¤RänôªÄÉ#¶A¯§YYRsÏ"§¡¿SL©éì*u ²Œóß5žäÝÂÆiñïwÚãjv^çëþ¦ô<Ïâ=¤wwºi¬Étÿ9í”Çø×žÚéÑÇ£F»GF9zšõ€M›3|ÞyÇìõ«ƒ‰q¥GÇÍǯ&½|;÷˜ÇÊÕ™”–JžŒ…˜†¯å¾9ó4ïßµ IÚæ?Þ,rEÁ€¨õÍ{D6‘ õ¯?Öô ¼QàïxjÝÂOªø:þÚ"W8sWõ§VܬXi>u©ñ‡Ã´NøGñfLí†(£Á?±p+ç0æ?bqÿ|Šúáü7ºçìõñ [[+[wfžlÍ>Ö‰¼„-µ;±“ÆG9áþ#ÒŸDñ?Øe¸‚á¼°ÛáÎÜœ×ÍÕ„ý”tÛüÏÖpŠ_Zª¯¬­o”Qöì—ñ!ñRø'X´·Õ­md}SDµ¹ác“¥ÄqŸàc¸8>¬Ý³_]x×G´Ó´/ê%…Ž¥qéiÖwµ»¶™Hòd’n ¨çùAðãZŸÃßü%¬Û•[j‘O÷$>Sÿã®!_®–¦©‹#VÔe±°}"鮞8ŒafP þ±”sžÕàfTy’i]ÝP›ÃâåhÉ?Eý[þ<½~|>ƒO±‚ûá—…. Übk=U­¿ÑÑJ‡ØTeâDõÆ:×øûዼ1¥x¯\—áE”Þkµ·†f]JÉ˶<î]HÈvÌ`3žµõf§^ Ô¼âû8,5KÃׯáí[QŠáÚÕígÙºF#™8L õÇCW4-bòÛÞ>ò­uo^Ò/¦Ô-ôë{•Žî{Üð€Ä¥ùA¬Ú£qÜI®,,ñŒ}ëÙêž÷OmôùÜÓS ‡«/uûѲqÚÒ[ÛKÛÊÇäZ[é† {Fž)aš;}FoRi%¹_¼ñ±`ò È=«~÷Êÿ…“¦H!o)ŽöbJ€+ô£_øWðÃâ=–—®j>ÓÆ­©|ÖÚŸ‡6Yê†R2 ÂÏ´Ãd`gm|åâÙ‡Åv¡½ðõý¿ŠôkHÿmpßÙú³ŽàBWf}ò¹çŠö!áæÒ—ºüöù=¿/CÇ©âb›‡¾¼·ù­ÿ5æ|͡릭¥]M{4GtÑ"E@’2yëÅfÉu{'ÄK»#qþ‡¨“ËrNG_N+êY|à¨4«Ý.ûKÔ¼;ªÛMå»ÚÏ,±Ç+) çde¶ØúW!yðo^G¶†Ç_ÐõY/²-ÙlÔÈÉÜîä)Çð1Òº£Œ¤ê=-sΞ¬i-S¶ÿÓÔñ-44—%WgÌ€r¹ïë]ý’«Ø)Šh³™r@Ï  ñXöÞ ñ&‹¬¼WƒO»;Ѝ‰XlÆNOëÅt¶~Õ–d-§’è®DK"bïîÏ=5¥YÂÛœjW;F/_"šÿk‹Yäó&x‘O–б%}°kô~Ú@¾ÑÆ[˜#ç¿Üùþ-n[FžåZÆàåà„?zû¶Ú`ÞÒw)oÎzüµ4Z¾†ÞÎQO™Xèd¹&6(1Ôžk><æb“¬~hÉ8?ˆä¥>K”ŠÓg [¡ªS“dŒùžµêÑZž]gd~y|pð'ˆ|=ñQÕoìn…-ã¼7–èyࣜ©çž9<ׂOq,Ê_–ƒ¸Prµ~šüsðõ‡‰~Íö‰áµ–ÒD‘e”n¶1œgœƒë_›ÿtAàÿ‰£´„ÿ£¬«+õ‘[<údãœp+Ï«„µMôLÛšŸ-Mö8óvϲQçFçÆÑé_Wü&{­7àÆ˜è†kíTËk–dàò~kä´x¦“ËQ·,7¶s‘Ž+퟇¶Eÿf«£'#šë¥Tô±äfUÝGkßÎÚŸBØÞø‘㵓ÃZÍ"í¸[`‡p7SŒ~Óã⌺Y+ãÃ.x9‹ÿÒxZÔî.ž6]Š»Éù‡ÐŠô‘4±é»üÇÜ£þZ(aWK ›Éü›G™,L©«$¾ãÊd=Ï㟱$ bÁÿÈuÍêW~= ëâ/‰b‹qÌm,%qÿ~‰'ØW{w¨ëz¢ýŸG[w…[]¼L#Sè9ùӊÛF‚ßPÝ<·×regÐ(áGÒ‰á)CfßÍÿ™PÅTšÕ%òGƒø‚âG±žâ{}OY–Àù­¨Ýº‰ÙÈ8;TTéòŽOzùƒÅ¾-ñ¶¤ìu _X@·.‰xÚB2kïX4xuíq$_#6Bç˜Ú¼Ÿ]ð •åέlcòn”´Ê£#x>µËYN6åØôp•©ÅûÈù#FñO‰lõu{MkVŠöR¦âH¯ÍÀ%›'TÒø³âiñ(»ºÖ¼`V)XCy%ì»×')èdc¾»×<¤i µK{}Ð@v\F@=þ½è¾ð^ªøiôå¸[IYÕ÷¬{Šƒ\œÕjÇMzô¥~]4òÿ#ä‰|aâ°Zy5ÿY™Ù¢¼c¨8fQ“µ‰Î3펼WS¦øÛÅ—~žì]É"ªªFÌÁÐà`+ž¬Þ™Ç^kÑôo‡e‘d׋É'ö›LÊål gÛ¾+®Õ43£ÍåÛ"Æeí@ÔÔJ‚©¥œ4•8Äíe«[¦ðç‰õ…24—€Hçï\õöÕ‚hîÛ÷“º– ò{×Ì?³ý¤±xZcŧö›3 ÀúWÓÖ 3H jJdd‘ë^õ4’<ʶ¹%Ò«‰$\©Æ#½…W‹(öæHö žŸ…h¼Ð,¥_q 28Ï5ƒ®j0ézDº…Ìnm 2÷ˆöª­ÊÛ o[_Û#œ‡,Š#r?Ï5ZEÆ©•áÁÎ}+Ï-|}á+;8~Õâ’ ñ,‘ÜÖeßÅoC{•Ôå›fI1Àqé\´ë¤‡8;žŸ,„ÞmQÇf¥TfÆ5oòBçùבÝ|eð½µË ¡Öv‚>u€ ûc=ë#PøñáÅùìômnfQŒ¹H‘߯5ª¬›!Ó=ëìy€$ŸÅŽÆ¨¼1‰¦bG\ç&¾{o0ÞLÅ|7y *ýåÀ$œöÅ4þÐ:ZÆ ÚËÌ€íU”dú“žÕnº'Ù3ß®Úe… FàŒ|Ç ÷ªRDÙwC!’NI^H…xä¿ü¶‰q­>±¢À­ÌíbÒ¦=2„‘øŠìôOŠŸµ´QañO‘à¥Ã˜Šœdç~:w¨xºkI2Ö£WHèš)Ö9roRÍÀôZù{ãæ™c¨Üi\Õ ÊÚËtb\’9ÚÎAÎ+Þ5?|2’]¯Æ‡rÚ,¢9¤–ë"'=‰S€xú×ÌG‚|s¯éZ¼>6ð¶·öky¢²[5ÃÏóÛq€B‚yÆ{VkÂQvþ¾ó¢…©«é÷ž3©ÛxlÛÝí+›µicgWÔ&”3ŒaÁf9#×·lR˧Coö™“[¼{{”ʃVwŠtÇGŽðza³ÅhŸ øF /5ýE´¥òÃ4pèÎÍŽs’u¥Óüá ^Cx|G(-î--"#¶KP c¾sšâsµ_—ùíIm/ÏüŽšoÞŠØlÐ#‘ÏçÍ|ñwÃ^ø¥Ÿ¦Ù‹;),c™A%˜1ÉúWÞ¾´|xÂÃìÇ!?¢×ϵ…ž5ð÷ÛtïZEâ;(ˆ¶o"@'^¾S|½3Ðö?wQ“RÕ‘(MÇk!÷§¶R­œŽG¥ìséZšeÍÍÐE0EêÒ¾}k±´Œc>‚èú½Þ‹¯Á¨Y¶$Œò¤ðã¸5ôÆ‹­O{o¥ø¿Ã7¯i¯ÚL²ÄÁ€Û"ÿ{Ÿ¨aüJHï_-ÜÛÉoy4N(åIS‘ŸjÜð爮tF]¹–Êáv\Â{QþÕa^Š©áñ¡S™´¿¾5i¯¦Ñu [} Äè»à¶Kñ^ ;DÄNIN GïkÊ0xú×â¶£s‘iâO ÞË Í£¬çìïµÔ¯Iãoáuî=3œ‚Aý+øñÛOø£áwÑõ››+oiІ»·C±uxj„£'£;[Ø‚g q‹wfºùw=:øXÕQž]=-Õ>ß3è0¸dœWÀ_·÷Ãýë_ ¼cáí)—Ä7¾šO=½œÄʰº‹{–*¾_ʣɟ” FV¾ûûe¯ySõ¬o‹ôï‡ß<&šw‚´ï‰·—¶·ÞÖt[ûÓg Yܨws&ÇÞ ‰T îÎF+àjMFh·Ù4*ùaFu(I%ÖÌþvXb Ó&½?ᯃ§ñ^¡x!¶ 7œd.zW²øB M®"è6z½¦¥°4W°—û:¡mŠ­ÏE`§=vƒÅtÃâΩ¢»¦›àßÎË‚+“ê­•ù³úRÅWç$~ó†…7ÌÑŽŸ®`¤°ˆ©èQ2EG'éí¤À²n?¼˜þUvoÚgZµ¹?nø{c tfML·þËUäý©™‘Bx*ÇpèÏ|F=†¼×¨úq­~‚[|?Ô%mËfcSÀ;+Wþ+´¶½»H R¿)#¦}ý+4~Ô7,ãg‚ô­½Çö‰ÉÿÇ*qûJÏ, ØÀusÿŽÖRÁT]Nˆs=¢iÛü8óÔ«ÆñIýÔN*ÈøDLÂHÞ%wò¹ˆ¿´tÈÌá µÆ8Æ£üþZ±ÿ %?‘¹|rä/ò?Ñà÷‘‰á~ØJ²ÿ´¾Á‰<½øÿ ¨Óª¾ÓûÉö ýÈòψ¿õ¿ ø2mb×U–U·pdŒB*HþkÀn|C­\ÌÏq$®NIh×ü+ß>%üd;ÐãÓ—LmÍUüØ¡˜JÓ±]ÇŒ(ôî~•óüzcËoæœÀ8¯s7v¨Ï/†|þê,ÂA©­µÌ"ú`“Âb,j7©ƒÆpk&]n·$ŽŽz0m¤7Pr=ð«RÙÉojÒüà gŠ¢YÈå—ëÅw&žÇ$¢ã¹úÝðÓÅóøïÆ_õ›ËÍ6ÎÇQÐæ°¹¹¿œAoo{nÈrîÝ1‰@êIÆ+ô%<;o!Ý>?¦uµSúŠühø¨&¿ðIÓY¢>ñi¸‡Éò.¡b¤ƒé#Åk·ñWÇøn8í`ñ¿ˆ^ýÕ¼¨žð•Fyo”ñƯ=)Fm"ªU÷b×cõµ|);ÿ©ñGÃ÷lvñ _ÔS5yfÝ«à™O`ž!‡šüN_Ú ãQ½Žhþ+j±DJ ÛBË‚¹+óEž~µé>ý£~"j2Ziú¿f²Ä­ÉkÉXçŒàðqÏ5´¹’1öÍŸ®+ðëÄŒ}«Â’°è]„íúUû†ž/yØ4I™ºõ˜ þuðo…¾!xÞû÷:’j³%Ë"°Û®hõP:×q¢ø“\ÖïcµÕ­£¶Au¦m ˜9 ƒpT÷Åz š6úr-äöp°(n9'®+ˆÓ´ë-/âUµüº–¤v³ÆÌ&;²ãŽ1ë[ÏBJÊkï0£–â£$Ý)}Ìù·ÆÞµø?ñOĶ÷ÝÅá[è®uØù"9c %º¯%™fv88Àu§xھˤ\ÀKˆa[vp›wa@Î;r?Zý8ø‘q¡xÏöƒÑ¼=¯êvVÞŸÀ·°^j-:Æ‚æI" Ë •ˆã·Qšø+ÇŸ üa x{OŠgÒ¼W¥j6‰®è—+$”{¾Y¶É-ÕA' F+–RR‹MécèpSTëÂi>kþ™xE¾ñ_ů øO¶¹º¼Ô5[{xã·‹Ìš@X…ïµÛ· yúÓñ'^ÖþÙü7ð„µ M¨k¾"·þÕÓ5k”¹Õ^Ý;­¾PA°(\mm¼1àü{û:ü1ñ„|omñ øëV·–²<:Dº,ípÙŠì´‘©+ _“j•p7ä€këÛÏ„:,ÿ,üXžñ XÛ¤ÓhÚ X,¬¼ãó´³2¶ó$ž­ß99ðkb)S¤ú=íoó>—ªâš”5I¥d÷×¥»ÿ‘«yá{Sø­á;]b7RÓ¿´¬¾Ã|ˆð7úÅX:yŸ:7 ‚=GÎ@Öiã_†^6³ðÜŠÞ!ÓΛ¬ÁöÂÖð±MÉ$‹È†R<̰ÎOË׫n~%é>ðgŠmt˜®nnM¦©¡[ÞBñÙÛà¼o,ˆ~P‡* {·oÀÄŸ¼I7¼wáí7LÕ-nâÔN«áýF{øCIsæy¢mÜÅ’S  ŽE|Ìf©;s­v³·«~÷sÛjUìÝ7¦÷WÛdŸ.š~³¼ðæâObßKÃ:±Ô49.ïÎTäÉ’6…ˆ,H9Î2kÙ5«+¿ü^ðšêËTе½‘—p·’Êå-!™ nVWǽy´> Ô`øÓá/\xNêæ-^Å´ïYϪ-ݾšUw$ìwnV?s([n1ó»§ø;Æ:O‚¼Yáý&Õ,J¿kÞ6®»¦Ü2Qe9`„1FÞ õ ‚¬1ui¶§Ì¯k_Oó¾þž§~Dœ9]“½µÿ+mëèXw¶Õ®üY¡x¢×IÑ›CÔž »KËG‚’}¤ ®× Àá]sƒšòïxÁºRÎÇP¿Ð Õsqe¥È{iÜ0Û:MÊ)S‚9è@Á¯x¹ÐnÇĽ+ÄsXG{£¦­‡ˆ šá&•›rŒ‡-– çÅ/€„Žkº†-º*R·›ßï9V[tãtÖÉÝ|×ësçÏÛ\Xj>ñ†­£ÞÁpL×Wzª$öñ¹R É^ÎBãÍz³ñ7þéïÆ›â-ÆP[º:Ee ù¨ýÂ£ÓØtÅr> ð74]#L‡Ã¾WŒtÕ„Gyq£Gæ„iåâ8e'ŒcqǧZóm]µ]Å>Õïb1Yyh‰ ²yXá•ÔÙ ägÒ½Ì".Ÿ×Ìùüç 'IË—[ï¯áÐõ¿þ#xC§‡­£ ‡w)Œ{šô¿†?/¼MáKÛRÖ WK½¨ñ¶7ÆÞ£¹æ¹­+Wø[­kß`Ò×úªaÂLÛ\‚9oé^uãMZëÁßäŸLWÓ ¹]­àA$rƒ‘ŸQí_GIÊ.ý‰­ÊÕºžïñyà¾øEsè’Æ×ö­†€D¨GãÅP½ðö‰â_ Me¬XÚêq#|±\B® ê8æ¼ ÅŸ.üCðÃìö¶ŠnÓU·{•‚`ß$n¬øS†¥zEψmµ…·3YjY´D2ÛÎU$ã¸4ª]Êæ1›Š±çþ"ø á“¥[ßéçDšâéa'÷±Æ\cǰ5î¾ ð¤øiá]YÅäV0lóÊlÀrØÉÆyã5kEÙsà.Ô³M°¡c#no—<’zŸzÕÖ® ÓâÓ´Ñö‹PüðXÛLü`nnˆ¾çšºP“mV¦ˆì¬u›XjX„ Æò Š¥ψL ÷ÇsïɯT±kÍ:ô%¼7vË…8cŠI8èfÒz›§Å­õõ„Hª?sEž”‹¥ÙÁ¤ßìxßú²ì8ôÅaÍs$>`šÖÞ9d\ï AÿJŠk‰#¶„˜c™[#å|\Ô¶îRG;$k¦ßßìî.·á#è3\žyww«^´Rª< …‘9éÈæ½*þåíåŠ K$crzñŒU5B4§IXÚÄÿ¬'¸5£‹kAÅÙêy/Št»Ë ßZ i¦FE cþ!Ò«ØÙÝ>© KIÊŒ(Îp+Ô"µvàÇhƒdå‰éTbŠﯔ‰VFœ}9¨Œl œ>¡fçæº¶‘FHì?úõ…shM…ÊM»/EnA÷¯D¿ %ŽðÙ)"©Uéü…r·—1¬w›—j ‚>•N ìÖ:¯‚wÒ[ø ky‚›éz ÏÞãžçë_LÚ\™coÞ8Â|ÌÀgv+ç/…0E/ôé1Fn§äã'yÂ×¹ÙË,b›£òH?Jé¥tc5}Nžy£MY>S*®HP'Þ¼§â&©~˜4~|o{o—!!X´€`ã¯ZîÞcšAü¥pHÁ®Ç–p?†,â<¬Z1K0'ùRÄkNLº?<Î_†·sèÏeurù8Hf ääðsŠåŸáw‰bZÜiï³!‰*Iž+é(&ËI´;€ì¸PxúÕE2G<Ä#í,v+u'é\¡Šœš>~“áf¹)šîÊXÉ>j²ã·5™{ðËU»b¹²xOMÎ~SŽùé_B[––êFPÈX1LàôÅJšt¦Ôed\1rÅA$v_jÑQHÉͳåyþxƒía†Ú>SŽœúUtø_­I¦\K0]¬ ª–^{{WÖW ÅÐFr,ÁsXr=·Ùeº··ŠNqç¨õÏz§M TvÐùwžþÌøKªêmGö(7«óÈì¯=3_0h[ÏÎë7¾ß)xìÚë¼®Å~…xÞM/þîµµý“Êt·;Ve%¸éÖ¾²[krB#I†“òúן œÔ‘êeø·8µÔñûxõ…ðÞ¡¢‹)íãŸRK“n-‘@+ÓÕæz-ŒË#Û YÇg$~uõïnm%ÑÂÛIÂÒÒ$tA+‚@Å](ûI{ÄâªÅS´Q…âÏ Ey¤5·Ù†ÐŒsŽk–ð?ƒoWÀ¶ò.ñãòƒK4p1 ½‰˜ Aš÷+ˆá»s<ѳEöwÞ?ˆç¶+â„üWà?Wž–즆5+ˆ¤Óu y .ÛcùÊ@ • ä`Žõ¦.›…'(Æç6Õ'Ë'cåå–M­¾Þ2¤q™Xb³d‚)¤w’“Ð&­Ç(’ú8¼1‡æt-Ž ª7vûÒÙãß¶XÉÏbØ=?äTe Yè}q±«­DkH„?%žîå¶kß~|ñ‡Å]Nó[Òo,to é·±Ûj·²÷1Ì(ˆ*Ç~÷Lž¸¯£¾þΟ ¼_û9x?Ä:·‡&¸Ôõ .)î¦]Feß!1Àl{ ûÿözø[࿇¿üE¤øcJ{{ýPKv$¹y‹0ˆ"ãq;@P:W©õ9S‡4µG_1Sv†ŒüøµðãÄŸ ~/êš¿¹24¶·p—òʸÁ”}Öö"¼¸®[äË~×ïçí ð?ÃÞ8øg¨ZkÉöeµGžÃU@7Ù¸Sódÿ èÊx"¿8~|øW¥h:†¥ñfÿQ¿3ŠÖ==m°Ç´o÷Œ¤ Ü½eSNœn̨Ò]òW†|Aw¡_–*óiò‚'€Jã–P{ã¿C_Lè¼Yröõ·‹´oéWy“@ÖMû7(*ÊU‘J’3“»‘ÐW h >ßk§a‚@Ÿm²ÓîXK©Þei®o¦\Š˜aO´Œyão¨øÆöãĺT[Ë­åÕȃJÓä÷ª#m È n+ÇÝëÍyüÁ9Æ4÷}{Æ_F¥8Jrzvîyï„ü}§øXñÄ/ˆ^;ñfÌBé:ÍÌH¨ÀK$@6ùœÁT`ƨüO±øeª~Ï÷Þ8øe7ijÆ_j×nÆ6eR©ÎsÃrã= ­ŸëZÖá«ýg¶¸Ñì´ó刢+;IÐ"ó†‘Û¦sé_/øŠkØzqÕõH£h1wg,߸B£;q€Àük—ØÔªâù¬Óù5Öé¸lÆ•·(Ý?½z6zO…4¿êþÓ¥‡DÕ58¥Œ´3†Sç&NIôõæ²5Ø"·Õ®íuŸ_Û^YÒˆwyd€@;zõŒõ¯«þ ³ÿƒð  -w|‘ȯ/ñõ²ŽÞ0³'t³'˜àŽ™T+^Ö6¡EI+³Ã£]×ÄJÎËSåmn×ÂñZ¬Ï£ÝB\ü¥X¡>ýkÏom4Ò[ìx˜ä,€5z/¼Ñu§ÚÁnŒl±8ävþuçÏmuŽm—8äy¢ºòÚj­%6e¯*u9¾¦ŠU$®Þ¹«k-äi¸ñŒœ´!q ÎäØÀÿ{8ã¥0¯ú ™'ý_jô^trCVFOÆPoŸæ#8 Nóˆ<± žùµX`ü£š•”Œà7ÏŽOµdðŽ…œb—%û[Ž‘ðxÈzY'¹šSP>vg·Tb3Àéóâ¬[þÕ‹rm'ŒÍsâ0t©ÓsKTua3:õj¨IèÍ DºÔ¼Ai§Ã Ó_ÝL°AoåòîÝ=}M}áßÙ»â±â4‹½._ Á >míÌ‹"ÅÐ*á[9cÀôë\Oûy‡Ç/no2FÖ-Ù¹äå«õÏC³Vñ¯ÊLëótÏÍ‘^V+ù¯±×˜â'‡´WSòsöšøcÿ ÿÅš4šd1C£Ïj-gKxöÇö¨,ØÏWžŸÁÖ¾UÉ„ÜqÅ|Ïã¿ O6¤Ú¾nóo ö”Ž}¤z×& 0¥Š^Òy—™eõ0u=œ÷ÜóÚV¶BôáTsn:…©Œ²ÁqÇ5â¼B-¥mÆÒMRŽ9£‚â<:«µ°{Wcá_ ^êÚ­¬÷júlK’I%ÁýáRNÐ;çŒûW¥'¹æFö>ÔørÍ/šYÌÓ;†9À¯\ðþ?á!¶ ËÄ]?ßå¾R<%>ö–ÀÏA^­áàÃÄV pÆæ,þýyý zÈé&M­§ì3u‡ÖëÀÚƒÙƒo#¤2G*£P¯Ì©!@F ƒ‘DZr©*S©ÞÝNÝ5NÍÛw¡Ø°Q§°¥95 ½æ¯}tjë]½å¿SÒ|ñãPø[}¨/Å]OñEµâÇ4)¡G%‘ˆ°\©-¼¸È?{Ïf´tüvÔQ²Õþ+h‘k+dòZ$>Q ʤ²æBÅ0z×oðóÆw§Á‹Í^}N½ð£A¶öK+·Gˆ¯$q© È£' FJƒÅr|Káí3ÆZÞá kbâÞòU¾šûÄÆúÌ·™±GÚn11w«†Ú0¤ôÏ$•yÒŸ/%âÿ–+äÛÙ®Þg\}„*ÁJ3´£«ç“ÕuIjïÞÝ69}Ãßãñf„¾1ø‰áëM:õ¶Í ƒ(]¤€²JĪÅk\ø ãe‡‰õ9o¾3Û.ÌÑÛLJà´JªÑ»b7|Øl/$dc¥lßé:F›ûiø§X°ñ®“.©}ko%§…uÝBâÊKB›’i#ósÂ͵‰y õ&µ~5øÿRø¡ðëÇ‘xzãVÔ´èåŽçþù~Û ÌE2¬ù£(ùÇÊ$$qœS¡‹umÇ•Æ÷P‹³µíoÂæPÄ`•%Í)))Y§9««Ú÷ÓüVùu<ãÆ:޼7­iRk¿´¶›áíP‰?³íµMÒ+›ÉH;‘_h]ß0®ª÷áÿÅ+ÿxnçÃ?õ‹=P"þ]OG´ž ‚ËòKµ#VL0ÃzÖ—Ç] ë[ý‘4ÍC_ÑÖ UµÔ´ùì·ÝIm,r©òÝvÓrnL˜ƒÇ5è>»Ô5O†’ÙG.—i~öþu–—#²j ŽVDÝ„fˆðG³År:ø‡ R\·»OÝ…´ô_ü1Ûõ|2•dÜ­§/½;ëÞïî±âòx{Ä­¡ëñï­|Q|‹q£^¶œ‘–7Ü Dœ²,qÆqÄÕ[i¯¯ØxãHI´{‹'OŒ…͉30@UD“ •b~öp­ï\·Ž/|}©|3‚msÅš 9Óõ ,ï&±Hôô´Šu%$ŒI½–@À(É9ÉÈ鹃ÄxVÖÎOˆñ췛ϔ]x¿-täóç²§ï†8Óžù<×Òà2׊Ãó6¬ßEeòV^LùlÇ7Ž£i].®ï^îïÌúFâiì¼Yuá9ßQ×5=A$Õ|7¬Ì ‹€Ä‘ 4j ò£3 m(y$Ö-ÍŽâφÿoñ…¶µ5›­®£oªX»ÉmpX*¢ÉÊ|Ä qÁ$^q¢ÌÚž¡{7#RÔ-|»°š¥äÙŒõTÀPÇB˜ªmáx.t Kx|SxÖÚLÆKu‚;¹M»»y%‡˜Þ›·8®ïì))&§g»ýzœëLléÝZËôé¯õêuþ ø!à/ÇV×èu]DÌvÑJ·0:'Ì]œ…õ'¯#ñGÄm/Lø«4WÚ*ëöÑ@=ONpwÛ±Éü3œqZKámãÄ:ܾ Ô.®ï!?ÚbïHº•î£ï¿s`¯?pqíQZxwÖr\È5è¤H",RûÂòȰÄ9À-Œ`t5î`aZ’´§Í÷Ãþ'Íf•ðÕÝáK‘üÿá¿Æþ#x‹ÃP|^Öl[J¹³ºŽH wöŽÇ–®2ûØ#š·£ÞÞÍ£$Êðëú[O‚‡÷rýKAõçÑãö¬«z/Ÿl&IÐÀ¹ò×P“·mO£O-§ÀŸÝ[Ë%¼é¨Å±ã8 üµî{4ÕÏ V}%៶|[k–zyR“[ëP´©:²Ê£p÷Í{O¾&xLñ꿉µ}"î4²Ùų4Ìe-’Çå)çšüóÐñú©|Xð•­­•ÖŸªè²C<бÅ$¸ó3Ð/¿sè\¶ñu½ÅôWK­øn(vZ…`sÐçºWÎöž¶Ô4­7J¨¿ûA¢ Y{§Lu¯QÓ~&œŸg#Ì”6NÀ08Æ>µ3u§«hÉF”^—=bÃÄZv¿sa¦êZ~¥o Mpª·–¬H“Ó$} ^¿·Õæ–9#ŽÞ$lqŸ^:W™ê~»²²Y¬‚Ã7“´°PXŽãOZæíå– hã¾),)t‚iÌ0ùÏcÖ©A­ÇîwŒ®ïl¼M¡-ÓKÈSm*†1ž Éô"¸(5ÍL|]Ö4ë-@ϤÃ)XVpŒÁHçëžk#ÇšVœuËI#‘®Q' ¨‡… Ž õ®Nñt-3O6“[AÛÎfYXn Œê+’£—5“±ºåå¹êçQÖ%h/ Vi0î’݆3ÅcjSø†Ú›‹‹¯*#Ipƒ<ñø×‘ÿiYê—éiah×î8Mʇ>‹ÂûdÔ‰g Ôû„‘Ò@M½‘Èzûˆ:®uÜÍR“èKªø‹YûDÈ/š( Ÿ)/´0ì=McK£ëwLî¤4;)X$Ou)C#–Æ<î?v/c¨TÏ­¦™ ŸÜ•_6U¹vþ/p*3 Ås©ZÏ(–b“IX±-Ô·>¸ªU¥{#E‡I^L÷/„zdVÿ 4¸¤›sÇ,…™Žwr#^ι‹Tçy!Š0[†>•äÿ íÌÿ 4ݯ° %èq’XžkÖ €%˜LdðqÖ½'c–×E››‰dµ åmx`kñ¥üZn‡ìÖ³_A ŠòG“üÞØ®™¦œ!B®Ûx,I¼·â>•k¯øwLÒ®f‘"}jÖI#ŠR¾pIìoU$`ŽãŠŒG½JHªvRLäuí7Åú„ w¿>—çªÉ >¬‘îÝÎéÞ¸M{Iñ¦“¥\ê2xŠê{X×Ì+²¥ÂÉvOBxê+Û‡<;qwqk.a.ɸRwÁô¬ð¿Áë£iq>“dÍkpέ匜’p:ä§I5¹r–§•áøºëG[‰õkÕŠEY6·µeB3’w{Ô+¦]ÜGqÇhÐLRXîü@±± ‘ór§#žõßKð×ÃCX[ë]:ß&V‘Ô #q“qéŽsü%е+-,¶›h·IÏBzúzUû/29K»+Xž8¯|gàѸåÌúølú9ü«:[oË{-œZç† í¸¦±ÝIã¡ô¯WðÃÛ³ÃöKQ+Þ‡É\»Ó æº8ü arò'ÙcgþÑyAÊ‚Šn‚µØÓ»²>jñLšM‚®¢šãDK»‹76æ ŒŽ;·¯ÐÀ'¶cÁUÉ·÷oÅ…úÖ±à FÒm´ô’äÎlžòé-ã~1$䀡¯Ñ~ ¥¿×üV¾|‡‹IÓž[=Ä€ª.œçøçÅ~vø•®|5ÖÞÞA5ÌZ–“$é¢Hx2I?½RßR£µFßWÃ:¤žûoÂÍ#XÖ­LšLvÿDÔ‘2´“¶J‘»å(‹ ÐóŠR’±Tòº”é´Ö«sóä]*/–CK¸`ªí"®ù öMP{È ú°üªâ!óà”uó@|ýEGy<-„8—ÍDð¹P7úþèc“ö‘±çå3ýÜ®~¬þÍò%ÏìYàU¥‹DÃJÈË_lü.d]Xˆ€ Ý#Ž}R¾ý“Ï›ûè°,mµ;øqž˜¸lÊ¾Üøq(†çX‰²r"~â½O÷ê¶sjè&Ó²Wò·çÿ"Wõ!À/„šrL–?¾,’…@SÂp*“îz?¥nŸ„b´Ýqð“ÀæXÆGáÈËž \»Šêy‘Éì‘ü©­³¬Q7O(ÏüLmúÿßÊ‘ mˆÚyÃäÿÄÆßÐÿÓJþª›áwÃç+nÿ <$¶ ìŽ |5½9§ô­Fø]à›h%¶øià*áPÂB¯®Ý¹Î4,ÆëaºHþQ,`›?ÿàÿâêîŸ?ÛŠó]é‹B75ü#þû¯êÝ~xVÖUòþø*òÝAذèÖÛÀÆxäc¯¹«?ð®|#$dŸ‡žUi4K}«»øH+úVœZ«MÁ­Íð³ö×Cù¦ð„Ú|ü,z¦’Ì5‹1•¾„ç÷À÷¹à×ìvŸ mâ[HÕ¡Ü׉•VŒûWÜ6ß ü ¥ÒxÁvwP@V9áÑ­Õzç# 98ýkÊþ x£ÂÉkáÝCÑn%‚ê úœ«„ƒ>Y_¼sÁ+Ÿ+‚¡xÅ7s£2Æ[µíÛÛêKgqw¥¹’[iJ).¨¹.Á°6û“Ú£.À<5¤ïÔÛ:ǬmjråIÚß×èYoéÒkn?á+ý”®Ê\•ÉñƒpO”aÆüs°·#=ëwÄ^ Öô{ûTðþ—ðÇÄz|°£-Çü&ñYÄœ¨B•ÀàúWËþ"øËã CÇ³ØøjÊ-'MƒtO¯ÚC:¹×r†€iäŽÜôúÿîàøo¡kZŸ†-õE¹f‹É¼Ó¡¸†Ð¡ÉB†1¿JŽ â»e9^/¿Kÿ_çCxÉ[U×_ëï>×Ò<%¦Yø/ÌÓþ%|+Òµ>mÞŸ©kp¬0®ÒX™P’¸=I®£ÀN¥¯Þ麕–³à;ûY¦\}ƒ[Iåo¾€½ *r:«n¯ÎI¾9[äËxÞÓ-î,mÚ J#y2ŒH™8$) ä`zâ¾àñ'/¾iÞÔ!ð¼ú†™i#Í©[X-ÁÓ ˜ÂÊbb¢H‰n@l˜Ãt B\ŽìÁÁs«GúûÏ¡þ+Á'„¿h†>°¾±Óµ«ý:óYÕZÆÙ.ÒÝšÞ("Fl"ùŽ“6æ!ÎGŠ~о"ŠÓãÃEÓž×TÖ~Û/örÝâÙÌxk‰Ôùpl„ÎZDñÍAã¹>(þØW^$ø{aâ‰iˆu @±†;¸Ë)Ui°*T¢ Ú0zg”øÑâkq®ø~=[@Ötï²ê =ÂÏlæ9·¢Qîï½v4{•½zWÇb°tçæöjöò¾ÖÖÚíÐý­G/äöñ¶÷Ó¦ý~þÇ¡|l>(Ðb}BçÆú–…¯C¢;ßèºSZ3Àµ¹·•ßbåPÿÅÈðŸâ7Š/>Ü]ê¶zl:d¨ÏÃðÀ¡ ‹8§-Ëm Ÿ—hë/…®®tÛ$W)t†ä€Ã÷ÏmË=NIäŠòià£ì% ÑŠ÷¼–ý•ôù[Èö!™Uç…HÖ“Ó}^ÝݵùßÌ—à%α¨|Iñž‘§u¦\éÚåÃIs ´eî LÅKU-´ò+¢ñ®·qûtØ íá¶’}(Å>¯j¸yrŽ"Fc°oŸ$µqžÞyðbçÅž#øçñ;ĺ,š„b¶ñ ·½Žþ /d¹‘Q@†/)”óÿ->c’~QŠOøÛÆÐ~Öúµ¼}§ˆµ-$8]CÙè¥eÙq1ØCO¸˜ö§Ë’JóŽÜF[Q·È£ÌãåÛú}Q†8‚—ïœ"üûÿK£=ö¦]wBðŸ…u( > :N­ –Ww<ÛpèѲϰ$k¿z‘´ä}jo5{öF—D›^¹Ö›U±–Öâ) ™ƒù%ÅÄ(÷d0Æ9^p@<”ý¬uOYþÏZ|pÝi÷׳ÞZEtñZà½W`»HÜZFÖPF2r#…ž+ð×ìímâ- âö½¬j+{Í3Pðì0Øíe%šÑ£l.™ãÍg ¹' ]„—ÕW¶pæMôùöùôûö3LÎ›ÅÆX~~Y%÷íßå×î1þjúÞ­ðžëU¼¹»°Ô GˆZA16öaxòŒuÆvO'qŽ#À:OØÿhïøcÆ:}ž¯áæ½’{M3Q‹ÎŒ´îÒn ýñΞUTާ;öuø?¨xÓú®»ãx~âÊi³í4[–‚0C7ïeŒåeóæ`àŒ`dæXí5ÝcöÔÕ|1sâWL{w†Iµå¶„Ü"ìEò"VMŠªsóÇ Ž¼×­7FýÜ’²×NÞg“JuçªÅ»¾÷õÑŒ<=>ŸûLx>þ{«åðåá:d¢KÇ•¶+ù‘@§;€_›æ$¶Ü ñšôïÚÁƒÀÿ³UÏŽ~Z/†.ÓQ‡QÕí¬]Ò6ÈËr0ijrUÂüÀœñÚXx¿À·¾ŸHÔï¼MqÈÚ|× óf`’dU ÒG“‚»U•ˆ##5ìžømã?cOlüQñ'o5]{mCGÕí¢ŽÏ{FA0:(–\ñ†+íÐ6oøu½ºµímuO¿ü¾Ó|ÔÕ{wZ[¶¿‘KÂn¹©~Å·–º¯¯OãKX¦“OÔu-J[™^WBC0gË)É/@eþΞ0ñ¯‹þêúˆõÝwW¼ˆ+É%×—+¬°¾L,U2¬¬§=:b°~ |$Ð|_ðõ/ \üB’Ûm‰­¯Þ Í2q(! vÆ€¨ €m~wÉÏš|ѵïüwñ ¯ŽçÔíuËK¹’ê×LÔgÒâ•ÀÚÒ0…Õ¤/‚ã<Àõæ½z“ŒéMF«^kô×Sç©Åª‰Êš~¿Ö‡Ðž#ð‚õo_xoKÓàÐõíyÓS’H÷óBÊÌòî;£œä Ã!ºqX× 4Ùôiì›NH©_¹‚„\Õ­[áæŸáïþñ 7:ž±x3§G>§rÒºÂQ¶¡cÕ²@2œñ’qY~%ø®ižµÔ$ðºÏ}âÇT (ˆI¸*0“n™9+×]¼+:xˆÔ¥ÍÌàõm_xø¾p¾Ê¿/,j-wJÞ~w½ºZWm4íDbyXuyX»©5`øIšî+†³‡Î ¸±N¸é^™¦ZÓY‹8$œeAÇ5|Z/á_[,58½‘†&RŽçÝxÊ_ÚLöp±ˆm½+âÚÿLŸ@¼ðÕ¥¤ÒÅa}ÛðgŸÉ%Q#ʘîÃx¹ë^…pÉ$i¸·ÌÀòï^uá»yS@£I T¡ùËg’OqLñž°šRâIå¶u]ÅH G´šQHáQrw:ø‚ÚßBšÑµK[ ‰ËV#-"ž£ØšáOÓ/4ˉbo¶NÒcH ð9ä×ß]¿ˆ|L®é*%WYÛ'’yõê¶ú­†‰á¹ŒÉn4÷Bx/º\g‘ž~•‚•Í’±¯ø£L·ð†Š%ò—3ì”Èvm¼GEqÚ¼\iu¯ }2è 8UrþZŸ^ã×Þ½}¾&—FŽèCn|÷ß$q‚UÌG{n‡à  ØÜiö²Oå)‘¶ãqÇZÆ Õ“q6ç„V¬ð 7HÕ.¬m¬5¯øfÏLO™-­%òž™`¼“ìI¯OÐì|¥Û$Mâm:YKm cóvŠõøB´ˆSYBêÍÖ¿ƒt¸íÄ©aÏÞ xæ¶XG²üI•xµ»ü ö:E¤º8•¢ù\ðz~|Ö^«§ÛÛiR""«ÈeÔ¾¡§èú,qß\ÚÚù+†\ÔçšòOøïGk¹ ‡QŠmñ²ª@ Ž„õ×ËaÏ&]ør#µøU¥|»Ô¡/ÎH95èot²´aH'¸ÏJòÏJ[á™::G[+xü뫊õEÖäû¼gÒ¥Ô±pƒ±Òý©Rá˺^ד|LñŸ…ü+ Øjž'Ö¢ðþš·ª íZròÌUyÎ?…uZ‰ôM(¸Öu]2Áˆ‰5Ê‚Ù3ŠÚÏa.§¬·WöØÅq“û§^e„r§‰àŽkÌžcI/ríýÇdr¹s{ïO¼ú†;MM¼9 Äö³F±ÆL·7eaÝŽ¤ç†Ô¼#m²?ˆ¢¾–|,éVïp\œ`+ŠðíÿÅ臯…É!ΜU“ë×å×ï15=*-;À~ °Òa²Ò/4ÿ ù®»v·SB’͹üùضáòà˜É$ޏxnùn<|±Þé÷7V“È‘Ýèhnn0C¬2–ïÎàsø­/YÁ®Çáia¶û›iäèBÏyfbàÅ+®X/8Ä|äg‘Å\ñ½ö¯ð§ÀòxÒ j­¥ª¹ðÝÄj®€í€Ò1Ây™É|¹$pNn­D¤õ{tÕ[Kž„)ª4¯§^®Îú”õ_øGHð˜“Å6:—ö¾§=ܵē^y_ÂXÉıó— @SÛšùoÅ^Ô|ûFYÏá2Hu­NÄO¡ëÑ˺ËZDŒ^g%XwVÁ\änÇwwñ{Ç?<«ëº—àùô‰mŠxĉ \y²I%‰ç``ëYƒÁþ.þÄÑ´ýKâc\é7­4=;F†k4>GmÀ¸²­ŽƒèPƒMƦíj¯ÉtçeÓÙlíoÌã¯u?ˆúº¯Ä¯ÿih¾6ÓJÅâ}é_b‹Pˆ6âi1Ž£*Cü®9ãƒ]Ìž8þÙ¹_ éwzþ©¤\ÇçßxvÓLY®ôk³‚ w*<¤Cœù/pN+ÒWA7zDrøš÷WRl•Òç[¹-j³9!#bôù['5ÇøÓâ6á Eªx—JÒçû,iöY$Jò ovx‡ó®‡6í§õ¿üŸÙ)ÞnO_Çåÿü“’ß^m:B—6ò®2Q!ÃŽÜ×C.s'€’îXÈšeaèøÜA÷¯«¬¾ø)/?ô¸ŒƒšÒ ½0?õèvŸ~Ÿ Mc®þÐZu³Ï0šW³Ó"c»aj’p>¹¯ºÆÒœÚk¡ñXŠ óhwŸ²*†ý˜µ uçÉñÁÚ#~õÍ})uãx¾è:ö²Þ]Íè´éÖre~Óp_™ì3Ôö¯›<%àož ²úgíeã.§PÐØiVH²¸àº#–íšùë㦵©§Æi4ŸøËÇ;ðþ˜"‘.5ÛeŠIŸæóQ„1 çËÚÄg$õŽ'£CÙË®‡^ëÖu"öÖÖðǰx£ã„|UðßQ¼ÓD·ºü’í›{½=V]6ãvÃ7MûQ´ØÈÈæ¼:Óâ ß‹£áïèVú„|4³uESD(xùO9Ï=kðþ±ªÍ{%׊"¶´ƒí2<6ÑG¶$Ÿï•Ä{æ±F™?мK6• òÉ©t†ì@¤<‘µ!R;»àg²î>õóxl¾•ã Û}]ÏsŠ©^)Î×ÛMÚËážžt}65Ó4ã$·7EgÛå’8›#;ØtEè úŠó-SKÕ´º•ÊExîÑdðJ`Ç=YsÜŠó‹·ÖZݶ‘e¢kºˆlí®™í´g‰²¤ŽY†O#޵áÒøFöX$*QXp²FÀ¨ÏûUáÎ2^Uf»ž´] QæjÒì}Oâ/ø(gí¦ëEc}à÷€Î^ÎY‚J‡FH#‘ŽõJ÷þ !ûC¼Â{[ÏÙ[F˜¤óoÀä2)û)ükâù>êȲHº­¾Ü–l©#žùÏëY‡áõúÜ„:ΚRÌK`àwÆk¦„aijeUF_ ±ö¾£ÿý¡JˆØßx>Áú²Y§g²,»@wϵcËÿý£äòü­sÂvÄ1%ãÒ¥ Ôƒ.ëÐúWÈv¿ï.î!Õ´Ðë;`~y­†øSqϵë:bäã0ÈúgÖ®Q§Ó@‚‚Zê}NŸ·÷íw{"Gã ù³±ºh®[9ùlóÁ®¾ËöÉý¥¯ôgÔŒ<<ÿ3,p>ÛÆH#Îéès‘ëÚ¾:ÒüÚ.¶—éªYÜÏ&(d Äc9Ï{oZ½”ZÛ( Ç¥KÇ\c“^ùàÿÚàŸÂÿ 6‰¬x‹Æð”Ã,_ð‘EaáÉ& xʤF%T!”o ˜ëœu⣠”e(Å}ãÄaÔàšVôGÅ¿µ¯ƒl5‹Ú¶¿áM/L>#k…ºÔQáÙ=Ó°bÝyó(0yàW‚xoÀ¿ØZF›¨øæÈÉý¹4ÿfÓ­ã3Êb…F÷(v— n¤i$âíòõý›4|/🃵 xƒáôž)’êy®b¼Im×÷nvƒÌ`ÃaàñÁW [|mð4Z~‹ñá–±«x†Ì™l/|‹;hí²ÊSË,êz(Ë‘’E`x“À~³ý¡â¾ñ õ¾‹§G9žîâê@¤c‚{“é^¿ñ£á·†üaðŸMÕü!§ë ·Ýý„‹(ê~ñ5š)tÝzHä}À·[åp£q’ ’O5‡ªx3KÚšqñRþ;o…¶Hô×oúE›1+ìŽs2ÄÂDPÄî\ÜFkŠtiÃ:Ò”¹¬ú|]=ÞæôZ´c‡ŒcÊŸ}ø»ÿûJßi¶ÿ³õÛomí¤¸»†Ù&‘€Ìm vPOU“éšÊð7Ç¿†¯ðÿIÓ¢¶ñ%†›9û¦­q£O—q7Ý—l71árØsÀ$ñS|jøgásö}ˆh7:sønàÔ-íí®EÅ‹*[¶NÅ`yàsÀÍ/Ãÿ‹ß|má ¯ƒ¶"Ðïµ]‹ iÛ”·º ¹) 0Ù#.3…9â¼yâèâ0ͪSš‹÷­£—Ug÷~'ÑárºØjñR¯s/vú©]ôw[÷·Èà>kº6£ñ+ÄÚ‡´=G]ŠMeµ·ðý¨±º°*òÈYW%m€î<àVÄ_CãUôúDvï«x<¯´)“cÆ"#ÌXr ò[Œšïþx·á‡ÂK¶ðˆnR¹¸¹ûŸ-ÓEºâBn.D ÞL`ä ¸ê1PüSŸÂš‡í“áËûilµÙAÈ^ ªÛn‰_”‚79äæ»)ã*}c—ØK‘-¾¶ëÛúêrÖË){Iâ#ÎÞ©[Kôïýt,|wø‘ \þÌ_fÒRê]Vqkm4vYÏm¾@‹x±ÌªÒBø“8ïZžø‡a©|2¸·°ÕíuýZ2UŸGŠá ¤ ÁÏlž2zk„ý§Vë^ýš-­žú) µüÃx퇋.ÄŒyË‚TÔšƒ‡„[á¶“¦.4¤ÂÎDûTH«Ì„!ÝÀ8#¸àƒ]¸z”§‡Säi¶ï×ôG—_Zž#ÙÆ¥ÔRi½<üÉÿg¿«jþÎÃ]¹µyÞ{è´û3?Ø2ÌÅ$(p̹ÁTÜF:t¯=ø—â{­CöËžÇE€Ü\dÄlïVí#´–)/&üe…² g íÿgï|9øue{¢jÞ'Óô›+Ëùnt»ûÉÄK|pðx UÒ`“Ä7Ö3Hö×z¤Zl¯§Û9ù3cAêã*R*¿Åv°×ÿck:œ!´´Œj0¯ËÎBääž+ç_ÙãÇZŸƒ|IáK»mNù"²f1XéSN,¢-Ì—ŠV4ç{z^~OJ\ÐÙý›¯ó=ªøÙМmSu§6¶ü¾óÚ¾ øŸRÿ„æãA𶓉d¶‘×T•õE·†ÎEw"H?;.P022FEy~¹âSIý½ou;JC{u<ÚXÅt¢BÊ»ÏÝÄd†ÆA$¶*Ãψ^ ø+ñ_ij\Ý¿ü#ÿÚ k ×÷E¤—äFg.Ç.0à ÎF+´ø«|'ŽÞøŸáÍ_H½ŕī¤ëå½µ»3qè6`<ç¨ãbO‘§OmÿÌð>nhʪôïèzWÅ£ñûBÑomítß3]Á6£u Ÿj ߋgÀùÛnÖ ¿('âŸâk+]Gà÷Å .TùIÓu»|™ÊXç¶TŸJÒÕ>6ü<×>jÿÙëºåý…ªN¶ÙZËuí†âØÌª'‰Iù™ À ô#=wäÒ¼YðWMŸ_¶°Óoot÷Ón¡1±f‹v<±2ÿ Ïðž•É“g2Ü\§^£%m7½Ó½›»Øõ3lš–k–Æלýí­f­t¬·ÿ3kITk>øþù}öÀç±è,-à·vŽé¡‹?iLÀÆ ;u8¥–Úâ)Hd ¤dû+¶»\‡”~jø³ÁósYÕ>Û<ë»ÍUtÉbzÀqX¨ýž.‰Èݨ=þj÷MZ-´‡8æ¹H<5oªø)ôù<ÈÑŸxØp3œ×5:½Í’<Ô¢Ü.@,¼du¯®|yü&QÈWl®™.qŒF¢¼kÅÞ‹ÃÞ°¾²ûláåÎ ž„wäàb½ÃÖÖíâi-ælª?Î{·È0(­$ìʹU°§ñ]ÿüu«éú>Ÿ­‚Ñ@°ßÊËî?1 ¹*qÜUü7ñwÀŸÕ­þ.ü:ñ ®…k"[A?õŸ&þ@³,“Ïål‡…á f$Ž|÷ĤÇàÕ­‹’‘cê¸ÜWžõ‚´Ý_RðUñÒ‘Y‚¹*¼ds÷«æ1ui¼Úœmª[ößä}ŽŒãÃõ%}ÚË]R^zj^ñ­àëÜ'ÃM/Æ:O‡ãV¾-Ô£¼¹gÜ6´lŽÿ»+ýò#‘UlüG£kZ´ÔoZ0± ±˜Œìj=[I±²µŸíWI{6×xóWœdޤÜVtº'›m nµ_ú•«NÁWJ:YómY°?Ò2I(7nv’9Î+ßréO‰¶»ö…¥i–ž,³–ÏQû[#8g<Âvìp;×ÒSMzT»#ó Á^Åx¯’ìdÒ¼6ž×(ѵ=4´¤j¬¶ï€IÏ¿Zõ¯‹~kbšL¿ˆäŸhµ]>ÅÊO…ä Ø1îÜW¡‚ÅQ§Í$Œªá«M®X¶hÁ¨øÓTñœöv>(¶²ÓðLp›U2†î¡ULÖ‘ðg‰f—ÏÖ¼o©ÜÂ-,"CíÀÎ>•óÝõ—Œ|cã8_DÒ¢±¾°”Þ-½Î²°ËðS:n\r~\žk°û?ű°ñ¼‰€çB²;-Ûº äùdèA*µqâ3\$[wlí£–â%n…ílèw)´ÐôÍ*ß]gŸË‘®sÎ>VcŒg9­GDÒ­ pjZÆ¥FàÂ`³i”±p±Æ>b+#ÁþÑ,4ûíVúÒ}Bæ9>Ëuo¨›c–ä2gN{•êš-¶¡>µw}«Á¤êzy1¥˜º¸[8¢\üËh¹o_˜€zW‰ˆÎjóû–Šûßõòg¯C+¥Þi·÷/ëæŽNwXмoáý#I{„‚Ëd:–«:Y[DTpòò[þ “íTbÒñ’x÷Ǿ,Ö¯¥¼Zf†ÂÊßiÞ®Ÿ1Bx9b»;+­Lø¥â {_ ^é %ÁšÛV¼nWPùB¿Ùc.RÙTÊê3’jKÏ èVrhxOGÒíµÑ¨-ÝËꑽÓKÝ­hŒÊ?‡ »æ äçÌ©Ä9rÊO_ë¦Ç¯OB0æI;oÿûœeǬçÓÄV^м?´eäŽlÜÝ]®Fï:RI8 䓎*Ö•à ’ºŸ†uM.Â8a&êyÚ·7ÊÌ÷H>ROšŸ^¼¹¶ñ µ×­5MKIybŽÆ"5–÷áac“<` sº»(þxz û+ëÉ´o_X`Ó4 h Ôp;–YHe ß)*€±*ê˜Ý+Êæª¯hXᎱu¤ëú®«¤éú%è‹n·¬[$zŒñ®sXÆ[;6{{žêïGðÞ‡£XxÏ^×µAbƒ*ÚJ‰‡™ÃÍa½ * rx«2é·P^I¨h—–6óÁhÊm¥°BdsÓÊbwFäg/!8ÈÀ¬íÕ|E¤ëzž»rt¨ô—0ê2ê—®öð©Pw.ÐhÈ?|Br3Á¬Ô£8ÝèÿiE©Z.ëð<¿WÔ-/íµ†Ñ´‹M ¹Ãõ]a¤¬ù+„a¿ˆçªpéz¾£ñ-d›Ä—–,è“ëöš{]«3˜á_Þ8u‚¨ÎztõKÃÞðôÑkZ.¥}â?³Z$7d-´vJçl}T€Í÷AvR< õÖñ~›oáî¼?mmÚ ãFöË +<¼Xú†Æ;ÖXŠþÅFÑnýÿàl?·”¯$­ÛþáMã/ ê_ u hú†¥­i[9ó5 Üņ;’&à!W™hϧwA×ïï|-­jSx•­æÔ@ÖºMÒƒ£îË!l³Jù½ t6º¥¯Ž¼Q£À.|?.¯o ¼ÀéäÙ«q IBüÍÓ(™næ°|q¦xwáÆµeâ[3VÑõEf¸ºÖ4Í< îXGnÛs¸™w¸ÎG% ³å³»ÔîÄ9Ó…ÓVZ_ðç«Ùë? 4}vÓ\ñ†—­Yø[N0Câ sÙå2¬wQGÚ®î$È»qÀ®?TðÚüH¼·Õî¼o¯j-`ZïC´ÒØ5¼!̲n$ÆSç9QÐù«ã½'ö¿Öõ_\]x£@´ñò’VÛí.-.ÜaG m“Êf9L…~Ozò¯þПüKy$m®ë>²{Xã›HЭíU9wŒ"n ÄW~z‚H¯sû.¿´æZ?7t½¯ù1´¹$ôòÑ¿íùŸ Ï¢êˆï[M"ÙËëw0ﺋ`iJ, ¾GC#w¯)Õ¿k¯Y$ ám"fah¢yâµTº;dÙ"#M‚¤•BÖ¿îxäúQ»øqðßÂþ=:ˆ¼Agau~Í¢ZÃkvêìT S˪^µé þ"üЬµ +ïÇa¬_^w=„«bÒ(#ãnB€O"—Wðþ¥â/Wþêž»¹Ól…œ:Å»ÝÃ#¹ÄH„pÄ—;ºœc>mIÔ•£;Å5¿[úëÍÎ)K—§O¸õüÒüð&ïÄrèšUÿˆ.tY·œ>s3(ùÿdqךùbûâ>&¾¸,ô] ÂÙ×$Üά÷Y‘2žY8\m#%ŽF1ǧa­|oñlj ÿ„KÅ,qø“Mœ¹¬&#O‘>\±Ž¤·@½~˜®¢Ãþ øIu• ÷0™ïÑÊÎü¸¹ÁÅ*xHÊ¢•eÌã³ÞÆ?]­NöråSÝ[øÈš—ììÛû?SÓoÿá ü¿"Û2Ã>x wÜO×5í¾]+áω´üJ»»ÐþÝhÐÙC @ÙXOŒ©•†I`¼œd·­r:GÃÉ|Iãõ[8m­Mš‚n®#2nªŠ €JŒdç&§ñjx§X¸¶ð&­›q}uuäÚÜZ3˜[ŒîxÏ(Tx?61‘šìŽ*„Ú„wêe[^1r–Ï©ãmzûâ¿ÅÇÒ¼=p·¾±ºYïµ,îŠâLevÆÕÀÂŽ¹ÉéÏ—]GâËíFæÛVŽkK{7g¹ÔsûµIaµs÷‰ÀçÚ¾•ñ_†#øcû6iK£Ø]I§ÄÃûJî4̪‡‡™‡®{ ò}3P°øâ  e¶ðÕ³$·wò§–×çaûÊ8 ß‘éZakûKò/uhaˆÂ,y¦±µ*É$æYv'îƒØZÚ×ß^ñž•á½ÊÎúçÌ dÂ0†Br¨BŽp&½çUøoáü‚ÌµÃø«ËËÞoC'÷N8 ¸ôŠŒMy8JÖ¹® £8Ô”y­ÐùwûVñÅ¡¥«[O¤®d˜4 ²‚~é=þ¾•µã«{-"Ö/6Æk˜!¤ŽÑü©Hí´Œtô¯kÓ¾ý³áêšoŠ5Tñps5Üp‘½Îî©¡`ô=Ç5áZ†¹â]_OѯÖWœÜ„šWŒÇ:Õw`2w ð©WU¥Fi¨h÷OÔúéÁÐŒ£:m:Šéè×§_¸Ä‡Ãw7¶ÐËoô‚XUŽähCvÎkÿÚ–—j±Ç%øŒ°óíâÊí$ðp?{γቴ‹‹;{IeY%Â4lr>U,9Èç¸SSÕ,o –9ö§šÒÉ=çšõéâT×4OŠÅQ)òÏs€ÿ„wV›ç[›°$\íPÊJwœUˆ´}F…íÚE %°fçÛÒºƒ­ë*ÔqZK˜Á øçÒªÉ&¼·'PÚm/¹‰,7{c¯­t§7Ðà”×Va¶—©$ÈÐ5ÓÌçç ®\…#§¥]µÒ/îµ ™üÝA.07…B±7 VŽ©­êבM$Z\îäPÝ{޵ÖxnM~êKgôXÝÆæšVeÜNþœSäwØŸjí¹É·ƒõ#:»éÜñªßÝõQü?t'[yeº¸vq€.*N?ýUèž$Òu»ë¹-äÔ´›è`a2Û[ VLÿ¼Ù|zZKo_Í}¦Ç§ý‚9.®"„DWfÞ8äþ'=« K’Øß 4÷>Éø{ᯠü0ð§‡ìï-¤ºÔäÓ [[yfs3±—ÊA÷›s°è_ÃÚïƒû‡¤èM6•¤õ½ïo]~z3Ô?jÂ?„VZìð$š¶x£OÌj^WyK#£³Ié×µEá…ñW€g]búãLÖ4ň5·kd xbþXLOÌÀuÃö+Wþ(x‚J+Ãú…ÛêWڂȺ•úžÄ@ÊòE9$n— \®H9É8ηÆÛ¨mc=~ã÷v÷jº¡…·#®ÔH<€kæè¼(ÑÃJ*Q”º®ÚÞN÷óì}íjØz•+b£'FT¯}«n–î|K€)¼(Ny~¾ý*Ü_°ÎŠI-âí@dóµýºô­½Œy¯ÕÛ³Wvgç²'ÀY<†ä¿‚];Ãuš÷WOr•ÁuNŠHê98É&¶|;/À ÜÝM ]M¤µÄEÏö|—ˆ'N»]W†™ŽpFM}ýì;áÀQ¤ñvªÀs€N+¥¶ý‰üÆíYéÕIÖŸ²Vk¹/6Õ;½͵Òe´o6MH zùÚuËdúœ­u:ω>ø‰l—Äe×þÇÁj5;›.1ª»”ð2qßšýKðßì©ðßDÑZÖ[Ö$y‹™ïQ]†„{WP¿³×Ã(@-á› ŽÞBéIÁ6›èOö£I¥Ôü—‹Ç4¿‡ž[‹=;Â72®4³§N¶ŒÀ|Ìc#oN¸À=Mr:¿†þëQOxtí~Ð¥í´íáÛ7zDoÒ"‚3†VCÛ ×ì.¥ð/áÍ®w"øgLoÝÛ S‘Œcé_3ük´²Ó¾$]YÙÇPÚø~ÊÙQ0 €n¨—-=WS§•wfö<ö5І4ÙÝÍöÍeïf7÷컥º—<»±É'êOãQüR7ºíi£øZÇN´¸¾BSíb·ˆ9š4QóßÂ'‘šÒý›.57Ô|]s¤hךŴz¥ÊÏ*\¤j •¾T.xÿ ™Íy§ÆˆºW†¿lëÛ«vÕ|Mâ!cgciáè?ÖZJžE;ŽÈ˜26¶HÅ~f¨U«V’ÕZö¾—ÒÉ«é¦×?qúÕ:\?‡‹ßE{kk;´í®¶½¿Žžñ­§ìù}áýfëLÕRââÚM3T±²k6UFW’)S{sÛ%9 ÆO´x_Á¾ºý-tX4›Khì Kë+‹,Eqms  2á—ŽwÁ² ãß>/ê>%øÓÝx\ÒEÓªNL*Äåàà Q…ÆyÿÂ_ˆzÿ‰ÿj;=; xnks¡âN¹¼™wh•°€) —9,1Þµÿj»Ÿh¾5ðÔÿð‘]ëÚÍÀ—ìÄ Š ¾ÕDƒ’ *: ­]jU.©k­µó×±ÍC\=I{;«ï§—Ì÷Íoំ&øa$¾ °Ó|5­8ØÝK`¿%ì ¿4Sþ³UÏÌœ3ÇþÆ‘ _ñþ„æÒ1‚V€´ÉÊÎ¥±†#ŒÒ¯øoÁž3ðÏìu?Æ747r u;=BÍm^Ú']¬ÖòÄ»•œ”àò:×Ê¿¼ÄޝáÏø“Å?Øv³› ;MVkF’e<Í#FÁŒ‡$–Ï9é\ð¤¥F¬jUºK}ÞšúéØÞSš•%vm­ôZþ3еÏYøwþ 9}o%˜ÔtË­×e²Dìñ@ñ ?ÄJý*ÕøÙá ]7…õoYÅe¡ÛkÞOh¿2ù’e íè'ž¹Ç­pßü®ø öËðÎkâûíFòM6(-üGª$ð[#ÈÌ+´K*+¸à°9bO_OøßðÏÆì¯¨[xŽ?ØosirºzY^i·ÁI³ $íÜ¥C(åó²œ%RŒ£Wunªÿט½hBª•-µ{;^GÒzdÚ^¿àí6ÞgÓ®®E™HVFBñ]¢@>òŒðMUð.£ øĶš­}Ú-uÈ ’ÕHa‹…`7t ëÅyÇìÿðïáZÛK¥OkãA~|AmÔã¸æQÏ#å*~R§n6ñ^•ðWLѼûPxIÔ-Šxrùnc4>k,²9ÏvbXt ñqXJT+ÂR¨í~Ö_žÇ¿Ìêb°Õa Jöïw·kDWV¶šý”––…®°­Ô¥ ™­‹Aá²EYš@[û«mJÞ€ÌÖƒ0‚O,JeI÷ Z÷?ø ÷öVz—‡žcd%Ékp<¬ÿ¨¸ë¸;W…ßxS_Ó(x§ÇWñ¾F¦–*½ÒI¥ÜTç Ü kÁ០ë¾)ò¬t¸Ð’æ6´µÕœ´±`–a×'9ô­ ø]ÓT¼¿C¨kSÜ*¨ù¢™ðysÁã¡ë^gÿÂày¤²ûñÇoæ[–S奊’8?ZᣘT•g–;±~4—Åu÷ê^»Õ¼wkâ¯ê‹fÓb1h±jËT;h¡ÙÃY76GaÅbkÖöz÷Äf[BëNðÕµ´-*ÛÎÞJ†m†Ç dãçÖ½çÂëëm¬^ÞXhHc9³¸‹Ì¶%Üì¿{Íã  î9ŒX²Öôx.$±¼³ºÐ/–2'¹ž,Z0_ÝÉ·q#å8ëŒñ_/ÚÎëZhÐîÕ´‘éÊ9Èr¿l.W¦+zçÃxƒN[ÏS²¸‡&T.Äg$!%ù¸û­ß¥r·ú>·¦ê Iag»ûN¯ }¦(œú“€˜îÄmïE,k¨šW—áøÿ’0­€§M©NÑ·Ïðÿ6?[¾ø}¯XÚksC-ìPH·1Ï.ž\ã;]A zôaϸ®kBÓõè¼g=ä|Þ%Ó® ,¦Û¨Pä¨q½qŽ0½ ÜzUôÒ|/'ŽLââ]SƘÚÞ«Ï2PÈ(‰ÏP“Ï5ÕOâ?ˆžðܲj^ÓtG.ÄJÅÚK<Ñd¸Q¾HìŠê„§¹,Ûîÿ/ëäyµTg'ϲì¿=þãcûÃWVö—Z„–S#w‚$L+f7åþD=Tà=kÍï —Â^":g…ç¾þÅy‡Ú´ë©|æ³Ißó¹$‚U‰Uå:Z–££ëÇqâ è|Oe4‹—hã•uDæhXu T5rz•ìÚf“vö–pÜhÄÂ-¿µnJM A°ÐÄÀprU~gÏç‹§Fº—<ê|º}æ•+á¥KÙS£¯Ykø%úèvÑ´_øâ{OPÓåºHƒ.îxnP±WDˆàHÞ¤á~aÁ¯Gñg…~éº$S!ŸIÕ­ójS µB@6Ñ Å*¹DùGB3\V˜|)7†lLq fºx¶ZÝ!·؆@m_kù¤àæSÆ3\¿ˆ¼i£êWÚž‘w¥ø…¯^cum©‰ÿÖ^L€ÃlTŽ%ÝÇšè­'tœù~G‚m¾NoŸõù™PÁã›}Fo€Õ´HeXãH§ŽÛPŸqÁy!8,Ìå˜nƒ€oÅâísđܸSÂz=¦“`Ó=¶¨'$µÖÓ‚¨2\!;†ç¯ZÑð‡ˆ…æ¢mu=&ËÆZÌqEp·6štϧ£•ãHI1FAó$lüÜg®5ׄ5o‰ú•ýì¾5Ó.c3KhžK’¿4H·1ÿ®A»iH²b¬:ÕNšq|ªÏ¿BãYFkÝv¾¦dÿ -¬õIu+m~_x…!TP# l¨ Œ[©ò£ì<ÆÝ tâ»ÿ éwMk¿Aâ é&¹]Cmld·YÈ#ËI£lòÄ’Î\øwÅ:5þ©­3è–>r³¨Nm®ŒÒ0°© #pg;‹À£ÂúÆ­7Ĥѵ7ðÕý ¶þÕÔšEÒ®JU”ý鮀ÈÀtVÉ8ó冔éµ*¼Öþ¿­õ„++Qå¿õ³ßæÏTÑ5Kí3Ä:ž‚Ú-ÆŸ¦[¬shý‚ u¸ØmüÅÈF 8P7•5çŸô}Sà d]{A‹WÔ¼FE•ëè²Û=±“$)yˆbÝ2Á=äz¿„¼#¥ÜßZxêøšú€³j÷mÃJ (X­ˆò£êĶÝÌ6å˜W‰|{ñí¶“à­"ÿÄžÕµK»ÍGìpëvê‚ÊÚ 4wP“¹$‘3‚€©8ÁóᥭBÕß[ÝmÙië×ÐéÄBo )Tv]-g¿}ÿCó#Ç:e†“¯½ž“á(4˜Ý¶Æn/^òXuBìJ‚?Ù8ô®Hº¿maí/g™Nm&ö¯voØ^ø‹Ä~iµÝ>gsyáøï£–"nU¶¾ €—'°æ²éfI溻±5 n»Ž5åÜ}Ä÷ÜF~ŸZýŠS|¯Sã188ššÐµ¦i6—0ß´‘Ê5¡/4M)o) ãï]­†•i ´e Gr:ûW£jÒêÜêˆÁ.ÖÙ’é1Ôdnlzé]Æ›¬+¨€ Iínx×èk¯ÙEž,§5£fŽ»i~¿H#¯”x úWŠx×I.±¢Ÿ,*Íb$;ŸCž¿­{ÝêÇ.ƒ3\\,6¸Iï<öP:“\GÅ]´kBk+[/´Í¦.Én YdŽ<ú2ÇÓ ©FÓ±¤&ùn{¿‡ü/çìõ:9u?^ íl–1ˆw…T'訧è+ësáÕðÂMÚ°R\)’;øìzœóÍyoÃ{Q½ý¡#_x[W¶ñ‹b.—¢h²ÞR»<æ0a*Ü–àê?#¿1Úß»m>)•DD¼o Nw·\úb£ ŒªýÛèS†£ÏÍútM{ÀQü4¾°ðõÄŸÚz\j·¶—pÉownOñ42€ÛqüxÅr¾øWyãVãâ‹­uK? )Û¤éJÍ·‘ÿÏĤÊ„ôúŸAGÅu…¿í ¥ZÙè÷>5Ô,XÜNËt¶±I!ù¼¹§<ˆ“v úGYø¡#|<û§ác×Óì‹ÈòƨQâܦ3Ð7ˆ ʼ%A:”5rïÓúôÐïÀ×£ˆ’§‰²QéßúíÔøŸâ-Ÿ‰tÙu/x~]OSðÖ§-¥œ÷+XÈ[DÇ%•Éû®HÈãŠô»‚Z7€gûI5ÍL¼Õ’ØKyw Ì›Èù”?T ŒW·ü>ð¤íñ*ï_ñZlrÛÖÐC0³í˜|µëœäŸjâݾ³âý7Ãs2Ke;‡½!ÇÍ´±Ôäò}‡4žcYÆ4¢÷ÕµÔåÄáhÆs©(í¢O¡ó/Á¨üIáß_ø·Eø}/í­¢û|÷˶FäÇo¼òÆæÂž2Úìþ%üPÑü›+ @¶Õ¼ù5 'Xݶ/ÉùÙ2T猆ê8æ¾”°ÔôB²Òadk`Á™`æÜN6ã¦GOzùÏã—…ôÝ7Âöéo‹¨G9Õ5   ŠçbïŽpÛÚŠÙ•*•U9Bíúüîe—eõÚ•dùc}ïD‘Ï[üLñÆ™ð.Xø_À.‹w¨®Ÿo—·\JÆO+pB  Û9#'Œs›áïkú·Çu“YðÔÞ&×,m|¯&­à¶Þd—ldŒ &¼—Ãú&©øÃO“UÔµ™à³Kif²‚3Ë*´_Zû{áå‡ôïí«ï#Üì¸i% »í@›?@ÔJ®aOVúk§ÌôêÇðîu*iÌ­×M~GøïÅþ½¶±ÕnÊxsX‚ám®t]J0³Ã+giÂeJ¶×RTàŒ‚+ËZæÞÿÅ&Ò(¥,î t¶ù¶–*Iê=zW±|X𶇨x^ÃÄ7–ÿn¹ºiÝŽ7Çl¥„Yô ägÖ¼÷B´™uK{¦ŠÓì  .rx}=«§ R›‡îÓZõýšÍ©ÔDê4ÛIš:]¾.œ¶0nI”e„3}xã>õ©s`†îÆÖ(-šI]„¯"r.xüp:t­Kô”ÐŒL çÏ/ï›9‡@ è=;UÈ-]ïíçm©Æ# e½¯rœÛHùŠ–Rg©øDYxfMös)|Ç_$œàƒ×ü*ï…üeg©Äóܪ¸œÈ©º Qº¹ÎóÅkëövöº˜ioew ÈëÂü$úý+FÊÞ9mÃDKH2¿1\÷®™;;$Ú<çÄ:&þ¥âèÁµ–?2ŒÄ¡‚Sè§h Zò­[k¾ Ô §ÚåYD°«mÜ­8]ú‚GL×Ñž"žÝ~jV“k›w…Ä ;ã.Ïê+æÏ økS½ñg¾°ÓDZÍœ­,ÎPD«2>óè08õ$WI'5ͱéPŠåÓsõ·ÅÑÍo©ë—É èÖz­¢Æ‘[™M¬R¬`|ÎÙÏ®+Ï~iVšWÃcwaA©ßÏ0¸•0Ó•ÛÍaÙ› ñÀϵwßuýZ‡Zåç‡VêãR·²‚}6;y3ÈJÆKàd°=ÏlWaŽ~| ðö¡©øcE»Ñ ¶H® ЮÝî4” .öI‰ã^¬Éµ€+WÂV’X´¤Ýµi\ûìŽ5FÚn1×E{‘8ð퇊?iý'P1ùñéðÉ.Ç\Jà= h=G>µÍþÒú„Í­xGCÓÜ Ôõ ¨£÷ÖÐDòmqÜ `õÇBk;àΙñK^ºÖÒü—ó`ÓEÌêŠNd“.sîIZõï[JžÓÕÒ_4)2§Í~¡KHŸÎ8ù¹â‘® ØÀdÁã¥áP(nqô­.Hã Bä·S´ÔBÖY°|©0: µ©ÌâÈbù¢-Œ/©5¯n@ˆ0B‘œûWGû+ÏÏÁ td’ÆÆÚÁr¬ÒeŽï^2Ôæ½:Õ0óÃ6¯%{öÿ?éž5 8Œ>&*VŒš·Gþ_cÇôÍKÃÞý¥ë<ÃR”©ââ¯k>ÞšïêzµÒÉq¤Ëir¦âÊV"¸È#Ö¸ FÚmán!A«ÀÇ%³™•}Y“¨¤V¶Ÿ®[ÜÚª¦¥² «ðJ‘Ùñýh¿Õ§²Ócy —R¶gÚÆÝ±"ž¼ ƒÇµsЧ^”ùnÚìœf Î’}muÿʸñ-…ëEº}öŸæ-J¼K“ÛNO¸â´'·:u„Ûk3˜3¸­Ã:.2êâ³mŸDñ”žeì÷ó?úËMFÓ „sžG³ãñ®•„ö–qF‰[¢ŒMʪŒoäÇìûnV”ô>iÒr5/y'¶¿¯CY’[P5ký>vAs ªñ¶;®Þ~™¬-ïí¯Úòß\ŸRóß䀺«+»ŒŸPA­£éƒE4Ö–Öî$.‹+†`r ã…opOuábÎÂú{kr CæJ.#-íß§½L¢îî™´16pVkúÕ—¾+ð—Žtø¢ûÆÞ×tè/uk©­u ˆÕâ”<ÎÊåã,«•*0Û~«CO’ÃLð,íýüÐéö ºä"ù†4Î àsÔ@kô&;Ûû N}?\aym0ÇÙf·Ú1܀܎À× â?‚žñDrÍmaý‡ÁÛs ²Feº¤Ð°ÚGûc =kë0ÜEMÇ’´l»¯òÿ‡>STSæ¥+·Ñÿ_äy¥•Ðøukwðþâ{ÙZa6žY„k)ùA;™Cdœ’H'¦8«¾•'ø³w3 »˜<õ.’LFw&Nrx5â_~üGø¦¶»á}sPñwÂá;MsÜZÉpN]îŒc2ƒƒÆTrÕÝxFù5¿jš¢­ÂÇ}g#.gØÿ4c:ýÓ“ÁÓ„§z”䥳ÿ3›§MFŒàã4ÕÓý[ñh°¥•†q®¬êU Ñ&½l²1,Y˜d©äK1Ò´4ë~+Óf}i´£jÒy2é·ssÞv?PÞ¹U õÝ^}àoÇáÄCâøt[Xà‰V=J ñÛÕý!T“œòdf ç ¯h»?ˆþD×:ðî…¥LÆ[kÝÁ^e‘2¢Xd8RW‘–F Šó*9(êôï¹Þ”cRÜ®ý¶þ¾âmSÃÚÖ‰§‰4¯ÁsÂ=+PÌ–±(ÏͮŃ“€7£ûµ¢Þê~4¸Õ!K&ŠÏM[Ü]ê7hÐ;c%\ðw‘}kÊ/53Hñ zbêWÿda#}³LÜ[àñ£æc#w…#Ž3è:&§ø&K¨'ŸT°wÄÐ~æ+Mßz3#°bÈsÁÉJÊNµ(7Ms?= Ô0Õ¦½«ä•ÙÕ\ØMáo‡ú¤¾ Ô­ÄW,×i «{†r_y\à– /P|šÿâÕ­õ«%Äæ±um1¶I/%«? m˜œƒ„ñŠí!ðýõ‘¬ëZ|0¼ƒZÔ/" ‚+ìF$gôçšÙÓ/¼2þ  ÛYËo4L’Í4e‚2ᔜu ZÅÍó~ñs7Õiúþlé³qýÛåŠîîÿ/É^ÿ /ײjöÞ(Õc cÖdxÌñ€3‰]‚ƃ¨Ä+žzÐÉâ}KNO‚ïu‹Û;[ƒ,z\:x{84a‡1îÆCÉ'ÊÇ8#Š´–Zùñh´—Lðï…µCÿij_ÝÛäpÇËfês€˜Î9ÅurV©»÷~ë|ÿà´s{JtžÖ~—¿ËüÒg+y“¯^M‰u§º»Dal"t’éÌj¹ÃÈ:àå@Áæ¸YL±ÝÃà3Rñóßf×GÒâFIæùͻɷŒ€Gq';‰¯N×<£ê:åÅž±}7õmªG•Ã2#H22ÕKàŒƒÁ«úWˆµK‹FÖt- >6 ý•á(¶± <°ÆB›ÉgcŒ9Çe7³Š{œñžÖMZËñþ¾f\šF›¦YØxÊ=kLÓ÷$z –ÍÎn¸òr§ —avöë.ä¹Ôg·¸ð‡‡tI|A¢üÚVèÅÇÙ‰u§P"¶V_•¼°Ç½r77××U¼Ñ£ÒSC³rËwoßnÎâ@V&RPrµ¿ø&x:Punÿ‡üz íçnÔXø¦×ÂWfúºÚÎâ[Õ´l´Âc_µsüXP:⹕ðŸ‰u߈Ú$_|Wc¡øhÜù¢Î($žKÛx¸b®ËTݘ– ddGœCâ/ hº¤WñÄ ^íã{-VÞÊòK¹.æcò‹™Xmµ –ÚªP|ÀtÆ=oÃ^ ´Õ<[§xWN½¾Ñõ™ãŽÚ×ûfõ®€wÍç(Çå=ÕB+†q•*|É~ùës¹òNµ¿[ü¶G¡üIÕôTÑí´ÝoFðÍ…ºÇÐÛÝ,S_Û8ÛqGÿ-0ÅXH2TŒ¯…~$x»ã$?¼SàOkz¥¥ø‚!w¤ÞjZ0‘.mÁU‹Ë1”Xå€ÜpHb  ¯üwñCözñWƒ5Nð'Äë×3x).õ7ؘpÖïrB–Šãï ´:ÊŒxƒXj¿>èúDzÍË|CðìíöO\y{îd]ÑÉIÎÙ0] +‘¹³Œ×^Y 4ágïI;6õ×¥ŸcŸ0©^u–2[l­æ»ž4ú§Œ÷ ×ÒPjòëùykÊ<®ZZœ…åÅ•cÔôåDÓ/ÁpÑŒFŽßÄLgç»m?Qe¿†í„y -»*Ê uFVá—¸=â«ÝAo¤ês[q&‹vHŒ|³êªÄ`•ô5®«¨ØÌtyÝo-B³Ú‘#í†a‘ŽÕèÓªžçŸR‹kÐîìµï|6ó]G5½›. µfeÁÏ-žÞíЕÁü\’iü[£yé”YÊ}Üq…¦†-Q5¿8ƒr`’[Ÿ¶~º‡Ã¿ìem/RÕ®Þ÷[¹´ü郴;JÆSŒ ñYôxóö§Ôüsà»íB[{ôÙµKKk³q³syk¼xÀ~\±$¶Þ6ÔúÿŽ,áÓo,µ­>ÿJ½>K”¾VÉXã`\äœ×ï`׫xKâ/ÛE§hÞ(²¸—O„6¡ Ó´jOñ¼R€êç’9í_šâjWÃAº0»Ûk¥ëÿý-ÃÐÅÖæÄÎÉë½›ôÿ€qþ&“Æ÷š…¿„5m2Ío§–3o©i’–¶¼AóFß<,’Ÿ2à˜òqà…žø;všßt;¸™ —º•õ²›Û©HË\4ÿ|HH$#n¼×KñïÄSâ^½©ø#áþƒâ¨ •Y5_[û&Ѷ$žLIáWpœãÏþ!|[—âù±ø|šÞø„ú¤z^¹áÛ›¡+ÚÆTI,é"pЄ?+ààfº(`ñ¤¥&“vo•ÚÞ½¿#~' îÓqZ'%{¿'ý3Á|â½Oø‚Ô¯µëÍZD†îM>{‘mn¬ÆËÆ…L¾^ÝÄóœäæ¾¹Òç]GÂ_Úå ê[ ¶‚hš ;rUÀ#ŸQØ×Ð~ðæ‰à_„z~“¡ØÛYé¶‘,Qù1ª«¼¾GS×’s_0é!øÏ¯I{ øûÅF›qåÞ>›bÓXÚÊ0pH!ä`¤¨ƹñˆæté®X­Ý×ü _ÔÛ IàR«;J]·¿ã{o±Ûéžð_†þÝ^=…„úÅË­pF~Û<Íÿ-À†û£8Œq^}ðûÀþ#ñ,ºÇˆ¤ñDZvm˜tËë­=/®oˆ8{™ŽU3q²5 ‚3€ÿŒ>"Ð5YÚi~'¶µÓîU/nõnÖ4µBÛ<·'îü»²¬×WῈž‡ú}…u]QÒ´ö wq§^)îñƒÏ&¶ÅONœšW{j¯c“K V¢çzo½®pZ´:ËOâ_ kbM+ZÓ¬’iuý‚ÚÎ$vMâZ)BLo»o÷˜s^ âOxºëá~³ãÄÚ®¢‡lVÐ;Æ­ql®KpFæÉ$Úz§¼øŸñ§ÁMáÙ4kmNK¿j—?iÔÖÙÞXçlÎìrÙáGÔWÍñ"þk;Ï Eªÿi蚤[æ` ² í¹SžªzWn_†Å:©(rߥ¾÷å~Äcjᣊ§NæJßž‹ÎÝÍoA$Þ&ËŠY~T)&¾Ê°ðL׿ c×ì8Ð!ð\úÅÆ…¥xbýÚõ+‹ßô{4¬ŽØ Î |îaGÑ–ké}:ŸgC—ý^qÄ´ã½¯×¦Ç ~>±û:øÓ↱¨x’öÊ4_øEôùu/&;[Taºæ@8¸$ît³€TšñéöÆú+y¬ïa†Y<ÂÆà Étê }Ïãü:ñ§ìYâëo†Þ1Ò|A&mjg·Ó¯M ùªîÈÊä)€8¯Î=Åm|dÒ¨.\Ýë 1IÁózçœWÐ`kÔ©íSM;j­¡ù¾cJüÐz>ڞɣFÖúuͽ݂ÄÌ~Íu³:n$äø×Eo0‡Qkˆ"gL2ùŽ9Æ8nxJËÒ´­VÃÄN“ıXéìÙËn÷ çâ»-jPöóÚ!³Žæ λ'?{åìsúW»FMÄùúÖR<÷Vnµ5žM÷ U•ÆÓÇR=EuÞ„I«Á†büFN@ïí\6¥ZaaÚé¼³þ~•ØxjýŽŽ#¶`·~pa>ñÇcÛÖº)«Ý³;ZÄ:¶q­6§¡k𓬖ÐÉÄMŽp{þ?¥r'K{i7óèÞÓ-mo"™£¸ÝHÁ†ÕÀîLñœÕÚxŸQ¸½Òå‚ÀÇwspÆ7š#¸©î§ÐñúWœøŠÃW½ð¨Ñ$"ãQ7pìhæ•Õ¶ êXãoּЮói½RŒtGè½2^øoEkûkwMBök…‘–e]Ät:õÆkÑ>$øŽ|4ºÕ®4ÆÕ­ôÔ_2ÄżJæ]Ë•²pAÀïÒ¼ïRÓ_Sðœ ö¸[o‘9m²’)ŸàQóg±Î:WŸxúM^/…á½6êæöÆ÷V´³²MNv­³'™/ï—t£¬IݸÇçµ0j´¡'/†JéõWGê9?ØÂ­>Wï-èìÏwø)¥=—Â7@°‰î¢a2„{ ñ_*ø·Å~ Ñ¿jˆ7ž$ñ‹¡Ç&»¬’]\ªº"Zù@ë®Ì~+é ‡Z¾…ðòÛYðŽ|U¢ø±b½¹kÝ>ô¨ÀŠ{6ÂÉ#&-Æ×åï~Çþ#ø‰ûDx‡ÆÞ ñß‚¼y­ê1ËšÙÉ#í†$“Ë9S±JIÅŽÙ>çÓüUlGµN6³¾–wO®–ÓüìrqåJï Gé¾fî­­ÒMtÖêý½.v~1ýºô¹üy!ðn»¨èÞ¶<Ť»É{**M*É 1·Êà ìAïÆž‘ÿ:f‘¼²j𤑩gµu.Ië…ƒéY0ÿÁ:\èÚw[]…渶ÐcÄ3Ôî'uëÅSÐ`ÿ j‘$£ãæ½%¡”Æ—0øzŽsž l×é3­†¤¢çQ%-®Ö¾‡ät²ºµå5 .N;Ù==NÎOø)1eéš–îûm§?ûF«·ütºq¦ø‡w|ZNÿÈUÎø·öø}á;Í;J¼øÉñë_ÔT›;(4«@YAÃHÇ* ã=ÏŸ§ÿÁ>tm]&ûÅÿ‡ož³é°å3žF1Áäô¨–3 ±+ ê.wÓ¯õm{•’¬°©?fºôíùéÚæãÿÁG.ÎzN¼r?†ÚqŸüv«Ÿø(ž°SèÞ"ÚG$Ç!?ÌW¢þÅÖ`Õ.áø¡ãÙì-&òÒòhNáÙP¯Lƒ_Æ·™¬ªgyt0‹*žãvÙïékšPá,m\t°q£ïÅ]ê­o[ÛSQÿ‚xÆ{fhzóBNdVDù—<Žg=FGã\oÄ?þø½à_Ùèw®“â-Mâ‘tJÍ‘ÕU8((ÛBç ÷ïÞ#ý…þh_ íüSwâï‰vz|ʬ¯s© X3ª›ù˜· ö¨toØËáá{ÝOEñOá×ÒÉî-RºI`h•2á”ö9¥uÕÆàaìâê+Í^*ûö9èe·³ËMÚNÛ5¿ÝÔƒà…<}®ü%—ÄKñ/Ä>Ô|…þÌÓ´›{y4ûdSò¬ÑËiÃcç;”àü»O5Èx×Wñl_µþ“ý®º]ν«xvÖÖ푤L³š|é bÙ“xÂnþ qšú;àؾ”-€P{Õá|K¦]þÔú–÷¶÷ú-ÒýªI,d‰%W—dŒ¡e^ùBpA¿&Ãæ8ªÙXÆ)Å)tZ/^×¶ýOÝ19n †[JS“R|»·«·kÚö¾Ý£âÄ¿ü!ðÒK×Õ´YÝÿ²5=>Æ[;­>C J‰#oVñ*+XdÖìõðŸûCà>“®j>0ñ¦‡©_[¥Ü6š-ú[Ed]r „LüÁÃ)?Âíµ‹='ölÔ|G©l]6ÖÅäžV‰ŸËM‡æÚ “AU>Lüðíò¥´’é©ös'ʲ ® ÆXç ­2ÌÓSÛŠMJ×K};mÚçu–áaŽK™µË¢om{ïÞÇÆÞ8‹Å_·ÐðÜ÷¶iâ&K{K=I¢)gmVcpbR³äecpà_BüvðßÄ­öuÕ-/¼XšÕÅ¦Ë bÂÅ-®lʦã ÈåÖHœ× ¼ gæ®ã…•¦û_i~"ylmYlíÚôÝHUcc*¹ÏWkÎOîšÆ/…¿~ xƒGð猴êš-“M¨ZÙ¶\¬`6øó*m8%3Ïx¯¡S«:tª{;¥n›zv>R§³§V¥56¯ç¹ó¯ìûðöïÇ ÔüVðoô¸îüOâ]+BеhÙíe½}›†òPªžpU‡8àjOÚSRðýçįøEÖtkÈn´™5V½Ša5½Ý¬[CyR.C0-Éß5µ5ˆxÇÆñiôûÕÎy΄pªP•¤šëøÛõ>‡ý¦þ\ê±tÇJ×5ÝrÓËŠôXêÅ'hî#Ä«,¬€w#nR8{üýðÃ~_­§Ù-u×¼,×wSÚ Òî@A%†xéÛâ½Oøû.±û=C£xƒÃ%Ót­B#™®ßÚx!xµ8\&3ØÎ“ÒÏG¢ü‚¦7°«&ÞšÞíþ'K¬|;Ÿþâxnšúãú\WO7žÁîBnA ÉÄ.yÉÈÀÅ}eâ xKÁÿ³mÞ·à ZøvÕ­rYÙ«-³Hx[;D€çç$uÏóOÅO‰Óø7â}šø÷ÂWz/Šl-f†m*±42ÈÒ/–öÒ®<È¥ÆP1ʰVâ½~ÓÇßüAð*ôkŸ <)ƒ$´/*iÚô²ê0GŒ‡ò|ŽAÆåW ãq:b©×t# ²Júo¿ã©¦¥5ŠuhÅ»k¢Ù~‡•|%ñ·´;]è:´ššÎ%Õ-XL«âwIù€ä€@œWÓz7¼=ã/AÝÈx.P2]ظdÁ#Êsï^Oû,x¡õm¿Š^YæG‚6ßÙp •+Ž yã_~|Eø/ñ‡ÅzÇÃ.¯áGÔüõÑ„FE·YÁ—…·W‘žøÅ|¥l5,F*¤TêEéÙÿ“üаعá𔤢êS’×ù—ù¯ÄûY²ðݶ›§ýˆÚ¬‘Æv‹a+ êÅWœ{Õ;=SQKVM>æ+¢…WË— ĶÒ=r+å„ÿåH¡]motm[R”·ÙïàdŽåÀ9Xœ€hmp‘_SÚk/ˆ@½ŽX´ËÏãIT4Ç÷¸dþ^ÔsË /cŠ‹¿~æ5p+o‚’·òöÿ‚u—muw§(Ôtkø¶ƒö›e„ôa×ò¬¸nÞÞ7Ód¹Eçtbo1ƒü@çþàT:F¯«i’­æ”¶(7ð¾¡áÝQ¼»¾´ÒcžýmbüÀ± oùfI/¾¯µn´»‹m×I$Úi,ÜÆ†â/¡2þ¯Ñ~|9Ðþ-jÞ*ƒÃ“\¾§msoªÁiqö‹+ß´`É$Éó+dGMÄ÷®¼£0†sœ“iì–Î߯Þ,Ï.–.•*Q’N/Vôi?ÆÞ¶>4ðÿŽ!@n/&x:á¤;“¹#§ÌÞ3ðï‰~]è—~ð†±â‡Ú seâ±vu+}RÝÓBÝÂÝ6œmÈ<×ÕG GOÚQ•“éýl|œñUð5*ñ¼—]ÿáÑöo„ü{¥ÝhÍcoáGÒµ|Å4zb¬»€ evÚ»ç€Ø<•Æø’ûUO¦­¤&‰¤xž1ˆîec:àŸºÐG„ÜA#x‡c^k ø£Â_4©¥±‹RÖM’›‰mn.Ò;=Û¼³0AÈ$yjMzžƒáŠº\v.¬è·wFkd{†·û N:KxêZ^A;Ur3ׯ*XzXy9­›·æz‹WNW~ŠöùÜ)ÑôO Á¨k–šå´Š¾]Õö¥‡\¯'í3çj18PzVž£¡ëšÖ•<úG„´}âa§Y¿Ÿt³ap§s\ãmÅy½åíõÏêZ‡¼X‘2ƶ«ep~Ë(trÀÌ^~`Çh9wªzç5{íJÞðkRE{r"OìME–ÞÏË@C­c ä žÀVQ¿5ù¬ü¯aµšQr^v¿ù.´½cAÔNŸâˆ_ð”è‹(ù´$a%¨ÚY¼ÛtŒ`7©' ¦ÙhþñMž Ú‡¼=s&Ï.ëYŠ÷μ‹ H»n™³ÆƒÛsPñ Þ½µðÖ’öšÞ«ÏLo³NÍÉ”¶ÐÀ·f ã¯5½ÿ «Å|(‹VÐu = ÇP^Åw©ùÌn#º¶YÈ‘lÄËm»ÌFsŸõú§Šuó«xÞÇN‡L_.ÏL’y"Óç „¸Tˆ ‚p&¾V?`±øÃáéºöµ‡«ÌmµË%¸¹ùW‘àà¡ØÙŠ6l’MV^¡Z*µ®šíø=Î\ËÚRŸ±½š}ÿájøñßá÷›mñwÁ:V¯â½vÖX´}]uxn4û'Øñ0.ùo÷NÞ Ê…¯:¼ñ6³eâ-7ÆD?´Ÿ‡úÞ¤ÐêçÁÖÎá/%ùsÊÎҘߟš2™mªzâ·u§xGÇ——ú5冹ð÷ÅÓï¹±¸¸Y§³š@|ûyF lq—G9ä°8ùsÅÍ¥XxfûTø}¨]ZCàkåGðõÌ’ùÄŒn˜–2Fp¤q‘†ÎI ÕF­8AÓŠi[çoóDÖ…J²U]›ëÚþ™‘ã_ éÞø»iâ;híuOxŽQ Ä;ƒ¾›+¨Mˆ\œFüAÏPxñ¯ø6ÿÁ·#H°†öûÂzƒ3ZFÎ%b¸$£¨äàr­Ün~‘øsà­3Ä|Sðâ în£¸û^¯¼ K™Ì!ê>aÐå@Æ+æýkJÔ-µMC¾ †[é“‘-ìrmyXš7^@ÏBF¯C 7J2—7™æ×‚YJ1åò7´[ß xƒáç†|M=œJð\†ÅýÆNùÏkÎ"M&óOM9®®5NÌ4VóÃlD“(䇞˜ëÒ–òÑu¯µ¾¹§ÿ¨–6ÛýÜ{ŒàöªÖÚ>¡ªÅk}£DöúÕ¶õŠE`¾v9dfõã¿ZÚ„b¯g¹uªIòó-º”#»Úݤ =¾©lv¼QFpàzƒÐ×y¦Á©j2ßO8š@e€àñ؃ÓÛßÄÏE_Aqmi®E»Î³Œ;ªÀë^•%Ò³&¿$Á/Þ,“=üH⺨Î]ÌkƺGê7Áß…:|õŸßÚmo|÷M¡UŒf½Úp<ÖÁD=”ŸœÓ¾&iúÅ?ZYjpE££Þ,º]Ý´B9¦”äwqM¸gSÁÅu7Þ3ø­ðÇLøË¾Öt{{s>¹y£Í,³X¡á^HFèT ŒIþî:pŸ ôOˆ_>+xÓâ‹¢h|sµ¬> i¡°c»ìð ù#Î~ryäc5ñ|µeSÚY%½ôûϬö´£Q©Bí½­ú¹‚ø7À0YiñG$Œ6¥‘Ï$Ô“Éö¯>²ðf¡­ü{¾ Ä‚ÊÙ‰ñë4&Ó cÒ-MÔo {®®dÀ{‰ ËÊq™›$úæ¼ÎÂ}Kã¯Æhu ë3è¾Ó-¦­f©,š•Ãácß•H|ŒHÜ[pvä»Çž¯á[ÿGâ)/5/ ézkÝv"!ÿ– 9g'JÈ `fq®ãEÙKv–šþWò_qË€U=›®îãѽtüíæx.•á9þ/~Ðþ&Ô|Yk¿ÃíëÊKd`±ÞÜ.yÀ̘ÈÎxÎGj‹â¥—‡ôÏi0ÚèöÚ}ÏÚB'öbI.aQ•óp²Æ§?)Ö½;ÚõµŸ†´ûmOEñVƒ© ¸ŠïWÑæµ·¸‘€ÀŽGIû¬T·8¼—źö‡©|w°:ÍíΟhéi °ZIqö—ÞCÁ -$ƒn ¨Âäç¾=9N»ÄFœ"⢾Læ£N”pò©6ßÜ}?ðwá±ñd·ž<ñV²ÜZ¬6Hè G Œí^3žäžM|Mñßáô6µôVZEŠÊú›°G íÀ @éŽçÚ¿A|9ñŸÃèÚÃû½Å×.~Ÿÿ „vÑ걂¶òF̆2cbŽq^ý¹£Íûaj/ãy4ÎÊéWE¼’C-Ƥ$PÅ–% § cÜœwá£[‡ÄIò»%¢î¶Ó¿ÈôgC‰¤œ¤¯'fûzöù˜šOìŽ4ßi>"_ê7éeΗu%œão(¬ä<ýâyèkWᇀ"ñ—ÆÍ:òëCŽËÃþÓKÓ¥„4Ks–2Ï´ä>ÕV=>lu¯¨~#x¾ÇKø!«ëš%ÍŽ¨°ÚH–[n<¸ä˜ ÙˆÊÜŒŒt¯ ø]û@xD±–ˆæBŸé!³ÑgŸO¿Œ´È„‚ÙÀÚrF+ÎËsßJ´§…Ùif¿®‡¡œeÙF¥(Ò»mÝ>ÚÿHõ/‹þð¶§ðòûW¾Ñ41¬i‹ÿíV[plÇåa¸JÁSkå­&ÕÖî;k+«®Ð(³ÏÌrO½}1ñâ…®~´Všîƒ4—z,Óéa®–Xõ9™xhðq ÁÎ8ɯ€luÍxêÚœw°é³J¹k9l¡ ¬>ê–ï×ש’B²¢Õ[èô½Ï•âMÕŒ©5ªÖÇÒ7Áu¬Ã™ü’Ó|ä ÏÝë;W·דµœ±90ã“ÜuéYÚUÛ'†l¦¹–å(íýÐçû¿Ê·µ7ûU•Üò2b6‚g_˜IŽCtâ¾¢…Üw>:²W½&ÖòÛÃ77jÍ$ÀA9N:Õ?ß\Iog3ççr´¼QÐhw o´Ç³r6H´žŒKýž—±îÞ¡>è?•w-Ë}N¶ÂèÅãhcs†âÛ…Ë üÄzõæâu±³Ó¾Óz×6Å.#e¹·Áž0ËÆVœZ·öW·ñÄòÝÚEœÑyvÒ*’ÎÞƒÛÞ—Sž$ŽÖG`Üo´{ƒ4n$ÁãŽäw¯#zÇ£B{3êß3èß l/ßL½žÝ,­ÞÊЃ¾<l8êY—¶rXû׉ÿoéÚ¯Æ-3ZÔüT4ßÅ^¼›Gmke)b¹,À:É´êçå psôGÄOQ–O Ûéz:ßfÁµ§¸bO&H‹:ûÐ2zWÍÞ øO¦x›ö†×|Kã;M?Ä(u™fÒl\ù¶¶êXå>ëM‘ÉÇÀP¥ 3•Wd×K7øõó>ó(j¸ˆÆ’»¿VÒÓ½ºyq^ë©á«MSI¼ÓõU{k˜¥Á&9ûÊpExÇÂíBóÇ¿üañWHIÜXÛ¬.ÍÁnÎ&@êÌìN9'€*?Š+áßøSRÕôåƒÃÖ²Û {‹[CåZÜÊüF|¡ò‰K|»€ƒƒœ ØømggðzÓLkÛGÕDjf¶¡—$då3ŸZùÈFXlUE·Én¶²Ôýª§ŠÌèºÉ)S‹Ùèîôÿ†:ψ^2Ô4¯…x*ÎÞƒÄz€‚i˰‘#2ƒ:šì´ÈÃí:ßh в`ýÞ ùŠùׯ¾*±¼ý¥-4+Ç:}®…oö›Ë»Â"ƒ2œ)W<`GQÇ­{èúwÂkßÛÞ SI±±k‡—MÍÎõDÜB¬y,} ŸJœ[ÅÏ ‡ƒ»²VùìŠÁýJ–+8Ù6Û%«<ÖÃYÔ¼}ûWëö¦Ö£û>5Óì–%*#;È$òXãþ+²ñ‡Œu¯ |6ñ¥¢^EguEpÿ oµ;¦Ýsy™¦|`™âI¯5øÍñSEƒž"»û.¡i+4­r %›B™Ô Ü€ØÙ†2FAÍz¯E7Á6¸ÿ„GÄzo‡ã…Z-ræ$΃¬‚ÞjÆ⣎qŠº™~cýœ©Ê/I=?®ý;™e_ÚN´$½èÇ^þ¾K«é³2þ(øÃÄŽ­àË©ùºŸÏû¶A+%ñÉÃÅu|Swà/€º¿ˆtøžâî á%»L\H»H¼çß·ZùûÄþ(±_ÚÿN›Äw:f èºføµÔÅ:M ÚÝÓ„è3œŒW¶|fñÆ¥þÎÚŸ‹ôý^K" u§ÓU¦pdÂ*U,,ã§9­½ž-×ÁûK»r+ö×k˜NX(áqª’JüîÝôÕØç~ ø*öoéZõÏŒ|IÕÍ¢´VºeÚEi8;v"B;—ÎOLW„|zÔ|msûRø@½ŸKÓ´K¸gµµÕ-T<Ñyn¾qxÎ|™SnrÜW¥uŸ¾6ü?ð¯…l<5­øÓÖ—ö!dŠ{ †ã-#}ÔÆyÎ:ŠóïZÖyûR\ëÓ›DÓ´ëki¿´„èÂíf$ B>÷–S¡ëæ w¯«ËèÖŽ2|Ðѧm-Ûm5þ™ñy–"”°å©vš¾·×_==~Gµø¿ÂI ~Ë^)¸ðÝö¼ñ›<Ü隆©5ôl@ @”³FÞ…ªkÊ?gßøCľš_YÂ_ª$Ö¦{˜¬Uùk1Û JsŽxèº_Ç_‡~6øi/‡¼?ª$Zì–21Ò.ax5 $HÙÀH|í<®@ô¯˜þüaÑôy.΃¥xÛÅ’ý/'Ó4í(ùð;%Gf§#v~b¤ Ñ€Áæ>Ê¢’jWßfÈÇæ=5œ~ôŸÚ#@ñTŸ´‹áÍrò÷ZðVF]1®ÜH× ­æ-­Éë0„çc™”üÛˆ,}ƒAð΋¨ü<ÓãMÚÓT·U›O¹µEŽX¥ÚA*W%HÎEqŸþ%è:Ò|:Ôô¹-ïtMNÖðµë²ZÜÄ‹&„Ë9%S‚ ãצü8“ÄÖ?´x—.ƒ °‹›ÉîÒg´‰ˆiáOcና°ž#§O:ì­%ÛOé÷8ðÕ°P¯QËX¾êÿÒ>cø ¢Øi$¶ñ)>ª$6‘¼Š]b$…RFwë~>|?°°ñO†u L´²Ñ†¸Æâ8"Tí0“qP8ÜT’{Ÿ­rº~£âwö­ñ¦‡áÑáÝ[·Õ§?kÕ/ Ùý\,2Q™C‚#\`H#ž›ã׉üY០i6Óô”½‹QK›‰tï3ʸjÄáö‚Nàx"»%Gíã%/•ÌÞ+èJ<ºî¸<3¤A¯|)d»·K›ÛO"æ"ªÑÍ•ätÈõÅ~~|<Òcømûzj>‰žh¡º!݇˜:ð ü~•ôÿÁ]/âæ¯ð»Hñ ‡<3¥+¿œžŸCk‹o$ã|2N$WóHÈÞPqòžÿ"xëþ?ðRÝZßIM.ïÅxšÒæH<›Kx˜T1-´îÎ-òôíÕÑpÅU§íÑé®÷ô7Î+{\9{'{«=?áÏ ¾>ü;Ó|QáDñ}ûJu-3ýH-•Pv“‘Ûæ qê+Ùþ/öïÁÑ_j‹ÈETiÖ:íù³íÞ¼[ãIø»¤~ÌÑZë—ZM¦©1OøvØy–ÚöóC6ã•9Y°$gåèkþÏž4ñ­Þšúoƒ4}:ê yXKsâIàYeŽ0ªÍ޹|cžôbòú•i8ó&ÓÓ]õ#+Ì£BÍÆËfí»ôÜòÛ?ë?¾4ø‡Á^M6¦³pMæ¥6Öˆí½NÅ ÈÄ08Ê~ÇêÙ~5éñ­µ¿ÅÿiPéi‘¥Ž¿o¤MK3ùSíÞˆû•mÃv`ÏÅ¿õÝ*/Ûb=fçIÕôÍrhã¶ÕôU’e½ÈŒÀÜ,‘̯•—8ù>m¤=/âUçˆM³ø•ñáçÄ M;â~’|7ŒŸèš¬11²¾r0%óU8è êÕåà°î¥êa%µï¿Ë¿ËTz™›ƒµ,d;ZkoŸoÓ>Ñ[ß ^ø†ÚÓPÒÒ=FP†û;ymä`T“ótDZëÅu0éw¶×’/RƒSŒýëmEJ4‹ýÒëÕ~ à¼/ñOÞ0Ò­íõä¶¹‡ ¬ë·?ßô8¯H_·A©}¯C’;›3Á¹“~ãžd2à{9®ì>cÍîÉò¾Ïôþ®|î;‡åGߊæ]ýášó*ɤè1k1\Ki>¨†,/#¿í5ÕØC4ð€¶Q—Ü“iÓmœä²‘ÇЊçu+¹¬¬%ytû{«ÆÿT÷Û·&yÙæ ÚW®7`û× šý¤ZÛCu þˆ7M$2ù‘Ù²z}3[T¢ª/_;ÿÃýç% ]J2³¦š{Úß–ßuO¸í­\O5ýԬġ… žžYàãØæ°.tݬ¦¹{æ±ZCEð3ÆèØSë· T–Ú¾¶§U·×´Ó‚Ím‰FßVFÃô¥¶¾ƒWÔä´±½´ }–å •Á襹çÚ­+ÞÍùY_qéTt+ZPº]»üõ_yQ-®´ý:îÞHàñ&‡uŸ6Ñdó–hÛïØàæ¾{ñ†½†"ë³íóíä~gÜ~Ï\Òµ‹¿³V¶|Yanҭ׆5dú߇n·yn>hØaK¤c$ƒš¯à¿ÚÆoñNïÃßµÍS@…ܤwrXý“쪪ˆÛâ7#>fHžpF>ÆñW™.|A}ãƒwéðãâ|L÷Q[À©mâbɽS÷Ñ™q¿‰ë^A7„~ü}øµ©øGÆÚE¯Â_ÚŠ(V)´ÛÝRYt­\ˆ÷+Có*± çÊ8<êûj¬gIó/yzs/ëº>#…ÆeUNð{5{?'¶¾LêOt­oƱøîïÆWv¼ð*½÷„J°’4|·º›ärÆ dv ŒÖ4_´ ¶µ§k äL‘\êeÃAi{,c2_íÊÊÃðÜ? ‚~ftñìÑã;Ÿ xÓÁwºÖ…k<‚Ú}@m´˜2Å–ÚI vdŸ©¯©ü ©øGâ†+èZžÚL›¨u.n-Ë®î D?)9q^^6Œ°‘æ«yG¥¿ÏSÓÁJž9òÒ´_[õ~†¾©¨Éâ‡÷Iáû-#×P¯ö„ò]ˆšéw fráßt¦ÞzÖmÔ^!Ò~Å}·'ü!‘ÜJ¶ÑMdtÙa¶þì’?Ïs·œ|¡ˆÇR2y¶ü(LðÕäÞ6³–ðKœ[~®ÈäåcåBr í 8Ͻ7@ñ5ž´-í¢¶ºåÐ>^•gj'»µa‘!šiŽØv‘óÓî@¬=²QV‹q{>¿u´4–ÂNòI­û}÷8Ý;Á~Õ<ÑêPÛêZDÒdÇË‚åó»b¹žféÁÀ=«¥ÔüãéüEß‚ÖÏÂÖW0¢j7> ÊÜ÷yR[ÙG—gÁ-´²…¾QX^%°Ó5MX‡A·ÓßÇOyZ¾‹××PH„ùoöÌéÎ6€8èjo ø—Æ®‹w ß‹ô}oPšçlãJ·o…ÃCu)vØÑ¶w*€F1ƒÔ¸SP‡4¥úþ_ð ©^s—-8þüÿàçÿøÛ[Õâ‡Uдˆ¾És(¼Ô®µ ìBÑv±…dÀpçšìþ,|CÓ-þê’h<*öŠ"»†áój0Êa”`9pARu$+•·ø¯Ãÿ&‹_LÞ¶©çùPJ÷ 3欀þò#‚Ï»æA=+‰×üOðÿã ú‰tûmj «,1µÒ€b¾G ACÁ ;HÇW4(ýbºn»ŽÖÿ/ø3®¥E‡Ã¶çûÉo~Þ¿ð~G‚ø‹âW“ãχï5Câëp6Äê°F-´Õ ûÛy|¤ )ã*I%=6’t´)4? \x«à·Å ];ÁЋ*î<­¬q·ÍÌchÈêpÊTg¨'Š>ñ7ˆ<;â‡óø­ëQøj}jÈÐÛa$š?ÅMÈ­–¥jÿa]{OÉÍ®òAY×wFàòø¬¶é¬ÿbxãOÓ¾Ùy£´o«è—Ëm2!¿–Äîeç ç$ [ª‰¥ÌìÓþ¾ó…R{Çf{f•á}âïÃÝ6×öz†¾'xYY>Ç>¢ÒÇ©¢g³šUln;rŽ>^˜Ê’ã‡vÞ3Ò­ø=ia¦4éÖÉ ¼çá#?ÄÌÞù$šøSÀ¾Ö>-ü]¿Õn¼QâÍáµµªÅ4:Eä–¨\ù¶8ÃG´ƒ#O{ѼY Iá/ Zxo^ñ犼§D·:N™¨Äú àªnƒ(ÜSa#z·%˜ã+/Œ)¨º^–{võû·:èæ>Ö¼aÈ®ºß«ëéo]½_PÓî<§Yk7ЛñsöÝBÞ ™9E#?uoaZþ3ñ‘§xHH×)“J-âYÜ#ŽÙǧ`+Æ´ÿÙÃÁÚ—ƒa×¼e{â[ëK¾ÒI?®Ÿ©Z]bX\‹ÉCº´:‰Ýº*:WvÓÏÝÍoêÿ ¾|:Ò"ñO‡ôýwÃÖ†9d¹Ólu™Öã*‡…˜Æ§p¨Œä×—xãO‚ô‡Õu ^?\…›Ë½Õtý&{»K¿xÉ2)Aާ'åL²t§9мß♥,âaV´û­÷SxÂú)|>“wjº…´ñùQØÝ67-Âð}ñJùËEðÛÃLÝJçOŠÛA¶K{_™bfžCŽŒÇŒöÞµþ"øÖãUø[?Œ¼#¯èðE§¨šÆôÄo ¹ç’¡$ª ç,>•Æø^×ãÎáŸÉáÝi÷²}¢êÅu&‹S@Àe‹m1³FÌ€¤œƒÆ9.¢½I½®¬û¿] ó|ÞŠJœVŽÚù/MOcñφ­¼u¢O êžOös4sÌΡþα&à…²të\WÁO >¹ñ#Ä^7’ÞÚm_Q‘ൻ o |±„cü!@$qÉ'©®YñåäÞ±OxzïW>!˜érX_Éö{¸îÕ›Œ­…}òÆcp5Õèßð²>x)ð~«E¨øCšŽNí·TL3ž§Žµó?í*|ោ6^Ÿ¡i¶ÚõÄž}½®œ¾[µ¼8ˆÃg!= k\^Y<>n“Kw¦šéëþZžŽ]ÃŒ„kE¶ìµ×E{öý^‡ç§‚ô=[Ä?··ˆïü\ßÚ–Ö––¦¸ÄŸ4qŒLà Ì[œt½³ã”èÖ©©x"úËš•µ´³_'ÙØÙßÂÑ‘$3$eAa»zIÃ)’ )òO†¿¼§|Nñf½¨ÂIywp‡ìÚN…s{-¬Uä£yl[i9Æ}+Kã·ÄXµO xEü9¬èz–ƒ«Ý›K½T^€#‰$iQŒknGÆÜ}+SÄsSKD­éþCZRœç½Ûõ5>h×>ýž<1¢ËÛ=­’ a‘Íâ=N=kŸ×< ßí?ðþâ–‘`–îúh¼°BK*í-þñ G¯5êþ ñÏÂxÈðŸ‰ôq¬.VÎhc¹U½”z«`º’Yr2ìkÇôŸ\ßþÜWºMï‡5+û‹[A¼apò@2DÄÊ8Kï88'·Ÿ<xãjT½®žún{ñ̰óË©RµìÕ­¯ôϳ$x‡ƒWO’µZU¤Šp0C/¡ü1_$ühž-ÕôÍ8ÛÎ×ZåõØB ý£t„™&8äp/eÖ»ü]‹F‹Ä7‰ü-â?ëŸÙ7éƒTf¶¿òâ,¡. ,€’•l79Æ9¯™> üHñãiþøy£øƒF¼¼y~ߪkMgqtÌ>e@±¶Á¸•္£.ÀbiÒ©5dŸš·­ö8ó,e(Sw¿£¿¡ïü1§k µK© ƒL{ÏÙ™m­¡ù\«ÀB^‡¯Ò¾ø}ptÿö̉/%x·sŒ=1Ú¾ñßÄýGP²Ò.µymt_ VGÕ¬u(Z COšØr„‚QŽBò¼0© ×±ü8ý£>Þh–¡м9§¸Ht½wYÑfƒM»-¨'+„cع’É4±8,\ðö·6­»tþ¬m„Çá¡Ykʬ–¿×™ç>%Ñëþ ,óݲËa‹ V¶Š¡–3æHÁ€èN ZõoŒšƽðgRµÑÕ“R’Çì¾[> °\ƒÈSó äŽÕóµß‰|UûhêÙzü%^'†F…l¬%Hcû"±1M+¹ÂgyòX•zãÔüOãÍV×À^!¶ñF…à_iê³ÜC­"Oo5³8WšÚhج›qÀÈe8, žÕB­©Fêé/»Ó{|Œž&•ªÎÎÒ¿O×küÎ{à?‡l|9¢øûJ‚{w:N¨±M!‰Ý™ —,>u.Î2xã«3ÄþÓ¼7ûgøúÒÇL‡C¾NbˆÚY$&1”ÝòñÆM`üñ¬ xªk|@ñF˜ÓI&£â-/MûD18ftyß/Ê>R±•ÉxóÇW#øíá-fËQÓ%Ó4Ë_;Nº·”˜Ìžjõì*¤÷`E*˜lKÇÊJê?ðzXì<2õY˧–·?R|gà} ]ý›¼Uh¶qÙø‚KF½³Ô’5K‹{¤B<ØäP 0ôìHèkó›à5ݾ“©>œ/.âY#áˆï/¼üÙA98÷¯ÐŸ|Sðo¼1e§iö…¨k­aNÂÞ|–ÞŒ¦DS‚ñ’ιJøàn‰âø·Q‡C¿Ñü)mc}qmíÕ¯ÚåžH§’3µ7TÊãq$ŸAß‹)öôéÔwn^÷êm”*ÊÅ]Ë]<´±×|[ðN›cw¥øÖÕR FÛPAuh]8BVÜ(Æz‘ØWÕ^½·ìûª<Ö$3äç#œWÆ_µoxWDÒ´^Ú6Òü^K¦ÙâÛX„)*61/o?³Ÿö×Ã룣x®8UaÔ ºyÅû„æÐIóÑù?2ç*Àó_Ÿ <câo޶žñ”7Íá8n®'›CŠå’)gyœËÒ 3"’@®Þs]0%ÌܺmmNxש8ò¨õÜöÚŸÂzpñ—ÃÿŠö3#j÷X\È›Y^7?)$¹ÇÑzM”pxƒáÂ’‰Z}<ÂÙ\•,§9õ漫ö¢øSáÿ…_“Rø}m©iž»Õ­#½ðâ\I5œr¬›£¸…X‘’pÁp­ÆFy®¯àŸþ!ø¯àZk¶¿tí.â)|È4_줖Õ¹$¹ó7žFõ ýÓŽyêâ(ý^5=§º•×á¥ÿÈ롆¯*Î*õ¯§çÐÂøp¾×WF(k{ù-ä*€s“’9Ç9¨j¯èVß~|I¹¾:f¡öø4ça+tžfå,ÀpTäðjñXŸ¥m…n´=W@¿{Ûo´GónAEx‹.pà<‚AÚuFJZ5mÒm'vã%vš{6“=óá7b×,îcðÞ“uâ]-C-äs¤1MÆaßþ·£ zf¸½WâïÂ_YÚü=“UŠçÄÖ—«o.‹¨Ù4W $•‘ÇPŽ=ȯ:øã½b×HðF“§ëú奢„½¼6vvÇ ò*9'?ªqÔ×ñ6Ê=/þ áïëZ/ü!z†­¤Hšý„—+%¼wQ(ÅÔsð%‰ÐcvÐÃb†œWÇÐÈéÊU9 Õ“qjZ·æ·×£I~'è8Ž#”}’…DîÒškDžö~]nÙëÿ>jÖš&‘ãÿ„šu´wÜÇ«øyÉŠÿåÊIdŸ½•óÏ@G—|>ý  šæÓJ´½»²Ôåb—Ö#ʸ´U8‘Yî¾~PG¥}á_žÖ~êrÚYëÚ†n†Xµ‹k]ð‡ˆä2ÇŸ1“#ï¨Çq‘Nø…à†~)ñ—„õÍGÞÔ⼑ÝÏ–æ´‘‡W%yܬ:j8ê/ÊKI.¿;3¦EV³–²k¬^Þ±}>WG¡è>1ðþ½¢-µ´Ûnü­ª³É‡n8Ëto©ÕHÚ[u’ßVÒí¿£`±ÎB·ÊøWÇÿ|/ã_ƒ0ŸXÑ¢¼ñ/Ã9-î)c‘¤½ÒÔ6$G_ùkdàî œç®çáÿÆëmo@·ŽâK=kN—ƒøqƒÆ9è}8S¯B ¤}ø>«§ù?&aŠ¡‡ÅÉÓþHôkó^húoO·ŽÑá½m!­£Fó-¥t1ŸîJ‘õÅg¦£æÏ5¶¯-¶½&—T};M”ÜKi0¶½*O!öü®¿Êºè{:±“·¯uþ_#ÅÆC‡”a'«ÚÛ?óù—ÛûSí i·zn Î¡–Öé<™ÔvÃq¸ÔwÕ³æÛSе6õFךXÎqÁÞ8'ê+"Ònu)¤þÒ]JÛ…T•Yxaò¾¦EKm§¼²µ­æ·;Û¡HLð5¼Š¤ò¹Ž`x ñŠ?جåNZ®‹üŽYÐÌdÔjÃG³jËï[-á·¸ÒR ¹5-^æ)žDÔVåì!l¨`1’½8ãŠå~ |0ð§Å_†?ðkÚ®¥Õ½ÒO¯epj6r!Ê>â9ã?˜äWy ^%Ê̶º\ð틘Ì,0eÊ’ Í·º¶&›¬}Éæ9 ¾‘DˆO#§¡÷ëØÖ«/hªP—¼µþ¿È졇pƒ§ˆ‚åzM~{£ã}fúß–šÂïÚûCÅÞº¸™<ñ#N½i5]=Cfá¤H,ù2/û@#ñàþ­ðV]âÇÃË⯇ÝÇ•¤ß–tKÕ}Ê!’em¬Tœ®å HNsúSâm;H×<{á}wB»‚ÂòÕàŽê(þÑR6‰lŽ:üد,"ø©û.xî-E°¹ø‹ðCRu’kvé.›vd,YeE9‚åHfUËá85öÙ7GJêÒüî¿ÊçÅg¼5<½¶·Å>Ïôv°Ïƒ?´aµøY{?‹ü ø^ËLò-®|WÆ(og.cpÛ†é%±³>ñ^•ÞxçT³Ötûm&Ê;‹;ÒÓ:ÚʰZêmŸùzÓ@Üfò°á³Ò¼‡âï‡4Ï:6ƒâo†šíüZ¤ F@eÈùHù<ÍÙŸx$ãåßx»]øSâOÂúõ¤·kxÚÖ{¢ðÚÊt¸<€G 1‘Þ»«äôyÝ|>’ëýt<êÝiÁP¯ª[KúùŸø7âF“âoÝ蕟‰nõx&öz>‰m$:\ãjìF¸…z†È(ì8‚+Ñçûƒáß[Má}CÔHT¸¸´‹Ê¸´fû¡qÏ™’pÄÄ’{Šüæðí+âO |Q´¿²’ûQðÔ‡ÍW;a¹Fa‰#Ú¯ýÝù 3šúGÄ_ôÝ_ã7‚üA¡F5ýø‹8äÓ®¬ pó}²ÁÂÁ0x ŒnÅyXü®»©ÁY=õíýu=|>”hÎRw’Ù[úüEÔôÞþÍ~!¶°ð¾ªüF²€_$¢%ÈŒ–eÔ®Ñäc\Ž£¨ñß <¾/ø{á?‰7š4> ] vê1¹žß#÷¦ßâäÉ\6hŸì¯‡ßµž—w£ø¢ <âoîóws¥H¸È+#‰²]=aZzŸ‡/þ~Ö¶²^Øü0ñTòßÚ>ˆÃ9¸eKY‡>X$™UPù<ç;ºªÐ„cìa£µï®«ªõ<ì62^ÓÚÔÕ|·éò:Ïx>Ö×ânƒñ›ÂnŸq¤HVéŠ-£”ŒAµFèŽ:`«q·˜¾ ø-â>ƒñoÂñÊþ¼œè±;l¯HUKŒ/ÍöwÁ ¹Ú¯µ±ó1·ü%š'ïˆúæƒâýpøÃÁzµœ‡FŽÞà3-»&òð±Ë1\œä=Ž2¾kžº²ñÇ€µ?hÖïe¤êÑß2ÜØÄëÃ0\1xNrà À– º¤£)ô¶Ý:|×s¿˜aå_ÚBž—N×ëÖÞ^Zˆ<&þ ý |!ñÆÞ]c᦯vë}¤^¡¹·Ñ/%t–ÎØ¥ õå]±ÑøÀñGƒü=àÚ&ËÄMšÝ|?ñ#3­ŸÚ—£]±ù£d-¹%Iá#ø€OÃ}{À~1øYñ+]¹´ñM¼Í x†[ôQår`žËXÈ ÛH9ä6H5Äè‚#ðˆ~üK¹mÄ1ܺMâgº0ºCº;¨å$ ®¨~]§iU„GJ³æ”tÓªèþ]Ö½÷2ÅV§ sÓ…£'GÕ|û=>ãñoí?áßÄ$ÔÚÂ]WÀÚö峚f;ôÙ—¶,>ꞨÝñƒÑsÙü9ðï†mcÖíußí [o/L¸µ»’⋲€Lœ3cœ ñNÓ<áüÖü7â_CŠìçT[ŸWi#¹É4A›ËŽ0€tëÎksÞÑáŠ[@4­?Ǿ‚ê7Ž`½ÏÞœœeÀàÓŒŠXÇR4”e'}®¿­»þF¸iS•^h¥nß×õædZøÇÄÚeLj>|JÔ êsGe4'É_ðÜîÆK©Û•œƒÈ®{Ãÿuo ÚjÞø±â=^ßMhÂÛêÖ3m†00bºD ‡làÜ ÁyË£ªüKðÕí½ííÎã-2å¤Óô쬖öÌ<×SоpzŽ+Ïæ¶ox]‰µgñšÄ˧™„*Aw¹çñ®º(ÚÒIzwò9ç“nÒ×sŸñ äw>&˜ÀÕüÂEç0IQÉù:/AÅ{?Á ø{ÇVÚ·…µË“aª]ŸÃ×§,°ÝFKþò0G™'uÎ<×Êòkv÷í–f8#o-Ú@1Î6–'?}áYoÛà&¡}¥˜4™tëè.¯n-#Ù0·$‡s(å=9À¬k`ç Š[+ž¼óupîšÕÚÇꟑÃÿ‡³Z¦ž/áKeûT0HÜFç±9¯œmuI¼]ñ’I–Úk½+M›ÈûZ©œ}ÐìcùçÒ¹?|Bø¹§j÷ú Í›xÞÖxÙ4Íml…½×Ÿò¬V÷[1$0‘Tt?(ÆNÖð/ü [ëïx×Mø‰0ûLú½†¯"[,§çdû)&@r¼¡nùÝÍ){%':’Vèy(VÚ S±øŸ«i]ªé76èþ"¸…cs9¢…NòÊ Ãƒ‚¾¢—À—Ö÷z-ÅÚAe`e_5TÈ¥¶±ÚªØçyÀÀ5âZÏÂÿê7Vº>³â«ÿÜëSÅu5Õô+æéÖÑ6ãäc98äóžq]Å÷†žÑá—HÐ[ÃRÁyu=:öX¯e)ÏÏ.íÒz–'9®:˜¬5eu7åeÛÖÇ­G,Æaþ(.ï_ÃK”>+^Áã_‰ø+gq,:íÀ¸×£†Q›{$³ r ÔoÈé_gé¾Ò|;ð®ÓDÐôË-?NŠÐAoi ˆ±€6ãÇZø{á}Ý£~ÑwO௠jž0×´ûŽþçí©+9/þ“w1ûÇ6€Îxà/5ô¦¥ñ¦É/çðм?¯xÆ7vÓI¥Økb9"ÔV5ùÞÞx¢.A1’²2TkËÍðØŠ‘„`·z«úÚ÷µ¾áájÒg{7²µþëþgMð‹Ãš÷Å»­>Æ =7F¹¿MRûK°]±Ï$k€å:!y>rŠƒë]ß/|2,l¼2ŸÚ¶Ö–r ¸˜Y¸T—?¹ãï’ø ™àkÌ~ø•nü¨OªÁ¬x¿Yi|CPÑtÍ‚ÐïqæÎNÜô dŒU/øžÐø~þçž&‰lm5(æy/”†‚XdD™«E&#=r­J…Ji)O›»ü¼þóËÆ×öõ}Ú|«¢üücðÇ‚œ|o}gQ´›þ%šp·‰^=¢9¥ÃÌáO#vdÿv»/J²ø2K-Ü6íÇ) ƒë‚GãX_>5|5ñ—i Åã }KÅÓ’HçW‹íÄ f’ $í ƒ‚Ëž†¼{ãĽ3â‡ô»ZHïDO¦X[µÅíá a"Œgå ¸³m8÷¯–ÄeØ©ãcM¶»_ï¹÷xlÏ ª¢ž×Iú+|¿"ïÀïÇaiªøÿ[·†]g^™Úy Ë;bŒ{*aGçÞ»¯ˆ›ZÕu×µ¶7M“Áotê …ˆâ0ç¹QY:ÄO Þ›/ Í-çƒ5ktÄF½hÖWJ‹’mË|“`NÆ8=@®kûk[Õü^þÔ4;+]0H×}!#ht 2IÐwÇ\|n_ý§»muÓÝ]»fEJ÷¦¾óïÛ¾§à?Ù×À:¾ƒ?ˆ¥~u7t­o$|o`iRP”®÷ózíl-æV¾v¹S, 0 múUï#U #'Íæ‚OÓ¥SÐuØ5+t³kˆä¼HA8^{ïíYþ"Ôu‹+•µµ‚ÚàyfBwímƒ©ãŒôêkééÙÅ3ᦚ“LÍ¿û,·éè¬Û˜‘€qÑ}«7JÑ£—âNï·¬Gƒ“Á±éÓŠÆŒúµÎ¥ s,‘C´9…3ƒŒýî™=1Ú¶-Ù£»¼¹ˆ]Á” {Wu _FsU¶: nmBh›í. †™|È&:ž½;ýim~|GøÑñºûÁ4‹}NýlF¡{=Ókk‡È¢[’®±ÎÕ Yˆ<¤ŽNæÿZ>>šo"›GòwºÜ Þ[ÉP@>üqSÇãˆ~¼¹Õ|!ã_ÂSËn#»†ÛcGs³&=àƒ’2qÏ5ÀåW÷›‘‹ä÷w?¾xFóÁ?|? _\éÒêðÙDºŒ¶ònF”(UŽ Uè®+¿db l'œg9&¿˜¸nÚ7E¼’!ãk{,cý"Ù‰-ÿ5×éðQßÚ"ÅGÚfÐuB9Ò Ç¾IüëÚ§†½Ý>¬dåïÑñŒÄIJùjygéÛ©¯ËÏw°|RmwÇÚ4Imwáë‹ý'Cº¼V‚@È dFL/ŸºÛQ†p y'Â_Û‡âçÄŸ‰Ú'‚5k=Ò vÖâ).-ÉyÂïð{VçÅÍjM6ÞÇÁš]†l.‚YÉ †ig‘”ó³bíäéšñ³:ËÙ8ÅžÎU…*ñ”£ý|Dý<'má_ÙOIµKÁæO#=Ä­ó4Ž{³“ŸZðÏŽ>±ñí‡à¿ ¶Ÿ£[i÷F]Rõe³Ý×Ʊ" o$H9<|£=}mà{ý ÿáÊèÚF±¤jwšd —Ö–wI#ÚùÔƒ‚kãoê—Z·í§~ÒÞZÚØØA [\®ÿ5b•ÉpùãŸ,Ç^ý+á°+K0©RM­ßkô?HÌU*y\)ÆÝò>‰Ö4gO çJ´ñ›ö<,1ÙDÏ–¼º”ÆpU²;W ðÃkÆOë×™{™µ·2è‘®ÕúI#¦I®ëÆÒøk@øu­iÖšÞ»¥ø†ÏKÌ­‹;Ýwñ:üû‡ HÅ|éð;ã£m¥¼ðV·ñ[ÄQÊÓë²Ø¼¶ðÊøÊy’²«È "d `‘‘]ÒÂT­NjŸÝÿ¡åa1ôéVƒ«Ó¯ü5ϧ¿hÍÛYýšuød­HˆºÎ  )$Ø1ŸC_<| Ñ­4ÿÛ_ ѤÀ–¨–h–DÄ÷LÇï>qœÍuŸ~/é>%ý™nSE{íYMJ8uU„[]ÙǵŒ‰*7)ĈJ°ÁV#šá~¯Äëß…ÖW¯ðßÄ3x!ÿk‰.™\fŽÕŽâ¤züpµ0Õ¨àÜg¦½tüû›ãñ4±8å*zÙt×òìsŸ|:ºÏíስ‹TŸH{—ž`ã ;ŽvÿÀp>¢¾÷²ÒôËŸ…ÖšuÞŸgu¥½²©¶–hÙOb¤`ŒWç¿‹Ô|+âÕƒ\؇ŽêÚú-¿yÁ°Ý÷‰ Ç*ô笱tê¹keÚÿvÿçÇ3£õ*”9t»ïnûíøžíû<ø*÷Áß ´»T±:zÆ‚kk`~gŒrø[§¯5ñí?àË)ÿࢷ6ðéÖ¶šÞ¿³ÛŶ+¹$r× @ô Ø–úס| ý¡üY¡xF;©ü!ñ/ÇZ@ˆ‹cNÓx ÉäÄ$e’XÔr jz|¹é\ÏÆŠš‹¿hŸê^üSw¬hò›;fVµxîLñ(ûNáº<ņ ñ^¥ =j8‰´´—à×ëêx­´c~‡Õž0𖕪~ÏÚ|—’ÛÝX¤si7v„[Üé’¬+A"á”í%XtefR$™þ¥¾™®[@óFÜMæ`€ÌÞi%˜wf.Xã©$ׯÝIñÓâŸÇþñƒ»ôðäÛêZWË…•C3 ”ÄÆ}ÚùKàUŸ‹|wã;Í;Hñu×…4Eœƒ¨X[Eq;o,$‘Y ãi'=F+‘—²“U"ó¾½OJ.º­ Ó÷ß•´ÒÞGÔߴƦjŸ¯nçeYtöÓáêGqí\wÂI͟쓤h—{I6ë‹¢\@€3§üõà—èâ°¿h /Š^ýžõÛøÚ߯Þ¹hÒ×Y¸´K=ZÊ@ÊDRykåσ*N¯ûDäsÿ<5ñ£ÄŸ/õÝÅ^𶙨F±[Yêz9Ôœ@W¡q*˜IÏ(G\æ•:TÞRUW-÷{/ø#¯V¬qQŒ©µ%ÑnÿàoŒ¬ç‹öŸ´Ô£LÞÏg¶æGå6ÆÉîÅ}Uªiˬ| Ô´ë˜Ìö×VnްTÎø×Ãouí+㭒ͧ'ü$²YÇe-šÞ´–žbÊÿ¾BFB7S’ã5öF‹ x­>Ùºø·OÖä½´1^Ù½‡‘ ?&É`Iëü,N}EUjº„”¶5¥_–u!5ñZžoû(Þ?‡u«Ë¹‰b{¹¨^\*ŽÇÒ»_Û"ß>²¿ÓÔ[Ý¥äMÄŠIJ  óÔŠùãö}ð_‡Â½¶ºÝ#Šâ>6u¿j­JïS½kkÍz+$Ö/¬“ÈyeÈ€‘Š8ÈÁ­§‡§†]‡ÄQ«ÉùÝmè®{±xœZU'ú«=}l{/Ç¿CáÛ–ÛÄQ‘ ¯ˆ£Ý2±„±.×m$ÿ²+믆òOâÙ¾}>á§¹ ÛeÎéÈcê98¯”k¿j~²ð6½¡]ê:×….¯åN²Ôî^â]é ?»I›25»üÄ+“´ðQÖ|ð7„;™Vh„që—(‚À|¤“‘_[üXøiá]Sö\ñ,Þ Ð´Í.UÒ_αÒWʃP@œÆñŒ)`ålnR8<šuèRUiTŒškÊú~ñ­R2ïòÔùGà÷ŒíôM>äÝköv¬ŠöEHä ß,F@çV4x'öãÖ.<1¬Y®© $7lð¬NÃÎXÓyP¡Û#`>SöhÐü=mãÝnëÄÚ]¦¿s$K ¼w°¬« u$+qÈ#8ëߥZý¦¾^|8×4/ü"ðïöþŸûöÓ¥¾ŒM%» “)Bz`çÒ¼[Äß³§'øö/´{ÝOÁÐê–…„ž ¹!¥C!$0<ƒÈ¯8øAâM/Å¿ ­´ÍOHÑ \X ]NÖ;5Ù8xÁä‚O$Ÿzá¾hW iŸxJk›éa±¹´µšâYì2nh6†b0èHÆvsÚ¾O‘Ë/¡:”+4âµVVzÿ]ϵÀñ*̱0¥^‚´žŽîêËÓwò6uŸø³öø—'†’ð¯Å­;X²·7ïʲ†ŠîÕ€m§¸ì»]|:ñ烬ì|C{ j±þÉ«éÒÝ!‘mÜ€³mÎAŽM§#•×ɺ¯ìÝâ¿|aÙðÇĦynfƒMÕåfƒÌVù¢Vs98Ï^A®/o†­iO÷U]¢ÿÉþ¹N–"’”ö´ûo%þ}»ùŸi_Øhž!Ñl.¯º£éw_nÓ®ôÍA´û˜¤ ToÚDr.‚²|§®2jÛÅ­Å¥Ã4wqÌ…û¡Gõ*d\óïŒWš?Äë«/Œøƶ3xwX²¯4}P|—œ!Vû²ÃÁe=Î3‚¯±ô/éš”iÈ-†Ñl!úÕ†gíà¡«^ŽÝ=z‹-Ãáå)ÔÃIÛª»Ýyn»jjcWÒ'šXîn4Ø&žÎì(á%\¯ç\ýì¶:¬wx‹I±»µ™ÃAÜ*V3Д•>až½N+Ñ!»µŠàG4ê‹&v‘!ì»ÇËùŠÀÖ¼=ky‡Ó#},&çe¾ô˜È(‡÷Ôf¢œ+$º®µ§C™Ýr½ÚÖ¿qÍ/‡Æ‡þ•£j¾*Ð"ESöu•níÝ}ï˜×Ö¶õoõ[ÒuÍAñn…w„¹~ñN0d…ð:ñÈ®cþÕ&µºÓõ«ír²ÛÜÙÜ-×ÙÆ0ÊÈÀ1çœà×I§]Ùjq,ö7~|2$Käʇº´2qÇ|}«IP©e)=¿sŽ–:n {¾[}Îèøã‡ÁüÕµŸ‰Öl´¯‡_ÚpMq¡[$°M§xÔS¹$Œ>ç'åÚõ¼ŸXÖþ|S†ñµ8xšXYÛP´ÜˆÂ1Ÿ6@¼°ÁÇ:t¯×‰aÔcE·š[Õc†i +÷VùHƾøõû-Hµãÿ†ðxŠ÷V¹¿ž²XLaX*»[…ãn(KË9¯«É8Žò,D½þ¿¯ŸŸSæ3îM:øXû½WoKn¼º/Â_®™÷‡¬ˆ´{…Y ½ÓîcdpÃŒ«²²ŸnG=kWIøyñ~ÚmbÛLð–µcö›uŠôG(Ρ¾VV2Œ09”ž¸¯A¶ñæ§á¯„‘éPÍqc¯é–âÈé—ºdÐÊ¥>ìg¡S‚>ðÎ+/NñÞ·«ø.ò?&«¾|ÇéŸ#ª¸fl©ôÇÖ¾ÓëIÝÙ~§ÁJDívQðïÀ¯Im6± ü6ñ¼Aóþ“ý™¦Xºa“óá² ê(¼ø#ñöÕouÉþüQ–f…|û‰¬%™åãþZÜt =@¨ê?|¥ë×6Úoˆµ³¦G¥¤ZË´“"…þYȽ#­sñüsø ’?jììß#5åÁò½fbü+¥8É^ÈÉF¢`Ÿ ~/Zé/³áÄ1m84~¸ä‚p>TÈ'§#<óVWá·Å=ÊîÂëz9šP²ÅqmµÄxíóH¬€ûŽ{ê<ñgâƒø‚C©xË]¸Ó]üÛƒqss!/ز€ÕÅxãZÔ¼KñóW·ÔµË¸'XþÒÏq2]rPÎHP1õ95‹­Ní;(Õîu^øñkÄö³éš/‚í5$²”,ö×^#²¶u•â[Œ:ŽÀÚ»K¿Ù»ö‡“IµÓ®~ÚËkmŠÛÆVJº¯›£¸/;sƒ€+Ãïá‹Ãr3FÖ®u¸ðc›UHÞ g,»N[~µ™iã-[O³1ØéÞ°VŸÎÄzjŸ›ïÚ®2„–ÀÕnç¸?ì½ñöæÞÓO“áìLÞMºë:T°Ä[–Ø~Òž§Š…e¯ÇŠx­°â+¿i‘ÁÏÌÅ~Ô@“§ØW•ÏñÅÏdc[ûX™v´v¶¢1õàð~•Ã[2_øÀMv‘Ipòy†Fc¹Ø{±#ó«S…›¶Âöu—Sè½à‡ÇOx+nŸ¥ì‡¾ÖâÔ.Ö5ê6G‰6U GÒ¼Ráu«{5ÄÒê¶dƒl·qÏ LÃÕ¤ N>¼w­[KïøG|Q§ë>¹ºÒµû ¡%­Õ©Š‰û”hÔÁ# •= ‘Å{Öñ‡öƒñmüÖÚ_Ä/]É$F)d´ºÚ$9ò*÷äŽ*Uz-]è>ZéèÏÒà“]g‡¾!øìÝ7á¶™i¥›”T¹µÐlÖâ;£üFeaµAyõõŸñgãV‰miо.K­»!Ž Cðíy¼ë6îœ'76Ä7%8Ù¿šüµþ|:ƒáç»8u¢}nòF¼¾~A’âC–vúgü ^gñŽòïÄx:uÂÛH.ZÃIä­—÷o(NÕ'Û­lOñP»‡þíwÂמñ­Ä tØ`”Üé÷ wM ÛUŠ®àuSžÄ`Ÿ >ø³yñ>ûMðψt›ËÀ’E¬øŽÄ13ÈžÞ4„ m ®d8À`'$r}V­\[ö³Qk_—âŠÃÔ…?µ…7%·ý½¾«sééÚWþéZUºÁ„ã}ãès_:ê~±ñ7í¤Gs¦ÆÚuë&·â<¦~Ý*ám!q™ížw*õÖ¬¿dÑí®ü/ãûtÐ|^-ŒðAæk-F52A+p8 ËÉä`žká猾&k·qx³Løya¨iWLîîõ¶‚i#¹O,®Í¿sy\÷Ûšô0mzSu9“o[ßFÞÖþ·9óÒ•_Ýò4••ºÛ­ý#蟈>Ð5ÿ…zF©£Yj¼B;(òš9ÀýÓDëÌD6eåHÍywÀ¯jËâO_ñ5ËÝêzT#I²¹¼ŸÍ›Ëˆî\òZG‹q=*¯Ž>0Ieà½GÅv:lŸaÑ¢Ô4ýHýžæÖåUD+,À‘€ÖÇŒ×øg®ü\¶ø1¤ê|/µ}*rgºf×ÁÖ.˜¿öfŒ&æë°È8ëÅT¡ˆtf®¹vÕ­úîû:´a:rQ|Ï]´·OÆÿqìtXžÊËX°±Ô!Ó®SP‚[ˆÃý’Hˆa*÷X €G­xŸ†>/ü=µñþ£}}⸳{×W–ú<óYÚ¨È %Ê¡DÇrN9®câßÄ{í7AH|‹»^“kÞt¼· ÷â6컲Çj€9ÜqŒs[?þ /‚¾ØÇâ†Þ*ð_„äxá¶ÕgH&¶ŽÏ³IIÉg]£œ‘\xltœê+ôJéz÷ÖýúØ×Ítß+ÞNÏå·Ku}Ïfñn±þƒ%îšñ^Ú¬&æîYFåô98qÍ|'Éõ_\jÚµãé w3Ms „±Vb]˜¼HÆ+ݼW®xoÀ:Åî“oΡkz”wP-¼æxÝ™—͆ÖÙ~ui[æ ƒ Å^¸Úµä¯ã-Rþ Ë?J½ºÞšv¯fÖ×vÁ‘NÇBAGïÏ@Fy®Œ³ìÔ§†[NŽçP¦ô’½ÿ¯M~g7§x6{›kË]f;«Fˆ4s¤e9ì@ôë[ž$Ñ_]Ñ!¸ò® fcÓŒcýë¢Óí+ Õ³F~e0 §¹õ'½HdrðÇ?Ú˶,eÎ;Ojúzâ¡¢>+VNZ³Ã¼7¤jº=–¥gwiåÙÈ|äuiWÏ z‚9­˜íî/n>ÓSo¹¹ô®êßL‘4+¸on'º—Í.&!G s޼ج}"dÔnã¶ÂHÉ´£¿ïŽõÓKDÌ'+³‚×t–Ó§Y ÔÑyªÞd³¿-»øG§Ð{Tš…ݦ™á{zâÖÝe PB’8¿ÜÝøOíšfŸè[Ÿ³6ïžLûg'ŸÎ¹xwXš84ýþÚÊÑJ„ˆÄX³wÉÁü1\uV·±ÕN]’µø­-<[zÑyom#4‘î0SÈR=kmjY.•Çïºù×wãk;­;ųGqr—wióæQ÷9ÿ¸í2ú‚L°Krû¸TLàúãî᤹ÍUj{wÂÿ‰ß| ¬Ù]ø'þ›W’}¶Ò]é­4· ØUŒ|˵sŽsï_sü|ðþµ©øãáô·:µÅ¢øŽù-õØì¥>iÙ É)Gê³÷. èkâï…I­Ü|ðt66v~dÚ„{ìÂ4àÅOüô• ×éoí6>$ð.£i¡ëž!Õ¬õ·†ÏGˆI;¬–îá>f ,…™ØŒí½xyµiF¤ºžžWɾwe¡÷‡–_ì­ü)¡Zø?Uµ·ÆŸ¬h¬-o­]ˆåd^YK`²>å~C8¯›|£ø—âísâ:]^ãIÑôíYmõ+ûP­{zËâ$fcA’I<ñŠúb×Ç6:†‰u§k>ñs"Ë—®Û,fOö’DfŽP7bT2+Í~ëþðßuÝWÄ“Y鮫®Ï'ØôØf»# åù¸U.#b¥·0œWÈV¯…·W´ë¿Uò?D¡G-«ˆ¢••=[ÖËNæv_¼'ãí?Â^!ðÜ^)ƒÄ¾Õ,å‚ÞïVPº®™0RÊD¨¡fB¹0 »G, ý’ü1¤hŸ³^–^CæÈÎ× ·;A'ïc¹à·Ö¶þ?ø²'à¹×4}OHšÖIDó\KJ¾^ ¼{T‚’í$‚ßtõSX|ñYø;µÿ Ná­>`Ϧh¤<ÞdC;ZæãÍs.ÜlQ³œï£'Äb*`dñIÞÛ[UßMÎ.!Âáhcã4n­}îµí®Ç3ûKøFÇ_Õô «‰!?aÖ!i3^¡“ G;A;€ÏlWØ>½I¶¸Šî[[÷ûeå–3²¯\çïûœ×ª~Öþoü²x®Å´VóÜÏ(rrãÊ`Tc¡9ë_+üñOÆ ÿˆWZׄ/ü+áVyÞMNûRÓMÊ^LÇsªDYH@xûÙ÷¯eøùã·ì²uoÙèZEÄͧ^˦)–ÛXY³ù(ç̶b«»’À´×N+ 9c©ÍMs-ûžn´c‡œ\+Û±ô†³àîŠ,w[Eƒ @Pª *Û¿5ó¯Æ/ Øiß´oÃÏYm]JöþH¤BÁT"aøÇL•Á>õ±û:/ÄoüñÖþ*±ðÅÅœˆ4«k\Ùå—(³É¸;n=®85ä¼QâHþ&ø)51&¥q¥«A¢Y¨—ȸvÙ"G1 º2z—Ÿ`军ūMy®»”1ðX)§ ÞÉ>‹UøŸ¦ vš—ÃØ«5¹X|»JòækàŸ€“G¡þÔÚÏ…ìâépë,a@`ù“^ñeâ?ø[&¹¯ø[Â~(Ñ,ìD·ºg†îæmVÒ0¿3Ä$.™p A°ÝÇ ~;ðŒ ñ/íQ¨Åà]GJó/µ#{ÿ ¤ŽmlQ׆)V‘ÉÊùy\`äúñárzëÚÅÛ•®ú|άny‡š¥8üQzé­¿Èûëãæ…§x‹örñå²ÜÛýœ¸Œ“•* \㞢¼öOñUš|5ŸLº‰`ÕíbW‰×Æ!#îîÀî%ºò+§ø§sñ?Ã_¼Aá_Ágª&¡¢K>‘ã_ »$…ù’{i‰kyxÃJdåzW‚þÎÚö§®éZ‡…uàø4m1m¯n.4Ø®›[‘±½æFÎalc¨n¸eï<¥ÒÀU£ˆz^úkó\ÏëXêU0ªîÖ×K¾Ú›Ÿ´F‰¦ê>?ðß‹tÉÚ;ÉïE½Ã1¨'~G~IÍ}yðõôû¯‚Ztq–P+ÊcË7œz÷Í~|þÐ÷6ðñ¶šý,ÊéɨӘý‚ÿÌE+!‰òñlË(BǧSÆ>øEá…×¾ýªïÄÞ OMh¢=^ FD6röhàÊœ|Œ„06kºŽð±æž—ÒÚœxšµ«bÚ;I-SÐóïG}á_ÛÃÆ×e`ÑåÔåKP‘Ê\mrN9±'ë_oøÛÃp?Á]xYDË5åƒ1. ÇAžyë_—Þ-ø±âûAx®Ó"Çóêi“²§ÃöuXÞá£';B°NÜóžM}‰¢éž?Ò>\ëÖõˆËhßÚš‰à€ÛÜÄÈwµ¼Æ¯‹W%Ђ â3,·žTææ¢´]uþ¼Å–æ„gÁ·¿M?¯#Ê>ßÉg?Ÿ8H‘È’ÎU£b>œç5‹ûEZÚŸ &®Ñ¡Š-Z2fnX!`vdòFkǾéqj?ºÐÿ‚–Ç>›kb#×mÑÊP­ÁbÊÃî†Æwô WºþÊ~ð΃ðü[+N½—SO3QžêÝe{­ã£þHÇ¥xgí ðÃþø•¥êZE£YøQgÞAç9Û4£1n'+ †;P`*ä W‘…Íp1ÇÎ’ºoîåøüs’f˩ԓM/½võü>g×¾7Ô>üWýŸµïø_ÅÞñ/‰ÎK¨¬aÔ’Y­î ù€9!—"¾Hý•!V¥³O]v¾§‡ˆ¥ˆÂûÛÅê¼ú?ëð>Ûý£aþÍø÷àÛ^Áfש-Š'.Bùœz—šï¾|að^“§·‡Y3”*ÅË‘Æ1Z_´Êj_ jøÖÖ[½EÕt‰4ñq&>ÕrèÂD‚WÈÊ2FpbÙÍ|å,޼(Öù©sj¯Ñù7Ýhöè}œ¸Ÿ SF·#&ŽÝWš]ž«~§Ò?~ø?â¯ÃíRñ”s=°û$÷Ñ(ñK€²#õ$ØÞ˜&¾3»ðÿÆO4³Ðõ-Gâ…®&xôû›i7M…Ú»¹,@ݵ®A_\ü-%ñÂËVOE¤ËuX4‹+çµ?ÕÜy€¼­œ’ÊÉÆ02ymgö†øvÓéþñ¥¨Y|VÓ®¢¶ºÓcÑî~Ô¿+“fß-“æNœšò0ôqøzn’Š«¼uvóÛOT{ÒÌrÌ]oh¦éO¤•ü·Öý™cÀlotÇÿKx>ÍÅõ…ú4sZ67–7£89é‚# ׺éWÍâoí›ì‹#+@–W>UÔIþÖî wãs^Cñ7áƒñKÁö>/°Ô.ü/ã*0¬éȾeÅ®s²`A"1ÈÎÁ9ð+Oˆ~5øYã&ðçÅM&}!íÜ,#±Vk Ä?vLû¼÷¥sà N¼y°’´ºÆú¯Nÿ™Ý[:SäÆA8ÿ5´~½¿/3ïàbŽà{¹ä+Œ&¢…¤áÆŸ¡4Ï*hdžæÈEw FÂh^¸YÙÜ0Àúd~5æ^ø­cªiÖë,ðjp°ÌSÄÊN?¼Cר¯PC¦]éÿmÓnnï0–5 ɺCzäáÃÕ¯ 8ÉëæŒóQR„4{ÙÿW2!ÕtˆïcKé.¼?8;M•ÌÌÿà$qn+mŒDÁ-¥Ì+©1»)*Àw ½ªEÕ¬•`¿·¾¶`A3Cæ`´Þõm?RÓ'ž+¸õ‹;ˆÑ’Kk«w¶’7éóFà2úò9¯Ý›KGÔKOa}­†Üá•G¹^}ù¼—âÏÀÿüKŠëV×´Øÿá&6Ÿg³Öôûó ÌUXă¶EÉèëÜ×nYŸÕÃ¥G¶ëþæa›ä8ldý¶V“û/Kúyùl~®—5ÍôBwûÇd§©>•gPÒBê“ùhÔ…G €@½W]øâï N–^+ðî©áëý¼Å{Ô|J8%XwáŽ23Y'OG‹̹'¯'µ}‹ÇKt| è8»5©¹á]>kB²©"aæ ÷¹kíŸQ™íÃ&dÎLW£XDÐè°CÉŒF0 r+2Eq|í·p'A®YUmÜ!yþ›"DF$sÏŸoejeHnž;Vcÿ-F{“^žðŸ&á%ˆ361Î6‘Þ´ô¿j%µy,!ŽtQóJçd)þô‡úÕÒÄMè[Š8kÿ ¹µ{K¹£@XE‚Y{zæt ë>&Õ%µðî6¦ã‡’5}wÊØUõÆsìké?ü;Òlo–;;GÇzÄg˜´ßÝiÑ7¤“œÇpá^¤ž¾º°‚/xŽËÃÚ2 .…á¸ÀLz#þù5ªÆÓ Ÿ´‘х˱—û¨7çÓï>wðßÂýNÖ£‡RžóÇ"ìO#x›°–ld\m_ZúËᇋõM ]KPÓ>øp/üƒ4¸ç2ÀÞí¼{W]à¶»ðί©è^ðöªÞ[SuoyÌÏo(?¼¤sº@ÀîUÁ ïä–ÆêÚÞâ6“[ŽdDà±RÈ;Wú×Ï«]{4’}à™ö_ aÚæ¯&äº-ß»ùXà¼1k£x/YÔ4 *Îiá·µûX×$µß6Ì€ëq*.)9Œ©à¦½í­%Aq©ê/}€DP6ÈØuŽX~U KÙl<Ði¶£ C€G¾@â¹h¼ÏØiçÃðê>+h.JOfaY6Ã#ÿË0^xŸ”èkÀ®Þ&\ÍûÞ}ÈúštÖ—,cî®Ý?ÌöM{V’ÃÃ…âRìÇ÷q~bx_Ë©ükÊ4]*×R×õ-icHr;™#Ϙ©ÃÏðîÍp_þ(Iaâm/Ã~‰üMsx6XÏjãÈóäáq‘€ 9ì9®¢|jøcðžë#À>5Ð,l…Æ£¢Ø¬Ö·vˆ§,"v%n ß) »ÔW«—äõ§BSO–RÚçÌfYÝb£¹£ß™ÔE«Xiž/ŒÞMÔzLðF„n¹”ðˆ£¿'$ö­+QðÞû*ø×ÄŠ´}CÇš créûù~Ðù+l«ÁDU8 xSɯ“õˆZ‰¾.ÜÚèš/ˆüRú¥ˆ’ËIÐ-Lwº³Hí;±Ä?v¥@ÝžsȪÛO üGÐôáïxGÅ2áSOñ%¢„ùF|Ôt%fP2J“‘Ž„s^…™SIÍÞO_’òìyX¬òUŸ,#hþ­wî}‡£j:åïaÖüEçßêöqYiòÞ ¶ÑÂôÎ3ÉõÇ5ÓZņ~¦8’{”ó$”®3žN}N{×Ë ø©ãmoÅ caà}_â9Ѧ–#>“,vöˆ¤ž|ÉÜ 'Àç8¯V'ô«‹k{{í#X³ÄW:>­‘sdX±S$Ä„«"Vàšà­‚«J¤êIÝ¿Átó_qëQÆÒ«B«(®Û˯“í¾ÆOŒ<%¦x³ÃEýÕ´'ĵٵ°¹)ºD´ÜP=ö^í6‡k០GiHc¶µBÞ‹ÇùúWÊøÃâ‹ï3IaðÇTñ½ö„¢Îö?\¬¶Vcp†IBb1ò1Ó5î%ø—Š´-F i¯y®GËè:Ã=Œñº˜æF]Ñ!Š•l‚ 5¬ðõ¨PQ“¿]ö¾Þ‹ð9~µK‰ç„löÛWmýYÃøßÃ#ñWü2² k«ö¿Ôヵ~Lý8澆Ö\h&ЧÚVXˆ 38 ¾¸õ¯ž´ŸŠ^_Šj)ñÇ„4-ImUÊóP_2)XP“€8>™W¤|AÕ§O…¦ûH°°ñ¸°3Úéïx!3¨Ã3‰0T|¹ÁèOçÖÂW„iÓ©êßK¿?#IciV«:”ü’]l—cÍ|c Gâ¯Ú?ÀVRG Í¥”R_L òdÈØXžÛ‰ãÔ{W¼ëúl3xôÙm­åFO!!ØZ9†Ó¸À¥|S࿌óÿÂàÕ|Soàÿk–aBê £Y,ÑÙB£ýVöÆò¿1"0NsŽÕïšÇ/kž·Ö<Å ¤‘ËgdÂ;›xþPZT—2¤ò§ž8Í^;*ÅÂãt¿6Μ»:ÁÎU%7gú%øš? ¼ewûc_x‹UÓá“Jð•ŒZ~†Œª~ÏÐÉ2ŽŽõqÔ×Í?µ.¶ÿ·WŒ¦2yvòÝCwç6~q$ví÷1ŽŸ­}ÙðªëK³Ð®üû½"ëÄZÔ“½³Þ Œ£–eäöõòŸÇØnµÚ·ÄFF#ijîT³H²À–ÚôÓƒ©UWö3Ù/øÅžFk u(:ñë/øoÁ€¯î浸Ž+ÛbH‹›v=º¿Ýç"»Ã|a¸aöx˜ÿ«$àœv¯7ð³j÷×÷¥í4û39P'²UÜPTÄ ÀÇõɯDKHíØ"I)ÉË,Ñ@ì:­}nû¶>—5ʺô4R¹ŠY¤Ú‰å3ÇÓ«·¹šMhFÐÏqRJá³Ûkkpˆ"bwaP b eúËšçµÍEl¥›NŽ˜…XI'nqÔ‘ü»×[ØäKS´k¥ARXÝm8¾ï~õÇxîå ðøþθݳ,rŒ8LqŒt5ÖiúåÝÅÄI>›$챯ï1röæ“Å:Jjz~ ÓCiKQ$Š˜ºƒ“ꮯMªQw>ñŒ‹}¬ÅzÓ$Þ|j c!˜f Ñ´»›k7¿Šæt¹íXmHÞUÌ9þªÝñÔz?‹¬VhìkS41A‰#U'cgùÕ]?QžòÄÂÒ®™-¼¾mÍÄpífÿc0+ª$ ¬Sä} ðsEÒ¢øÏðóP°Ð5íkP¸ñ¼PÙÏ Hâ|02“Ÿº‹¹±Üã½~©xÖ-2×Z´‚çËó.ng¸0—1°ŒÆœ^@ÏL“_’5ˆí¾8ø£‹ÄòHž%·UšÞÛz”‘Šû‡ç;²1_®/DðÜZí®‡­øŠkF(®lt«a-ȹ|ݹ’5;ˆñÞ¼,Ò2œ zX“gøª1w I'‘ÍÝ…¤·@;&ØB°8àõEyì»á)l¾^jW°¬Ú¥õÓKuv\–‘ú³ ÿâp½†*¯~*èð‡iÚî…¬-¤’ ZçÏû$ÚAòX“,.»ƒò«å¬7æ¤ø7â߈1|›[ѾøŸ_ðŒK"ZImz‰ ÛYÒÖFRFq¸: • S§''kÙkeùž¤«)JŒuWÛ_êÅÚ7@Ñnþ øší6Cw{öhßåýåÓ«cœuÆpIí_Oü+¶};öwÐìŠD»,ÀrO^8=ëàO‹?tGFðõ½´o¨é÷³™bDwû|¯€}™mÊýòrŽ‚Œ0G§Ùº7ŽuÏü.²—ÇŸAЦ|OKÕEòX&ÁÍâFäÇæ(þ"5Ï‹ÀW•'ýt±ÕGGš).–õÕ»Ÿ2|að5–§ûWø#Wi¢o"9XG É,¬„ÊÄõä…ükÑSÄ0Ý|9ºÒµ %R[Û‹ÑÄ"*Íòùoœãv~œW…üAøŸkÆ ôë­ûwZûGÙ´;I½ -Ä D‚Y )錑ÆrzF‹Ä­k¨èúWÅ/§€tíMÍ®¬Çx·ÖrK"•I&ᔃÆT¦GÞ$J,DhÆ2×Në×E» T©N´§§£ôסæ§ÃQéß·w…õ=*i$Õo4h£Š9â´%NÅPz@á‡õŒ-ÓÄŸµ{KÛ¹·CjeY›ç;”àŸF¯Žï|s¨Û5ôíÃ×:ž¿cÒ  »Œ€ªN&’B0¢@r”Å}¬øö |?ñ.⯠Ïá¿Ë£Ís£Z]^,–šŒ‘FXÃʘØÀ7€@$uÊYr'½»™Ò%Ëϳÿ†<Ëö~±[(ä‰íšXa¾˜(›ä%‘ÕY ûÙÆxâ½ãâéðOT±žÊYošî;ø9ˆ„_”c®âqìFE|õðÛâUÛêZN†þ×|s¯­¢Á“ ¬d[FÀ¾ÝÌÊ:žr ê+¶ø‰ñ+ÃZçÃÆ’Öété­5e³×ô½f3õ€Ú@Êgåù€Ãr§œuÍqÔÁWúìj[Cxã)<©ß^ǼþÌðAð]2"–š†¡|Ó@$Œ•¹òÛçEoïð®3âIûHø[Ûj·ÑA9*~ꪰ~ÎF?X?³õçÄ ¿‚Sj~ ð}Œš$2Ë-¦©â ]㸹*ùo³Ú¬d *×fŽ20s^wñwâ²Z|HðïˆÜ‘¡½Ô7v-i|·28dr»xbXtÚjž ¤±Üñ’ÓF®»lD1q§äpzõ³ï¹ú1¢ÉÞS—¬@³(år2Aõë_œ? ü1áï~Ú:ÉØ 渋pÈåip; ØÅzg߉Ÿ´¤ÖZÿ‹¼9á]CÁ7‘ fÑô×hõK™€›–Lå€ùyŸ›ü$ñ†­ãé|_àT†9í5W‰c¾D/‰-eHd?) `OŠÌøáψ!¿½Ð|~¿ ­`>e¤6¶qÏté·‚æMË´žBÏ¿jâÁá©PÂ7íSŠë®Ÿ-Ïw1ÆTÄãSö.2ii¥ßÎö*~Ñ>Ó4Œ>(Ò£šeåoÕCÀÈ=‰WÒ!Ñt¯‰·V²Þi¼¶ú–›ˆí5ˆ]p. $“ËÊÎߘ‘Ô`øEãoŽZ‘ñ…>?ˆüýŸi¦µ‘?2ËОkó«âuãøÏö¥Óµm-gÃGÄö¶‘È5‹gé’|êÀÄðNM}¥áoÙ‚o ø-õ¯|Nñºë‚.mõ+sa|ùÖX㎌¤ëÔW6aõZ0¥íçitÒþ»lz™cÅÕuUsEïª^›îbþÎ:­Ä:}¬S1CoºÌî=Z'(O·C^»ûQi°Þü¿Ô@±NwHãêsÒ¿6t|Að­ÕÇÃ߇ðA¦ß ^â½òÃÉl¦g$FS–ÎÆ ¯©üWà_‹6°×‰ ñ§&ø‰c=§œö–ž©q¦Î®$ŽæÚaÉòcpG ‚¸!¼šÙXÕˆö©+èµ»_’=µÄ‘Ž_õWI·Ë¾–MmæõF‡ÂýrÛÀf•.±â è¾ mÚ8îµEl·KJÐÇ!F';±Ç¦kž=C¥Âýðö©¡\鯳dnD6“+ÄŠ«(ÛÕX67{Vïì½áß ê~%}OÆšuŸ‹5«¿•[PŒN ‡¶"¾B¦z(èMfþÓ~Ò¾xçÃÚÃÍ!mt«É.'ÓmdbðXHä4‘ o»ã¼'Ý +éþ§†ú﵋jmYö}…–7ð~ÂVpNëºî}·ðûÃZÖ±ðSÑo/,u?ÝiÛÌVeH¦+,`ŽH`óÁ9Í|Cðæy<+ut‰¶ßU[!¸Œ µ¼Ì’€{´gû×[ðÿàÕljàý¤4 /HøÃ£ø’ÔÙ¤Ú¤„ÅcÂ:ư^0vq»ó^×û)éžsÙ¶™¥jSjGιkëd’g•,ÌXt9#è1YRöÃ^îV颩¶.¥‰ÖÊÿ5ú}¤[kßÿlé^M5´TW 5ØH¾Åp Œ:®å|c#«Ùþ0ë ~7üAðω<9¨ø’ÆÝî!°ƒS†{«yÕs‘ƒœ‘Óò¯ž?iƒ·^øËc'†íãOß[D¢Ùghã®Ãì˜Ï©mÂ1Æ3Å}mðï@ðÅÙ¯þ}_ÂZDQÙÂ"³–U¶šÎDR¡ •0ñ¸ç r+¶¥ZS§‘oðüN¤*8É+Ÿ;~Ï?tïÞ¶³¯j0é~’/Sžâäy6¯ÊÄŸBàŠ—ã¤¾×~1øKã§ÃÏè^#°µ¼‹CñKi÷!öy„‹y™s•Ã6Ü‘È#ž+ÀµÏ‡ðx+öˆ>Ö¬o5m 'š+K9eòã’äRf_ºçã¡'cq½Hä9®{Ὤf›÷ú3Ô…E4Öžå¥ÿ {ƒ~-øsAšßE½mW^Ô%‹÷º^‹¦Ë¨N"`~gXؤØÏlš›Äß>kÿµx—ÇÞ´•¡’Ñlµ»‘gt‰·|^l2âHœ) Cr¾õῼgàß ü5ðÆ¥k<Ú`"ZÚÄe»¼¸ÇÌ4å~pCR~Ôú„ürº/ÅM"ÇSÑ›¥k÷SøKR–E[¡vÉ8ì×ÈûØ8íÍ}Qð÷RÒ¡Ñb–ûQµµÑÄHRYfX¡ÙŽF[Œ⹿þÎß>#èZ¥œiÑjË}']Ó]Ú-ß&Å~WØÄÆG¦=kž–kJ¿4q”ÞI-ׯ{}æï)­†iá*-UÜ^«å­Õþã×t/h—wQÞÉo•ãB"v«€È: áºâ»[È#Ô-Öøfêës<*Á\r8åOé_Úo¿Œ>Åâoêñø®ËORÚ·„¥fyc q#[9çràè3^‹ð»öÑ|Gr°iš£iú¨½ŒçdŽHÎBžqÜ~‡5Œ°•éGÛa§Ï.ž«§©má12öXš^ΧÝG×Ñê}ªø[Ä7~-³ñ ¬·W'úÝ2q(ØH%Z.Ž äq]t6IºV–ÚLeƒ $¼¸} Ö%Ÿ‹mnìÖäLúf£¸šÙ¬Žx È}OcëXZŸÄНÚu߇jö‚R$ºÓ§£ÉÛ£p8äŒõ®z«ŒJÏR!Ë–ÉÞ7ƒëýiù|Aø[áO‰ž²Ò¼AåÅ­¥Á¹´ŸIÔÚky •,îž Ê‘ƒé_š_>ê?¼]¤\Øk-¥Cpb°ÕnlYb¹Œà«lÜsƒÈä ý ð·ÅOø×Å'H°’-3Ä6•t›bœ"à9ŽÜŽ u®ÃÄ^ÓüKð·Xðž¡&¢ºn§jöÓ²…b¡‡ß\åw£¡ªÃfŒ•*Éòþ^h¬Ã&Âæô}½¹û÷Óg®ž§åB°[ª8ó$X—nc®išW†õ}nâOìÛ) @åî$;!ŒwË?*úKÅߤø{}Ûµ¯‹ìåG63\±Ãj±®\Ýn;BÈaÁçŽ+ˆðEçƒ>!O­Ûx‡R_K¥Þ†‰¦Ü¥JŒ¹GPæá9*wœnSÐ×ܵ)a¾±{ÃËî?1Yf#ëŸUk–~y—áéz¤·zt–5žÌ3Mö‘o"ýåfyz¥zøGž(á7ׯ5‹d»Ñ´¿ô=qتÏï¹±í[7þÔí¼Cý¯á« /BÓZËÊ»°”ù>~ÎceT+¸r:zU½*ïNÕ´{}CA±šõrLÿ<0á•¿…H ƒüëů›NJô£øüϵÀpÞ•hóËÏo—ü˜bÎ[k— ðáÒü$-Y®-áa BT9 lnvH5Øèëá¹t{=OF·¹×ê!$3\í“Ômè<ÛÖw $Õux­`áùÈö$ñ\ľºÑ“K“áÝ®¡$ |íªEs~D71ÊÄÈåœíVV;ÆÐ:Þ¼õ%]Ù»K§[ú³ß°Êö÷~ä½òáõ9K Û¸t¸G1ó² à~$Wý›s£¾’þ‡YÕfµ»qw ÷Y†hg4¹Îv“½}0T_ø“ÃÚí…åÑ7w7–wksir1åH‡²¼¤`ƒžA·u­Þ2¬m-¾‘mÀd#'<:ªtëS›‡/ªlM AMËN†œºmÝÍÈ¿’åïmfòî,ÜŒFq‘§æV çº8Sš¶V±i– c|ƒgþ:95óoˆu+[_}¯MÔu¡¬ÞF‘K,R•’3-E‚X†ëœä:q^·¢x¯UÔ­taã}Wð¥Íø)˜G,Ã8 L{À,»¾x«Åå•#5÷[‘€Î¨Ô›¦ï§^ÿä/Ão…Þ¹ý îVÏH±²ðö‚ÂK[;h1 ¹ÞFSÎO¦Ez/ÇoZŒÃ&£Ðl˜!ì͆2qÇ¡Åt¾ [|¶»”>§®\<“Ý´®ñ<Ÿ9 3’B@+ü[§Í¬øŠÏOº°…⿹]AaFÂź”@8-ë×õ¤éÒ…7+½.ÏÍãËV´êÆ6]©ð'Ã2Xh7þ0»Ò`Ó./ËB ã'¡oî…Æ1ÔäÒüwh¼IðÞÊÞ+ÎÔ[V‹É’D%¢œ«uéÎÑü9¯A×8µðÞ¥¨A£^^¥¦—g-Ë4:`=-ÔýÐNHl ÷ù<¿ xaóqjˆ¬¬™BäŸþ¿JóëMBÛÅÚLJ´­&öËR‚8 ýÝÜo¾34žëŽE}:x‡Q(·gnnÖGÇ宄iÊS·2O—½ÞŸðOfømàÿ iŸtNÒmì’¦i}ùz·=OPNz×È?4 ­[ãÌZ‚$ƒA×ü_¨Eo{{enìö¶û”JJ÷$±ÏSÀ÷¯¸no¬¼1à›­÷B4†Õd•UZG;w{äþUáöš<>'ý¤á:IVƒE³o¯mÜo³gËÈ|Çò+–8ª‘Å)-µo¶›~&Ø\7‡¨åº²^¯À«}û*|,°øsc¦húuÞ—âKUv(µÔ¦‹QyÎò g$€~QÓâ¾Kñ‚üO.« ŸˆOxm“ý*à¬~hÕíèJޏäšý+øâm@ð"Íyi¤ÚùñZ¼÷µAv “ݲ÷5ñ7Šõ+mWÆš†©§hÚ…ÔW1#­X0¨*ƒÐc>´òŒ^.µY{Få­ß~Ëü‰Ï0øJXdé¥謺®ìñ¯ x3ĺ‹WRû=žr¤ BÜy’ÉþŽ«õ5욺Ü]i“y/pfxÛ Þ8éŽÂ¸+hõYãÔ"‚4mMJ¬hó…3ÎsÁlWe¥ÛêvúL‹9¸ž ßéHôêá__†œOÅBOR‚ëû ^iÖÝ#› ó629Çò¬›-ÿeš.!€ É“Ìù3Û®??zÔÔõäŸGŠ4Ç:³.Ö^ dò=Ò²ãÒD¶Ã¨Em,—ωW'zg† úW}ô8’×S¬Ó1Ÿ4LŒÒ€a#oý¦|9§êÐiwWx…B!\°3cïÎGÓÚ½³á_Š/|+ðrÎÀD÷0 ÛD× “µ¸àœžyÈãŠùËâŒt½Sã¶Ô'–]åæžYc¶“zVW<0ÇñvɵèøáŸx ´ý[Ð/5;xݤ²´»Y-É\ó’§ZòÖºÁFœÓk©ô•q4e•H;v8/ø-|AÿðV¦ÒÛ>žè÷¢2€,HZgp=ILŸ_­}çã»m>çàXŒÞafTˆ•FíÆ8é_œ ñsÃ^ý«o%ÕÆ©ª^Ûĺpµ¶±–ir£Ì™V%²œ  ÓÍ}QÅâ?€õá›ëk›mb¹ÔmͬÜÙ‚¥”I€ãÀÃ@¯b¥*ÁrÉ7¥+8KδÖçÍ~øåþÛ+u¨âþþ,\;#*«/c’ÙõOÄ=*=gÃz5”i<‹ ÑQÆÐóD¡Ðîüß­|¿á?‰>_ŽÚÇ‰í®µ=Lj„X[Úéw77f%ùDj]#«€1Ö½ŸTø…¥k fÖ ñ·v:Z«j?g°^ÙªÆ7·À”>ÒÖPpk“F¿,žŸ™éa*P¼õÓWêø/ሤýµÑ„¶›Ì9Y¨}¹Ç¸Å|ÃðÛâׄ<-⋯êš®€º¥ÜÒ"jS¢Jñ´›Ä›3»$cƒÓ<⾘øñ/Á7³Üž0Ðõ›=OAk†)>™¸ʲò#Îã‚Ç…9'5ÍŽ¡‰úÅ9ò»+"ððË VË[¿‘óìáÑañòH(!‰7» W'?'¡à‚k¤ý±¼=i~Ú&£¤Ú´n°´wÑÝÆ±Ë+ q"üÄg9«‚ø!ñ6×Á6pØÞx_ÆšóiŸ.¡u h²ÞÃn‘J±ϰ÷®ÿö‡ñö…âO…¡£¶§¯øk[¸iZ¤vûaŽT;îbpØxæUŒþí€ ¡êÊž'ëœüº5¿âx>Ò“ÂrßÞ¹õ'Á A¤þ˺E´²›©Šee8ÂÀõQÐWÃ?´6Œ øËm©¢1\®>e;­ö‚[-Ók{w¯£¾ümøm{à{?\øßO³ñT)äˆï#Ùå‘Áp+Ö¼¯ã?Ûÿ5ŸØ[Ïye£›µžg[{Xãf}ïÁ)È<Ž0kÏÃQ­ t¹£mߪ=MZRÀÆÎû/Fvþ ¼–ëà> ÒM(’V™Ð|Æ1€VA÷Hô=kÀ¾ Z&ûhm"s?ÙmïHèÝq‘ÐaIÍz7ƒ|]á3àý B¹ñî‡c燂 g‘­ã¸V`ËäÉ .Ou$À¯(ø‰âH,>;jzµÚÜÛG£4ZlóÈêcž#pêAÉ »»(aªG'knsb±1– E;½ÑkI·¿ý–´w2n{ˆOÚ#!§W†9ôóœõ¯gil|?ûCë:l‘Cv·ÒÛÛ±o™˜·}xÈýk×>|tð׋¼5¤xOÄ“k¾ŽâÔ *ÿ[²žÒËPp£jG$È«$‡ûŠ~a’:ùÂ>3_ üm×5½CÊÒ/'Ö.E¥’qq1ŽfFX ³0PGS fªFKsžž&0•9.‡èïǽ|Qð[Ò¥h9¢9g^zzñ_ ~ÌÚž«¢|\[+n¦±ÜË-º¨)(ñ“Óµ}­ü_ðÏŠ¾k:(ÓõíÄñéÞÙéåƒXM/-nÏòÉŽ;“rî"¾%ýŸ¼g§xzö;‘m1‚ô¤’»ÌŠmà à18Û»¾zW—à±ðõ¡(ú/‘îæ9… µ¨Ê2Ûwú³ûbxN?øÇÅDv·šÌ—Q±ækwØÙQþò.G±¯Ný™µù¼Qàìï ´0éòÆ–®œÈ@qÏç×cã–¡¡xûö-ñf¿á[KÖ.£Ód{i­nt–DxK!Æx#>¢¼Cök×?áñTãP’é-f@„Ç4fN ¸9Õ„(N¾Y*rZÅ».Û3­ª¤'¤–¾fßíC¡GeñD× µŒjƒX„yç®2lŠû#áN«µðžÚyfY®3¿3Ðô¯ÿjíORÔ|!á[Í*+ìeÕcŠäK5Â8Ч 8Úsýî)Ÿ >;øsÀÞ¸Ñd´ñO‰®!˜¿Ù´­.k¹ pþZ‘:í''°¬e–UÄåÐåW’ÿ3¾žmK ™Ï›H¿ò3üiáOøöži|•ûF£¬Å++ê?ï¬×Ú-µïÂO± t—MòÚåÙ‘þ\õë_ |~ñm‡Œ5µ´KË;ÙàÌM„‹dÌ¿0ìB_JþÐ:M·‹ÿeZ÷m½õî“ÜX—ûáœ{ñÅ|mñ¯ÄZïiïøcGxín5yÓR³¿hH"‘@~‡C©ÿ¾…}3áíU·ø§¥xÓVñ=…ÞžßÚš‰Ó,„³ÀÈ£ÊpNvTÐu¯K%N0©9Zö·üÇ•ÂT¯*¥¸ÝÿÃw8ÙÆ÷—ßE·¹†'·o61€E#!HèõëSþÑÓ­þ h¿4´UžhÛTp’E0Ú³ ð6‚}°¯ž¿gxè>;‘Zþ^PmÚ[ˆ”ÆT9å”ñ¸út¾Ôý¢4{¿þÃ^x[]– ­ƒêij#’;Û"zԮ߽‘އžiâ¥ìñ´ÚÒû½~ã,-7SQ=|»yžßð İjßãÑ®ïá»HíQ¦Ó×­~|üDø{¥ø[öÄ»Ñtñš<_jHÌ{RH¾|œaJç¡ëW> iú—õ[âßë~Ða ,ô¿ ßɧ*yi&Fç¡à×ûCØxÏáçÄ}$^kzŸŠ¬ílî`Óõ;éwÜ^Z;FUn4©Âï䲌žrk¾j”§Ê§©ËG ‰„yÜ4>­C´?¯´f¯­»œ0EtÈãæ¼Sàìº6³¥ yó}m<–W|¹Ur=OåÍdü"ðOˆüq &¤¾7ñżÊÁucr‘ÛXJFH6»v¼d`|á¸äy¯¹ñ‡‰¼'ñkRðU¼6Ú/‹Nµs Ωq™Y‹ªg#pÚÊ:(lsŠâÂåÎõ"¥{xÜo4iË–Ö?Tþ4èQxÇö`Ô‘í‹]-´’@q‚®«ž¾¹«ã¯ÙûǾ#¶ñ¶…šÌ“Î~0är?]_ï ø÷\øk¨ø‡Gø­âÍoÅÏ*l5[¥“Lž0»B‚þä$‹läM3Å?ü%ñ"óÂVqYXjV÷Oß^£K4’[ r ã$€F|RÂáé©Nšoî#*³„*84¯?km]?Sðw‹l¿ym%âC5Âd¬2ž#<ö'åÏ­t¿ üP·ZzZOŸ2ÝXîç·߸®câÏ…üsì-y©ëÞ)¿øŸá¹mcžàÍi7š5Ðexn-ä„"¼JÃç…×$d†ãkxo«ïŠ^(¾ðõ†—{áÿÇt­³VhZíæ Ø}‘àç©4bð áýÙ-žß™®(×÷Óz[úèiÚè¶ß?n6ñºÄšuÕÓÍf¬œý–äæXÔõ9· aë_z|CÕ¾üsý•5ÿ·‰¥siæM-åÒâÞé>äˆN3Ã`üÊH9Í|_ûFèž,ð>™áMKâ=݇‰Dw,4_húa¶y )ó,î!,ÛX…YÔím„¸¯üÒ<_ã?êz¼Þ;‡Âdù«§ésh¢ò0­ÂI1 žˆF;ç´WºҥŠs\ÑÙßOëúe*®’©AEòË¥µÿ"ìý®YÝhÿ,¡×5­.ù¬’=H,°XË˶ˆÚ‡Ì$ ±®õ§Æ ëþøw?ÅŸPiºOŠt«)RÑ!°ólõ‹S‡‹tehLoV\3`©ë‘ùáñm[á¯íE©Ãoe© ¹¾}66šÚéöìŠæIm’"ÊÜ«&2xcöÇÃü]ñ^‰.¯à? ø,éQZ#É ø›Vt¿½'”µÌüXý˜¼+ã/_^økÉðæºKjšt¶ÄªÜ Ù™>\èí½Yy©¯ž´ˆ7/ÇýWÀ~ÒÃÑ]k7G®€6†¬Áç¶1©ý㤬Å0BÝbÏßWz_Š,>øGXÖ|i©iMöåе¡Avˆ…f¶VT'eÉSÈÈâ¼¹eº©N„”/·éä»×úË–,Brj×Ónþo¿Sâ}Løùá¿Ýi7Ú\¾<Òt8’àG©£,l LÊùISÇV5ïÿþ7Újöe¬uXu"cö’’—Ì>ò:Ÿš6Œ+‹øiñú_ŠŸ¿iáøF4Ëh>ÎòÍ~&šå÷eAU@£©'9$`b¤øåð-{ǺoÄφºÏ…|aªJ-îd·uKIçØJyà &6n ®í¹⸫ÂqOŠJKhÖ×í$´óº=œ=YÓÃ*øVêRoT÷·xß[t³ùXúžÓQÑõíJÛR°lZÜJ|¶º¶Q0R0ʳ(ܹ«Ú“]þÈÜA¬W*“V£¯¾9¯Î ül×<âTðÇÅûÂÚ¤C |°3@H u)ƒÕ×(;°é_]ø3â‰â›(µo¶4„˜ÿf^Z\î G êÂs‘ƒÓËŽ2ŒR¯xô{¯¿üõ7Áá°5ê9aäá>©hþïÕh{$Ú…°‘­o÷F²!ßÜcê5ò?Ä?Ù·N]#Äž4øI…ã©o¾ß ˜‘­mf@UÚEùŒW†à×Úv®•ªéh°Ô¢Û‡ÚáœýQ¿¦)í§YËdÑéÍh (‚D1íÿd©ãJæÂfu0š‚µ÷[§òfxì¶ž'ÜÅÉÝ|2µš~«F½OÏmŶzö¼ÚO·|?¬[Ú¤÷z_•µ”°û­Œá²9Q’¸«°Y\E©é·~ðݶb—R}¶[‡hc¸…ó¼É»ï¾ì0 g?Zö_?tøOZñƒáAmñ2 |ØjºeËÇ3H¿u%‡˜Ÿìž+æ-?ÇZ¥·ŽWÁ_ô{Añ7ØhåÄQÝ*¶Öl‚p2>¹Å{SµZ¯‚†Ÿj/§¯ª<ÊR•»àíLð–¡Ã2ú_»$‘Ý[HÓ\LéÐ;d.ÓÈ ö&´|?¢^\jdñúËá½`Û‰íìl®„æâ bfÀ ÊÇy¯^´[¹´úfŸ“§ƒþ¶e¦=—«UGÁÞ¼Õ,o|C©ßêw–R4%¼¦Þ0J•`vüÄz*ðÙ•XC–rný^¯ä»‰É¨ÔjQ‚Vè´OÕ˜VWúf‹#ÛxcJŠÚgùZt]Ó?³Jß1üÅq^(Ô¬µ½:[ wP¸*ÒohìNÙ¡ÎàÿÂAæê;UK›]cRñÆ£ #^YèV@ʾ!û#ÉmGRgó•Ï#¡lSî ð·†¤šk'ˆ5»jN EÈ êsëÖ½ª8$Ú©)6Ùó˜¼Òp棨¥Øó(~ü_ø_k¢ø›Gñ ºg¢‘î^Ê]HÏlS‘·<‡>öåú€kÓ¼¥|EøÕã[Éâ‡^M±Û 4–iæA†`Ò©-Ûˆ]¼äÖ÷Ľ?Ä·Vº…¢›ë½e#µY¦`ÌP×R†úaqØ‘_DøWðøSáu¶…§gL1Z„†å1˜€æŒRÄf¸˜ÑæœäôÓe׿Ës6Sƒ«ZÑ‹QŠ×]ßáó>[ø§âï|-ðÔ:g¤±ñŽ›y,––¶›nm¯Þãid1d¬…€?¼B£?Àãðg¨õ?†kãÛ7ˆ5½b'‚’áü½#v2ðq‘àmîë^½ñL³ñ‡Ä}Âõä¿“O½òíÞT •s,Øúû‘^â/³é |‹hG’cˆÔa`ÀzúšéXïaN *Ó–íiý~5,®8Š•%){‘Ù=¯Äù^OøÏÂv>&±ÔüM¨ë>´E‹Ã×7™šw‘ÆÁï.ÃŒÉÝŒšõo…_£Õ¼k¬øûXñl¾#¹O1R×Y–ÌÙ3 ˆÂÂÁxêr~•™«iwz·„tV¶Ž[ëiÖæI_æXFw3RN}9oªC¥è÷mw±ù+¾k—aò7Àê@*«âe'i=íýu0£†„¤ùÝâ¶¹àöº¯‹¼;­x›@ñ¿ˆm5ï èP$ö÷†‚{§pÛcWåwE–Ü>QŠÊøg®|D j~$ðgà Zir´­g.±~ÖÓ\rDQ$lw'{稫~3•Ïmk¥_É0žKX]OÙÕ˜žI#Æ;Wã½ëÅ2é¾·Ô¯¬õ?]-Þ¡shÛ&KXÊç}Âß*ƒÔn$t¯DÔþü/‹Àb°ðĬ`ç\Ò¥k]H1þ&¹RÉ?3$7|×…<Ç åRéO¢Õ$ºê×[ùŸWG!ÆTŒcJÞânïFÛé³Ù[Èó‰Þ<Ñ/~jëâ–±ŸIa½Šào…ŽŽ˜üs_8^jWW:~—=ž«ørÄYÇŠß'”Ì€ÿ®Iظ a°ÜrzF­à[ˈðœ÷Òë:M£ËyurTIw0!b.£ € 1à í«ÿu è^(ð5æ§wqéÒ­Ä6ÓF@D’2¡ðN²zóÁÅ}UN’‚tõæ×å¶ÇÇçrªŸ%O³£õß#çí~ß^O™- Õ5ëS‚gIÛ¶âqëœ×¥økJÔ¤¹ŽúâÎò‘“4Û2ÀeW=JçÔW=â_xPhI&‡u|·&ËÌB«ô<°è yµÇÅV²¶H[RÝå Tl;¨ì=O½{q„Óµ™rMÝg¢øÃÄž VŽßF´MÁå¶a½åÀ^¼{g5×i¾¶Ñ­a·‰î®>go´Ï!%=è ûWÌVߦdØa¼–$!„žvÜ{}*äÿ¥òÖ(gR6çæÏöÇzé‹•µG$ ¯£>¶ŠÍ ©æ²½²ó,c „ÿžk:þÖ[¹"k‰ZÖÙdq…;|Ð}óœ*ù×ÿmaÑÜêws9FÝæ©®1Žýë®—Ç¿ Úáæ½ñ›s+“%·ží"žÜ=x¬çÌöE›OS㮑¦i²ïH$—RÇÓådùA$vô} f.‘ãÝWB¶Ònå†Xd æÛ2†m¸á¹Œwë[~,Õ|âB—OÕôÕô›ÕhBT  qØŽyíLñ/‰U•‘€.f ÈI~ÍŒ‰ðëQk¼C}w|n@c’ñ0Ú˜=c­yÿí;-´V©=ÒH°ùñ%»¢|Þo,ñÇ>‚½ Uä³7gkžJQy\o­ƒáßÀ¯†s~Í–PÜøDÔ#Ô#0ÜÉ=¨–f8É”ÉÔ#ƒœƒ_.üUðn¤¿´¿„|)¨Ï¨x‹ÃvvŠšyÕ$óLÑ åJã™U'ßËc©9&¾êø)­ÝKðGI.a6±ØˆÒ›÷¬ÊHvqŽ  èGZù÷ã¿Ù?|¨j1J,…Ô·/ƒ–ÚªP¨ôù™xôßC8bùF÷º}ûœ˜š1ž ÚJšKK4º[gùŸYéº?ƒ<{û?Éà}{J²¼´kO±½½ÜHñ3 2ºŒ|¤0Êú`Wå7Œô _Jý§¡r’E wسc–ˆ>Z¾ßºp3Æ=q_¨^ ºmáÝ¥þžRä™”»D„J®;qÇþªøÛãêÙÙ|vÒÆÙ’æ'iìãɘ\ú¨`£=·{ÖøJü¸‰SO¹Ç‰¥Í‡U÷Ö±áÝÄ¿³½¦…¯é–º¥”–1‚³ Ú]@!Ôòœò1‚+ò»ÁÞÔ|-û`jïyi#ßÅ3-¢ÜæVX‹°2y 6óß×ë7†uë?~Î:GˆtæI£¸µU’ yŠPhÉþð?~xxÄG¥~ÝÑÎn —OLäP+6sÏÕó¼?R½:µè¿=©Ï–¬(U^ZùAøÓAÿ„Ïàõ®­kî­j¯s¢¸$IopªAÕ$‰­|ð·Âø‡ãŽ‹¢x˜EªiñÜãÓ.¢!¹ç×8¯ÑM K4Ô¹Ó§’æÜrd¸9rÜ’àÚ¾'Ö‹økö·Ö5=âMº–ø$Þ #…†Gaž~µôx\EYFPÙÛî>o‡¥Æiß_¼ú«â·Ã;o |-ñ'޼¦ÇáoiÚc=ÒéÖè!Õ¡G“sùf}Öá— ` Áþ Ç«xûDµ:Ö«u¥x=Õþý&èÄ— à4³îÈΔ€r+íÉüGÿ 'ÃKigX/-.,.[9ó³Ã(ô뜵óÀoYÒÖ8âŽÇS¹·ˆ' Ì;Wиååxšê…JR•ä¶}OS3¡†xŠu£Eîºý ü+uìÉs¥ë:œúÛYâÓïä3¾žc”0–ï#•Ë ¼æÙ²]?GðTÖ´0Ë(^²Ϙ[«9Ï9ë_DxóÂâ‚^,Ða¸RóiS¬R*ïÂ<ø#Â_´¸|c¥xŠåm<#¡ìU»€/—h ¸= ävæ»aJ¦# *o¿âpÖÄR£Œã³=ö–ðÕ¦®¦µ¥Æ4èµ{˜¯nE»a Â(C:Žö’:í¯`ø3ð§á¶¹á›«¯iÿ5Ù‰ï|L«xÁJ‚ JÜF¤t^µÄüfÕü+âÿÙYñ^‹ªCâÍÂs\hî. ÙWäpS†“ÀU~ ücÐ,ô» +MÓµx£ì+$º&— ´¬B|Éœ¬q°#£0ïŠÊœ1sÁµ©-;= ñî„qwVqz÷G ûCü*±ø}Œ¶—: ¬©ö¹ži¬a“Û’ñ‡a' ½¯`ø¯Úê&ÐdlK B0A9É$ÿ_QYÿ´/Ä} Ƴ…þšþñ7‡¼ai{fB×­Ä3F’ͱfŽE-ÄY&7;‹i¯œ¾xÇÄúwÄ ¬<+àígƓú;¨l%Ž5\uÝ€b¡®‰aq8¬£[âùtÛïîV1¥„ÆÂqøVNs˼Y£ßéß´—‰¼3,·ºTZ™2vdŽL8AŽ€gþuú5ð;áo®¿f;“¤iqéZ°2‡ºÓ§)<Ñž&í"ž~VÛšøç㇊´]SÆ>Õ¬¬dÑ^Xe¶Öc¾]—ZuÈ(˜ú‚JÈ VRÈ ×³ü ø«âm5æ øuâψš$gQ¹³[²æ$•ÔÈp8¯jíÄÇS _vV]m¯å©çÓ•c¤ÒæÝ´éÓÏCƒøarÞøýªøVòò;%Óõ–k.A!‰è=0@¯¬þ8x;Oñ×ìøºŒñ'ö¦Œ­,nœï\aõ\†¾ø“âk=Oö¨ƒÅ^´û>ƒqñtIIUv2€1K ¬‡zúWÖ>øÇgâ¿„š•“ø3ƳødZnüKœ$±ñ¸€|¼Œº¡@3’0kž¾ ¬”$–½O[ ™QŒf¤ôèp³³>›·£*ù÷‹q¶&Ë_ïßÔ{ÕÚ«ÀZmž­¥|\µÑåŠ[¬Ì·ˆHŽPÊq÷ÁV* ñ/øù<ñïUX4}ï#Ô=.ÇO–!=à •mçäÏ'G~+èï‹ ø·âÙÓRÖ|eð—NÀ³E"ÜßhzÁ¹ºÓÕ¾a#ÄQTq¸¡8ôâ»gVšOÕkþg•í!7$Ó³×ftß³¿‰”çIºkS ± ²òÏU á=kÍ?i¯ G£ü^ÐüQ§ÆÆÊêgk”衈O_¼Aô¯øKñZÏö:™k¦ëú§ˆâ3c bnAÆÐùÚ"=A'§|×п´Wˆ|aª|½_|5Õü/®Ãq Æ‹¨ÒîÎìd!–HIòœ®vïIÀÉ~ÐZdž§i‡~ÏhfE…Îí ô«Ÿ þ*ëúF³u¢|/²ŸPó®–k¸og6–ê§€ŒûYÉ8 8©>+^kwí!á'ø•á»êZ•¼¶Ú…յߟa=»2”¸ŽL­ •W £‡ÏJëŽó¸÷¿_ÓþÏSÍI]ûÊÝâÏ¿|W é_?emG÷ÊdYmbº³˜œ<3!©ê>`ö&¾5ø q«hÿ¢°¿”˜¬e‘.`S,¤ž[{’3ô5Ûüøßs¥ø_ðÖá?üLºÓcò¢“AšÕ8mòÍ"+qÈÛžâ¼ÓÇ?ÑìhýKž“DÓï­þ×s£ê6Â+í"ümY ž.„q©RCeˆ$`ž,> ¬9©É{»ýþGF/Æ5#ñ]O ÿj_…>)ø{£øÞÁRf±I »hÆ 0¸ ªÃÙÕp{së^_û7|@Ô<=ð]ZËwj!»`^y9<äzWm¦|]×·µtÔoÖæ&º<ÉÌÉå¶ýòʤñ_*xOX³ð—Äiú¶½aw¡[\5Õ¥ÔwŠê ¾xY6ýã´…ÛÙ”ŠÙác*R‚Õ--{œïQ¸Ê{ï{^~Õ¿ tˆl øÇá{1° š„ñEå™]T(gÃGòú)í]ÿÁíoZ0iÄF——)&k’Šá”“ÏQ^o¥|NÕ|Uû<ßhÞ/øUñ"?ßi³[_xŠ(cœ$EH4 æo”í<&à;q^iðKÇÒØø)<'¨Ý.¢t$0® ’€w&îêÀ¶qÔVXz5!EÆním×úô9ñî5œVÛ–üuáAðsö轸‚( ðgŽRKû*–·‰Ìðãç~ Ï _ExcÇÞÕ,®<wq«^OA¤ÚIw-®~d•¶p˜ 0ÉÎGæ?¾'üøÇð"ëáÌ~3Óìü{ Âoj’Á"ÛG¨Æ§dq´ 2 Ñç9`Hæ±~ |IðW…¾¥äsZøGOÓþMN©B4Rg ¹¿å£n ósšò³Ü¿ÚF8‡ 9lÒÓU³ÙŸY¹«„e†rIo¯n«uç¹é~=ñ¿ÁïXiún¹¯xZ÷â•z´yÛ˺šU;0¬7bE!ÂšÃø“ð†òïÁR|Hø!*xsÆv‘ 5]%aÖágtY ³¨8Á` “Ðøã⇺ïƯ |kðµÕì–“¥—Šloô›‹'½¾H¯ óUD¢2ØvL¤qŒýcðïįgqs¸û;Œ‚HÚA½0G5åbiO/öUi&”“¼eªó­·cßÁ׆bêÓªÓqjÒŽÊW½üŸÜ|¯àŸŽÿg×ÿ²|Soqá[ËåÜ$ŒU#“ƒ´ž©AàƒH9¯²4ˆê PÁ¨E·+&ì8 Ž®[Ç?<ñFõ¦Y­-u˜boìýgO‘$s~h%ÚNíŒx È 1Þ¾J‚¿¼.¹máëé–eüí-æòZâ%ýÀ9Û#/ÈÚ³öX [ýÛöSþYlýCw[…_¼µ§Ýn½WSô_KÖ-õ]nàKˆ¬d˜%Cæ1NÌÃï/~9ã¸o‰_ ¼%ñ?Lц¿tÓÜiS¼útâ5“k22•O/ æLóí_"|-øó§Ï} …µí΃ª.M+P‘€Ç ‚ ŠúëFñÛR_°\©ÇÚ | ûÿõëÏ­K€Ä)+ÆKoëª=4pì4 ¬â÷·–ÌøVH~ xâŒÿ¼_¯i¦ÚÝĶZÐÒËÉœ±…XäÀÆ+…Éäô‹¯ øNøo5­GT×õGX&kXcÞ0À*œöɯ­<]à=Çþ‹OñF£øÇFG2Ú¹>\öïŒy‘°åüÊ*ùjêãZømñâÿÃÚ¿„ué¼5}'Ä÷VtpºõŽI“!FÜ Ò`–SÉÍz“¯<¿‡÷j%y+%8ÿ‘åÒì»ÜľjRv‹»vò—ùê½Añ>±gá1Œ¿µôý*ÎìZ/ˆ. Ü’BÇÈù;¸+1dg¡­=sÇ>ÒouÛOƒÄ“KM?Q–䕸'€ƒ£‘’»sŒsVu¤ÿ„·Â—ší¶‘ynS(D"0êìkŠðÕφþø®ÃC‚æãX‚0‹R½‰dºK„LíGʧ àz0ÕèJOš?¼íßÏÉ•Ââd’§?s¿eú£sJ—âïƒo4R’hšQ¡IoeM“FËŒsõçÍ`Écß [ÝxƒW‹ÅÆR°]ëWÖ±¤ÚXÛ„’2£ý^B†ÝÎ>lðkУÔmµm>äÖ­ÊTÜóíÏCêJæõWÂÖönlíïQz›ÖÞ…‡C³¡5µ<ʼjÙFÝÒZ˜ÕÉpkÜ¥}4méý}æwŒ¾)Üë?´Mþ“á_jþ3¾ðÅ¡¶DÒ£Hc³ÝµÜ3;ÏA…$œtâ½Lø»¡ßéŸØ:ìZ·…üh`-‰¬Z¼3\¾Ü«EŸ••AùŠ8¯Eø?à;O|!·HÖ)5™ Ρpy’âfåäcÔå‰#ÐW!ñÈB×M‚Â1>²£ìöò–É’¶{mqük§ûF…|G°;ÛDïúv>b†¼)s¹Ù=Z·Oó>DðÙøÑñÆXðîá‹{›k‰-ÞîîòH­gdvÜ`ùK`°'yµâ–m~Ë-9­,$Õ'M0ÝÈ¿4P‰z÷àwÅ{XŒD%(Â0^O·èÎ$*F3©)4º®ÿ©âß ›ãŸ‹o[Å^🅮4±j»µ­qd´´¹‰K|ð¢‡u ;ˆçƒÓµ¯üVÔSÄW5=3û Å·*7%œÿl±¸ˆ¦á$SŒ|€Ã… œ_Mëþ+Ðü+ðÛLðç…¯íÌ6Z{«\¬fDl]Iʱ §µ|…kc6“%펖EÕøû:N±ªì°è0:­]2­Bu,éí³<õ DiéSGº9xúIµÝü<ð†—§|×nQ#Ò¤·(-,ŽÓÚ²`%÷Àè:׉jútš†³?ˆô;k-:üÂ4ñseœ,¼e{€sɧ^T§>Wvð£íT.¥¯S²øyã_ˆ²k÷—øoañ ]-šÖ]Vk¦°°Œ«|ÐÅ»s<˜”×µ{å×Äé|gá[ÿ\èº÷äžMywÅÿÜYÙ-­±f™“ËP„eázç=û ×ÎcqÄ×ö1¦´Ùßóèו‘õxL¯êôyÔzî­øwùÜå<âß èßî§ø™ñÀö¾%¸“ɰ•±‘í÷a£;|ųÏà` ÷ÿjðÅá+‹ˆn$Ñèà€mVR88ƒ\‡~x[ßÅûøGN½¹cºÎ¥É6¡3ðdÜFXô€8¯øÁicáÏ À¨öÒê}Ÿìòn³Idp¢`™ÂíË3À ó\9ŽYF%E6¥¦é$ýÛñ=l«=x|,®”£®Í·wß{þÏ·ÄHl<­ÛZø»ZÖüCo#C>¨š]yp+ò·-2€äŒ׊ùêâ;Ë‹Éîl`Ònc‘Ë ¨mH.8bNqØ’}ëõ+á–à¿ ü*CÐ'Ðo lñ¤‘ÊòÊß}ää’Ää’kâÏ‹:x+âD¶:n¦·pêÍx"†ßhµRãålg9,qÓ_O–ç0«ˆxhÁ¦¶ó·••‘β˜l*Å9¦žþWÙ^úžÚ=ÝŲÜ\iv“ìäØãëYEk~Ö¶6údo&Œ;žß…zÌWºõ¿†L(×;„*X7c‘÷Er°Ksk®µÄúD“M‘¬©ƒÜcÅ}%Üøª²HåNÔíu†€}š;åoLC zò?ÐÔ<-¯¤\ËolÁ×$A3í^ŒÒE¬øŠÚæ Ý¥ÑL>/Ý· äOlÖÆ§/ˆIlìtøqåÇ+’Ãx›Ö”¥%+\Q”Z<-4X'<ýæu™DåO¯zïm¼dº´öÚb;ËÄ…ä ÐsÁ®:Õ«‹M¥—{$ FT¢qßýém½ö`¯ks0Ûr€}vŠÕI½Ùo¡ÔÃá=BÃDÔ­úh-VÆK‹Uó0w ¹Æ 9'¶®!¼=ftÙ/5yÌáŸ!daóå‰ì09ºµ“V±ðÅãI¤Ã’Âð5ܲ¼¥<ÀsµOBzá]´…:m¦¥{qö–ù0 UÇ0®yr©èŽ”ç(jÎÞoh1è«qmmåÃ*ŒùŽÊ3Á+É'ù×Þ_,ô~ÃÇÅw–=µôlòÅvAK‰K³×æÇ«ák[MO ÁqisxûUƒ*±% ‚8 ïÚ¾ôøù¨|<ð/ì_ð«BÖíîm|7q{la¶ŽÞÒ$FMޏÎIñÅsb*¹ÁÓK¼tãË%&Ï4ñǸ¼áwÅ\Ö5KT[ˆôôˆÛÙ´AÇ™l2AÆJðrzõ®oÇ_´ÇÃï‰?³^µqbË£ëRYHš‡5"’m*<¶û³FÄðG¨Íy'|_ðçÅŸ±ÿŽ´¯YÛ[\­> û*Û¾teeã$ËÓ½|±ã±¶Òu}Zé…¤ÇíSZ$Y{d>Wÿi‡`+ŽŸ`«ÅW©YÆWºßKõ(ÇáâðП56­g¶½º£ï€6ß¼e¦EªxçÃ^Э­£[9um5µ ïðY€‘!éÜâ¶þ;üOñü)-gÁß<5ÿÇ‹b0Ïew¡Ë Óü@¨à°·qóFüa ~H'†Mz×ìýa㛿‡Qjv×ÚGƒô±l¿`ÓKûc´{~V÷ ¤Œ|‰÷¼kö…¸ºÕ>YGâM&-OLÕ¡¹´šÎq-ßÊÃz†ùчtppq†jùf‘©š{6 Ò{-%u¿ÚóW#îqTiå|êSM­Þ±•ú[^_'eó9/ƒ_ <}â_Ùëן5Ÿ x‚ú?´Ùé¶Zu¼Ö*€c‘dBÒ•Îk®3Æ4ÏŠªø^ûEŸâfµ›{¥I$=Ó‹NÒDfWx[%ItC°’Pð©9ú{áC< 4+"bò´»DK@#áüÝ[<äžµóíw£OÆÀ¾Kh-âh7’ò²È0 rÜ÷¯Jžbêcù.­è¯ÿ ës祀PÁs´ïêíýzXë>IñæO„x·Á^ð½î‹q)š;-Ä/i¨Ý¨^(¼¦7»¹Ç=q^#ûB|r²ñO†|)w£XjP[Ë›=KC¸_&æÎóaV‚qØõädwŒýø[½¿fí?1ŸÙâHcNCÇ_qȯÏÏÐOÆÍKâPIo¨]ÝÂòm ¬ÿ+¦ò;6_§­ÂþÍz;È‘‡–Ø|°œ…\qϯ­|‰ûIé6óëž Ô‰ó®N´!tcò:ßÜuôÆk–Ž=ËÔ –®Íiòvßæwâ2èÇ/焞Êéë÷v/|øâTðzùøµâ ÅsÀ>Æú|q=•¨ÉeFóSœ0''kÃ~+ê$Öþ,-o@¸_ÍnÚu•´æ[g¸Šãi'÷qÌ¥†åGœWéWÂí.(>ÛD¨—7­i–|ܨOî×È>=²ß¶×…5(T››‹å„…åÝs‚O¡?\VÔ1U~³)T³ÞÎÖ·—¡Í‰¡IáãwKK«ï~¶%ðÇÂÚËÁ~´ñ†üqá-VXYf›Â¾[ goâ‡Ì#–+žp}+Ã>4^K«|Q]bà]h_õ5¶†ê"¶7žìT•DBvŸŸ©"¿]´ØKéч¹žr€ÂýqÜ×çí á:ŽqkSMFmA‚79@»²ç¶0k“*Ï^#ý¤]•Ÿ£îuf™(a×$ßMÝשë þjü,:·„>2xÏFñ¶o´[êp¥Æ‘w0ÉU{]£ËŒ¨hŠ1$¶+âŒZæ©âÚBÎÃXÒ%Ðf»·µ}xZ\™ uV O€BddÖ¿KþÉ>©ðÊ%û9ý›—Œàº•Æ3Ó?ʾ.ý¡m\q‰î;žëÓÃc[¯ïE_TŸ[^+Ñ÷dì¬íÒç­ø7á†4¿Ý/K²ðGŽ—N†‰y¥Îsp¹ùåU‚Ȥ}èÛ=ÈÃGÅÞ/ŽöÃ㧉<)¢[[ØêwÛÝ †‹zÛ™T;ìù‰rp:`ûW覩X'„îuâí¨ß>ÝîÕY,Ê„ÓËbx:o\gòÏÆÏ YiŸµO†ï-~Ð?µqs,†OEN„sÆïÒ¦†6Ká)]?ž£©…Œ°~Ò*ÍZý4gÑ~ø'ãox@Ôt?ŠÚæ­«ÝÁ×7ˆmá“M¸a‚cÌq¬±dpI*H$0?!é^5×¼WûVø—úUæ§ðûF]jYõ(í§G¹Ü­åKb¥p$Iuä©^‡5úÏáémõ„ÚÌ,$h±»œ’TÎ9í_œ?ðþ›àÏø(}½Õ½°Ó¬µ‰n.^>ŒÌá™ýLýIõ® «4sÄU„Òæèì»þ?3¿€Q¡J¤[åê®ÿ¥ò>ñŠøÃá¯Áëoxo^ÖüOáx›¬øc] q;Û¨&YlçH'Ác–V·­|Wð¯ÃÚÄ?Ú#\¹ñ8»Ö4í7Qqáý>ú©olìÒF¦1ÁeÝŒœŸ”Wéf¡qg¨|?‚eÆêGã‘`ç<_ ÜX_x[öôñ¾˜ÁweirÆ<)þ0Xß"½š8ÛÔ•Yµ¿ü1çË/\ŠºwIíëêzÿŒþ x~ÿDÕµX.‰­Ëdö÷Ÿb_&-B" *•È=ŒŽÆ¾aø-d|ñ¶æÊõZ ZƒŠT’ORG®9¯ÑOsuà¡,‹‘ΞRºÈ3¸u¯‰|u¦dþ׳^¬—[ËåÏ{6ïfŸåÅqaêÖRtäÛM=Ï[K$«A$ÓW±ï¼/ÄOÙnXl” FÚBÜàˆþùì1_?þÍ×Ëa­ø~ÒÖ6±¹´†h®­š,ÈPçvþsÍ}Ï¡Ø\ÿ­¸:’L žÐ4HÈ€xëƒÅ|‰àŠÓãþ«©¬6±j-ªI©¼¨hÇû'Œ’9Î+|=9ºr¤ôV<¬mjjª¬Ýÿ¯Ôè¿i¯‡vúÿlj8RçN·ÝvV0,IʱÇ÷rsíÍQý•5x4ÿÝø~("t¼·ZHÄ€…Gp=GCÚ¾¹ø Yx§àv¨·Ä··6 °Æ•™Ê'בÍ~rüÔgðoÇ?Ïst`O¶yr³È Žäe~ÑÈíŠç†k RŒûñqxŠu¢­ÜôßÚ³áË_êƒY´Ql–àÍwHEÜ7ÙúwÍuŸ³V¹¿ åÓ®hÖ)|¨¢€ûLWÑ´ËOü6Ö¼˜­.nRÊM¾b…GùNA=Éóé_5ë7Q³²{¸æ²P`wgʬˆJ–u;ö5–UˆuðŽ2û:¹…G¥´iü]ðEÿÃoÚÒéq$zCß#YÈvD$L òâÄc¥~€|+×l¼OðìÓ,sBCEudÇ?#¯‘ß''ë_5þÑš{x“öt‡ÄiåÇqáùVæåË}û|}ðsü'·§Jé¿g/ZÛh±YCm¾ ˜—s–åß¿°íŸZ3Êxnn¨Ã”1\·ÑŸ1\ø6×á?íˆú ½´1Çm2ÜXKqpÒ¬ð’v¶(T0?ºzýÔ ±ø­û Ýh®`¹š{C»wÌ“J†Ç|ŠùÃö¾ðÔ–¾ð‡Å[;D·:=÷صyNŽÚãäW'¸Y<²}®—ö]ñ î£þƒ32&Ö’Ú<}÷'æÀó“íQ‰o„…tõ_š3¥þÍ‹•'³ýOŒ<3áù|ñêïÓÝGÜ71݆…6Ÿ”ç<à0çÓ5ö?džmñCöC³þÌOµøŸC¸…£9•Û©cñÐ-½Ö™nN¡²1#N‹óFvÿ2AŒ}«Èþ!ÙÛøößñ-½»ïÓæš ëYà—#˜>áÁÁFÇOZû @ñŸ‚¼eàh|uâï]ÚÉo—q~‰s))s’{àsUR5UhÕ‹Ôè¥Zœ°ò¤ÕÖèñÙÃŦòßû.âm¾aýYÇ {z óÏÚcáZx7â¡ñý­¥´úR\Åssg|¥+#8êCúäZç~êøkâ6­d“ºF­-œÎb1$mƒ•<¨íƒõ¯¬õψ¿ þ&xBëÁ—>*Ñ®¼Q¼±6˜=ËíBHŒg:€NÕ9À5Š£RŽ%Õ„[úÌ+acJrI-Ÿ™½û6xÚÛUðÎ÷——3ZÈÃݪ3÷²Ï^A¯Ž¿i…:Ÿ„hKÿXÛÜÉà 7— e+,{À"x_n2V@§ƒ™>•Ÿð›Ç×Z¥}s¢mÓÌËyÎÅ•AÊ»£«È`ò§ƒ_R'ů‡~ë>ý½Ï‰n¬‰Ñã¾íb¼»U'Ɇ䯔òg€'Þœ)Ö¡‰•H+§£ò1ç§R—³›µ¿~iÞÕ<?„µ];M:Dˆ›IšÑdŽê7\H¤ÀÇ5ò¾…Ÿ´ö¹ JZãD·OíO Ïy1rÖždPAß$d»9Ûƒžµ/Âÿˆ÷‚Î?A%¦£Ã‘‰3DåZܯÞÞ(W¾2+Ôþ2|]ð÷Ž<á¿ÞøCÅžñ'‡µHï´¨õ‹=–šœY"æÖA#Ìh÷a§zîÃ)¬©¥¤ºß¯õ½ŽlT9©©ßXÚÊÝ?®ç®i¶ÅïÙ„øSÄRC-ôö»à˜ÆÁ(ÿU2ûtéÔWÅ2ê;Ò+Ñ4?ÚÅ–PÃyá}?Q[]/Vƒì³i²9ÅÄl§å(XyªêHmïƒÇ<¾Ú`f¹2ÖöÖ×éÔörLS§„¥7ÊôµÝ¯m.¶òû¤>*|ðOÄÆŽGµMW½w—MÕ,ã ÑÜýç‰ÇFWÆñÜ0$q_.]xoâçÂ[é¢Oˆ:ÆL3X|ׯU³÷†@<õäšûÂ?Ç‹ü+%¶‰áÝw[Ó² j±9ø§Ä?µ6¹g«[xOÂú>ƒxßÚº‹<‘³"q.@<¦cÕ %y# |<¶8éQ’©iB;©=W§T}cSðöwŒäôqZ|ú3Ó|ñ›M_^]Ùj2'Ùr—Vs£G,Rùg$-†GäpG|×½øwÅšwˆ¼>±IªÉmuqVÓbHœ°än1Î+抚?ßøj/ˆòh>7ðûiª©{â½:ÈDÝ›nùc'{,D‰P¡³Á5ÉÝh?¾é }­éÐxÛÃ˺Ms@ÿZ‘crÎöäå¦P±ëÅgˆË)Ô¥”]› Ñß²{?ÁùlÞtêºuÕÒ_ÚÝÚÝ~+̵¬|1×¾iK¬x—T²ñÂxõq¤yÝé¶÷¶ÐU‰ E—œýÐp}ÊÛÄ^ 𾄇ltÑ,뺭âó&˜ÁÝÉ9ë’ð'ÆË}KFCog­ér-ÖF)Õä}®ÒÏÁ>Ôõ©õO]?‚5K¨BÏeݧÎFJ‘HÈ$óÜ÷b1n£~Ú<µ5»J×õêŸàm„À:vö2æ¤íe»^×–ëÌù¶ã@ñ¤5NÊ Á×›Ém&”-ܬÜÈ NŠ[“—?{Ô|Q.™4ºU¤E7Ó]†‰îª>fú¿ZåüOðåþøQ|G¡xÛRñí¬¯5æ‰sKi$ns ‰BîVKþµ¾¼ëŦÔ_NïÖ×ülˆÄSÃá§¢rï忝ÿŸ\Zßï²h#-dûáFqŽ+É4½%cÀÏçâ•çŠlýk¶T6ªIúÖnœU»œÐÒ¬goøG­SÃ÷vãÌ‹PÓ±ñŸî†N[ àäõF+½XÕ⸺էÔÐnÚ}ñÚ’óJ°³œ\ˆ…ãUNý+—ðn§hÿ-"•õH¥I<³öyRAŽ/q^™©-u© Êû º§žON•…siò»UjÑ‹\Êæ‡tõˆ´ù§¯s Žö÷9–9ÙŸ¹ë€s[z†-í4›¸,!–âE†A¼’<óÃaF+ļk¨\ëöÚ®«wö(m£Í¬Î~Cʆg,AÁ'µuž ñ]ͧì÷ª $¾¾¿ŒÜy q9eŽ0¹7Þ1ÛŠîWOS‘½nŒ?x¶ CÆãLÔá‚k³ºÆÖÍ"œá^+Ñl4ë3oo«¦‡.£y Ò@¢ÒLìýæSíßµqþÐ4õðÞ›u2µÅü…eó!CêFpO'ž3Që^3¼´³ÕaÓÚk+H&>`Œ€òH³ØqÓó¢¥K!Â<ÎÆçŽÉÔôYtëKyì„7VÓArä`Ć^8'¯ò݆Ÿy©üGþÌÞénÄ(gR¦"_Ž: ÷úW¥xÅ×Þ Õ5oí ®®còc6èï…·pî9®ÃÂ6—‘_\ê“^ˆ¦P¾TAÊdßëÜÖ1¨Ó×s±ÙFÃ#þćÅ7¾Õõ‹kË5hÞx¬›˜©èy ‚2x5öOÇo‹º&•ðÃáÞ›}¦jþ‰â!¹»‘ÆUÊFñÊο#¹#=¯›æ¸¹_®žueÝ9µPY³Ž~cÇJôŸ~ÐÚ$º<š­¥k×Kcc¥Ý±h¤‚wGÛ»,rGq‘XÕæþ_Ä!5üÇ$šoÄ/ëáH´}7U7RË%£ÐïngMøa'¹·@“åâ¿áÚ 9Ô¥]mKúûÏÞ¸Š£©”ÆñJ1þ¾ãè„?~ê~#Ò|1¦|JðÔÚÏÙM¿ö)ž<]62 nq™P6†Æ7qÞ¼·ãö¯6·ñ×Eð+øwRÛN/#Õ ÑùÀ2!\îR¤Ž[ Žs^ßê³ðµß†ty´O(Gä}œ!N0pÈã¨e ƒÎkå_Œ ]wâ‡ÃïÝë:ÕņŽÉuw5ã››èÉ VW¹`âz⾯ŽÀVÅó¤ÓIï®Õ­¯K;úŸ3ŽÈs ^G(´ÚÛ¿g{éÖêÞ‡×øåð}|"žµø‰á†ñ*ÚȂůZ@¼jçåÝžÙí_)|\ñ|7Ú߇¼/ý™ª„µ‹í#UM¦ÖhÉ`c_âÞ Ï5ô‰ðsáµ÷ìãm¡ê^ ðýޚȡµБÊã ­ÏÞ_|rÓõ;âg€ü ë2Û€’Û%ÝÀÞá ªcÏ÷Н<œd×£—f8,^#–ši«ïÛº·äyY¦GÀáÓœ“S²Óï¶¿™ú ðßUÓ4ïÙ«ÃQIt°kþŽÌ›?ÝöÞ¾Føõâ&»ø™¦iw:Mý¥¾7Vš¬“D¶SF‘âE;ÄŠíÜÇ5êøw¤ü{í#âwŽ¡ñ”]n®ï~Ó§ÈývIfùŒÆp򱄾¾yø‡¦ê¾:ø»ðûAñ©Ò÷¬r›ä҃Ǯ»7à7;IQ€{dVxLNUçVæJ÷Ѧ½;ÿZ1Ââ©Ð¥Bpår²Ý4ú|º™õ'Ã?Ú'ÀÓx>ËJ²Ô$—VŽÓìÍ{-¬éó8>K’¢3'o/vIé^EñU×/¿iª[i«§ÛM–3y»$’i$I?º CwÏ·?[x?Âøu ¶•§K¡ÍmäI§Él­ÆW ‘‚¯Íßx{Yºý¨nþ Ýx‚k¯[]ÛßÀòG‹ä€£Æ¶žx9h‚©o˜‚2I9eYöˆ¨¬áÈ›×[«¤Þ‰k¶…ç<=ˆÂQ§ÊÔœÚ]¬õvÕ½7ÔýLðÄÿ‡Ú׉!ð–‘㟠j>+†3æhÖºª=È*~`?1ƒšøƒö—»»µý¢,’òÏMƒFžwuzÂã>I-DW £ïÎOLWÑ6>j_³}‡î|)¥CmhTØ\ZÂ!¸²}Ù¡•pé <‡×Ç_üª_xçÁ‹üAsâ–¶¸xn/n>Yo`PLbL ãñ`úâ¸rLNx™N“jÉÝ5Óºkò‰×žeøúT ªY¦ÕšïÙ§ù¯Àö?„ß´n…áYK?€¾(ëž„ª^ø—MÑüË(>iç{ îUH¯øýã½3Xø¡áéSéÿÃás.¥e{k; .‰Œ §uà©¿è¿Ã}:Î…¿e·‚8mRÜ"Ī€qJøSãWÃÝOø­ám#K²²Ót«_ÎÀ¸žC$¿/L1ÏOZîËxŽ…|O³tùZ»ZÞë­û?ÀåÎ8V¾ ªÆ¯2vMZÖôî½u!Ð~>ë’|9½×o~ xÂëEžd[ÍfÍ‹E#;¤òpKv9Æšãü}â™üGñ_ÁZݾµ¡k{7}î cñGò«$ÌX†*GPÜq“úðâ;uðöQÁÀ‰³fÑ´®:b¾ý¦| §‰þ дÛ{-'Fw0½½œbc–RÒ/ÊrFA=9 ,»=ÃâqœžË•ê゚=Ÿ¡¦mÂõ°˜%8ÕæÒkmzz¯SÜ>þÐ 4ÿ i‡VñEõ¤vÖ¢Þòûû.âm:ƒ—J†4nxÉî<Šò_ÚY/ûTxÄ[ohºÞ€eÒ`²™~Ïu7˜€È'\æ2®¤ã¦:s_`|"ðþmð¥4+K Xt¸íf/–WÁÁÏ|×Ë^7ø[áø«Oÿ„v+›K¬3ÛX™Ùà´óÎ]!RH7 í\jæË󜱓œ`Ôìí{4×Ý£ûýNÜÆ±”p”á)§ ¤í£MéÝßðô=Á^øÉÂßíøXz&£2ƤørïGU°Ø§rÇŸ:7è<ÆÞ¾¨{|Ëñc\¾ð¿íE}ªëZ¥ÂÆ …à¶š4f´ºÛƒL8b;üÀf¿Iþ¨½ð Dà`EƒÇ^+á_ÚoÁ¶¿ðÐZ/‰ädhÑ#I!ç,êwü²)äÙþ"¶;ÙÖ³º{$ž=Ÿpþ ö”M5Õµ¯]zƒþ2êËàYšãᯌÁ1ÉæËwm<]ÚrgkPwù|“…ËžÊkÂþ/k3_~Òúf»ðóYµ×ìüM¡Äö7Épe†ŠBŽËûŒ7 ¡×Ýÿotï|;óN›¸q%¼ã2ãÔŽÜq_0|lðö•£ø“Â:æ‘cŸwk¬½›ÏË$Nù`xú­vḇ›:¦“¶·_?ŸcÈÄd‘Ž5½¥àÚ{YöÓäúž±ðßá4¿†Òx—FøÁã;ß4i%ÕŽ³p·šEúŒnð²æ%*6‡ˆ«.sócñN©©øÊÚ/Yð‡†,îü%u«OpçKd’þñáV9-‡ì¥xȯÔoƒ—FçÃ+hÀìòŠóÛÅ|×ñ·AÒ<)ñ»ÃÞ+³²Œêz†­ö §Éù•Ó!€ìFÑùב’qV2¦"tk>k§m6kô=¼÷…°4¨Ó­F<ª-)oª}}Mÿ üñ&“ðºcÁŸü[ÿ ÄQ†¹ƒ]¿’ÿK¾=Z)brvìñí*Ny‚N™â»ï‹ú߆tÍ:ß@ÕdÕ®&» !–=5]Ë8CÁ`±Ž¯×†·R\è np±*`ÜÿU|Ùñ;ÂÚO…jëz²xÌWˆœ&õpà#ÜVÙ_b}¥XU|Í«­:®ž®<×…°|”gMr«Ùüúúß{ôŸ„?<ðöoø'â^½âÍXƳáßì“MÕ )µã]«ºÁXg2M|Iasâm â­á¯ƒ¡½† @»ÂÈl£'!?Þ#î‚G@;×ìÃûÔ¹Ò #;]6ŸnÙ¯‚¾8xGOð¯íE}¨iÅ¡[Û7Ô®cN@úƒù×VCÄ5ëW*¶otì–Ýí¿‘ÍÄ\9CF5¨Ý-š»5Äì,¼/ñ¿fß\Üx‡Zø…¥]Yͱ¡kKÛ›wC–³™Z)Tœà’§~Rw˜þxÃ⠵ͦà* _VŒªÝ]ZYŒó#(;‰=HÏŠýø Aøm§XÜ1–ÖX<£ ]ÊI眞œ×‹éÞÓüûUø×Ö¿f¾Hõ$)ÿ,ƒ³+F=²¹üMoOˆª^½*‘RqÕiòwüÎ_õ^”–¬[JZ=zÚêÇ{â½Oâû4kq|ZÑ4/ˆÞ Ö,Ï]½ð¬Z^hѺ`LmÝÙg[]G!O8ù»àÏ‚•î~±Óþ'|$Ô|5¯ÛØÜÙjk$R|»±&Ð\c)“ÀqÜWÍþ øßañÛö^ñ‹‡%ðï‰<wõì"q5½Â¹hßËl•†c“\þÓZçà */x_B°»×M°{‹íEÉ…¹]¨¼°ëH®Øe9H$ãûäìõZ5mn¼¬ÌjæÙ|'u/ܵu£Õ>–õÐæô¿ßü5ø½­iËE«¤LIŽá’¨Î>m¼$WÝÍá­ãïìÏsáR;EÔ#~©eÐL†_â\çgž}kâo|OŸã'…t¿kzŸ¡øÓJ¼Uüºk1µÔ`‘Q•ö7͈ìå†7übjµG4Á¤x-m†ûPžÙeæBh—;Uxï’sÚ½lnU˜b}›•Uk»è¿Í>Þzž.7ÀP•E+ºoem_ù5Üõß…Z=§†íçÒ5--—Š-@[’д‘±!\*YO!ˆ#…ÆVµû_|d“^²›ÃÚŽ—àÍ<\$‘ÚÙY­ÉqŒ‘¥2’y-a[$Ìåz-+ovíæ—[=m¡ÓC;ËVtª©>ÖJþO{]isïO…,Óu hºœ‘¶Ÿ=²IlW´d v ñ\ßÇß„Ú2üPÒ~8iv6÷¿%¿Š­. X¯‡«'Ý|õ\ü˜?éŸ/|5î¹'‡ìmîußAc§ÊRÒ;™løVŽ'Þm°Y«‹“öœøÕuâK™¥ñv4ÓÆú ²ŒØIßš'B 2°ÈÉmÃ<ÕŽ‡1Ôñu6”5Z½Óé§U߹ߌ⌠\%5R-ÏG¢Ù®º½ŸnÇê¯5]8Ûýšö(®-§Ê–ù‘ÚÙ"³t;Èþx‰>j“Æþ¸Ži|stƒZZ]-Øü¾d-pZ.LlÕðn§ñûRð–‰c¢xWO_í)´ø§·¹Ôô·…Ôí.ë‚9À#æ¼3ÄŸþ(ø¿Â÷zO‹|m¨x‡LžT­®!Q(ñìÆÀŽªyÃ/á|L¹áY¥Mý÷[IyúÚûy›f\Y…J Ÿ´KÑYïÝz^Ö¿‘úC⟂ñl7²xQ³ðߎ,ÓÌÒ5}5ÀŠåܰÝ"®½¾a•íŠù³Ã5 |D¼ðwÄ2ëÃZå„ßg¹‘P´BAŽuPÙʰʰ ñÐ|Ó¥xŸÅšg‚¿±´ vóÚT;hôÉš&oï4ƒæÏЊӳ]ñ~´_ׯ5›û[-noÏ›7–‡ý[Ë÷˜uÁ9#&½Ì?ÍÓ•ÞG‡_Š©S¬ªQ÷%ö’ø_Ë¿š>ñWŠþ#x;ã¶¥â½^=kWðµý´qý‚`ÂãQ˜]\ )¶yçw={4^-ѼWà‹MT[›µ¸ˆy°NÕ¶9VçàÞø¯âOxjÓàŸ‰¯'Õ¼=­e§\HžÄ„-°¿Wˆ…=rÀúƒÇ-ãMRø)«Kjº½åä † iŠ£ºòCîU*Êò­išðü+Q‹¢¹e/’þ·<ì‹'K5ˆ÷£&ÞÚÝŸÿÙvlfeat/data/box.pgm0000644000175000017500000021516612236612215013166 0ustar dimadimaP5 # CREATOR: XV Version 3.10a Rev: 12/29/94 324 223 255                        )3                q´¶¨¬¨¡Ÿ¢¢¡¦£¥¤ž ž ž£¦¥¤¤¢¢ž ¤¥¦©¤§£¤¤£©ª§¨¤£¢Ÿœ ››£¢¢š£¤¤ž˜™š–›””“—˜šš˜—“ššš˜––™˜”—š˜•—˜–••”˜—‘™””‹Œ†„~€vprppppfb`\^_ZUQQSNNOMLKGGCHADDAB@;:1,,()($%$#                ”¹®½ÏÕØÞßåççäåçàßëðòíðòíéíïïïíìëìîïìçåèçéçæâçèëêçáçåêèäÈÞßãìòìèæéîéìèçßÙÛÝßÝÞÝÝÚÜÚÙØÛÕÓØ×ÕÓÓÕØÕÕØÔÒÎÏÕ××ÕÕÔÑØÛ×ÕÐËÌÈÍÎËÏÌÆÈÊÇÆÀÂÇÃÂÀÄÂÂÁ»¾½»¿µ¶µ·µ´·³®¯¬¬¬­¬¤££§£ ¤¤£Ÿ›–•”“ŒŠŠ…†‡„ƒ€€ˆ„x}ukd_aYWYSRPOI=752/30/'$!        ,²Å½»·µ½ÄÑØÖÛÝÛÞÞßãæçæééêéëêêéêëêëççééåååäâääääåååææåèäáÞàááåæååäåâââãÞÜÜÝÞààÝÛÛØÙÔÔÖÕÖ××ÕÓÔÖÕÒÎËÍÒÍÎÐÑÐÓÒÑÏÐÔÔÏÌÈÉÆÅÈÉÈÉÅÁÄÇÄÆÆÄÅÂÂÅÁÃÄÁÁÅÅÃÂÃÀ»Äý¾Á¿¹¼¸·»º¼º·¹¶¶µ³²³²´´³¸·¹´·³¶±·¯ª±¯²°¬±®¬²²²±¯¯¯¬®®¯±«®­¨¥¤£¥¥¦£££Ÿ¥¥¤£¤£Ÿ ¡›šœš–™™••‘‹‘†„„„yy{vzrrqjddc]YWPSPLDB<7101.)%'  C±Â½¼¿¿¾ÁÃÎÐÏÍÏÑÓÕØÓÚÝÞàâáââáàáãããàßÝÛÜÞÞßÞÞßÞÞÞÞÛÛÜÞÜÛÛÛÜÜÜÜßßßßßÞÜÛÚÖÖ×ÕÙÙÙÙØÖÒÒÏÏÑÍÏÐÑÐÏÐÑÎÌÎÎÎÌÊÍÊÉÈÌÎËÌÌÎÐÌÌÈÊÉÈÇÅÃÄÀ½¿¾¿À¾¾º¿Á¿»¼½¹¼¼¾·À·¶¹º¸¶···´¶·¶¸µ··µ¶³³³´´³²±±®±´´°´°°¯¶¸µººµ´²´´°±²°¯¬¯®®©ª¬ª«¯®­¬¯¯±ª«¬ª«««ª§¤«¦§§ª¬ª§¨«­«­¬­¬±³«®ªª«­­ª§¨ª¨¥¥§¯§£§§¦¦ªŸ£¢§ž ›˜”“œ–‘”’•“‘ˆ…ƒ€~~{tpjfjigc_[YRGCB:3.(,?C, H·Â¿½ÀÁÀÃÃÉÉËÉÌËÍÎÖÔÕÙÙÝÜÝÞÞÝÞàààáàÞÛÛÜßÞÞÝÞáááàÞÝÛÛÛßÝÛØ×ÖÖÚÛÛÜÜÝÜÛ×ÖÒÓÓÓÖ××ÓÓÓÑÒÑÐÍÌÌÌÌÍÌÍÍÌÈÉÇÇÇÈÊÅÆÆÇÌÉËÉÊËÊÇÆÇÆÆÂÃÂÁÂÀ¿ÁÀÀÁÁ»¾¾¹º»·¼º½µ¼¸µ··¶·¶··´¸¸³³·³´²®³²±²°°°±®®®¯­©¬©««ª¨ª©«¬ª¬­¬¨¨©¨©¥©¥¥§¤¨§¥¢¡¢¢¥¤£¡£¡¦¢£¤¢¤¥§¢£ŸžŸ Ÿ Ÿœ  žœ¢Ÿ ¢œžžŸžš›š››œ™™›—•™—š”šœš™˜œ—š›œš›œ››–›£žœ›››œ›–——™–——•˜œ›—™—•™’’•ž™›  L¶¾ÀÁÂÁÃÄÄÈÉËÌËÎÏÏÕÖÚÛÜÜÜÛÞÞÞáááàÝÜÜÜÝÝßàááããâàÞÜÝÜÚØÚÜÝÝÛÛÚÛÜÜÜÜÚÚØÕÕÒÒÒÖÖÕÔÚÖÒÑ×ÐÓÎÌÌÍÌËËÌÊÈÉÉÈËÏËÌÊËÉÊÍÍÌËËÌËÇÆÆÇÆÂÄÿÀ¿ÂÁÀÀ¿»º¼º»½º¸¹»»¸¸¹¸·¹·¶µ¶´¸¶¶´´¶¶´°°¯¯²°¯¯¯®­¬¯®¯­­ª«¬«¯¯®«¬©­«¬­©©«©ª©§¨¦§¤¤¦£¦¦§¥¨¤¦¤£¥¥¥ Ÿ¢¤££¤¤ŸŸŸ¢›šž™›ž—ššš›™™ž¡ ž¡Ÿœžœ›œšš˜š—œ™˜œ›˜”“—•–’“••–””’—”‘””””•‘’’’ŽŒ˜–š—˜—–“‘’‘”•”t&M¾ÁÁÀ¾Ã½ÁÅÅÈÊÉÊÍÑÏÏÐÕÖÙÚÜØÜÞßÝÜÚÚÞÛÝáâÝààããàâÝÚÚÝÝÜÙÖ×ÙÛÜÚ×ÙÙÛØÚÛØÙÖØÒÖÕÖÐÕÔ×Ú×ÔÖÔÔÐÒÐÍÍÍÐÎÎÎÍÎËÌÎÐËÍÎÎËÐÔÖÔÎÉÍËÉÉÉÆÅÅÄÇÇÇ¿ÁÇÃÅÅÀº¾½»¼¹¾¸ºº¸¿¹¹¶»¸¶¶¶¶·´´µ¶¶¶²¸¶³´°®³±¯®²°®¬±®ª«­¨©««®­¬­ª®­¬®ª©«­¦¦¤©¦¥¨©¥§§¥¢££££££¤¡ £¢¡£¡¢  Ÿ›Ÿ››¡šŸ£šœž ˜š›¢›šš ›Ÿœ›œ¡œœ›  œ™˜˜™–˜™›™—“–ž•–•–”–™–”—•””’“•“”“‘’‘‘““’‘ŽŽ‰‡ˆ…‹s  ]ºÂÁÀ¾¿½ÁÆÄÅÈËÌÍËÊÆ—ž¡¥¬¬«¬®´­©±®©¬¶¿ÄÊÇÅÊÐÌÅÀÄÉÇÂÿÂþ·½µÅ¹¶º¾¸¶¶´ºµ°¸¼¸·¹¸¹¼º»º¹²´²»º»º¹¹»¼ºº¹»½¿¼¿¾¿¿ÆÑÉÆÂÂÅÈÉÃÂÂÆÊÊÅÆÄÉÊÉÉËÉÍËÈÍÊÅÈÉÆÇÈÈÉÆÄÅÅÂÁÂÂÀÀÀ¿ÃÁÂÀ»¼º¼¹´µµµ³³±²²²¯³®²±°°°®±¬°³°®®¬®®«¥­¦¦©§«¦§§§¨§£¥¡£¥£¡¢¡¡ ££ ¢¥¤££Ÿ ¢  ¡ ž Ÿœ››šžžžœ™œ› ›ž›œžœœ™˜—œššœ“—“—–•–™”’—‘•”––’˜“‘”’’Š”‘Ž’’’”“ŒŠ‰‡‰Šq`¼Â¿ÀÁÁ¾ÀÆÅÅÆÆÇÊËÒÀv¨«¡£­¥ª°³«¨ª¬®«¯ºº¿¿³±½Á¾ÄÆÅ½ºÀÁÅ»·µ¬©´©¦¢¨ª«¥¡š¢¤£¢›››¡˜—˜“‹ŒŠŒŒƒ„„‚€ˆ†~{z{yz~~{~wpqimillkikkjghbbe`_ahcbc`aehgeejkliikfijjnorprsyxs}{‚|ƒzƒƒ‚‚‡ˆˆŠ‹ŠŒ’‚Š‘‘••––—™œ› ¡Ÿ¡ £Ÿ¤£¢©¡¥¥££ §§¨¨¥¤©¨¨ª«¥ª©§¨§¦¤§¤§£¨­«§©©¦§¦¥¦¦¨¤£¢¥¥£¤¡¡¡¡ž œ žžž›š˜—š™š˜™›”—˜•‘••“™•–•””’’““”‘‘””“ŽŽŽ’’”‘‘’ŽŒ‹‹†Š‹w [¿ÁÀÀ¿Ä¿ÁÃÄÇÇÉÇÇÊÏÃ|×ÔÔÔÖÙ×ÓÕÖרØÝÜÜÜÛÙÝÜÛÛØÚàÝßáÝàáàãÞÞÞÙÙÙÚÛÚÚÚ×××ÕÙרÚÛÙÙØÙ××ÙÚ×Ö×ÚרÖ××ÕÖÕÓÑÑÔÖÕÔÖÖÑÔÖÒÕÑÑÓÓÔÓÑÒÍÑÊÈÇÇÇÄÇÆÈÅÁÂÀ¹¼À¼¼¶¶µ´¬©§Ÿ¥£¡ž™™š—˜”’Ž‘‰„‰yxuonknlife_[^_WXVURVSTVXRROSOQIIMKGHJLIHJJILLMNLIMLKLLPONNWXY^abfgllqwwxy~ƒ…Šˆ‰“““—–˜—— •žšžœžŸ¡ŸŸž¤£§¦¢¡¡£¡ ¡¢¢¢£žœ Ÿžžœ››œ——š•˜—˜‘“’–––”‘’‘Œ‰Šˆy `Á¾ÀÁ¾ÁÃÂÆÇÈÈÊÉ̽nÑÍÌÍÓÖ×ÕÓÓÓÕÑÑÏÕÙÕØ×Ö×ÙÜÝÛÛÜÝÛÞÚÖÚ×ÕÒÎÏÐÑÓÔÔÖÑÑÏÍÎÎÐÎËÉËËÏËÌÏËÊËÌÊÌÍÊÈÆÉÉÇÅÃÆÈÅÅÃÈÉÆÈÆÄÄÄÇÉÊÄÁÄÅÂÄÄÃÄÄÁÁÀÂÁÁÀÂÂÁÀÀ¼½º¹»Á¹¹¿º¾¾¾º¾½Á¾¾À½¿Â½¾»¼¿¼¿½½»¼»º¼»¸½¸»»¹º»¸»¼¼¼¹»¸º·¶µµ¶³°³°®±±±«®¯«¨¨¬©§Ÿ¡¢Ÿ›žœ˜™““•–Š“Šƒ…~~{~wutroqmg`acc^][ZTRMNKNAHCLA>CCB?@<=>==@ABKJKOVXX\bdghjorwuxv€~„ˆ‚„ˆ†‹Ž—’–‘—žš™›œšŸž ž¢£¢¢— —š˜š˜•š—–˜–•–•˜‘—–””•”’”‘‘‡ž.އ…‡†s|ÄÂÄÃÃÀÀÁ¾ÂÂÁÄÂÄÃÌ €ÊÄÄÆÈÇÅÇÆÆÇÉÊÍÈËÈÊÈËÍÌÎÌÈÏÈËÌÍËÌÊÊËÉÊÉÉÉÊÉÈÉÇÊÉÊÊÈÉÈÆÊÉÇÇÇÆÆÆÉÉÇÈÅÆÆÄÇÄÄËÅÈÄÅÆÂÄÀÄÄÄÆÄÅÄÃÆÅÂÅÈÄÄÄ¿¿ÁÂû¾¿¿¿»½¼¼¼¼¾½¸Å…':B=>;88578<;9:8<9099=@>=7@>869:?C@>==><@BDH@?78?>?@<<:==<:?5;9<978860-+042.0/+(&)%*!"  !!#!!) $&+ )‘š•š–™˜—™–™™”˜–—”™œŸž”˜š—•”‘Ž™=ŒŠ‰……n  }ÃÂÃÃÃÀÁÁÃÁÁÃÃÃÄÅÉ…ÍÆÆÆÉÇÅÆÆÇÇÈÈÊÈÊÉÉÈËÊÊÉÈÉÊÈÉÊÉÈÈÆÉÉÇÇÊÉÈÈÉÅÅÇÈÇÈÊÉÉÈÇÆÆÅÅÉÆÉÆÃÈÈÅÆÂÅÅÅÅÄÈÇÆÅÆÆÃÄÂÃÄÃÃÂÃÃÂÃÁÃÂÃÃÄÃÄÃÀ¾¾¾Â¾½½»º¹½ºº¸¾¼Ç…  —Œƒ†›”„€v}’ŽŠ…€r„„~wqsj}vme^\`[ZcAFJMKJJGEB>;9?;6=794:5:48377874?8<41551-,/3;A>96/4/3,72343><;:<:99:894799677998;886561062.1623/0-)†˜œ—˜—–˜š––𙕖—“›M•œ“‰T^‰™‹Œ‘‹œ*‘І‰€n„ÀÂÂÃÁ¿ÁÂÄÄ¿ÃÄÅÄÅΙƒÎÆÆÆÉÇÇÇÈÇÇÇÆÉÇÈÇÈÉÈÈÇÈÈÈÈÉÈÈÈÈÇÇÈÊÈÈÉÇÅÃÅÇÊÈÊÈÈÇÉÇÈÊÉÈÆÇÈÄÉÄÇÇÆÇÅÀÄÄÄÅÅÄÆÄÄÄÅÄÄÃÆÈÆÂÂÂÂÀÃÁĽÀÂÂÀÀ¿¾¾¿¾¿¿¼¼¼ºººº»º»¹Æ€–ž¢”ª’¡ž—œ¤®¯©Šª¶­¨˜£¬±›”°”¬­›—‰Ž’ƒv›€prƒou€uonmZ9PuZJBO76<@22*.174;MBE.Ol„‰ŠŒ“|eSNTxˆƒivpaklb[5.00--+,(-+*,*)'-/0253376-120./,18-2314*“˜š•™——˜•™š–™”–œ” žƒ™¤€ ‘ž:Š…‡…†p  ƒÀÀÂÂÃÃÄÄÀÃÀÁÄÄÅÅ˘…ÌÅÆÆÈÅÆÈÈÇÇÉÈËÇÊËÉÉÇÆÇÈÇÈÆÇÇÇÆÈÇÇÇÉÈÇËÉÅÆÆÆÈÈÌÉÇÆÈÈÊÊÉÈÆÇÈÈÇÆÇÇÄÃÄÃÄÂÅÄÈÄÄÅÂÃÂÃÃÃÅÆÅÂÄ¿ÀÄÃÁÀÂÀÀÁ¿½½À¿¾¾»¹»»º¼»»¶ººÂ˜ªŸ‰™‘sŒ˜Œˆœ¯Ÿ’—œ…jvrs‘`‰M\sx†x}‰‚t„xv€ovvqlrwV20zZaQH;?8=@630300:EAA2_sƒ‹——„VK5*S¥£˜Ÿ–€m‡›X&//-...11.,.4/,.)(-128>G936:201(*476PM\)/¡“™š˜˜—•””–—–—“——¤CY™žAn•ŒŠ‘˜.‡……‚s‹ÀÄÃÀÄÂÀÄÁÄÁÂÂÅÅÂÊ„ÑÂÈÅÈÆÅÊÇÈÉÈÊËÉÊËËÍÈÆÈÉÉÉÅÆÈÆÉÇÇÊÆÈÈÇÇÈÇÇÊÈÉÇÊÉÆÈÍÇÉÈÇÉÆÉÅÇÇÅÈÆÆÆÃÅÄÅÄÆÆÇÄÇÂÃÃÂÃÆÆÆÄÃÄÃÄÄÂÅÄÄÄÂÁ¿Á¿ÀÁ¾¾¼¿¾¾¼¾¹¼¼½½½ºÃwŸ£˜z¤ª¢›w‘œ’› —ž†u€~’“–llynittt{qux†‚uwrrnvo5D1F8RbF4413H;:56./.255)2J`ffU15AD=Vs{f{‚€{‚pA'1/3969BEHC>0)*/+(/398MN9=EGCŒ‰…‰vÀÄÄ¿ÀÃÀÄÀÄÄÃÂÄÅÄÇ’ËÃÅÆÆÉÄÅÇÆÇÉÉÍÊÉÉËÊÈÇÈÊÊÈÆÅÈÈÉÈÈÉÊÈÅÈÆÆÇÉÆÆÇÆÇÇÆÇÇÇÉËÊÆÈÉÊÇÅÇÇÆÈÈÄÁÄÅÄÅÄÈÅÅÅÆÄÇÉÇÆÃÄÅÃÂÄÅÃÁÂÃÀ¿À½Á¾¾Á¿¾À¾½À¾¹¼»½»»¹¸Ä‡ ª˜w™¡Ÿ¡˜‡w—‰ƒƒ˜™…”rfizyvj_kdpme€dmy‰ƒuvwmllf^`_R_mf`E01/796/6DF7(*/)$'/+6:E@K[iT[OO^grp`3!-7<>PSJITTHOLR!),&*&,=E:A7;@MJHE7,%)($+@&’ž›–—˜˜–š•–•–”••™Ÿ¡ ™¬†5%z™ŽŽŽš*Ž…†‡‚m"”ÁÅžÁ¿ÄÃÃÅÄÅÄÄÄÄÌ‹‰ÌÂÄÆÅÄÅÇÇÆÇÇÆÉÇÈÈÈËÈÉÈÉÉÈÈÆÈÈÈÈÉÈÉÊÉÈÉÈÅÆÃÄÆÄÆÆÆÇÆÇÉÉÉÊÉÊÇÇÉÅÆÆÇÆÄÅÄÄÄÅÃÄÅÅÆÇÆÅÅÈÇÂÂÅÄÂÂÂÄÁÃÂÂÂÁ¿¿¿ÀÁÁ¿Ã¿º»»½¼¸¼½¹»½Çs&«—…{…†”‚ŒxŽwduŠ}hzxojz{{xox`Xq`u‡vo†‚hnpxwkcjqglmppk]TRQ9:DF7RjO:,--+("% ,321FW^FFKVY_H8!)>8IPNRV^c[WORWj6%+,,(+9K%(J@9FQKPHA6/)&$'%’š–—˜—˜›—˜—–™”–‘š•£#cŸ¦¢d—”‘Ž˜>‹Œ‚‚…q" ”ÃÄÆÁÄÀÅÂÆÆÅÄÃÄÄÃÍŒ“ÊÃÅÆÄÆÅÅÄÆÆÅÆÆÅÇÉÆÈÆÉÈÈÇÈÈÇÉÈÈÇÉÉÉÉÉÉÇÆÆÉÆÅÆÅÇÇÆÇÈÇÊÊÉÊÉÇÉÆÆÅÆÅÆÆÄÃÃÃÆÃÆÃÅÅÅÅÆÄÃÅÆÆÂÄÄÃÃÄÃÄÃýÃÀÿ¾ÀÀÀ¾¾Á¿¾¼º¼¼»¹»¼¼Å} žª„Іv€‹”yvsoqbzz{wxwoohkjome[YRH]rmz……‡…h_mrvx}zktpttmqjdtoZIED9C^WF.,/,----&&)#+'*+--3-1!$'!Œ˜”—˜™™—˜——˜–—“›•¤¬ †˜¨’””ŒŽ‰š4ˆˆƒq  ˜ÅÂÃÀÃÁÁÂÂÄÅÅÄÅÇÃÍŠ”ËÂÆÇÄÃÄÄÆÄÅÇÈÇÅÈÇÅÈÆÈÉÆÇÈÈÆÊÌÌÇÊÇÉÆÈÌÉÉÇÇÇÅÇÇÄÇÄÊÉÈÇÈÉÉÈÊÇÆÅÃÅÆÆÄÆÃÆÄÇÆÆÇÇÄÄÿÄÄÅÅÂÂÅÉÃÂÄÂÆÄÿÃÁý¿¾Á»½Á¾¿½»¼º»ºº¼Á·Èx"(†my†nf}…vlu{prdadb^UH?>@:43-%()+-(^mn‚vƒ…{uyˆ€ytmqtw{~qrcSakg]SF3IEC?LDNNOISLIFE2-) )‰¢’——™›˜™˜™—–˜™”—‘ ”B @œ–Ž“‹—;Šˆ‡„„t! šÀÃÈÂÃÃÄÃÇÀÃÄÂÊÄÀЃŸÇÇÃÄÆÃÅÇÆÆÆÇÇÈÈÆÅÇÅÆÇÇÇÉÇÈÇÈÊÉÇÈÇÉÈÆÆÊÉÈÇÉÇÈÆÈÅÇÆÆÍÉÈÉÉÈÉÈÈÇÅÉÅÄÇÇÆÅÅÈÇÆÇÅÅÂÃÀÄÄÄÄÃÃÅÄÄÆÃǾÅÂÀÃÁÃÁÀ¾¿¿¼¿¾¿¼º»»»º»º¾µÆu{‰eZ{lnwnoiicQKJ?4'&#!$#%+-..-/2442 kstpx{†‰ˆ‘‘|yb\v‡ƒ‰vw‡xb†fVMJL8&'*45-*--/++*2B2E@t‡‹‹‹ŒuQZi[Wsy€ojztfrmM*#&/9@G@EDCC>EQMJHE?J3#.*#‡š™™—š™›—™–˜˜˜—™˜˜©1)uƒs*E™™‘‘‘Œœ.†…€€q% œÉÂÅÂÆÃÃÄÄÃÂÁÀÅÅÂΚËÅÅÉÇÇÄÅÆÅÇÇÇÇÈÅÅÇÄÅÆÆÅÇÈÆÈÇÇÈÈÈÆÅÉÈÈÉÉÇÇÉÇÉÈÊÌÂÈËÄÊÇÆÆÅÆÆÇÉÉÆÆÇÆÇÆÅÆÇÇÇÈÆÃÇÁÁÄÄÄÃÄÅÅÇÄÄÄÁÄÀ¿ÁÃÁÃÀ¿½¾¿½¿»¿¼¼¼½¼¹»¹¼ºÂs .eDkObkXRB?5*-&&"'(-*/5230/22024411,+ggoiwˆtw€yxˆw|Œ†Œ}‚ŒlŒ|iW`tm@.446:12--/+,/=Qns„“š™žž¡¨€a>Z^q‚…|ƒ`i‰H:6,(':CK:4+.%&˜œš˜š™™™—”™˜—–˜“ŸŸ“¢¤”n˜‘ŽŽ•8ŒŠ‡……t! œÅÁÆÂÄÃÃÅÄÂÄÁÀÂÆÃÌ€ ÌÄÆÆÆÃÆÆÅÄÈÇÈÇÅÆÆÈÆÄÄÅÅÇÇÇÅÇÈÈÆÉÇÉÉÉÇÈÈÆÆÆÅÉÊÁÅбÁÇÆÇÅÇÆÇÄÇÈÈÈÆÆÆÆÄÇÇÆÅÅÇÈÁÅÆÃÅÃÃÄÄÅÆÅÁÂÂÅÂÄÂÁÁÀþ¾½¾½¿¿¼¾º»½½¼ººº¾¼Á‚ !|U\X>82,#/4;a^WPK<8=;6239633376826,/ ;ailmtho}znw‚††„ŒŠ‡fnhgZ7+3421//078?W–—„†Œ“™šž˜Ÿ£«rano‡}}tUm|\_a9('>HOC?6/:;)GC=GECH>14"'Šžš—›œ™—˜˜”•–˜—•’› ¢™™>b—Ž‹‹™2‹ˆˆ…ƒp¥ÆÅÆÁÂÂÄÃÅÂÆÄÂÅÆÄÉ‚¤ËÇÅÅÆÇÂÅÃÅÆÉÈÇÉÉÆÊÇÇÇÆÈÇÇËÇÅÈÄÈÅÆÉÇÈÈÇÇÆÆÆÇÊÈÈǹQ±ÅÀÈ»ÅÈÃËÅÊÄÈÃÂÄÅÃÅÄÄÇÃÈÃÂÃÄÃÃÃÆÅÁÅÃÄÆÂÃÄÃÀ¿ÁÀÁ¿ÂÂÁÀÀ¿½¾»º½¼»ºº½¼ºÉp24a\]_kad]WebLppotxt`osfTJC3/:3+32100-3Ieiy„wv‚tb‹€wƒ†“–Žlqz{gqdjy=+..1543*0Mk…—“˜™—˜š˜š—™¥Ÿ…X5Sj_d^l€iv{uzN!%8H?E@=/AYFK26?/tŽ–“•–—•–—““••Šp^d;Q_fjmnˆ‚xsn?&4:>E@FH? “Ž‹Q0ŠŽš*‡†„‚j(¨ÂÄÅÃÁÂÁÁÅÃÄÆÅÄÆÆË}¬ÉÇÆÆÇÃÈÅÆÅÅÆÅÇÇÆÇÆÈÄÅÈÅÇÅÇÆÈÉÈÄÇÉÇÆÇÅÇÆÆÇÇÅÅÆÅ‹qËÂÇÅ·”±þÆÅÃÄÄÅÄÅÄÆÅÆÃÆÄÅÄÅÅÃÄÃÃÃÄÅÁÆÅÂÁÁÂÂÁÁÁÀ¾¾ÁÁÁ½½¾¼¼¼¼º½¼½¹»»»Éd5(nnwYhxvuY‚poylh]nma\Ox€ulemfda`JA8.51-"-Yl{~|qtvy}r……‘Ÿ˜–x±—ªˆ˜…jF7K]YQE?;0:1-|’ޑޑ’“‡†u_QSn~Œ‡‘’…tl‰mjl<#0@DIGF>0H>.--:KU[U,8>9(„£š™œ›œ—™•˜›˜”˜–˜›¥­& -†›‘ŽŽ–9ˆ„ƒlªÁÁÃÁÃÅÅÆÇÄÅÅÈÅÆÄÉ{¬ÈÅÆÆÆÇÇÅÆÄÅÆÅÇÇÇÆÉÉÇÆÇÇÆÅÉÈÊÌÌÊÈÇÈÈÊÈÈÅÅÇÈÆÉÈ¢mºÈÅÁÃ{4žˆ¦‰¶ÇÉÆÅÆÇÆÆÄÄÃÃÆÈÅÄÁÂÁÀÄÄÁÄÀÄ¿ÁÁÁÃÁÀÀ»½½¼º¼¼ºº½¾»¾»½»½¼ºÉr!+iˆˆxugu|yw]—„wszyh_iˆ€eookYZ^[MI:31,.&.Rl}ƒ‡~Œo‚‹Œ™£¥“ޡ𔢗ª£ŸšŒqc_WYEED==1:)Ex‡ˆ‡ˆ‡~wwyrig^j‹Œ‘•Ž™™Ÿ”‰qz|nf305=AEKOD.,.;PWODbaaO=]f‡¡˜™›™š™™–—™–•™–˜–ššœŽp‰~™”’Ž‹‹Œ—1‰‚ƒƒ‚p%²Á¿ÃÂÅÃÁÆÃÆÆÅÅÆÉÄÉ«ËÆÆÉÃÆÄÅÆÅÂÅÆÆÇÅÆÊÈÇÈÇÆÇÈÉÇÇÉÉÉÊÈËÄÈÈÊÅÆÆÅÈijj¬ËÉÇÈ‘}™€²ÏÇÀÏÆÅÇÀÃÅÅÇÃÂÃÃÂÀÁÂÀÃÁÂÁÂÀÀ¿Á¿¿ÀÀÀ¾»½¹¾¾·¿¸¸¾¹»º¼¼¼¿¿»Çf*"‹‰ˆ“ˆy~‚…xfx~}w}eFq““eazotmdJZM7250.-)Dhtƒ‹…{}Ž|Š˜§¢¦¡š£®·¢¤¡“ˆxxWTi^X?33$SkmfwZ3Velo]Yg2‰œ ˜ž˜˜›—š—˜–›“—–”–™–—œ••‘Љ”7„‚‡s°ÀÆÅÁÅÅÄÃÇÃÃÅÅÅÉÄÊs²ÉÉÆÇÆÆÆÆÆÅÄÇÇÄÅÄÆÈÉÇÇÇÆÈÉÉÇÇÉÉÈÊÉÇÅÅÇÌÈÇÅÄÃÉy•ÆÂÉ˧]¹Ùλ>@ž€‡ÆÃÂÄÅÃÄÇÅÃÆÅÃÃÁÀÀÁÂÁÁÂÿÂÁÀÁ¾ÀÀ¾¾½¾º½º¼ºº¾¼¼½¼º½½¼¾¸Æm•©•|sx…“™iTnzbhfZPaj‡zA\x{tƒzSG<302+0-&$Al„|“eVl‡”†„’”¤°‡·§œ‹¤²¥¤›‡•b~qrkR?4!=mmbeu‹ˆrkQj—™›š Ÿž¦ž”‘†ugA*4JRDDEDCY]Vsz‚…‚ˆunŒ—Œƒp'†™››šš—š›˜—•–––––•˜™š˜œ”˜ŽŽˆ—,‹„€†~o%¹ÀÄÂÅÂÀÄÈÅÇÂÆÅÇÈÆËx¶ËÅÄÆÅÆÆÄÅÈÅÈÉÅÈÅÅÆÈÇÇÉÇÆÇÅÇÉÇÉÈÈÈÉÉÉÊÉÂÌÌÂq¤ÎÉÂÊZËÍÊκ¸ÌÒÕÈ9"³ž£»ÅÀ½Æ½ÃÃÅÅÃÆÂÂÂÄÃÁÂÆÀÀÁÂÂÁÁÀ¾À»À»¼¿½½¾½¾»¼¼¼½½½»½ºÈ^$&¡”—“‡Œ~t™nsƒNs…ƒˆtX{ej\“t;sdRB0::8584333/0/).]s‚|q}lgr|wz|•†–¥¤‹œ€…™‘‰Ÿ•‰n_P`^YH.Z_od\ZLg‚…ˆ“”’„swtun'?1B[PGPcQF8Ê¢ÂÓÕÌÙÐ[¥‡‘‰µÅÄÆÂÅÃÃÂÅÂÂÁÅ¿ÀÁÀÁÀÁÀ¿¿À½À¿Á¿¾À½½¿½¾¾½½¼º¾¼¼Æg*‡y‰’›–˜•—––™Ÿ˜‡€q^gŠš„qUmZKOKC@;=7857;6:8738G<4M‹\¿ÅÁÀ¸Ã¾­‚gu‘´„‘u¡¡©¢¤‚†er€-0MVc`]k^^^Ze^^O6@ZnplxiRyD*+$*//QUbdZQsul‘Œœš‹j[v¥5€¥•™œšœ˜›˜–•™˜••—•²[%,9yHt•‘‹‹˜,‹†ƒt)ºÂÄÅÃÇÂÃÃÆÆÄÆÈÇÆÉÉwÁÊÉÇÈÊÊÊÇÇÆÆÉÆÇÊÈÇËÆÈÆÅÆÈÇÇÇÃÆÉÈÇÈÉÉÉÌÌΓ‡ÄÆÄÆ·c¼Ëϸ:LNI3=©§~ÌÖÑÑܲ.d—Š™ÇȾÄÃÃÂÂÃÁÁÁÁÄ¿¿ÁÀÁ¾Á¿½¾Á¿½À¿¾½À¿»¼»»¼º¼¼¸¿ÄX*.~—“’—œ“œ˜˜”‘ŒŠ‰o@]„~‘m^ZMKKKE@G<;67?HB=847;9:4%\p…­»Áº´»¯¸½Â¸–‰€©©ª¯ª¥¢…^sy$5_]^^VR72IIQNeqvˆ•zpfCZ5*(,) )*<8HSYTby{~|”‘‡v†¯4Š¢šœ™œ™™™——˜•˜š—š˜šš£Q|X+f˜˜Ž‹Š•;Ž…€ƒq 1·ÂÄÄÂÆÃÅÅÄÆÆÅÅÆÅÇÌmÆÈÆÈÅÈÉÈÆÆÆÃÅÈÉÈÅÉÊÇÈÇÇÅÉÉÄÇÆÄÈÈÉÊÈÈÆÉǬn³ÉÁÂÍoŒÑÐÕ]0JEN7#a¸g°×ÕÒØÙt5¤†”zÉ¿½¿ÁÄÄÿÁÁÁÂÁÀ¾ÀÀ¾Á¾½À»¾À¿¿¿½¾»¼¼»º¼»º½¸ºÃ_2ŽyŒ——–™˜–—›–Š…ˆ€QPmqmŽe\TPLNPMHCE@7DNIB=:<8945<7/wcе´²µ²±²¶º¸º—{p”®¥™›£œ¢¢«¢‰xT=icXP=2#jmo‡¢ª©±¬°°½¶µ°‡rŒ¦—¤¦”—¤¤—–Šo}ƒYUZ89I`krwx~}…ˆŒ‹—Ž<.&()-(&&$#1:?NLYNY‹Œ‘—„ž ,†Ÿœ˜œœšœ—™––•˜™˜——›¡š£š’?€ŽŒŽ”?Ž…„ƒl <¸ÆÃÄÂÃÃÃÇÆÆÅÆÆÆÅÈÇuÆÊÍÇÇÇÇÄÉÅÆÅÈÇÇÇÅÆÅÇÈÇÅÆÅÉÅÇÇÇÊÈÈÈÈÇÇÊšy¿ÅÈÇÄi±ÕÔÎÔ×ÖÛÃV1FPGDq¸‚¯×ÙÚÕÀ:'©”€—ÃÅÄÅÅÃÃÄÃÂÂÁÂÁÁÂÀÁÀÀ¿¾¾½¿¾¾½½º¹»¼¼¼»º¹»»Â[#¾”‚‹Œ“™’—”’Œˆƒ€„aeuoffN^[PQOIOX_dhldYq7Ab[B;69CBB!_zxo€™©³¬¬§²¼¿º’ˆ’Ÿ¡ž³¨°ª…€‰}{‰z|‚\bh@K\kijgefmqsz‚ƒ…sH%$()++))(.&,KOAD_o{}‚™œ‰Š›0„¢˜›œœš›˜––˜——–•“” \$…o&<|›‹Š“:Œƒƒƒ€j2ÀÇÂÁÃÅÅÃÅÈÃÆÆÈÇÆÈÆyÁÌÈÉÇÈÊÈÈÆÆÅÇÇÌÄÅÉÈÇÅÅÇÇÇÇÄÈÄÈÉÆÇÉÇÂÅÌP¬ÊÁÉΔ…ÒÐÐÖ×ÒÔÕÛÜ’;?NM>40ªž”ÌÔÕÔÕ{ £‘ŠyµËÈÇÅÆÆÅÉÁÃÅľ¾Á¾º¿¿À¾À¾»½¾¿¾¼»¾½»¹¼º·ÃY&,²•c€ˆ‘˜‘‹‹„}if‚‰}rdc][[\ZgkcpdqtnSLuP>hmh`V<;EQE@GunykZ„£´²«®º¿°žŽ†  µ”˜Ÿ–©®µ¸±„e}~sn.B[XYXQTT[Z_hid^P-$)')(($1,,*,(&EA5Rfjpt’‹‚œŸ’4…¡”š˜––™›—™–“–¡‡"30 Œ•‘ދЕ@‰„~l >º¿ÄÃÃÅÃÁÅÊÄÆÄÅÇÇÈÃqÄÉÇÆÆÇÅÆÈÆÅÄÆÆÉÆÅÈÅÅÇÁÅÉÆÇÊÇÈÇÆÇÇÈÃÂÍ“|ËÇÅÅ´nÄÚÉÆ¬ ÕÑÎÐÕÜÈaIEO:yµŒ¿ÎÏר«]¢ˆ˜ÈÉÆÄÃÄÅÅÆÃÄÁÿ¿¿Á¼¼¾¾¿¼¼½½½½½¼½½¹¸À¹¹¿U¸·_`kw„‹ƒƒ€ucjc[o€}ed`]Y\^dlunrw]`pc=xt~ ™‰\\_HKLJPBNjbWcRax¯µ³¶Á¯¢«¥Ÿ£‡¸–€S”ÁÇÇÃÄǹInioR/G=A?>=;BGEIOOE5" %''))')*7<<977'1<7Igpx‹–’•¡¥/}ž™™ššš”ž–˜˜–˜——–¡z ¾.[ª¢5j›’…•‘1‚„ƒ}e>¾ÃÃÀÂÅÄÅÆÈÅÇÅÇÇÇʼoÇÃÄÄÅÇÃÄÇÅÈÆÆÅÇÇÆÇÇÆÉ½ÄÉÆÈÆÈÆÆÅÈÆÅÆÍÇaÁÇÅÈÇ{§ËΫËZ·ÖÏÐÖ×ÜÔŽ)=HNF.1©”–ÍÎÖÞÕ6'‘Š~‘ÃÅÃÃÃÆÄÃÃÅÃÃÁÁ¼¿»¾¾¼¾¼¼¾½½¾½º½¾»¹ºº¹ÁL%#”º¬‰^PRLMVei6A;7[sj_c^_S\knqgnzh‡o{‡orl|ª¼¶ÀŽB^bSPLMF4&Qag‚ŽWgŽ™«¢–—¥š—‚¹¥ƒz·ÆÅÄÄ¿½Ã”za5*.-+/1-#-13123)+"(&)+,/++9;BB;?7;/,%3MRo…Œ¥6 ˆ£–žšš—Ÿ™™——–—–”¡~ ¦7I››,a—ŽŽ‘7……ƒ€m I¼ÄÂÂÂÄÄÆÆÈÆÈÄÅÇÇÇÂmÉÄ¿ÅÄÆÅÅÇÅÇÆÆÄÅÅÇÆÅÈÇÇÅÈÈÉÅÊÅÇÇÇÈÈÉÍŒ‚ÌÅÆÇ¢vÉËÍo \φŸÌÕÍÖÓÔÛ½TFFL<&p³ƒ¼×ÏÔÖ…}‹Œ¹ÂÂÃÄÅÂÆÅÃÂÂÀ¿ÀÀÀ½¿½¾½¼½¼¾¿¾»¿»¼¹º»»ÁS"œ¦¡­Žpcm{aWLtS*>cfhbbbckf]sidrx‚n‡‘wp}šº¸»ÃÀFn\WUVH;(8JOfyƒx’Œq‚†‹¯|u©¿ºÂžÁ¾Ã˜¢‚C/--',,,,-,()-,,(',,++,,.4;>,)%*41!2¨‹´ÓÎÔ×ÔÜ5@GBK(8‰°’ÑÓ‚ÇÄÅÄÁÀÀ½¾¿ÀÁÿ¿Àº¼»ÀÁĽ¾ÂÂÂÂÃÂÂúÂÀÃN$6ƒcKD?V‰ckjfilWgebcovxem`Abs‡“}jŽ˜}–¬³´¯°­«¯sXXXIG;300-)--KYgj]XViwooj‰À¿Á¾¼¾Ã¾³v1(/,-//*--..+,+,,*+,,),+29NBGZSSX\\JEI??L7&- 3ju–8§–››››˜œššœ˜—˜•–”‘•‘’”Ž’Ž9Ž…‚‚„n f¾ÀÆÂÈÄÄÄÆÇÅÆÆÅÅÉȽpËÅÆÆÆÈÉÈÅÇÅÅÇÉÇÅÆÇÇÇÆÆÇÇÇÅÆÇÇÆÇÉÇËŠÍÉÊÍŒŽÓÒÔÑÛÔÜáÛµW071I–¦†ÀÐÓËÓÚÁQ1CEGG"A¡¾Î—>1ŠÆÁÃÁÂÂÀ¾¾ÀÁÀÃÀ¾À½¾ÀÃζ —”‘‘•“˜™¡œ¤«d'#nTMGGKUfHVha^^dabfoonqp|\€ŠŠ…z›³ —–ƒt§½·¶´®¬­³Š\UYMA7-3240/$&"1jlS@Bi]B|ƒœ}¦²¼Ä¼¶·¹¥O,,,-.-+../2/,//--,,-+)0)7:B:7ATc[]\ZLORNZ;(*o_.›Ÿ™™›œ˜›—™˜˜–—•–”’—˜“–“ŒŒ2ކ‡ƒ‚mjÃÄÄÅÅÆÅÁÅÇÆÈÇÈÄÂË»wËÈÆÆÆÉÏÈÆÀÇÉÉÈÉÉÉÇÈÆÅÇÊÈÈÅÇÇÆÇËÉÆ¿q¹ÇÉÎÆ]¼ÎÇÆ¿Ÿ¢Ÿ¨·ÌÎOI@.Fž¡ÈÐÓÔÓÞ’+;TG@³Ûª2b)ŽÆ½ÅÁÅÂÃÁÁÁÃÀƽ½¾»½ººn"2@F>=73..,3,)/8C;0:/$ E4>=9JRZew†œ’iFH6-=¥•”ÄÒÖÕÚÇ_17m¼ÌÄIF‹=ŠÄžÂÁÂÃÁÃÁÀ¾¿½À¼¸¾ÂL:¡ÌÓÝÚÜÚÝÚÚØÚÙØÚÙÔÓÒÒÔÀs#:@?K@Loffctmbd‚v€c€£Ÿpx­T™‡­³·³«¥¢©nTKI842/2001/1/*0-")KYSWXCdnBD|Œ„yƒŠW.L1=9=32G=692476;84531314/0-=7J\CH\ebecW_]TI9%(+!Sp( ƒŸ—š›šœ˜™—˜—–š™——”™fŒ”Ž““Œ;Œ‡€†ƒmjÂÁÄÄÄÆÃÅÆÆÄÄÅÆÆÈǹwËÄÿt¤u yÁÆÆÇÈÊÄÅÈÇÉÆÉÈÇÇÉÈÇÈÉÄÊÃ²ÈÆÊÍVÁÍÌ =@@B@=4844CLPMGH@I¥‘›ÂØÕ×ÈE«ÌÒh2…™?$¯Ä»¾ÀÁÃÃÁÀÀ¿¼ÀÀÅÇ“7±ÍÑÔÑÏÑÒÓÒÓÓÎÖÐÓÏÑÏÑÒÖÔÜLONM^ijlpukr|Œˆzxž¤–ˆim™¬±·­ £¨–fZ@HD50///--,-..*3(-'#(>TUfjyi`iy‰~u‹cv‚LDKMFN`^\OOI:=69365544717.4?GSWdfpnuh`neRVQO>H,'r8‚£šš››™š™˜š˜š˜”———‡Ÿ•””•’ŽB‘‰‚‡‚q mÅÅÇÃÂÃÄÅÆÄÅÄÆÆÇÇɺyËÂË·|šXG¯ÈÇÊÉÆÇÅÅÈÊÆÈÂÄÅÉÊÆÇÇÉÅ©zÈÆÊÍ~ÐÖË[HQPOMLHILNJJHIOHI@5Wž…™ÄÏØ¨ÓÔ "‚¤Feb¼ÇÄ¿ÃÄÄÁ½¾À½Â¾ÂË6‡ÆÎÑÐÎÍÎÍÏÏÍÏÏÓÏÐÎÔÑÑÍÎÏÓÚ_ISP]ndvtstxxpzv¥¯ªž¤†€‡ˆ—žœŽ”®±±­ªœ¾ŠOV?@:25//.1000.-/+.0**)").Iœ™–ÊÔÎÏÃ.Z¯—¿«È"·ÅÂÂÁÁ¿Ã¿ÀÀ½¿ÆÃ+½ÑÎÐÐÎÏÎÐÐÐÐÐÐÎÑÍÏÏÎÑÏÐÐÑÚªcTekq†y{xq_uje‡ –˜ nnŠ¥¡¨‹ˆ©³«ª­¤«œsSJA:72664/40//-0..-./.../)%(=UVcdd^WW/`e_N78UdmSCbreaa\U==::<5E<>=;;FMZY"^YNFbgm[DJU=5F@$5|¦›—Ÿ—œš—šœ˜——™••¦ !!"$!Š”ŠŒ‡?‰ƒ€q pÊÄÆÆÆÇÅÄÆÆÆÇÆÃÅÇȵ|ÌÆ¹Ëj4”™\µÆÆÄÆÈÇÆÈÇÉÈÆÇÈÇÇÈÈÇÇζzÈÌÇÊžsÓÏÕϰ»r<4IIQD2& +/8=;?7)d ‹•ÕÓh$²Ÿµ‘¤ÛÁ®ÄÁÃÂÀÁ¿ÿÁÀ̆ZÑÊÑÎÌÏÐÎÎÍÎÍÏÎÎÍËÌËÍÍÌÍÎÐÒÍ:Seer‹ll†]lqtPmgvŠŠ‘‰z©©–~“««ª£¡¬¥zQHA9484/0-.2,.,//2,-+./.--*--9DL9D?QPMD NqggsorrimuKY;>h_\I;:;:6E?B@DBEMI&A_'?^cpo_]fSQDE'&ƒ™œ›Ÿš™™˜šš•–—–—˜¢gRPON.x–ŒŽ‰:’‚†‚~h zÊÆÇÇÆÇÆÆÇÅÄÆÆÅÅÇ˰ÍÄÓÆÌÂËÇœËÊÇÉÆÆÇÈÈÇÉÇÆÅÇÆÆÉÉÈÉÆŠ£ÊÄÇÐi»ÒÎÍÕÕÔßËh49NCEœµ‰¬ÕÄ·£—‚lO3!3. ›¥ØŸu”²¢¤³Ó…ŽÐÃÁÂÀÁÃÁÀÂÁÁÃÉBƒÑÏÎÌÐÕ×Ö×Õ×ÕÕÕÑÕÓÓÓÓÒÐÏÍÏÐÙJHpo|ybHn„jiŒOgdkjhxu}}¦œ©«¢¥¨¥ªQ:B<844940/--0.*0,/+.'.*.,,/32IB>AJ\]FP1$:@iliihjia`]QJ1,WXgRGB@?;CDFEGF<4&‰ÇÉÎ6oyƒp^‘z•¯ž ‡”ŽYMmŒ’sbˆž¥¥¬®™tUC<70;BSc[\`MNMZRE3+/.-025955IFCmS^k`QHnrlfN‡Žš››–œ•™š™œ’Vwxqd\Q[XUOQITRO:3DSZIYNF@J[aY_ibggbgi.ƒ ˜žš™–˜œ™›•——™™žeY2;F;BG>DIHHOFAHKKJPB'0ÎÐÖL:—hlˆt©¼«›‘Žš}|ˆh€› ŸŸ¤ªm@:E7.@LO]`TV_RMLRPbP,+.,/769:DVDVF9mhMO…vlˆrVF:W‚•š–˜–™››KhmTh/MWUXSNLSRJ0+(0>,6:GCQN_dTjgTOabk.{¥›Ÿšš™—šš™š”˜—›š•ŸŸ©§…4Œ‘މ‘ˆ@ކ„ƒq ˆÅÁÈÅÆÅÆÅÇÆÆÆÆÅÊÅ̪ÒÍÅÖÜ¥“¯ÈÍÇÄÆÆÇÆÆÈÇÈÇÆÆÆÆÈÇÈÈ{‘ÈÇÈÉrµÔ؆;<,T§ˆ©ÀÔÏÔÏÒר¬V58=$@Ÿ”½«ÉÓ«#­ØÐ×Ñ×ׯÆÐÂÁ¿ÁÁÂÀÁºÂÀÃÁʹ ²ÎÜr*dŠ?.‹JEKG8ud@IEEHGDªÅÔ™AЇ˜©oš³µ’‰ž‘©¦ˆ{” Ÿ¥ˆ†UF2.7ERPT^aZ[VTLPFQV?E:$.4;@GNLMJh/I-Gµ¿ÌNZÊÄÄÄÃÄÄ¿ÄÀÀÆÂÅÃÁº»Á»¿Á¾Ë¡ ÍÒ¾K8‹”x…‡%ÔG41:6XÆHHKHLIL|ÍѲc‚›˜£š¢§m‡†š¤œY•™Šj‘nŽ˜§’ƒSN7832M›£†¥ÅÖÔÔÚÖÙ¨L0:2)…´Í«-ºÇÊÅÅÅÄÁÃÂÂÅÄÀÅȾ¼Ã¾¿½¾½ÑS_ÑÒ¥/J¦«mˆ8Öy°\6ÊYALHIBG$KÌÈÃK™¤˜’Žƒ]{šž”‚6‹Œ˜sq€¦”}VLG5.:HT_WUKT^^\XWWTZ_lUOYY^d?04[lSJYmOQI3(0AGAHW]\{EIVvhdZUWTgz2|¡˜™™˜•œ™—˜™›™˜˜“¢v²z1;•ŽŒŽ?–†‡„f‘ËÂÆÇÅÈÆÈÆÉÆÉÆÈÆÈ̦ŠÎÍËǹÒÌÁ¢¾ÈÅÉÇÇÈÇÇÈÆÈÇÈÇÈÇÆÍv ËÄÇËp¼ÎÛ©j”W/2=IGD5$%u ”“¸ÑÑÕÔÖÜE*]˜ËÎGeÇÆÀÅÄÄÄÄ¿º½Ç’œµ¾È¾¿ÂÁľÊ©ÓÖx99|‚oŠd+Ô0Ì=8ÌQ>OFLKF6ÇÊÖ'e®ª’ˆˆpksz„|zD|v€_bl{sh_NI 1?NRX\UYX`a[aXWLQSLUVRRRXm^BUW@B=;>dWy{dQit^Cs|W‚€Š…‚}‹“zennaQX3`_REF\Z@#)(36DGNU]_[`W?BizheYQJb;|¡”›–˜•™˜™˜˜œ™˜™“‘ura:!A‹ŽŽ•’“ŽC•ƒ†ƒ„i  •ÄÄÆÆÅÇÉÆÇÈÈÇÈÆÇÅÉ¡ÊÄËÀF˜L?¶ÅÆÇÇÉÅÇÈÇÆÈÈÊÈÈÇÐÃc½ÌÅɶÒÏÒÑÓÙÝ·{3-FHDK>/Y”“­ÎÜÑ×ß©‰ÂÔ›$±É½ÅÃÂÂÂÄ¿ÁÁÀž9?l}úſ̻ ÉÔÐIDGCh|p3?Ô±h +ÈPCJEFIIE!¤ÑÓoHªuxŠ›Šydbyhpski_L?MSL$/=DPT]XSXc_]dni`OTUPNKWSTOak]`gaX=?8_k^zpF@RWRj“’6jguxojeikoZ\_dcnyIQNKTORG/ *+-0>OSRSddejhUmjZEKV1žššœ—œš˜™™šš™™™•‘– /Rq’•‘Ž‹Ž@–ƒ…„„j$™ÁÅÇÅÇÅÉÇÈÊÈÇÆËȿП‹ÐÍÎÓ©+Iе¼ÆÇÆÈÌÇÆÈÉÆÌÆÉÉÈÉͪqÎËÇÌ–ÑËÒÐÑÐÔÖÚÓŸQ)5EGNE<*1x“œÆÓÚÔ«ÏÙÌ;qÊÃÄÃÆÁÃþ½Á¾ÄÍž£–Ê—#+¸ÀÅÀÈ™ÒÔÇ4KIA>9<;'áË¿ÕÒÁÈÑJ(-Y™–¹Ï´ÙÒ¢5­ÇÂÃÃÆÄÀÀºÃÀ®½…“ÒÏ«†Ë¾ÅÁÌh5ÔÔ *RKHLHJ5.ÙÕ×××ÕØÇK>EFFFGH1hÏη%ˆ·½¼µ¶¶·µ¾®o‡eO/IO=/)&:ftvk_d`ei_Z\V[]VY[]VNTSe„egopbY`U.7AHP\WsmknekkQ#"Cwv|pcd@i}cS\iJAV\YY^Q0!$&*$''(+4BJV<5Ra\EEJGemdMX;{¥—˜˜›ššš˜š™–š˜•˜•œŸž›—’’’‹Œ‘B‘‡ƒ„ƒišÇÂÉÈÉÆÇÆÆÊÆÅÈÉÈÁΛ’γ %8P½ÄÅÄÇÈÇÇÈÈÉÇÈÇÈÈÈÎW¹ÆÀ˶rÐÒή¤­¸¾ÇÍØÊÓÔØÐˆJ-5DKJA71Zš¹ÏQÅÃÀÃÅÄÅÁÀò˜¾ÉÅÆ@«ÈÂy»ÃÇÄÄ;‡ÔØz8OJLKFJ=RПѪ¨¡ÓM@JJJGGI9,ÐÍȦɼ¼¶¼¹´¹¸¸ºxeS5<23503Sijf`^dcjl]ZUYc]WWW[g^^\ddEdkhckgR7ABCCFhs†w˜‚h,X}€ŠŒi[c|dVf^[_^`_S<* )*+,%'''&.6JNH9=CoaYhA]r{jV;~Ÿššš˜™›š™š™—•”–•–––”‘‘ŽŒŒŒ‘‰E’……‚k  œÃÃÈÇÈÈÇÆÆÈÅÆÈÇÇÃÍœ’͈£««³¨›ÇÆÆÅÇÉÇÇÉÉÉÉÅÇÇÇ̲rÃÈÌɌΰVhwƒ‹’˜•›ÐÑÒÕ×ÜØµg13JDIIE0 i±Ô§3¦ÐÂÀÂÄÁ¼½¼¾± /}¶Îα up=ªÀ»¿Ã¹Ù×D@HFILIE35\ G&*"K?:E?EJHIK!¾ÐÎ-†ÓÃÁº¹º³º³¹·³kb>183239Imsjd]XZdf[d`\`cZX\Wc{zmqm?Tqaag~vJ?U@WSEgQ9]e_f8€¡žœšš˜™š›œ˜›™˜••–žŠ™“’’ŽŒŒ•‰A•„†…l šÈÅÆÆÈÉÈÊÆÉÅÈÇÅÉÂΜ•ÌËÇÐÄ‘|¬ÍËÇÈÇÉÆÌÉÇÉÆÆÀÉÂÉËŸÆÃÍÆh²Õª )-$!,ž–ÅÑÏÑÔÏרÞÊ@8FGFGGJIE§ÔØFXÅÀÀ½¼··º»º»³j\=2460;CP^i`c]bagunwpvoqbXnbo…|rY4Shi_`kJ=I@DECDH6fÍÕ•¿·©¥“¡­µºÁ¬W1/747DTcqnit‚jv}€sŒddˆ}t~mN?5\myhl‰j,>`Wm~†~ob]ZD`›Ÿ•–v]=Qeo^gQUhmc_`\a[MM]^PI`_JJ4/+0,(('),% #6AOHKRD*;JMA'y ™š››ššš™š˜™˜––’œ¢\ZT\_J‚އ‰Š’€G‚„…ƒl  ¢ÆÅÅÇÄÂÈÅÈÇÇÆÈÇÇÃÊ“ËÇȸR°ÂªeºÆÆÅÇÍÆÉÂÅÍÇÊÅÁͨXÄÅÊlj²Ò·­ŒÌÕÒÖÎÕÒÓÐÏÓ«$,[” ŽÕ¿/ÈÕÌ9110+.,,,%&$2HDELN<.26*"€Ÿš›››˜›—™˜”–•™–œŸ )„ŠŠŠˆ@‘„…„†k ¤ÅÆÅÆÆÄÌÈÂÊÅÆÌÆÆÆË‘šÍÇÊÐxC–ÉÆÅÇÇËÈÁ0)ÀËÌÐÈÉ›}ËÊÀ¾qÊ˺3%XÀuºÏÓÑÐËÏÐÏÒÓs-"!"7±†¸ÐÕÓª±ÁȺ¿ÂÅÅþ¾À¾¾¾ÀÀÈg•ÉÃ̾ÿ¾Æ+”ÓÚU3EADHHKE,JÙÙÑØÚÔÖÖ9@HHKIEEG?ÇÕÌ«·Œ³­¬”ˆodK%8GCEEECC1aÚ¸ÅÒËÉ¿ÌCBBEEFDGEH¯ÒÎ ŸÄ•œ®¥‹’mA#3@R`_^tŒxytRŸ¦{|“…–™†:•Ž}U_kemp€rig`fljgx„nm_Nj†rZiodL<006(*)'(%"0-7G::00.} ›žœžœœ™š˜ž——•œ—˜¢–—–•š“”ŽŽ”…G†ƒ†…l¨ÅÃÄÈÇÊÄÂVUšÁÅÇÄÄÌŒ¡ËÅÈÉ›A)7ÉÇÆÉÇÇÉÉÌÇÏÇ©7ÈÑ¿ÊИ’ÓÏÖ´ <0!8ˆ¡Š˜¸ÎÏÐÒÎÒ×ÛàÒŒ67+°”ÑÎ(‚ÁĎȾ¾ÄÂÂÃÁÀÁÀ»ÂÍ- uÀ½ÀÁƪ(ÉÓËD?EFHIDD?BW O. eGDC@BECFGAŸÐÐ9·ˆªž„gWH9!,3UJXbcky{‹€€’Jœ˜š›¢¢” g§›ƒg~wmks}p[TO]q€{`WdTXwŠŽ–¢¥£¢tdmomome`_UUYVJPQwq_ppcobcvlm]gcUTI8874-+*&'&$&-/2#OE+z¡šœš›™ž˜–š—™›••“–¤(¡•–sS‰’Šˆ‹“‡I‘…ƒ„‡d ©ÀÃÇÉÇËÌÇΤ,„ÂÇÅʦÎÇϰ_–£zLÉÇÆÈÈÂÅÆÆÉÏÌz}As¦Æ†ªÑÏÕÒ¥:7,[™Œ µÈÒØÖÖÜÙØ†1ž—ܨªÇ¾¶7iɳÊÈÇÄÄ¿¿ÀÀ¿ÅˮӔ 0¿̞:ÒÚ³GGDEGIIHF?@CD/'+@‹@BDCFEGHEL"}ÍÒc\Ó¦¦†W2#$1;e/RXo€yhba•Ÿ–«¡ª°£Ÿ£”…¦ydbz‰rsrl[cL`atŠZXbsbRr†”•™£›kiovbkomb^\VQO>8>2W[Y[d\WcnzwtYCD\REBF=;1,)(((17-4A)+~™œ››™š™—˜—––›—™šœSi†$…Ž‹‡’…Gƒƒ„ˆe ¬ÅÂÆÉÇÊÎÁ^u£¿n¡ÎÅÌ—©ÎÆÒ¬yÔÎÇh·ÅÄÈÇÆÃÄÅÌÍÓÒËÚÈŠQÇqÆÍÕÑÐÚ©&4AI<.!O}’•§¹ÊÌËÙ“7)z¨Ùt9»Å¿Ì®•¨ I·¾¿ÃÁÁ½¿¿Ä¯š±Åªj½¸ËGÓÚ˜"FHGGHIFFLHHJ5N;’ÍÊADJEFDBEHF!oËÍv)§ˆB:.=02HWdasv†Ž›‘npŒ²£­­«­½¿®«‰p‰hh€x{pvti]mPeikTKOgyxe[w‰–›™›qflohepj^]YQRJI=NPVSCVgpnGN`Zjƒquj\f`SGNHI6%*%)'&%'&35>C(y¦š˜Ÿ›œ—–™œ–—™”‘ ˜µ)Vž&ˆ—‹†F’„„„…k  ªÅÄÅÇÊ̼­“¯ ½±¹ÉÇÍ©ÎÇɽ*ެˆ^»ÈÅÆÅÆÅÅÅÊÊ½ÍÆÑÎÐÚž­·}ÍÊÏÑÐÈÜÐ?'8;ABB.#8atˆ‰‡tO9#~·Ö{ÌÀÂÉÐÌÊs}1)Sº¾ÀÀÀ¼´/&©Æ¿¾ÇkVØÖk%QCIHGGDEAM=+*¶ÕÓÙÉ4EFBDGBDDCE[ÌÔ¡ ¿›f;3@GBF``[}w|š•‘˜«¤‚­©»¯¡¡ª¯Ÿ±¬€©†…†„ˆ‡xZD]‡qcU)1Nr€Šw]j{}tuwklsZo_[VH@=<>:Dq}w{]dtzmYZ6;$mrfSgefXNMNL;+,,'$'(%!#48?)!žž›—š–œ——š–—˜—–•š˜ÀFq«–6Š•Œ‰‹”‡F–ƒ…„ˆd ¯ÂÂÆÉÈϘbwymÄÉÉÆÎ°ÏÍÉÑ %-_¬ÌÅÅÆÈÆÇÅÇÅl*¡Ãr4uËÑÏœ„ÓÎËËÐÎÒÖÙ5-;DG=?<6."$,18-6;5”Ôɦ¿ÅÃÀÁÅÄ©ÌÊÈ”{½ÅÄÀÅÏ£\ÉÁª3§ÈÀÄ?yÖÚN2GIIHEEELAS(pÃÏÌÕ¹ª?>IADGBCCEY}vdrwŠuž‹·ÉÆÎȨµ›­¯«µµ³®¤Š§§}šqynpg>Hcr|YA(_SPRT^[Rjx{gjovlfrgb]dkB2IE?02/'(&$*)$%'%¢™œ›š—œ›šš™•›™š˜’£‰ª«ª³§ˆ‘–Œ’…•E•‰Œƒ†g  ­ÃÃÁÅÂÅǶ’‰¨ŠÁÅÇǡ­Ð¢JÂÁÅÊÇWÆÅÆÆÇÉÇÄÅ¿¡1–ÊÌÊ˃Àw»ÊÌÅ›’ÈÌÏÑÒÑÒרÖÅ‘]6,kÀÓÏÒƒÅÀÃÈ¿¾¼È=ÑÛÆ‰ƒ¹lg¦·Ê̳]‡fI¿ºÂ³ØÇCECBAACGF3bÑÊJ—ÓZAJGHGIFDFC?R²ÏËZ\_uzxnZ•£¡—¿ÊÈÈϲž¹œ©§¨©·ª²¤~¤š“‘`{pa@=Vq{hkX@elXiz}ste_Wlyvb]XNB=65+)-002,/11414:V]gfYjrr[^onCOo`K@NF(;F7956/'*)((&- (2)Ÿ¡˜•œ™šš›œ›™—––—•– bcgccXЋБ€L‘…ˆ„‡]  µÃÂÂÅľÆÄ— €»ÇÇÆÍ‡ªÓ¥KÓÎÌÉ¥l¿ÆÇÆÇÊÉÇÇÎÎÎÊÎËÌÍσ¾{Âе¨³“ž £¨°¿ÈÇÎÛÛÚÔ쩤¶ËÒÕÑÔ½®ÈÀÀ¿¿¾ÌC·ÓÒÍÍ…>% R‘ÈÔn660+.1414/-/12123OUK>:87.()')(%#"A^3}¢˜ ˜œ–š™›œ™—˜–—“’•5v=6b0‰—•’”ƒI—…†„†c ²ÈÃÄÅÇÆÍÁÂডÏÈÈÇ̇¯Ï¼ ²ÓÍ´_“ÆÇÈÆÈËÆÉÊËÑÙ×Ï˘}E†¯ÍΪEbx‰—¡©¥§Ÿž¥«²ºÐÒØØàÛÜÞÒÓÙ ¿ÌÁÿÎÅÈÈN[ 4›ÇÆÈÅÇ´€ U«Ê§Äǯ8ÈÖ«FCDBCCCCB?5,BÔÔÉAJ@AKFFGCD=CLŒÕÓ]mrp‚‹Š…ƒŽƒŸ§ÉÉÄËÇÃ¥¦«šŸ©§½³¸¬®”–¦”„~L8.Wgc$FQ[ƒhreenkAPfpm^cUF;3+*%',.3382223437;:73BSQEFXES_\XZ]ZV]Y<)RS>914:3,)&)()FLU4¤™™››šš™˜———˜—™¤©“C˜ª™™Ž‹‘ƒH“††„†c²ÊÇÆÆÂªk>ƒk„ÂÇÉÆÎˆ³ÊÍeLATÁÈÊÈÇÆÅÇÇÉʰuNq¾ÃGu˜•ÒÏ—$2'&"1>Vp~š¨«ª¦¦«¯®°´ÏÐ{/ÆÂÆÊÈœ%¦ÉËÓÓ!cÃÃÁÅÇÖQ…3lÁÆœGÍДC@BEAFDEG=@?:71;@5>@1/yy|˜‰ž„¥¥Ã®¾ÇÀÄÆÆœŸ¸˜Œƒ‹¨¨‹‰›twalN*;JGVx___‘psiedrb„YFI;20-,+,/.6893686763/888:;=90&%,750>@2 8#=IRH200$*/-,,),('(#=?H7~Ÿ›™š›››š—™—–•—••™ž˜¦œž“Œ’‰ŽŽœ„H“…‡‡†e ³ÈÄÄÆÅË•’Œ—Œ©ÅÉÊÆÍ…²ÏËÐËÓÌÖÌÐÈÊÉÇÆÇÇÉÊ“a¼ÌÉjÏÊoªËÏĶÙÛØ×ÒÁ›ra@B?>A@>85.$$ ›³Ì ÊÆÁÅÌÊÅÆº\T 7B‚ÁÁÀÃÆÄ³YÎÊШ~ÉÎq_ÖÓ`"@BBB?DEAEE ΗF?CD¢/;FBECCFJHJC+^ØÒXY˜ˆ’Ÿ•““‡ ³‰Ç» ­ÂÄÉÉ·ªƒpq¦–žš˜ˆ{oQ*4.4?adZgTpbdie]KPNA@6*(*,,2277:GA:6==:<9;@8?=;;;71('+')02=,;&=G7-.44>?91-%-&$%3D;=F5Ÿ››œ›˜œ–’—˜—’›Ÿ8-1*-””„M˜ƒ‰…‰c³ÇÄÅÈÇÆƒQbwNwÁÆÇÄʶÊÉÃËÇÎËÅÅÍÉÉÈÆÈÅÈÉ—•ÒÔØÏɵÏ]²ÒÎÖÕÖÓÓÆ»«pQ@BECB;?A5$ ÐÇÂËÄÁÃÁÄÃʾÃßÑ­Uk¿¿À½ÃΙ6¢ÇžQ¸Äx`ÒÖD/<97.($ -_R8>K.€Ÿ˜œ›œ›™š™—˜“™—™œ˜•@veiaXFŠŽ–„H“„††ˆg¶ÆÆÆÆÈÕÊÙÕÚÕÏÆÇÁÃ΄¶ÉÏÈÇÆÆÈÅÅÈÉÉÄÇÆÄÅÊ¥}ÌËÃÎÌ·FÔVºÎÌÑı™Z9((8??:A<2$ 0R¥»·¨¤ÏÖ¶ÉÆÀÃÂÀÁÄÈTzÊÏË´ÓſĿ¸ÇÆÁW h¿ÉQmÔÔ/9CDAAABADL!qÓBDD>B;GSIGKE>@BBFC?4),&#'#$'()+*(($=B@0&+eULT€G„Ÿœœ™šœ—š˜™—™—™’•šŸ¡Ÿ ™••Ž‹—M”‚„…e#±ÆÃÄÆÄÇÊÍÍÌÉÃÅÅÅÆÍv»ÍÊÊËÉËÏнÉÅÉÉÇÅÆÆÊÂT¤ËÌÀÊÆH¯q¿ÐϯC.#)19AAB>+,(Nu¦ÆÖÞÖÙÖÝÔÔÑ ÍÂÁÃÁÃÀÃÈq£É»Ëm Ä¿Â¿¾ÅJ¶ÒÂÌÅÑDtÐË 9@CA?@@?>O{ã+5)¤µ3DBDJCIDGJEEDÍÛ},{o‡£‘­žº›Ÿ°Ä¡®Í»†¦»­¿·®³«®š‘•t&&/353-.N^a_YZW\YaWI;//,&,%))97>><9DDFGDDGIQFGJGDAJJCA7*&*,&(&&'(()(& "DP^H>A>?>:=$ÔÈœ6@³½3”Ö¾ABCB@@ACEBM Ò×ÛÚÜÞÍg1IB73&,*1;@L0ÅØ’­¥™ˆ¯©¿Œn¢’¦Šo‚™§½²·³˜z’‰ŽƒF7.DUSPPI3B`aktL!IQ>5/-,',+',$;K@?>?B@ELNJKGJSIPUPPMKJHE9/)&+()&.)(%%',6>CHRG>BACC@BA9Y\0‚™ œš™š›œ—›——””‘’’™“”’”’‘‘Ž˜J‘ˆ…„‚h #¸ÁÆÄÆÈ̸nh€lœÂÈÅÈÎ{¸ÍÈЭo×Ú³pËÈÅÈÉÈÆÈÍÈÈØ×kcyΡxÉÔ¡==>>>GA86M\q‰š§ª¬ ¢¦®•¨°®Ï7zÐÂÃÆÄÄÅÃȿ՜*Æ¿ÁÀ¾Ç‹ÄÇËÃÀΦٹK>CBA7@F?AA*¯ÕÐÕÂzCFHEFEAFOOOJ9FI8WSRQRTNHF>6%**)+),*+*/CG@D==@JC<9?>=<=K- CT.¦—Ÿš›žšš™œ–š—–––”š•”“’’ŠŒ™ƒO‘ˆ…„‡l .³ÅÇÅÅÆËÒÔœgšÉÉÇÇÈÊw¹ÎÆÍÊ-fšvZÅÄÇÆËÄÈÉÅv"gºÑÙÖÎ׆ÍÑ‹ 7($"')/45'&!.=Wnm ›ÁÎ ËÀÃÃÃÂÃÄÅ`”ÍѼºÇÄÂĽÀŪ‰ÂÀºÍªÚ®DB?7KL@9DA>4 ^·„@1:FCCÔÈÍÌÐŒBF=2?IL+4$|ž›šžžš›™š˜ž—–˜˜•“–•“”’”‘ŽŒ›ƒM†„…ˆg  +¶ÃÉÆÅÅÎÈ´u°I“ÍÅÈÇÎ}¼ËÇÈÖºaAd·ÆÆÈÅÉÆÉÊÄLE#:¤Å}Ò…—ÐÚ¾’ÑØÍ¾¨‹tXH2'  (+3'*&!'I¢ÇÁ¡Ì¾ÁÄÃÂÂÃÈZ³ËÉÓg§ÇÂÁÃÄÁÐÄΛ=ŒÄ¹§Ù£=:Dƒ·AHD4UME6CEA@( 9D@¸Ù–·£ ¾È½£›‡›Êº±¸¾¹­³Å®©½®~ubzk$&2T]YUBSMQXV^A4/*53-/-*+*,,,.;=JOR[`kR\vŒ„‰4**+$$DO\dmSQLE0)%)()-2575CP^_I0GHGAD?;BB=BGTE%€£šž›šššš™šš™——™˜”’—““’Œ–…F”‡††‡k  6¶ÀÈÅÅÆÉÒ­”×°ŽÇÅÊÅÏw¼ÊÅÉÍÍÌËþÄÅÅÇÉÉÈÉÍ”©Î¨P3Æ{•ÏÑÖÕÔÚÞÞÞÝÝÚÝ×о¡v]H,)..] Ìº²Ê½ÁÄÃÄÄÂÁ”ÇËÇmÅÂÀ¹α{¡Éд§·¼­Ø 5.©4>›S6G*…âÔÇÛѼn4AB5,/>VOGM!°Õ ±§ÆÌÊÉüš˜Ã²ª¹·½¹¿Á½¸´žyƒ|e1(9@JI71++*-+$+*7U[NG@CmˆjT]`_ƒ„~‹–°¯nuaj\^q?OK1(%%)+1BCEFMJH@GGGHAA39BKXbcVNX;QN. ˜—š˜™•™™–™˜™–™—––——–”–’“‘‹“…N‚ˆ…‡g 2¶ÈÇÄÆÅÈÈÍβ¿ÊÌÉÇÉÍyºÊÆ×‰{ÃŰÉÇÉÈÉÈÉÈÂu/rÈÐÑÑÑÊožÍÌÏÍÍÈÊÊÌÑÎËÈÂÀ»¹±¯¯±²½ÉÖÞ´¢ÔÒ²¿·ÇÃÅÆÄÂÃĽÄ{ %“½Á¿¸Ã¹••ËÎP‡Äº²ÔUŒ”¤E¡dQ¶>/3,$*eª ?AË"ÅÈ‹SQH¥Ú ºËÉÌÊÌÉÉÇ·q’±·À¼ÂÄ»µ±žŽ„0+2;NNV]UZea]VG938EDI?.,)-),/2*BZT]\_|Šf‰›…Œ‹¤Àȹ¹}‘‚s_]e4PO3(''/1>GLNPOVQ4CNLK?<(#$%$&&"IŸ¼…ÂÄÔ¥Ƚ¿ÂÆÅÁÀÂÇĶT [m¬Æ¤ÈÇÁº GÆÏ†–½ µÕˆˆ˜Kwa ™•u%cƒWo«f[º³"GBÚÇÜÔÔ„=PŸ× ¸ÍÎÌÊÌÍËÉÅÄ‘¥ ¦¯´¿ÆÉ¶«ŠF"%8EKS[X\lqj^YG>76?OZG/3+'2¸ÅÅÆÈÅÅ&F3ˆÁÃÇÆÊtÁÊÇÑÊ´||°ÔÎÉÆÆÈÈÈȾl)¡ÖÑÖÒ¹Ìj«ÎËÚ¾q-.7EHINNDDF9??<;GFB?$<̉ԡ˸ÁÀÃÆÃþ½ƒ/°ÖÓ‹±È…yL-šÅÜ¡,T«Æ¶»×ƒ ÖvU«‰lr…FDsÙÓØÙÏÔ¢P?:>1'&6 ¥¥È—̹¾ÃÄÈÀ¹ÅÓ£%%ž‰˜Ë¹˜ÖËv s¸Ì¸É÷ »Ôy¤P‹g–CEhL|IT…WF/6@B:"Ç#$'>:B@£Õ˜¬ÒÅÌÈÊÍËËÅÅs‡gº¯ •Šu@+=VbQT]_e_SEJZIJ:HXVGgTH19@@^ULЇvmž“|y·»ÇÃÂÁ¼¸¸°°›Ža|Ž{‡\Mdf.HSQ„‘jR6quiƒŠ€‡uzoutPIXUWVY[F=SRgj6‚›š—ž™˜š–›–––˜••—’”KŠmt¦]z“•J“†…‡…^  C¿ÆÆÆÈÅËΫˆÓŒ–ËÃÇÅÈqÃÇËÒŠ™ØÓ·jÄÄÆÇÆÆÉÇÍ«_o%8¡¼ÓQ«ÑÌe()O\{Ž ®ºÅÍÒÕÖØÕØÓßмs(;Y®Å¢ÆÇÁÂÃÀ¸:’~¶Ë“7 ~¼¹›‰ÄÒÊ ?6&©À¸ÀÔu“®„s\_À¦ˆž9,D+@‹uggš¢w«¿ÃÁÃÄÁ¾­Ÿ~jjf“Ž|‡th1%#Q|–£¯¶ŒD7UgWh}’hufvocT\VXZ]U5`mfeg0€ž™–œš˜›–š—š˜—–™–ƒx±q™a™’Œ–J‘„‡††^ @¼ÈÊÇÇÊÈÄž›Í–ŒÆÆÄÉÇzÂÇÇË’hÁƆ†ÄÄÆÃÅËÇÉÍÍÆÍÔ¤\ ËS®Õ².YŠÑÚÚØÖ×××ÙØ×ÖÓÔØ×ÖÙÚÙo3;µÇŸÉÅÀÿÊÊšˆRV¾×ÑÀ¾Á¸ÎËÉÊÚÇ ’ʯÀÕv”±Œ{SaS4Á•=4+~«Ò»)5?98%¿Tb\oh0K ¦Ö•°ÇÊÊÆÄÊÌÍÇ®“¾­”˜‰›‹N*(;]gefhh`ktPMHQV>5ASX_@R_?HJT_dpqyfuT\q„ªƒ€¬ÁÇÆÇ³ŦšƒNUgŸƒvhP \|¡§©·¾¬€nƒ’„zz‹tqnq\WW_^bLYad{mr4‚œž–™š™ž˜™˜š—˜—–”Ÿ¡zxœ”h”š†P—‚ˆ‡` A¼ÅÇÇÆÈÈǯe[¯ÅÇÅÉÆtÃÊÇÌÎ= D³ÅÇÇÅÄÆÆÉÊÈÍÖÎØÕÒ…Íc¬Ñ &qº¢ÂÊÌÍÏÏÐÐÑÓÓÓÐÍÎÓÏÐÊ}:<¥Î­ÌÅÀÄÂÇÈÊÔÕ3?‹ŠÄÇÅÀ¾(20KˆÇÒӿ÷¿ÚxBÉ„ˆI.©‰g€œÚÖÚÜÕ°(>@6/Í$)@@¦Ù“»¹ËËÅÈÊÊÆÂ¥®º¡Ÿ‘€T&5ToyribhojlU:O]L@,?LX[L?]5PWki]rˆ‚™i]lŽšš„”¬±®f=•ˆ‡`š ™ŠfR #p~“ Ÿ«µ£—xƒžŽŽ…‘ˆŠzsdnbUTbecg€~w|~4‡™œ˜›˜—›—™—œ–œ”š“›§zx—pˆŽ’—‡J’ˆ…†ˆ` @½ÈÇÃÇÄÆÏÏ´‡¯ËÈÇÇÊÇwÄÇÈÓÍÕĺÃÌÌÆÆÇÇÇÆÅɪ|wŒ«ÍʸÑi¯Ó­)"–µ¢§Ÿž¢¦©««­¬¬¯­ªªŸžq?,S³Ð¨ÆÆÂÅÅ¿ÂÆÅÇËÏÙª] …Å¿žRRt&vj'º·¿Á«¿Õw‡Ÿ}g,c»—f"'ÓÏÁÐÁÖØh'@@1B-#'mH:=©Ø‹ɱÉÎÇÊÊÅÅÀš£¨šŒŠz\+$QXBavle]fhhVIUQK>.A±µ½À±¾Ó U® –žC­‘@ ƒÙ6WOØ¡%>A,/t·Ô}?E¬×”£ÀÉÇÇÊǹ¢ˆ©˜œ]=/Ltj]z|r[H[ZNY_\RN;-;LY^V@?Obq{s`nc£›“€˜•¢«³¯¯²®¨m™Â£k~˜‡Ve–_  .9jx|“–{`neŒ—ftyzu?h?eWwm^__hu{‚ƒ†ˆ„—2‡›£›™š˜›–˜™˜’œ—–›“Ÿh 9„“’Ž›„K•~‰‚„d IÀÇÆÆÇÆËÇÊ·ÈtŸÂÅÊÈÅ|ÂÇÅΖJwx[¾ÈÃÁÅÅÇͨ’¹‚Ô¶o ³˜ÒÕÄD)5:302,.,*&.-02.1<8:5@ÃÒÕ´ÁÊÂÄÄÁÁÈÆÌlvK bXººW_,޽ÊÉÍÇÄ¿ÂɪÆÚƒD-dyA{œˆd8«­),; ™§C?*¢ÇÑ©bR;C¸Ñˆ À´¨±¿ÆÊ¸£Ÿ¦¡¦ˆ‰f& Poƒ{…‹‡jheimtqhcSK86?BMSV8@T\|you›{v•–Ÿ“¯´¿ÀÀÁÄÀ¼±¢‹¸“´•nu…5"'(N6i‚v€‚€‘ƒ‰]i…{ru6KL^hlsdf^p€……”’“‘•, ‰¥—˜š”˜•˜——•š–˜–”œ¯†VLq™Ž‘’Šœ‡K—„…„‰d L½ÆÄÆÈÇÄ˽§µnÅÅÇËÉwÅÊÅЉ®ßÓÜÉÂÃÈÈÆÇÆÉ®‘º¦ÉÍײ@ДÏÒÏÕ…3&+@GDDIGBFELEEE@D.'O±ÕÏоµÎÁÀÆÂÁÄÁÔœÓÀ}#”¦b¿±TiµÁʾ½¾¿±"Â׌9:'!=¦\¤ŸG ¶=Lk¥%;;Ú¡ a1>D'¼Ö‚ ¯“²¢¨©¤¦±§‚OF,!,Qjy{…{xmx†“„|sk\P@A?5>MGAH:^ˆ•tŒ‡œ‚ˆ¬œ—¦¹·¼ÁÄÁ¾Á¾Á£›¢©jq—„kvU !, 59f’€†’„Žhz£¹»­€e?B{‚]pf\l}†’މ“-š˜™™˜˜›˜™“—–”–˜™¤¬¢ ™‘‘Œ–Q’ˆ‡…Šc L¾ÉÄÅÊÈÈέX[m·¿ÆÆÊÅwÇÊÉʰV—¸ÈÅή–ÌÄÆ¼g§wÈÆ¾ÓŽ«„ÏÈÒÓØÕ™j?=1*/69C;>=61-&@ÇÓÈÐÒžÊÁÃÄÂÀÁ¾Æ`´ÕÎÄÆy™ÔÆÕ†€µ¼Â¼Á¯ÄÙŽG>>A3F“Œ\B§Í¨±Ó²³»®DE(1‚Ǻ…J>?&Â×q=£Bsb®Ÿ¦Â¯­…rN93+GT]bh†}p†›seYG^Z?Aahwr޹¤žpbQ3[h’…ƒžž…iœ±°´»ÀÁ¿¿¿À¿¨xŒ£“\.$U5X†qn†’šŒ|›¥²¹²»§ŸoU{`~nkox‚joVD4Zi{2Œž™—›™š——™”—–˜––—•˜‘’’‘”ŽŽŽŽ‹—P–„†‡‹]NÃÆÅÇÈÇÇm@AAB?=GF Y( >[AGFHFA?A=:E;IÒÕAX¿£M|¡wjjGE|N"-BXgolfhh`Gfpг¨šŒyiUT(=A32354YfP=xƒv”†š‘y›™˜ª°µºº¿´¿À«—£§[!6HGUry{{zœ•Y€}‡ªª«±¹šcr­´^jSZnnhWu}q{jfx‹~!Œš—˜•˜—˜—˜™——•™š”•’“€`mkvnl„›˜‚P’„„ƒŒ^PÁÇÃÅÉÇËÌÄ7ZK«ÃÆÈÇÀvÈÅÇÓ ŠÄÁÄÂÖ… D~§`±ÎÒףʹaÌÒÔ®…O# pÈÎÑÐÑÒÊĺ©™’š¦²Œ‚ÇÒqÐÃÂÆÃÀÂñb GV¹²}»ÂÂz¶Æ½ÏL¡Æ½³×³B@>>;?=?9>;;>>>7<8CBBBCE?@<<<<;#RÎÕ9b­ž¡´­™ƒ]MU#2Qjq}ƒ`haIMP}pk‡ˆsc_L?;C>,9+Wvr[0„ §´š…lˆ–𭩝²±´²´™—¦’?)P\Q%a„z¤{JŒŠ¡ª®¯¼”[R–´­~nQaeYiagbXgqeh{yƒ( ‹ •™™——”œ™—•š—˜˜“–—ŸŽ /!'™ŒˆšR“………‡\SÀÆÇÅÇÄÊÏÏÅq¹ÆÉÅÇÉÅ{ÈËÌ×ÎÏËÎǺÈÄÇÌÊͽeI£ÇÝÚÙØÁdÆÑƒ!&$K®ÖÍÆ¼ªž“Œž¢¯¸´¦qRF,ZºØœÐÄÂÆÅÂÁÈ®Ÿ’ÑÍZ˜Æ€wºÁ„NǽÉJwÀ¾¬Ò¿ AD>=CA=?BDHA>CA=AE@AEC>E?A?;<9BYÐÚ ‰„™¤ ‹™˜nI7$)Jf}~Ž|QfW/`^onlomkkmIPFA=91ZvŽ„‹—…o{™¦²±¼«`Tt¢¼ªwkkkEJbbQUP_wnhk€‡'‰›››š™™™™—˜—˜˜•––“’ž›¬´€Z¦+‡™ƒ—€Q“…ˆˆˆ^OÂÇÈÆÃÉÀÅ·T#dÅÀÉÄÈÀwÇÊ–`suw|x¯ÉÇÊÇÅÍÉÑȳH# E«ÉÈ[ÁÖ¤&91L–®™•¤³·¿§”oL3 #-87,^²Íµ ÈÃĿͿÈËÁsiÀÔÍs»ÈÌ‚ .¥ÆÁÂÈ¡©ÇÁ¥Õ¾GA@>EAA?A?:A??E<>@9JA?<@B?BC@@CuÒÐ ƒ¨–…v‡ˆh@)",Iag‡XO6R”‡•qlh^s‡‚pfX\T;;>A;uwJElƒeO”œ~xt`¡‘““‡‰s{O! !Cbrqw€|o¡šw•§¬·¸¼oS]‰¶» sswj-MZG#DUOq{uis{ Œ¢•›˜™™–˜•–”˜–”—””‘›ž$W—Y<…0ˆ•’—wQˆˆ…ˆ_ TÁÆÈÈÂÆÅÍŠ½ßq¨ÄÃÆÆÂxÆÇŽfg]cfR•ÆÅÇÆÅÈÆÇÌØ¨l½ƒC X”b´ÌÍc/‹Å±º¿¶¦†a7$ $6:>>FIGBCºÎà ¸ÇÅÅÊÉÆÁÄœPÇ΄œÉÂÑȲ½ÉµÂ¿¾ÈÆ¿Ê'¥ÒÆ5B?@A??@5@"@6M>FA@B?A@?›”‡˜xVŠ„…‚…^SÀÇÈÄÅÉÁÏ…~«d²ÉÅÇÈÂ|ÊÃÎÓÏÑÓΖ«ÇÆÅÈÇÅÂÈſȉËÔÕÒ¢i ŒØ×d"F„rI.(3@<A=72%+ ²ÐÔ›ËÂ7‹ÄÃÂË‹ x‹ÄÁÀÅÈÊÃÂÁ¾¾¾ÀÁ͘ÑÎ=@B>>;=>@9¸ › ž“”°‘+A=?B?=?B>>7;²¶©°¥µÏÝ“%H=;>>=><;A©ÐËŸšŠ||ne\L YkzDf˜’””‰‡N_nzM?WtbWJR7;Yu~ƒ©Ã¾ŽÈļÕ^U†¦Œ”™ƒ{€‹w…zZ$$3+$"CeI43C“…VNŽqu‹©¬¯±»³_M}§·Ÿjdq% %!3JNPVE7cf€&‹ ™œ˜™——˜—˜˜—™•—™•”——›¡››˜’’’“–|W‘‡„……W UÃÇÅÇÆÈÎÈ¿ÓËÌÊÉÇɽ‚ÆÊ±–>;”¶½ÎÉÐÊÊÈÆÊÌÊÅÅÈÉÄÈÉËÍ¢’ˆ­&GF?F?<=4%)6Uo’¯ÉÑÖÚáØÚÒÒÍÎËÇpœÌÈÃÀÅÈ›LÉÆÀÁÂü·}7s¥·µ¿ÁÒ4oÓÒ7:DB>=D¸Ò¼6loyqfecG@qw{cs‹Š–‘‰˜ˆ\ˆ‹ˆƒ|vphQJH1=<9:>?:78 UÀÐÑÕ·h0@?:;?=>E?H+ÂÒ·AY[VYjkQ;‘qSuƒ‰Š‚`®˜•ƒttufWMc["Œ·Ãì Ì¹¶µ€¦¨­–•“ƒ Œƒ{eM7,19%(6^dH#Zn‡l}Dœ…œ„žš‹šva‘«£¯¥sd %! & %Mbkj^Y[‘•šœ˜•š›”™™—“—™•’’”Ÿ•™Œ“”‡›zT“ˆ„…X XÂÅÄÃÄÈ˹®¼¨ÃÈÅÈǽ~ÈÌŸ"nˆtÈÀÌËÐ¥ I¤ÃÊÈÇÇÆÄÆÈɸdÆ›‚;7JRX¶ÑÖÜÙØÖÕÓÓÒŤ™š­¦„u¢ÌÑĦ̈­ÃʽÄÂÄÃÆÖužÀÀÁÀÈ ™‘ÐÉ])´¸Èo\ÐØf>=;?:;:BA-J¯ÒÔÏÌ‚1->;;<=A>@@>98ÈÕ¬(%Uqjgmsj]BVku†ƒƒ†ŠŒ‡jµƒ’‘“‰Œ„‚n^A kn\‹¿ÀÆÈ“ɸ¯¶ ˆpš‘”„W¤†–vsgR(9:88/- Nwmd`ˆŠ‘f‹Ou¬™‡‰™©•¡V?Š©«©£’sw5$%!"&;H5LNe’˜–™˜˜˜œš˜˜˜˜”•—“’¢–€k`r•’’•”’˜}Y•†…†Y YÀÃÄÃÅÆ¾XqÊÍÆÅÄÃÆ¿yÌËÎ˦O%¥µÉËx:‡b:+h¦ÀÁÏÉÈÅÊÃnÁνH9cÚ±“‚’¸ÍÍËÎÒͲ¡§¢“{…µÎ­ÎØ~Æ¢€ÊÂÆ½ÅÂÈÁÏ¢}žÄÀÇ´NNËÍÇt¾¿Ä…QÌØ@?@@ ¨ÙÒ’jrn™}3DA;@@?><=hÎÕ-.DSjqjjve`1,nˆŠŠ‘†Š“™Ÿ“‰‰’‹‚~h>"'* owŠ¿ÂÁǤ®º«·¸’~•–œ“„|keu[>?:GRA;2/:f>E??>=EŸÑÏY*&8WfrdjegbR„‹„‰ˆ‹Š‹ŠŒ†‡{qji@)*0/@A2tŒ½¿½ÁÃQƸ¸»­‰o…‚yqwgZD406+../   2!“———“™•™•—––••˜”‘— OcfZ)OŒ’Žœy[Š…‡‡R WÀÇÆÄÆÊÐÓÜÐÓÉÍÈÉÆÈº|ÌÆÆÃËÎËͿǺÄoÃÁÂÃÃÅÁœ–ÓÕÛÉÒ´!\•sÏÔÖÎÆÒÐÜÆÇÕÑÌÆ?*=D=8+f†ž†=8”ÓØ&qÒ³ÑÍ´U I°¿¹„—P <}®Î·ÆÇ¾Àº¿ÕÌ@:552+¥…)CD?>?@AA;'°ÐÊ. %@`gƒ„}lga‹Š‰‹ŠŒ……‹Šˆˆy|uqg\P  /3;QU6[p}µºÄÁÊN±¿·¹¸ŠŽ¢’‡}wF:U[V\U2AC9)"!""" !’Ÿ“—›—™š”––••—•‘™’£} T…™“‘‘šwY‘†ˆ†‰V  RÀÇÈÇÈÉÆÈÈÇÇÊÉÅÂÇÌ¿„ËÆËÎÉÆ·ÉÇÁÉÅ„·ÐÆÅÅÇʳvÉÀÉÀÉÍÔŽIBÂÕÔÔÔÚͲ”°ÎÖŽ'=ED(+’ÄÔÛÝá°6{ºÛt+ÀÁÂÆËÎÌ·ÁÆÂÅÇÄÒÕÍÄ”`'+³·¾¹µÑÌE:?B>?=CC::=Z} ÆÝ‡'EA@<;>?C>$½ÓÀ %$>[`pvpmeZ|Ž‹‰……‹ƒ|wea_O1#&-7IQdc_h†¬¾À¼Åj™¼À¿½š‰—qhs03QTUP?AUYQCHW^fgtŠ–Ÿ……z‰›ˆ‰ž‹~y——˜z€vy6&%A8DO8;R23F4-%#$–›š›™›š–˜—”–”˜“—•–®¥¢–™¦™–’ޑޗxR”‹‡ƒ‡TSÂÆÇÈÈÈÆÇÇÇÇÈÈÈÈÄɼzÉÅÇÇ¡9;œÄÇΊ¦ÌÇÆÆÇÁÃx³ÅÃÌÇÆËÓ™9§ÊÉÅȵ£¥‹³ÕÐÅO0D>L¾ÚØÒÐØ×Ÿ8w§Ôª¥Â¿À¿ÁÅÈÊÎÄÁÀl'oœÀÓÎÔ×Á‡f«À¾À¡ÎÕ4AE?=>;<>*5.¢ÖÙ×Û‰*FB7A>@B@»¬ÔÔÏÑ Šv*>>7?>@@:3eÍÒœ($@_mz€ŠslcU5Lˆ…{uqj^YQB+%$(2>#‡ÇÓ† $#7MSSbPKTG1 %3&&——˜•˜”˜”——•˜—•––“¢y‘¨¦z@’“ŠŠvY“‡……ˆS O¾ÈÄÇÇÈÈÊÅÉÉÈÉÈÇÃ˸|ÅÅÉÐzN~yX\|©Î§9ÄÉËÇÁf²ÄO}ÈÁÀÅÆÌÃQÄ̉ .[ÅÎÕÈL9A<,ºÓÖÍÐѳ_0-'a³µ‘Ï­ ¨ÂÇÆ¿À¾¾¾¿Â¾ÃÀÁÃÄÇÐ×ǰhX·¹½ÂhDÑÕžD?=;<897¸Ô³MÓ¦1CH@?>==;=@¢ØÓh)'#7j†z†rh{€Fcpwtlhg_U?(/'!)5@LQZ^Zclhw}}Šˆ¡·¹À¿©ª¼µ–njfU>ce8:bd?L]bX0@m`jp‡qjv”ˆ­£ž±–‘Š€~h~mWP$$-8@4+98/GGSSSMKX4±ÊÊÎÔ¹P§Ìº)$*ÂÒÏÁf6FE+]ËÎÓÌѺO%C¬ÉÁˆÂÍ==;9:§ÄÐrN¸30D;==>>;>7¿ÕÏL )=k†kefnq‚Yqj|q`]T5$)%7CLNTWihQem{ƒƒ˜–‚‹¥µ¿¼Ã·¶›|dl[2BwT7eb`^ahZ7LdNpju¡‘^qœ­«|­¨€„“|kx`]+%)-29-*9DEJOJTeF#\PWFI=$˜™š˜˜–šš˜––—–—•““—,w•LN“Ž›{Q›ˆ‡‡„MQ¾ÇÇÆÄÅÄÆÃÅÆÈÇÆÉÃȵ}ÇÈÊÎËÙÒ¿ÒÔÍÀËÎÕ )£ÇÊÂ΃W“¢‘S ŒÈÏ\ –Œ”‡NA;>¦ØÊÐÒÖˆG̳¦L ÛmÆÈÀ¿ÀÀ¿ÂÁÁ¿Ã¾¾Ã \$Fd²¸¾¿¥!ÆÑË@@>=>>89)'>¾ØÒuDQ2@<<<<:=22ÊÍÆ$*@j‚ztwbne†{‰„}}hU;?%'$-6KQXW__tes}‡”Šw‰–ž²¦‰tlak<\k>IAHlobRca?Yt^kƒŠ~€pl|°›slŽ“gz—Œ}}b[G"*)"$"+.3.F_Y[]XIdeb6PXž——––š˜—š”–•˜›•”›œ ­¦¢ ¥’–”’šy\”„†ˆ‡MU¼ÆÆÄÅÆÃÅÅÇÅÆÇÇÆÃÉ·|ÇÇÉÏY“f#CÂÁÏÂÈÎÔ¼”´ÇÉÇÀÄÌ¿YtQÌÔp{ÖÇ«\G@B%XÐÑÏËÓÔØËÔÖÁ²˜J%‚Ű(“˾¾À¿ÁÁÀÁÀ½À¾ÀÀ¡­Ô³-¬¸¹»º¸ÏÙ 7E@>>@=>.LÎϱ2&)Hp~su}nq{s^wlƒ…uf>E5$$ITX\^cnj^p‡‡—“Œty~kyn†‰„tbsl[Drd^}OLr€_P_E‚pjŠHmwaY¡–}{yo‡—¢‘‚gSB$$&(&.6C5/RXVr\EOb|w/on"(–›š›—˜˜’›”––—™•–”¢§yFx¤™Ag—‘wY“„ЇƒJV¿ÆÇÅÂÅÆÆÆÆÉÉÇÇÆÁ˯~ÉÆÍÌy¶?§k°ÂÆÇÇÇËÌÌÎÎÅÅÈÇÈÈÍÔĺ±ÂÅP¿Öœ ,&&09:$L¼ÍÉÐÒÎÏÓÒÈ®³x+1?Y¸ÙeS¼Ã»Â¼½À¾¼¹¼Á½½Ä§\xÏȺ€À½¶ÂÁ—ÒÚS-DB?=@9?>…ÈT ±…&B=:;9 ‘‘™tT–…ˆƒ‡O Y½ÆÆÆÄÅÅÇÅÇÈÆÇÇÃÂ˲xÊÂÊÎhJg½€§ÃÆÆÆÆÆÆÆÆÂÆÉÅÈÅÅÉžmÉÎÇˉŽÑÛ‚#00'''k¿ÐÏÎÐÍÉÍ˰©£Q-:B5& ´Î¥¦·¼¿¼»¿¼¾½½¿º¿¹ÀŽÉÉs¬½»»Ê7MÖÜ{?B>?>??ŽäÕáW&)'I6;<=:8::™ÉÕy6.) )iZLW†qu‹fS‚u~Š‹cVVP: Z`dd}ogp€h}m‘”L_vuˆŒŽ‘ojQgrkH%)Nu}jTg†fAQG ifif~›M$oœ©¨Œ’c`¤•”‡e=8#$!!&:BMucutn€€lPemfkqu|k" “š™—™˜š––”–•——‘©D2µ‡‹aL–’‹ŽœrQ”„„ƒ‡MY¼ÇÇÆÄÆÇÈÅÇÇÄÇÇÂÆË´|ÎÇÇ׬J¨Ÿ^¿ÊÅÅÅÅÆÄÆÅÃÆÇÆÇÅÆÆÆJÀÆÈò[ËÎܬVACXz³Õ×ÍÏÑÎÏп®±‡>/C>/6g.ªÓÈEcþ»½»¾½¿¾ÀÁ»¿ÂÁ¿Á/Ki/«»¼¹ÏRÐØ£@A>AÃÖÖѵ?>:=>><;<>*ºÉÎG20) %kdOcw‹|€uŠ…ŽyeVi5<&9cfi}{rXs…•f||Lmw`uŠwxvŒpiomW% 5‹›žœcc…‰kBdB Bs_D`ƒR<„ˆ¦žu¡ii›’†r]F3% !,1(7CG‚z]mƒ^]ieKQr„gšš™—™™š••–––——“ª)¢²FByA¢‘“‘Œ›rT”„‚„„H Y¿ÆÄÅÅÇÊÇÆÇÈÆÈÈÅÅ̳yÈЮËÕÐÈʺÌÇÆÆÅÅÈÅÇÄÆÃÅÆÆÆÅÈÒh¦ÅÄÄÈ`¼ÕÌÜÒÔÐÖÙÕÓÐÒÐÍÏÌ´¨ž`22C<:#±ÝÓÎÆÍ—±À½½¾¼¾¼¼»¿»¾¼À¿ÅΈ8vº·¿ºÈ”ÑØÄ"B>AC;?DÒqc¡´,@:AA:ÇÌÄ')50)$ c{s]CUƒ}{x•Ž›”’ƒvbbSLKelbV^j‡}€Ž’™§igJ€Œ¢x_GlsytvukLh‰˜”§‰mŒmaQ HUNr˜}n…•›n‡•{‚†}lM;##!,53& D:s„w„z:Ok‡ parvB%™ –š˜š˜–•—”•™”•˜¦R£™—$'L™”“tW•„„ƒI VÁÆÂÇÈÆÈÉÇÈÇÈÇÆÆÂË®t̃S/¹¿ÆÅÆÇÇÆÄÄÇÆÅÃÆÅÇÉΕ~ËÁÅΆ‘ÔÎÍÏÎÎÏÏÎÐËÇÎËĤ¥’C89?8<;SÂÔÒÍ—¯Ç`ÉÀ¸½½¼»½·½»¼½À¾ÁÃÆÆÃ¼¿»Å¨ÀÕÓ/8?AA9>1Æ g­ +/1<;"A½³—‰¡Î¡µÅ·¿º½½¸¸¿¾»¿¾¾½½¾¿¼º¾»¿ÅÖ×P+@>?=<8ÐR=ŒµLMƒk/>>A<@<ŽÏÔ%@50-*Ob^\Uc”‡Zr¢’vŒ†š†a_id_oio_Hh†‡x•Ž—¤v~fލ¡¯”fyrˆyUZ1X—–——›‘]lˆsmhl`w€…{j‡“ˆ™ —mu†kofB($"! 1>Ugntuf`H“‹„b¯§vuXJo(!Ÿ™˜—––••“••˜—–“”–ަ©™š’¤ ˜—‹ŽŽžl\ˆ‚P YÃÄÅÇÇÆÇÈÈÉÊÇÉÇÇÉʱ…ÍÈÒÍ_»ÏÑÈÈÇÃÆÆÇÇÆÅÅÇÇÆÆÇÅÃÄÉÍ\¬ÇÁ½ÊX´ÐÊÍËÍÌËÍÐÑÓ±®”I(AE8@xĦ0¬·¾x~¾Õ%YÆÃ»ÆÄÁŽĹ¾»½¾¼»»»¹½¼¾»¸ÎBY×Õ<>B=@:ÍÜÖÓÓÝÞÚ‚'C?>=B4´ÑÍ`/@3..) JgM,dF‰‹PEœ‹‰cˆmegeGqtxyY`}…žŠ”ž {‚zŠŽ¥¦¨w‚ƒ{zvS"m– •œ—‚~ti\Q Vyrt˜¤œš–‘Šx{‹yyw{U$".;A^q_j~x|[•˜”v„‡~tfzol –œ•••––’••—”˜••‘”˜’“‹˜‘‹‰¡mZ’Œ€„H^ÁÄÆÃÊÇÆÇÇÉÇÇÇÆÊÃ˳~ËÃÉËUk”Ž‹ÁÅÅÇÅÈÅÅÆÈÅÆÅÆÇÅÅÆ¿Ñ{ÆÃÀÌ‚ƒÒÍÍÊÍÍËÐÎı¨~9+B@9NŒÀ® <%?ˆZ,JªÏ™5;@=B>KS½»¼¾¼½º¼¼¼»¼¼½ÅzÓÍ·A=A@=NÐÎÐÙ×ÍÔÜt(A?<59GÆÌÉECF3/%+AgB9gXh‹j(p›š‡V]ypgfjhyuypm{“…vŠ–š”t‘ŒŠ‰ª“«–_jkmrLEsŠ¦Š˜—¢…{~jpaS1€U^]Œb}†¡“zŠ‹‚‡|kcD%>GTekj…fƒ¨Œ—›‹Ÿ”¡€‘ƒl_kep-—ž™˜–••••–˜•–“•”’‘–”””‘Œ‹ŒŽ‹˜oX‰…ƒ€J _ÀÇÂÇÇÅÇÉÆÆÊÇÈÇÅÈÉ­€ÐÌÇÎqWL@L»ÌÅÇÇÊÇÅÁÃÃÄÆÇÅÉÄÇÄЫkÃÆÀÊ©OÍÆÌÉÌÍÎϹ·œ]0A?4&8<8N:—O?{„RV–c+<;8@;~ÑΩ5VD11-*$0qVCb…x|lS~›u|miaqqtjt{€{†—|sgyŒŠ…‚œŽƒ®¨“¦ªvv]FZ"'T’˜’š¢¬~u„s]eQL=ehn‚‰}¡•wb~f|IdP# $--DZhdN`‰ˆ•‡•”‹”–{ƒƒu`[[bžœ”——•”š™”–˜•““‘•’’¢˜Š…–‹ŽŽŽŽ›pT”ˆ„€€D [½ÅÅÃÅÆÅÇÆÈÉÇÈÇÇÈÄ­‚ÉÄ¿®ÏÑÒÒºÎÌÅÅÆÈÄÇÆÄÅÄÄÅÆÆÅÆÆÈÅt¤ÆÈÃÌO´ÔÊÌÍÎÍ®©9&GA2Q˜¾Å´yG2/F2#%%) lÔÕ '˜­›ª·¤¢#)¥À½·Ä¹º¾¹»»¾º´½Å ÎÐÑ_$C=A@>,1# %35;9:<9¤ÓÒŒ/[D84/+'jRZr€‹l†a„g_bhdetjwrx‰h<_’ujown~Œ‰˜ˆµ±¤¦²„u\.Q$5`ƒŒ•™©šŒ{wq`[T €Yk‹Œ„‘€€ƒt|tg-@:(>G[dZ]hkŸ§–¦Ÿ”£‘—ƒ…yuuliq4™•›•™•••—–”–•”’““–Š‘˜F?ކ‘ŽžmW”„~L `ÁÂÂÃÇÅÅÈÅÈÈÆÈÆÈÆÇ¨ÍÊl §ÆÓ´D½ÇÄÅÇÆÄÆÅÆÅÅÅÅÇÄÅÆÃÇÏ‹xÍÇÁ΂pÓÊËÎÄ®®k5>DECW™•f9.66v®ÊÒÄ”…ËÓ6Q›£Æ\UŽ%±ÃÀ¹¼º¼¼½À½º»·Ã“ÖÍ¢AA7A=A:>9;>8<<:<;;:<1ÌËÏKP^F:50+]SCXnj”j—~oWlzSTGLY~‰ˆŠcj‹–›‰—¥p {Žr«µ±©©˜svEI:h…Ž˜—¤‰}ŠliXX=+brr{ƒyŽ’–Ž›„lh`RH$*>I\qqnƒ†Œš’–¤‘ƒh˜~}‚}}ukm‚‡¥™š˜–—–—•“–•“”’’••‘§e+ŒŽ=P£’‹ŽlT•ˆƒ}H]ÀÄÁÅÆÂÆÈÅÈÇÆÈÅÆÅÊ®ƒÉÁ>³ÃÈÍ¿i®ÆÆÅÇÅÆÇÆÈÅÅÆÆÇÆÃÅÇÁΦn¾ÂÁü:ÇËÌÑ U7DADEB>4"-G}¡ª¹Èšw`x”Έ˫AÊ“§¥bBØw@ÃÀ¹¼»¿½¿À¼º¶ºÅq.ÒÎÅ\"0-0.5-.2.460.-56-ÆÂÂ1j]E=6-) RiNBeztu}v}obdaydaWCq‚±\p„Ÿ­˜“”QD•=8‹z·²«ªžeab@4Fs•™™¢lS„sok[Q= !av‡ƒUdŽŒhosQHO( '2Kacnpnv•ƒ”¤¤•~vrš‡—‹yfZhuV7›“š——–“–’—”‘••”—š‘´&t»µ}J’‘ŽŽ£fbƒ‚H _½ÁÆÃÃÅÃÆÅÆÇÈÉÇÈÇȬŒÏÁ:ÐÉÇμWµÐÈÄÉÈÇÈÈÅÇÉÈÇÆÅÄÅÄÆÅ¿|£ÃÇ¿Çq”ÑÌÕ”75KAFB=73))Q}ªÆÖØÀ¸p(!"$$&­—Ío ›Ÿ¢rQÎÖ'SÀ½¼¼À¿¿½¼ºµºÄ§ÆÓÖÔ§rYW[TTPHJGJKHEC5)@N˜ËÎÊ”AŒ\GF0/''¨ÃÅÅÈÆÃÉÆÅÄÅÇÈÇÈÇÇÇÈÃÇÈÄa¿ÂÇÇËJºÌж2&3DnœÄÔÙØÕÒÒÑÍѯ<8@m{em}UY_^Q?0-$$# ##$#/Fak{W2,EL[^yz€fTu`yb‚™v“ž¢ž¢¦ˆ‡ŽoSja_6?oR;œ•‘—“˜“™“”“•““–Ž•ž¬H™“™–‹Ÿb_‚ƒ„}J  aÁÀÇÅÇÆÅÅÆÅÆÁÃÅÈÅʦ„ÉÈÄÇÃÅÄÅÅÆÆÅÅÆÄÇÅÃÆÅÄÃÅÂÆÄÄÄÃÃÃÂÌ©pÄÄÄÉÆE½ÊÍÊÎÍÍÏÍÑÏË­Žˆ±d:4,¹Ñѳ¨«a37EA|ÓÖ@4Mbɾ¾¼À¼¼»¿¾½¿½»¼¼º¸Ä’ ™ÐÉÇÊÊÎËÍÎÌÐÏÐÐÎÎÌÌÏÒÏÙÒ]Dž€„fVI13&%##4dGZ{]hpn€‹Ž€lkk™«©®©¬¨eVdb^]U^|¡ƒgje`]]US:=-*2LeM`fn|TGaV@3)*# '" $"E?aJ/F[VW^w•žƒlompnrb†Š‘™©Ÿˆ˜–__rI=+G_A5œ“”•““’–‘’’‘–”””””š¹O‰£²K_–””’bcƒƒ…I c¿ÃÄÇÅÅÅÅÆÅÇÄÄÆÆÆÉ¨„ÈÅÄÈÃÆÄÇÆÇÆÇÆÇÆÇÅÆÈÈÆÄÄÄÃÃÅ¿ÃÄÂÃÃÇi®ÉÁÃÛZƒÒËÌÎÎÏÏÏÐÊ­¬½½Å¹K<)¥ÖÅŸ®Š>2AD9$ ÏÖÈ,"kǽ»»¼¾À¼½¼¼½º¹¹¼¼»¿ÄVh¬µ¸¹º¿ÁÄÁÅ¿ÃÅËÌÌÊÊɯD…}…jBM93**%#!%#W<\`djio}†ƒvqgfŸ¬¨ª¦£¤¥idbn• §œongJP[PTF6K0(Ltly{rgl][gJ41&%$!#"#$(-,527D@VKUu‚‡‡“p¥©ª±©’tby€–››œƒ}wa>,JAUP?=“•–“–•–•’‘•“•””–ˆ (/aŸŽŽ‹Š›dcŽ€‚‚G  cÁÃÈÅÅÆÆÅÆÅÇÄÅÄÈÆÉ§†ÇÅÇËÄÉÅÉÄÇÄÈÈÈÉÃÈÇÅÇÇÅÆÆÄÃÃÅÂÃÃÇÀÉœxÁƿͱ4ÁÌÊÌÊÒÑÏǵ¤_+#)k]/B³¦£a'88E5.}½¥ÒÐѧcÃÁ¾»¼¼»º½»¾»½½¼À¿¾Ä¾É‹1      +Ž¿—kU;;8(&#&!" Xc[ljfn†……|ˆzq‘¥¨¨£¨¡©ª¬¥¯°­¤‘wleh_WD7.OH,E[ajx[\j^RJ9+)' ###'"&##$ '1(K©ÓÑÑÎÓ×ÀNmÀ½º½¹º½»»¹¼¾¸¼¼¼¼º¼¾ÀÉÏÆÂÀ»µº´±µ®­©«²G&4ˆšž«ž³µw€jY598+&#%"* \uji†IZx€”•‡|tjp¦¥¢¦ª¥¨¨±¯±°¯ŸrSLJ=//>]Q+:>MYfWWX_VH;/&(& !#!""%%'2BDO?BW_e^fe‰•›ƒm…¬¬±±°«®¡z„‹‘Štl_hipkpk_RV<Bž™˜”˜•“–Ž‘”‘“–•’–𱤢[’‘‘ŒŒš[f‘‚|M h½ÁÄÄÄÄÅÄÅÆÆÆÄÄÆÅÇ¥‡ÉÄÄÈÆÅÅÅÅÄÅÅÅÇÇÈÃÆÆÇÃÄÂÄ¿ÂÅ¿ÄÅÆÈ¿ÁÊ}Ä¿À˺L¾ÌÏÍÊÊѯ;D46KTA1Q”U5A:/9ÂÕÍÎÍËÉ¥b‡¿À·½º½½¿¾½¼¹¾´º»º¼¹¶µ»¹¼¼·Á½ÁÄÃÄÃÂÁ¿ÀÉ[E¾¿º³‹®²hanvX7¥˜˜•–”’—’‘’’“••—“’‘¦mŸPY•‘¡Sa„ƒ}}J kÀ¾ÄÄÄÃÇÄÅÅÇÅÄÄÇÇɧ„ËÇÄÉÃÆÂÇÄÆÇÅÅÅÄÈÄÄÄÁÃÂÅÃÃÁÂÅÃÂÁÂÄ¿ÅÀR¹ÆÇÀËe{ÐÍËÌÌÓlBX§ÓÂr59'0;A- ^¸ÔÌÉÎÇͽvV­È»½Â¼·¹½¼¾¼¼¸º·¹¸º»¹¸»¸»¶º¸»²µ¶¸´²³±¶´ÂQ:¶³®¢“yyhrTE>6$&#($!-…˜‰l]R€¤—’˜zUwˆt‹”¤®¯³±­¨žŸŸ„I-"%4DMMQX6/JUZZYRLD?;7,)# #%"#$ /GK[UXObYaWG|²­¦rlm”°¦¦¬°¯®‡ƒŸ¤‘€†ph\ROYTN@8&E š”‘”•“‘’’””’’–”’”•¯‚F£a[’ŽŽ—Vd’€|O nÀÀÇÅÄÁÄÄÆÆÅÄÃÄÂÄÊ¢†ÊÇÃÅÅÆÅÅÆÆÅ¿ÅÅÄÉÀÇÄÄÄÃÿÅÄ¿ÃÅÆÇÇ¿ÃÁÄ~‚Å»ÂȤF¿ÐÒÍÓÇ;<$mÃØ°º‚@G­ÕÒÊÍÌÐÆ¦dÅÅ¿½»½½½¼¹½¹¼¼»¼º¼»»º¹º»¸½´¹µ¸µ¹·»µ¸·¸¶¸µ¹µ¼CD±ƒ¯·{œ´‘rt]WK5#&!!&)]Œ€|Š”›‚‡––Š’€{„‰‡‰~z}kqzF!#!/;J8MF?BDCD.+!)5>3,'% " "(2BIHRPWbQFbŒx†Ÿª­¡©‘™jikijw†M`Š’¥[VtK5&!$*1Ež•“™“˜•–—˜˜•“˜““˜—‡’ ³ž¥œ’Ž[e“…~}M l¿¿ÂÇÅÄÇÆÇÅÅÅÅÃÇÃÇ£…ÆÆÂÆÆÂÃÅÄÂÀÂÃÅÄÈÃÃÄÃÄÆÃÁÃÀÀÆ¿ÅÂÄÃÀÂÃÅÁ.¾ÊÂÆÇ†HÎÎÌÍE#¯±c5:G>-5vÊ×ÎÌËÉÎÆ{c¬Ê½¿º¼¿½½½½¼¾»½¼»»»¼»»»¼»¼¹¹····¸º·¸µ··¹¶¸µ´³¼E<¯‰¥µ“…¬¡|h_M?3&*"!%$%+ƒœ~y‡‹›£š™•vt›“Š‹tRq|€€ymuŠ'#$"$&)HFIMA;<<:/+).<5)#$!"! 4:CNPUVe]o‘¶‰žªª˜‘}oV*ˆ°£~{gd‡¤šžgTss.0C-LŸ•”””••›˜•“‘“”’ŠŒ˜5')+nŠŒŽŽ\g•ƒ€ƒ}N n¿¾ÂÆÃÃÆÄÆÆÅÂÇÅÇÈË¢†ÇÃÄÆÅÅÃÇÁÂÁÄÅÄÄÂÆÀÄÃÄÇÄÇÆÇÅÄÁÂÁÃÃÀÃÀÁljwüÃÀ¿*”ÒÊÑ’TG68D9'T®ÎÑÎÊÌÍΩaŽ¾Æ¾¾½º¹¾½»¼½À¾¼¼Á»¼¶¹»»¹½¼¹»¼¸·¶·¸·¸¹·µ·¸±¶´´º¿<<¦|•¶™ˆ¨ƒpfR;,!+"'!! a¡•…Š“Žœš‘}ˆŠ{oqzS_n_gq\D(!"#"#!-B>=<>4;6-/*&(/.+% " "&GIKVX\]mrvТ𠫒j|Ž}xofª¦¥¯šª¤¥Ÿ—m~I!$:!7.sML£˜™“’“š•–””““••š k—t (‰pv›‘ޤXh†„J m¾ÀÄÂÀÃÆÆÇÆÆÅÃÅÅÅÈ¡ÆÅÈÅÅÄÃÁÂÃÁ¿ÇÄÄÅÃÆÃÄÅÃÄÁÅÃÂÅÄ¿ÁÄÁ¿ÀŰþÀº¯¿ÉÌÉ8?=I-;ˆÍ×ÍÌÉÍʹ‚t³¿À¾½¹½»º½ºº½º¼ºº¼½¼»¸ºººº¸»º¸º¶¸¸¶¸····¶¶´´µ´¸´·J8»Šk·ž’žŠvdZ;+,&'('$"&"‘„’’‰Ž’Žƒ…z…yrh||kOVT)###!!#"*1150061++*(&)%"%" !"$.:KMUWebd{[‹‹™›š „Ž ¤{oQr¥“ˆ®§Ÿ›•pkD^P"+-403¿²Š¡·­³šoqb$,1))*%"(%$ „šp„{nˆƒ{s}…‰ŒƒtoeeWMU=01(#!"!!!$!"&))).-*)'&'%!$%% $)2;CJLRS\tj}m_n˜‘‹™£«¸ž ž—ŠƒHMq’…€ƒ„Zfyi-&(IF>"P¤—˜“–”“–—“—“”“•˜“›‘)Žœ—›‹¡Ji~ˆ€zL r¾ÀÁÇÆÁÃÅÄÇÇÅÇÄÃÈÊ¢„ÊÇÄÅÅÁÃÂÂÃÃÃÂÅÄÂÄÃÅÂÁÄÁÃÂÅÃÃÁÃÄÂÃÁÂÄ¿ÀÅÉN–Ƚ½ÅÆ¡ËÎßq ,€ÈÌÓÈÇÊÒ¿rj´Â»½»¼½¼»½¸º¼º¹º¹½½»¼¾º»¼¼¹º¹·¹·¸·µ¸·¹·¸·¶¸·¶³´´²³¸º=>¹¼¬¤–ª¢–bh\$,240.*&-1/#kK.,-DbtnhhigfbYR;&6E/(/*##!"$#" #"%(&*)*&)&%&&$ "$29FG8?UV_x{…ly†“zCj…Šd^§¬”Œ™‰e~“š¨±€€Špp}~)<7('3BKXe[OF.U¢›–”˜•–“™‘•••“”’œ>‹˜œ“•˜‘Œ¤Gn’‰…xR tÀÀÆÅÆÆÆÇÅÆÉÄÆÆÄÆÇ¨ÉÄÆÄÁÃÃÁÂÃÂÂÀÂÁ¿ÁÁÃÃÄÄÅÂÃÄÃÁÃÁÅÂÂÅÄÁÁÄðbµ·ÃÆÈ=ÇÒÜÄ+NÆÕÌÊÈÍÊ™QÃÅ¿À¾»»Â½¼¼¿¼½½½¼½¼º¾·¿¹»¶»¹¹¹¶·µ¶¾³¸µº´µ¶¶´··¶µ´±´»½2D²»§¬—š¥žŽjL73*:.+713<9:0( .UPJBLUctlaYF?,Obd^f]AL/Y£™––—••“••–’”’”–˜š!  r–ŒŒ‹¥Bi–ˆ‚ƒ|St½ÃÂÄÄÅÅÄÂÃÆÄÆÅÇÃÆ¤‡ÈÃÅÃÁ¿ÃÂÀÄÂÃÁÂÂÁÂÀ¿ÅÂÆÂÃÂÂÄÁÃÁÿÄÂÁÀÀÁÃÅÈ€‹ÄŽÂÌWiÌÑÓ°¨ÍÇÎÍɸos¶Ä¾¾Á¼·¼¾¼½½¸»¼¸¹»½¾ºº¾¹¹º¸¹ºº¸»·¶¸¸¸»´¹´µ¶µµµ¶·µ´µ³´³¼:<Žœ¡¥²£“dˆqpG5$3867/CBOW?FE=1;9--1(0&('%#%"#&%' &"!$$""## " AQW]Y]adhk~slc~Ÿ¬¹» šsfŽ™••b9<\kqGSh\glg7IKH?6W]nhi[ET1b–™•—•”–“•–“““”œs˜’™œ–ƒŠ”Œ‹¤=s„€ƒyU w¿ÅÁÄÃÄÃÁÂÃÄÃÅÃÄÅǤ†ÈÆÃÃÁÄÄÄÀÄÂÃÂÁÁÀÁÃÄÂÄÅÂÅÂÀÁÃÄÃÂÂÁÁÀ¿¿ÁÁÅÅÁY«ÃžÁ¾!©ÑÏÏÒÌÏÊÅ™i—ÄÆÀ»¹½º¹ºº»º»½·¹º·¹¹º»¼½º¹¼·º¹º¶·¹µ¸·¾¶¸¶¸¸µ¶µ¶¶¶¶µµ´µ¶µ;Jy¸¢® ŒƒqQVT<7D<;43GCWPLAv…yvs_87((*7N=F@D249,/-2.).)%'&'''%#)%%$$"$# "%$!".FbdnjXivu-8¡Ž¯»¼»¸·³³´’’•Žo]bjiocK;hd\a]E KTf<:fgipn`.W4 `£š˜–•’–“’•‘‘‘”›˜™–””™””ŠŒŒ‘‹¢@r„‚‚wY qÂÁÃÄÅÃÃÃÂÄÂÂÃÃÁÄĦ‚ÆÅÂÅÁÁÄÃÁÃÁÁÂÁÀÄÂÃÂÄÃÃÁÃÂÁÁÅÂÂÀÀÃÃÁÁÀÁÁÃĉbÀ¿È¸Ï”/ÊËÊËÍ˵s‚¸Í¼Áº¼½½»½º¸¼¹º¼ººº·¸¹º¹¼½¹½¹»¸¹¹·´··¶¶¾µ¸·µ·¹¶¶·µµ·µµµ´²»B 6¨«´‹¥¤›cI^bCAQ9QDQOLP]Xdtz€vO*+/7?J52:<76;10174+/,&&&)('('"$'&#!" &$##(=JIWcwqdjoqŽ‚p‘²¼·¸¹»´­µ´²²¢ywZ8sŠtz‚f~mT;99*4AV/8chknmmLU4d¦™—•–”—•”“‘“‘‘ŠŠ’‘ŽŽ‘—‹‹ŠŠˆ£:uŒ‚yX s¿ÄÃÄÄÄÅÂÃÅÁÃÄÄÄɤ„ÈÄÁÁÅÅÄ¿ÄÄÂÅÄÀÀÃÀ¾ÃÃÃÂÄÂÁÀÁÁÁÁ¾ÂÂÿÁÃÂÿžs•ÃÃÁÁÅR}ÎÍÎÍ”ZœÀÁ½¼½½¾¿¼¼¾¼½º»¸º¼º»»º¸¹¸º¼·½¹º¼º½¹¸µ¶·¸·¸´·¶¶·º¶¶´·´´µ³³¹º1"=š³ƒw£—‡\P^TGMN=aXUcGUTNrƒ„€„}y{\'2(8BG32-+5=7/;-K8)*0.5*0,+')))%))!%$!$'&#L^G+7W^lqr}ƒ–³¶±¸µ½»·´¹¶µ±¶“‚˜˜y]?{|hzjPAAUF+1/1D^jpolkH_4 h “––———”™–—“’’‘”“’–•”—Œ”ŽŠŠŒ:u‰ƒƒwX v¾ÃÄÄÄÄÃÄÀÁÄÁÂÂÂÅÅ£ÆÂÁÁÃÂÃÂÁÄÃÃÃÁÁºÃÁÁÁÆÃÃÀÁÁÁžÀÁÀÂÁ¾ÀÂÁÂÂÁ½Å·^«Ä¿¼Å²§Ì®dt¼Ã¾¼½½·¿¿½À¸À½¼º¼¼¼»»º¸¹¸µ¹¶¼¶º¹¹¹»»º¶··¶´¸·µ·¶º¶µ³·´´³³³²°µº9"5™”ˆ}uš‚|vlY2KaYYdeej]7TL†Œyu}ƒyz\U@@;@53.)#03-.%-,1*()0-00*+,,)*)%(%##$&'(LcD?IIKYg‡ˆ‹¹¸»¼»»·¶¶µ¶²µ±°˜‡Ÿ˜ ~_Nlgba?i–”’””—”‘–””‘‘Ž‘—™€hx–‰‹‘ŽŒª+vˆƒ€„wW  s½ÃÃÂÃÁÂÄÁÃÄÃÃÂÀÂÄ£‚ÇÀÁÃÃÂÃÄÂÅÀÃÃÁÁÁÂÃÂÁÅÁÂÀÀÂÂÄÀÿÁÂÁ¾ÀÁ¿ÁÀÁÁ½Ág¹¼À½Ê¤@{Z¨Çż¾¼¼½¼»½¾»¿¼¾½½¾»»¼¹¹¸¶¸¸¹»¶¼º¹¶¸·»¸¶¶¶µµ··¶¶¶·´´¶³´³´³´¶µº:"7k€‚wp‡|mv‚nANzoomhqyrwhh“‹…zzz{p^[OD<112.,%-1=;5325%).,+0-*'(/&(*'))&&%$'3VOMSTTUYMlŠŠ~³¾¸·´·º¶·µ·¶±¯°‚„ •œv_j]diPK=Z`EWcbTMTAR[mkpeH5 hœŒ•”‘”’‘•—••’—‘•““”™]  .“ŒŽŠŒ¥-wŠ‚‚wW  sÃÁÄÄÅÄÂÄÂÃÂÃÂÃÃÄÇ£€ÇÁÄÂÃÂÃÂÃÃÃÀÂÁÁÂÂÂÂÂÃÃÿÁÂÂÁÁ½Â¿Á¾ÀÀ¾À¿¾¿À»¿wÅÿʎ‹ÄÆÁ¾¼¾½»½¼ºº»¼½¾»½½¼¾¸½»¹º½¼¹¸¸»´»ºº¹¶µ··µµ¸·²¸·µ·µµ±¶·´µ³´²´µµµ9%4’Ž]y‰{‹heqkeb|}stJWq`W^l~…„ƒ€|u}s_VJDB100(103)-3>8=2*-./,,/-+'+,+,-)*)$$"@RUR\konun‡™†–›¯¸¸µ¹´´³¸²·¶¯¯žry¥…|TVulnbDRHSQOJObaba`MJbqhlZ#rž’”’“”“”–“•™‘”‘Ž–›‚|˜ŒŽž-vˆ‚‚ƒyWnÂÁÄÄÃÂÆÃÃÅÄÂÂÂÁÇÇ †ÊÃÅÅÄÄÃÆÂÁÄÂÂÁÃÂÃÁÄÆÂÁÃÂÂÄÂÁÁÀÀÀ¿ÂÀÁ¿¿ÁÿÂÁÃŽQžÅºÃÃÅÁÁ¼½¿·¼¸½·º¹º½»¾¼»¿¼¼¼¾¹·º»¸¸ºº¾º¶½µ¸²»´¶·¹¸µº¶´¶¶¶µ¶·¶³µ²³²µ¸··8D”“til‚vatojh~ƒ|€|uV3`n}n„ŽƒytƒqidRFC95<.0.1/../3:6(6/02.4/--14(/-+(*& '++JWYUdqj{†…‹¢”†ž­¶´´´³¶»°³·²¢™‘|VEL#\vlU9=FUVM\Zdgidms^Xfhpn*už–”•””—’˜”•”’’‘Ž•ž¡£Ÿ-‚“ŽŠ£5v‡‚‚}z[ uľÁÄÄÀÃÅÈÅÁÄÁÂÅÂÆ¡ƒÈÂÃÄÂÄÃÂÃÄ¿¿ÀÁ¿ÁÂÃÁÁÂÁÁÃÃÃý¿¿¿Á¿¼½À¼½½¿¼½Ã­G·¼¾¿¿¿À¿¼½¾»»º½¹·»»¶º½º·¼»»¼¹¹¹´¹º¸¼¹»º·¹¶¸´·µ¶³³¶µ´µ·µ³´²±²³³³µ´³²²¯·9":†i~rsox{sm••“‚…€p}laZef„Šƒx…xrgaRID1W=6102431.767::7:5:66498/.4&*/$$7M\^O03EQq€tl“–š‹‰š¬¯µ´²´º³²®›Š’”t^]mcV]hu^:3>M^EOWVJI2)MhcTLR\)yŸ—–“•–•’““’’‹µ#=2ˆŒŽŽŽž3yŠ€}|W r¾ÅÂÂÁÅÃÄÅÄÂÃÄÂÃÈ ƒÇÃÃÂÆÀÀÅÂÃÀÁÂÁ¿¿ÂÁÁÁÀÂÂÁÀÁ½¿ÁÀľÀ¼½¾À½½¾Á»¸Ì—ªÂ¾À½»À½½»¿¼¼»½¸»º¸º¹º»»º½»¼¹¹¼ººº¼¹º¼¸¶¹¹³·µµ·³µ³±µ¸µ°³³²´·µ´µ´³²·³¶3G€Vm~€n}ƒ}|d†š…Šsom]o]Zn‹‰‡„†ƒ|te^YjQaUH;98>>A)6,3=LPLGD@jk#{™•”–”•’••““’’‰Š™k©†c‡––ŒŽ¤!|Žƒ€{U  y¼ÃÄÃÂÂÄÂÄÂÆÁÄÂÁÃÄ£‚Å¿¿¿ÀÀÿÂÁÀÁÂÁÄÀÀ¿Á½Â¼Ä½¾Â½À¿ÃÀÂÀÀÂÂÀÁÂÂÂÀÄ»½½¾¾¾»Â¾¾½Á¿½¸¼»ºº¼½¼½ºº¹¼¾»º¹»ºº·¸º»¹¶¸¸···¶···´¹±¸´³µ±´·³¶±µ·´¶µ³³³°°·²2#=mbhic\aptsltW=vKZHTaa=R`Ubˆ‰Œ„‹ˆxsquxXW[f{vwuw€ŠlpntjlvYkndOGHOF?7@0Yrrtuqv~vG:d~ƒ‰…†|Šk™ŸŽ‘˜¡•ž›œ‹‡{el|diqzsv}zyngY`o_]I:0W_Vj^Rev/ }š••”•˜•”“•’‘‘“˜‘Ž””v"’ˆ¨6{‡ˆ€wW uÁÀÁÂÃÂÃÂÃÁÂÁ¿¿¿ÂÅ ¾½¾Â¿Ã¿ÃÆÃÀ¾ÄÃÃÀÀ¾ÁÁÁ½¿¾ÁÀÀ¾½¾ÀÀ¿¿¿¾¿Á¿¿¼½¾¿½¾¾½¼¿»¼»»¼¾¾»½¼º¾¹¹¿º¸»º»¹¹º¸¸º¹º¸·¹¹¶·¶¸µ¶¸·¶º·¶¶µµ´µµ´µµ³¶µµµµµ±³°±­µ;*7iWOQSRABenpiZ@vL\SQiXMXZRMj}‰~„‡ƒ…~w|m`ktgu}‚€x‡xz|~€njpŒ…oZUY^f[H@rxkyvu„oe{frrqozzweŽž‘£’‘‘‡ˆ~yrqtqlK-dltrq}xywx]@@i‰g0,Z^Z^kPgˆ €˜–””•••–“’‘”‘’“‘‘•…Kv˜1”‘ŒŠ†¥$~‚ƒ„tU  {¾ÁÀÂÃÂÃÂÅĽÁÁ¾Â¢ÅÁÀ¾Ã¾ÂÀÂÂÂÃÀÃÀÁÁÀÀ¼¿ÀÁÀ½½Á½½¼À¾¿ÀÀ¿À¿¿À¾¾¼Â¼¾¼¼½¼¸¾»¼¹½¿¾½¼¼¼ºº¹¹ºº·¼·½»¸·¸¸¹¹¸¸¹¶¸·º¶¹¶¶¶·¶¹¸¸µ¶·²··´µ´¶¶³µ¶··²µ³­¶³:*4C>>1;$Knsv\\r‹™’•–—““’’’––’’”“‘"u†’“‘ާ …ˆ…ƒ€{K ~¿ÃÆÅÅĿſĿÁúǠxſÿÁÀÀÁ½Â¾¾¿½¿Â¾¿¿½¿¿ÁÀÁ¾Á¿¿¿½½Á¿ÀÀ¾¿½¾¿À¾º½½½»Â½¾À¾¼¼¿·½»¼¼»»º»»¹¿º»····º¸¸¹¸·¹¶»·¹·´µ´µ··µ¸´´¶±´³µ¶³±²³³°²µ³´±±­­´®***+($(++-/01/.4566:*%,8+/><.3.#q}Œ~g”‚•‘¡‘sŽ š–Š|†£¦š•‹Šƒ}ysoi\L8/FLXcdef}sw}}€‡‚‡‚~vchc3 /7?HGRUe[`Sq`E\gthjjp}…EA.?IQUUQH5Bjn‚™›•””–”“”’“–“’•–˜žtSZƒŽ’Ž¥$‰‹‡‚‡wM y¿ÁÂÂÂÁÀÄÀ¿ÃÁ¾À¼ƩwÃÿ¿ÀÀÀÄÂÀ½¾¿¾¿À½¾½À¾À½¾Â½ÁÀ½¾¾½¾¾ÀÁ½¾¿¸¿½½¿¼»º¾Á¼½¿¾¾½¾¼¼¾¹½»¼¹¼»»»¸¶¶¶¹¸·¶·¹¹··¸º¶µ¸¸·µµµ¶¸·µ¸µ´³µ´³´¶µ³°µ³³°µ¯³¯®³¯+-',*&"$'%'%$%%#!")&$$(!'%(.,238$@jŽˆ|{‘™ž“ƒ|v¥›ž~‡ž˜‹„€|wspge\VS90MX]YZSW^fxty~}qhfcZL)" 347?NY[[_d$ #,9?>PQ]U]oQ^q_UOWgtqci^UIL``QL_gZ^l]Ž—–•”““•™’•””“‘–•¤n":‡—ª„Œ‹„‚|N{¾ÂÄÂÃÀ¾ÃÀÀÃÀÁÁ¾ƨlÁ½¾½¼¼¾º¼·¾½¾¿ÀÀ»À¾½¾¾¿À¾¿¼¼¾½¼½¼¾½º¼À¹¼»¼¼¼¼»»º»¼»½¹»»»º»»»¹¼»·¹ºµµµ³µ¶´¸³¸·¹µ·¹¸¶¶·µµ¶µµ´³µ³µµµµ®±²°±³²µ²±µ³¯´®¯±³²*4$&$'%$%'"$ !$$&%%),'%'4B4-/B1/,-3(BŒz`ruZz–‹zˆ’ƒƒ‘nhIQV[VVVWUUPPNL5+0FY[[IKA}€mYowX:@P[VUM3" !!0<@JID?N[ob^t„ƒllg[qf\pUdnpknqojlhbaS•˜—’•—”™“’“‘““Š–3‰˜–•“‹Ž§Ž‚‰ƒzP|ÀÁÅÁÄÁ¿¿ÃÂÀÃÁÂÁ¼Ä¦rŹÀ·¼¹¼½À¾¾»¼¼¿¿¿¿¾½¿¾¾¿Á¿¾¿¼¾º½¼½Á»¼¾½¼¾¾½¾¼½»¼º½½¼¾¾»¿¼¹½·»¼º»¹º»¶·¸·¸¹·º¼¶¹·¹·¶·¹·µ¶µµ¹¸¹¶·´¶µ·¶±µ²±´µ³±´³´°²¯°¯³¶¯+7)"'$&$#%%%&%%&'(-%&,0-,3<*' "*+-&/ i\€Wo€x‡£ƒ€Š‹}n=42<=DG@CEBCG544:]d[b8Te}}ˆzˆlZ?AXK?+"#"# 0;BJKSLPca5lhppoj_ehqnaVjkjigbbbbaN>3!——”•“”••–”’“•‘˜u }JŽ•“ŠŒ‹‹‹š ƒ†ƒˆzP{ÀÀ¿¿À¿ÁÀ¿ÁÀÀ¾¾Á¥vĽ¾º¼½¾¼¹»¿»À¼¾À¿¿º½¿¾½¿À½»»»¼½»¾¼¾¿¿¿½½¼¼»¿º¼¼¼¼¼¼¼»»¼»¹¸»º¾»»¹¹ºº¸¸¹¸·¹·¹µ¶¶·¶·µ··´¶¶³¶¸¸·¶´²´°²±´²¯±­±²±²±²±µª±°µ¶©040) %$$"$"%%'++)0'#3742*3'+)!#&*,,) $/h’S_{i]xbgrnhukaCE71/,.-//-+-649N[]]pPPWXSl~ƒ}v`9!17'!$$%('(0>=IMU[hpq:_{€t]ePNjijZ^hb^`]]`a[I9 0“–—““‘’””‘’“’”‘“Ÿd4½·!„–Ž’‹‰‹‹Š¦†……‡{NwÀÃÀľÁƽ¾½À¿½½º½¾£yÀÀ¾º½À¾Á¼½¿½¿½À¿¾Áº¿Â¾º¾½¿¹»½»º½¾¼½¼¾º¼¿½¼¼¹º¼º¹¼·¾··º¹¹º·¸»¹º¼¹¹¹¹¹´¹¸¹¹¸¹¼µ¹¹¶¸µ·´³¶¶µ·¶¶¹º³³´±³±³±±±°³´³±²¬°°±³°³´ª*.1  !"!!# &$&!*$%61,&(%#"-&(#)#+")5j\[OONP;IQZF4616?=,1(*+('&(,+.7?D@AF%5EF89rkdUF'!$"!(*0+/42:EOSY^Y[Luo`W^fcYh^Q]`ea_WUKF=,$(˜•˜‘Ž’‘’‘‘‘‘ ^9“žHF„q–‰Žš*ˆ‰……|O z¿ÃÁÂÀ¿¿Á»¾¾½½»¹¿¤lÁ¹¹¾½½¿¿½¼½¼¼¼¼¿¼¾¼¼»¼¿½¿º¿»½»»»¾½¾½º¾º¿¼»»¸º¼¸º¹ºº¼¹¸»¾º¸º»½¸º»¶ºº¸¶º¸¸¸¹»µ¸¹¶¶¸¶º·µ·´¶´¸·µ²´±´±³²³²µ²³´³°±µ«­²®®±´±¡                         *–—–”‹’’’‘“’Ž™X =—”‰‹‹Œ˜‘†…„€R~¿ÄÀÁÂÁº¾¾½¾¾½»¼»À¤lÀ¹¼¾¿½¾¼¾½º¹¹¼½¾½¾º½¾¾¼»½½½¾À¼»»½¾¾¹½»½¼ºº¹º¹¹¸º·»¸¼½»º¿¹º»½¼»»¹¸¸¸¸·º·¹¸¸º»µ¸¹´¼µ»´³¸¶³µ¶·¸²µ¯´²³´·²²²±´³´´³´³®¯²²¶³º› ¡Ÿ›Ÿ›Ÿ¡œ™——ŽŒŽ‹‡Š‰…ˆ…‚ƒ…„‚‚€{z{vyuvurpqlqojmgiice`^a]_Y[[ZWT\WXRTUNNORPMNIABCCDDCBB?CDFHEFEECCD@?D?6;7=97;8<::65.13764336..101-.)),,0../—•’”“”–‘‘‘˜t…‰‰tj—Ž‹ŒŒ•*’Ї…€S‚¿Â¿ÀÀÀ½À»¿»½½¼º¸Á¢m¿¼º»¾½¾º¼À»»»¹¹¹¼¾»»¼»½¿½¿·»½º»½¼½¾»½º¼¹·¸¹¹¹ººº¸¹º»½º»»»º¹¹»ººº·¹¹¶¶·¶·¶¶¹¼·¹º·º·º·´µ³³´µµ·²´µ´³³¶¶µ±²³¶±±±¯²¯®®¯°´¯¶¸º½¼À¿¾½¿ÂÀ¾¿»½¿¾Àº¿¿¾ÁÄÂÂÿÀ½¾»¹½¼¹¹º¼¶¾¼¶¶¹¸¸µ¹»··º¿¾¼Áº»»¼¼º¸¹¯µ·´´µ¶²»µ¶´´´´³°°µ²µ´µ´´³±°®°±²´±®®²­±´°±±°¬«¬¯««§««­¬¯®­«¯©©¬ª«¨«©««¨«©¥¨ž—•‘’“‘“’ŽŽŽ‘”šš˜˜˜”’†‘ˆˆŒŽ”$–‡†{T …ÁÀ¿¾À¾¿¿½½¸¼»¿º¸À¢oÂÀ»¾½¾¾½»¾¿¼¾»»Ã¼¾¼¸¹¸ºº¼½½»º¸ºÀ½¼À¼¼¼¼»¹¹¼»¶¼º¾¸º¼»¸¶º¹¹¸ºº´´·¹¸ºº¶¶¸¹µ·¹·½¶¶¸¸¹¶»º··¶µµ³··²´°´·¶·¹±´±®²®¯®¯¯®®®°³««±¯°¯­®¬­®­¯®¬­«¬¯­±ª§«ªª«©§ª§­¨¨ª§§¨¢¦©§¤§©¥¤¤©žŸ¦§¢§¨¤§¢£¤ ¥¢¤ £¤£¡¡¦¢¡¢¢¢ ¢¡Ÿžž Ÿ œž¥ŸŸ™žššŸ™œœ ™˜Ÿš˜˜››˜š™›œŸŸšš™›˜™˜”–˜—–˜˜˜–—™™•˜™™•’–™•—–’’’•’Ž‘‹’ŽŽŽ“Ž‹Š‰‰Œ†’‘2’‹ˆ…ˆuX„ÁÀÁ¿À½½½¾½¼»»»»¼¾¦kº¾¹»½»¼¿½¹¿¼»¼¼»»»½»º¸¼»¹»¼¶ºº·¶¸¹¸¼»¸·¶¸¸¹¹¶¹··º»»¶º»º·¸¸¸µ¶¸¸¹º¹¹¸¶··´µµ´µµ·µ¶¹¹µ¶²²²²´²µ²²³µ³´µµ³®²¯²°±¯¯«¬®¯¬¬®«®°®¬®«¬ª®«ª­­¬¬©§¨«©¥¥¦§¨¦¨¨§¨¨©¤¨§£¨¦¥ž¥¢£¨¦¥¤œ¤¡ ¢Ÿ ¢£¢¤¤ Ÿ Ÿ¡£¢¢¡¡žž¡œ œžœ›™ž™›œ˜›››š˜š™™›”—œ–œ˜›š—š˜—•™™–“™™“–•“‘‘’’‘••™–’“”’Œ‘”’““‘’’“’‘‘”‹ŽŠŒŽŽ‹ŠŒŒ‹ŠŠ‰‰ŠŽŒ.”Š…‡‡€U‡ÂÂÁ¿¾ºÀ¾½º¸Àº½»µº¥p¾À¼½Á¾¿½½¾¾¾»½½»¾¼À¾¿¿¿Ã¿¿À¿¾¼¼»º¹»¼»º»¶·º¶½µº·¶·¼º¹¸¸¹¹¸¸¶·¹º¼·¹¸¶µ´µµ´¶µ´¸²´¶·´³±¶²²²²¯±±´µ³³³³µ¶·²µ³µµ²²±°²­³°®¯¯­¬®±¯ª¬­°®®¬­­­ª«®¬­©ª­¦¥©©«©«ª©©§¨ª§¦¥¥ª¤¬¤ª¦ª«¥¥¡¤£¡¢«¦¨¦¦¢§¢¡¤¡Ÿ£Ÿ¡ŸœŸŸœ›Ÿžœœœ™˜™™š™˜˜˜™™—•—˜™˜•—”–™—š˜•–––”—•“”–”’•–””••‘Ž“”’’‘‘‘Ž‹ŽŠŽŒŽ‰‹‰‰ŒŠŠ‹ŠŠŽŠ2—‰‡‡‡€R  ŒÀ¿Á¿À¼º¾¼¾À½½¼¼»¾¦b¥­¥ª¬®³³´¶µ³¶··¸¸¸½¸º»½¿À½¿¿ÀÀÁº»¼¿½½½¿Á¼Â½À¿Á¾ÃÀÂÃÃÀÂÃÅÂÄÄÿÀÂÁ¿ÃÁ½½¾¿¿Â¾¾½¸»½¾º¹¸»¸¸¹¸¸¶µ³´µ³´·¶·º··µµ´´µ³³±¯±°±®³®¯°°­¯±­¬­®«­®««««¬ª¬¨¨¬§ª¬­ª¥¨¤¦¥§¥£¨¥££££¨§¦¦©¤£ž  Ÿ £ £¤£Ÿ¢Ÿ¡¢¡¥¡  ¢¡  ¡¡ œŸŸ›žšš™Ÿž›šš›™™›—˜š›˜™™™™™—˜›š˜™š–—˜—••—’”“•™•———”•”””“”“’˜”’“‘‘”‘Ž‘‹‹‘‘Ž‹ŽŠŒ‹Š‹ŒŠˆ-˜‹‡‡ˆWŒÂ¿¼¾¼½»»¾»½½½½¹¿¢b]UUMKLIHFBEFHDCDCFGCHHFLJCDOLKLRSTU\]\]^fefikgerpr{{}ƒ€€‡‡ŒŒ‹•““––›šœŸ¡¡¥¡¢¥Ÿ¤¤©§«¨¨§¬ª­¬­¬¯µ­­©°ª¯©¯®®±²´²³³«²®¯²°°¯±®°°±²°´¯®±±²¯¬¬¬®¬²­®®°«°«¯­ª­ª¨­«©«­­«¨««¬¯®¬¨¤§¨§©¥¨®¥¨¦¡©£¥§¤§¡¡¦¥  ¨¦¥¥¤¢¤¨§¤¢ž££¤¡¢žŸœ Ÿœœœ›™ ¤  ž š¡œœ˜œ˜”œœ›Ÿ››žšœ™›•˜—”œšœŸ™žšœ›œœš”—‘—”’•™š˜–—•™—””–›’–@”‡‰Š†z_ ŒÀþ¼¾¼¹½º»¼¼º¹¸½¿ÁÆÃÆÈÅÂÀÂÀÂÆÂ¾¼¾Ã¹Â¼»¾¼»·¹º·³°¯¯°«¬¨§¥¤ Ÿ£¥˜••”ŽŽ‰‚€z{xromhiece]]ZZYUUSONMNMHHGFGLE@B;=<;=:?D<;<<8<=?7:@<<;:8;<;?BEEA?=A@@A>ACBFCB@GICDJIGGDEJLLIHGHKLPMMNNSOQOTTT[ZZYZX\b\cc`aa`efegbeaecgcb^g^kbkfffddfbdeibkghhjgfbffhpfcgabbd`]^\h^``\`[\]ZYU\^[\ZZ\XSVQSRORNQNOOQMIQQKPQMRNNQQTTPYYWVUVOQVT\WA“††‡Š}XÂÃÀ½¾»ºººº¹º¼¼¼¹¸¸¿À¼¾¾½¿¾Â¿¾ÃÀ¾ÂÀ¿¼¼¾Á¿ÂÄÂÀÀÂÂÀ¿À¼ÁÀÂÃÃÄÃÂÆÆÇÅÁÅÅÄÄÄÅÀÀÄÄÁÃÅÄÅÊÆÇÃÅÃÆÄÅÉÄÈÌÈÉÈÆÅÅÉÄÄÂÅÃÄļÀ¿¾¿¾¾½¿»½¾¼½·»µ¶µ·²²µ²°´±©¬±­¯°§­¨«©¥§ª¤¨¡ ¡¢Ÿ ›””ššœ›ž›˜˜š•–’—Œ‹’ˆ‰Œ„†‡…€{‚z~}}{}wsyuzuxvtuvsssrqlrprnnmnnoljgpqooklmmhghmjhechdfgffihkhllillqkhlkjmmmlllkfifiginopnqmkihoskhkmijhkkokgmiic_]XXYWXOr’…†‡€XŽÂ¿¼¾ºº¹·¹»»º¹µ¼º¸¹¹µ·»¸¸»º¹¼º¹·¼¼´º¹¸¼½¹·¼¼¸·ºº»º¹¼º¸º¸»»¹¹¶´º¸¸º¼º¹¼¸¸º¹»»¹¸·¹´µ·µ´µ·º½¿º¼º»´º¹¸·¸¹´·´´·µµµ³²µ¸º¶·¸¸´´µ¶±³¶²²±·µ±±±´³¶»µ´´µµ²±³¶µ³ºµ¶³´µ°±²²²®®­²³¶³µº·³±²±³°³±³²³´¯¶³µ´²¶·´³µ¯³µ°´µ²±²±°¬­±¯¯¯®¬¬­¬¯ª²¬¯¬¯¯¬ª¯¬«««««ªª¨¨©§ª¡¦ªªª¨ªªª¦§¦­ª¨¨§¥§¨¤¥£¤¥¦¥¥¤¤§¤¡¢ŸžŸžŸ£¥¡ £¢œœŸŸ¡œœ¡¡™ ¡¡Ÿž›šžœ›™˜Ž‚„„Š]—À¾À»½·»»·¸¹··¸¹¹¹º³³´º¶¹º¹½»¹º¾·¸¼»·¼¼½»ººµº¹º»¶·¸¸¸¸µ»¶»·»¹¹»¶·»»º¸ºº¸¹¹·ºµ¹·³ºµ³³´³µ²³···¶²¶¸·¶¹º²½²µ²²¶´±®µ¯´®±³¯³²±²®±³¯¯±±¬³­±¯¯±®¬®¬­«¨©­«¬®®¨¬¬§¦«¬¤¨¨¨¥¦¥§«¥§¨§§¥¤£¤¤¨§ª§§¢§¢¥Ÿ£¡¡¡¡Ÿ ªœ¤£ ¢¢ Ÿ¡¡¡¤›¡ œ™ž šœŸ›žŸš›Ÿ™›š›œšš™™ššœ™ž•–˜™˜•™—š˜™›•”˜•—•“’•”“’—•”•–“”’‘”“‘“’”““’‘‘‘‘’ދЋБŒˆ“‡‰ŠŠŠ‹ˆ‰ˆ††ˆ` ޼¾¿º½¹¹¸»»¸¹·º¹¸¸¹·¹¹¹¶º¹»ºº»ºº¸ºº»»¶¼ºº¼¶º·¹·¼¸º·¸·¹µ¹¹··»¶¹¸¸··µ·¶·¸½·¹º¸¸º·¶·µ´µ²¶µ¶´²µµµ³¶¶¶´µ¶³¸´µ¯¯²ª±±®±¯°²¯°³¯±¯¯®°®­¬¬¯°¬¯ª«¬®­®­«¬ª©©ª«­«§«§¦«¨«ªª¦¦§§¤¤¦¦¦¨§£¦¦¤£§¦©¤¤¢¡££§¡¦¡¡ ¡Ÿ¡¡¡¢£ ¢ ¤ žž   Ÿ œŸœ››œœžž™œ™›šš›—˜—˜—”™™š™˜™–™™—•—•˜š‘••—•“”’••”“”’“‘’“’’““’‘’Ž”‘’ŠŠ‘ŒŠŒ‰†Œ‰‰Š‰ˆŠ‰‰†Œ‰b  …¼Àº¹½·¹º·¹¸»¹»¸··¶´·¸·¸º¸»º·¾¹»¹º·¹¼¹º·»»´·¶¾¶»¹¹µ¸µ·¶·¶¸¹µ·¸¸·¶¸···¶·³¹¶¶·¹¹¸¹¸··³µµµ°µ³³´²³±´µ´³´²³¶±°¯°°±­¯¯²³²³±°°°­°«°¯°«¬­°¬°«­­®®­ª¬«©«¨««¬§­ª©ª«©ª©§¦©¥¦§©¥©¥¦£¤¤§¦¢¨¥¨§¥¤¥¢¢¤¤©¢¢££¡¡¤¢Ÿ¢ŸžŸ¡¤ ¡ŸŸŸ ›œ ›šœžœ›š››—œ˜›˜Ÿ››™˜˜™•š™›˜šš›˜š’›™–—••–™””—”””•’“”‘’’’‘‘‘Œ“’‘‹ŽŽ‘’ŽŽ‹‹‹‹ˆˆŒŠ‰Œ‹‰ˆ‘a W¼Ä¹º¼¶¹¹·¸¸º»º¼¼»¹·¸¸¼¹¸¹»¾¼¼¼¹¹»¸¼¼¹»ºº¸»ººº»»¹¹¶¸º·¸º¹·¸¶¸·¸º¸¹¶¸¸¶µ½¶¸·µ·¸¸¶¸·µ¸¶µ´´µ¶µ³²¶±³µµµ¶±²¶²±¯³¬±°¯³±µ°³°²¯°®¯­®®²­¯®®®¬ª««¬®¬©«ª©«¨«©«¦«¨©ªªªªª§¦§©¨§§¥§§¥£¤£¥§¢¤¥¥¨¤¤£¡¡£¥¤¡¡££¡ Ÿ¢ ¡ ¢¡¡¥ ž žœŸœœšš¡šžŸ›ž›œ—œ™š›šš–™›—˜•šœ˜›˜–˜™–•“–•˜’•–•’”’”“–’“‘“’‘’‘‘“’“’ŽŽ‹ŽŒŽŽŒŽ‹ŽŽŠŽŠŒŠˆ‹‰‰ŒŒŒŒ‹Š•†c ‹Á¸µ²´²±³±´³·µº´·µ¸»º»½¹¼½º¼º½»º¹¹´¸¹¼¾¹¼ºº¹´¹¶¸³µ¹µ³²µ·³¹··´·¸¶¸¶µµ±±´¶±·¼º¹¸¶´µ³±³³¶·¶º·µ³±´µ±±±±³¯±²³®³®³¯°±°­¯²´¯±³´¯ª®±®«­ª¬«­¬­¨«ª­­«©­¨«ª©«¬¦©«©¥«¥£§¤£¢¤§ £¥¤¦¥ ¢£¤¢¢¢§¢££¢¥  ¢¢¡¡Ÿ ŸŸ¡ž¢  ™Ÿ ž›žœ›žšžŸŸ› š Ÿœš™™œœ›š››˜•œ›˜••—’””•““••‘”“”–”’•–’‘—“•’’’“’’’’’Œ“ŠŽŽ‘ŽŒ†Š‘‹‘Œ‘ŽŒ‰ŒŠŠŠ‰‹‰ˆˆŒŠŒ‹Šˆˆ˜„‚d XfaXZ_djruqrv||}„†Ž’•™››œ¡žš›ž¡£¦¦¥Ÿ¢¤¦£¦¢©© §¤®¯°¬©«©­­¬°±±±°°©®®¯©ª­«¯°¯­§ªª¦®¨­¬²´¶¯±±²´¨¬®«¦©¬¬©«©¯­²¯±¯³²³¶±³²±®±³®­¯¯­¬­ª®¨ª§ªª¦©©¨©ª¨§¦¨§«§¥¨¨§¥ª¢¤£¡¢¤¥£¥¥¦¢¤§ž ¡¡¡¡¢£¦¢ ¤¢¡¡¢¢ŸšŸ¢Ÿž œ›šš›œŸœž›››—™›œ››œ››˜—šš•–œ››“’”˜“’•’‘‘’—‘–“Ž’““““““‘””’“•““’“–“’‘–‘‘‘‘‹‘ŽŒ‰†Šˆ‡ˆ‹ƒ‡Š†Š‰„‰ƒŒˆŠˆŠˆŽŠŠŒŠŠŒˆ—•„zD  "%()1/6689?CEHEJJTWV]badghoklnqsu{w}~€„‡…†…‡‡‹‰……‚‰†ƒˆ‰„‹…‰Ž•””•”›™—˜—›˜—”–’š˜˜›—›š–˜–™™”Ž’˜˜™—œ–•‘˜•™ŸœŸ¡¢ žžšœšššž›šœ ™ šœžœžŸ   žŸŸ ¢Ÿ  ¡¡ž˜šœœ™œœ›˜—˜˜˜——œš–•˜›”š™˜˜™—š˜––•”˜“™˜•’™–”“‘’““’‘Ž‘‘’Ž“’”ŽŽŒŠŒŠŽŒŒ‹‹‰ŽŽŠ‹‰ˆŠ‹‡ˆˆ„ƒ‡ˆƒ„‡‚„‚†|‡‡…‚……†ˆ€…z…€~zwvy||vrstwvpP   "#%$%$+,./3/:8:>::;?BBCCKLPRPSVY]_ce^ebb`^[_\]UXZ\_`__[Z_abaeehggmmpootrqqmnswswvyy}{zy||€z{|~~‚}~€‚ƒ‚€~‚„‡ƒ…~}|}|z}|}…~€yzy~{|€}z}€‚ƒ~}}€†„‚……‡ˆ‚„„†ƒ‚‡ˆƒ„‚‚€~€~}~}€€€„~~||z|ƒƒ„ƒ…„…|€………„ƒ‚ƒƒƒ‚€|||wvnnjc]XVSMD@6)'"&                        ##!   !$ #%&!&(**+..///0/.--,*+,+*('&&# "'#!%#%$"#                        vlfeat/toolbox/0000755000175000017500000000000012237042512012431 5ustar dimadimavlfeat/toolbox/geometry/0000755000175000017500000000000012237042171014265 5ustar dimadimavlfeat/toolbox/geometry/vl_rodr.c0000644000175000017500000000413412237004736016107 0ustar dimadima/* file: rodr.mex.c ** author: Andrea Vedaldi ** description: Rodrigues formula **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include enum { IN_OM = 0 } ; enum { OUT_R=0, OUT_DR } ; /* ------------------------------------------------------------------- ** Driver ** ---------------------------------------------------------------- */ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { int k,K ; double const * om_pt ; double* R_pt ; double* dR_pt ; if(nin != 1) { mexErrMsgTxt("Exactly one argument required.") ; } if(!vlmxIsMatrix(in[IN_OM],-1,-1)) { mexErrMsgTxt("OM must be a DOUBLE array") ; } K = mxGetNumberOfElements(in[IN_OM]) ; if(K % 3 || K < 3) { mexErrMsgTxt("The number of elements of OM must be a multiple of 3") ; } K /= 3 ; om_pt = mxGetPr(in[IN_OM]) ; /* space for output (R) */ if( K == 1 ) { out[OUT_R] = mxCreateDoubleMatrix(3,3,mxREAL) ; } else { mwSize dims [3] ; dims[0] = 3 ; dims[1] = 3 ; dims[2] = K ; out[OUT_R] = mxCreateNumericArray(3,dims,mxDOUBLE_CLASS,mxREAL) ; } R_pt = mxGetPr(out[OUT_R]) ; /* space for optional output (dR) */ dR_pt = NULL ; if( nout > 1 ) { if( K == 1 ) { out[OUT_DR] = mxCreateDoubleMatrix(9,3,mxREAL) ; } else { mwSize dims [3] ; dims[0] = 9 ; dims[1] = 3 ; dims[2] = K ; out[OUT_DR] = mxCreateNumericArray(3,dims,mxDOUBLE_CLASS,mxREAL) ; } dR_pt = mxGetPr(out[OUT_DR]) ; } /* ----------------------------------------------------------------- ** Process ** -------------------------------------------------------------- */ for(k = 0 ; k < K ; ++k) { vl_rodrigues(R_pt, dR_pt, om_pt) ; om_pt += 3 ; R_pt += 3*3 ; dR_pt += 9*3 ; } } vlfeat/toolbox/geometry/vl_rodr.m0000644000175000017500000000154712237004736016126 0ustar dimadima% VL_RODR Rodrigues' formula % R = VL_RODR(OM) where OM a 3-dimensional column vector computes the % Rodrigues' formula of OM, returning the rotation matrix R = % expm(vl_hat(OM)). % % [R,DR] = VL_RODR(OM) computes also the derivative of the Rodrigues % formula. In matrix notation this is the expression % % d(vec expm(vl_hat(OM)) ) % dR = ----------------------. % d om^T % % [R,DR]=VL_RODR(OM) when OM is a 3xK matrix repeats the operation for % each column (or equivalently matrix with 3*K elements). In this % case R and DR are arrays with K slices, one per rotation. % % See also: VL_IRODR(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/geometry/vl_ihat.m0000644000175000017500000000067312237004736016104 0ustar dimadimafunction om = vl_ihat( H ) % VL_IHAT Inverse vl_hat operator % OM = VL_IHAT(H) returns a vector OM such that VL_HAT(OM) = H. % H hast to be 3x3 skew-symmetric. % % See also: VL_HAT(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). om = [H(3,2);H(1,3);H(2,1)] ; vlfeat/toolbox/geometry/vl_irodr.m0000644000175000017500000000157712237004736016302 0ustar dimadima% VL_IRODR Inverse Rodrigues' formula % OM = VL_IRODR(R) where R is a rotation matrix computes the the % inverse Rodrigues' formula of om, returning the rotation matrix R % = dehat(Logm(OM)). % % [OM,DOM] = VL_IRODR(R) computes also the derivative of the Rodrigues' % formula. In matrix notation this is the expression % % d( dehat logm(vl_hat(R)) ) % dom = ----------------------. % d(vec R)^T % % [OM,DOM] = VL_IRODR(R) when R is a 9xK matrix repeats the operation % for each column (or equivalently matrix with 9*K elements). In % this case OM and DOM are arrays with K slices, one per rotation. % % See also: VL_RODR(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/geometry/vl_irodr.c0000644000175000017500000000417112237004736016261 0ustar dimadima/* file: irodr.mex.c ** author: Andrea Vedaldi ** description: Inverse rodrigues formula **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include enum { IN_R = 0 } ; enum { OUT_OM=0, OUT_DOM } ; /* ------------------------------------------------------------------- ** Driver ** ----------------------------------------------------------------- */ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { int k,K ; double* om_pt ; double* dom_pt ; double const * R_pt ; /* ----------------------------------------------------------------- ** Check the arguments ** -------------------------------------------------------------- */ if(nin != 1) { mexErrMsgTxt("Exactly one argument required.") ; } if(!vlmxIsMatrix(in[IN_R],-1,-1)) { mexErrMsgTxt("R must be a DOUBLE array") ; } K = mxGetNumberOfElements(in[IN_R]) ; if(K % 9 || K < 9) { mexErrMsgTxt("The elements of R must be a multiple of 9.") ; } K /= 9 ; R_pt = mxGetPr(in[IN_R]) ; /* space for output (OM) */ out[OUT_OM] = mxCreateDoubleMatrix(3,1,mxREAL) ; om_pt = mxGetPr(out[OUT_OM]) ; /* space for optional output (dR) */ dom_pt = NULL ; if( nout > 1 ) { if( K == 1 ) { out[OUT_DOM] = mxCreateDoubleMatrix(3,9,mxREAL) ; } else { mwSize dims [3] ; dims[0] = 3 ; dims[1] = 9 ; dims[2] = K ; out[OUT_DOM] = mxCreateNumericArray(3,dims,mxDOUBLE_CLASS,mxREAL) ; } dom_pt = mxGetPr(out[OUT_DOM]) ; } /* ----------------------------------------------------------------- ** Process ** -------------------------------------------------------------- */ for(k = 0 ; k < K ; ++k) { vl_irodrigues(om_pt, dom_pt, R_pt) ; om_pt += 3 ; dom_pt += 3*9 ; R_pt += 3*3 ; } } vlfeat/toolbox/geometry/vl_hat.m0000644000175000017500000000074112237004736015727 0ustar dimadimafunction H = vl_hat(om) % VL_HAT Hat operator % H = VL_HAT(OM) returns the skew symmetric matrix by taking the "hat" % of the 3D vector OM. % % See also: VL_IHAT(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). H = [0 -om(3) om(2) ; om(3) 0 -om(1) ; -om(2) om(1) 0 ] ; vlfeat/toolbox/quickshift/0000755000175000017500000000000012237042171014604 5ustar dimadimavlfeat/toolbox/quickshift/vl_imseg.m0000644000175000017500000000125712237004736016601 0ustar dimadimafunction Q = vl_imseg(I,labels) % VL_IMSEG Color an image based on the segmentation % ISEG = VL_IMSEG(I,LABELS) labels ISEG with the average color from I of % each cluster indicated by LABELS. % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). [M,N,K] = size(I) ; Q = 0*I ; for k=1:size(I,3) acc = zeros(M,N) ; nrm = zeros(M,N) ; acc = vl_binsum(acc, I(:,:,k), labels) ; nrm = vl_binsum(nrm, ones(M,N), labels) ; acc = acc ./ (nrm+eps) ; Q(:,:,k) = acc(labels) ; end Q = min(1,Q); vlfeat/toolbox/quickshift/vl_quickseg.m0000644000175000017500000000531012237004736017302 0ustar dimadimafunction [Iseg labels map gaps E] = vl_quickseg(I, ratio, kernelsize, maxdist) % VL_QUICKSEG Produce a quickshift segmentation of a grayscale or color image % [ISEG LABELS MAPS GAPS E] = VL_QUICKSEG(I, RATIO, KERNELSIZE, MAXDIST) % % Produces a Quickshift segmentation of an image. See VL_QUICKSHIFT for more % details. % % Inputs: % I Input image, may be RGB or Grayscale. RGB images are first % converted to LAB. % RATIO Tradeoff between spatial consistency and color consistency. % Small ratio gives more importance to the spatial component. % Note that distance calculations happen in unnormalized image % coordinates, so RATIO should be adjusted to compensate for % larger images. % KERNELSIZE The standard deviation of the parzen window density estimator. % MAXDIST The maximum distance between nodes in the quickshift tree. Used % to cut links in the tree to form the segmentation. % % Outputs: % ISEG A color image where each pixel is labeled by the mean color in its % region. % LABELS A labeled image where the number corresponds to the cluster identity % MAP MAP as returned by VL_QUICKSHIFT: For each pixel, the pointer to the % nearest pixel which increases the estimate of the density % GAPS GAPS as returned by VL_QUICKSHIFT: For each pixel, the distance to % the nearest pixel which increases the estimate of the density % E E as returned by VL_QUICKSHIFT: The estimate of the density % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). I = im2double(I); % Add less than one pixel noise to break ties caused by constant regions in an % arbitrary fashon I = I + rand(size(I))/2550; if size(I,3) == 1 Ix = ratio * I; else Ix = ratio * vl_xyz2lab(vl_rgb2xyz(I)); %Ix = Ix(:,:,2:3); % Throw away L end % Perform quickshift to obtain the segmentation tree, which is already cut by % maxdist. If a pixel has no nearest neighbor which increases the density, its % parent in the tree is itself, and gaps is inf. [map,gaps,E] = vl_quickshift(Ix, kernelsize, maxdist) ; % Follow the parents of the tree until we have reached the root nodes % mapped: a labeled segmentation where the labels are the indicies of the modes % in the original image. % labels: mapped after having been renumbered 1:nclusters and reshaped into a % vector [mapped labels] = vl_flatmap(map) ; labels = reshape(labels, size(map)); % imseg builds an average description of the region by color Iseg = vl_imseg(I, labels); vlfeat/toolbox/quickshift/vl_flatmap.m0000644000175000017500000000137012237004736017115 0ustar dimadimafunction [map, C] = vl_flatmap(map) % VL_FLATMAP Flatten a tree, assigning the label of the root to each node % [LABELS CLUSTERS] = VL_FLATMAP(MAP) labels each tree of the forest contained % in MAP. LABELS contains the linear index of the root node in MAP, CLUSTERS % instead contains a label between 1 and the number of clusters. % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). % follow the parents list to the root nodes (where nothing changes) while 1 map_ = map(map) ; if isequal(map_,map) ; break ; end map = map_ ; end [drop,drop,C] = unique(map) ; vlfeat/toolbox/quickshift/vl_quickvis.m0000644000175000017500000000716012237004736017332 0ustar dimadimafunction [Iedge dists map gaps] = vl_quickvis(I, ratio, kernelsize, maxdist, maxcuts) % VL_QUICKVIS Create an edge image from a Quickshift segmentation. % IEDGE = VL_QUICKVIS(I, RATIO, KERNELSIZE, MAXDIST, MAXCUTS) creates an edge % stability image from a Quickshift segmentation. RATIO controls the tradeoff % between color consistency and spatial consistency (See VL_QUICKSEG) and % KERNELSIZE controls the bandwidth of the density estimator (See VL_QUICKSEG, % VL_QUICKSHIFT). MAXDIST is the maximum distance between neighbors which % increase the density. % % VL_QUICKVIS takes at most MAXCUTS thresholds less than MAXDIST, forming at % most MAXCUTS segmentations. The edges between regions in each of these % segmentations are labeled in IEDGE, where the label corresponds to the % largest DIST which preserves the edge. % % [IEDGE,DISTS] = VL_QUICKVIS(I, RATIO, KERNELSIZE, MAXDIST, MAXCUTS) also % returns the DIST thresholds that were chosen. % % IEDGE = VL_QUICKVIS(I, RATIO, KERNELSIZE, DISTS) will use the DISTS % specified % % [IEDGE,DISTS,MAP,GAPS] = VL_QUICKVIS(I, RATIO, KERNELSIZE, MAXDIST, MAXCUTS) % also returns the MAP and GAPS from VL_QUICKSHIFT. % % See Also: VL_QUICKSHIFT(), VL_QUICKSEG(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if nargin == 4 dists = maxdist; maxdist = max(dists); [Iseg labels map gaps E] = vl_quickseg(I, ratio, kernelsize, maxdist); else [Iseg labels map gaps E] = vl_quickseg(I, ratio, kernelsize, maxdist); dists = unique(floor(gaps(:))); dists = dists(2:end-1); % remove the inf thresh and the lowest level thresh if length(dists) > maxcuts ind = round(linspace(1,length(dists), maxcuts)); dists = dists(ind); end end [Iedge dists] = mapvis(map, gaps, dists); function [Iedge dists] = mapvis(map, gaps, maxdist, maxcuts) % MAPVIS Create an edge image from a Quickshift segmentation. % IEDGE = MAPVIS(MAP, GAPS, MAXDIST, MAXCUTS) creates an edge % stability image from a Quickshift segmentation. MAXDIST is the maximum % distance between neighbors which increase the density. % % MAPVIS takes at most MAXCUTS thresholds less than MAXDIST, forming at most % MAXCUTS segmentations. The edges between regions in each of these % segmentations are labeled in IEDGE, where the label corresponds to the % largest DIST which preserves the edge. % % [IEDGE,DISTS] = MAPVIS(MAP, GAPS, MAXDIST, MAXCUTS) also returns the DIST % thresholds that were chosen. % % IEDGE = MAPVIS(MAP, GAPS, DISTS) will use the DISTS specified % % See Also: VL_QUICKVIS, VL_QUICKSHIFT, VL_QUICKSEG if nargin == 3 dists = maxdist; maxdist = max(dists); else dists = unique(floor(gaps(:))); dists = dists(2:end-1); % remove the inf thresh and the lowest level thresh % throw away min region size instead of maxdist? ind = find(dists < maxdist); dists = dists(ind); if length(dists) > maxcuts ind = round(linspace(1,length(dists), maxcuts)); dists = dists(ind); end end Iedge = zeros(size(map)); for i = 1:length(dists) s = find(gaps >= dists(i)); mapdist = map; mapdist(s) = s; [mapped labels] = vl_flatmap(mapdist); fprintf('%d/%d %d regions\n', i, length(dists), length(unique(mapped))) borders = getborders(mapped); Iedge(borders) = dists(i); %Iedge(borders) = Iedge(borders) + 1; %Iedge(borders) = i; end %%%%%%%%% GETBORDERS function borders = getborders(map) dx = conv2(map, [-1 1], 'same'); dy = conv2(map, [-1 1]', 'same'); borders = find(dx ~= 0 | dy ~= 0); vlfeat/toolbox/quickshift/vl_quickshift.m0000644000175000017500000000343512237004736017647 0ustar dimadima% VL_QUICKSHIFT Quick shift image segmentation % Quick shift is a mode seeking algorithm which links each pixel to % its nearest neighbor which has an increase in the estimate of the % density. These links form a tree, where the root of the tree is % the pixel which correspond to the highest mode in the image. % % [MAP,GAPS] = VL_QUICKSHIFT(I, KERNELSIZE, MAXDIST) computes quick shift on the % image I. KERNELSIZE is the bandwidth of the Parzen window estimator of % the density. Since searching over all pixels for the nearest % neighbor which increases the density would be prohibitively % expensive, MAXDIST controls the maximum L2 distance between neighbors % that should be linked. MAP and GAP represent the resulting forest % of trees. They are array of the same size of I. Each element % (pixel) of MAP is and index to the parent elemen in the forest and % GAP contains the corresponding branch length. Pixels which are at % the root of their respective tree have MAP(x) = x and GAPS(x) = % inf. % % [MAP,GAPS,E] = VL_QUICKSHIFT(I, KERNELSIZE, MAXDIST) also returns the estimate % of the density E. % % [MAP,GAPS] = VL_QUICKSHIFT(I, KERNELSIZE) uses a default MAXDIST of 3 * KERNELSIZE. % % Notes:: % The distance between pixels is always measured in image % coordinates (not normalized), so the importance of the color % component should be weighted accordingly before calling this % function. % % Options: % % Verbose:: % Toggles verbose output. % % Medoid:: % Run medoid shift instead of quick shift. % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/quickshift/vl_quickshift.c0000644000175000017500000000745112237004745017637 0ustar dimadima/** @internal ** @file: quickshift.c ** @author: Andrea Vedaldi ** @author: Brian Fulkerson ** @brief: Quickshift MEX driver **/ /* Copyright (C) 2009-11 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include enum { opt_medoid, opt_verbose } ; vlmxOption options [] = { {"Medoid", 0, opt_medoid }, {"Verbose", 0, opt_verbose }, {0, 0, 0 } } ; /** ------------------------------------------------------------------ ** @brief MEX entry point **/ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum { IN_I=0, /* Input image */ IN_KERNEL_SIZE, /* The bandwidth parameter for density estimation */ IN_MAX_DIST, /* The maximum distance to a neighbor which increases the density */ IN_END } ; enum { OUT_PARENTS=0, /* parents (same size as I) */ OUT_DISTS, /* dists (same size as I) */ OUT_DENSITY /* density (same size as I) */ } ; int verb = 0 ; int opt ; int next = IN_END ; mxArray const *optarg ; double const *I ; double *parents, *dists, *density ; int *parentsi; double sigma ; double tau ; int K,N1,N2; int medoid = 0 ; mwSize const *dims ; int ndims ; int i; VlQS * q; VL_USE_MATLAB_ENV ; /* ----------------------------------------------------------------- * Check arguments * -------------------------------------------------------------- */ if (nin < 2) { mexErrMsgTxt("At least two arguments.") ; } if (nout > 3) { mexErrMsgTxt("At most three output arguments.") ; } ndims = mxGetNumberOfDimensions(in[IN_I]) ; dims = mxGetDimensions(in[IN_I]) ; if (ndims > 3) { mexErrMsgTxt("I must have at most 3 dimensions.") ; } if (mxGetClassID(in[IN_I]) != mxDOUBLE_CLASS) { mexErrMsgTxt("I must be DOUBLE.") ; } N1 = dims [0] ; N2 = dims [1] ; K = (ndims == 3) ? dims [2] : 1 ; I = mxGetPr (in[IN_I]) ; sigma = *mxGetPr (in[IN_KERNEL_SIZE]) ; tau = 3*sigma; if (nin > 2) tau = *mxGetPr (in[IN_MAX_DIST]) ; while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { switch (opt) { case opt_medoid: /* Do medoid shift instead of mean shift */ medoid = 1 ; break ; case opt_verbose : ++ verb ; break ; } } /* while opts */ /* Create outputs */ out[OUT_PARENTS] = mxCreateDoubleMatrix(N1, N2, mxREAL) ; parents = mxGetPr (out[OUT_PARENTS]) ; out[OUT_DISTS] = mxCreateDoubleMatrix(N1, N2, mxREAL) ; dists = mxGetPr (out[OUT_DISTS]) ; out[OUT_DENSITY] = mxCreateDoubleMatrix(N1, N2, mxREAL) ; density = mxGetPr (out[OUT_DENSITY]) ; if (verb) { mexPrintf("quickshift: [N1,N2,K]: [%d,%d,%d]\n", N1,N2,K) ; mexPrintf("quickshift: type: %s\n", medoid ? "medoid" : "quick"); mexPrintf("quickshift: kernel size: %g\n", sigma) ; mexPrintf("quickshift: maximum gap: %g\n", tau) ; } /* Do job */ q = vl_quickshift_new(I, N1, N2, K); vl_quickshift_set_kernel_size (q, sigma) ; vl_quickshift_set_max_dist (q, tau) ; vl_quickshift_set_medoid (q, medoid) ; vl_quickshift_process(q); parentsi = vl_quickshift_get_parents(q); /* Copy results */ for(i = 0; i < N1*N2; i++) parents[i] = parentsi[i] + 1; memcpy(dists, vl_quickshift_get_dists(q), sizeof(double)*N1*N2); memcpy(density, vl_quickshift_get_density(q), sizeof(double)*N1*N2); /* Delete quick shift object */ vl_quickshift_delete(q); } vlfeat/toolbox/special/0000755000175000017500000000000012237004736014057 5ustar dimadimavlfeat/toolbox/special/vl_ddgaussian.m0000644000175000017500000000120012237004736017051 0ustar dimadimafunction y = vl_ddgaussian(x) % VL_DDGAUSSIAN Second derivative of the Gaussian density function % Y=VL_DDGAUSSIAN(X) computes the second derivative of the standard % Gaussian density. % % To obtain the second derivative of the Gaussian density of % standard deviation S, do % % Y = 1/S^3 * VL_DDGAUSSIAN(X/S) . % % See also: VL_GAUSSIAN(), VL_DGAUSSIAN(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). y = (x.^2 - 1)/sqrt(2*pi) .* exp(-0.5*x.^2) ; vlfeat/toolbox/special/vl_gaussian.m0000644000175000017500000000110012237004736016540 0ustar dimadimafunction y = vl_gaussian(x) % VL_GAUSSIAN Standard Gaussian density function % Y=VL_GAUSSIAN(X) computes the standard (zero mean, unit variance) % Gaussian density. % % To obtain the Gaussian density of standard deviation S do % % Y = 1/S * VL_GAUSSIAN(X/S). % % See also: VL_DGAUSSIAN(), VL_DDGAUSSIAN(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). y = 1/sqrt(2*pi)*exp(-0.5*x.^2) ; vlfeat/toolbox/special/vl_sigmoid.m0000644000175000017500000000117112237004736016371 0ustar dimadimafunction y = vl_sigmoid(x) % VL_SIGMOID Sigmoid function % Y = VL_SIGMOID(X) returns % % Y = 1 ./ (1 + EXP(X)) ; % % Remark:: % Useful properties of the sigmoid function are: % % - 1 - VL_SIGMOID(X) = VL_SIGMOID(-X) % - Centered sigmoid: 2 * VL_SIGMOID(X) - 1 ; % - VL_SIGMOID(X) = (EXP(X/2) - EXP(X/2)) / (EXP(X/2) + EXP(X/2)) % % See also: VL_DSIGMOID(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). y = 1 ./ (1 + exp(-x)) ; vlfeat/toolbox/special/vl_rcos.m0000644000175000017500000000100212237004736015675 0ustar dimadimafunction y = vl_rcos(r,x) % VL_RCOS RCOS function % Y = VL_RCOS(R,X) computes the RCOS function with roll-off R. % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). x = abs(x) ; if(r > 0) y = (x < (1 - r)) + ... 0.5 * (1 + cos((1 - r - x)/r*pi)) .* ... (x <= 1) .* (x >= 1 - r) ; else y = (abs(x) <= 1) ; end vlfeat/toolbox/special/vl_dgaussian.m0000644000175000017500000000111412237004736016711 0ustar dimadimafunction y = vl_dgaussian(x) % VL_DGAUSSIAN Derivative of the Gaussian density function % Y=VL_DGAUSSIAN(X) evaluates the derivative of the standard Gaussian % density. % % To obtain the Gaussian density of standard deviation S, do % % Y = 1/S^2 * VL_DGAUSSIAN(X/S) . % % See also: VL_GAUSSIAN(), VL_DDGAUSSIAN(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). y = -x/sqrt(2*pi) .* exp(-0.5*x.^2) ; vlfeat/toolbox/special/vl_dsigmoid.m0000644000175000017500000000076412237004736016544 0ustar dimadimafunction y = vl_dsigmoid(x) % VL_DSIGMOID Derivative of the sigmoid function % Y = VL_DSIGMOID(X) returns the derivative of VL_SIGMOID(X). This is % calculated as - VL_SIGMOID(X) * (1 - VL_SIGMOID(X)). % % See also: VL_SIGMOID(X), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). t = vl_sigmoid(x) ; y = t .* (1 - t) ; vlfeat/toolbox/vl_root.m0000644000175000017500000000077012237004736014305 0ustar dimadimafunction path = vl_root % VL_ROOT Obtain VLFeat root path % PATH = VL_ROOT() returns the path to the VLFeat installation. % % See also: VL_SETUP(), VL_HELP(). % Authors: Andrea Vedaldi and Brian Fulkerson % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). [a,b,c] = fileparts(mfilename('fullpath')) ; [a,b,c] = fileparts(a) ; path = a ; vlfeat/toolbox/vl_help.m0000644000175000017500000000311012237004745014241 0ustar dimadimafunction vl_help(topic, varargin) % VL_HELP VLFeat toolbox builtin help % VL_HELP('doc') displays the HTML documentation in MATLAB % web-browser. VL_HELP('vl_function') displays the HTML % documentation relative to the specified funtion. VL_HELP('topic') % displays the HTML documentation relative to a particular 'topic'. % % VL_HELP(..., 'ONLINE', true) uses the online documentation instead of % the local copy. % % Example:: % To get information about the library, a topic such as Fisher vectors, % or a function such as VL_FISHER(), use: % vl_help doc % vl_help fisher % vl_help vl_fisher % % See also the core VLFeat % documentation. % Author: Andrea Vedaldi % Copyright (C) 2013 Andrea Vedaldi % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if nargin == 0 help vl_help ; return ; end opts.online = false ; opts = vl_argparse(opts, varargin) ; local = fullfile(vl_root, 'doc') ; if opts.online prefix = 'http://www.vlfeat.org/doc' ; else prefix = local ; end if strcmp(topic, 'doc') asFunction = 'index.html' ; asTopic = 'index.html' ; else asFunction = fullfile('mdoc', [lower(topic) '.html']) ; asTopic = fullfile('api', [lower(topic) '.html']) ; end if exist(fullfile(local, asFunction), 'file') web(fullfile(prefix, asFunction)) ; elseif exist(fullfile(local, asTopic), 'file') web(fullfile(prefix, asTopic)) ; else error('''%s'' is not a valid function or topic.', topic) ; end vlfeat/toolbox/vl_setup.m0000644000175000017500000000552012237004745014460 0ustar dimadimafunction path = vl_setup(varargin) % VL_SETUP Add VLFeat Toolbox to the path % PATH = VL_SETUP() adds the VLFeat Toolbox to MATLAB path and % returns the path PATH to the VLFeat package. % % VL_SETUP('NOPREFIX') adds aliases to each function that do not % contain the VL_ prefix. For example, with this option it is % possible to use SIFT() instead of VL_SIFT(). % % VL_SETUP('TEST') or VL_SETUP('XTEST') adds VLFeat unit test % function suite. See also VL_TEST(). % % VL_SETUP('QUIET') does not print the greeting message. % % See also: VL_ROOT(), VL_HELP(). % Authors: Andrea Vedaldi and Brian Fulkerson % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). noprefix = false ; quiet = true ; xtest = false ; demo = false ; for ai=1:length(varargin) opt = varargin{ai} ; switch lower(opt) case {'noprefix', 'usingvl'} noprefix = true ; case {'test', 'xtest'} xtest = true ; case {'demo'} demo = true ; case {'quiet'} quiet = true ; case {'verbose'} quiet = false ; otherwise error('Unknown option ''%s''.', opt) ; end end % Do not use vl_root() to avoid conflicts with other VLFeat % installations. [a,b,c] = fileparts(mfilename('fullpath')) ; [a,b,c] = fileparts(a) ; root = a ; addpath(fullfile(root,'toolbox' )) ; addpath(fullfile(root,'toolbox','aib' )) ; addpath(fullfile(root,'toolbox','geometry' )) ; addpath(fullfile(root,'toolbox','imop' )) ; addpath(fullfile(root,'toolbox','kmeans' )) ; addpath(fullfile(root,'toolbox','misc' )) ; addpath(fullfile(root,'toolbox','mser' )) ; addpath(fullfile(root,'toolbox','plotop' )) ; addpath(fullfile(root,'toolbox','quickshift')) ; addpath(fullfile(root,'toolbox','sift' )) ; addpath(fullfile(root,'toolbox','special' )) ; addpath(fullfile(root,'toolbox','slic' )) ; addpath(fullfile(root,'toolbox','gmm' )) ; addpath(fullfile(root,'toolbox','vlad' )) ; addpath(fullfile(root,'toolbox','fisher' )) ; if vl_isoctave() addpath(genpath(fullfile(root,'toolbox','mex','octave'))) ; warning('off', 'Octave:possible-matlab-short-circuit-operator') ; pkg load image ; else bindir = mexext ; if strcmp(bindir, 'dll'), bindir = 'mexw32' ; end addpath(fullfile(root,'toolbox','mex',bindir)) ; end if noprefix addpath(fullfile(root,'toolbox','noprefix')) ; end if xtest addpath(fullfile(root,'toolbox','xtest')) ; end if demo addpath(fullfile(root,'toolbox','demo')) ; end if ~quiet if exist('vl_version') == 3 fprintf('VLFeat %s ready.\n', vl_version) ; else warning('VLFeat does not seem to be installed correctly. Make sure that the MEX files are compiled.') ; end end if nargout == 0 clear path ; end vlfeat/toolbox/xtest/0000755000175000017500000000000012237035722013605 5ustar dimadimavlfeat/toolbox/xtest/vl_test_kdtree.m0000644000175000017500000000462112237004745017005 0ustar dimadimafunction results = vl_test_kdtree(varargin) % VL_TEST_KDTREE vl_test_init ; function s = setup() randn('state',0) ; s.X = single(randn(10, 1000)) ; s.Q = single(randn(10, 10)) ; function test_nearest(s) for tmethod = {'median', 'mean'} for type = {@single, @double} conv = type{1} ; tmethod = char(tmethod) ; X = conv(s.X) ; Q = conv(s.Q) ; tree = vl_kdtreebuild(X,'ThresholdMethod', tmethod) ; [nn, d2] = vl_kdtreequery(tree, X, Q) ; D2 = vl_alldist2(X, Q, 'l2') ; [d2_, nn_] = min(D2) ; vl_assert_equal(... nn,uint32(nn_),... 'incorrect nns: type=%s th. method=%s', func2str(conv), tmethod) ; vl_assert_almost_equal(... d2,d2_,... 'incorrect distances: type=%s th. method=%s', func2str(conv), tmethod) ; end end function test_nearests(s) numNeighbors = 7 ; tree = vl_kdtreebuild(s.X) ; [nn, d2] = vl_kdtreequery(tree, s.X, s.Q, ... 'numNeighbors', numNeighbors) ; D2 = vl_alldist2(s.X, s.Q, 'l2') ; [d2_, nn_] = sort(D2) ; d2_ = d2_(1:numNeighbors, :) ; nn_ = nn_(1:numNeighbors, :) ; vl_assert_equal(nn,uint32(nn_)) ; vl_assert_almost_equal(d2,d2_) ; function test_ann(s) vl_twister('state', 1) ; numNeighbors = 7 ; maxComparisons = numNeighbors * 50 ; tree = vl_kdtreebuild(s.X) ; [nn, d2] = vl_kdtreequery(tree, s.X, s.Q, ... 'numNeighbors', numNeighbors, ... 'maxComparisons', maxComparisons) ; D2 = vl_alldist2(s.X, s.Q, 'l2') ; [d2_, nn_] = sort(D2) ; d2_ = d2_(1:numNeighbors, :) ; nn_ = nn_(1:numNeighbors, :) ; for i=1:size(s.Q,2) overlap = numel(intersect(nn(:,i), nn_(:,i))) / ... numel(union(nn(:,i), nn_(:,i))) ; assert(overlap > 0.6, 'ANN did not return enough correct nearest neighbors') ; end function test_ann_forest(s) vl_twister('state', 1) ; numNeighbors = 7 ; maxComparisons = numNeighbors * 25 ; numTrees = 5 ; tree = vl_kdtreebuild(s.X, 'numTrees', 5) ; [nn, d2] = vl_kdtreequery(tree, s.X, s.Q, ... 'numNeighbors', numNeighbors, ... 'maxComparisons', maxComparisons) ; D2 = vl_alldist2(s.X, s.Q, 'l2') ; [d2_, nn_] = sort(D2) ; d2_ = d2_(1:numNeighbors, :) ; nn_ = nn_(1:numNeighbors, :) ; for i=1:size(s.Q,2) overlap = numel(intersect(nn(:,i), nn_(:,i))) / ... numel(union(nn(:,i), nn_(:,i))) ; assert(overlap > 0.6, 'ANN did not return enough correct nearest neighbors') ; end vlfeat/toolbox/xtest/vl_test_aib.m0000644000175000017500000000237512237004736016266 0ustar dimadimafunction results = vl_test_aib(varargin) % VL_TEST_AIB vl_test_init ; function s = setup() s = [] ; function test_basic(s) Pcx = [.3 .3 0 0 0 0 .2 .2] ; % This results in the AIB tree % % 1 - \ % 5 - \ % 2 - / \ % - 7 % 3 - \ / % 6 - / % 4 - / % % coded by the map [5 5 6 6 7 1] (1 denotes the root). [parents,cost] = vl_aib(Pcx) ; vl_assert_equal(parents, [5 5 6 6 7 7 1]) ; vl_assert_almost_equal(mi(Pcx)*[1 1 1], cost(1:3), 1e-3) ; [cut,map,short] = vl_aibcut(parents,2) ; vl_assert_equal(cut, [5 6]) ; vl_assert_equal(map, [1 1 2 2 1 2 0]) ; vl_assert_equal(short, [5 5 6 6 5 6 7]) ; function test_cluster_null(s) Pcx = [.5 .5 0 0 0 0 0 0] ; % This results in the AIB tree % % 1 - \ % 5 % 2 - / % % 3 x % % 4 x % % If ClusterNull is specified, the values 3 and 4 % which have zero probability are merged first % % 1 ----------\ % 7 % 2 ----- \ / % 6-/ % 3 -\ / % 5 -/ % 4 -/ parents1 = vl_aib(Pcx) ; parents2 = vl_aib(Pcx,'ClusterNull') ; vl_assert_equal(parents1, [5 5 0 0 1 0 0]) ; vl_assert_equal(parents2(3), parents2(4)) ; function x = mi(P) % mutual information P1 = sum(P,1) ; P2 = sum(P,2) ; x = sum(sum(P .* log(max(P,1e-10) ./ (P2*P1)))) ; vlfeat/toolbox/xtest/vl_test_mser.m0000644000175000017500000000036212237004736016473 0ustar dimadimafunction results = vl_test_mser(varargin) % VL_TEST_MSER vl_test_init ; function s = setup() s.im = im2uint8(rgb2gray(vl_impattern('roofs1'))) ; function test_mser(s) [regions,frames] = vl_mser(s.im) ; mask = vl_erfill(s.im, regions(1)) ; vlfeat/toolbox/xtest/vl_test.m0000644000175000017500000000345412237004745015452 0ustar dimadimafunction results = vl_test(suite, test) % VL_TEST Run test suite % RESULTS = VL_TEST() runs all VLFeat test suites. The tests % verify that VLFeat is working correctly. % % RESULTS is a structure listing the result of each test. % It has fileds: % % TESTNAME: name of the test % SUCCEDED: a boolean flag indicating whether the test succeded % EXCEPTION: the exception generated if the test failed % % VL_TEST(SUITE) runs only the specified SUITE. % % VL_TEST(SUITE, TEST) runs the specified SUITE/TEST without catching % the potential exception. Useful to DBSTOP to debug. % Author: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % Copyright (C) 2013 Andrea Vedaldi. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). clear functions ; testRoot = fileparts(mfilename('fullpath')) ; if nargin == 0 files = dir(fullfile(testRoot, 'vl_test_*.m')) ; elseif nargin == 1 files.name = fullfile(['vl_test_' suite '.m']) ; end if nargin < 2 results = {} ; for i = 1:length(files) testCommand = files(i).name(1:end-2) ; if strcmp(testCommand, 'vl_test_init'), continue ; end fprintf('vl_test: running %s\n', testCommand) ; results{i} = feval(str2func(testCommand)) ; end results = cat(2, results{:}) ; for i = 1:length(results) if results(i).succeded fprintf('vl_test: %-35s ... passed\n', results(i).testName) ; else fprintf('vl_test: %-35s ... failed\n', results(i).testName) ; fprintf('%s:%d: %s\n', ... results(i).exception.stack(1).name, ... results(i).exception.stack(1).line, ... results(i).exception.message) ; end end else feval(str2func(sprintf('vl_test_%s', suite)), test) ; end vlfeat/toolbox/xtest/vl_test_argparse.m0000644000175000017500000000143312237004736017331 0ustar dimadimafunction results = vl_test_argparse(varargin) % VL_TEST_ARGPARSE vl_test_init ; function test_basic() opts.field1 = 1 ; opts.field2 = 2 ; opts.field3 = 3 ; opts_ = opts ; opts_.field1 = 3 ; opts_.field2 = 10 ; opts = vl_argparse(opts, {'field2', 10, 'field1', 3}) ; assert(isequal(opts, opts_)) ; opts_.field1 = 9 ; opts = vl_argparse(opts, {'field1', 4, 'field1', 9}) ; assert(isequal(opts, opts_)) ; function test_error() opts.field1 = 1 ; try opts = vl_argparse(opts, {'field2', 5}) ; catch e return ; end assert(false) ; function test_leftovers() opts1.field1 = 1 ; opts2.field2 = 1 ; opts1_.field1 = 2 ; opts2_.field2 = 2 ; [opts1,args] = vl_argparse(opts1, {'field1', 2, 'field2', 2}) ; opts2 = vl_argparse(opts2, args) ; assert(isequal(opts1,opts1_), isequal(opts2,opts2_)) ; vlfeat/toolbox/xtest/vl_test_imwbackward.m0000644000175000017500000000100212237004736020010 0ustar dimadimafunction results = vl_test_imwbackward(varargin) % VL_TEST_IMWBACKWARD vl_test_init ; function s = setup() s.I = im2double(imread(fullfile(vl_root,'data','spots.jpg'))) ; function test_identity(s) xr = 1:size(s.I,2) ; yr = 1:size(s.I,1) ; [x,y] = meshgrid(xr,yr) ; vl_assert_almost_equal(s.I, vl_imwbackward(xr,yr,s.I,x,y)) ; function test_invalid_args(s) xr = 1:size(s.I,2) ; yr = 1:size(s.I,1) ; [x,y] = meshgrid(xr,yr) ; vl_assert_exception(@() vl_imwbackward(xr,yr,single(s.I),x,y), 'vl:invalidArgument') ; vlfeat/toolbox/xtest/vl_assert_exception.m0000644000175000017500000000101512237004736020041 0ustar dimadimafunction vl_assert_exception(func, errorId, errorMessage) % VL_ASSERT_EXCEPTION try func() ; catch e = lasterror ; if nargin >= 2 assert(isequal(e.identifier, errorId), ... 'Exception ID ''%s'' is not ''%s''.', ... e.identifier, errorId) ; end if nargin >= 3 assert(isequal(e.message, errorMessage), ... 'Exception message ''%s'' is not ''%s''.', ... e.message, errorMessage) ; end return ; end assert(0, 'The function did not generate an exception.') ; end vlfeat/toolbox/xtest/vl_test_vlad.m0000644000175000017500000000367112237004745016461 0ustar dimadimafunction results = vl_test_vlad(varargin) % VL_TEST_VLAD vl_test_init ; function s = setup() randn('state',0) ; s.x = randn(128,256) ; s.mu = randn(128,16) ; assignments = rand(16, 256) ; s.assignments = bsxfun(@times, assignments, 1 ./ sum(assignments,1)) ; function test_basic (s) x = [1, 2, 3] ; mu = [0, 0, 0] ; assignments = eye(3) ; phi = vl_vlad(x, mu, assignments, 'unnormalized') ; vl_assert_equal(phi, [1 2 3]') ; mu = [0, 1, 2] ; phi = vl_vlad(x, mu, assignments, 'unnormalized') ; vl_assert_equal(phi, [1 1 1]') ; phi = vl_vlad([x x], mu, [assignments assignments], 'unnormalized') ; vl_assert_equal(phi, [2 2 2]') ; function test_rand (s) phi_ = simple_vlad(s.x, s.mu, s.assignments) ; phi = vl_vlad(s.x, s.mu, s.assignments, 'unnormalized') ; vl_assert_equal(phi, phi_) ; function test_norm (s) phi_ = simple_vlad(s.x, s.mu, s.assignments) ; phi_ = phi_ / norm(phi_) ; phi = vl_vlad(s.x, s.mu, s.assignments) ; vl_assert_almost_equal(phi, phi_, 1e-4) ; function test_sqrt (s) phi_ = simple_vlad(s.x, s.mu, s.assignments) ; phi_ = sign(phi_) .* sqrt(abs(phi_)) ; phi_ = phi_ / norm(phi_) ; phi = vl_vlad(s.x, s.mu, s.assignments, 'squareroot') ; vl_assert_almost_equal(phi, phi_, 1e-4) ; function test_individual (s) phi_ = simple_vlad(s.x, s.mu, s.assignments) ; phi_ = reshape(phi_, size(s.x,1), []) ; phi_ = bsxfun(@times, phi_, 1 ./ sqrt(sum(phi_.^2))) ; phi_ = phi_(:) ; phi = vl_vlad(s.x, s.mu, s.assignments, 'unnormalized', 'normalizecomponents') ; vl_assert_almost_equal(phi, phi_, 1e-4) ; function test_mass (s) phi_ = simple_vlad(s.x, s.mu, s.assignments) ; phi_ = reshape(phi_, size(s.x,1), []) ; phi_ = bsxfun(@times, phi_, 1 ./ sum(s.assignments,2)') ; phi_ = phi_(:) ; phi = vl_vlad(s.x, s.mu, s.assignments, 'unnormalized', 'normalizemass') ; vl_assert_almost_equal(phi, phi_, 1e-4) ; function enc = simple_vlad(x, mu, assign) for i = 1:size(assign,1) enc{i} = x * assign(i,:)' - sum(assign(i,:)) * mu(:,i) ; end enc = cat(1, enc{:}) ; vlfeat/toolbox/xtest/vl_test_kmeans.m0000644000175000017500000000706012237004745017005 0ustar dimadimafunction results = vl_test_kmeans(varargin) % VL_TEST_KMEANS % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vl_test_init ; function s = setup() randn('state',0) ; s.X = randn(128, 100) ; function test_basic(s) [centers, assignments, en] = vl_kmeans(s.X, 10, 'NumRepetitions', 10) ; [centers_, assignments_, en_] = simpleKMeans(s.X, 10) ; assert(en_ <= 1.1 * en, 'vl_kmeans did not optimize enough') ; function test_algorithms(s) distances = {'l1', 'l2'} ; dataTypes = {'single','double'} ; for dataType = dataTypes for distance = distances distance = char(distance) ; conversion = str2func(char(dataType)) ; X = conversion(s.X) ; vl_twister('state',0) ; [centers, assignments, en] = vl_kmeans(X, 10, ... 'NumRepetitions', 1, ... 'MaxNumIterations', 10, ... 'Algorithm', 'Lloyd', ... 'Distance', distance) ; vl_twister('state',0) ; [centers_, assignments_, en_] = vl_kmeans(X, 10, ... 'NumRepetitions', 1, ... 'MaxNumIterations', 10, ... 'Algorithm', 'Elkan', ... 'Distance', distance) ; vl_twister('state',0) ; [centers__, assignments__, en__] = vl_kmeans(X, 10, ... 'NumRepetitions', 1, ... 'MaxNumIterations', 10, ... 'Algorithm', 'ANN', ... 'Distance', distance, ... 'NumTrees', 3, ... 'MaxNumComparisons',0) ; vl_assert_almost_equal(centers, centers_, 1e-5) ; vl_assert_almost_equal(assignments, assignments_, 1e-5) ; vl_assert_almost_equal(en, en_, 1e-5) ; vl_assert_almost_equal(centers, centers__, 1e-5) ; vl_assert_almost_equal(assignments, assignments__, 1e-5) ; vl_assert_almost_equal(en, en__, 1e-5) ; vl_assert_almost_equal(centers_, centers__, 1e-5) ; vl_assert_almost_equal(assignments_, assignments__, 1e-5) ; vl_assert_almost_equal(en_, en__, 1e-5) ; end end function test_patterns(s) distances = {'l1', 'l2'} ; dataTypes = {'single','double'} ; for dataType = dataTypes for distance = distances distance = char(distance) ; conversion = str2func(char(dataType)) ; data = [1 1 0 0 ; 1 0 1 0] ; data = conversion(data) ; [centers, assignments, en] = vl_kmeans(data, 4, ... 'NumRepetitions', 100, ... 'Distance', distance) ; assert(isempty(setdiff(data', centers', 'rows'))) ; end end function [centers, assignments, en] = simpleKMeans(X, numCenters) [dimension, numData] = size(X) ; centers = randn(dimension, numCenters) ; for iter = 1:10 [dists, assignments] = min(vl_alldist(centers, X)) ; en = sum(dists) ; centers = [zeros(dimension, numCenters) ; ones(1, numCenters)] ; centers = vl_binsum(centers, ... [X ; ones(1,numData)], ... repmat(assignments, dimension+1, 1), 2) ; centers = centers(1:end-1, :) ./ repmat(centers(end,:), dimension, 1) ; end vlfeat/toolbox/xtest/vl_test_homkermap.m0000644000175000017500000000355712237004736017521 0ustar dimadimafunction results = vl_test_homkermap(varargin) % VL_TEST_HOMKERMAP vl_test_init ; function check_ker(ker, n, window, period) args = {n, ker, 'window', window} ; if nargin > 3 args = {args{:}, 'period', period} ; end x = [-1 -.5 0 .5 1] ; y = linspace(0,2,100) ; for conv = {@single, @double} x = feval(conv{1}, x) ; y = feval(conv{1}, y) ; sx = sign(x) ; sy = sign(y) ; psix = vl_homkermap(x, args{:}) ; psiy = vl_homkermap(y, args{:}) ; k = vl_alldist(psix,psiy,'kl2') ; k_ = (sx'*sy) .* vl_alldist(sx.*x,sy.*y,ker) ; vl_assert_almost_equal(k, k_, 2e-2) ; end function test_uniform_kchi2(), check_ker('kchi2', 3, 'uniform', 15) ; function test_uniform_kjs(), check_ker('kjs', 3, 'uniform', 15) ; function test_uniform_kl1(), check_ker('kl1', 29, 'uniform', 15) ; function test_rect_kchi2(), check_ker('kchi2', 3, 'rectangular', 15) ; function test_rect_kjs(), check_ker('kjs', 3, 'rectangular', 15) ; function test_rect_kl1(), check_ker('kl1', 29, 'rectangular', 10) ; function test_auto_uniform_kchi2(),check_ker('kchi2', 3, 'uniform') ; function test_auto_uniform_kjs(), check_ker('kjs', 3, 'uniform') ; function test_auto_uniform_kl1(), check_ker('kl1', 25, 'uniform') ; function test_auto_rect_kchi2(), check_ker('kchi2', 3, 'rectangular') ; function test_auto_rect_kjs(), check_ker('kjs', 3, 'rectangular') ; function test_auto_rect_kl1(), check_ker('kl1', 25, 'rectangular') ; function test_gamma() x = linspace(0,1,20) ; for gamma = linspace(.2,2,10) k = vl_alldist(x, 'kchi2') .* (x'*x + 1e-12).^((gamma-1)/2) ; psix = vl_homkermap(x, 3, 'kchi2', 'gamma', gamma) ; assert(norm(k - psix'*psix) < 1e-2) ; end function test_negative() x = linspace(-1,1,20) ; k = vl_alldist(abs(x), 'kchi2') .* (sign(x)'*sign(x)) ; psix = vl_homkermap(x, 3, 'kchi2') ; assert(norm(k - psix'*psix) < 1e-2) ; vlfeat/toolbox/xtest/vl_test_ihashsum.m0000644000175000017500000000110512237004736017342 0ustar dimadimafunction results = vl_test_ihashsum(varargin) % VL_TEST_IHASHSUM vl_test_init ; function s = setup() rand('state',0) ; s.data = uint8(round(16*rand(2,100))) ; sel = find(all(s.data==0)) ; s.data(1,sel)=1 ; function test_hash(s) D = size(s.data,1) ; K = 5 ; h = zeros(1,K,'uint32') ; id = zeros(D,K,'uint8'); next = zeros(1,K,'uint32') ; [h,id,next] = vl_ihashsum(h,id,next,K,s.data) ; sel = vl_ihashfind(id,next,K,s.data) ; count = double(h(sel)) ; [drop,i,j] = unique(s.data','rows') ; for k=1:size(s.data,2) count_(k) = sum(j == j(k)) ; end vl_assert_equal(count,count_) ; vlfeat/toolbox/xtest/vl_test_twister.m0000644000175000017500000000234312237004745017227 0ustar dimadimafunction results = vl_test_twister(varargin) % VL_TEST_TWISTER vl_test_init ; function test_illegal_args() vl_assert_exception(@() vl_twister(-1), 'vl:invalidArgument') ; vl_assert_exception(@() vl_twister(1, -1), 'vl:invalidArgument') ; vl_assert_exception(@() vl_twister([1, -1]), 'vl:invalidArgument') ; function test_seed_by_scalar() rand('twister',1) ; a = rand ; vl_twister('state',1) ; b = vl_twister ; vl_assert_equal(a,b,'seed by scalar + VL_TWISTER()') ; function test_get_set_state() rand('twister',1) ; a = rand('twister') ; vl_twister('state',1) ; b = vl_twister('state') ; vl_assert_equal(a,b,'read state') ; a(1) = a(1) + 1 ; vl_twister('state',a) ; b = vl_twister('state') ; vl_assert_equal(a,b,'set state') ; function test_multi_dimensions() b = rand('twister') ; rand('twister',b) ; vl_twister('state',b) ; a=rand([1 2 3 4 5]) ; b=vl_twister([1 2 3 4 5]) ; vl_assert_equal(a,b,'VL_TWISTER([M N P ...])') ; function test_multi_multi_args() rand('twister',1) ; a=rand(1, 2, 3, 4, 5) ; vl_twister('state',1) ; b=vl_twister(1, 2, 3, 4, 5) ; vl_assert_equal(a,b,'VL_TWISTER(M, N, P, ...)') ; function test_square() rand('twister',1) ; a=rand(10) ; vl_twister('state',1) ; b=vl_twister(10) ; vl_assert_equal(a,b,'VL_TWISTER(N)') ; vlfeat/toolbox/xtest/vl_test_phow.m0000644000175000017500000000104512237004736016501 0ustar dimadimafunction results = vl_test_phow(varargin) % VL_TEST_PHOPW vl_test_init ; function s = setup() s.I = im2double(imread(fullfile(vl_root,'data','spots.jpg'))) ; s.I = single(s.I) ; function test_gray(s) [f,d] = vl_phow(s.I, 'color', 'gray') ; assert(size(d,1) == 128) ; function test_rgb(s) [f,d] = vl_phow(s.I, 'color', 'rgb') ; assert(size(d,1) == 128*3) ; function test_hsv(s) [f,d] = vl_phow(s.I, 'color', 'hsv') ; assert(size(d,1) == 128*3) ; function test_opponent(s) [f,d] = vl_phow(s.I, 'color', 'opponent') ; assert(size(d,1) == 128*3) ; vlfeat/toolbox/xtest/vl_test_init.m0000644000175000017500000000532412237004745016473 0ustar dimadima% VL_TEST_INIT Intialize unit test file % This is a VLFeat internal function used to initialize an .m file % containing a unit test. % % See also: VL_TEST(), VL_HELP(). % Author:: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % Copyright (C) 2013 Andrea Vedaldi. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). % Obtain the path to the m-file that called VL_TEST_INIT() stack = dbstack(1) ; mfilePath = stack(1).file ; mfileName = stack(1).name ; fid = fopen(mfilePath, 'r') ; % Parse the source code of the caller to get the names of its % subfunctions. One could use which('-subfun', stack(1).name) here, % but this feature is undocumented. setupFunc = [] ; teardownFunc = [] ; tests = {} ; l = 0 ; t = 0 ; while 1 tline = fgetl(fid) ; l = l + 1 ; if ~ischar(tline), break ; end mo = regexp(tline, '^\s*function\s+(\w\s*=\s*)?test_(?[\w_]+)\s*\(.*\).*$', ... 'names') ; if length(mo) > 0 t = t + 1 ; tests{t}.name = mo(1).name ; tests{t}.func = str2func(['test_' mo(1).name]) ; tests{t}.lineNumber = l ; end mo = regexp(tline, '^\s*function\s+(\w+\s*=\s*)?(?setup|teardown)\s*\(.*\).*$', ... 'names') ; if length(mo) > 0 switch mo(1).name case 'setup' if isempty(setupFunc) setupFunc = @setup ; else warning('%s:%d: ignoring redundant definition of the setup function', ... mfilePath) ; end case 'teardown' if isempty(teardownFunc) teardownFunc = @teardown ; else warning('%s:%d: ignoring redundant definition of the setup function', ... mfilePath) ; end otherwise assert(0) ; end end end if ~isempty(setupFunc), state = setupFunc() ; end if length(varargin) > 0 testFunc = str2func(sprintf('test_%s', varargin{1})) ; if exist('state','var') testFunc(state) ; else testFunc() ; end if ~isempty(teardownFunc), teardownFunc(state) ; end return ; end % Run all tests collecting the results. if length(tests) == 0 error('No tests found in ''%s''', mfileName) ; end for t = 1:length(tests) subTestName = sprintf('test_%s', tests{t}.name) ; results{t}.testName = sprintf('%s:%s', mfileName(9:end), tests{t}.name) ; results{t}.succeded = true ; results{t}.exception = [] ; try if exist('state', 'var') tests{t}.func(state) ; else tests{t}.func() ; end catch exception results{t}.succeded = false ; results{t}.exception = exception ; end end if ~isempty(teardownFunc), teardownFunc(state) ; end results = cat(2, results{:}) ; vlfeat/toolbox/xtest/vl_test_gmm.m0000644000175000017500000000246412237004745016312 0ustar dimadimafunction results = vl_test_gmm(varargin) % VL_TEST_GMM % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vl_test_init ; end function s = setup() randn('state',0) ; s.X = randn(128, 1000) ; end function test_multithreading(s) dataTypes = {'single','double'} ; for dataType = dataTypes conversion = str2func(char(dataType)) ; X = conversion(s.X) ; vl_twister('state',0) ; vl_threads(0) ; [means, covariances, priors, ll, posteriors] = ... vl_gmm(X, 10, ... 'NumRepetitions', 1, ... 'MaxNumIterations', 10, ... 'Initialization', 'rand') ; vl_twister('state',0) ; vl_threads(1) ; [means_, covariances_, priors_, ll_, posteriors_] = ... vl_gmm(X, 10, ... 'NumRepetitions', 1, ... 'MaxNumIterations', 10, ... 'Initialization', 'rand') ; vl_assert_almost_equal(means, means_, 1e-2) ; vl_assert_almost_equal(covariances, covariances_, 1e-2) ; vl_assert_almost_equal(priors, priors_, 1e-2) ; vl_assert_almost_equal(ll, ll_, 1e-2 * abs(ll)) ; vl_assert_almost_equal(posteriors, posteriors_, 1e-2) ; end end vlfeat/toolbox/xtest/vl_test_inthist.m0000644000175000017500000000145312237004736017211 0ustar dimadimafunction results = vl_test_inthist(varargin) % VL_TEST_INTHIST vl_test_init ; function s = setup() rand('state',0) ; s.labels = uint32(8*rand(123, 76, 3)) ; function test_basic(s) l = 10 ; hist = vl_inthist(s.labels, 'numlabels', l) ; hist_ = inthist_slow(s.labels, l) ; vl_assert_equal(double(hist),hist_) ; function test_sample(s) rand('state',0) ; boxes = 10 * rand(4,20) + .5 ; boxes(3:4,:) = boxes(3:4,:) + boxes(1:2,:) ; boxes = min(boxes, 10) ; boxes = uint32(boxes) ; inthist = vl_inthist(s.labels) ; hist = vl_sampleinthist(inthist, boxes) ; function hist = inthist_slow(labels, numLabels) m = size(labels,1) ; n = size(labels,2) ; l = numLabels ; b = zeros(m*n,l) ; b = vl_binsum(b, 1, reshape(labels,m*n,[]), 2) ; b = reshape(b,m,n,l) ; for k=1:l hist(:,:,k) = cumsum(cumsum(b(:,:,k)')') ; end vlfeat/toolbox/xtest/vl_test_cummax.m0000644000175000017500000000137212237004736017021 0ustar dimadimafunction results = vl_test_cummax(varargin) % VL_TEST_CUMMAX vl_test_init ; function test_basic() vl_assert_almost_equal(... vl_cummax(1), 1) ; vl_assert_almost_equal(... vl_cummax([1 2 3 4], 2), [1 2 3 4]) ; function test_multidim() a = [1 2 3 4 3 2 1] ; b = [1 2 3 4 4 4 4] ; for k=1:6 dims = ones(1,6) ; dims(k) = numel(a) ; a = reshape(a, dims) ; b = reshape(b, dims) ; vl_assert_almost_equal(... vl_cummax(a, k), b) ; end function test_storage_classes() types = {@double, @single, @int64, @uint64, ... @int32, @uint32, @int16, @uint16, ... @int8, @uint8} ; for a = types a = a{1} ; for b = types b = b{1} ; vl_assert_almost_equal(... vl_cummax(a(eye(3))), a(toeplitz([1 1 1], [1 0 0 ]))) ; end end vlfeat/toolbox/xtest/vl_test_whistc.m0000644000175000017500000000255012237004736017027 0ustar dimadimafunction results = vl_test_whistc(varargin) % VL_TEST_WHISTC vl_test_init ; function test_acc() x = ones(1, 10) ; e = 1 ; o = 1:10 ; vl_assert_equal(vl_whistc(x, o, e), 55) ; function test_basic() x = 1:10 ; e = 1:10 ; o = ones(1, 10) ; vl_assert_equal(histc(x, e), vl_whistc(x, o, e)) ; x = linspace(-1,11,100) ; o = ones(size(x)) ; vl_assert_equal(histc(x, e), vl_whistc(x, o, e)) ; function test_multidim() x = rand(10, 20, 30) ; e = linspace(0,1,10) ; o = ones(size(x)) ; vl_assert_equal(histc(x, e), vl_whistc(x, o, e)) ; vl_assert_equal(histc(x, e, 1), vl_whistc(x, o, e, 1)) ; vl_assert_equal(histc(x, e, 2), vl_whistc(x, o, e, 2)) ; vl_assert_equal(histc(x, e, 3), vl_whistc(x, o, e, 3)) ; function test_nan() x = rand(10, 20, 30) ; e = linspace(0,1,10) ; o = ones(size(x)) ; x(1:7:end) = NaN ; vl_assert_equal(histc(x, e), vl_whistc(x, o, e)) ; vl_assert_equal(histc(x, e, 1), vl_whistc(x, o, e, 1)) ; vl_assert_equal(histc(x, e, 2), vl_whistc(x, o, e, 2)) ; vl_assert_equal(histc(x, e, 3), vl_whistc(x, o, e, 3)) ; function test_no_edges() x = rand(10, 20, 30) ; o = ones(size(x)) ; vl_assert_equal(histc(1, []), vl_whistc(1, 1, [])) ; vl_assert_equal(histc(x, []), vl_whistc(x, o, [])) ; vl_assert_equal(histc(x, [], 1), vl_whistc(x, o, [], 1)) ; vl_assert_equal(histc(x, [], 2), vl_whistc(x, o, [], 2)) ; vl_assert_equal(histc(x, [], 3), vl_whistc(x, o, [], 3)) ; vlfeat/toolbox/xtest/vl_test_binsum.m0000644000175000017500000000242512237004736017024 0ustar dimadimafunction results = vl_test_binsum(varargin) % VL_TEST_BINSUM vl_test_init ; function test_three_args() vl_assert_almost_equal(... vl_binsum([0 0], 1, 2), [0 1]) ; vl_assert_almost_equal(... vl_binsum([1 7], -1, 1), [0 7]) ; vl_assert_almost_equal(... vl_binsum([1 7], -1, [1 2 2 2 2 2 2 2]), [0 0]) ; function test_four_args() vl_assert_almost_equal(... vl_binsum(eye(3), [1 1 1], [1 2 3], 1), 2*eye(3)) ; vl_assert_almost_equal(... vl_binsum(eye(3), [1 1 1]', [1 2 3]', 2), 2*eye(3)) ; vl_assert_almost_equal(... vl_binsum(eye(3), 1, [1 2 3], 1), 2*eye(3)) ; vl_assert_almost_equal(... vl_binsum(eye(3), 1, [1 2 3]', 2), 2*eye(3)) ; function test_3d_one() Z = zeros(3,3,3) ; B = 3*ones(3,1,3) ; R = Z ; R(:,3,:) = 17 ; vl_assert_almost_equal(... vl_binsum(Z, 17, B, 2), R) ; function test_3d_two() Z = zeros(3,3,3) ; B = 3*ones(3,3,1) ; X = zeros(3,3,1) ; X(:,:,1) = 17 ; R = Z ; R(:,:,3) = 17 ; vl_assert_almost_equal(... vl_binsum(Z, X, B, 3), R) ; function test_storage_classes() types = {@double, @single, @int64, @uint64, ... @int32, @uint32, @int16, @uint16, ... @int8, @uint8} ; for a = types a = a{1} ; for b = types b = b{1} ; vl_assert_almost_equal(... vl_binsum(a(eye(3)), a([1 1 1]), b([1 2 3]), 1), a(2*eye(3))) ; end end vlfeat/toolbox/xtest/vl_test_printsize.m0000644000175000017500000000264712237004745017564 0ustar dimadimafunction results = vl_test_printsize(varargin) % VL_TEST_PRINTSIZE vl_test_init ; function s = setup() s.fig = figure(1) ; s.usletter = [8.5, 11] ; % inches s.a4 = [8.26772, 11.6929] ; clf(s.fig) ; plot(1:10) ; function teardown(s) close(s.fig) ; function test_basic(s) for sigma = [1 0.5 0.2] vl_printsize(s.fig, sigma) ; set(1, 'PaperUnits', 'inches') ; siz = get(1, 'PaperSize') ; pos = get(1, 'PaperPosition') ; vl_assert_almost_equal(siz(1), sigma*s.usletter(1), 1e-4) ; vl_assert_almost_equal(pos(1), 0, 1e-4) ; vl_assert_almost_equal(pos(3), sigma*s.usletter(1), 1e-4) ; end function test_papertype(s) vl_printsize(s.fig, 1, 'papertype', 'a4') ; set(1, 'PaperUnits', 'inches') ; siz = get(1, 'PaperSize') ; pos = get(1, 'PaperPosition') ; vl_assert_almost_equal(siz(1), s.a4(1), 1e-4) ; function test_margin(s) m = 0.5 ; vl_printsize(s.fig, 1, 'margin', m) ; set(1, 'PaperUnits', 'inches') ; siz = get(1, 'PaperSize') ; pos = get(1, 'PaperPosition') ; vl_assert_almost_equal(siz(1), s.usletter(1) * (1 + 2*m), 1e-4) ; vl_assert_almost_equal(pos(1), s.usletter(1) * m, 1e-4) ; function test_reference(s) sigma = 1 ; vl_printsize(s.fig, 1, 'reference', 'vertical') ; set(1, 'PaperUnits', 'inches') ; siz = get(1, 'PaperSize') ; pos = get(1, 'PaperPosition') ; vl_assert_almost_equal(siz(2), sigma*s.usletter(2), 1e-4) ; vl_assert_almost_equal(pos(2), 0, 1e-4) ; vl_assert_almost_equal(pos(4), sigma*s.usletter(2), 1e-4) ; vlfeat/toolbox/xtest/vl_test_plotbox.m0000644000175000017500000000063612237004745017220 0ustar dimadimafunction results = vl_test_plotbox(varargin) % VL_TEST_PLOTBOX vl_test_init ; function test_basic(s) figure(1) ; clf ; vl_plotbox([-1 -1 1 1]') ; xlim([-2 2]) ; ylim([-2 2]) ; close(1) ; function test_multiple(s) figure(1) ; clf ; randn('state', 0) ; vl_plotbox(randn(4,10)) ; close(1) ; function test_style(s) figure(1) ; clf ; randn('state', 0) ; vl_plotbox(randn(4,10), 'r-.', 'LineWidth', 3) ; close(1) ; vlfeat/toolbox/xtest/vl_test_lbp.m0000644000175000017500000000204012237004736016275 0ustar dimadimafunction results = vl_test_lbp(varargin) % VL_TEST_TWISTER vl_test_init ; function test_one_on() I = {} ; I{1} = [0 0 0 ; 0 0 1 ; 0 0 0] ; I{2} = [0 0 0 ; 0 0 0 ; 0 0 1] ; I{3} = [0 0 0 ; 0 0 0 ; 0 1 0] ; I{4} = [0 0 0 ; 0 0 0 ; 1 0 0] ; I{5} = [0 0 0 ; 1 0 0 ; 0 0 0] ; I{6} = [1 0 0 ; 0 0 0 ; 0 0 0] ; I{7} = [0 1 0 ; 0 0 0 ; 0 0 0] ; I{8} = [0 0 1 ; 0 0 0 ; 0 0 0] ; for j=0:7 h = vl_lbp(single(I{j+1}), 3) ; h = find(squeeze(h)) ; vl_assert_equal(h, j * 7 + 1) ; end function test_two_on() I = {} ; I{1} = [0 0 0 ; 0 0 1 ; 0 0 1] ; I{2} = [0 0 0 ; 0 0 0 ; 0 1 1] ; I{3} = [0 0 0 ; 0 0 0 ; 1 1 0] ; I{4} = [0 0 0 ; 1 0 0 ; 1 0 0] ; I{5} = [1 0 0 ; 1 0 0 ; 0 0 0] ; I{6} = [1 1 0 ; 0 0 0 ; 0 0 0] ; I{7} = [0 1 1 ; 0 0 0 ; 0 0 0] ; I{8} = [0 0 1 ; 0 0 1 ; 0 0 0] ; for j=0:7 h = vl_lbp(single(I{j+1}), 3) ; h = find(squeeze(h)) ; vl_assert_equal(h, j * 7 + 2) ; end function test_fliplr() randn('state',0) ; I = randn(256,256,1,'single') ; f = vl_lbp(fliplr(I), 8) ; f_ = vl_lbpfliplr(vl_lbp(I, 8)) ; vl_assert_almost_equal(f,f_,1e-3) ; vlfeat/toolbox/xtest/vl_test_hikmeans.m0000644000175000017500000000071712237004736017330 0ustar dimadimafunction results = vl_test_hikmeans(varargin) % VL_TEST_IKMEANS vl_test_init ; function s = setup() rand('state',0) ; s.data = uint8(rand(2,1000) * 255) ; function test_basic(s) [tree, assign] = vl_hikmeans(s.data,3,100) ; assign_ = vl_hikmeanspush(tree, s.data) ; vl_assert_equal(assign,assign_) ; function test_elkan(s) [tree, assign] = vl_hikmeans(s.data,3,100,'method','elkan') ; assign_ = vl_hikmeanspush(tree, s.data) ; vl_assert_equal(assign,assign_) ; vlfeat/toolbox/xtest/vl_test_imarray.m0000644000175000017500000000143312237004736017171 0ustar dimadimafunction results = vl_test_imarray(varargin) % VL_TEST_IMARRAY vl_test_init ; function test_movie_rgb(s) A = rand(23,15,3,4) ; B = vl_imarray(A,'movie',true) ; function test_movie_indexed(s) cmap = get(0,'DefaultFigureColormap') ; A = uint8(size(cmap,1)*rand(23,15,4)) ; A = min(A,size(cmap,1)-1) ; B = vl_imarray(A,'movie',true) ; function test_movie_gray_indexed(s) A = uint8(255*rand(23,15,4)) ; B = vl_imarray(A,'movie',true,'cmap',gray(256)) ; for k=1:size(A,3) vl_assert_equal(squeeze(A(:,:,k)), ... frame2im(B(k))) ; end function test_basic(s) M = 3 ; N = 4 ; width = 32 ; height = 15 ; for i=1:M for j=1:N A{i,j} = rand(width,height) ; end end A1 = A'; A1 = cat(3,A1{:}) ; A2 = cell2mat(A) ; B = vl_imarray(A1, 'layout', [M N]) ; vl_assert_equal(A2,B) ; vlfeat/toolbox/xtest/vl_assert_equal.m0000644000175000017500000000013712237004736017156 0ustar dimadimafunction vl_assert_equal(x, y, varargin) assert(isequalwithequalnans(x,y),varargin{:}) ; end vlfeat/toolbox/xtest/vl_test_roc.m0000644000175000017500000000177312237004736016317 0ustar dimadimafunction results = vl_test_roc(varargin) % VL_TEST_ROC vl_test_init ; function s = setup() s.scores0 = [5 4 3 2 1] ; s.scores1 = [5 3 4 2 1] ; s.labels = [1 1 -1 -1 -1] ; function test_perfect_tptn(s) [tpr,tnr] = vl_roc(s.labels,s.scores0) ; vl_assert_almost_equal(tpr, [0 1 2 2 2 2] / 2) ; vl_assert_almost_equal(tnr, [3 3 3 2 1 0] / 3) ; function test_perfect_metrics(s) [tpr,tnr,info] = vl_roc(s.labels,s.scores0) ; vl_assert_almost_equal(info.eer, 0) ; vl_assert_almost_equal(info.auc, 1) ; function test_swap1_tptn(s) [tpr,tnr] = vl_roc(s.labels,s.scores1) ; vl_assert_almost_equal(tpr, [0 1 1 2 2 2] / 2) ; vl_assert_almost_equal(tnr, [3 3 2 2 1 0] / 3) ; function test_swap1_tptn_stable(s) [tpr,tnr] = vl_roc(s.labels,s.scores1,'stable',true) ; vl_assert_almost_equal(tpr, [1 2 1 2 2] / 2) ; vl_assert_almost_equal(tnr, [3 2 2 1 0] / 3) ; function test_swap1_metrics(s) [tpr,tnr,info] = vl_roc(s.labels,s.scores1) ; vl_assert_almost_equal(info.eer, 1/3) ; vl_assert_almost_equal(info.auc, 1 - 1/(2*3)) ; vlfeat/toolbox/xtest/vl_test_ikmeans.m0000644000175000017500000000072212237004736017154 0ustar dimadimafunction results = vl_test_ikmeans(varargin) % VL_TEST_IKMEANS vl_test_init ; function s = setup() rand('state',0) ; s.data = uint8(rand(2,1000) * 255) ; function test_basic(s) [centers, assign] = vl_ikmeans(s.data,100) ; assign_ = vl_ikmeanspush(s.data, centers) ; vl_assert_equal(assign,assign_) ; function test_elkan(s) [centers, assign] = vl_ikmeans(s.data,100,'method','elkan') ; assign_ = vl_ikmeanspush(s.data, centers) ; vl_assert_equal(assign,assign_) ; vlfeat/toolbox/xtest/vl_test_imdisttf.m0000644000175000017500000000353512237004736017355 0ustar dimadimafunction results = vl_test_imdisttf(varargin) % VL_TEST_DISTTF vl_test_init ; function test_basic() for conv = {@single, @double} conv = conv{1} ; I = conv([0 0 0 ; 0 -2 0 ; 0 0 0]) ; D = vl_imdisttf(I); assert(isequal(D, conv(- [0 1 0 ; 1 2 1 ; 0 1 0]))) ; I(2,2) = -3 ; [D,map] = vl_imdisttf(I) ; assert(isequal(D, conv(-1 - [0 1 0 ; 1 2 1 ; 0 1 0]))) ; assert(isequal(map, 5 * ones(3))) ; end function test_1x1() assert(isequal(1, vl_imdisttf(1))) ; function test_rand() I = rand(13,31) ; for t=1:4 param = [rand randn rand randn] ; [D0,map0] = imdisttf_equiv(I,param) ; [D,map] = vl_imdisttf(I,param) ; vl_assert_almost_equal(D,D0,1e-10) assert(isequal(map,map0)) ; end function test_param() I = zeros(3,4) ; I(1,1) = -1 ; [D,map] = vl_imdisttf(I,[1 0 1 0]); assert(isequal(-[1 0 0 0 ; 0 0 0 0 ; 0 0 0 0 ;], D)) ; D0 = -[1 .9 .6 .1 ; 0 0 0 0 ; 0 0 0 0 ;] ; [D,map] = vl_imdisttf(I,[.1 0 1 0]); vl_assert_almost_equal(D,D0,1e-10); D0 = -[1 .9 .6 .1 ; .9 .8 .5 0 ; .6 .5 .2 0 ;] ; [D,map] = vl_imdisttf(I,[.1 0 .1 0]); vl_assert_almost_equal(D,D0,1e-10); D0 = -[.9 1 .9 .6 ; .8 .9 .8 .5 ; .5 .6 .5 .2 ; ] ; [D,map] = vl_imdisttf(I,[.1 1 .1 0]); vl_assert_almost_equal(D,D0,1e-10); function test_special() I = rand(13,31) -.5 ; D = vl_imdisttf(I, [0 0 1e5 0]) ; vl_assert_almost_equal(D(:,1),min(I,[],2),1e-10); D = vl_imdisttf(I, [1e5 0 0 0]) ; vl_assert_almost_equal(D(1,:),min(I,[],1),1e-10); function [D,map]=imdisttf_equiv(I,param) D = inf + zeros(size(I)) ; map = zeros(size(I)) ; ur = 1:size(D,2) ; vr = 1:size(D,1) ; [u,v] = meshgrid(ur,vr) ; for v_=vr for u_=ur E = I(v_,u_) + ... param(1) * (u - u_ - param(2)).^2 + ... param(3) * (v - v_ - param(4)).^2 ; map(E < D) = sub2ind(size(I),v_,u_) ; D = min(D,E) ; end end vlfeat/toolbox/xtest/vl_assert_almost_equal.m0000644000175000017500000000123212237004745020532 0ustar dimadimafunction vl_assert_almost_equal(x, y, varargin) epsilon = 1e-6 ; if length(varargin) > 0 if isnumeric(varargin{1}) epsilon = varargin{1} ; varargin(1) = [] ; end end assert(isequal(class(x), class(y)), varargin{:}) ; assert(isequal(size(x), size(y)), varargin{:}) ; if isstruct(x) fx = fieldnames(x) ; fy = fieldnames(y) ; assert(isequal(fx,fy), varargin{:}) ; for i=1:numel(fx) vl_assert_almost_equal(x.(fx{i}), y.(fy{i}), epsilon, varargin{:}) ; end else i = isnan(x) ; j = isnan(y) ; assert(isequal(i,j), varargin{:}) ; assert(max(abs(x(~i) - y(~i))) < epsilon, varargin{:}) ; end end vlfeat/toolbox/xtest/vl_test_pr.m0000644000175000017500000000726312237004745016155 0ustar dimadimafunction results = vl_test_pr(varargin) % VL_TEST_PR vl_test_init ; function s = setup() s.scores0 = [5 4 3 2 1] ; s.scores1 = [5 3 4 2 1] ; s.labels = [1 1 -1 -1 -1] ; function test_perfect_tptn(s) [rc,pr] = vl_pr(s.labels,s.scores0) ; vl_assert_almost_equal(pr, [1 1/1 2/2 2/3 2/4 2/5]) ; vl_assert_almost_equal(rc, [0 1 2 2 2 2] / 2) ; function test_perfect_metrics(s) [rc,pr,info] = vl_pr(s.labels,s.scores0) ; vl_assert_almost_equal(info.auc, 1) ; vl_assert_almost_equal(info.ap, 1) ; vl_assert_almost_equal(info.ap_interp_11, 1) ; function test_swap1_tptn(s) [rc,pr] = vl_pr(s.labels,s.scores1) ; vl_assert_almost_equal(pr, [1 1/1 1/2 2/3 2/4 2/5]) ; vl_assert_almost_equal(rc, [0 1 1 2 2 2] / 2) ; function test_swap1_tptn_stable(s) [rc,pr] = vl_pr(s.labels,s.scores1,'stable',true) ; vl_assert_almost_equal(pr, [1/1 2/3 1/2 2/4 2/5]) ; vl_assert_almost_equal(rc, [1 2 1 2 2] / 2) ; function test_swap1_metrics(s) [rc,pr,info] = vl_pr(s.labels,s.scores1) ; clf; vl_pr(s.labels,s.scores1) ; vl_assert_almost_equal(info.auc, [.5 + .5 * (.5 + 2/3)/2]) ; vl_assert_almost_equal(info.ap, [1/1 + 2/3]/2) ; vl_assert_almost_equal(info.ap_interp_11, mean([1 1 1 1 1 1 2/3 2/3 2/3 2/3 2/3])) ; function test_inf(s) scores = [1 -inf -1 -1 -1 -1] ; labels = [1 1 -1 -1 -1 -1] ; [rc1,pr1,info1] = vl_pr(labels, scores, 'includeInf', true) ; [rc2,pr2,info2] = vl_pr(labels, scores, 'includeInf', false) ; vl_assert_equal(numel(rc1), numel(rc2) + 1) ; vl_assert_almost_equal(info1.auc, [1 * .5 + (1/5 + 2/6)/2 * .5]) ; vl_assert_almost_equal(info1.ap, [1 * .5 + 2/6 * .5]) ; vl_assert_almost_equal(info1.ap_interp_11, [1 * 6/11 + 2/6 * 5/11]) ; vl_assert_almost_equal(info2.auc, 0.5) ; vl_assert_almost_equal(info2.ap, 0.5) ; vl_assert_almost_equal(info2.ap_interp_11, 1 * 6 / 11) ; function test_inf_stable(s) scores = [-1 -1 -1 -1 -inf +1] ; labels = [-1 -1 -1 -1 +1 +1] ; [rc1,pr1,info1] = vl_pr(labels, scores, 'includeInf', true, 'stable', true) ; [rc2,pr2,info2] = vl_pr(labels, scores, 'includeInf', false, 'stable', true) ; [rc1_,pr1_,info1_] = vl_pr(labels, scores, 'includeInf', true, 'stable', false) ; [rc2_,pr2_,info2_] = vl_pr(labels, scores, 'includeInf', false, 'stable', false) ; % stability does not change scores vl_assert_almost_equal(info1,info1_) ; vl_assert_almost_equal(info2,info2_) ; % unstable with inf (first point (0,1) is conventional) vl_assert_almost_equal(rc1_, [0 .5 .5 .5 .5 .5 1]) vl_assert_almost_equal(pr1_, [1 1 1/2 1/3 1/4 1/5 2/6]) % unstable without inf vl_assert_almost_equal(rc2_, [0 .5 .5 .5 .5 .5]) vl_assert_almost_equal(pr2_, [1 1 1/2 1/3 1/4 1/5]) % stable with inf (no conventional point here) vl_assert_almost_equal(rc1, [.5 .5 .5 .5 1 .5]) ; vl_assert_almost_equal(pr1, [1/2 1/3 1/4 1/5 2/6 1]) ; % stable without inf (no conventional point and -inf are NaN) vl_assert_almost_equal(rc2, [.5 .5 .5 .5 NaN .5]) ; vl_assert_almost_equal(pr2, [1/2 1/3 1/4 1/5 NaN 1]) ; function test_normalised_pr(s) scores = [+1 +2] ; labels = [+1 -1] ; [rc1,pr1,info1] = vl_pr(labels,scores) ; [rc2,pr2,info2] = vl_pr(labels,scores,'normalizePrior',.5) ; vl_assert_almost_equal(pr1, pr2) ; vl_assert_almost_equal(rc1, rc2) ; scores_ = [+1 +2 +2 +2] ; labels_ = [+1 -1 -1 -1] ; [rc3,pr3,info3] = vl_pr(labels_,scores_) ; [rc4,pr4,info4] = vl_pr(labels,scores,'normalizePrior',1/4) ; vl_assert_almost_equal(info3, info4) ; function test_normalised_pr_corner_cases(s) scores = 1:10 ; labels = ones(1,10) ; [rc1,pr1,info1] = vl_pr(labels,scores) ; vl_assert_almost_equal(rc1, (0:10)/10) ; vl_assert_almost_equal(pr1, ones(1,11)) ; scores = 1:10 ; labels = zeros(1,10) ; [rc2,pr2,info2] = vl_pr(labels,scores) ; vl_assert_almost_equal(rc2, zeros(1,11)) ; vl_assert_almost_equal(pr2, ones(1,11)) ; vlfeat/toolbox/xtest/vl_test_alldist.m0000644000175000017500000000450512237004736017164 0ustar dimadimafunction results = vl_test_alldist(varargin) % VL_TEST_ALLDIST vl_test_init ; function s = setup() vl_twister('state', 0) ; s.X = 3.1 * vl_twister(10,10) ; s.Y = 4.7 * vl_twister(10,7) ; function test_null_args(s) vl_assert_equal(... vl_alldist(zeros(15,12), zeros(15,0), 'kl2'), ... zeros(12,0)) ; vl_assert_equal(... vl_alldist(zeros(15,0), zeros(15,0), 'kl2'), ... zeros(0,0)) ; vl_assert_equal(... vl_alldist(zeros(15,0), zeros(15,12), 'kl2'), ... zeros(0,12)) ; vl_assert_equal(... vl_alldist(zeros(0,15), zeros(0,12), 'kl2'), ... zeros(15,12)) ; function test_self(s) vl_assert_almost_equal(... vl_alldist(s.X, 'kl2'), ... makedist(@(x,y) x*y, s.X, s.X), ... 1e-6) ; function test_distances(s) dists = {'chi2', 'l2', 'l1', 'hell', 'js', ... 'kchi2', 'kl2', 'kl1', 'khell', 'kjs'} ; distsEquiv = { ... @(x,y) (x-y)^2 / (x + y), ... @(x,y) (x-y)^2, ... @(x,y) abs(x-y), ... @(x,y) (sqrt(x) - sqrt(y))^2, ... @(x,y) x - x .* log2(1 + y/x) + y - y .* log2(1 + x/y), ... @(x,y) 2 * (x*y) / (x + y), ... @(x,y) x*y, ... @(x,y) min(x,y), ... @(x,y) sqrt(x.*y), ... @(x,y) .5 * (x .* log2(1 + y/x) + y .* log2(1 + x/y))} ; types = {'single', 'double'} ; for simd = [0 1] for d = 1:length(dists) for t = 1:length(types) vl_simdctrl(simd) ; X = feval(str2func(types{t}), s.X) ; Y = feval(str2func(types{t}), s.Y) ; vl_assert_almost_equal(... vl_alldist(X,Y,dists{d}), ... makedist(distsEquiv{d},X,Y), ... 1e-4, ... 'alldist failed for dist=%s type=%s simd=%d', ... dists{d}, ... types{t}, ... simd) ; end end end function test_distance_kernel_pairs(s) dists = {'chi2', 'l2', 'l1', 'hell', 'js'} ; for d = 1:length(dists) dist = char(dists{d}) ; X = s.X ; Y = s.Y ; ker = ['k' dist] ; kxx = vl_alldist(X,X,ker) ; kyy = vl_alldist(Y,Y,ker) ; kxy = vl_alldist(X,Y,ker) ; kxx = repmat(diag(kxx), 1, size(s.Y,2)) ; kyy = repmat(diag(kyy), 1, size(s.X,1))' ; d2 = vl_alldist(X,Y,dist) ; vl_assert_almost_equal(d2, kxx + kyy - 2 * kxy, '1e-6') ; end function D = makedist(cmp,X,Y) [d,m] = size(X) ; [d,n] = size(Y) ; D = zeros(m,n) ; for i = 1:m for j = 1:n acc = 0 ; for k = 1:d acc = acc + cmp(X(k,i),Y(k,j)) ; end D(i,j) = acc ; end end conv = str2func(class(X)) ; D = conv(D) ; vlfeat/toolbox/xtest/vl_test_grad.m0000644000175000017500000000066212237004736016445 0ustar dimadimafunction results = vl_test_grad(varargin) % VL_TEST_GRAD vl_test_init ; function s = setup() s.I = rand(150,253) ; s.I_small = rand(2,2) ; function test_equiv(s) vl_assert_equal(gradient(s.I), vl_grad(s.I)) ; function test_equiv_small(s) vl_assert_equal(gradient(s.I_small), vl_grad(s.I_small)) ; function test_equiv_forward(s) Ix = diff(s.I,2,1) ; Iy = diff(s.I,2,1) ; vl_assert_equal(gradient(s.I_small), vl_grad(s.I_small)) ; vlfeat/toolbox/xtest/vl_test_imintegral.m0000644000175000017500000000262512237004736017664 0ustar dimadimafunction results = vl_test_imintegral(varargin) % VL_TEST_IMINTEGRAL vl_test_init ; function state = setup() state.I = ones(5,6) ; state.correct = [ 1 2 3 4 5 6 ; 2 4 6 8 10 12 ; 3 6 9 12 15 18 ; 4 8 12 16 20 24 ; 5 10 15 20 25 30 ; ] ; function test_matlab_equivalent(s) vl_assert_equal(slow_imintegral(s.I), s.correct) ; function test_basic(s) vl_assert_equal(vl_imintegral(s.I), s.correct) ; function test_multi_dimensional(s) vl_assert_equal(vl_imintegral(repmat(s.I, [1 1 3])), ... repmat(s.correct, [1 1 3])) ; function test_random(s) numTests = 50 ; for i = 1:numTests I = rand(5) ; vl_assert_almost_equal(vl_imintegral(s.I), ... slow_imintegral(s.I)) ; end function test_datatypes(s) vl_assert_equal(single(vl_imintegral(s.I)), single(s.correct)) ; vl_assert_equal(double(vl_imintegral(s.I)), double(s.correct)) ; vl_assert_equal(uint32(vl_imintegral(s.I)), uint32(s.correct)) ; vl_assert_equal(int32(vl_imintegral(s.I)), int32(s.correct)) ; vl_assert_equal(int32(vl_imintegral(-s.I)), -int32(s.correct)) ; function integral = slow_imintegral(I) integral = zeros(size(I)); for k = 1:size(I,3) for r = 1:size(I,1) for c = 1:size(I,2) integral(r,c,k) = sum(sum(I(1:r,1:c,k))); end end end vlfeat/toolbox/xtest/vl_test_alphanum.m0000644000175000017500000000313012237004736017326 0ustar dimadimafunction results = vl_test_alphanum(varargin) % VL_TEST_ALPHANUM vl_test_init ; function s = setup() s.strings = ... {'1000X Radonius Maximus','10X Radonius','200X Radonius','20X Radonius','20X Radonius Prime','30X Radonius','40X Radonius','Allegia 50 Clasteron','Allegia 500 Clasteron','Allegia 50B Clasteron','Allegia 51 Clasteron','Allegia 6R Clasteron','Alpha 100','Alpha 2','Alpha 200','Alpha 2A','Alpha 2A-8000','Alpha 2A-900','Callisto Morphamax','Callisto Morphamax 500','Callisto Morphamax 5000','Callisto Morphamax 600','Callisto Morphamax 6000 SE','Callisto Morphamax 6000 SE2','Callisto Morphamax 700','Callisto Morphamax 7000','Xiph Xlater 10000','Xiph Xlater 2000','Xiph Xlater 300','Xiph Xlater 40','Xiph Xlater 5','Xiph Xlater 50','Xiph Xlater 500','Xiph Xlater 5000','Xiph Xlater 58'} ; s.sortedStrings = ... {'10X Radonius','20X Radonius','20X Radonius Prime','30X Radonius','40X Radonius','200X Radonius','1000X Radonius Maximus','Allegia 6R Clasteron','Allegia 50 Clasteron','Allegia 50B Clasteron','Allegia 51 Clasteron','Allegia 500 Clasteron','Alpha 2','Alpha 2A','Alpha 2A-900','Alpha 2A-8000','Alpha 100','Alpha 200','Callisto Morphamax','Callisto Morphamax 500','Callisto Morphamax 600','Callisto Morphamax 700','Callisto Morphamax 5000','Callisto Morphamax 6000 SE','Callisto Morphamax 6000 SE2','Callisto Morphamax 7000','Xiph Xlater 5','Xiph Xlater 40','Xiph Xlater 50','Xiph Xlater 58','Xiph Xlater 300','Xiph Xlater 500','Xiph Xlater 2000','Xiph Xlater 5000','Xiph Xlater 10000'} ; function test_basic(s) sorted = vl_alphanum(s.strings) ; assert(isequal(sorted,s.sortedStrings)) ; vlfeat/toolbox/xtest/vl_test_colsubset.m0000644000175000017500000000147412237004736017535 0ustar dimadimafunction results = vl_test_colsubset(varargin) % VL_TEST_COLSUBSET vl_test_init ; function s = setup() s.x = [5 2 3 6 4 7 1 9 8 0] ; function test_beginning(s) vl_assert_equal(1:5, vl_colsubset(1:10, 5, 'beginning')) ; vl_assert_equal(1:5, vl_colsubset(1:10, .5, 'beginning')) ; function test_ending(s) vl_assert_equal(6:10, vl_colsubset(1:10, 5, 'ending')) ; vl_assert_equal(6:10, vl_colsubset(1:10, .5, 'ending')) ; function test_largest(s) vl_assert_equal([5 6 7 9 8], vl_colsubset(s.x, 5, 'largest')) ; vl_assert_equal([5 6 7 9 8], vl_colsubset(s.x, .5, 'largest')) ; function test_smallest(s) vl_assert_equal([2 3 4 1 0], vl_colsubset(s.x, 5, 'smallest')) ; vl_assert_equal([2 3 4 1 0], vl_colsubset(s.x, .5, 'smallest')) ; function test_random(s) assert(numel(intersect(s.x, vl_colsubset(s.x, 5, 'random'))) == 5) ; vlfeat/toolbox/xtest/vl_test_hog.m0000644000175000017500000000302312237004736016277 0ustar dimadimafunction results = vl_test_hog(varargin) % VL_TEST_HOG vl_test_init ; function s = setup() s.im = im2single(vl_impattern('roofs1')) ; [x,y]= meshgrid(linspace(-1,1,128)) ; s.round = single(x.^2+y.^2); s.imSmall = s.im(1:128,1:128,:) ; s.imSmall = s.im ; s.imSmallFlipped = s.imSmall(:,end:-1:1,:) ; function test_basic_call(s) cellSize = 8 ; hog = vl_hog(s.im, cellSize) ; function test_bilinear_orientations(s) cellSize = 8 ; vl_hog(s.im, cellSize, 'bilinearOrientations') ; function test_variants_and_flipping(s) variants = {'uoctti', 'dalaltriggs'} ; numOrientationsRange = 3:9 ; cellSize = 8 ; for cellSize = [4 8 16] for i=1:numel(variants) for j=1:numel(numOrientationsRange) args = {'bilinearOrientations', ... 'variant', variants{i}, ... 'numOrientations', numOrientationsRange(j)} ; hog = vl_hog(s.imSmall, cellSize, args{:}) ; perm = vl_hog('permutation', args{:}) ; hog1 = vl_hog(s.imSmallFlipped, cellSize, args{:}) ; hog2 = hog(:,end:-1:1,perm) ; %norm(hog1(:)-hog2(:)) vl_assert_almost_equal(hog1,hog2,1e-3) ; end end end function test_polar(s) cellSize = 8 ; im = s.round ; for b = [0 1] if b args = {'bilinearOrientations'} ; else args = {} ; end hog1 = vl_hog(im, cellSize, args{:}) ; [ix,iy] = vl_grad(im) ; m = sqrt(ix.^2 + iy.^2) ; a = atan2(iy,ix) ; m(:,[1 end]) = 0 ; m([1 end],:) = 0 ; hog2 = vl_hog(cat(3,m,a), cellSize, 'DirectedPolarField', args{:}) ; vl_assert_almost_equal(hog1,hog2,norm(hog1(:))/1000) ; end vlfeat/toolbox/xtest/vl_test_svmtrain.m0000644000175000017500000001026512237004745017373 0ustar dimadimafunction results = vl_test_svmtrain(varargin) % VL_TEST_SVMTRAIN vl_test_init ; end function s = setup() randn('state',0) ; Np = 10 ; Nn = 10 ; xp = diag([1 3])*randn(2, Np) ; xn = diag([1 3])*randn(2, Nn) ; xp(1,:) = xp(1,:) + 2 + 1 ; xn(1,:) = xn(1,:) - 2 + 1 ; s.x = [xp xn] ; s.y = [ones(1,Np) -ones(1,Nn)] ; s.lambda = 0.01 ; s.biasMultiplier = 10 ; if 0 figure(1) ; clf; vl_plotframe(xp, 'g') ; hold on ; vl_plotframe(xn, 'r') ; axis equal ; grid on ; end % Run LibSVM as an accuate solver to compare results with. Note that % LibSVM optimizes a slightly different cost function due to the way % the bias is handled. % [s.w, s.b] = accurate_solver(s.x, s.y, s.lambda, s.biasMultiplier) ; s.w = [1.180762951236242; 0.098366470721632] ; s.b = -1.540018443946204 ; s.obj = obj(s, s.w, s.b) ; end function test_sgd_basic(s) for conv = {@single, @double} conv = conv{1} ; vl_twister('state',0) ; [w b info] = vl_svmtrain(s.x, s.y, s.lambda, ... 'Solver', 'sgd', ... 'BiasMultiplier', s.biasMultiplier, ... 'BiasLearningRate', 1/s.biasMultiplier, ... 'MaxNumIterations', 1e5, ... 'Epsilon', 1e-3) ; % there are no absolute guarantees on the objective gap, but % the heuristic SGD uses as stopping criterion seems reasonable % within a factor 10 at least. o = obj(s, w, b) ; gap = o - s.obj ; vl_assert_almost_equal(conv([w; b]), conv([s.w; s.b]), 0.1) ; assert(gap <= 1e-2) ; end end function test_sdca_basic(s) for conv = {@single, @double} conv = conv{1} ; vl_twister('state',0) ; [w b info] = vl_svmtrain(s.x, s.y, s.lambda, ... 'Solver', 'sdca', ... 'BiasMultiplier', s.biasMultiplier, ... 'MaxNumIterations', 1e5, ... 'Epsilon', 1e-3) ; % the gap with the accurate solver cannot be % greater than the duality gap. o = obj(s, w, b) ; gap = o - s.obj ; vl_assert_almost_equal(conv([w; b]), conv([s.w; s.b]), 0.1) ; assert(gap <= 1e-3) ; end end function test_weights(s) for algo = {'sgd', 'sdca'} for conv = {@single, @double} conv = conv{1} ; vl_twister('state',0) ; numRepeats = 10 ; pos = find(s.y > 0) ; neg = find(s.y < 0) ; weights = ones(1, numel(s.y)) ; weights(pos) = numRepeats ; % simulate weighting by repeating positives [w b info] = vl_svmtrain(... s.x(:, [repmat(pos,1,numRepeats) neg]), ... s.y(:, [repmat(pos,1,numRepeats) neg]), ... s.lambda / (numel(pos) *numRepeats + numel(neg)) / (numel(pos) + numel(neg)), ... 'Solver', 'sdca', ... 'BiasMultiplier', s.biasMultiplier, ... 'MaxNumIterations', 1e6, ... 'Epsilon', 1e-4) ; % apply weigthing [w_ b_ info_] = vl_svmtrain(... s.x, ... s.y, ... s.lambda, ... 'Solver', char(algo), ... 'BiasMultiplier', s.biasMultiplier, ... 'MaxNumIterations', 1e6, ... 'Epsilon', 1e-4, ... 'Weights', weights) ; vl_assert_almost_equal(conv([w; b]), conv([w_; b_]), 0.05) ; end end end function test_homkermap(s) for solver = {'sgd', 'sdca'} for conv = {@single,@double} conv = conv{1} ; dataset = vl_svmdataset(conv(s.x), 'homkermap', struct('order',1)) ; vl_twister('state',0) ; [w_ b_] = vl_svmtrain(dataset, s.y, s.lambda) ; x_hom = vl_homkermap(conv(s.x), 1) ; vl_twister('state',0) ; [w b] = vl_svmtrain(x_hom, s.y, s.lambda) ; vl_assert_almost_equal([w; b],[w_; b_], 1e-7) ; end end end function [w,b] = accurate_solver(X, y, lambda, biasMultiplier) addpath opt/libsvm/matlab/ N = size(X,2) ; model = svmtrain(y', [(1:N)' X'*X], sprintf(' -c %f -t 4 -e 0.00001 ', 1/(lambda*N))) ; w = X(:,model.SVs) * model.sv_coef ; b = - model.rho ; format long ; disp('model w:') disp(w) disp('bias b:') disp(b) end function o = obj(s, w, b) o = (sum(w.*w) + b*b) * s.lambda / 2 + mean(max(0, 1 - s.y .* (w'*s.x + b))) ; end vlfeat/toolbox/xtest/vl_test_fisher.m0000644000175000017500000000324712237004745017012 0ustar dimadimafunction results = vl_test_fisher(varargin) % VL_TEST_FISHER vl_test_init ; function s = setup() randn('state',0) ; dimension = 5 ; numData = 21 ; numComponents = 3 ; s.x = randn(dimension,numData) ; s.mu = randn(dimension,numComponents) ; s.sigma2 = ones(dimension,numComponents) ; s.prior = ones(1,numComponents) ; s.prior = s.prior / sum(s.prior) ; function test_basic(s) phi_ = simple_fisher(s.x, s.mu, s.sigma2, s.prior) ; phi = vl_fisher(s.x, s.mu, s.sigma2, s.prior) ; vl_assert_almost_equal(phi, phi_, 1e-10) ; function test_norm(s) phi_ = simple_fisher(s.x, s.mu, s.sigma2, s.prior) ; phi_ = phi_ / norm(phi_) ; phi = vl_fisher(s.x, s.mu, s.sigma2, s.prior, 'normalized') ; vl_assert_almost_equal(phi, phi_, 1e-10) ; function test_sqrt(s) phi_ = simple_fisher(s.x, s.mu, s.sigma2, s.prior) ; phi_ = sign(phi_) .* sqrt(abs(phi_)) ; phi = vl_fisher(s.x, s.mu, s.sigma2, s.prior, 'squareroot') ; vl_assert_almost_equal(phi, phi_, 1e-10) ; function test_improved(s) phi_ = simple_fisher(s.x, s.mu, s.sigma2, s.prior) ; phi_ = sign(phi_) .* sqrt(abs(phi_)) ; phi_ = phi_ / norm(phi_) ; phi = vl_fisher(s.x, s.mu, s.sigma2, s.prior, 'improved') ; vl_assert_almost_equal(phi, phi_, 1e-10) ; function enc = simple_fisher(x, mu, sigma2, pri) sigma = sqrt(sigma2) ; for i = 1:size(mu,2) delta{i} = bsxfun(@times, bsxfun(@minus, x, mu(:,i)), 1./sigma(:,i)) ; q(i,:) = log(pri(i)) - 0.5 * log(sigma2(i)) - 0.5 * sum(delta{i}.^2,1) ; end q = exp(bsxfun(@minus, q, max(q,[],1))) ; q = bsxfun(@times, q, 1 ./ sum(q,1)) ; n = size(x,2) ; for i = 1:size(mu,2) u{i} = delta{i} * q(i,:)' / n / sqrt(pri(i)) ; v{i} = (delta{i}.^2 - 1) * q(i,:)' / n / sqrt(2*pri(i)) ; end enc = cat(1, u{:}, v{:}) ; vlfeat/toolbox/xtest/vl_test_alldist2.m0000644000175000017500000000435412237004736017250 0ustar dimadimafunction results = vl_test_alldist2(varargin) % VL_TEST_ALLDIST vl_test_init ; % TODO: test integer classes function s = setup() vl_twister('state', 0) ; s.X = 3.1 * vl_twister(10,10) ; s.Y = 4.7 * vl_twister(10,7) ; function test_null_args(s) vl_assert_equal(... vl_alldist2(zeros(15,12), zeros(15,0), 'kl2'), ... zeros(12,0)) ; vl_assert_equal(... vl_alldist2(zeros(15,0), zeros(15,0), 'kl2'), ... zeros(0,0)) ; vl_assert_equal(... vl_alldist2(zeros(15,0), zeros(15,12), 'kl2'), ... zeros(0,12)) ; vl_assert_equal(... vl_alldist2(zeros(0,15), zeros(0,12), 'kl2'), ... zeros(15,12)) ; function test_self(s) vl_assert_almost_equal(... vl_alldist2(s.X, 'kl2'), ... makedist(@(x,y) x*y, s.X, s.X), ... 1e-6) ; function test_distances(s) dists = {'chi2', 'l2', 'l1', 'hell', ... 'kchi2', 'kl2', 'kl1', 'khell'} ; distsEquiv = { ... @(x,y) (x-y)^2 / (x + y), ... @(x,y) (x-y)^2, ... @(x,y) abs(x-y), ... @(x,y) (sqrt(x) - sqrt(y))^2, ... @(x,y) 2 * (x*y) / (x + y), ... @(x,y) x*y, ... @(x,y) min(x,y), ... @(x,y) sqrt(x.*y)}; types = {'single', 'double', 'sparse'} ; for simd = [0 1] for d = 1:length(dists) for t = 1:length(types) vl_simdctrl(simd) ; X = feval(str2func(types{t}), s.X) ; Y = feval(str2func(types{t}), s.Y) ; a = vl_alldist2(X,Y,dists{d}) ; b = makedist(distsEquiv{d},X,Y) ; vl_assert_almost_equal(a,b, ... 1e-4, ... 'alldist failed for dist=%s type=%s simd=%d', ... dists{d}, ... types{t}, ... simd) ; end end end function test_distance_kernel_pairs(s) dists = {'chi2', 'l2', 'l1', 'hell'} ; for d = 1:length(dists) dist = char(dists{d}) ; X = s.X ; Y = s.Y ; ker = ['k' dist] ; kxx = vl_alldist2(X,X,ker) ; kyy = vl_alldist2(Y,Y,ker) ; kxy = vl_alldist2(X,Y,ker) ; kxx = repmat(diag(kxx), 1, size(s.Y,2)) ; kyy = repmat(diag(kyy), 1, size(s.X,1))' ; d2 = vl_alldist2(X,Y,dist) ; vl_assert_almost_equal(d2, kxx + kyy - 2 * kxy, '1e-6') ; end function D = makedist(cmp,X,Y) [d,m] = size(X) ; [d,n] = size(Y) ; D = zeros(m,n) ; for i = 1:m for j = 1:n acc = 0 ; for k = 1:d acc = acc + cmp(X(k,i),Y(k,j)) ; end D(i,j) = acc ; end end conv = str2func(class(X)) ; D = conv(D) ; vlfeat/toolbox/xtest/vl_test_liop.m0000644000175000017500000000177712237004745016503 0ustar dimadimafunction results = vl_test_liop(varargin) % VL_TEST_SIFT vl_test_init ; function s = setup() randn('state',0) ; s.patch = randn(65,'single') ; xr = -32:32 ; [x,y] = meshgrid(xr) ; s.blob = - single(x.^2+y.^2) ; function test_basic(s) d = vl_liop(s.patch) ; function test_blob(s) % with a blob, all local intensity order pattern are equal. In % particular, if the blob intensity decreases away from the center, % then all local intensities sampled in a neighbourhood of 2 elements % are already sorted (see LIOP details). d = vl_liop(s.blob, ... 'IntensityThreshold', 0, ... 'NumNeighbours', 2, ... 'NumSpatialBins', 1) ; assert(isequal(d, single([1;0]))) ; function test_neighbours(s) for n=2:5 for p=1:3 d = vl_liop(s.patch, 'NumNeighbours', n, 'NumSpatialBins', p) ; assert(numel(d) == p * factorial(n)) ; end end function test_multiple(s) x = randn(31,31,3, 'single') ; d = vl_liop(x) ; for i=1:3 d_(:,i) = vl_liop(squeeze(x(:,:,i))) ; end assert(isequal(d,d_)) ; vlfeat/toolbox/xtest/vl_test_slic.m0000644000175000017500000000031012237004745016450 0ustar dimadimafunction results = vl_test_slic(varargin) % VL_TEST_SLIC vl_test_init ; function s = setup() s.im = im2single(vl_impattern('roofs1')) ; function test_slic(s) segmentation = vl_slic(s.im, 10, 0.1) ; vlfeat/toolbox/xtest/vl_test_imsmooth.m0000644000175000017500000000345512237004736017372 0ustar dimadimafunction results = vl_test_imsmooth(varargin) % VL_TEST_IMSMOOTH vl_test_init ; function s = setup() I = im2double(imread(fullfile(vl_root,'data','spots.jpg'))) ; I = max(min(vl_imdown(I),1),0) ; s.I = single(I) ; function test_pad_by_continuity(s) % Convolving a constant signal padded with continuity does not change % the signal. I = ones(3) ; for ker = {'triangular', 'gaussian'} ker = char(ker) ; J = vl_imsmooth(I, 2, ... 'kernel', ker, ... 'padding', 'continuity') ; vl_assert_almost_equal(J, I, 1e-4, ... 'padding by continutiy with kernel = %s', ker) ; end function test_kernels(s) for ker = {'triangular', 'gaussian'} ker = char(ker) ; for type = {@single, @double} for simd = [0 1] for sigma = [1 2 7] for step = [1 2 3] vl_simdctrl(simd) ; conv = type{1} ; g = equivalent_kernel(ker, sigma) ; J = vl_imsmooth(conv(s.I), sigma, ... 'kernel', ker, ... 'padding', 'zero', ... 'subsample', step) ; J_ = conv(convolve(s.I, g, step)) ; vl_assert_almost_equal(J, J_, 1e-4, ... 'kernel=%s sigma=%f step=%d simd=%d', ... ker, sigma, step, simd) ; end end end end end function g = equivalent_kernel(ker, sigma) switch ker case 'gaussian' W = ceil(4*sigma) ; g = exp(-.5*((-W:W)/(sigma+eps)).^2) ; case 'triangular' W = max(round(sigma),1) ; g = W - abs(-W+1:W-1) ; end g = g / sum(g) ; function I = convolve(I, g, step) if strcmp(class(I),'single') g = single(g) ; else g = double(g) ; end for k=1:size(I,3) I(:,:,k) = conv2(g,g,I(:,:,k),'same'); end I = I(1:step:end,1:step:end,:) ; vlfeat/toolbox/xtest/vl_test_binsearch.m0000644000175000017500000000247312237004736017470 0ustar dimadimafunction results = vl_test_binsearch(varargin) % VL_TEST_BINSEARCH vl_test_init ; function test_inf_bins() x = [-inf -1 0 1 +inf] ; vl_assert_equal(vl_binsearch([], x), [0 0 0 0 0]) ; vl_assert_equal(vl_binsearch([-inf 0], x), [1 1 2 2 2]) ; vl_assert_equal(vl_binsearch([-inf], x), [1 1 1 1 1]) ; vl_assert_equal(vl_binsearch([-inf +inf], x), [1 1 1 1 2]) ; function test_empty() vl_assert_equal(vl_binsearch([], []), []) ; function test_bnd() vl_assert_equal(vl_binsearch([], [1]), [0]) ; vl_assert_equal(vl_binsearch([], [-inf]), [0]) ; vl_assert_equal(vl_binsearch([], [+inf]), [0]) ; vl_assert_equal(vl_binsearch([1], [.9]), [0]) ; vl_assert_equal(vl_binsearch([1], [1]), [1]) ; vl_assert_equal(vl_binsearch([1], [-inf]), [0]) ; vl_assert_equal(vl_binsearch([1], [+inf]), [1]) ; function test_basic() vl_assert_equal(vl_binsearch(-10:10, -10:10), 1:21) ; vl_assert_equal(vl_binsearch(-10:10, -11:10), 0:21) ; vl_assert_equal(vl_binsearch(-10:10, [-inf, -11:10, +inf]), [0 0:21 21]) ; function test_frac() vl_assert_equal(vl_binsearch(1:10, 1:.5:10), floor(1:.5:10)) vl_assert_equal(vl_binsearch(1:10, fliplr(1:.5:10)), ... fliplr(floor(1:.5:10))) ; function test_array() a = reshape(1:100,10,10) ; b = reshape(1:.5:100.5, 2, []) ; c = floor(b) ; vl_assert_equal(vl_binsearch(a,b), c) ; vlfeat/toolbox/demo/0000755000175000017500000000000012237035722013362 5ustar dimadimavlfeat/toolbox/demo/vl_demo_gmm_2d_twist.m0000644000175000017500000000501612237004745017647 0ustar dimadima%% data init numClusters = 30; dimension = 2; cc=hsv(numClusters); X = []; a = 0.9; t = linspace(0,4*pi,numClusters); x = a*(t.*cos(t)); y = a*(t.*sin(t)); mu = [x;y]; Ns = linspace(1,numClusters,numClusters) * 20; for i=1:numClusters add = randn(dimension,Ns(i)) + repmat(mu(:,i),1,Ns(i)); X = [X, add*50]; end X = single(X); %% KMeans elapsedKMEANS = tic; [initMeans, assignments] = vl_kmeans(X, numClusters, ... 'Verbose', ... 'Algorithm','ann', ... 'MaxNumIterations',5, ... 'Distance','l2', ... 'NumTrees',3, ... 'MaxNumComparisons', 20); elapsedKMEANS = toc(elapsedKMEANS); fprintf('\n ---------- \n KMeans time - %f \n ---------- \n\n',elapsedKMEANS); initSigmas = zeros(dimension,numClusters); initWeights = zeros(1,numClusters); figure(1) ; clf ; subplot(3,1,1) ; hold on ; for i=1:numClusters Xk = X(:,assignments==i); initWeights(i) = size(Xk,2) / numClusters; plot(Xk(1,:),Xk(2,:),'.','color',cc(i,:)); if size(Xk,1) == 0 || size(Xk,2) == 0 initSigmas(:,i) = diag(cov(X')); else initSigmas(:,i) = diag(cov(Xk')); end end axis equal set(gca,'xtick',[],'ytick',[]); axis off title('GMM: KMeans intialization'); initSigmas = single(initSigmas); initWeights = single(initWeights); %% GMM kmeans elapsedGMM = tic ; [means,sigmas,weights,ll,posteriors] = vl_gmm(X, numClusters, ... 'Initialization','custom', ... 'InitMeans',initMeans, ... 'InitCovariances',initSigmas, ... 'InitPriors',initWeights, ... 'verbose', ... 'MaxNumIterations', 20); elapsedGMM = toc(elapsedGMM); fprintf('\n ---------- \n GMM time - %f \n ---------- \n',elapsedGMM); subplot(3,1,2) ; hold on ; [~,idx] = max(posteriors,[],1); for i=1:numClusters plot(X(1,idx == i),X(2,idx == i),'.','color',cc(i,:)); vl_plotframe([means(:,i)' sigmas(1,i) 0 sigmas(2,i)]); end title('GMM: Gaussian mixture - kmeans init'); set(gca,'xtick',[],'ytick',[]); axis off axis equal %% GMM random elapsedGMM = tic; [means,sigmas,weights,ll,posteriors] = vl_gmm(X, numClusters, ... 'Initialization','rand', ... 'Verbose', ... 'MaxNumIterations', 100); elapsedGMM = toc(elapsedGMM); fprintf('\n ---------- \n GMM time - %f \n ---------- \n',elapsedGMM); subplot(3,1,3) ; hold on ; [~,idx] = max(posteriors,[],1); for i=1:numClusters plot(X(1,idx == i),X(2,idx == i),'.','color',cc(i,:)); vl_plotframe([means(:,i)' sigmas(1,i) 0 sigmas(2,i)]); end title('GMM: Gaussian mixture - random init'); axis equal set(gca,'xtick',[],'ytick',[]); axis off vl_demo_print('gmm_2d_shell',1.2); vlfeat/toolbox/demo/vl_demo_gmm_convergence.m0000644000175000017500000000373512237004745020414 0ustar dimadimadimension = 128; numData = 10000; numClusters = 100; numIterations = 5; numIterationsKM = 3; X = rand(dimension,numData); numTrials = 2; lls = zeros(numTrials,2); for trial = 1:numTrials % kmeans initialization startKMEANS = tic; [initMeans, assignments] = vl_kmeans(X, numClusters, ... 'verbose', ... 'multithreading', 'parallel', ... 'algorithm','ann', ... 'MaxNumIterations',numIterationsKM, ... 'distance','l2', ... 'NumTrees',3, ... 'MaxNumComparisons', 5); elapsedKMEANS = toc(startKMEANS); fprintf('\n ---------- \n KMeans time - %f \n ---------- \n\n',elapsedKMEANS); % compute initial gaussian parameters initWeights = zeros(1,numClusters); initSigmas = zeros(dimension,numClusters); for i=1:numClusters Xk = X(:,assignments==i); initWeights(i) = size(Xk,2) / numClusters; if size(Xk,1) == 0 || size(Xk,2) == 0 initSigmas(:,i) = diag(cov(X')); else initSigmas(:,i) = diag(cov(Xk')); end end % gmm with kmeans init [means,sigmas,weights,ll,posteriors] = vl_gmm(X, numClusters, ... 'initialization','custom', ... 'InitMeans',initMeans, ... 'InitSigmas',initSigmas, ... 'InitWeights',initWeights, ... 'verbose', ... 'multithreading', 'parallel', ... 'MaxNumIterations', numIterations); elapsedGMM = toc(startKMEANS); fprintf('\n ---------- \n GMM kmeans init time - %f \n ---------- \n\n',elapsedGMM); lls(trial,1) = ll; % gmm with random init elapsedGMM = tic; [means,sigmas,weights,ll,posteriors] = vl_gmm(X, numClusters, ... 'initialization','rand', ... 'verbose', ... 'multithreading', 'parallel', ... 'MaxNumIterations', numIterations); elapsedGMM = toc(elapsedGMM); fprintf('\n ---------- \n GMM random init time - %f \n ---------- \n\n',elapsedGMM); lls(trial,2) = ll; end lls = sum(lls,1)/numTrials; inits = {'KMeans','Random'}; disp(lls) figure bar(lls); set(gca,'xticklabel',inits); xlabel('Initialization type'); ylabel('LogLikelyhood'); title('GMM convergence test') vlfeat/toolbox/demo/vl_demo_kdtree.m0000644000175000017500000000306112237004736016524 0ustar dimadimafunction vl_demo_kdtree % VL_DEMO_KDTREE % Demonstrates the construction of a kd-tree for uniformly % distributed 2-D data and data distributed on a circle. Both the % median and mean threshold selection methods are illustrated. randn('state',0) ; rand('state',0) ; % uniform 2D points Q = single(rand(2,1)) ; X = single(rand(2, 100)) ; % kd-tree with median and mean thresholds figure(1) ; clf ; do('thresholdmethod', 'mean') ; figure(2) ; clf ; do('thresholdmethod', 'median') ; % 2D points on a circle thr = 2*pi*rand(1,100) ; X = single(.4*[cos(thr); sin(thr)] + .5) ; Q = single(Q) ; % kd-tree with median and mean thresholds figure(3) ; clf ; do('thresholdmethod', 'mean') ; figure(4) ; clf ; do('thresholdmethod', 'median') ; vl_demo_print(1, 'kdtree_uniform_mean') ; vl_demo_print(2, 'kdtree_uniform_median') ; vl_demo_print(3, 'kdtree_circle_mean') ; vl_demo_print(4, 'kdtree_circle_median') ; function do(varargin) % build the forest kdforest = vl_kdtreebuild (X, 'verbose', varargin{:}) ; % query the kd-tree [i, d] = vl_kdtreequery (kdforest, X, Q, 'numneighbors', 10, 'verbose') ; vl_plotframe(X, 'ro') ; hold on ; xl = [0, +1] ; yl = [0, +1] ; axis equal ; xlim(xl) ; ylim(yl) ; vl_demo_kdtree_plot(kdforest.trees(1), 1, xl, yl) ; % plot query point and returns vl_plotframe(Q,'b*') ; for k=1:length(i) vl_plotframe([Q ; sqrt(d(k))],'b:','linewidth',1) ; vl_plotframe(X(:, i(k)), 'bx') ; end set(gca,'xtick',[],'ytick',[]) ; end end vlfeat/toolbox/demo/vl_demo_kmeans_vs_builtin.m0000644000175000017500000000205112237004736020760 0ustar dimadima% VL_DEMO_KMEANS_VS_BUILTIN clear elaps energy ; dimension = 128 ; numData = 1000 ; numCenters = 10 ; numTrials = 10 ; for trial = 1:numTrials X = rand(dimension, numData) ; tic ; [idx, C, e] = kmeans(X', numCenters) ; e = sum(e) ; elaps.builtin(trial) = toc ; energy.builtin(trial) = e ; tic ; [idx_, C_, e] = vl_kmeans(X, numCenters, 'verbose') ; elaps.vl(trial) = toc ; energy.vl(trial) = e ; tic ; [idx_, C_, e] = vl_kmeans(X, numCenters, 'initialization', 'plusplus') ; elaps.vlpp(trial) = toc ; energy.vlpp(trial) = e ; end figure(1) ; clf ; subplot(1,2,1) ; title('Energy') ; mu = [mean(elaps.builtin) mean(elaps.vl) mean(elaps.vlpp)] ; st = [std(elaps.builtin) std(elaps.vl) std(elaps.vlpp)] ; bar(mu) ; hold on ; errorbar(mu, st, 'linestyle', 'none', 'color', 'r', 'linewidth', 4) ; subplot(1,2,2) ; mu = [mean(energy.builtin) mean(energy.vl) mean(energy.vlpp)] ; st = [std(energy.builtin) std(energy.vl) std(energy.vlpp)] ; bar(mu) ; hold on ; errorbar(mu, st, 'linestyle', 'none', 'color', 'r', 'linewidth', 4) ; vlfeat/toolbox/demo/vl_demo_quickshift.m0000644000175000017500000000227212237004736017423 0ustar dimadima% VL_DEMO_QUICKSHIFT Demo: Quick shift: basic functionality pfx = fullfile(vl_root,'figures','demo') ; randn('state',0) ; rand('state',0) ; figure(1) ; clf ; % -------------------------------------------------------------------- % Load a figure % -------------------------------------------------------------------- I = imread(fullfile(vl_root,'data','roofs1.jpg')) ; image(I) ; axis equal off tight ; vl_demo_print('quickshift_image') ; % -------------------------------------------------------------------- % Create a quickshift segmentation % -------------------------------------------------------------------- ratio = 0.5; kernelsize = 2; maxdist = 10; Iseg = vl_quickseg(I, ratio, kernelsize, maxdist); image(Iseg); axis equal off tight; vl_demo_print('quickshift_qseg_1') ; kernelsize = 2; maxdist = 20; Iseg = vl_quickseg(I, ratio, kernelsize, maxdist); image(Iseg); axis equal off tight; vl_demo_print('quickshift_qseg_2') ; maxdist = 50; ndists = 10; Iedge = vl_quickvis(I, ratio, kernelsize, maxdist, ndists); imagesc(Iedge); axis equal off tight; colormap gray; vl_demo_print('quickshift_qvis') ; vlfeat/toolbox/demo/vl_demo_mser_delta.m0000644000175000017500000000153412237004736017370 0ustar dimadima% VL_DEMO_MSER_DELTA Demo: MSER: delta parameter randn('state',0) ; rand('state',0) ; I = zeros(100,500) + 255 ; for i=1:5 I((1:50) + 25 - 1, ... (1:50) + 25 - 1 + 100 * (i-1)) = ... 255 - 32 * i ; end I = uint8(I) ; figure(1) ; clf ; axes('position',[0.05 0.05 1-.1 2*1/5-.1]) ; plot(I(end/2,:),'linewidth',3) ; hold on ; vl_demo_print('mser_delta_0') ; figure(2) ; clf ; imagesc(I) ; axis off ; axis equal ; axis tight ; colormap(gray(256)) ; set(gca,'fontsize',20) ; deltar = [1 32 159 160] ; clear h ; for delta=deltar [r,f] = vl_mser(I, 'Delta', delta, 'BrightOnDark', 0, 'verbose') ; if exist('h','var'), delete(h) ; end h = vl_plotframe(vl_ertr(f)) ; if ~isempty(h), set(h,'color','y','linewidth',1) ; end title(sprintf('delta = %g', delta)) ; drawnow ; vl_demo_print(sprintf('mser_delta_%d',find(delta==deltar))) ; end vlfeat/toolbox/demo/vl_demo_covdet.m0000644000175000017500000001042312237004745016532 0ustar dimadima% VL_DEMO_COVDET Demo: VL_COVDET() % -------------------------------------------------------------------- % Basics % -------------------------------------------------------------------- im = vl_impattern('roofs1') ; im = im(end-128:end,128:320,:) ; figure(1) ; clf ; image(im) ; axis image off ; vl_demo_print('covdet_basic_image') ; imgs = im2single(rgb2gray(im)) ; frames = vl_covdet(imgs, 'verbose') ; hold on ; vl_plotframe(frames) ; vl_demo_print('covdet_basic_frames') ; % -------------------------------------------------------------------- % Affine adaptation % -------------------------------------------------------------------- frames = vl_covdet(imgs, 'estimateAffineShape', true, 'verbose') ; figure(2) ; clf ; image(im) ; axis image off ; hold on ; vl_plotframe(frames) ; vl_demo_print('covdet_affine_frames',.8) ; % -------------------------------------------------------------------- % Estimating orientations % -------------------------------------------------------------------- frames = vl_covdet(imgs, 'estimateOrientation', true, 'verbose') ; figure(3) ; clf ; image(im) ; axis image off ; hold on ; vl_plotframe(frames) ; vl_demo_print('covdet_oriented_frames',.8) ; % -------------------------------------------------------------------- % Extracting patches % -------------------------------------------------------------------- [frames, patches] = vl_covdet(imgs, 'descriptor', 'patch') ; figure(4) ; clf ; w = sqrt(size(patches,1)) ; vl_imarraysc(reshape(patches(:,1:10*10), w,w,[])) ; axis image off ; hold on ; colormap gray ; vl_demo_print('covdet_patches') ; [frames, patches] = vl_covdet(imgs, ... 'descriptor', 'patch' ,... 'estimateAffineShape', true, ... 'estimateOrientation', false) ; figure(5) ; clf ; w = sqrt(size(patches,1)) ; vl_imarraysc(reshape(patches(:,1:10*10), w,w,[])) ; axis image off ; hold on ; colormap gray ; vl_demo_print('covdet_affine_patches') ; % -------------------------------------------------------------------- % Different detectors % -------------------------------------------------------------------- names = {'DoG', 'Hessian', ... 'HarrisLaplace', 'HessianLaplace', ... 'MultiscaleHarris', 'MultiscaleHessian'} ; figure(6) ; clf ; for i = 1:numel(names) frames = vl_covdet(imgs, 'method', names{i}) ; vl_tightsubplot(3,2,i, 'margintop',0.025, 'marginright', 0.01) ; imagesc(im) ; axis image off ; hold on ; vl_plotframe(frames) ; title(names{i}) ; end vl_figaspect(3/4) ; vl_demo_print('covdet_detectors',.9) ; % -------------------------------------------------------------------- % Custom frames % -------------------------------------------------------------------- delta = 15 ; xr = delta:delta:size(im,2)-delta+1 ; yr = delta:delta:size(im,1)-delta+1 ; [x,y] = meshgrid(xr,yr) ; frames = [x(:)'; y(:)'] ; frames(end+1,:) = delta/2 ; [frames, patches] = vl_covdet(imgs, ... 'frames', frames, ... 'estimateAffineShape', true, ... 'estimateOrientation', true) ; figure(7) ; clf ; imagesc(im) ; axis image off ; hold on ; colormap gray ; vl_plotframe(frames) ; vl_demo_print('covdet_custom_frames',.8) ; % -------------------------------------------------------------------- % Scale spaces % -------------------------------------------------------------------- [frames, descrs, info] = vl_covdet(imgs) ; figure(8) ; clf ; vl_plotss(info.gss) ; colormap gray ; vl_figaspect(2) ; vl_demo_print('covdet_gss',.8) ; figure(9) ; clf ; vl_plotss(info.css) ; colormap gray ; vl_figaspect(2) ; vl_demo_print('covdet_css',.8) ; figure(10) ; clf ; subplot(1,2,1) ; hist([info.peakScores],10) ; xlabel('Peak Score') ; ylabel('Occurences') ; grid on ; subplot(1,2,2) ; hist([info.edgeScores],10) ; xlabel('Edge Score') ; ylabel('Occurences') ; grid on ; vl_figaspect(2) ; vl_demo_print('covdet_scores',.9) ; vlfeat/toolbox/demo/vl_demo_kmeans_init.m0000644000175000017500000000267712237004736017563 0ustar dimadima% VL_DEMO_KMEANS_INIT if 0 I = vl_imtest('box') ; [f, d] = vl_dsift(single(I) / 255, 'step', 1, 'size', 3) ; X = double(d) ; numCenters = 300 ; else X = [] ; numCenters = 40 ; for i=1:numCenters X_ = randn(10,100) ; X_(i) = X_(i) + 100 ; X = [X X_] ; end numCenters = numCenters * 2 ; end numData = size(X, 2) ; dimension = size(X, 1) ; clear elaps energy ; dimension = 128 ; numData = 1000 ; numCenters = 100 ; numTrials = 5 ; numIters = 100 ; vl_twister(0) ; for trial = 1:numTrials tic ; [C, idx, e] = vl_kmeans(X, numCenters, 'Verbose', ... 'Initialization', 'randsel', ... 'MaxNumIterations', numIters) ; elaps.vlrs(trial) = toc ; energy.vlrs(trial) = e ; tic ; [C_, idx_, e_] = vl_kmeans(X, numCenters, 'Verbose', ... 'Initialization', 'plusplus', ... 'MaxNumIterations', numIters) ; elaps.vlpp(trial) = toc ; energy.vlpp(trial) = e_ ; end figure(1) ; clf ; subplot(1,2,1) ; title('Energy') ; mu = [mean(elaps.vlrs) mean(elaps.vlpp)] ; st = [std(elaps.vlrs) std(elaps.vlpp)] ; bar(mu) ; hold on ; errorbar(mu, st, 'linestyle', 'none', 'color', 'r', 'linewidth', 4) ; title('Time') ; subplot(1,2,2) ; mu = [mean(energy.vlrs) mean(energy.vlpp)] ; st = [std(energy.vlrs) std(energy.vlpp)] ; bar(mu) ; hold on ; errorbar(mu, st, 'linestyle', 'none', 'color', 'r', 'linewidth', 4) ; title('Energy') ; vlfeat/toolbox/demo/vl_demo_hog.m0000644000175000017500000000653512237004736016034 0ustar dimadima% VL_DEMO_HOG Demo: HOG features % Author: Andrea Vedaldi % AUTORIGHTS prefix = fullfile(vl_root,'figures','demo') ; randn('state',0) ; rand('state',0) ; figure(1) ; clf ; % -------------------------------------------------------------------- % Load a figure % -------------------------------------------------------------------- im = imread(fullfile(vl_root,'data','roofs1.jpg')) ; im = im2single(im) ; im = im(1:128,end-128+1:end,:) ; figure(1) ; clf ; image(im) ; axis equal off tight ; vl_demo_print('hog_image') ; % -------------------------------------------------------------------- % Compute HOG features % -------------------------------------------------------------------- % Standard features cellSize = 8 ; hog = vl_hog(im, cellSize, 'verbose') ; imhog = vl_hog('render', hog, 'verbose') ; figure(2) ; clf ; imagesc(imhog) ; axis image off ; colormap gray ; vl_demo_print('hog_features') ; % Dalal-Triggs variant cellSize = 8 ; hog = vl_hog(im, cellSize, 'verbose', 'variant', 'dalaltriggs') ; imhog = vl_hog('render', hog, 'verbose', 'variant', 'dalaltriggs') ; figure(3) ; clf ; imagesc(imhog) ; axis image off ; colormap gray ; vl_demo_print('hog_features_dalal_triggs') ; % -------------------------------------------------------------------- % Flip HOG features % -------------------------------------------------------------------- hog = vl_hog(im, cellSize) ; hogFromFlippedImage = vl_hog(im(:,end:-1:1,:), cellSize) ; perm = vl_hog('permutation') ; flippedHog = hog(:,end:-1:1,perm) ; imHog = vl_hog('render', hog) ; imHogFromFlippedImage = vl_hog('render', hogFromFlippedImage) ; imFlippedHog = vl_hog('render', flippedHog) ; figure(4) ; clf ; subplot(1,3,1) ; imagesc(imHog) ; axis image off ; title('HOG features') ; subplot(1,3,2) ; imagesc(imHogFromFlippedImage) ; axis image off ; title('Flipping the image') ; subplot(1,3,3) ; imagesc(imFlippedHog) ; axis image off ; title('Flipping the features') ; colormap gray ; vl_demo_print('hog_flipping',1) ; % -------------------------------------------------------------------- % Other HOG parameters % -------------------------------------------------------------------- figure(5) ; clf ; numOrientationsRange = [3, 4, 5, 9, 21] ; for i = 1:numel(numOrientationsRange) vl_tightsubplot(1, numel(numOrientationsRange), i) ; o = numOrientationsRange(i) ; hog = vl_hog(im, cellSize, 'verbose', 'numOrientations', o) ; imhog = vl_hog('render', hog, 'verbose', 'numOrientations', o) ; imagesc(imhog) ; axis image off ; colormap gray ; end vl_demo_print('hog_num_orientations',.9) ; figure(6) ; clf ; [x,y] = meshgrid(linspace(-1,1,128)) ; im = single(sqrt(x.^2+y.^2)) ; hog1 = vl_hog(im,cellSize,'numOrientations', 4) ; hog2 = vl_hog(im,cellSize,'numOrientations', 4,'bilinearOrientations') ; imhog1 = vl_hog('render',hog1,'numOrientations', 4) ; imhog2 = vl_hog('render',hog2,'numOrientations', 4) ; subplot(1,3,1) ; imagesc(im) ; axis image off ; title('Input image') ; subplot(1,3,2) ; imagesc(imhog1) ; axis image off ; title('Hard orientation assignments') ; subplot(1,3,3) ; imagesc(imhog2) ; axis image off ; title('Soft orientation assignments') ; colormap gray ; vl_demo_print('hog_bilinear_orientations',1) ; vlfeat/toolbox/demo/vl_demo_kdtree_plot.m0000644000175000017500000000201512237004736017560 0ustar dimadimafunction h = vl_demo_kdtree_plot(kdtree, nodeIndex, xlim, ylim) % VL_DEMO_KDTREE_PLOT % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). dim = kdtree.nodes.splitDimension(nodeIndex) ; thresh = kdtree.nodes.splitThreshold(nodeIndex) ; lowerChild = kdtree.nodes.lowerChild(nodeIndex) ; upperChild = kdtree.nodes.upperChild(nodeIndex) ; if dim == 1 xs = [thresh, thresh] ; ys = ylim ; ylimLower = ylim ; ylimUpper = ylim ; xlimLower = [xlim(1) thresh] ; xlimUpper = [thresh xlim(2)] ; else xs = xlim ; ys = [thresh, thresh] ; xlimLower = xlim ; xlimUpper = xlim ; ylimLower = [ylim(1) thresh] ; ylimUpper = [thresh ylim(2)] ; end h = line(xs,ys) ; if lowerChild > 1 h = [h vl_demo_kdtree_plot(kdtree, lowerChild, xlimLower, ylimLower)] ; end if upperChild > 1 h = [h vl_demo_kdtree_plot(kdtree, upperChild, xlimUpper, ylimUpper)] ; end vlfeat/toolbox/demo/vl_demo_kdtree_self.m0000644000175000017500000000156312237004736017542 0ustar dimadimafunction vl_demo_kdtree_self % VL_DEMO_KDTREE_SELF % Demonstrates using a kd-tree to find the pairwise nearest % neighbors in a set of points. % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). randn('state',0) ; rand('state',0) ; % a set of 2D pints X = single(rand(2, 100)) ; % build the kdtree kdtree = vl_kdtreebuild(X) ; % query the kdtree with X itself [i, d] = vl_kdtreequery(kdtree, X, X, 'numneighbors', 2, 'verbose') ; % plot figure(1) ; clf ; vl_plotframe(X, 'ro') ; hold on ; xl = [0, +1] ; yl = [0, +1] ; axis equal ; xlim(xl) ; ylim(yl) ; vl_demo_kdtree_plot(kdtree.trees(1), 1, xl, yl) ; line([X(1,:) ; X(1,i(2,:))], ... [X(2,:) ; X(2,i(2,:))], 'linewidth', 2) ; vl_demo_print('kdtree_self') ; vlfeat/toolbox/demo/vl_demo_svm.m0000644000175000017500000000232312237004745016053 0ustar dimadima% VL_DEMO_SVM Demo: SVM: 2D linear learning function vl_demo_svm y=[];X=[]; % Load training data X and their labels y load('vl_demo_svm_data.mat') Xp = X(:,y==1); Xn = X(:,y==-1); figure plot(Xn(1,:),Xn(2,:),'*r') hold on plot(Xp(1,:),Xp(2,:),'*b') axis equal ; vl_demo_print('svm_training') ; % Parameters lambda = 0.01 ; % Regularization parameter maxIter = 1000 ; % Maximum number of iterations energy = [] ; % Diagnostic function function diagnostics(svm) energy = [energy [svm.objective ; svm.dualObjective ; svm.dualityGap ] ] ; end % Training the SVM energy = [] ; [w b info] = vl_svmtrain(X, y, lambda,... 'MaxNumIterations',maxIter,... 'DiagnosticFunction',@diagnostics,... 'DiagnosticFrequency',1) % Visualisation eq = [num2str(w(1)) '*x+' num2str(w(2)) '*y+' num2str(b)]; line = ezplot(eq, [-0.9 0.9 -0.9 0.9]); set(line, 'Color', [0 0.8 0],'linewidth', 2); vl_demo_print('svm_training_result') ; figure hold on plot(energy(1,:),'--b') ; plot(energy(2,:),'-.g') ; plot(energy(3,:),'r') ; legend('Primal objective','Dual objective','Duality gap') xlabel('Diagnostics iteration') ylabel('Energy') vl_demo_print('svm_energy') ; endvlfeat/toolbox/demo/vl_demo_print.m0000644000175000017500000000355712237004745016414 0ustar dimadimafunction vl_demo_print(varargin) % VL_DEMO_PRINT % VL_DEMO_PRINT(NAME) prints the current figure to the documentation % directory with the specified filename, assuming that the global % variable VL_DEMO_PRINT is defined and non-empty when MATLAB is % started (our using SETENV() from MATLAB). Otherwise the function % flushes the displays and returns. % % VL_DEMO_PRINT(NAME, R) specifies a magnification factor R, setting % the figure width relatively to the page width. If not specified, R % is assumed to be 1/2. % % Remarks:: The figure paper type is set to letter, that has size 8.5 x % 11 inches. When converted for web viewing, images are rasterized % at either 75 or 95 DPI, The documentation system converts images % to bitmap with a resolution of 75 DPI, which makes a letter size % page 637 or 808 pixels large, repsectively. % % In MATLAB font sizes are usually expressed in points, where a % point is a 1/72 inch. Thus a 12pt font sampled at 75 DPI is % about 12.5 pixels high. % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if isempty(getenv('VL_DEMO_PRINT')) drawnow ; return ; end if isa(varargin{1}, 'double') fig = varargin{1} ; varargin(1) = [] ; else fig = gcf ; end name = varargin{1} ; if length(varargin) < 2 figurePaperSize = 0.5 ; else figurePaperSize = varargin{2} ; end vl_printsize(fig, figurePaperSize) ; figDir = fullfile(vl_root,'doc','demo') ; if ~ exist(figDir, 'dir') mkdir(figDir) ; end if 0 filePath = fullfile(figDir, [name '.eps']) ; print(fig, '-depsc2', filePath) ; else filePath = fullfile(figDir, [name '.jpg']) ; print(fig, '-djpeg95', filePath, '-r95') ; end fprintf('%s: wrote file ''%s''\n', mfilename, filePath) ; vlfeat/toolbox/demo/vl_demo_mser_cmd.m0000644000175000017500000000246512237004736017046 0ustar dimadima% VL_DEMO_MSER_CMD Demo: MSER: test command line utility pfx = fullfile(vl_root,'results') ; if ~ exist(pfx, 'dir') mkdir(pfx) ; end p_img = fullfile(vl_root,'data','spots.jpg') ; p_pgm = fullfile(pfx,'spots.pgm') ; p_sed = fullfile(pfx,'spots.mser') ; p_frm = fullfile(pfx,'spots.frame') ; p_tmp = fullfile(pfx,'spots.tmp') ; I = imread(p_img) ; I = uint8(rgb2gray(I)) ; imwrite(I,p_pgm,'pgm') ; % -------------------------------------------------------------------- % Test cmd % -------------------------------------------------------------------- [err,msg] = vl_demo_cmd('mser',[p_pgm ... ' --seeds=ascii://' p_sed ... ' --frames=ascii://' p_frm ... ' --max-variation=0.2 ' ... ' --min-diversity=0.7 ' ... ' --delta=10 ' ... ' --verbose '] ) ; r_ = load(p_sed,'-ASCII')'; % note: bright-on-dark region seeds are negative r_ = r_ + sign(r_); % add one for matlab indexing f_ = load(p_frm,'-ASCII')' ; f_(1:2,:) = f_(1:2,:) + 1 ; [r,f] = vl_mser(I','MinDiversity',0.7,'MaxVariation',0.2,'Delta',10) ; if(any(r ~= r_) | any(any(abs(f - f_)>1e-5))) warning('demo_mser_cmd: failed consistency test of commmand line and MATLAB drivers.') ; end vlfeat/toolbox/demo/vl_demo_slic.m0000644000175000017500000000301712237004736016201 0ustar dimadima% VL_DEMO_SLICT Demo: SLIC superpixels prefix = fullfile(vl_root,'figures','demo') ; randn('state',0) ; rand('state',0) ; figure(1) ; clf ; % -------------------------------------------------------------------- % Load a figure % -------------------------------------------------------------------- im = imread(fullfile(vl_root,'data','roofs1.jpg')) ; im = im2single(im) ; im = im(1:128,end-128+1:end,:) ; figure(1) ; clf ; image(im) ; axis equal off tight ; vl_demo_print('slic_image') ; % -------------------------------------------------------------------- % Create various SLIC segmentations % -------------------------------------------------------------------- regionSizes = [10 30] ; regularizers = [0.01 0.1 1] ; figure(2) ; clf ; for i = 1:numel(regionSizes) for j = 1:numel(regularizers) regionSize = regionSizes(i) ; regularizer = regularizers(j) ; segments = vl_slic(im, regionSize, regularizer, 'verbose') ; % overaly segmentation [sx,sy]=vl_grad(double(segments), 'type', 'forward') ; s = find(sx | sy) ; imp = im ; imp([s s+numel(im(:,:,1)) s+2*numel(im(:,:,1))]) = 0 ; vl_tightsubplot(numel(regionSizes),numel(regularizers), (i-1)*numel(regularizers) + j) ; imagesc(imp) ; axis image off ; hold on ; text(5,5,sprintf('regionSize:%.2g\nregularizer:%.2g', regionSize, regularizer), ... 'Background', 'white','VerticalAlignment','top') end end vl_demo_print('slic_segmentation') ; vlfeat/toolbox/demo/vl_demo_cmd.m0000644000175000017500000000103412237004736016007 0ustar dimadimafunction [err,msg] = vl_demo_cmd(name, args) % DEMO_CMD: Demo: Command line utility ext = '' ; switch mexext case 'mexmac' arch = 'mac' ; case 'mexmaci' arch = 'maci' ; case 'mexmaci64' arch = 'maci64'; case 'mexglx' arch = 'glnx86' ; case 'mexa64' arch = 'glnxa64' ; case 'dll' arch = 'win32' ; ext = '.exe' ; case 'mexw32' arch = 'win32' ; ext ='.exe' ; case 'mexw64' arch = 'win64' ; ext ='.exe' ; end cmd = fullfile(vl_root,'bin',arch,[name ext]) ; str = ['"' cmd '" ' args] ; disp(str); [err,msg] = system(str) ; vlfeat/toolbox/demo/vl_demo_imdisttf.m0000644000175000017500000000205512237004736017073 0ustar dimadima% VL_DEMO_IMDISTTF Demonstrates image distance transform % load image im = imread(fullfile(vl_root, 'data', 'roofs1.jpg')) ; im = im(100:200,100:200,:) ; imSize = [size(im,1) size(im,2)] ; % creates an edge map edges = zeros(imSize) + inf; edges(edge(rgb2gray(im), 'canny')) = 0 ; % compute distance transform [distanceTransform, neighbors] = vl_imdisttf(single(edges)) ; % plot [u,v] = meshgrid(1:imSize(2),1:imSize(1)) ; [v_,u_] = ind2sub(imSize, neighbors) ; % avoid cluttering the plot too much u = u(1:3:end,1:3:end) ; v = v(1:3:end,1:3:end) ; u_ = u_(1:3:end,1:3:end) ; v_ = v_(1:3:end,1:3:end) ; figure(1) ; clf ; imagesc(im) ; axis off image ; figure(2) ; clf ; imagesc(edges) ; axis off image ; figure(3) ; clf ; imagesc(edges) ; axis off image ; hold on ; h = quiver(u,v,u_-u,v_-v,0) ; colormap gray ; figure(4) ; clf ; imagesc(sqrt(distanceTransform)) ; axis off image ; figure(1) ; vl_demo_print('imdisttf_src') ; figure(2) ; vl_demo_print('imdisttf_edge') ; figure(3) ; vl_demo_print('imdisttf_neigh') ; figure(4) ; vl_demo_print('imdisttf_dist') ; vlfeat/toolbox/demo/vl_demo_plots_rank.m0000644000175000017500000000136012237004736017422 0ustar dimadima%VL_DEMO_PLOTS_RANK Demonstates VL_ROC, VL_DET, VL_PR randn('state',0) ; numPos = 20 ; numNeg = 100 ; labels = [ones(1, numPos) -ones(1,numNeg)] ; scores = randn(size(labels)) + labels ; figure(1) ; clf ; vl_roc(labels,scores) ; vl_demo_print(1,'plots_rank_roc', 0.5) ; figure(2) ; clf ; subplot(2,2,1) ; vl_roc(labels,scores, 'plot', 'tntp') ; subplot(2,2,2) ; vl_roc(labels,scores, 'plot', 'tptn') ; subplot(2,2,3) ; vl_roc(labels,scores, 'plot', 'fptp') ; subplot(2,2,4) ; vl_roc(labels,scores, 'plot', 'fpfn') ; vl_figaspect(1) ; vl_demo_print(2,'plots_rank_roc_variants', 1) ; figure(3) ; clf ; vl_det(labels,scores) ; vl_demo_print(3,'plots_rank_det', 0.5) ; figure(4) ; clf ; vl_pr(labels,scores) ; vl_demo_print(4,'plots_rank_pr', 0.5) ; vlfeat/toolbox/demo/vl_demo_svm_data.mat0000644000175000017500000000151712237004745017375 0ustar dimadimaMATLAB 5.0 MAT-file, Platform: GLNX86, Created on: Mon Mar 11 14:05:30 2013 IM2xœãc``è`d``Ò X¡| Ãj0ÍÈP ¤™8ŒÂðÿ Ë,­ãxœeV=ˆÔ@‚¢[Xm­íY[KJë³²ØÚÚú¬¯¾Z[« WšjàR {,,š\r¹ìîql£õÍdæ=™—Y–áñÍ÷¾ï{óóåE’$õ,IžÚùYâg7žüØþ¿Ûÿ#ûû`ççöa×ÿúéÆùúÅ2ýb7âo„_ìe੉ý~mD¯5±¯w%þëF=±=œ'Ñ ]øs#ü’O\G™Æ:Àž Î&õÄz—r ±çRÏ!àC8/÷ĸÀ8ßÀ8¯À~„¯¾NøZák„¯ÿ¬_K¼•ð/…¯ÿRÖbÏgáœÝ§P0è;t‚?t?tB|è„üˆCþÄ¡>âP?qÐGøjYß+þÄë…o¾­ð“:Ä8=x^©³øáûäQÏØoI =…GÎEE yo&ñå}z–ÄØ/øígþ›õígñ‡õû÷¿¦¿ï5õÃþB_ß_®©¿ïG×¢GK»ïg-ý}¿kÉïûaÇø¾_vÌçù‡þ"ú0?ƒ|â{ÕOîI¼?[ÉOŒ{ïïŽõÅ8#F}b7âOŒúb{Éw!ÎïÎAÞƒA¾À¨õC˜¯¾NøZák„¯ÿ¬_K¼•ð/…¯ÿRÖbÏgÒ‡ô; ÷ßYèÿ¿›‚Nò]€>T‡ü‰C}Äè/Àè?1_-ëáoÅ¿“x½ð ·%~¡o™_vlfeat/toolbox/demo/vl_demo_kmeans_2d.m0000644000175000017500000000057212237004745017115 0ustar dimadimaN = 10000 ; dimension = 2 ; data = rand(dimension,N) ; numClusters = 20 ; cc=hsv(numClusters); [centers, assignments] = vl_kmeans(data, numClusters); figure hold on for i=1:numClusters plot(data(1,assignments == i),data(2,assignments == i),'.','color',cc(i,:)); end plot(centers(1,:),centers(2,:),'k.','MarkerSize',20) axis off vl_demo_print('kmeans_2d_rand',0.6);vlfeat/toolbox/demo/vl_demo_kdtree_ann.m0000644000175000017500000000254412237004736017365 0ustar dimadimafunction vl_demo_kdtree_ann % VL_DEMO_KDTREE % Demonstrates the use of a kd-tree for approximate nearest neighbor % (ANN) queries. % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). randn('state',0) ; rand('state',0) ; % Generate some 2D data and a query point X = rand(2, 100) ; Q = rand(2,1) ; % Buld a kd-tree kdtree = vl_kdtreebuild(X) ; % Query with increasing accuracy maxNumComparisonRange = [1 10 20 30] ; for t = [1 2 3 4] figure(t) ; clf ; vl_plotframe(X, 'ro') ; hold on ; xl = [.2, .8] ; yl = [.1, .7] ; xlim(xl) ; ylim(yl) ; % vl_demo_kdtree_plot(kdtree, 1, xl, yl) ; [i, d] = vl_kdtreequery (kdtree, X, Q, ... 'NumNeighbors', 10, ... 'MaxComparisons', maxNumComparisonRange(t), ... 'Verbose') ; vl_plotframe(Q,'b*','markersize',10) ; for k=1:length(i) if i(k) == 0, continue ; end vl_plotframe([Q ; sqrt(d(k))],'b-','linewidth',1) ; vl_plotframe(X(:, i(k)), 'bx','markersize',15) ; end title(sprintf('10 ANNs with at most %d comparisions', maxNumComparisonRange(t))) ; axis square ; set(gca,'xtick',[],'ytick',[]) ; vl_demo_print(t, sprintf('kdtree_ann_%d', t)) ; end vlfeat/toolbox/demo/vl_demo_aib.m0000644000175000017500000000556012237004736016007 0ustar dimadimafunction vl_demo_aib % VL_DEMO_AIB Test Agglomerative Information Bottleneck (AIB) D = 4 ; K = 20 ; randn('state',0) ; rand('state',0) ; X1 = randn(2,300) ; X1(1,:) = X1(1,:) + 2 ; X2 = randn(2,300) ; X2(1,:) = X2(1,:) - 2 ; X3 = randn(2,300) ; X3(2,:) = X3(2,:) + 2 ; figure(1) ; clf ; hold on ; vl_plotframe(X1,'color','r') ; vl_plotframe(X2,'color','g') ; vl_plotframe(X3,'color','b') ; axis equal ; xlim([-4 4]); ylim([-4 4]); axis off ; rectangle('position',D*[-1 -1 2 2]) vl_demo_print('aib_basic_data', .6) ; C = 1:K*K ; Pcx = zeros(3,K*K) ; f1 = quantize(X1,D,K) ; f2 = quantize(X2,D,K) ; f3 = quantize(X3,D,K) ; Pcx(1,:) = vl_binsum(Pcx(1,:), ones(size(f1)), f1) ; Pcx(2,:) = vl_binsum(Pcx(2,:), ones(size(f2)), f2) ; Pcx(3,:) = vl_binsum(Pcx(3,:), ones(size(f3)), f3) ; Pcx = Pcx / sum(Pcx(:)) ; [parents, cost] = vl_aib(Pcx) ; cutsize = [K*K, 10, 3, 2, 1] ; for i=1:length(cutsize) [cut,map,short] = vl_aibcut(parents, cutsize(i)) ; parents_cut(short > 0) = parents(short(short > 0)) ; C = short(1:K*K+1) ; [drop1,drop2,C] = unique(C) ; figure(i+1) ; clf ; plotquantization(D,K,C) ; hold on ; %plottree(D,K,parents_cut) ; axis equal ; axis off ; title(sprintf('%d clusters', cutsize(i))) ; vl_demo_print(sprintf('aib_basic_clust_%d',i),.6) ; end % -------------------------------------------------------------------- function f = quantize(X,D,K) % -------------------------------------------------------------------- d = 2*D / K ; j = round((X(1,:) + D) / d) ; i = round((X(2,:) + D) / d) ; j = max(min(j,K),1) ; i = max(min(i,K),1) ; f = sub2ind([K K],i,j) ; % -------------------------------------------------------------------- function [i,j] = plotquantization(D,K,C) % -------------------------------------------------------------------- hold on ; cl = [[.3 .3 .3] ; .5*hsv(max(C)-1)+.5] ; d = 2*D / K ; for i=0:K-1 for j=0:K-1 patch(d*(j+[0 1 1 0])-D, ... d*(i+[0 0 1 1])-D, ... cl(C(j*K+i+1),:)) ; end end % -------------------------------------------------------------------- function h = plottree(D,K,parents) % -------------------------------------------------------------------- d = 2*D / K ; C = zeros(2,2*K*K-1)+NaN ; N = zeros(1,2*K*K-1) ; for i=0:K-1 for j=0:K-1 C(:,j*K+i+1) = [d*j-D; d*i-D]+d/2 ; N(:,j*K+i+1) = 1 ; end end for i=1:length(parents) p = parents(i) ; if p==0, continue ; end; if all(isnan(C(:,i))), continue; end if all(isnan(C(:,p))) C(:,p) = C(:,i) / N(i) ; else C(:,p) = C(:,p) + C(:,i) / N(i) ; end N(p) = N(p) + 1 ; end C(1,:) = C(1,:) ./ N ; C(2,:) = C(2,:) ./ N ; xt = zeros(3, 2*length(parents)-1)+NaN ; yt = zeros(3, 2*length(parents)-1)+NaN ; for i=1:length(parents) p = parents(i) ; if p==0, continue ; end; xt(1,i) = C(1,i) ; xt(2,i) = C(1,p) ; yt(1,i) = C(2,i) ; yt(2,i) = C(2,p) ; end h=line(xt(:),yt(:),'linestyle','-','marker','.','linewidth',3) ; vlfeat/toolbox/demo/vl_demo_alldist.m0000644000175000017500000001252412237004736016706 0ustar dimadimafunction vl_demo_alldist % numRepetitions = 3 ; numDimensions = 1000 ; numSamplesRange = [300] ; settingsRange = {{'alldist2', 'double', 'l2', }, ... {'alldist', 'double', 'l2', 'nosimd'}, ... {'alldist', 'double', 'l2' }, ... {'alldist2', 'single', 'l2', }, ... {'alldist', 'single', 'l2', 'nosimd'}, ... {'alldist', 'single', 'l2' }, ... {'alldist2', 'double', 'l1', }, ... {'alldist', 'double', 'l1', 'nosimd'}, ... {'alldist', 'double', 'l1' }, ... {'alldist2', 'single', 'l1', }, ... {'alldist', 'single', 'l1', 'nosimd'}, ... {'alldist', 'single', 'l1' }, ... {'alldist2', 'double', 'chi2', }, ... {'alldist', 'double', 'chi2', 'nosimd'}, ... {'alldist', 'double', 'chi2' }, ... {'alldist2', 'single', 'chi2', }, ... {'alldist', 'single', 'chi2', 'nosimd'}, ... {'alldist', 'single', 'chi2' }, ... {'alldist2', 'double', 'hell', }, ... {'alldist', 'double', 'hell', 'nosimd'}, ... {'alldist', 'double', 'hell' }, ... {'alldist2', 'single', 'hell', }, ... {'alldist', 'single', 'hell', 'nosimd'}, ... {'alldist', 'single', 'hell' }, ... {'alldist2', 'double', 'kl2', }, ... {'alldist', 'double', 'kl2', 'nosimd'}, ... {'alldist', 'double', 'kl2' }, ... {'alldist2', 'single', 'kl2', }, ... {'alldist', 'single', 'kl2', 'nosimd'}, ... {'alldist', 'single', 'kl2' }, ... {'alldist2', 'double', 'kl1', }, ... {'alldist', 'double', 'kl1', 'nosimd'}, ... {'alldist', 'double', 'kl1' }, ... {'alldist2', 'single', 'kl1', }, ... {'alldist', 'single', 'kl1', 'nosimd'}, ... {'alldist', 'single', 'kl1' }, ... {'alldist2', 'double', 'kchi2', }, ... {'alldist', 'double', 'kchi2', 'nosimd'}, ... {'alldist', 'double', 'kchi2' }, ... {'alldist2', 'single', 'kchi2', }, ... {'alldist', 'single', 'kchi2', 'nosimd'}, ... {'alldist', 'single', 'kchi2' }, ... {'alldist2', 'double', 'khell', }, ... {'alldist', 'double', 'khell', 'nosimd'}, ... {'alldist', 'double', 'khell' }, ... {'alldist2', 'single', 'khell', }, ... {'alldist', 'single', 'khell', 'nosimd'}, ... {'alldist', 'single', 'khell' }, ... } ; %settingsRange = settingsRange(end-5:end) ; styles = {} ; for marker={'x','+','.','*','o'} for color={'r','g','b','k','y'} styles{end+1} = {'color', char(color), 'marker', char(marker)} ; end end for ni=1:length(numSamplesRange) for ti=1:length(settingsRange) tocs = [] ; for ri=1:numRepetitions rand('state',ri) ; randn('state',ri) ; numSamples = numSamplesRange(ni) ; settings = settingsRange{ti} ; [tocs(end+1), D] = run_experiment(numDimensions, ... numSamples, ... settings) ; end means(ni,ti) = mean(tocs) ; stds(ni,ti) = std(tocs) ; if mod(ti-1,3) == 0 D0 = D ; else err = max(abs(D(:)-D0(:))) ; fprintf('err %f\n', err) ; if err > 1, keyboard ; end end end end if 0 figure(1) ; clf ; hold on ; numStyles = length(styles) ; for ti=1:length(settingsRange) si = mod(ti - 1, numStyles) + 1 ; h(ti) = plot(numSamplesRange, means(:,ti), styles{si}{:}) ; leg{ti} = sprintf('%s ', settingsRange{ti}{:}) ; errorbar(numSamplesRange, means(:,ti), stds(:,ti), 'linestyle', 'none') ; end end for ti=1:length(settingsRange) leg{ti} = sprintf('%s ', settingsRange{ti}{:}) ; end figure(1) ; clf ; barh(means(end,:)) ; set(gca,'ytick', 1:length(leg), 'yticklabel', leg,'ydir','reverse') ; xlabel('Time [s]') ; function [elaps, D] = run_experiment(numDimensions, numSamples, settings) distType = 'l2' ; algType = 'alldist' ; classType = 'double' ; useSimd = true ; for si=1:length(settings) arg = settings{si} ; switch arg case {'l1', 'l2', 'chi2', 'hell', 'kl2', 'kl1', 'kchi2', 'khell'} distType = arg ; case {'alldist', 'alldist2'} algType = arg ; case {'single', 'double'} classType = arg ; case 'simd' useSimd = true ; case 'nosimd' useSimd = false ; otherwise assert(false) ; end end X = rand(numDimensions, numSamples) ; X(X < .3) = 0 ; switch classType case 'double' case 'single' X = single(X) ; end vl_simdctrl(double(useSimd)) ; switch algType case 'alldist' tic ; D = vl_alldist(X, distType) ; elaps = toc ; case 'alldist2' tic ; D = vl_alldist2(X, distType) ; elaps = toc ; end vlfeat/toolbox/demo/vl_demo_kmeans_ann_speed.m0000644000175000017500000000400312237004745020535 0ustar dimadima% VL_DEMO_KMEANS_ANN_SPEED Compares Lloyd's, Elkan, and ANN k-means numCenters = 200 ; numTrials = 3 ; maxNumIterations = 10 ; initialization = 'randsel' ; %initialization = 'plusplus'; distance = 'l2' ; %% Create an example dataset dimension = 32 ; numData = 50000 ; X = randn(dimension,numData); %% Run various k-means algorithms on the data algorithms = {'Lloyd','Elkan','ANN 1/4','ANN 1/10','ANN 1/50' } ; options = {{'Algorithm', 'Lloyd'}, ... {'Algorithm', 'Elkan'}, ... {'Algorithm', 'ANN', 'MaxNumComparisons', ceil(numCenters / 4)}, ... {'Algorithm', 'ANN', 'MaxNumComparisons', ceil(numCenters / 10)}, ... {'Algorithm', 'ANN', 'MaxNumComparisons', ceil(numCenters / 50)}} ; numCpus = [1 0] ; clear time energy ; for n = 1:2 for a = 1:numel(algorithms) for t = 1:numTrials vl_threads(numCpus(n)) ; start = tic ; [C, A, E] = vl_kmeans(X, ... numCenters, 'Verbose', ... 'Distance', distance, ... 'MaxNumIterations', maxNumIterations, ... options{a}{:}) ; if vl_isoctave() time(t,a,n) = (tic() - start) / 1e6 ; else time(t,a,n) = toc(start) ; end energy(t,a,n) = E ; end end end % average over tirals time = squeeze(mean(time,1)) ; energy = squeeze(mean(energy,1)) ; figure(1) ; clf ; for n=1:2 if n == 1 str = 'Serial' ; else str = 'Parallel' ; end subplot(3,2,(n-1)+1) ; bar(time(:,n)) ; set(gca,'XTickLabel',algorithms); set(gca,'FontSize',8), xlabel('Algorithm'); ylabel('Time [s]'); title(str) ; subplot(3,2,(n-1)+3) ; bar(energy(:,n)); set(gca,'XTickLabel',algorithms); set(gca,'FontSize',8), xlabel('Algorithm'); ylabel('Energy'); title(str) ; subplot(3,2,(n-1)+5) ; bar(time(1,1)./time(:,n)) ; set(gca,'XTickLabel',algorithms); set(gca,'FontSize',8), xlabel('Algorithm'); ylabel('Speedup'); title(str) ; end vl_demo_print('kmeans_speed',1); vlfeat/toolbox/demo/vl_demo_gmm_2d_rand.m0000644000175000017500000000132712237004745017422 0ustar dimadima% VL_DEMO_GMM_2D_RAND Demonstrate clustering points with a GMM %% Create a random set of points numPoints = 5000 ; dimension = 2 ; numClusters = 20 ; data = rand(dimension, numPoints) ; %% Learn a GMM: fit the points at maximum likelihood vl_twister('state',0) ; [means, covariances, priors] = ... vl_gmm(data, numClusters, ... 'MaxNumIterations', 1000, ... 'Verbose') ; figure(1) ; clf ; hold on plot(data(1,:),data(2,:),'r.'); for i=1:numClusters vl_plotframe([means(:,i)' covariances(1,i) 0 covariances(2,i)], ... 'Color','blue','LineWidth',2); end title('GMM: Gaussian mixture initialized choosing random points') ; axis equal ; axis off ; vl_demo_print('gmm_2d_rand',0.6); vlfeat/toolbox/demo/vl_demo_gmm_3d.m0000644000175000017500000000470012237004745016415 0ustar dimadimafunction vl_demo_gmm_3d % VL_DEMO_GMM_3D Show how to initialize GMM learning with a custom set of modes %% Initialize points clustered in 3D numClusters = 5 ; dimension = 3 ; cc = hsv(numClusters) ; randn('state',0) ; X = [] ; for i=1:numClusters delta = 5*[i;0;0] ; %num = ceil(1000 / i) ; num = 500 ; s = diag([1,i, 1]) ; X = [X, bsxfun(@plus, s*randn(dimension, num), delta)] ; end %% Cluster using KMeans (ANN algorithm) elapsedKMEANS = tic ; vl_twister('state',0) ; [initMeans, assignments] = vl_kmeans(X, numClusters, ... 'Verbose', ... 'Algorithm', 'ann', ... 'MaxNumIterations', 10, ... 'Distance', 'l2', ... 'NumTrees', 3, ... 'MaxNumComparisons', 10); elapsedKMEANS = toc(elapsedKMEANS) ; fprintf('\n ---------- \n KMeans time - %f \n ---------- \n\n',elapsedKMEANS) ; %% Create initial GMM modes from KMeans clusters initSigmas = zeros(dimension,numClusters); initWeights = zeros(1,numClusters); figure(1) ; clf ; subplot(1,2,1) ; hold on ; for i=1:numClusters Xk = X(:,assignments==i) ; initWeights(i) = size(Xk,2) / numClusters ; plot3(Xk(1,:),Xk(2,:),Xk(3,:),'.','color',cc(i,:)) ; if size(Xk,1) == 0 || size(Xk,2) == 0 initSigmas(:,i) = diag(cov(X')); else initSigmas(:,i) = diag(cov(Xk')); end end axis equal ; xlabel('x') ; ylabel('y') ; zlabel('z') ; title('GMM: KMeans intialization') ; %% Fit a GMM model to the maximum likelihood elapsedGMM = tic ; [means,sigmas,weights,ll,posteriors] = vl_gmm(X, numClusters, ... 'Initialization','custom', ... 'InitMeans',initMeans, ... 'InitCovariances',initSigmas, ... 'InitPriors',initWeights, ... 'Verbose', ... 'MaxNumIterations', 100) ; elapsedGMM = toc(elapsedGMM); fprintf('\n ---------- \n GMM time - %f \n ---------- \n',elapsedGMM) ; subplot(1,2,2) ; hold on ; [~,idx] = max(posteriors,[],1); for i=1:numClusters plot3(X(1,idx == i),X(2,idx == i),X(3,idx == i),'.','color',cc(i,:)) ; end axis equal ; xlabel('x') ; ylabel('y') ; zlabel('z') ; title('GMM: Estimated Gaussian mixture') ; vlfeat/toolbox/demo/vl_demo_mser_basic.m0000644000175000017500000000507212237004745017361 0ustar dimadima% VL_DEMO_MSER_BASIC Demo: MSER: basic functionality pfx = fullfile(vl_root,'figures','demo') ; randn('state',0) ; rand('state',0) ; figure(1) ; clf ; % -------------------------------------------------------------------- % Load a figure % -------------------------------------------------------------------- I = imread(fullfile(vl_root,'data','spots.jpg')) ; image(I) ; colormap gray ; axis equal ; axis off ; axis tight ; vl_demo_print('mser_basic_0') ; % -------------------------------------------------------------------- % Convert the to required format % -------------------------------------------------------------------- I = uint8(rgb2gray(I)) ; clf ; imagesc(I) ; colormap(gray(256)) ; axis equal ; axis off ; axis tight ; % -------------------------------------------------------------------- % Run VL_MSER % -------------------------------------------------------------------- [r,f] = vl_mser(I,'MinDiversity',0.7,'MaxVariation',0.2,'Delta',10) ; % compute regions mask M = zeros(size(I)) ; for x=r' s = vl_erfill(I,x) ; M(s) = M(s) + 1; end % adjust convention f = vl_ertr(f) ; figure(1) ; hold on ; h1 = vl_plotframe(f) ; set(h1,'color','y','linewidth',3) ; h2 = vl_plotframe(f) ; set(h2,'color','k','linewidth',1) ; vl_demo_print('mser_basic_frames') ; figure(2) ; clf ; imagesc(I) ; hold on ; colormap(gray(256)) ; if vl_isoctave() [c,h]=contour(M,(0:max(M(:)))+.5,'y','linewidth',3) ; else [c,h]=contour(M,(0:max(M(:)))+.5) ; set(h,'color','y','linewidth',3) ; end axis equal ; axis off ; vl_demo_print('mser_basic_contours') ; % -------------------------------------------------------------------- % Run VL_MSER again % -------------------------------------------------------------------- [r,f] = vl_mser(I,'MinDiversity',0.7,'MaxVariation',0.2,... 'Delta',10,'BrightOnDark',1,'DarkOnBright',0) ; % adjust convention f = vl_ertr(f) ; % compute regions mask M = zeros(size(I)) ; for x=r' s = vl_erfill(I,x) ; M(s) = M(s) + 1; end figure(1) ; hold on ; h1 = vl_plotframe(f) ; set(h1,'color','g','linewidth',3) ; h2 = vl_plotframe(f) ; set(h2,'color','k','linewidth',1) ; vl_demo_print('mser_basic_frames_both') ; figure(2) ; if vl_isoctave() [c,h]=contour(M,(0:max(M(:)))+.5,'y','linewidth',3) ; else [c,h]=contour(M,(0:max(M(:)))+.5) ; set(h,'color','g','linewidth',3) ; end hold on ; axis equal ; axis off ; vl_demo_print('mser_basic_contours_both') ; vlfeat/toolbox/demo/vl_demo_kdtree_forest.m0000644000175000017500000000276212237004736020115 0ustar dimadimafunction vl_demo_kdtree_forest % VL_DEMO_KDTREE % Demonstrates the construction of a forest of randomized % kd-trees. % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). % numer of trees in the forest numTrees = 4 ; randn('state',0) ; rand('state',0) ; % 2D data X and a query point Q = single(rand(2,1)) ; X = single(rand(2, 100)) ; % build the forest kdforest = vl_kdtreebuild (X, ... 'verbose', ... 'numtrees', numTrees) ; % plot each tree of the forest for t=1:numTrees figure(t) ; clf ; vl_plotframe(X, 'ro') ; hold on ; xl = [0, +1] ; yl = [0, +1] ; xlim(xl) ; ylim(yl) ; axis square ; h = vl_demo_kdtree_plot(kdforest.trees(t), 1, xl, yl) ; title(sprintf('Tree number %d', t)) ; set(gca,'xtick',[],'ytick',[]) ; vl_demo_print(t,sprintf('kdtree_forest_tree_%d', t)) ; end % query [i, d] = vl_kdtreequery (kdforest, X, Q, 'numneighbors', 10, 'verbose') ; % show query and return figure(5) ; clf ; vl_plotframe(X, 'ro') ; hold on ; vl_plotframe(Q,'b*') ; for k=1:length(i) vl_plotframe([Q ; sqrt(d(k))],'b:','linewidth',1) ; vl_plotframe(X(:, i(k)), 'bx') ; end xlim([0 1]) ; ylim([0 1]) ; axis square ; set(gca,'xtick',[],'ytick',[]) ; vl_demo_print(5,'kdtree_forest_query') ; end vlfeat/toolbox/mser/0000755000175000017500000000000012237042171013400 5ustar dimadimavlfeat/toolbox/mser/vl_ertr.m0000644000175000017500000000074312237004736015244 0ustar dimadimafunction f = vl_ertr(f) ; % VL_ERTR Transpose exremal regions frames % F = VL_ERTR(F) transposes the frames F as returned by VL_MSER(). This % conversion is required as the VL_MSER algorithm considers the column % index I as the frist image index, while according standard image % convention the first coordinate is the abscissa X. % % See also: VL_MSER(), VL_HELP(). if size(f,1) ~= 5 error('F is not in the right format') ; end % adjust convention f = f([2 1 5 4 3],:) ; vlfeat/toolbox/mser/vl_mser.m0000644000175000017500000000554012237004736015236 0ustar dimadima% VL_MSER Maximally Stable Extremal Regions % R=VL_MSER(I) computes the Maximally Stable Extremal Regions (MSER) % [1] of image I with stability threshold DELTA. I is any array of % class UINT8. R is a vector of region seeds. % % A (maximally stable) extremal region is just a connected component % of one of the level sets of the image I. An extremal region can % be recovered from a seed X as the connected component of the level % set {Y: I(Y) <= I(X)} which contains the pixel o index X. % % The function supports images of arbitrary dimension D. % % [R,F]=VL_MSER(...) also returns ellipsoids F fitted to the regions. % Each column of F describes an ellipsoid; F(1:D,i) is the center of % the elliposid and F(D:end,i) are the independent elements of the % co-variance matrix of the ellipsoid. % % Ellipsoids are computed according to the same reference frame of I % seen as a matrix. This means that the first coordinate spans the % first dimension of I. % % Notice that for 2-D images usually the opposite convention is used % (i.e. the first coordinate is the x-axis, which corresponds to the % column index). Thus, if the function VL_PLOTFRAME() is used to plot % the ellipses, the frames F should be `transposed' as in F = F([2 % 1 5 4 3],:). VL_ERTR() exists for this purpose. % % VL_MSER(I,'Option'[,Value]...) accepts the following options % % Delta:: [5] % Set the DELTA parameter of the VL_MSER algorithm. Roughly % speaking, the stability of a region is the relative variation % of the region area when the intensity is changed of +/- % Delta/2. % % MaxArea:: [0.75] % Set the maximum area (volume) of the regions relative to % the image domain area (volume). % % MinArea:: [3 / numPixels] % Set the minimum area (volume) of the regions relative to % the image domain area (volume). % % MaxVariation:: [0.25] % Set the maximum variation (absolute stability score) of the % regions. % % MinDiversity:: [0.2] % Set the minimum diversity of the region. When the relative % area variation of two nested regions is below this threshold, % then only the most stable one is selected. % % BrightOnDark:: [1] % Detect bright-on-dark MSERs. This corresponds to MSERs of the % inverted image. % % DarkOnBright:: [1] % Detect dark-on-bright MSERs. This corresponds to MSERs of the % original image. % % Verbose:: % Be verbose. % % REFERENCES:: % [1] J. Matas, O. Chum, M. Urban, and T. Pajdla, "Robust wide % baseline stereo from maximally stable extremal regions," in % Proc. BMVC, 2002. % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/mser/vl_mser.c0000644000175000017500000002235012237004736015222 0ustar dimadima/** @file mser.c ** @author Andrea Vedaldi ** @brief MSER MEX driver **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include enum { opt_delta = 0, opt_max_area, opt_min_area, opt_max_variation, opt_min_diversity, opt_bright_on_dark, opt_dark_on_bright, opt_verbose } ; vlmxOption options [] = { {"Delta", 1, opt_delta }, {"MaxArea", 1, opt_max_area }, {"MinArea", 1, opt_min_area }, {"MaxVariation", 1, opt_max_variation }, {"MinDiversity", 1, opt_min_diversity }, {"BrightOnDark", 1, opt_bright_on_dark }, {"DarkOnBright", 1, opt_dark_on_bright }, {"Verbose", 0, opt_verbose }, {0, 0, 0 } } ; /** @brief MEX entry point */ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum {IN_I = 0, IN_END } ; enum {OUT_SEEDS = 0, OUT_FRAMES } ; int verbose = 0 ; int opt ; int next = IN_END ; mxArray const *optarg ; /* algorithm parameters */ double delta = -1 ; double max_area = -1 ; double min_area = -1 ; double max_variation = -1 ; double min_diversity = -1 ; int bright_on_dark = 1 ; int dark_on_bright = 1 ; int nel ; int ndims ; mwSize const* dims ; vl_mser_pix const *data ; vl_mser_pix *datainv = 0; VlMserFilt *filt, *filtinv ; vl_uint const *regions = 0 ; vl_uint const *regionsinv = 0 ; float const *frames = 0; float const *framesinv = 0 ; int nregions = 0, nregionsinv = 0; int nframes = 0, nframesinv = 0; int i, j, dof = 0 ; mwSize odims [2] ; double *pt ; VL_USE_MATLAB_ENV ; /** ----------------------------------------------------------------- ** Check the arguments ** -------------------------------------------------------------- */ if (nin < 1) { mexErrMsgTxt("At least one input argument is required.") ; } if (nout > 2) { mexErrMsgTxt("Too many output arguments."); } if(mxGetClassID(in[IN_I]) != mxUINT8_CLASS) { mexErrMsgTxt("I must be of class UINT8") ; } /* get dimensions */ nel = mxGetNumberOfElements(in[IN_I]) ; ndims = mxGetNumberOfDimensions(in[IN_I]) ; dims = mxGetDimensions(in[IN_I]) ; data = mxGetData(in[IN_I]) ; while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { switch (opt) { case opt_verbose : ++ verbose ; break ; case opt_delta : if (!vlmxIsPlainScalar(optarg) || (delta = *mxGetPr(optarg)) < 0) { mexErrMsgTxt("'Delta' must be non-negative.") ; } break ; case opt_max_area : if (!vlmxIsPlainScalar(optarg) || (max_area = *mxGetPr(optarg)) < 0 || max_area > 1) { mexErrMsgTxt("'MaxArea' must be in the range [0,1].") ; } break ; case opt_min_area : if (!vlmxIsPlainScalar(optarg) || (min_area = *mxGetPr(optarg)) < 0 || min_area > 1) { mexErrMsgTxt("'MinArea' must be in the range [0,1].") ; } break ; case opt_max_variation : if (!vlmxIsPlainScalar(optarg) || (max_variation = *mxGetPr(optarg)) < 0) { mexErrMsgTxt("'MaxVariation' must be non negative.") ; } break ; case opt_min_diversity : if (!vlmxIsPlainScalar(optarg) || (min_diversity = *mxGetPr(optarg)) < 0 || min_diversity > 1.0) { mexErrMsgTxt("'MinDiversity' must be in the [0,1] range.") ; } break ; case opt_bright_on_dark : if (!vlmxIsPlainScalar(optarg) || ((bright_on_dark = *mxGetPr(optarg)) != 0 && bright_on_dark != 1)) { mexErrMsgTxt("'BrightOnDark' must be in 0 or 1.") ; } break ; case opt_dark_on_bright : if (!vlmxIsPlainScalar(optarg) || ((dark_on_bright = *mxGetPr(optarg)) != 0 && dark_on_bright != 1)) { mexErrMsgTxt("'DarkOnBright' must be in 0 or 1.") ; } break ; default : abort() ; } } /* ----------------------------------------------------------------- * Run algorithm * -------------------------------------------------------------- */ /* new filter */ { int * vlDims = mxMalloc(sizeof(int) * ndims) ; for (i = 0 ; i < ndims ; ++i) vlDims [i] = dims [i] ; filt = vl_mser_new (ndims, vlDims) ; filtinv = vl_mser_new (ndims, vlDims) ; mxFree(vlDims) ; } if (!filt || !filtinv) { mexErrMsgTxt("Could not create an MSER filter.") ; } if (delta >= 0) vl_mser_set_delta (filt, (vl_mser_pix) delta) ; if (max_area >= 0) vl_mser_set_max_area (filt, max_area) ; if (min_area >= 0) vl_mser_set_min_area (filt, min_area) ; if (max_variation >= 0) vl_mser_set_max_variation (filt, max_variation) ; if (min_diversity >= 0) vl_mser_set_min_diversity (filt, min_diversity) ; if (delta >= 0) vl_mser_set_delta (filtinv, (vl_mser_pix) delta) ; if (max_area >= 0) vl_mser_set_max_area (filtinv, max_area) ; if (min_area >= 0) vl_mser_set_min_area (filtinv, min_area) ; if (max_variation >= 0) vl_mser_set_max_variation (filtinv, max_variation) ; if (min_diversity >= 0) vl_mser_set_min_diversity (filtinv, min_diversity) ; if (verbose) { mexPrintf("mser: parameters:\n") ; mexPrintf("mser: delta = %d\n", vl_mser_get_delta (filt)) ; mexPrintf("mser: max_area = %g\n", vl_mser_get_max_area (filt)) ; mexPrintf("mser: min_area = %g\n", vl_mser_get_min_area (filt)) ; mexPrintf("mser: max_variation = %g\n", vl_mser_get_max_variation (filt)) ; mexPrintf("mser: min_diversity = %g\n", vl_mser_get_min_diversity (filt)) ; } if (dark_on_bright) { /* process the image */ vl_mser_process (filt, data) ; /* save regions back to array */ nregions = vl_mser_get_regions_num (filt) ; regions = vl_mser_get_regions (filt) ; if (nout > 1) { vl_mser_ell_fit (filt) ; dof = vl_mser_get_ell_dof (filt) ; nframes = vl_mser_get_ell_num (filt) ; frames = vl_mser_get_ell (filt) ; } } if (bright_on_dark) { datainv = mxMalloc(sizeof(vl_uint)*nel) ; for(i=0; i 1) { vl_mser_ell_fit (filtinv) ; dof = vl_mser_get_ell_dof (filtinv) ; nframesinv = vl_mser_get_ell_num (filtinv) ; framesinv = vl_mser_get_ell (filtinv) ; } } odims [0] = nregions + nregionsinv ; out [OUT_SEEDS] = mxCreateNumericArray (1, odims, mxDOUBLE_CLASS,mxREAL) ; pt = mxGetPr (out [OUT_SEEDS]) ; for (i = 0 ; i < nregions ; ++i) pt [i] = (int)regions [i] + 1 ; for (i = nregions; i < nregions + nregionsinv; ++i) pt [i] = -((int)regionsinv [i-nregions] + 1) ; /* Inverted seed means dark on bright */ /* optionally compute and save ellipsoids */ if (nout > 1) { odims [0] = dof ; odims [1] = nframes + nframesinv; out [OUT_FRAMES] = mxCreateNumericArray (2, odims, mxDOUBLE_CLASS, mxREAL) ; pt = mxGetPr (out [OUT_FRAMES]) ; for (i = 0 ; i < nframes ; ++i) { for (j = 0 ; j < dof ; ++j) { pt [i * dof + j] = frames [i * dof + j] + ((j < ndims)?1.0:0.0) ; } } for (i = nframes ; i < nframes + nframesinv ; ++i) { for (j = 0 ; j < dof ; ++j) { pt [i * dof + j] = framesinv [(i-nframes) * dof + j] + ((j < ndims)?1.0:0.0) ; } } } if (verbose) { VlMserStats const* s = vl_mser_get_stats (filt) ; VlMserStats const* sinv = vl_mser_get_stats (filtinv) ; int tot = s-> num_extremal + sinv-> num_extremal ; mexPrintf("mser: statistics:\n") ; mexPrintf("mser: %d extremal regions of which\n", tot) ; #define REMAIN(test,num) \ mexPrintf("mser: %5d (%7.3g %% of previous) " test "\n", \ tot-(num),100.0*(double)(tot-(num))/(tot+VL_EPSILON_D)) ; \ tot -= (num) ; REMAIN("maximally stable,", s-> num_unstable + sinv-> num_unstable ) ; REMAIN("stable enough,", s-> num_abs_unstable + sinv-> num_abs_unstable ) ; REMAIN("small enough,", s-> num_too_big + sinv->num_too_big ) ; REMAIN("big enough,", s-> num_too_small + sinv->num_too_small ) ; REMAIN("diverse enough.", s-> num_duplicates + sinv->num_duplicates ) ; } /* cleanup */ if (datainv) mxFree(datainv); vl_mser_delete (filt) ; vl_mser_delete (filtinv) ; } vlfeat/toolbox/mser/vl_erfill.c0000644000175000017500000001302612237004736015531 0ustar dimadima/* file: erfill.mex.c ** description: Extremal Regions filling ** author: Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @file ** @brief Maximally Stable Extremal Regions - MEX implementation **/ #include #include #include #include #include #include #define MIN(x,y) (((x)<(y))?(x):(y)) #define MAX(x,y) (((x)>(y))?(x):(y)) typedef char unsigned val_t ; typedef int idx_t ; typedef vl_uint64 acc_t ; /* advance N-dimensional subscript */ void adv(mwSize const* dims, int ndims, int* subs_pt) { int d = 0 ; while(d < ndims) { if( ++subs_pt[d] < (signed) dims[d] ) return ; subs_pt[d++] = 0 ; } } /* driver */ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum {IN_I=0, IN_ER} ; enum {OUT_MEMBERS} ; idx_t i ; int k, nel, ndims ; mwSize const * dims ; val_t const * I_pt ; int last = 0 ; int last_expanded = 0 ; val_t value = 0 ; double const * er_pt ; int* subs_pt ; /* N-dimensional subscript */ int* nsubs_pt ; /* diff-subscript to point to neigh. */ idx_t* strides_pt ; /* strides to move in image array */ val_t* visited_pt ; /* flag */ idx_t* members_pt ; /* region members */ bool invert = VL_FALSE ; /** ----------------------------------------------------------------- ** Check the arguments ** -------------------------------------------------------------- */ if (nin != 2) { mexErrMsgTxt("Two arguments required.") ; } else if (nout > 4) { mexErrMsgTxt("Too many output arguments."); } if(mxGetClassID(in[IN_I]) != mxUINT8_CLASS) { mexErrMsgTxt("I must be of class UINT8.") ; } if(!vlmxIsPlainScalar(in[IN_ER])) { mexErrMsgTxt("ER must be a DOUBLE scalar.") ; } /* get dimensions */ nel = mxGetNumberOfElements(in[IN_I]) ; ndims = mxGetNumberOfDimensions(in[IN_I]) ; dims = mxGetDimensions(in[IN_I]) ; I_pt = mxGetData(in[IN_I]) ; /* allocate stuff */ subs_pt = mxMalloc( sizeof(int) * ndims ) ; nsubs_pt = mxMalloc( sizeof(int) * ndims ) ; strides_pt = mxMalloc( sizeof(idx_t) * ndims ) ; visited_pt = mxMalloc( sizeof(val_t) * nel ) ; members_pt = mxMalloc( sizeof(idx_t) * nel ) ; er_pt = mxGetPr(in[IN_ER]) ; /* compute strides to move into the N-dimensional image array */ strides_pt [0] = 1 ; for(k = 1 ; k < ndims ; ++k) { strides_pt [k] = strides_pt [k-1] * dims [k-1] ; } /* load first pixel */ memset(visited_pt, 0, sizeof(val_t) * nel) ; { idx_t idx = (idx_t) *er_pt ; if (idx < 0) { idx = -idx; invert = VL_TRUE ; } if( idx < 1 || idx > nel ) { char buff[80] ; snprintf(buff,80,"ER=%d out of range [1,%d]",idx,nel) ; mexErrMsgTxt(buff) ; } members_pt [last++] = idx - 1 ; } value = I_pt[ members_pt[0] ] ; /* ----------------------------------------------------------------- * Fill region * -------------------------------------------------------------- */ while(last_expanded < last) { /* pop next node xi */ idx_t index = members_pt[last_expanded++] ; /* convert index into a subscript sub; also initialize nsubs to (-1,-1,...,-1) */ { idx_t temp = index ; for(k = ndims-1 ; k >=0 ; --k) { nsubs_pt [k] = -1 ; subs_pt [k] = temp / strides_pt [k] ; temp = temp % strides_pt [k] ; } } /* process neighbors of xi */ while(VL_TRUE) { int good = VL_TRUE ; idx_t nindex = 0 ; /* compute NSUBS+SUB, the correspoinding neighbor index NINDEX and check that the pixel is within image boundaries. */ for(k = 0 ; k < ndims && good ; ++k) { int temp = nsubs_pt [k] + subs_pt [k] ; good &= 0 <= temp && temp < (signed) dims[k] ; nindex += temp * strides_pt [k] ; } /* process neighbor 1 - the pixel is within image boundaries; 2 - the pixel is indeed different from the current node (this happens when nsub=(0,0,...,0)); 3 - the pixel has value not greather than val is a pixel older than xi 4 - the pixel has not been visited yet */ if(good && nindex != index && ((!invert && I_pt [nindex] <= value) || ( invert && I_pt [nindex] >= value)) && ! visited_pt [nindex] ) { /* mark as visited */ visited_pt [nindex] = 1 ; /* add to list */ members_pt [last++] = nindex ; } /* move to next neighbor */ k = 0 ; while(++ nsubs_pt [k] > 1) { nsubs_pt [k++] = -1 ; if(k == ndims) goto done_all_neighbors ; } } /* next neighbor */ done_all_neighbors : ; } /* goto pop next member */ /* * Save results */ { mwSize dims[2] ; int unsigned * pt ; dims[0] = last ; out[OUT_MEMBERS] = mxCreateNumericArray(1,dims,mxUINT32_CLASS,mxREAL); pt = mxGetData(out[OUT_MEMBERS]) ; for (i = 0 ; i < last ; ++i) { *pt++ = members_pt[i] + 1 ; } } /* free stuff */ mxFree( members_pt ) ; mxFree( visited_pt ) ; mxFree( strides_pt ) ; mxFree( nsubs_pt ) ; mxFree( subs_pt ) ; } vlfeat/toolbox/mser/vl_erfill.m0000644000175000017500000000113412237004736015540 0ustar dimadima% VL_ERFILL Fill extremal region % MEMBERS=VL_ERFILL(I,ER) returns the list MEMBERS of the pixels which % belongs to the extremal region represented by the pixel ER. % % The selected region is the one that contains pixel ER and of % intensity I(ER). % % I must be of class UINT8 and ER must be a (scalar) index of the % region representative point. % % See also: VL_MSER(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/mexutils.h0000644000175000017500000006451112237004745014471 0ustar dimadima/** @file mexutils.h ** @brief MEX utilities ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef MEXUTILS_H #define MEXUTILS_H #include"mex.h" #include #include #include #include #include #include #include #ifdef VL_COMPILER_MSC #define snprintf _snprintf #define vsnprintf _vsnprintf #endif #if (! defined(MX_API_VER) || (MX_API_VER < 0x07030000)) && \ (! defined(HAVE_OCTAVE)) typedef vl_uint32 mwSize ; typedef vl_int32 mwIndex ; #endif /** @brief Access MEX input argument */ #undef IN #define IN(x) (in[IN_ ## x]) /** @brief Access MEX output argument */ #undef OUT #define OUT(x) (out[OUT_ ## x]) #ifdef HAVE_OCTAVE static void * mxReallocOctaveWorkaround(void * ptr, size_t size) { /* mexPrintf("fixed realloc\n") ; */ if (ptr) { return mxRealloc(ptr, size) ; } else { return mxMalloc(size) ; } } #define mxRealloc mxReallocOctaveWorkaround static int mxSetDimensionsOctaveWorkaround(mxArray * array, const mwSize *dims, int ndims) { mwSize * dims_ = mxMalloc(sizeof(mwSize)*ndims) ; int i ; for (i = 0 ; i < ndims ; ++i) dims_[i] = dims[i] ; mxSetDimensions(array,dims_,ndims) ; return 0 ; } #define mxSetDimensions mxSetDimensionsOctaveWorkaround #endif /** @brief Setup VLFeat to be used in a MEX file ** ** This makes VLFeat use MATLAB version of the memory allocation and ** logging functions. **/ #define VL_USE_MATLAB_ENV \ vl_set_alloc_func (mxMalloc, mxRealloc, mxCalloc, mxFree) ; \ vl_set_printf_func ((printf_func_t)mexPrintf) ; /** @file mexutils.h This header file provides helper functions for writing MATLAB MEX files. - @ref mexutils-env "VLFeat environment" - @ref mexutils-array-test "Array tests" - @ref mexutils-options "Parsing options" @section mexutils-env VLFeat environment When the VLFeat DLL is linked to a MATLAB MEX files, at run time the MEX file must configure VLFeat to use MATLAB memory allocation and logging functions. This can be obtained by calling the macro ::VL_USE_MATLAB_ENV as the first line of each MEX file which is linked to the VLFeat DLL. @section mexutils-array-test Array tests MATLAB supports a variety of array types. Most MEX file arguments are restricted to a few types and must be properly checked at run time. @ref mexutils.h provides some helper functions to make it simpler to check such arguments. MATLAB basic array types are: - Numeric array: @c mxDOUBLE_CLASS, @c mxSINGLE_CLASS, @c mxINT8_CLASS, @c mxUINT8_CLASS, @c mxINT16_CLASS, @c mxUINT16_CLASS, @c mxINT32_CLASS, @c mxUINT32_CLASS. Moreover: - all such types have a @e real component - all such types may have a @e imaginary component - @c mxDOUBLE_LCASS arrays with two dimensions can be @e sparse. - Logical array (@c mxLOGICAL_CLASS). - Character array (@c mxCHAR_CLASS). The other MATLAB array types are: - Struct array (@c mxSTRUCT_CLASS). - Cell array (@c mxCELL_CLASS). - Custom class array (@c mxCLASS_CLASS). - Unkown type array (@c mxUNKNOWN_CLASS). VLFeat defines a number of common classes of arrays and corresponding tests. - Scalar array is a non-sparse array with exactly one element. Note that the array may have an arbitrary number of dimensions, and be of any numeric or other type. All dimensions are singleton (which is implied by having exactly one element). Use ::vlmxIsScalar to test if an array is scalar. - Vector array is a non-sparse array which is either empty (empty vector) or has at most one non-singleton dimension. The array can be of any numeric or other type. The elements of such a MATLAB array are stored as a plain C array with a number of elements equal to the number of elements in the array (obtained with @c mxGetNumberOfElements). Use ::vlmxIsVector to test whether an array is a vector. - Matrix array is a non-sparse array for which all dimensions beyond the first two are singleton, or a non-sparse array which is empty and for which at least one of the first two dimensions is zero. The array can be of any numeric or other type. The non-singleton dimensions can be zero (empty matrix), one, or more. The element of such a MATLAB array are stored as a C array in column major order and its dimensions can be obtained by @c mxGetM and @c mxGetN. Use ::vlmxIsMatrix to test if an array is a matrix. - Real array is a numeric array (as for @c mxIsNumeric) without a complex component. Use ::vlmxIsReal to check if an array is real. - Use ::vlmxIsOfClass to check if an array is of a prescribed (storage) class, such as @c mxDOUBLE_CLASS. - Plain scalar, vector, and matrix are a scalar, vector, and matrix arrays which are real and of class @c mxDOUBLE_CLASS. Use ::vlmxIsPlainScalar, ::vlmxIsPlainVector and ::vlmxIsPlainMatrix to check this. @section mexutils-options Parsing options It is common to pass optional arguments to a MEX file as option type-value pairs. Here type is a string identifying the option and value is a MATLAB array specifing its value. The function ::vlmxNextOption can be used to simplify parsing a list of such arguments (similar to UNIX @c getopt). The functions ::vlmxError and ::vlmxWarning are shortcuts to specify VLFeat formatted errors. **/ /* these attributes suppress undefined symbols warning with GCC */ #ifdef VL_COMPILER_GNUC #if (! defined(HAVE_OCTAVE)) EXTERN_C void __attribute__((noreturn)) mexErrMsgIdAndTxt (const char * identifier, const char * err_msg, ...) ; #else extern void __attribute__((noreturn)) mexErrMsgIdAndTxt (const char *id, const char *s, ...); #endif #endif #define MEXUTILS_RAISE_HELPER_A \ char const * errorString ; \ char formattedErrorId [512] ; \ char formattedErrorMessage [1024] ; \ \ switch (errorId) { \ case vlmxErrAlloc : errorString = "outOfMemory" ; break ; \ case vlmxErrInvalidArgument : errorString = "invalidArgument" ; break ; \ case vlmxErrNotEnoughInputArguments : errorString = "notEnoughInputArguments" ; break ; \ case vlmxErrTooManyInputArguments : errorString = "tooManyInputArguments" ; break ; \ case vlmxErrNotEnoughOutputArguments : errorString = "notEnoughOutputArguments" ; break ; \ case vlmxErrTooManyOutputArguments : errorString = "tooManyOutputArguments" ; break ; \ case vlmxErrInvalidOption : errorString = "invalidOption" ; break ; \ case vlmxErrInconsistentData : errorString = "inconsistentData" ; break ; \ default : errorString = "undefinedError" ; break ; \ } \ \ if (! errorMessage) { \ switch (errorId) { \ case vlmxErrAlloc: errorMessage = "Out of memory." ; break ; \ case vlmxErrInvalidArgument: errorMessage = "Invalid argument." ; break ; \ case vlmxErrNotEnoughInputArguments: errorMessage = "Not enough input arguments." ; break ; \ case vlmxErrTooManyInputArguments: errorMessage = "Too many input arguments." ; break ; \ case vlmxErrNotEnoughOutputArguments: errorMessage = "Not enough output arguments." ; break ; \ case vlmxErrTooManyOutputArguments: errorMessage = "Too many output arguments." ; break ; \ case vlmxErrInconsistentData: errorMessage = "Inconsistent data." ; break ; \ case vlmxErrInvalidOption: errorMessage = "Invalid option." ; break ; \ default: errorMessage = "Undefined error message." ; \ } \ } #ifdef VL_COMPILER_LCC #define MEXUTILS_RAISE_HELPER_B \ { \ va_list args ; \ va_start(args, errorMessage) ; \ sprintf(formattedErrorId, \ "vl:%s", errorString) ; \ vsprintf(formattedErrorMessage, \ errorMessage, args) ; \ va_end(args) ; \ } #else #define MEXUTILS_RAISE_HELPER_B \ { \ va_list args ; \ va_start(args, errorMessage) ; \ snprintf(formattedErrorId, \ sizeof(formattedErrorId)/sizeof(char), \ "vl:%s", errorString) ; \ vsnprintf(formattedErrorMessage, \ sizeof(formattedErrorMessage)/sizeof(char), \ errorMessage, args) ; \ va_end(args) ; \ } #endif #define MEXUTILS_RAISE_HELPER MEXUTILS_RAISE_HELPER_A MEXUTILS_RAISE_HELPER_B /** @{ ** @name Error handling **/ /** @brief VLFeat MEX errors */ typedef enum _VlmxErrorId { vlmxErrAlloc = 1, vlmxErrInvalidArgument, vlmxErrNotEnoughInputArguments, vlmxErrTooManyInputArguments, vlmxErrNotEnoughOutputArguments, vlmxErrTooManyOutputArguments, vlmxErrInvalidOption, vlmxErrInconsistentData } VlmxErrorId ; /** @brief Raise a MEX error with VLFeat format ** @param errorId error ID string. ** @param errorMessage error message C-style format string. ** @param ... format string arguments. ** ** The function internally calls @c mxErrMsgTxtAndId, which causes ** the MEX file to abort. **/ #if defined(VL_COMPILER_GNUC) & ! defined(__DOXYGEN__) static void __attribute__((noreturn)) #else static void #endif vlmxError (VlmxErrorId errorId, char const * errorMessage, ...) { MEXUTILS_RAISE_HELPER ; mexErrMsgIdAndTxt (formattedErrorId, formattedErrorMessage) ; } /** @brief Raise a MEX warning with VLFeat format ** @param errorId error ID string. ** @param errorMessage error message C-style format string. ** @param ... format string arguments. ** ** The function internally calls @c mxWarnMsgTxtAndId. **/ static void vlmxWarning (VlmxErrorId errorId, char const * errorMessage, ...) { MEXUTILS_RAISE_HELPER ; mexWarnMsgIdAndTxt (formattedErrorId, formattedErrorMessage) ; } /** @} */ /** @name Check for array attributes ** @{ */ /** ------------------------------------------------------------------ ** @brief Check if a MATLAB array is of a prescribed class ** @param array MATLAB array. ** @param classId prescribed class of the array. ** @return ::VL_TRUE if the class is of the array is of the prescribed class. ** @sa @ref mexutils-array-test **/ VL_INLINE vl_bool vlmxIsOfClass (mxArray const * array, mxClassID classId) { return mxGetClassID (array) == classId ; } /** ------------------------------------------------------------------ ** @brief Check if a MATLAB array is real ** @param array MATLAB array. ** @return ::VL_TRUE if the array is real. ** @sa @ref mexutils-array-test **/ VL_INLINE vl_bool vlmxIsReal (mxArray const * array) { return mxIsNumeric (array) && ! mxIsComplex (array) ; } /** @} */ /** @name Check for scalar, vector and matrix arrays ** @{ */ /** ------------------------------------------------------------------ ** @brief Check if a MATLAB array is scalar ** @param array MATLAB array. ** @return ::VL_TRUE if the array is scalar. ** @sa @ref mexutils-array-test **/ VL_INLINE vl_bool vlmxIsScalar (mxArray const * array) { return (! mxIsSparse (array)) && (mxGetNumberOfElements (array) == 1) ; } /** ------------------------------------------------------------------ ** @brief Check if a MATLAB array is a vector. ** @param array MATLAB array. ** @param numElements number of elements (negative for any). ** @return ::VL_TRUE if the array is a vecotr of the prescribed size. ** @sa @ref mexutils-array-test **/ static vl_bool vlmxIsVector (mxArray const * array, vl_index numElements) { vl_size numDimensions = (unsigned) mxGetNumberOfDimensions (array) ; mwSize const * dimensions = mxGetDimensions (array) ; vl_uindex di ; /* check that it is not sparse */ if (mxIsSparse (array)) { return VL_FALSE ; } /* check that the number of elements is the prescribed one */ if ((numElements >= 0) && ((unsigned) mxGetNumberOfElements (array) != (unsigned) numElements)) { return VL_FALSE ; } /* check that all but at most one dimension is singleton */ for (di = 0 ; di < numDimensions ; ++ di) { if (dimensions[di] != 1) break ; } for (++ di ; di < numDimensions ; ++di) { if (dimensions[di] != 1) return VL_FALSE ; } return VL_TRUE ; } /** ------------------------------------------------------------------ ** @brief Check if a MATLAB array is a matrix. ** @param array MATLAB array. ** @param M number of rows (negative for any). ** @param N number of columns (negative for any). ** @return ::VL_TRUE if the array is a matrix of the prescribed size. ** @sa @ref mexutils-array-test **/ static vl_bool vlmxIsMatrix (mxArray const * array, vl_index M, vl_index N) { vl_size numDimensions = (unsigned) mxGetNumberOfDimensions (array) ; mwSize const * dimensions = mxGetDimensions (array) ; vl_uindex di ; /* check that it is not sparse */ if (mxIsSparse (array)) { return VL_FALSE ; } /* check that the number of elements is the prescribed one */ if ((M >= 0) && ((unsigned) mxGetM (array) != (unsigned) M)) { return VL_FALSE; } if ((N >= 0) && ((unsigned) mxGetN (array) != (unsigned) N)) { return VL_FALSE; } /* ok if empty and either M = 0 or N = 0 */ if ((mxGetNumberOfElements (array) == 0) && (mxGetM (array) == 0 || mxGetN (array) == 0)) { return VL_TRUE ; } /* ok if any dimension beyond the first two is singleton */ for (di = 2 ; ((unsigned)dimensions[di] == 1) && di < numDimensions ; ++ di) ; return di == numDimensions ; } /** ------------------------------------------------------------------ ** @brief Check if the MATLAB array has the specified dimensions. ** @param array array to check. ** @param numDimensions number of dimensions. ** @param dimensions dimensions. ** @return true the test succeeds. ** ** The test is true if @a numDimensions < 0. If not, it is false if ** the array has not @a numDimensions. Otherwise it is true is @a ** dimensions is @c NULL or if each entry of @a dimensions is ** either negative or equal to the corresponding array dimension. **/ static vl_bool vlmxIsArray (mxArray const * array, vl_index numDimensions, vl_index* dimensions) { if (numDimensions >= 0) { vl_index d ; mwSize const * actualDimensions = mxGetDimensions (array) ; if ((unsigned) mxGetNumberOfDimensions (array) != (unsigned) numDimensions) { return VL_FALSE ; } if(dimensions != NULL) { for(d = 0 ; d < numDimensions ; ++d) { if (dimensions[d] >= 0 && (unsigned) dimensions[d] != (unsigned) actualDimensions[d]) return VL_FALSE ; } } } return VL_TRUE ; } /** @} */ /** @name Check for plain arrays ** @{ */ /** ------------------------------------------------------------------ ** @brief Check if a MATLAB array is plain ** @param array MATLAB array. ** @return ::VL_TRUE if the array is plain. ** @sa @ref mexutils-array-test **/ VL_INLINE vl_bool vlmxIsPlain (mxArray const * array) { return vlmxIsReal (array) && vlmxIsOfClass (array, mxDOUBLE_CLASS) ; } /** ------------------------------------------------------------------ ** @brief Check if a MATLAB array is plain scalar ** @param array MATLAB array. ** @return ::VL_TRUE if the array is plain scalar. ** @sa @ref mexutils-array-test **/ VL_INLINE vl_bool vlmxIsPlainScalar (mxArray const * array) { return vlmxIsPlain (array) && vlmxIsScalar (array) ; } /** ------------------------------------------------------------------ ** @brief Check if a MATLAB array is a plain vector. ** @param array MATLAB array. ** @param numElements number of elements (negative for any). ** @return ::VL_TRUE if the array is a plain vecotr of the prescribed size. ** @sa @ref mexutils-array-test **/ VL_INLINE vl_bool vlmxIsPlainVector (mxArray const * array, vl_index numElements) { return vlmxIsPlain (array) && vlmxIsVector (array, numElements) ; } /** ------------------------------------------------------------------ ** @brief Check if a MATLAB array is a plain matrix. ** @param array MATLAB array. ** @param M number of rows (negative for any). ** @param N number of columns (negative for any). ** @return ::VL_TRUE if the array is a plain matrix of the prescribed size. ** @sa @ref mexutils-array-test **/ VL_INLINE vl_bool vlmxIsPlainMatrix (mxArray const * array, vl_index M, vl_index N) { return vlmxIsPlain (array) && vlmxIsMatrix (array, M, N) ; } /** ------------------------------------------------------------------ ** @brief Check if the array is a string ** @param array array to test. ** @param length string length. ** @return true if the array is a string of the specified length ** ** The array @a array satisfies the test if: ** - its storage class is CHAR; ** - it has two dimensions but only one row; ** - @a length < 0 or the array has @a length columns. **/ static int vlmxIsString (const mxArray* array, vl_index length) { mwSize M = (mwSize) mxGetM (array) ; mwSize N = (mwSize) mxGetN (array) ; return mxIsChar(array) && mxGetNumberOfDimensions(array) == 2 && (M == 1 || (M == 0 && N == 0)) && (length < 0 || (signed)N == length) ; } /** @} */ /** ------------------------------------------------------------------ ** @brief Create a MATLAB array which is a plain scalar ** @param x scalar value. ** @return the new array. **/ static mxArray * vlmxCreatePlainScalar (double x) { mxArray * array = mxCreateDoubleMatrix (1,1,mxREAL) ; *mxGetPr(array) = x ; return array ; } /** ------------------------------------------------------------------ ** @brief Create a MATLAB array from a VlArray ** @param x VlArray instance. ** @return the new array. **/ static mxArray * vlmxCreateArrayFromVlArray (VlArray const * x) { mwSize dimensions [VL_ARRAY_MAX_NUM_DIMENSIONS] ; mxArray * array = NULL ; mxClassID classId = (mxClassID)0 ; vl_uindex d ; vl_size numElements = vl_array_get_num_elements(x) ; vl_size numDimensions = vl_array_get_num_dimensions(x) ; vl_size const * xdimensions = vl_array_get_dimensions(x) ; vl_type type = vl_array_get_data_type(x) ; vl_size typeSize = vl_get_type_size(type) ; for (d = 0 ; d < numDimensions ; ++d) { dimensions[d] = (mwSize) xdimensions[d] ; } switch (type) { case VL_TYPE_FLOAT : classId = mxSINGLE_CLASS ; break ; case VL_TYPE_DOUBLE : classId = mxDOUBLE_CLASS ; break ; case VL_TYPE_INT8 : classId = mxINT8_CLASS ; break ; case VL_TYPE_INT16 : classId = mxINT16_CLASS ; break ; case VL_TYPE_INT32 : classId = mxINT32_CLASS ; break ; case VL_TYPE_INT64 : classId = mxINT64_CLASS ; break ; case VL_TYPE_UINT8 : classId = mxUINT8_CLASS ; break ; case VL_TYPE_UINT16 : classId = mxUINT16_CLASS ; break ; case VL_TYPE_UINT32 : classId = mxUINT32_CLASS ; break ; case VL_TYPE_UINT64 : classId = mxUINT64_CLASS ; break ; default: assert(VL_FALSE) ; } array = mxCreateNumericArray(numDimensions, dimensions, classId, mxREAL) ; if (array == NULL) return NULL ; memcpy(mxGetData(array), vl_array_get_data(x), typeSize * numElements) ; return array ; } /** ------------------------------------------------------------------ ** @brief Envelope a MATLAB array in a VlArray instance ** @param v VlArray instance (out) ** @param x MATALB array. ** @return @c v. **/ static VlArray * vlmxEnvelopeArrayInVlArray (VlArray * v, mxArray * x) { vl_size numDimensions = mxGetNumberOfDimensions(x) ; mwSize const * dimensions = mxGetDimensions(x) ; mxClassID classId = mxGetClassID(x) ; vl_size vdimensions [VL_ARRAY_MAX_NUM_DIMENSIONS] ; vl_type type ; vl_uindex d ; for (d = 0 ; d < numDimensions ; ++d) { vdimensions[d] = dimensions[d] ; } switch (classId) { case mxSINGLE_CLASS: type = VL_TYPE_FLOAT ; break ; case mxDOUBLE_CLASS: type = VL_TYPE_DOUBLE ; break ; case mxINT8_CLASS : type = VL_TYPE_INT8 ; break ; case mxINT16_CLASS : type = VL_TYPE_INT16 ; break ; case mxINT32_CLASS : type = VL_TYPE_INT32 ; break ; case mxINT64_CLASS : type = VL_TYPE_INT64 ; break ; case mxUINT8_CLASS : type = VL_TYPE_UINT8 ; break ; case mxUINT16_CLASS: type = VL_TYPE_UINT16 ; break ; case mxUINT32_CLASS: type = VL_TYPE_UINT32 ; break ; case mxUINT64_CLASS: type = VL_TYPE_UINT64 ; break ; default: assert(VL_FALSE) ; } vl_array_init_envelope(v, mxGetData(x), type, numDimensions, vdimensions) ; return v ; } /** ------------------------------------------------------------------ ** @brief Case insensitive string comparison ** @param s1 first string. ** @param s2 second string. ** @return comparison result. ** ** The comparison result is equal to 0 if the strings are equal, >0 ** if the first string is greater than the second (in lexicographical ** order), and <0 otherwise. **/ static int vlmxCompareStringsI(const char *s1, const char *s2) { /* Since tolower has an int argument, characters must be unsigned otherwise will be sign-extended when converted to int. */ while (tolower((unsigned char)*s1) == tolower((unsigned char)*s2)) { if (*s1 == 0) return 0 ; /* implies *s2 == 0 */ s1++; s2++; } return tolower((unsigned char)*s1) - tolower((unsigned char)*s2) ; } /** ------------------------------------------------------------------ ** @brief Case insensitive string comparison with array ** @param array first string (as a MATLAB array). ** @param string second string. ** @return comparison result. ** ** The comparison result is equal to 0 if the strings are equal, >0 ** if the first string is greater than the second (in lexicographical ** order), and <0 otherwise. **/ static int vlmxCompareToStringI(mxArray const * array, char const * string) { mxChar const * s1 = (mxChar const *) mxGetData(array) ; char unsigned const * s2 = (char unsigned const*) string ; vl_size n = mxGetNumberOfElements(array) ; /* Since tolower has an int argument, characters must be unsigned otherwise will be sign-extended when converted to int. */ while (n && tolower((unsigned)*s1) == tolower(*s2)) { if (*s2 == 0) return 1 ; /* s2 terminated on 0, but s1 did not terminate yet */ s1 ++ ; s2 ++ ; n -- ; } return tolower(n ? (unsigned)*s1 : 0) - tolower(*s2) ; } /** ------------------------------------------------------------------ ** @brief Case insensitive string equality test with array ** @param array first string (as a MATLAB array). ** @param string second string. ** @return true if the strings are equal. **/ static int vlmxIsEqualToStringI(mxArray const * array, char const * string) { return vlmxCompareToStringI(array, string) == 0 ; } /* ---------------------------------------------------------------- */ /* Options handling */ /* ---------------------------------------------------------------- */ /** @brief MEX option */ struct _vlmxOption { const char *name ; /**< option name */ int has_arg ; /**< has argument? */ int val ; /**< value to return */ } ; /** @brief MEX option type */ typedef struct _vlmxOption vlmxOption ; /** ------------------------------------------------------------------ ** @brief Parse the next option ** @param args MEX argument array. ** @param nargs MEX argument array length. ** @param options List of option definitions. ** @param next Pointer to the next option (input and output). ** @param optarg Pointer to the option optional argument (output). ** @return the code of the next option, or -1 if there are no more options. ** ** The function parses the array @a args for options. @a args is ** expected to be a sequence alternating option names and option ** values, in the form of @a nargs instances of @c mxArray. The ** function then scans the option starting at position @a next in the ** array. The option name is matched (case insensitive) to the table ** of options @a options, a pointer to the option value is stored in ** @a optarg, @a next is advanced to the next option, and the option ** code is returned. ** ** The function is typically used in a loop to parse all the available ** options. @a next is initialized to zero, and then the function ** is called until the special code -1 is returned. ** ** If the option name cannot be matched to the available options, ** either because the option name is not a string array or because ** the name is unknown, the function exits the MEX file with an ** error. **/ static int vlmxNextOption (mxArray const *args[], int nargs, vlmxOption const *options, int *next, mxArray const **optarg) { char name [1024] ; int opt = -1, i; if (*next >= nargs) { return opt ; } /* check the array is a string */ if (! vlmxIsString (args [*next], -1)) { vlmxError (vlmxErrInvalidOption, "The option name is not a string (argument number %d)", *next + 1) ; } /* retrieve option name */ if (mxGetString (args [*next], name, sizeof(name))) { vlmxError (vlmxErrInvalidOption, "The option name is too long (argument number %d)", *next + 1) ; } /* advance argument list */ ++ (*next) ; /* now lookup the string in the option table */ for (i = 0 ; options[i].name != 0 ; ++i) { if (vlmxCompareStringsI(name, options[i].name) == 0) { opt = options[i].val ; break ; } } /* unknown argument */ if (opt < 0) { vlmxError (vlmxErrInvalidOption, "Unknown option '%s'.", name) ; } /* no argument */ if (! options [i].has_arg) { if (optarg) *optarg = 0 ; return opt ; } /* argument */ if (*next >= nargs) { vlmxError(vlmxErrInvalidOption, "Option '%s' requires an argument.", options[i].name) ; } if (optarg) *optarg = args [*next] ; ++ (*next) ; return opt ; } /** @brief Get an emumeration member by name ** @param enumeration the enumeration to decode. ** @param name_array member name as a MATLAB string array. ** @param caseInsensitive if @c true match the string case-insensitive. ** @return the corresponding enumeration member, or @c NULL if any. **/ static VlEnumerator * vlmxDecodeEnumeration (mxArray const *name_array, VlEnumerator const *enumeration, vl_bool caseInsensitive) { char name [1024] ; /* check the array is a string */ if (! vlmxIsString (name_array, -1)) { vlmxError (vlmxErrInvalidArgument, "The array is not a string.") ; } /* retrieve option name */ if (mxGetString (name_array, name, sizeof(name))) { vlmxError (vlmxErrInvalidArgument, "The string array is too long.") ; } if (caseInsensitive) { return vl_enumeration_get_casei(enumeration, name) ; } else { return vl_enumeration_get(enumeration, name) ; } } /* MEXUTILS_H */ #endif vlfeat/toolbox/vlad/0000755000175000017500000000000012237042170013357 5ustar dimadimavlfeat/toolbox/vlad/vl_vlad.m0000644000175000017500000000357712237004745015206 0ustar dimadima% VL_VLAD VLAD feature encoding % ENC = VL_VLAD(X, MEANS, ASSIGNMENTS) computes the VLAD % encoding of the vectors X relative to cluster centers MEANS and % vector-to-cluster soft assignments ASSIGNMENTS. % % X has one column per data vector (e.g. a SIFT descriptor), and % MEANS has one column per component. Usually one has one component % per KMeans cluster and MEANS are the KMeans centers. X and MEANS % have the same number of rows and the data class, which can be % either SINGLE or DOUBLE. % % ASSIGNMENTS has as many rows as clusters and as many columns as % X. Its columns are non-negative and should sum to one, % representing the soft assignment of the corresponding vector in X % to each of the clusters. It is of the same class as X. % % ENC is a vector of the same class of X of size equal to the % product of the data dimension and the number of clusters. % % By default, ENC is L2 normalized. VL_VLAD() accepts the following % options: % % Unnormalized:: % If specified, no overall normalization is applied to ENC. % % NormalizeComponents:: % If specified, the part of the encoding corresponding to each % cluster is individually normalized. % % NormalizeMass:: % If specified, each component is re-normalized by the mass % of data vectors assigned to it. If NormalizedComponents is % also selected, this has no effect. % % SquareRoot:: % If specified, the signed square root function is applied to % ENC before normalization. % % Verbose:: % Increase the verbosity level (may be specified multiple times). % % See: VLAD, VL_HELP(). % Authors: David Novotny and Andrea Vedaldi % Copyright (C) 2013 David Novotny and Andrea Vedaldi % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/vlad/vl_vlad.c0000644000175000017500000001150212237004745015157 0ustar dimadima/** @file vl_vlad.c ** @brief vl_vlad MEX definition. ** @author David Novotny **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include enum { opt_verbose, opt_normalize_components, opt_unnormalized, opt_square_root, opt_normalize_mass } ; vlmxOption options [] = { {"Verbose", 0, opt_verbose }, {"Unnormalized", 0, opt_unnormalized }, {"NormalizeComponents", 0, opt_normalize_components }, {"NormalizeMass", 0, opt_normalize_mass }, {"SquareRoot", 0, opt_square_root } } ; /* driver */ void mexFunction (int nout VL_UNUSED, mxArray * out[], int nin, const mxArray * in[]) { enum {IN_DATA = 0, IN_MEANS, IN_ASSIGNMENTS, IN_END} ; enum {OUT_ENC} ; int opt ; int next = IN_END ; mxArray const *optarg ; mxArray const * means_array = in[IN_MEANS] ; mxArray const * data_array = in[IN_DATA] ; mxArray const * assign_array = in[IN_ASSIGNMENTS] ; vl_size numClusters ; vl_size dimension ; vl_size numData ; int flags = 0 ; void const * means = NULL; void const * assignments = NULL; void const * data = NULL ; int verbosity = 0 ; vl_type dataType ; mxClassID classID ; VL_USE_MATLAB_ENV ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin < 3) { vlmxError (vlmxErrInvalidArgument, "At least three arguments required."); } if (nout > 1) { vlmxError (vlmxErrInvalidArgument, "At most one output argument."); } if (!vlmxIsMatrix(IN(DATA),-1,-1)) { vlmxError (vlmxErrInvalidArgument, "DATA is not a dense matrix.") ; } classID = mxGetClassID (IN(DATA)) ; switch (classID) { case mxSINGLE_CLASS: dataType = VL_TYPE_FLOAT ; break ; case mxDOUBLE_CLASS: dataType = VL_TYPE_DOUBLE ; break ; default: vlmxError (vlmxErrInvalidArgument, "DATA is neither of class SINGLE or DOUBLE.") ; } if (mxGetClassID (IN(MEANS)) != classID) { vlmxError(vlmxErrInvalidArgument, "MEANS is not of the same class as DATA.") ; } if (mxGetClassID (IN(ASSIGNMENTS)) != classID) { vlmxError(vlmxErrInvalidArgument, "ASSIGNMENTS is not of the same class as DATA.") ; } dimension = mxGetM (IN(DATA)) ; numData = mxGetN (IN(DATA)) ; numClusters = mxGetN (IN(MEANS)) ; if (dimension == 0) { vlmxError (vlmxErrInvalidArgument, "SIZE(DATA,1) is zero.") ; } if (!vlmxIsMatrix(IN(MEANS), dimension, -1)) { vlmxError (vlmxErrInvalidArgument, "MEANS is not a matrix or does not have the right size.") ; } if (!vlmxIsMatrix(IN(ASSIGNMENTS), numClusters, -1)) { vlmxError (vlmxErrInvalidArgument, "ASSIGNMENTS is not a matrix or does not have the right size.") ; } while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { switch (opt) { case opt_verbose : ++ verbosity ; break ; case opt_unnormalized: flags |= VL_VLAD_FLAG_UNNORMALIZED ; break ; case opt_normalize_components: flags |= VL_VLAD_FLAG_NORMALIZE_COMPONENTS ; break ; case opt_normalize_mass: flags |= VL_VLAD_FLAG_NORMALIZE_MASS ; break ; case opt_square_root: flags |= VL_VLAD_FLAG_SQUARE_ROOT ; break ; default : abort() ; break ; } } /* ----------------------------------------------------------------- * Do the job * -------------------------------------------------------------- */ data = mxGetPr(data_array); means = mxGetPr(means_array); assignments = mxGetData(assign_array); if (verbosity) { mexPrintf("vl_vlad: num data: %d\n", numData) ; mexPrintf("vl_vlad: num clusters: %d\n", numClusters) ; mexPrintf("vl_vlad: data dimension: %d\n", dimension) ; mexPrintf("vl_vlad: code dimension: %d\n", numClusters * dimension) ; mexPrintf("vl_vlad: unnormalized: %s\n", VL_YESNO(flags & VL_VLAD_FLAG_UNNORMALIZED)) ; mexPrintf("vl_vlad: normalize mass: %s\n", VL_YESNO(flags & VL_VLAD_FLAG_NORMALIZE_MASS)) ; mexPrintf("vl_vlad: normalize components: %s\n", VL_YESNO(flags & VL_VLAD_FLAG_NORMALIZE_COMPONENTS)) ; mexPrintf("vl_vlad: square root: %s\n", VL_YESNO(flags & VL_VLAD_FLAG_SQUARE_ROOT)) ; } OUT(ENC) = mxCreateNumericMatrix (dimension * numClusters, 1, classID, mxREAL) ; vl_vlad_encode (mxGetPr(OUT(ENC)), dataType, means, dimension, numClusters, data, numData, assignments, flags) ; } vlfeat/toolbox/vl_compile.m0000644000175000017500000001170412237004736014751 0ustar dimadimafunction vl_compile(compiler) % VL_COMPILE Compile VLFeat MEX files % VL_COMPILE() uses MEX() to compile VLFeat MEX files. This command % works only under Windows and is used to re-build problematic % binaries. The preferred method of compiling VLFeat on both UNIX % and Windows is through the provided Makefiles. % % VL_COMPILE() only compiles the MEX files and assumes that the % VLFeat DLL (i.e. the file VLFEATROOT/bin/win{32,64}/vl.dll) has % already been built. This file is built by the Makefiles. % % By default VL_COMPILE() assumes that Visual C++ is the active % MATLAB compiler. VL_COMPILE('lcc') assumes that the active % compiler is LCC instead (see MEX -SETUP). Unfortunately LCC does % not seem to be able to compile the latest versions of VLFeat due % to bugs in the support of 64-bit integers. Therefore it is % recommended to use Visual C++ instead. % % See also: VL_NOPREFIX(), VL_HELP(). % Authors: Andrea Vedadli, Jonghyun Choi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if nargin < 1, compiler = 'visualc' ; end switch lower(compiler) case 'visualc' fprintf('%s: assuming that Visual C++ is the active compiler\n', mfilename) ; useLcc = false ; case 'lcc' fprintf('%s: assuming that LCC is the active compiler\n', mfilename) ; warning('LCC may fail to compile VLFeat. See help vl_compile.') ; useLcc = true ; otherwise error('Unknown compiler ''%s''.', compiler) end vlDir = vl_root ; toolboxDir = fullfile(vlDir, 'toolbox') ; switch computer case 'PCWIN' fprintf('%s: compiling for PCWIN (32 bit)\n', mfilename); mexwDir = fullfile(toolboxDir, 'mex', 'mexw32') ; binwDir = fullfile(vlDir, 'bin', 'win32') ; case 'PCWIN64' fprintf('%s: compiling for PCWIN64 (64 bit)\n', mfilename); mexwDir = fullfile(toolboxDir, 'mex', 'mexw64') ; binwDir = fullfile(vlDir, 'bin', 'win64') ; otherwise error('The architecture is neither PCWIN nor PCWIN64. See help vl_compile.') ; end impLibPath = fullfile(binwDir, 'vl.lib') ; libDir = fullfile(binwDir, 'vl.dll') ; mkd(mexwDir) ; % find the subdirectories of toolbox that we should process subDirs = dir(toolboxDir) ; subDirs = subDirs([subDirs.isdir]) ; discard = regexp({subDirs.name}, '^(.|..|noprefix|mex.*)$', 'start') ; keep = cellfun('isempty', discard) ; subDirs = subDirs(keep) ; subDirs = {subDirs.name} ; % Copy support files ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if ~exist(fullfile(binwDir, 'vl.dll')) error('The VLFeat DLL (%s) could not be found. See help vl_compile.', ... fullfile(binwDir, 'vl.dll')) ; end tmp = dir(fullfile(binwDir, '*.dll')) ; supportFileNames = {tmp.name} ; for fi = 1:length(supportFileNames) name = supportFileNames{fi} ; cp(fullfile(binwDir, name), ... fullfile(mexwDir, name) ) ; end % Ensure implib for LCC ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if useLcc lccImpLibDir = fullfile(mexwDir, 'lcc') ; lccImpLibPath = fullfile(lccImpLibDir, 'VL.lib') ; lccRoot = fullfile(matlabroot, 'sys', 'lcc', 'bin') ; lccImpExePath = fullfile(lccRoot, 'lcc_implib.exe') ; mkd(lccImpLibDir) ; cp(fullfile(binwDir, 'vl.dll'), fullfile(lccImpLibDir, 'vl.dll')) ; cmd = ['"' lccImpExePath '"', ' -u ', '"' fullfile(lccImpLibDir, 'vl.dll') '"'] ; fprintf('Running:\n> %s\n', cmd) ; curPath = pwd ; try cd(lccImpLibDir) ; [d,w] = system(cmd) ; if d, error(w); end cd(curPath) ; catch cd(curPath) ; error(lasterr) ; end end % Compile each mex file ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for i = 1:length(subDirs) thisDir = fullfile(toolboxDir, subDirs{i}) ; fileNames = ls(fullfile(thisDir, '*.c')); for f = 1:size(fileNames,1) fileName = fileNames(f, :) ; sp = strfind(fileName, ' '); if length(sp) > 0, fileName = fileName(1:sp-1); end filePath = fullfile(thisDir, fileName); fprintf('MEX %s\n', filePath); dot = strfind(fileName, '.'); mexFile = fullfile(mexwDir, [fileName(1:dot) 'dll']); if exist(mexFile) delete(mexFile) end cmd = {['-I' toolboxDir], ... ['-I' vlDir], ... '-O', ... '-outdir', mexwDir, ... filePath } ; if useLcc cmd{end+1} = lccImpLibPath ; else cmd{end+1} = impLibPath ; end mex(cmd{:}) ; end end % -------------------------------------------------------------------- function cp(src,dst) % -------------------------------------------------------------------- if ~exist(dst,'file') fprintf('Copying ''%s'' to ''%s''.\n', src,dst) ; copyfile(src,dst) ; end % -------------------------------------------------------------------- function mkd(dst) % -------------------------------------------------------------------- if ~exist(dst, 'dir') fprintf('Creating directory ''%s''.', dst) ; mkdir(dst) ; end vlfeat/toolbox/info.xml0000644000175000017500000000066512237004736014123 0ustar dimadima 2012a VLFeat toolbox ../doc/images/vl_blue.png ../doc/mdoc/ ../doc/images/vl_blue.png vlfeat/toolbox/misc/0000755000175000017500000000000012237042170013364 5ustar dimadimavlfeat/toolbox/misc/inthist.tc0000644000175000017500000000230612237004736015405 0ustar dimadima/** @file inthist.tc ** @brief vl_intist.c helper ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #define JOIN_(a,b) a ## b #define JOIN(a,b) JOIN_(a,b) #undef INTEGRAL #define INTEGRAL JOIN(integral_, SFX) /* This function is 'transpose safe': The integral histogram SRC can be either column major or row major, as long as WIDTH is the fastest varying dimension. */ void INTEGRAL (T* dst, int dstStride, T const* src, int srcWidth, int srcHeight, int srcStride) { int x, y ; *dst = *src ; dst += 1 ; src += 1 ; for (x = 1 ; x < srcWidth ; ++ x) { *dst = *(dst - 1) + *src ; dst += 1 ; src += 1 ; } for (y = 1 ; y < srcHeight ; ++ y) { dst += dstStride - srcWidth ; src += srcStride - srcWidth ; *dst = *(dst - dstStride) + *src ; dst += 1 ; src += 1 ; for (x = 1 ; x < srcWidth ; ++ x) { *dst = *(dst - dstStride) - *(dst - dstStride - 1) + *(dst - 1) + *src ; dst += 1 ; src += 1 ; } } } vlfeat/toolbox/misc/vl_inthist.m0000644000175000017500000000205612237004736015736 0ustar dimadima% VL_INTHIST Calculate Integral Histogram % INTHIST = VL_INTHIST(LABELS) computes the integral histogram for % the label map(s) LABELS. % % LABELS is a [M,N,L] UINT32 array containing L label maps (one for % each MxN layer). Each label map associates to each of the MxN % pixels one of K labels (a value of 0 denotes no association) with % unitary mass. % % INTHIST is the [M,N,K] integral histogram obtained by integrating % the label maps (an integral histogram is just an array of K % integral images, one for each of the K labels). All layers of % labels are accumulated to the same integral histogram. % % The total number of labels K is obtained as the maximum value of % LABELS. VL_INTHIST(..., 'NUMLABELS', K) specifies the number of % labels explicitly. % % VL_INTHIST(..., 'MASS', MASSES) specifies a mass MASSES for each % entry of LABELS. MASSES can be either of class UINT32 or DOUBLE, % and the class of INTHIST varies accordingly. % % See also: VL_IMINTEGRAL(), VL_SAMPLEINTHIST(), VL_HELP(). % Authors: Andrea Vedaldi vlfeat/toolbox/misc/vl_numder2.m0000644000175000017500000000152212237004736015625 0ustar dimadimafunction d = vl_numder2(func, x, varargin) % VL_NUMDER2 Numerical second derivative % D = VL_NUMDER2(FUNC, X) computes the numerical second derivative of % the function FUNC at point X. % % D = VL_NUMDER2(FUNC, X, ARG1, ARG2, ...) allow to pass extra % parameters to the function FUNC. % % See also: VL_NUMDER(), VL_HELP(). N=length(x(:)) ; f00 = feval(func, x, varargin{:}) ; d=zeros(length(f00),N,N) ; D=1e-5 ; D2=D*D ; for n=1:N en=zeros(size(x)) ; en(n)=1 ; for m=1:N em=zeros(size(x)) ; em(m)=1 ; if( n ~= m ) f10 = feval(func, x+en*D, varargin{:}) ; f01 = feval(func, x+em*D, varargin{:}) ; f11 = feval(func, x+en*D+em*D, varargin{:}) ; d(:,n,m) = (f11-f01+f00-f10)/D2 ; else fp = feval(func, x+en*D, varargin{:}) ; fm = feval(func, x-en*D, varargin{:}) ; d(:,n,m) = (fm+fp-2*f00)/D2 ; end end end vlfeat/toolbox/misc/vl_localmax.m0000644000175000017500000000363312237004736016056 0ustar dimadima% VL_LOCALMAX Find local maximizers % SEL=VL_LOCALMAX(F) returns the indexes of the local maximizers of % the Q-dimensional array F. % % A local maximizer is an array element whose value is larger than % the value of all its neighbors. The neighbors of an element % i1...iQ have subscripts j1...jQ such that iq-1 <= jq <= iq % (excluding i1...iQ itself). For example, if Q=1 the neighbors of % an element are its predecessor and successor in the linear order; % if Q=2, its neighbors are the elements immediately to its north, % south, west, est, north-west, north-est, south-west and south-est % (8-neighborhood). % % Points on the boundary of F are ignored (and never selected as % local maximizers). % % SEL=VL_LOCALMAX(F,THRESH) accepts an element as a mazimizer only % if it is not smaller than THRESH. % % SEL=VL_LOCALMAX(F,THRESH,P) looks for neighbors only in the first % P dimensions of the Q-dimensional array F. This allows to process % F in ``slices''. % % Remark:: % Matrices (2-array) with a singleton dimension are % interpreted as vectors (1-array). So for example VL_LOCALMAX([0 1 % 0]) and VL_LOCALMAX([0 1 0]') both return 2 as an aswer. However, % if [0 1 0] is to be interpreted as a 1x2 matrix, then the % correct answer is the empty set, as all elements are on the % boundary. Unfortunately MATLAB does not distinguish between % vectors and 2-matrices with a singleton dimension. To forece % the interpretation of all matrices as 2-arrays, use % VL_LOCALMAX(F,TRESH,2) (but note that in this case the result is % always empty!). % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). % TODO: Companion REFINELOCALMAX % TODO: Do something smarter at boundaries vlfeat/toolbox/misc/vl_sampleinthist.m0000644000175000017500000000135712237004736017143 0ustar dimadima% VL_SAMPLINTHIST Sample integral histogram % HISTS = VL_SAMPLINTHIST(INTHIST, BOXES) samples the integral % histogram INTHIST to obtain the histograms of the specified % BOXES. % % INTHIST is a MxNxK array, where M x N are ``spatial'' dimensions, % and K is the number of histogram bins. INTHIST may be of class % UINT32 or DOUBLE. % % Each box is a four dimensional vector [IMIN JMIN IMAX JMAX]' of % class UINT32 and correspond to the index set [IMIN, IMAX] x [JMIN, % JMAX]. To specify an empty box, let IMIN > IMAX. % % HISTS stores one histogram per column (one for each box) and has K % rows, one for each histogram bin. HIST is of the same class of % INTHIST. % % See also: VL_INTHIST(), VL_IMINTEGRAL(), VL_HELP(). vlfeat/toolbox/misc/vl_binsum.def0000644000175000017500000001755612237004736016066 0ustar dimadima/** @file vl_binsum.def ** @author Andrea Vedaldi ** @brief vl_binsum.def - vl_binsum template **/ #ifndef ITERATE_1 # define ITERATE_1 1 # include "vl_binsum.def" # undef ITERATE_1 # define ITERATE_1 2 # include "vl_binsum.def" # undef ITERATE_1 # define ITERATE_1 3 # include "vl_binsum.def" # undef ITERATE_1 # define ITERATE_1 4 # include "vl_binsum.def" # undef ITERATE_1 # define ITERATE_1 5 # include "vl_binsum.def" # undef ITERATE_1 # define ITERATE_1 6 # include "vl_binsum.def" # undef ITERATE_1 # define ITERATE_1 7 # include "vl_binsum.def" # undef ITERATE_1 # define ITERATE_1 8 # include "vl_binsum.def" # undef ITERATE_1 # define ITERATE_1 9 # include "vl_binsum.def" # undef ITERATE_1 # define ITERATE_1 10 # include "vl_binsum.def" # undef ITERATE_1 #else # ifndef ITERATE_2 # define ITERATE_2 1 # include "vl_binsum.def" # undef ITERATE_2 # define ITERATE_2 2 # include "vl_binsum.def" # undef ITERATE_2 # define ITERATE_2 3 # include "vl_binsum.def" # undef ITERATE_2 # define ITERATE_2 4 # include "vl_binsum.def" # undef ITERATE_2 # define ITERATE_2 5 # include "vl_binsum.def" # undef ITERATE_2 # define ITERATE_2 6 # include "vl_binsum.def" # undef ITERATE_2 # define ITERATE_2 7 # include "vl_binsum.def" # undef ITERATE_2 # define ITERATE_2 8 # include "vl_binsum.def" # undef ITERATE_2 # define ITERATE_2 9 # include "vl_binsum.def" # undef ITERATE_2 # define ITERATE_2 10 # include "vl_binsum.def" # undef ITERATE_2 # endif #endif #if defined(ITERATE_1) & defined(ITERATE_2) # define __VALUE_T__ TYPE(ITERATE_1) # define __INDEX_T__ TYPE(ITERATE_2) static void VL_XCAT4(_vl_binsum_,__VALUE_T__,_,__INDEX_T__) (mxArray * H_array, mxArray const * X_array, mxArray const * B_array, vl_index dim) { vl_size KH, KX, KB ; vl_index j ; __VALUE_T__ * H_pt ; __VALUE_T__ const * X_pt ; __INDEX_T__ const * B_pt ; __INDEX_T__ const * B_end ; KH = mxGetNumberOfElements(H_array) ; /* accumulator */ KX = mxGetNumberOfElements(X_array) ; /* values */ KB = mxGetNumberOfElements(B_array) ; /* accumulator indeces */ H_pt = (__VALUE_T__ *) mxGetData(H_array) ; X_pt = (__VALUE_T__ const *) mxGetData(X_array) ; B_pt = (__INDEX_T__ const *) mxGetData(B_array) ; B_end = B_pt + KB ; if ((KX != KB) && (KX > 1)) { vlmxError(vlmxErrInvalidArgument, "VALUES and INDEXES do not have the same number of elements nor VALUES is a scalar.") ; } /* All dimensions mode ------------------------------------------- */ if (dim <= 0) { while (B_pt < B_end) { /* next bin to accumulate */ j = (vl_index)(*B_pt) - 1 ; /* bin index out of bounds ?*/ if(j < -1 || j >= (signed) KH) { vlmxError(vlmxErrInconsistentData, "The index INDEXES(%" VL_FMT_INDEX ") = %" VL_FMT_INDEX " is out of bound.", (vl_index)(B_pt - (__INDEX_T__ const *)mxGetData(B_array) + 1), j + 1) ; } /* accumulate (but skip null indeces) */ if (j >= 0) { H_pt[j] += *X_pt ; } /* except for the scalar X case, keep X and B synchronized */ ++ B_pt ; if (KX > 1) ++ X_pt ; } } /* One dimension mode -------------------------------------------- */ else { vl_index k ; vl_size d = dim - 1 ; mwSize HD = mxGetNumberOfDimensions(H_array) ; mwSize XD = mxGetNumberOfDimensions(X_array) ; mwSize BD = mxGetNumberOfDimensions(B_array) ; mwSize const * Hdims = mxGetDimensions(H_array) ; mwSize const * Xdims = mxGetDimensions(X_array) ; mwSize const * Bdims = mxGetDimensions(B_array) ; __INDEX_T__ const * B_brk ; __INDEX_T__ const * B_nbrk ; vl_size srd ; /* We need to check a few more details about the matrices */ if (d >= HD) { vlmxError(vlmxErrInconsistentData, "DIM is smaller than one or larger than the number of dimensions of ACCUMULATOR.") ; } /* Here either B has the same number of dimensions of H, or B has exactly one dimension less and DIM=end. The latter is a special case due to the fact that MATLAB deletes singleton dimensions at the ends of arrays, so it would be impossible to operate with DIM=end and size(B,end)=1, which is a logically acceptable case. */ if (HD != BD) { if (! d == HD - 1 && BD == HD - 1) { vlmxError(vlmxErrInconsistentData, "ACCUMULATOR and INDEXES do not have the same number of dimensions.") ; } } if ((BD != XD) && (KX > 1)) { vlmxError(vlmxErrInconsistentData, "VALUES is not a scalar nor has the same number of dimensions of INDEXES.") ; } /* This will contain the stride required to advance to the next * element along dimension DIM. This is the product of all * dimensions < d. */ srd = 1 ; for(k = 0 ; k < (signed) XD ; ++k) { if (KX > 1 && Xdims[k] != Bdims[k]) { vlmxError(vlmxErrInconsistentData, "VALUES and INDEXES have incompatible dimensions.") ; } if (k != (signed) d && (Bdims[k] != Hdims[k])) { vlmxError(vlmxErrInconsistentData, "VALUES and ACCUMULATOR have incompatible dimensions.") ; } if (k < (signed) d) { srd = srd * Bdims[k] ; } } /* We sum efficiently by a single pass of B_pt in memory order. * This however makes the algorithm a bit more involved. How the * sum is performed is easeir understood by an example. Consider * the case d = 3 and BD = 5. So elements in B are indexed as * * B[i0, i1, id, i4, i5] (note that id=i3) * * where the indexes (i0,i1,id,i4,i5) are scanned in column-major * orer. For each of such elements, we acces the element * * R[i0, i1, B[i0,i1,id,i4,i5], i4, i5] * * For greater efficiency, we do not compute the multi-indexes * explicity; instead we advance B_pt at each iteration and we * keep R_pt properly synchronized. * * In particular, at each iteration we want R_pt to point to * * R[i0, i1, 0, i4, i5] * * Therefore, whenever advancing B_pt correspnds to advancing * * a - i0, i1 : we advance R_pt * b - id : we advance R_pt and then we subtract srd to move id back * one position; * c - i4,i5 : we do the same as before, but then we need to add * srd * Hdims[d] * elements to move R_pt up one place * after dimension d. * * We can easily keep track of the three cases without computing * explicitly the indexs. In fact, case (a) occurs srd-1 * consecutive steps and case (b) at the srd step. Similarly, case * (c) accurs at step srd * Bdims[d] steps. The pattern repeats * regularly. */ KH = Hdims[d] ; B_brk = B_pt + srd ; /* next time case (b) */ B_nbrk = B_pt + srd * Bdims [d] ; /* next time case (c) */ while (B_pt < B_end) { /* next bin to accumulate */ j = (vl_index)(*B_pt) - 1; /* index out of bounds? */ if(j < -1 || j >= (signed) KH) { vlmxError(vlmxErrInconsistentData, "The index INDEXES(%" VL_FMT_INDEX ") = %" VL_FMT_INDEX " is out of bounds.", (vl_index)(B_pt - (__INDEX_T__ * const)mxGetData(B_array)) + 1, j + 1) ; } /* accumulate (but skip null indeces) */ if (j >= 0) { H_pt [j * srd] += *X_pt ; } /* next element */ if (KX > 1) X_pt++ ; B_pt ++ ; H_pt ++ ; if (B_pt == B_brk) { /* case (b) occurs */ B_brk += srd ; /* next time case (b) */ H_pt -= srd ; if (B_pt == B_nbrk) { /* case (c) occurs */ B_nbrk += srd * Bdims[d] ; /* next time case (c) */ H_pt += srd * Hdims[d] ; } } } } } #undef __VALUE_T__ #undef __INDEX_T__ #endif vlfeat/toolbox/misc/vl_histmarg.m0000644000175000017500000000162012237004736016066 0ustar dimadimafunction H = vl_histmarg(H, dims) % VL_HISTMARG Marginal of histogram % H = VL_HISTMARG(H, DIMS) marginalizes the historgram H w.r.t the % dimensions DIMS. This is done by summing out all dimensions not % listed in DIMS and deleting them. % % Remark:: % If DIMS lists only one dimension, the returned histogram H is a % column vector. Notice that this way of deleting dimensions is % not always consistent with the SQUEEZE function. % % See also: VL_HELP(). % Authors: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). sz = size(H) ; for d=setdiff(1:length(sz), dims(:)) H = sum(H, d) ; end % Squeeze out marginalized dimensions sz = sz(dims(:)) ; sz = [sz ones(1,2-length(dims(:)))] ; H = reshape(H, sz) ; vlfeat/toolbox/misc/samplinthist.tc0000644000175000017500000000343512237004736016446 0ustar dimadima#define JOIN_(a,b) a ## b #define JOIN(a,b) JOIN_(a,b) #undef SAMPLE #define SAMPLE JOIN(sample_, SFX) VL_INLINE void SAMPLE (T* histPt, T const* intHistPt, vl_size width, vl_size height, vl_size numLabels, vl_uint32 const* boxesPt, vl_size numBoxes) { vl_uindex bi, k ; for (bi = 0 ; bi < numBoxes ; ++ bi) { vl_uint32 x1 = *boxesPt++ ; vl_uint32 y1 = *boxesPt++ ; vl_uint32 x2 = *boxesPt++ ; vl_uint32 y2 = *boxesPt++ ; vl_uint32 stride = width ; vl_uint32 labelStride = width * height ; T const* iter = 0 ; /* empty box case */ if (x1 > x2 || y1 > y2) { for (k = 0 ; k < numLabels ; ++k) { histPt [k] = 0 ; } histPt += numLabels ; continue ; } if (x1 < 1 || y1 < 1) { vlmxError(vlmxErrInconsistentData, "Box %d is out of bounds.", bi + 1) ; } if (x2 > width || y2 > height) { vlmxError(vlmxErrInconsistentData, "Box %d is out of bounds.", bi + 1) ; } -- x1 ; -- x2 ; -- y1 ; -- y2 ; iter = intHistPt + x2 + y2 * stride ; for (k = 0 ; k < numLabels ; ++k) { histPt [k] = *iter ; iter += labelStride ; } if (x1 > 0) { iter = intHistPt + (x1 - 1) + y2 * stride ; for (k = 0 ; k < numLabels ; ++k) { histPt [k] -= *iter ; iter += labelStride ; } } if (x1 > 0 && y1 > 0) { iter = intHistPt + (x1 - 1) + (y1 - 1) * stride ; for (k = 0 ; k < numLabels ; ++k) { histPt [k] += *iter ; iter += labelStride ; } } if (y1 > 0) { iter = intHistPt + x2 + (y1 - 1) * stride ; for (k = 0 ; k < numLabels ; ++k) { histPt [k] -= *iter ; iter += labelStride ; } } histPt += numLabels ; } } vlfeat/toolbox/misc/vl_threads.m0000644000175000017500000000111712237004745015703 0ustar dimadima%VL_THREADS Control VLFeat computational threads % [NUM,MAXNUM] = VL_THREADS() returns the current number of % computational threads NUM and the maximum possible number MAXNUM. % % VL_THREADS(NUM) sets the current number of threads to the % specified value. NUM = VL_THREADS(NUM) does the same, but returns % the *previous* number of computational threads as well. % % See also: VL_HELP(). % Copyright (C) 2013 Andrea Vedaldi. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/misc/vl_cummax.m0000644000175000017500000000130112237004736015536 0ustar dimadima% VL_CUMMAX Cumulative maximum % If X is a vector, VL_CUMMAX(X) is the vector with the cumulative % maximum of X. If X is a matrix, VL_CUMMAX(X) is the matrix of the % cumulative maximum of the columns of X. If X is a multi-dimensional % array, VL_CUMMAX(X) operates along the first non-singleton % dimension. % % The function is analogous to CUMSUM() and CUMPROD(), but it % computes the cumulative maximum rather than the cumulative sum or % product. % % The array X can be of any numeric class. % % Example:: % The cumulative maximum VL_CUMMAX([1 2 3 2 1]) is the vector % [1 2 3 3 3]. % % See also: CUMSUM(), CUMPROD(), VL_HELP(). % Author: Andrea Vedaldi % Copyright vlfeat/toolbox/misc/vl_kdtreequery.c0000644000175000017500000001074012237004745016605 0ustar dimadima/** @internal ** @file vl_kdtreequery.c ** @brief vl_kdtreequery - MEX implementation ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include #include "kdtree.h" /* option codes */ enum { opt_verbose, opt_num_neighs, opt_max_num_comparisons, opt_multithreading } ; /* options */ vlmxOption options [] = { {"Verbose", 0, opt_verbose }, {"NumNeighbors", 1, opt_num_neighs }, {"MaxComparisons", 1, opt_max_num_comparisons }, {"MaxNumComparisons", 1, opt_max_num_comparisons }, {0, 0, 0 } } ; /** ------------------------------------------------------------------ ** @brief MEX entry point **/ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum {IN_FOREST = 0, IN_DATA, IN_QUERY, IN_END} ; enum {OUT_INDEX = 0, OUT_DISTANCE} ; int verbose = 0 ; int opt ; int next = IN_END ; mxArray const *optarg ; VlKDForest * forest ; mxArray const * forest_array = in[IN_FOREST] ; mxArray const * data_array = in[IN_DATA] ; mxArray const * query_array = in[IN_QUERY] ; void * query ; vl_uint32 * index ; void * distance ; vl_size numNeighbors = 1 ; vl_size numQueries ; unsigned int numComparisons = 0 ; unsigned int maxNumComparisons = 0 ; mxClassID dataClass ; vl_index i ; VL_USE_MATLAB_ENV ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin < 3) { vlmxError(vlmxErrNotEnoughInputArguments, NULL) ; } if (nout > 2) { vlmxError(vlmxErrTooManyOutputArguments, NULL) ; } forest = new_kdforest_from_array (forest_array, data_array) ; dataClass = mxGetClassID (data_array) ; if (mxGetClassID (query_array) != dataClass) { vlmxError(vlmxErrInvalidArgument, "QUERY must have the same storage class as DATA.") ; } if (! vlmxIsReal (query_array)) { vlmxError(vlmxErrInvalidArgument, "QUERY must be real.") ; } if (! vlmxIsMatrix (query_array, forest->dimension, -1)) { vlmxError(vlmxErrInvalidArgument, "QUERY must be a matrix with TREE.NUMDIMENSIONS rows.") ; } while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { switch (opt) { case opt_num_neighs : if (! vlmxIsScalar(optarg) || (numNeighbors = mxGetScalar(optarg)) < 1) { vlmxError(vlmxErrInvalidArgument, "NUMNEIGHBORS must be a scalar not smaller than one.") ; } break; case opt_max_num_comparisons : if (! vlmxIsScalar(optarg)) { vlmxError(vlmxErrInvalidArgument, "MAXNUMCOMPARISONS must be a scalar.") ; } maxNumComparisons = mxGetScalar(optarg) ; break; case opt_verbose : ++ verbose ; break ; } } vl_kdforest_set_max_num_comparisons (forest, maxNumComparisons) ; query = mxGetData (query_array) ; numQueries = mxGetN (query_array) ; out[OUT_INDEX] = mxCreateNumericMatrix (numNeighbors, numQueries, mxUINT32_CLASS, mxREAL) ; out[OUT_DISTANCE] = mxCreateNumericMatrix (numNeighbors, numQueries, dataClass, mxREAL) ; index = mxGetData (out[OUT_INDEX]) ; distance = mxGetData (out[OUT_DISTANCE]) ; if (verbose) { VL_PRINTF ("vl_kdforestquery: number of queries: %d\n", numQueries) ; VL_PRINTF ("vl_kdforestquery: number of neighbors per query: %d\n", numNeighbors) ; VL_PRINTF ("vl_kdforestquery: max num of comparisons per query: %d\n", vl_kdforest_get_max_num_comparisons (forest)) ; } numComparisons = vl_kdforest_query_with_array (forest, index, numNeighbors, numQueries, distance, query) ; vl_kdforest_delete(forest) ; /* adjust for MATLAB indexing */ for (i = 0 ; i < (signed) (numNeighbors * numQueries) ; ++i) { index[i] ++ ; } if (verbose) { VL_PRINTF ("vl_kdforestquery: number of comparisons per query: %.3f\n", ((double) numComparisons) / numQueries) ; VL_PRINTF ("vl_kdforestquery: number of comparisons per neighbor: %.3f\n", ((double) numComparisons) / (numQueries * numNeighbors)) ; } } vlfeat/toolbox/misc/vl_twister.m0000644000175000017500000000231012237004736015746 0ustar dimadima% VL_TWISTER Random number generator % VL_TWISTER() is essentially equivalent to MATLAB native RAND() % when using the Twister random number generator. VL_TWISTER(), % VL_TWISTER(M,N,P,...) and VL_TWISTER([M N P ...]) are equivalent % to RAND(), RAND(M,N,P,...) and RAND([M N P ...]) respectively. % % The state of the random generator can be seeded by % VL_TWISTER('STATE', X), where X is a DOUBLE scalar (this is % equivalent to RAND('TWISTER', X)). The state can be read by % VL_TWISTER('STATE') (equivalent to RAND('TWISTER')) and set by % VL_TWISTER('STATE', STATE) (equivalent to RAND('TWISTER', % STATE)). Here STATE is a vector of 625 elements of class % UINT32. Finally VL_TWISTER('STATE',KEY) seeds the generator by a % vector of DOUBLE of length not greater than 624. % % VL_TWISTER() is slightly faster than RAND(). Moreover it can be % used to control the state of the random number generator used by % all VLFEAT functions. % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/misc/svms_common.h0000644000175000017500000002000312237004745016076 0ustar dimadima/** @internal ** @file svms_common.h ** @brief Common functions for SVMs in MATLAB ** @author Milan Sulc ** @author Daniele Perrone ** @author Andrea Vedaldi **/ /* Copyright (C) 2013 Milan Sulc. Copyright (C) 2012 Daniele Perrone. Copyright (C) 2011-12 Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include "mex.h" #include #include /** ------------------------------------------------------------------ ** @internal ** @brief Set value of scalar double to mxArray ** @param array scalar mxArray. ** @param value new value. **/ void setDoubleValue(mxArray* array, double value) { double* temp = (double*) mxGetData(array) ; *temp = value ; } /** ------------------------------------------------------------------ ** @internal ** @brief Set value of scalar integer to mxArray ** ** @param array scalar mxArray. ** @param value new value. ** **/ void setUintValue(mxArray* array, vl_uint32 value) { vl_uint32 * temp = (vl_uint32*) mxGetData(array) ; *temp = value ; } /** ------------------------------------------------------------------ ** @internal ** @brief Create a Matlab struct with diagnostics informations. ** ** @param svm SVM status. **/ mxArray * createInfoStruct(VlSvm* svm) { mwSize dims[] = {1 , 1} ; mxArray *model, *bias; mxArray *output, *dimension, *iterations, *maxIterations, *epsilon ; mxArray *lambda, *biasMultiplier ; mxArray *biasPreconditioner, *energyFrequency, *elapsedTime ; if (svm->type == VL_SVM_SGD) { const char* names [17] = {"model","bias","dimension", "iterations","maxIterations", "epsilon", "lambda", "biasMultiplier", "elapsedTime","energy","regularizerTerm", "lossPos", "lossNeg", "hardLossPos", "hardLossNeg", "biasPreconditioner", "energyFrequency" }; output = mxCreateStructArray(1, dims, 17, names); biasPreconditioner = mxCreateNumericMatrix(1, 1,mxDOUBLE_CLASS, mxREAL) ; setDoubleValue(biasPreconditioner,svm->biasPreconditioner) ; mxSetField(output, 0, "biasPreconditioner", biasPreconditioner) ; energyFrequency = mxCreateNumericMatrix(1, 1,mxUINT32_CLASS, mxREAL) ; mxSetField(output, 0, "energyFrequency", energyFrequency) ; setUintValue(energyFrequency,svm->energyFrequency) ; } else { const char* names [15] = {"model","bias","dimension", "iterations","maxIterations", "epsilon", "lambda", "biasMultiplier", "elapsedTime","energy","regularizerTerm", "lossPos", "lossNeg", "hardLossPos", "hardLossNeg"}; output = mxCreateStructArray(1, dims, 15, names); } /*--MODEL--*/ mwSize mdims[2] ; double * tempBuffer ; mdims[0] = svm->dimension ; mdims[1] = 1 ; model = mxCreateNumericArray(2, mdims, mxDOUBLE_CLASS, mxREAL) ; tempBuffer = (double*) mxGetData(model) ; memcpy(tempBuffer,svm->model,svm->dimension * sizeof(double)) ; mxSetField(output, 0, "model", model) ; /*-- --*/ bias = mxCreateNumericMatrix(1, 1,mxDOUBLE_CLASS, mxREAL) ; setDoubleValue(bias,svm->bias) ; mxSetField(output, 0, "bias", bias) ; dimension = mxCreateNumericMatrix(1, 1,mxUINT32_CLASS, mxREAL) ; setUintValue(dimension,svm->dimension) ; mxSetField(output, 0, "dimension", dimension) ; iterations = mxCreateNumericMatrix(1, 1,mxUINT32_CLASS, mxREAL) ; setUintValue(iterations,svm->iterations) ; mxSetField(output, 0, "iterations", iterations) ; maxIterations = mxCreateNumericMatrix(1, 1,mxUINT32_CLASS, mxREAL) ; setUintValue(maxIterations,svm->maxIterations) ; mxSetField(output, 0, "maxIterations", maxIterations) ; epsilon = mxCreateNumericMatrix(1, 1,mxDOUBLE_CLASS, mxREAL) ; setDoubleValue(epsilon,svm->epsilon) ; mxSetField(output, 0, "epsilon", epsilon) ; lambda = mxCreateNumericMatrix(1, 1,mxDOUBLE_CLASS, mxREAL) ; setDoubleValue(lambda,svm->lambda) ; mxSetField(output, 0, "lambda", lambda) ; biasMultiplier = mxCreateNumericMatrix(1, 1,mxDOUBLE_CLASS, mxREAL) ; setDoubleValue(biasMultiplier,svm->biasMultiplier) ; mxSetField(output, 0, "biasMultiplier", biasMultiplier) ; elapsedTime = mxCreateNumericMatrix(1, 1,mxDOUBLE_CLASS, mxREAL) ; setDoubleValue(elapsedTime,svm->elapsedTime) ; mxSetField(output, 0, "elapsedTime", elapsedTime) ; if (svm->objective) { mxArray * energy, *regularizerTerm, *lossPos, *lossNeg, *hardLossPos, *hardLossNeg ; energy = mxCreateNumericMatrix(1, 1,mxDOUBLE_CLASS, mxREAL) ; setDoubleValue(energy,svm->objective->energy) ; regularizerTerm = mxCreateNumericMatrix(1, 1,mxDOUBLE_CLASS, mxREAL) ; setDoubleValue(regularizerTerm,svm->objective->regularizer) ; lossPos = mxCreateNumericMatrix(1, 1,mxDOUBLE_CLASS, mxREAL) ; setDoubleValue(lossPos,svm->objective->lossPos) ; lossNeg = mxCreateNumericMatrix(1, 1,mxDOUBLE_CLASS, mxREAL) ; setDoubleValue(lossNeg,svm->objective->lossNeg) ; hardLossPos = mxCreateNumericMatrix(1, 1,mxDOUBLE_CLASS, mxREAL) ; setDoubleValue(hardLossPos,svm->objective->hardLossPos) ; hardLossNeg = mxCreateNumericMatrix(1, 1,mxDOUBLE_CLASS, mxREAL) ; setDoubleValue(hardLossNeg,svm->objective->hardLossNeg) ; mxSetField(output, 0, "energy", energy) ; mxSetField(output, 0, "regularizerTerm", regularizerTerm) ; mxSetField(output, 0, "lossPos", lossPos) ; mxSetField(output, 0, "lossNeg", lossNeg) ; mxSetField(output, 0, "hardLossPos", hardLossPos) ; mxSetField(output, 0, "hardLossNeg", hardLossNeg) ; } return output ; } VL_INLINE void diagnosticDispatcher(VlSvm* svm) { if (svm->diagnosticFunction) { mxArray *rhs[2] ; rhs[0] = (mxArray*) svm->diagnosticFunction ; rhs[1] = createInfoStruct(svm) ; if( mxIsClass( rhs[0] , "function_handle")) { mexCallMATLAB(0,NULL,2,rhs,"feval"); } mxDestroyArray(rhs[1]) ; } } /** ------------------------------------------------------------------ ** @internal ** @brief Get training data from training dataset struct ** ** @param trainingData Matlab training dataset struct. ** @param data pointer to variable where to save the data pointer. ** @param dataDimension pointer to variable where to save data dimension. ** @param dataType pointer to variable where to save the data type. ** @param numSamples pointer to variable where to save the number of samples. ** @param labels pointer to variable where to save the set of labels. ** ** The function extracts the information provided in the Matlab ** training set struct. ** **/ void getTrainingData(const mxArray* trainingData, void** data, vl_size* dataDimension, vl_type* dataType, vl_size* numSamples, vl_int8** labels) { mxClassID dataClass ; mxArray* field = NULL ; if (! mxIsStruct(trainingData)) vlmxError(vlmxErrInvalidArgument,"DATA must be a valid TRAINING SET Struct.") ; /* Get data */ field = mxGetField(trainingData, 0, "data") ; if (field == NULL) vlmxError(vlmxErrInvalidArgument, "DATA array missing in TRAINING SET Struct.") ; *data = mxGetData (field) ; *dataDimension = mxGetM(field) ; *numSamples = mxGetN(field) ; dataClass = mxGetClassID(field) ; switch (dataClass) { case mxSINGLE_CLASS : *dataType = VL_TYPE_FLOAT ; break ; case mxDOUBLE_CLASS : *dataType = VL_TYPE_DOUBLE ; break ; default: vlmxError(vlmxErrInvalidArgument, "DATA must be either SINGLE or DOUBLE.") ; } /* Get labels */ field = mxGetField(trainingData, 0, "labels") ; if (field == NULL) vlmxError(vlmxErrInvalidArgument, "DATA array missing in TRAINING SET Struct.") ; if (mxGetClassID(field) != mxINT8_CLASS) vlmxError(vlmxErrInvalidArgument, "LABELS must be INT8.") ; if (! vlmxIsVector(field, *numSamples)) { vlmxError(vlmxErrInvalidArgument, "LABELS is not a vector of dimension compatible with DATA.") ; } *labels = (vl_int8*) mxGetData(field) ; } vlfeat/toolbox/misc/vl_binsum.m0000644000175000017500000000350412237004736015550 0ustar dimadima% VL_BINSUM Binned summation % ACCUMULATOR = VL_BINSUM(ACCUMULATOR,VALUES,INDEXES) adds the % elements of the array VALUES to the elements of the array % ACCUMULATOR indexed by INDEXES. VALUES and INDEXES must have the % same dimensions, and the elements of INDEXES must be valid indexes % for the array ACCUMULATOR (except for null indexes, which are % silently skipped). An application is the calculation of a % histogram ACCUMULATOR, where INDEXES are the bin occurences and % VALUES are the occurence weights. % % VL_BINSUM(...,DIM) operates only along the specified dimension % DIM. In this case, ACCUMULATOR, VALUES and INDEXES are array of % the same dimensions, except for the dimension DIM of ACCUMULATOR, % which may differ, and INDEXES is an array of subscripts of the % DIM-th dimension of ACCUMULATOR. A typical application is the % calculation of multiple histograms, where each histogram is a % 1-dimensional slice of the array ACCUMULATOR along the dimension % DIM. % % VALUES can also be a scalar. In this case, the value of VALUES is % summed to all the specified bins. % % ACCUMULATOR and VALUES must have the same storage % class. ACCUMULATOR, VALUES, and INDEXES can be either DOUBLE, % SINGLE, UINT64, INT64, UINT32, INT32, UINT16, INT16, UINT8, % INT8. Integer math uses modulo-2 arithmetic (most MATLAB functions % saturate instead). % % Example:: % The following relations illustrate VL_BINSUM() behavior: % VL_BINSUM([0 0], 1, 2) = [0 1] % VL_BINSUM([1 7], -1, 1) = [0 7] % VL_BINSUM(EYE(3), [1 1 1], [1 2 3], 1) = 2*EYE(3) % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/misc/vl_getpid.c0000644000175000017500000000152412237004736015515 0ustar dimadima/** @internal ** @file vl_getpid.c ** @author Andrea Vedaldi ** @brief MEX implementation of VL_GETPID() **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #ifdef VL_OS_WIN #include #else #include #endif #include void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[] VL_UNUSED) { double pid ; if (nin > 0) { vlmxError(vlmxErrTooManyInputArguments, NULL) ; } if (nout > 1) { vlmxError(vlmxErrTooManyOutputArguments, NULL) ; } #ifdef VL_OS_WIN pid = (double) GetCurrentProcessId() ; #else pid = (double) getpid() ; #endif out[0] = vlmxCreatePlainScalar (pid) ; } vlfeat/toolbox/misc/vl_ihashsum.c0000644000175000017500000001435212237004736016065 0ustar dimadima/** @internal ** @file ihashsum.c ** @author Andrea Vedaldi ** @brief BINSUM - MEX **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include /* hash function */ unsigned int fnv_hash (void const *key, int len) { unsigned char const *p = key; unsigned int h = 2166136261U ; int i; for ( i = 0; i < len; i++ ) h = ( h * 16777619 ) ^ p[i]; return h; } int is_null (vl_uint8 const * x, int n) { int i ; for (i = 0 ; i < n ; ++i) { if (x[i]) return 0 ; } return 1 ; } int is_equal (vl_uint8 const * x, vl_uint8 const * y, int n) { int i ; for (i = 0 ; i < n ; ++i) { if (x[i] != y[i]) return 0 ; } return 1 ; } void cpy (vl_uint8 * x, vl_uint8 const * y, int n) { int i ; for (i = 0 ; i < n ; ++i){ /* mexPrintf("cpy:%d %d\n",x[i],y[i]);*/ x[i] = y[i] ; } } /** @brief Driver. ** ** @param nount number of output arguments. ** @param out output arguments. ** @param nin number of input arguments. ** @param in input arguments. **/ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum { IN_H, IN_ID, IN_NEXT, IN_K, IN_X } ; enum { OUT_H, OUT_ID, OUT_NEXT} ; mxArray *h_, *id_, *next_ ; vl_uint32 * h ; vl_uint32 * next ; vl_uint8 * id ; vl_uint8 const * x ; unsigned int K, i, N, res, last, ndims ; /* ----------------------------------------------------------------- * Check arguments * -------------------------------------------------------------- */ if( nin != 5 ) { mexErrMsgTxt("Five arguments required") ; } else if (nout > 3) { mexErrMsgTxt("At most three output argument.") ; } if(! mxIsNumeric(in[IN_H]) || mxGetClassID(in[IN_H] )!= mxUINT32_CLASS || ! mxIsNumeric(in[IN_NEXT])|| mxGetClassID(in[IN_NEXT])!= mxUINT32_CLASS) { mexErrMsgTxt("H, NEXT must be UINT32.") ; } if(! mxIsNumeric(in[IN_X]) || mxGetClassID(in[IN_X]) != mxUINT8_CLASS) { mexErrMsgTxt("X must be UINT8") ; } if (mxGetM(in[IN_H]) != 1 || mxGetM(in[IN_NEXT]) != 1) { mexErrMsgTxt("H, NEXT must be row vectors") ; } if(! mxIsNumeric(in[IN_ID]) || mxGetClassID(in[IN_ID])!= mxUINT8_CLASS) { mexErrMsgTxt("ID must be UINT8.") ; } ndims = mxGetM(in[IN_ID]) ; res = mxGetN(in[IN_H]) ; if(res != mxGetN(in[IN_ID]) || res != mxGetN(in[IN_NEXT])) { mexErrMsgTxt("H, ID, NEXT must have the same number of columns") ; } if(ndims != mxGetM(in[IN_X])) { mexErrMsgTxt("ID and X must havethe same number of rows") ; } if(! vlmxIsPlainScalar(in[IN_K])) { mexErrMsgTxt("K must be a scalar") ; } K = (unsigned int) *mxGetPr(in[IN_K]) ; h_ = mxDuplicateArray(in[IN_H]) ; id_ = mxDuplicateArray(in[IN_ID]) ; next_ = mxDuplicateArray(in[IN_NEXT]) ; N = mxGetN(in[IN_X]) ; h = mxGetData(h_ ) ; id = mxGetData(id_ ) ; next = mxGetData(next_) ; x = mxGetData(in[IN_X]) ; /* Temporary remove mxArray pointers to these buffer as we will mxRealloc them and if the user presses Ctrl-C matlab will attempt to free unvalid memory */ mxSetData(h_, 0) ; mxSetData(id_, 0) ; mxSetData(next_, 0) ; /* search for last occupied slot */ last = res ; for (i = 0 ; i < res ; ++i) last = VL_MAX(last, next [i]) ; /* REMARK: last and next are 1 based */ if (K > res) { mexErrMsgTxt("K cannot be larger then the size of H") ; } if (last > res) { mexErrMsgTxt("An element of NEXT is greater than the size of the table") ; } /* mexPrintf("last:%d\n",last) ;*/ /* ----------------------------------------------------------------- * Do job * -------------------------------------------------------------- */ for (i = 0 ; i < N ; ++i) { /* hash */ unsigned int h1, h2 ; unsigned int j, p = 0 ; /* cannot hash null labels */ if (is_null (x + i * ndims, ndims)) { vlmxError(vlmxErrInvalidArgument, "The %d column of X is null.", i+1) ; continue ; } h1 = fnv_hash(x + i * ndims, ndims) % K ; h2 = h1 | 0x1 ; /* this needs to be odd */ /* search first free or matching position */ p = h1 % K ; for (j = 0 ; j < K ; ++j) { if (is_null (id + p * ndims, ndims) || is_equal(id + p * ndims, x + i * ndims, ndims)) break ; h1 += h2 ; p = h1 % K ; } /* if after scanning the K elements in the hash table an empty/matching bucket is still not found, start using next to go into the overflow table */ while (! is_null (id + p * ndims, ndims) && ! is_equal(id + p * ndims, x + i * ndims, ndims)) { if (next [p] > res) { mexErrMsgTxt("An element of NEXT is greater than the size of the table") ; } /* append */ if (next [p] == 0) { if (last >= res) { size_t res_ = res + VL_MAX(res / 2, 2) ; h = mxRealloc(h, res_ * sizeof(vl_uint32) ) ; next = mxRealloc(next, res_ * sizeof(vl_uint32) ) ; id = mxRealloc(id, res_ * sizeof(vl_uint8) * ndims) ; memset (h + res, 0, (res_ - res) * sizeof(vl_uint32) ) ; memset (next + res, 0, (res_ - res) * sizeof(vl_uint32) ) ; memset (id + res * ndims, 0, (res_ - res) * sizeof(vl_uint8) * ndims) ; res = res_ ; } next [p] = ++ last ; } p = next [p] - 1 ; } /* accumulate */ h [p] += 1 ; /* mexPrintf("p %d dims %d i %d N %d\n ", p, ndims, i, N) ;*/ cpy(id + p * ndims, x + i * ndims, ndims) ; } mxSetData(h_, mxRealloc(h, last * sizeof(vl_uint32) )) ; mxSetData(next_, mxRealloc(next, last * sizeof(vl_uint32) )) ; mxSetData(id_, mxRealloc(id, last * sizeof(vl_uint8 ) * ndims)) ; mxSetN(h_, last) ; mxSetN(id_, last) ; mxSetN(next_, last) ; mxSetM(h_, 1) ; mxSetM(next_, 1) ; mxSetM(id_, ndims) ; out[OUT_H] = h_ ; out[OUT_ID] = id_ ; out[OUT_NEXT] = next_ ; } vlfeat/toolbox/misc/vl_homkermap.m0000644000175000017500000000515712237004745016244 0ustar dimadima% VL_HOMKERMAP Homogeneous kernel map % V = VL_HOMKERMAP(X, N) computes a 2*N+1 dimensional approximated % kernel map for the Chi2 kernel. X is an array of data points. Each % point is expanded into a vector of dimension 2*N+1 and saved to % the output V. The expanded feature vectors are stacked along the % first dimension, so that the output array V has the same % dimensions of the input array X except for the first one, which is % 2*N+1 times larger. % % The function accepts the following options: % % Kernel:: KCHI2 % One of KCHI2 (Chi2 kernel), KINTERS (intersection kernel), KJS % (Jensen-Shannon kernel). The 'Kernel' option name can be omitted, % i.e. VL_HOMKERMAP(..., 'kernel', 'kchi2') has the same effect of % VL_HOMKERMAP(..., 'kchi2'). % % Period:: [automatically tuned] % Set the period of the kernel specturm. The approximation is % based on periodicizing the kernel specturm. If not specified, % the period is automatically set based on the heuristic described % in [2]. % % Window:: [RECTANGULAR] % Set the window used to truncate the spectrum before The window % can be either RECTANGULAR or UNIFORM window. See [2] and the API % documentation for details. % % Gamma:: [1] % Set the homogeneity degree of the kernel. The standard kernels % are 1-homogeneous, but sometimes smaller values perform better % in applications. See [2] for details. % % Example:: % The following code results in approximatively the same % similarities matrices between points X and Y: % % x = rand(10,1) ; % y = rand(10,100) ; % psix = vl_homkermap(x, 3) ; % psiy = vl_homkermap(y, 3) ; % figure(1) ; clf ; % ker = vl_alldist(x, y, 'kchi2') ; % ker_ = psix' * psiy ; % plot([ker ; ker_]') ; % % Note:: % The homogeneous kernels K(X,Y) are normally defined for % non-negative data only. VL_HOMKERMAP defines them for both % positive and negative data by using the definition % SIGN(X)SIGN(Y)K(ABS(X),ABS(Y)) -- note that other extensions are % possible as well (see [2]). % % REFERENCES:: % [1] A. Vedaldi and A. Zisserman % `Efficient Additive Kernels via Explicit Feature Maps', % Proc. CVPR, 2010. % % [2] A. Vedaldi and A. Zisserman % `Efficient Additive Kernels via Explicit Feature Maps', % PAMI, 2011 (submitted). % % See also: VL_HELP(). % Authors: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/misc/vl_lbp.c0000644000175000017500000000447012237004736015021 0ustar dimadima/** @internal ** @file imintegral.c ** @author Brian Fulkerson ** @brief Create an integral image - MEX definition **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { float * image ; vl_size width, height ; vl_size cellSize = 16 ; enum {IN_I = 0, IN_CELLSIZE} ; enum {OUT_FEATURES = 0} ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin > 2) { vlmxError(vlmxErrTooManyInputArguments, NULL) ; } if (nin < 2) { vlmxError(vlmxErrNotEnoughInputArguments, NULL) ; } if (nout > 1) { vlmxError(vlmxErrTooManyOutputArguments, NULL) ; } if (! mxIsNumeric(IN(I)) || ! vlmxIsReal(IN(I)) || ! vlmxIsMatrix(IN(I), -1, -1)) { vlmxError(vlmxErrInvalidArgument, "I is not a numeric matrix.") ; } if (mxGetClassID(IN(I)) != mxSINGLE_CLASS) { vlmxError(vlmxErrInvalidArgument, "I is not of class SINGLE.") ; } if (! vlmxIsPlainScalar(IN(CELLSIZE))) { vlmxError(vlmxErrInvalidArgument, "CELLSIZE is not a plain scalar.") ; } if (mxGetScalar(IN(CELLSIZE)) < 1.0) { vlmxError(vlmxErrInvalidArgument, "CELLSIZE is less than 1.") ; } cellSize = (vl_size) mxGetScalar(IN(CELLSIZE)) ; image = mxGetData(IN(I)) ; width = mxGetN(IN(I)) ; height = mxGetM(IN(I)) ; /* do job */ { /* recall that MATLAB images are transposed */ mwSize dimensions [3] ; /* get LBP object */ VlLbp * lbp = vl_lbp_new (VlLbpUniform, VL_TRUE) ; if (lbp == NULL) { vlmxError(vlmxErrAlloc, NULL) ; } /* get output buffer */ dimensions[0] = height / cellSize ; dimensions[1] = width / cellSize ; dimensions[2] = vl_lbp_get_dimension(lbp) ; OUT(FEATURES) = mxCreateNumericArray(3, dimensions, mxSINGLE_CLASS, mxREAL) ; vl_lbp_process(lbp, mxGetData(OUT(FEATURES)), image, height, width, cellSize) ; vl_lbp_delete(lbp) ; } } vlfeat/toolbox/misc/vl_inthist.c0000644000175000017500000001421712237004736015726 0ustar dimadima/** @internal ** @file inthist.c ** @author Andrea Vedaldi ** @brief Calculate an integral histogram - MEX definition **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include #include enum {opt_mass = 1, opt_numLabels, opt_verbose} ; /* options */ vlmxOption options [] = { {"Mass", 1, opt_mass, }, {"NumLabels", 1, opt_numLabels }, {"Verbose", 0, opt_verbose }, {0, 0, 0 } } ; #undef T #undef SFX #define T vl_int32 #define SFX i #include "inthist.tc" #undef T #undef SFX #define T vl_uint32 #define SFX ui #include "inthist.tc" #undef T #undef SFX #define T double #define SFX d #include "inthist.tc" #undef T #undef SFX #define T float #define SFX f #include "inthist.tc" void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { mwSize dims [3] ; vl_size numDims ; mwSize const * dimsPt = 0 ; vl_uint32* labelsPt = 0 ; void* massPt = 0 ; void* histPt = 0 ; vl_uint32 numLabels = 0 ; mxClassID dataClass = mxUINT32_CLASS ; vl_size width, height, numMaps ; vl_uindex k, q ; enum {IN_LABELS = 0, IN_END} ; enum {OUT_HIST = 0} ; int opt ; int nextOpt = IN_END ; mxArray const *optArg ; int verb = 0 ; /* ------------------------------------------------------------------ ** Check the arguments ** --------------------------------------------------------------- */ if (nin < 1) { mexErrMsgTxt("At least one input argument is required.") ; } else if (nout > 1) { mexErrMsgTxt("Too many output arguments."); } if (mxGetClassID(IN(LABELS)) != mxUINT32_CLASS) { mexErrMsgTxt("LABELS must be of class UINT32.") ; } labelsPt = mxGetData(IN(LABELS)) ; numDims = mxGetNumberOfDimensions(IN(LABELS)) ; if (numDims > 3) { mexErrMsgTxt("LABELS must be a MxNxK array.") ; } labelsPt = mxGetData(IN(LABELS)) ; dimsPt = mxGetDimensions(IN(LABELS)) ; height = dimsPt [0] ; width = dimsPt [1] ; if (numDims > 2) { numMaps = dimsPt [2] ; } else { numMaps = 1 ; } while ((opt = vlmxNextOption (in, nin, options, &nextOpt, &optArg)) >= 0) { switch (opt) { case opt_mass : { massPt = mxGetData(optArg) ; dimsPt = mxGetDimensions(optArg) ; if (mxGetNumberOfDimensions(optArg) != numDims || height != dimsPt [0] || width != dimsPt [1] || ((numDims > 2) && numMaps < dimsPt[2])) { mexErrMsgTxt("MASS must have the same dimensions of LABELS.") ; } /* the data is DOUBLE or UINT32 depending on the class of MASS */ dataClass = mxGetClassID(optArg) ; if (dataClass != mxDOUBLE_CLASS && dataClass != mxUINT32_CLASS) { mexErrMsgTxt("MASS must be of either class DOUBLE or UINT32.") ; } break ; } case opt_numLabels : if (!vlmxIsPlainScalar(optArg)) { mexErrMsgTxt("NUMLABELS must be a real scalar.") ; } numLabels = *mxGetPr(optArg) ; break ; case opt_verbose : ++ verb ; break ; default: abort() ; } } /* If numLabels is not specified, guess it from LABELS */ if (numLabels == 0) { for (k = 0 ; k < width*height ; ++k) { numLabels = VL_MAX(numLabels, labelsPt [k]) ; } } else { for (k = 0 ; k < width*height ; ++k) { if (labelsPt [k] > numLabels) { mexErrMsgTxt("LABELS contains an element greater than NUMLABELS.") ; } } } /* Allocate space for the integral histogram */ dims [0] = height ; dims [1] = width ; dims [2] = numLabels ; OUT(HIST) = mxCreateNumericArray(3, dims, dataClass, mxREAL) ; histPt = mxGetData(OUT(HIST)) ; if (verb) { mexPrintf("inthist: integrating %d x %d label map with %d labels\n", width, height, numLabels) ; mexPrintf(" custom mass map: %s\n", VL_YESNO(massPt)) ; } /* ------------------------------------------------------------------ * Distribute data * --------------------------------------------------------------- */ #define PROCESS(T, INTEGRAL) \ size_t const K = width*height ; \ T* dataPt = histPt ; \ if (massPt == 0) { \ for (q = 0 ; q < numMaps ; ++ q) { \ for (k = 0 ; k < K ; ++ k) { \ size_t label = *labelsPt++ ; \ if (label) dataPt [k + (label - 1) * K] += (T) 1 ; \ } \ } \ } else { \ for (q = 0 ; q < numMaps ; ++q) { \ for (k = 0 ; k < K ; ++ k) { \ size_t label = *labelsPt++ ; \ if (label) dataPt [k + (label - 1) * K] \ += ((T*)massPt) [k] ; \ } \ } \ } \ for (k = 0 ; k < numLabels ; ++k) { \ INTEGRAL (dataPt + k*K, height, \ dataPt + k*K, height, width, height) ; \ } switch (dataClass) { case mxUINT32_CLASS: { PROCESS(vl_uint32, integral_ui) } ; break ; case mxDOUBLE_CLASS: { PROCESS(double, integral_d) } ; break ; default : abort() ; } } vlfeat/toolbox/misc/vl_numder.m0000644000175000017500000000125412237004736015545 0ustar dimadimafunction d = vl_numder(func, x, varargin) % VL_NUMDER Numerical derivative % D = VL_NUMDER(FUNC, X) computes the numerical derivative of the % function FUNC at point X. X is a real array and is passed as first % argument of FUNC. % % D = VL_NUMDER(FUNC, X, ARG1, ARG2, ...) passes ARG1, ARG2, ... as % additional arguments to the function FUNC. % % See also: VL_NUMDER2(), VL_HELP(). % TODO: uniform sacaling of axis is not a good idea dx = 1e-7 ; N = numel(x) ; fx = feval(func, x, varargin{:}) ; d = zeros(length(fx(:)),N) ; for n=1:N e = zeros(size(x)) ; e(n) = 1 ; fxn = feval(func, x+dx*e, varargin{:}) ; di = (fxn - fx) / dx ; d(:,n) = di(:) ; end vlfeat/toolbox/misc/vl_localmax.c0000644000175000017500000001507712237004736016051 0ustar dimadima/** file: localmax.c ** author: Andrea Vedaldi ** description: Find local maximizer of multi-dimensional array. **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include /** Matlab driver. **/ #define greater(a,b) ((a) > (b)+threshold) void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { int M, N ; const double* F_pt ; int ndims ; int pdims = -1 ; int* offsets ; int* midx ; int* neighbors ; int nneighbors ; int* dims ; enum {F=0,THRESHOLD,P} ; enum {MAXIMA=0} ; double threshold = - mxGetInf() ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin < 1) { mexErrMsgTxt("At least one input argument is required."); } else if (nin > 3) { mexErrMsgTxt("At most three arguments are allowed.") ; } else if (nout > 1) { mexErrMsgTxt("Too many output arguments"); } /* The input must be a real matrix. */ if (!mxIsDouble(in[F]) || mxIsComplex(in[F])) { mexErrMsgTxt("Input must be real matrix."); } if(nin > 1) { if(!vlmxIsPlainScalar(in[THRESHOLD])) { mexErrMsgTxt("THRESHOLD must be a real scalar.") ; } threshold = *mxGetPr(in[THRESHOLD]) ; } if(nin > 2) { if(!vlmxIsPlainScalar(in[P])) mexErrMsgTxt("P must be a non-negative integer") ; pdims = (int) *mxGetPr(in[P]) ; if(pdims < 0) mexErrMsgTxt("P must be a non-negative integer") ; } ndims = mxGetNumberOfDimensions(in[F]) ; { /* We need to make a copy because in one special case (see below) we need to adjust dims[]. */ int d ; mwSize const * const_dims = mxGetDimensions(in[F]) ; dims = mxMalloc(sizeof(int)*ndims) ; for(d=0 ; d < ndims ; ++d) dims[d] = const_dims[d] ; } M = dims[0] ; N = dims[1] ; F_pt = mxGetPr(in[F]) ; /* If there are only two dimensions and if one is singleton, then assume that a vector has been provided as input (and treat this as a COLUMN matrix with p=1). We do this because Matlab does not distinguish between vectors and 1xN or Mx1 matrices and because the cases 1xN and Mx1 are trivial (the result is alway empty). */ if((ndims == 2) && (pdims < 0) && (M == 1 || N == 1)) { pdims = 1 ; M = (M>N)?M:N ; N = 1 ; dims[0]=M ; dims[1]=N ; } /* search the local maxima along the first p dimensions only */ if(pdims < 0) pdims = ndims ; if(pdims > ndims) { mxFree(dims) ; mexErrMsgTxt("P must not be greater than the number of dimensions") ; } /* ------------------------------------------------------------------ * Do the job * --------------------------------------------------------------- */ { int maxima_size = M*N ; int* maxima_start = mxMalloc(sizeof(int) * maxima_size) ; int* maxima_iterator = maxima_start ; int* maxima_end = maxima_start + maxima_size ; int i,h,o ; const double* pt = F_pt ; /* Compute the offsets between dimensions. */ offsets = mxMalloc(sizeof(int) * ndims) ; offsets[0] = 1 ; for(h = 1 ; h < ndims ; ++h) offsets[h] = offsets[h-1]*dims[h-1] ; /* Multi-index. */ midx = mxMalloc(sizeof(int) * ndims) ; for(h = 0 ; h < ndims ; ++h) midx[h] = 1 ; /* Neighbors. */ nneighbors = 1 ; o=0 ; for(h = 0 ; h < pdims ; ++h) { nneighbors *= 3 ; midx[h] = -1 ; o -= offsets[h] ; } nneighbors -= 1 ; neighbors = mxMalloc(sizeof(int) * nneighbors) ; i = 0 ; while(VL_TRUE) { if(o != 0 ) neighbors[i++] = o ; h = 0 ; while( o += offsets[h], (++midx[h]) > 1 ) { o -= 3*offsets[h] ; midx[h] = -1 ; if(++h >= pdims) goto stop ; } } stop: ; /* Starts at the corner (1,1,...,1,0,0,...0) */ for(h = 0 ; h < pdims ; ++h) { midx[h] = 1 ; pt += offsets[h] ; } for(h = pdims ; h < ndims ; ++h) { midx[h] = 0 ; } /* --------------------------------------------------------------- * Loop * ------------------------------------------------------------ */ /* If any dimension in the first P is less than 3 elements wide then just return the empty matrix (if we proceed without doing anything we break the carry reporting algorithm below). */ for(h=0 ; h < pdims ; ++h) if(dims[h] < 3) goto end ; while(VL_TRUE) { double v ; bool is_greater; /* Propagate carry along multi index midx */ h = 0 ; while((midx[h]) >= dims[h] - 1) { pt += 2*offsets[h] ; /* skip first and last el. */ midx[h] = 1 ; if(++h >= pdims) goto next_layer ; ++midx[h] ; } /* for(h = 0 ; h < ndims ; ++h ) mexPrintf("%d ", midx[h]) ; mexPrintf(" -- %d -- pdims %d \n", pt - F_pt,pdims) ; */ /* Scan neighbors */ v = *pt ; is_greater = (v >= threshold) ; i = 0 ; while(is_greater && i < nneighbors) is_greater &= v > *(pt + neighbors[i++]) ; /* Add the local maximum */ if(is_greater) { /* Need more space? */ if(maxima_iterator == maxima_end) { maxima_size += M*N ; maxima_start = mxRealloc(maxima_start, maxima_size*sizeof(int)) ; maxima_end = maxima_start + maxima_size ; maxima_iterator = maxima_end - M*N ; } *maxima_iterator++ = pt - F_pt + 1 ; } /* Go to next element */ pt += 1 ; ++midx[0] ; continue ; next_layer: ; if( h >= ndims ) goto end ; while((++midx[h]) >= dims[h]) { midx[h] = 0 ; if(++h >= ndims) goto end ; } } end:; /* Return. */ { double* M_pt ; out[MAXIMA] = mxCreateDoubleMatrix (1, maxima_iterator-maxima_start, mxREAL) ; maxima_end = maxima_iterator ; maxima_iterator = maxima_start ; M_pt = mxGetPr(out[MAXIMA]) ; while(maxima_iterator != maxima_end) { *M_pt++ = *maxima_iterator++ ; } } /* Release space. */ mxFree(offsets) ; mxFree(neighbors) ; mxFree(midx) ; mxFree(maxima_start) ; } mxFree(dims) ; } vlfeat/toolbox/misc/vl_sampleinthist.c0000644000175000017500000000652512237004736017133 0ustar dimadima/** @internal ** @file samplinthist.c ** @author Andrea Vedaldi ** @brief Sample an integral histogram - MEX definition **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include #include #undef T #undef SFX #define T vl_int32 #define SFX i #include "samplinthist.tc" #undef T #undef SFX #define T vl_uint32 #define SFX ui #include "samplinthist.tc" #undef T #undef SFX #define T double #define SFX d #include "samplinthist.tc" #undef T #undef SFX #define T float #define SFX f #include "samplinthist.tc" void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { mwSize dims [3] ; int numDims ; mwSize const * dimsPt = 0 ; void* histPt = 0 ; void const* intHistPt = 0 ; vl_uint32 const* boxesPt = 0 ; size_t numLabels = 0 ; mxClassID histClass = mxUINT32_CLASS ; size_t numBoxes = 0 ; int width, height ; enum {IN_INTHIST = 0, IN_BOXES, IN_END} ; enum {OUT_HIST = 0} ; /* ------------------------------------------------------------------ ** Check the arguments ** --------------------------------------------------------------- */ if (nin != 2) { vlmxError(vlmxErrInvalidArgument, "Two arguments required.") ; } else if (nout > 1) { vlmxError(vlmxErrInvalidArgument, "Too many output arguments."); } histClass = mxGetClassID(in[IN_INTHIST]) ; if (histClass != mxDOUBLE_CLASS && histClass != mxUINT32_CLASS) { vlmxError(vlmxErrInvalidArgument, "INTHIST must be of either class DOUBLE or UINT32.") ; } numDims = mxGetNumberOfDimensions(in[IN_INTHIST]) ; if (numDims > 3) { vlmxError(vlmxErrInvalidArgument, "INTHIST must be a MxNxK array.") ; } intHistPt = mxGetData(in[IN_INTHIST]) ; dimsPt = mxGetDimensions(in[IN_INTHIST]) ; height = dimsPt [0] ; width = dimsPt [1] ; numLabels = (numDims >= 3) ? dimsPt [2] : 1 ; numBoxes = mxGetNumberOfElements(in[IN_BOXES]) ; if (numBoxes % 4 != 0) { vlmxError(vlmxErrInvalidArgument, "The number of elements of BOXES must be a multiple of four.") ; } numBoxes /= 4 ; if (mxGetClassID(in[IN_BOXES]) != mxUINT32_CLASS) { vlmxError(vlmxErrInvalidArgument, "BOXES must be of class UINT32.") ; } boxesPt = (vl_uint32*) mxGetData(in[IN_BOXES]) ; /* Allocate space for the result */ dims [0] = numLabels ; dims [1] = numBoxes ; out [OUT_HIST] = mxCreateNumericArray(2, dims, histClass, mxREAL) ; histPt = mxGetData(out[OUT_HIST]) ; /* ------------------------------------------------------------------ * Sample integral histogram * --------------------------------------------------------------- */ #define PROCESS(SAMPLE, T) \ SAMPLE (histPt, \ intHistPt, height, width, numLabels, \ boxesPt, numBoxes) ; switch (histClass) { case mxDOUBLE_CLASS: { PROCESS(sample_d, double) } ; break ; case mxUINT32_CLASS: { PROCESS(sample_ui, vl_uint32) } ; break ; default: abort() ; } } vlfeat/toolbox/misc/vl_homkermap.c0000644000175000017500000001324012237004745016222 0ustar dimadima/** @file vl_homkmap.c ** @brief vl_homkmap - MEX implementation ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include "mexutils.h" #include #include #include enum { opt_KCHI2, opt_KL1, opt_KJS, opt_KINTERS, opt_kernel, opt_gamma, opt_period, opt_window } ; vlmxOption options [] = { {"kl1", 0, opt_KL1 }, {"kchi2", 0, opt_KCHI2 }, {"kjs", 0, opt_KJS }, {"kinters", 0, opt_KINTERS }, {"kernel", 1, opt_kernel }, {"gamma", 1, opt_gamma }, {"period", 1, opt_period }, {"window", 1, opt_window }, {0, 0, 0 } } ; /* ------------------------------------------------------------------- * Driver * ---------------------------------------------------------------- */ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { typedef int unsigned data_t ; enum {IN_X = 0, IN_N, IN_END} ; enum {OUT_V = 0} ; VlHomogeneousKernelType kernelType = VlHomogeneousKernelChi2 ; VlHomogeneousKernelMapWindowType windowType = VlHomogeneousKernelMapWindowRectangular ; mwSize numDimensions ; mwSize const * dimensions ; mxClassID dataClassId ; double gamma = 1.0 ; int n ; double period = -1 ; /* for option parsing */ int opt ; int next = IN_END ; mxArray const *optarg ; VL_USE_MATLAB_ENV ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nout > 1) { vlmxError(vlmxErrTooManyOutputArguments, NULL) ; } if (nin < IN_END) { vlmxError(vlmxErrNotEnoughInputArguments, NULL) ; } dataClassId = mxGetClassID(IN(X)) ; if (dataClassId != mxDOUBLE_CLASS && dataClassId != mxSINGLE_CLASS) { vlmxError(vlmxErrInvalidArgument, "X is neither DOUBLE nor SINGLE.") ; } numDimensions = mxGetNumberOfDimensions(IN(X)) ; dimensions = mxGetDimensions(IN(X)) ; if (! vlmxIsPlainScalar(IN(N))) { vlmxError(vlmxErrInvalidArgument, "N is not a scalar.") ; } n = *mxGetPr(IN(N)) ; if (n < 0) { vlmxError(vlmxErrInvalidArgument, "N is negative.") ; } while ((opt = vlmxNextOption(in, nin, options, &next, &optarg)) >= 0) { switch (opt) { case opt_KINTERS: case opt_KL1: kernelType = VlHomogeneousKernelIntersection ; break ; case opt_KCHI2: kernelType = VlHomogeneousKernelChi2 ; break ; case opt_KJS: kernelType = VlHomogeneousKernelJS ; break ; case opt_kernel: /* make the kernel option argument to be the next option, and hence processed by the code above */ next-- ; break ; case opt_period: if (! vlmxIsPlainScalar(optarg)){ vlmxError(vlmxErrInvalidArgument, "PERIOD is not a scalar.") ; } period = *mxGetPr(optarg) ; if (period <= 0) { vlmxError(vlmxErrInvalidArgument, "PERIOD is not positive.") ; } break ; case opt_gamma: if (! vlmxIsPlainScalar(optarg)){ vlmxError(vlmxErrInvalidArgument, "GAMMA is not a scalar.") ; } gamma = *mxGetPr(optarg) ; if (gamma <= 0) { vlmxError(vlmxErrInvalidArgument, "GAMMA is not positive.") ; } break ; case opt_window: if (! vlmxIsString(optarg,-1)){ vlmxError(vlmxErrInvalidArgument, "WINDOW is not a string.") ; } else { char buffer [1024] ; mxGetString(optarg, buffer, sizeof(buffer) / sizeof(char)) ; if (vl_string_casei_cmp("uniform", buffer) == 0) { windowType = VlHomogeneousKernelMapWindowUniform ; } else if (vl_string_casei_cmp("rectangular", buffer) == 0) { windowType = VlHomogeneousKernelMapWindowRectangular ; } else { vlmxError(vlmxErrInvalidArgument, "WINDOW=%s is not recognized.", buffer) ; } } break ; default: abort() ; } } /* ----------------------------------------------------------------- * Evaluate kernel map * -------------------------------------------------------------- */ { vl_uindex j ; vl_size numElements = mxGetNumberOfElements(IN(X)) ; VlHomogeneousKernelMap * map = vl_homogeneouskernelmap_new (kernelType, gamma, n, period, windowType) ; mwSize extDimensions [20] ; for (j = 0 ; j < numDimensions ; ++j) extDimensions[j] = dimensions[j] ; extDimensions[0] *= 2*n+1 ; OUT(V) = mxCreateNumericArray(numDimensions, extDimensions, dataClassId, mxREAL) ; switch (dataClassId) { case mxDOUBLE_CLASS : { double * X = mxGetData(IN(X)) ; double * V = mxGetData(OUT(V)) ; for (j = 0 ; j < numElements ; ++j) { vl_homogeneouskernelmap_evaluate_d(map, V, 1, *X++) ; V += 2*n+1 ; } break ; } case mxSINGLE_CLASS : { float * X = mxGetData(IN(X)) ; float * V = mxGetData(OUT(V)) ; for (j = 0 ; j < numElements ; ++j) { vl_homogeneouskernelmap_evaluate_f(map, V, 1, *X++) ; V += 2*n+1 ; } break ; } default: abort() ; } vl_homogeneouskernelmap_delete (map) ; } } vlfeat/toolbox/misc/vl_svmpegasos.m0000644000175000017500000000223212237004745016437 0ustar dimadima% VL_SVMPEGASOS [deprecated] % VL_SVMPEGASOS is deprecated. Please use VL_SVMTRAIN() instead. function [w b info] = vl_svmpegasos(DATA,LAMBDA, varargin) % Verbose not supported if (sum(strcmpi('Verbose',varargin))) varargin(find(strcmpi('Verbose',varargin),1))=[]; fprintf('Option VERBOSE is no longer supported.\n'); end % DiagnosticCallRef not supported if (sum(strcmpi('DiagnosticCallRef',varargin))) varargin(find(strcmpi('DiagnosticCallRef',varargin),1)+1)=[]; varargin(find(strcmpi('DiagnosticCallRef',varargin),1))=[]; fprintf('Option DIAGNOSTICCALLREF is no longer supported.\n Please follow the VLFeat tutorial on SVMs for more information on diagnostics\n'); end % different default value for MaxIterations if (sum(strcmpi('MaxIterations',varargin)) == 0) varargin{end+1} = 'MaxIterations'; varargin{end+1} = ceil(10/LAMBDA); end % different default value for BiasMultiplier if (sum(strcmpi('BiasMultiplier',varargin)) == 0) varargin{end+1} = 'BiasMultiplier'; varargin{end+1} = 0; end [w b info] = vl_svmtrain(DATA,LAMBDA,varargin{:}); fprintf('\n vl_svmpegasos is DEPRECATED. Please use vl_svmtrain instead. \n\n'); end vlfeat/toolbox/misc/vl_getpid.m0000644000175000017500000000045212237004736015526 0ustar dimadima% VL_GETPID Get MATLAB process ID % VL_GETPID() returns MATLAB process ID. % % Algorithm:: % VL_GETPID() returns the result of the getpid() system call on % UNIX-like operating systems and of GetCurrentProcessID() on % Windows. % % See also: VL_HELP(). % Authors: Andrea Vedaldi vlfeat/toolbox/misc/vl_kdtreebuild.c0000644000175000017500000001274612237004745016547 0ustar dimadima/** @internal ** @file vl_kdetreebuild.c ** @brief vl_KDForestbuild MEX implementation ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include #include #include "kdtree.h" /* option codes */ enum { opt_verbose, opt_threshold_method, opt_num_trees, opt_distance } ; /* options */ vlmxOption options [] = { {"Verbose", 0, opt_verbose }, {"ThresholdMethod", 1, opt_threshold_method }, {"NumTrees", 1, opt_num_trees }, {"Distance", 1, opt_distance }, {0, 0, 0 } } ; /** ------------------------------------------------------------------ ** @brief MEX entry point **/ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum {IN_DATA = 0, IN_END} ; enum {OUT_TREE = 0} ; int verbose = 0 ; int opt ; int next = IN_END ; mxArray const *optarg ; VlKDForest * forest ; void * data ; vl_size numData ; vl_size dimension ; mxClassID dataClass ; vl_type dataType ; int thresholdingMethod = VL_KDTREE_MEDIAN ; VlVectorComparisonType distance = VlDistanceL2; vl_size numTrees = 1 ; VL_USE_MATLAB_ENV ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin < 1) { vlmxError(vlmxErrInvalidArgument, "At least one argument required") ; } else if (nout > 2) { vlmxError(vlmxErrInvalidArgument, "Too many output arguments"); } dataClass = mxGetClassID(IN(DATA)) ; if (! vlmxIsMatrix (IN(DATA), -1, -1) || ! vlmxIsReal (IN(DATA))) { vlmxError(vlmxErrInvalidArgument, "DATA must be a real matrix ") ; } switch (dataClass) { case mxSINGLE_CLASS : dataType = VL_TYPE_FLOAT ; break ; case mxDOUBLE_CLASS : dataType = VL_TYPE_DOUBLE ; break ; default: vlmxError(vlmxErrInvalidArgument, "DATA must be either SINGLE or DOUBLE") ; } while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { char buffer [1024] ; switch (opt) { case opt_threshold_method : mxGetString (optarg, buffer, sizeof(buffer)/sizeof(buffer[0])) ; if (! vlmxIsString(optarg, -1)) { vlmxError(vlmxErrInvalidOption, "THRESHOLDMETHOD must be a string") ; } if (vl_string_casei_cmp(buffer, "median") == 0) { thresholdingMethod = VL_KDTREE_MEDIAN ; } else if (vl_string_casei_cmp(buffer, "mean") == 0) { thresholdingMethod = VL_KDTREE_MEAN ; } else { vlmxError(vlmxErrInvalidOption, "Unknown thresholding method %s", buffer) ; } break ; case opt_num_trees : if (! vlmxIsScalar(optarg) || (numTrees = mxGetScalar(optarg)) < 1) { vlmxError(vlmxErrInvalidOption, "NUMTREES must be not smaller than one") ; } break ; case opt_verbose : ++ verbose ; break ; case opt_distance : if (!vlmxIsString (optarg, -1)) { vlmxError (vlmxErrInvalidArgument, "DISTANCE must be a string.") ; } if (mxGetString (optarg, buffer, sizeof(buffer))) { vlmxError (vlmxErrInvalidArgument, "DISTANCE argument too long.") ; } if (vlmxCompareStringsI("l2", buffer) == 0) { distance = VlDistanceL2 ; } else if (vlmxCompareStringsI("l1", buffer) == 0) { distance = VlDistanceL1 ; } else { vlmxError (vlmxErrInvalidArgument, "Invalid value %s for DISTANCE", buffer) ; } break ; } } data = mxGetData (IN(DATA)) ; numData = mxGetN (IN(DATA)) ; dimension = mxGetM (IN(DATA)) ; forest = vl_kdforest_new (dataType, dimension, numTrees, distance) ; vl_kdforest_set_thresholding_method (forest, thresholdingMethod) ; if (verbose) { char const * str = 0 ; mexPrintf("vl_kdforestbuild: data %s [%d x %d]\n", vl_get_type_name (dataType), dimension, numData) ; switch (vl_kdforest_get_thresholding_method(forest)) { case VL_KDTREE_MEAN : str = "mean" ; break ; case VL_KDTREE_MEDIAN : str = "median" ; break ; default: abort() ; } mexPrintf("vl_kdforestbuild: threshold selection method: %s\n", str) ; mexPrintf("vl_kdforestbuild: number of trees: %d\n", vl_kdforest_get_num_trees(forest)) ; } /* ----------------------------------------------------------------- * Do job * -------------------------------------------------------------- */ vl_kdforest_build (forest, numData, data) ; if (verbose) { vl_uindex ti ; for (ti = 0 ; ti < vl_kdforest_get_num_trees(forest) ; ++ ti) { mexPrintf("vl_kdforestbuild: tree %d: depth %d, num nodes %d\n", ti, vl_kdforest_get_depth_of_tree(forest, ti), vl_kdforest_get_num_nodes_of_tree(forest, ti)) ; } } out[OUT_TREE] = new_array_from_kdforest (forest) ; vl_kdforest_delete (forest) ; } vlfeat/toolbox/misc/vl_whistc.m0000644000175000017500000000220412237004736015550 0ustar dimadimafunction h = vl_whistc(x, w, edges, dim) % VL_WHISTC Weighted histogram % H = VL_WHISTC(X,W,EDGES) behaves exactly like HISTC(X,EDGES), but % weights the samples X by W. Samples that have NaN weight are % skipped. % % See also: HITSC(), VL_HELP(). % Authors: Andrea Vedladi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). numEdges = numel(edges) ; % map x to the bins defined by edges binIndexes = vl_binsearch(edges, x) ; % binsearch last bin is [edges(end) +inf] but for histc it is the % signleton [edges(end)] if numEdges > 0 binIndexes(binIndexes == numEdges & x > edges(end)) = 0 ; end % NaNs must be also removed binIndexes(isnan(x)) = 0 ; % find operating dimension dimensions = size(x) ; if nargin < 4 nonSingletonDims = find(dimensions > 1) ; if ~ isempty(nonSingletonDims) dim = nonSingletonDims(1) ; else dim = 2 ; % assume row vector end end % accumulate dimensions(dim) = numEdges ; h = zeros(dimensions) ; h = vl_binsum(h, w, binIndexes, dim) ; vlfeat/toolbox/misc/vl_hog.c0000644000175000017500000002370712237004745015025 0ustar dimadima/** @file vl_hog.c ** @brief vl_hog MEX definition. ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include /* option codes */ enum { opt_verbose, opt_variant, opt_num_orientations, opt_directed_polar_field, opt_undirected_polar_field, opt_bilinear_orientations } ; /* options */ vlmxOption options [] = { {"Verbose", 0, opt_verbose }, {"Variant", 1, opt_variant }, {"NumOrientations", 1, opt_num_orientations }, {"DirectedPolarField", 0, opt_directed_polar_field }, {"UndirectedPolarField", 0, opt_undirected_polar_field }, {"BilinearOrientations", 0, opt_bilinear_orientations }, {0, 0, 0 } } ; enum Mode {ExtractFeatures, Render, GetPermutation} ; enum InputType {Image, DirectedPolarField, UndirectedPolarField} ; static char const * inputTypeNames [] = { "Image", "DirectedPolarField", "UndirectedPolarField" } ; void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { mxArray const * descriptor_array ; float const * descriptor = NULL ; float const * image = NULL ; vl_size width = 0, height = 0, numChannels = 0 ; vl_size cellSize = 16 ; vl_size numOrientations = 9 ; vl_bool bilinearOrientations = VL_FALSE ; VlHogVariant variant = VlHogVariantUoctti ; char const * variantName ; enum {IN_I = 0, IN_CELLSIZE, IN_END} ; enum {OUT_FEATURES = 0} ; vl_bool verbose = 0 ; int opt, next ; mxArray const *optarg ; enum Mode mode = ExtractFeatures ; enum InputType inputType = Image ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin < 1) { vlmxError(vlmxErrNotEnoughInputArguments, NULL) ; } if (nout > 1) { vlmxError(vlmxErrTooManyOutputArguments, NULL) ; } if (vlmxIsString(IN(I), -1)) { mxArray const * string_array = IN(I) ; if (vlmxIsEqualToStringI(string_array, "permutation")) { /* perm = vl_hog('permutation') */ mode = GetPermutation ; next = 1 ; } else if (vlmxIsEqualToStringI(string_array, "render")) { /* image = vl_hog('render', descriptor) */ mode = Render ; descriptor_array = IN(CELLSIZE) ; next = 2 ; if (! mxIsNumeric(descriptor_array) || ! vlmxIsReal(descriptor_array) || mxGetClassID(descriptor_array) != mxSINGLE_CLASS) { vlmxError(vlmxErrInvalidArgument, "DESCRIPTOR is not a real numeric array of class SINGLE.") ; } if (mxGetNumberOfDimensions(descriptor_array) > 3) { vlmxError(vlmxErrInvalidArgument, "DESCRIPTOR has more than three dimensions.") ; } if (mxGetNumberOfDimensions(descriptor_array) == 3) { numChannels = mxGetDimensions(descriptor_array)[2] ; } else { numChannels = 1 ; } descriptor = mxGetData(descriptor_array) ; height = mxGetDimensions(descriptor_array)[0] ; width = mxGetDimensions(descriptor_array)[1] ; } else { vlmxError(vlmxErrInvalidArgument, "The first argument is neither an image nor a recognized command.") ; } } else { /* descriptor = vl_hog(image, cellSize) */ mode = ExtractFeatures ; next = 2 ; if (nin < 2) { vlmxError(vlmxErrNotEnoughInputArguments, NULL) ; } if (! mxIsNumeric(IN(I)) || ! vlmxIsReal(IN(I)) || mxGetClassID(IN(I)) != mxSINGLE_CLASS) { vlmxError(vlmxErrInvalidArgument, "I is not a real numeric array of class SINGLE.") ; } if (mxGetNumberOfDimensions(IN(I)) > 3) { vlmxError(vlmxErrInvalidArgument, "I has more than three dimensions.") ; } if (mxGetNumberOfDimensions(IN(I)) == 3) { numChannels = mxGetDimensions(IN(I))[2] ; } else { numChannels = 1 ; } if (! vlmxIsPlainScalar(IN(CELLSIZE))) { vlmxError(vlmxErrInvalidArgument, "CELLSIZE is not a plain scalar.") ; } if (mxGetScalar(IN(CELLSIZE)) < 1.0) { vlmxError(vlmxErrInvalidArgument, "CELLSIZE is less than 1.") ; } cellSize = (vl_size) mxGetScalar(IN(CELLSIZE)) ; image = mxGetData(IN(I)) ; height = mxGetDimensions(IN(I))[0] ; width = mxGetDimensions(IN(I))[1] ; } /* parse the options */ while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { switch (opt) { case opt_variant : if (! vlmxIsString(optarg, -1)) { vlmxError(vlmxErrInvalidArgument, "VARIANT must be a string") ; } if (vlmxIsEqualToStringI(optarg, "uoctti")) { variant = VlHogVariantUoctti ; } else if (vlmxIsEqualToStringI(optarg, "dalaltriggs")) { variant = VlHogVariantDalalTriggs ; } else { vlmxError(vlmxErrInvalidArgument, "The option VARIANT has an unknown value.") ; } break ; case opt_num_orientations : if (! vlmxIsPlainScalar(optarg)) { vlmxError(vlmxErrInvalidArgument, "NUMORIENTATIONS is not a plain scalar.") ; } if (mxGetScalar(optarg) < 1) { vlmxError(vlmxErrInvalidArgument, "NUMORIENTATIONS is smaller than one.") ; } numOrientations = mxGetScalar(optarg) ; break; case opt_directed_polar_field : inputType = DirectedPolarField ; break ; case opt_undirected_polar_field : inputType = UndirectedPolarField ; break ; case opt_bilinear_orientations : bilinearOrientations = VL_TRUE ; break ; case opt_verbose : ++ verbose ; break ; } } /* ----------------------------------------------------------------- * Do the job * -------------------------------------------------------------- */ switch (variant) { case VlHogVariantUoctti : variantName = "UOCTTI" ; break ; case VlHogVariantDalalTriggs : variantName = "DalalTriggs" ; break ; default: abort() ; break ; } switch (mode) { case ExtractFeatures : { /* recall that MATLAB images are transposed */ VlHog * hog = vl_hog_new (variant, numOrientations, VL_TRUE) ; mwSize dimensions [3] ; vl_hog_set_use_bilinear_orientation_assignments (hog, bilinearOrientations) ; if ((inputType == DirectedPolarField || inputType == UndirectedPolarField) && numChannels != 2) { vlmxError(vlmxErrInvalidArgument, "NUMCHANNELS=%d is not equal to two with input of type %s.", numChannels, inputTypeNames[inputType]) ; } switch (inputType) { case Image: vl_hog_put_image(hog, image, height, width, numChannels, cellSize) ; break ; case DirectedPolarField: case UndirectedPolarField: vl_hog_put_polar_field(hog, image, image + height*width, inputType == DirectedPolarField, height, width, cellSize) ; break ; default: abort() ; } dimensions[0] = vl_hog_get_width(hog) ; dimensions[1] = vl_hog_get_height(hog) ; dimensions[2] = vl_hog_get_dimension(hog) ; if (verbose) { mexPrintf("vl_hog: image: [%d x %d x %d]\n", height, width, numChannels) ; mexPrintf("vl_hog: descriptor: [%d x %d x %d]\n", dimensions[0], dimensions[1], dimensions[2]) ; mexPrintf("vl_hog: number of orientations: %d\n", numOrientations) ; mexPrintf("vl_hog: bilinear orientation assignments: %s\n", VL_YESNO(vl_hog_get_use_bilinear_orientation_assignments(hog))) ; mexPrintf("vl_hog: variant: %s\n", variantName) ; mexPrintf("vl_hog: input type: %s\n", inputTypeNames[inputType]) ; } OUT(FEATURES) = mxCreateNumericArray(3, dimensions, mxSINGLE_CLASS, mxREAL) ; vl_hog_extract (hog, mxGetData(OUT(FEATURES))) ; vl_hog_delete(hog) ; break ; } case GetPermutation : { VlHog * hog = vl_hog_new(variant, numOrientations, VL_TRUE) ; vl_size dimension = vl_hog_get_dimension(hog) ; vl_uindex k ; vl_uint32 * permutationOut ; vl_index const * permutation ; if (verbose) { mexPrintf("vl_hog: number of orientations: %d\n", numOrientations) ; mexPrintf("vl_hog: variant: %s\n", variantName) ; } OUT(FEATURES) = mxCreateNumericMatrix(dimension, 1, mxUINT32_CLASS, mxREAL) ; permutationOut = mxGetData(OUT(FEATURES)) ; permutation = vl_hog_get_permutation(hog) ; for (k = 0 ; k < dimension ; ++k) { permutationOut[k] = permutation[k] + 1 ; } break ; } case Render : { VlHog * hog = vl_hog_new(variant, numOrientations, VL_TRUE) ; vl_size glyphSize = vl_hog_get_glyph_size(hog) ; vl_size imageHeight = glyphSize * height ; vl_size imageWidth = glyphSize * width ; if (numChannels != vl_hog_get_dimension(hog)) { vlmxError(vlmxErrInvalidArgument, "The third dimension of DESCRIPTOR is not equal to the dimension of a HOG descriptor."); } if (verbose) { mexPrintf("vl_hog: descriptor: [%d x %d x %d]\n", height, width, numChannels) ; mexPrintf("vl_hog: glyph image: [%d x %d]\n", imageHeight, imageWidth) ; mexPrintf("vl_hog: number of orientations: %d\n", numOrientations) ; mexPrintf("vl_hog: variant: %s\n", variantName) ; } OUT(FEATURES) = mxCreateNumericMatrix(imageHeight, imageWidth, mxSINGLE_CLASS, mxREAL) ; vl_hog_render(hog, mxGetData(OUT(FEATURES)), descriptor, height, width) ; break ; } } } vlfeat/toolbox/misc/vl_svmtrain.m0000644000175000017500000001165712237004745016126 0ustar dimadima% VL_SVMTRAIN Train a Support Vector Machine % [W B] = VL_SVMTRAIN(X, Y, LAMBDA) trains a linear Support Vector % Machine (SVM) from the data vectors X and the labels Y. X is a D % by N matrix, with one column per example and D feature dimensions % (SINGLE or DOUBLE). Y is a DOUBLE vector with N elements with a % binary (-1 or +1) label for each training point. To a first order % approximation, the function computes a weight vector W and offset % B such that the score W'*X(:,i)+B has the same sign of LABELS(i) % for all i. % % VL_SVMTRAIN(DATASET, LABELS, LAMBDA) takes as input a DATASET % structure, which allows more sophisticated input formats to be % supported (see VL_SVMDATASET()). % % [W, B, INFO] = VL_SVMTRAIN(...) additionally returns a structure % INFO with the following fields: % % iteration:: % Number of iterations performed. % % epoch:: % Number of iterations over number of training data points. % % elapsedTime:: % Time elapsed since the start of training. % % objective:: % SVM objective value. % % regularizer:: % Regularizer value. % % loss:: % Loss value. % % scoreVariation:: [SGD only] % Mean square root of the difference between the last two % values of the SVM scores for each point. % % dualObjective:: [SDCA only] % Dual objective value. % % dualLoss:: [SDCA only] % Dual loss value:: % % dualityGap:: [SDCA only] % Difference between the objective and the dual objective. % % [W, B, INFO, SCORES] = VL_SVMTRAIN(X, Y, LABMDA) returns a row % vector of the SVM score for each training point. This can be used % in combination with the options SOLVER, MODEL, and BIAS to % evaluate an existing SVM on new data points. Furthermore INFO will % contain the corresponding SVM loss, regularizer, and objective % function value. If this information is not of interest, it is % possible to pass a null vector Y instead of the actual labels as % well as a null regularizer. % % VL_SVMTRAIN() accepts the following options: % % Verbose:: % Specify one or multiple times to increase the verbosity level. % Given only once, produces messages at the beginning and end of % the learning. Verbosity of at least 2 prints information at % every diagnostic step. % % Epsilon:: 1e-3 % Tolerance for the stopping criterion. % % MaxNumIterations:: 10/LAMBDA % Maximum number of iterations. % % BiasMultiplier:: 1 % Value of the constant B0 used as bias term (see below). % % BiasLearningRate:: 0.5 % Learning rate for the bias (SGD solver only). % % DiagnosticFunction:: [] % Diagnostic function callback. The callback takes the INFO % structure as only argument. To trace energies and plot graphs, % the callback can update a global variable or, preferably, be % defined as a nested function and update a local variable in the % parent function. % % DiagnosticFrequency:: Number of data points % After how many iteration the diagnostic is run. This step check % for convergence, and is done rarely, typically after each epoch % (pass over the data). It also calls the DiangosticFunction, % if any is specified. % % Loss:: HINGE % Loss function. One of HINGE, HINGE2, L1, L2, LOGISTIC. % % Solver:: SDCA % One of SGD (stochastic gradient descent [1]), SDCA (stochastic % dual coordinate ascent [2,3]), or NONE (no training). The % last option can be used in combination with the options MODEL % and BIAS to evaluate an existing SVM. % % Model:: null vector % Specifies the initial value for the weight vector W (SGD only). % % Bias:: 0 % Specifies the initial value of the bias term (SGD only). % % Weights:: [] % Specifies a weight vector to assign a different non-negative % weight to each data point. An application is to rebalance % unbalanced datasets. % % FORMULATION % % VL_SVMTRAIN() minimizes the objective function of the form: % % LAMBDA/2 |W|^2 + 1/N SUM_i LOSS(W' X(:,i), Y(i)) % % where LOSS(W' Xi,Yi) is the loss (hinge by default) for i-th % data point. The bias is incorporated by extending each data % point X with a feature of constant value B0, such that the % objective becomes % % LAMBDA/2 (|W|^2 + WB^2) 1/N SUM_i LOSS(W' X(:,i) + WB B0, Y(i)) % % Note that this causes the learned bias B = WB B0 to shrink % towards the origin. % % Example:: % Learn a linear SVM from data X and labels Y using 0.1 % as regularization coefficient: % % [w, b] = vl_svmtrain(x, y, 0.1) ; % % The SVM can be evaluated on new data XTEST with: % % scores = w'*xtest + b ; % % Alternatively, VL_SVMTRAIN() can be used for evaluation too: % % [~,~,~, scores] = vl_svmtrain(xtest, y, 0, 'model', w, 'bias', b, 'solver', 'none') ; % % The latter form is particularly useful when X is a DATASET structure. % % See also: SVM fundamentals, % VL_SVMDATASET(), VL_HELP(). % AUTHORIGHTS vlfeat/toolbox/misc/vl_argparse.m0000644000175000017500000000411412237004745016055 0ustar dimadimafunction [conf, args] = vl_argparse(conf, args, varargin) % VL_ARGPARSE Parse list of parameter-value pairs % CONF = VL_ARGPARSE(CONF, ARGS) updates the structure CONF based on % the specified parameter-value pairs ARGS={PAR1, VAL1, ... PARN, % VALN}. The function produces an error if an unknown parameter name % is passed in. % % [CONF, ARGS] = VL_ARGPARSE(CONF, ARGS) copies any parameter in % ARGS that does not match CONF back to ARGS instead of producing an % error. % % Example:: % The function can be used to parse a list of arguments % passed to a MATLAB functions: % % function myFunction(x,y,z,varargin) % conf.parameterName = defaultValue ; % conf = vl_argparse(conf, varargin) % % If only a subset of the options should be parsed, for example % because the other options are interpreted by a subroutine, then % use the form % % [conf, varargin] = vl_argparse(conf, varargin) % % that copies back to VARARGIN any unknown parameter. % % See also: VL_OVERRIDE(), VL_HELP(). % Authors: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if ~isstruct(conf), error('CONF must be a structure') ; end if length(varargin) > 0, args = {args, varargin{:}} ; end remainingArgs = {} ; names = fieldnames(conf) ; if mod(length(args),2) == 1 error('Parameter-value pair expected (missing value?).') ; end for ai = 1:2:length(args) paramName = args{ai} ; if ~ischar(paramName) error('The name of the parameter number %d is not a string.', (ai-1)/2+1) ; end value = args{ai+1} ; if isfield(conf,paramName) conf.(paramName) = value ; else % try case-insensitive i = find(strcmpi(paramName, names)) ; if isempty(i) if nargout < 2 error('Unknown parameter ''%s''.', paramName) ; else remainingArgs(end+1:end+2) = args(ai:ai+1) ; end else conf.(names{i}) = value ; end end end args = remainingArgs ; vlfeat/toolbox/misc/kdtree.h0000644000175000017500000003717112237004745015032 0ustar dimadima/** @internal ** @file KDForest.c ** @brief KDForest MEX utilities ** @author Andrea Vedaldi **/ #include "mex.h" #include #include /** ------------------------------------------------------------------ ** @interan@brief Hepler function ** @param tree KDForest object to process ** @param nodeIndex index of the KDForest node to start from ** @param numNodesToVisit total number of nodes to visit. ** ** The function visits in depth first order the tree's nodes starting ** from the root, restoring the node parent pointers. ** ** It also chekcs for tree consistency, aborting the MEX file in case ** of inconsistencies. Loops are detected by counting how many nodes ** have been visited so far compared to the total number of nodes in ** the tree. **/ void restore_parent_recursively (VlKDTree * tree, int nodeIndex, int * numNodesToVisit) { VlKDTreeNode * node = tree->nodes + nodeIndex ; int lowerChild = node->lowerChild ; int upperChild = node->upperChild ; if (*numNodesToVisit == 0) { vlmxError (vlmxErrInconsistentData, "FOREST.TREES has an inconsitsent tree structure.") ; } *numNodesToVisit -= 1 ; if (lowerChild >= 0) { VlKDTreeNode * child = tree->nodes + lowerChild ; child->parent = nodeIndex ; restore_parent_recursively (tree, lowerChild, numNodesToVisit) ; } if (upperChild >= 0) { VlKDTreeNode * child = tree->nodes + upperChild ; child->parent = nodeIndex ; restore_parent_recursively (tree, upperChild, numNodesToVisit) ; } } /** ------------------------------------------------------------------ ** @internal @brief Builds a MEX array representing a VlKDForest object ** @param tree object to convert. ** @return MEX representation of the tree. ** ** The KDForest object returned encapsulates the data (no copies are made). ** Recall that a KDForest object by design does not own the data. ** ** In case of error, the function aborts by calling ::mxErrMsgTxt. **/ static mxArray * new_array_from_kdforest (VlKDForest const * forest) { vl_uindex ti ; mwSize dims [] = {1,1} ; mwSize treeDims [] = {1,0} ; char const * fieldNames [] = { "dimension", "numData", "trees", "distance" } ; char const * treeFieldNames [] = { "nodes", "dataIndex" } ; char const * nodesFieldNames [] = { "lowerChild", "upperChild", "splitDimension", "splitThreshold", "lowerBound" , "upperBound" } ; mxArray * forest_array ; mxArray * trees_array ; treeDims [0] = 1 ; treeDims [1] = forest->numTrees ; trees_array = mxCreateStructArray (2, treeDims, sizeof(treeFieldNames) / sizeof(treeFieldNames[0]), treeFieldNames) ; /* FOREST.NUMDIMENSIONS FOREST.NUMDATA */ forest_array = mxCreateStructArray (2, dims, sizeof(fieldNames) / sizeof(fieldNames[0]), fieldNames) ; mxSetField (forest_array, 0, "dimension", vlmxCreatePlainScalar (forest->dimension)) ; mxSetField (forest_array, 0, "numData", vlmxCreatePlainScalar (forest->numData)) ; mxSetField (forest_array, 0, "trees", trees_array) ; switch(forest->distance){ case VlDistanceL1: mxSetField (forest_array, 0, "distance", mxCreateString("l1")); break; case VlDistanceL2: mxSetField (forest_array, 0, "distance", mxCreateString("l2")) ; break; default: abort(); } for (ti = 0 ; ti < forest->numTrees ; ++ ti) { VlKDTree * tree = forest->trees[ti] ; mxArray * nodes_array = mxCreateStructArray (2, dims, sizeof(nodesFieldNames) / sizeof(nodesFieldNames[0]), nodesFieldNames) ; mxArray * dataIndex_array = mxCreateNumericMatrix (1, forest->numData, mxUINT32_CLASS, mxREAL) ; mxSetField (trees_array, ti, "nodes", nodes_array) ; mxSetField (trees_array, ti, "dataIndex", dataIndex_array) ; /* FOREST.TREES.NODES.LOWERCHILD FOREST.TREES.NODES.UPPERCHILD FOREST.TREES.NODES.SPLITDIMENSION FOREST.TREES.NODES.SPLITTHRESHOLD */ { vl_uindex ni ; mxArray * lowerChild_array = mxCreateNumericMatrix (1, tree->numUsedNodes, mxINT32_CLASS, mxREAL) ; mxArray * upperChild_array = mxCreateNumericMatrix (1, tree->numUsedNodes, mxINT32_CLASS, mxREAL) ; mxArray * splitDimension_array = mxCreateNumericMatrix (1, tree->numUsedNodes, mxUINT32_CLASS, mxREAL) ; mxArray * splitThreshold_array = mxCreateNumericMatrix (1, tree->numUsedNodes, mxDOUBLE_CLASS, mxREAL) ; mxArray * lowerBound_array = mxCreateNumericMatrix (1, tree->numUsedNodes, mxDOUBLE_CLASS, mxREAL) ; mxArray * upperBound_array = mxCreateNumericMatrix (1, tree->numUsedNodes, mxDOUBLE_CLASS, mxREAL) ; vl_uint32 * upperChild = mxGetData (upperChild_array) ; vl_uint32 * lowerChild = mxGetData (lowerChild_array) ; vl_uint32 * splitDimension = mxGetData (splitDimension_array) ; double * splitThreshold = mxGetData (splitThreshold_array) ; double * lowerBound = mxGetData (lowerBound_array) ; double * upperBound = mxGetData (upperBound_array) ; for (ni = 0 ; ni < tree -> numUsedNodes ; ++ ni) { VlKDTreeNode const * node = tree -> nodes + ni ; int a = node->upperChild ; int b = node->lowerChild ; upperChild [ni] = (a>=0) ? a + 1 : a ; lowerChild [ni] = (b>=0) ? b + 1 : b ; splitDimension [ni] = node->splitDimension + 1 ; splitThreshold [ni] = node->splitThreshold ; lowerBound [ni] = node->lowerBound ; upperBound [ni] = node->upperBound ; } mxSetField (nodes_array, 0, "lowerChild", lowerChild_array) ; mxSetField (nodes_array, 0, "upperChild", upperChild_array) ; mxSetField (nodes_array, 0, "splitDimension", splitDimension_array) ; mxSetField (nodes_array, 0, "splitThreshold", splitThreshold_array) ; mxSetField (nodes_array, 0, "lowerBound", lowerBound_array) ; mxSetField (nodes_array, 0, "upperBound", upperBound_array) ; } /* FOREST.TREEE.DATAINDEX */ { vl_uint32 * dataIndex = mxGetData (dataIndex_array) ; vl_uindex di ; for (di = 0 ; di < forest->numData ; ++ di) { dataIndex [di] = forest->trees[ti]->dataIndex[di].index + 1 ; } } } return forest_array ; } /** ------------------------------------------------------------------ ** @internal @brief Builds a VlKDForest from MEX parameters ** @param forest_array MEX array representing the kd-tree ** @param data_array MEX array representing the kd-tree data ** @return KDForest object instance. ** ** The KDForest object returned encapsulates the data (no copies are made). ** Recall that a KDForest object by design does not own the data. ** ** In case of error, the function aborts by calling ::mxErrMsgTxt. **/ static VlKDForest * new_kdforest_from_array (mxArray const * forest_array, mxArray const * data_array) { VlKDForest * forest ; mxArray const * distance_array ; mxArray const * dimension_array ; mxArray const * numData_array ; mxArray const * trees_array ; mxArray const * nodes_array ; mxArray const * dataIndex_array ; mxArray const * lowerChild_array ; mxArray const * upperChild_array ; mxArray const * splitDimension_array ; mxArray const * splitThreshold_array ; mxArray const * lowerBound_array; mxArray const * upperBound_array; vl_int32 const * lowerChild ; vl_int32 const * upperChild ; vl_uint32 const * splitDimension ; double const * splitThreshold ; double const * upperBound ; double const * lowerBound ; vl_uindex ti ; int unsigned dimension ; VlVectorComparisonType distance; vl_size numData ; vl_size numUsedNodes ; vl_size numTrees ; vl_size maxNumNodes = 0; vl_type dataType ; /* FOREST.NUMDIMENSIONS FOREST.NUMDATA FOREST.DATA FOREST.TREES */ distance_array = mxGetField (forest_array, 0, "distance") ; if(distance_array && vlmxIsString (distance_array, -1)){ if (vlmxCompareToStringI(distance_array, "l1") == 0) { distance = VlDistanceL1 ; } else if (vlmxCompareToStringI(distance_array, "l2") == 0) { distance = VlDistanceL2 ; } else { vlmxError(vlmxErrInconsistentData, "FOREST.DISTANCE must be either 'l1' or 'l2'.") ; } } else { vlmxError(vlmxErrInconsistentData, "FOREST.DISTANCE must be a string.") ; } if (! mxIsStruct (forest_array) || mxGetNumberOfElements (forest_array) != 1) { vlmxError (vlmxErrInconsistentData, "FOREST must be a 1 x 1 structure.") ; } dimension_array = mxGetField (forest_array, 0, "dimension") ; if (! dimension_array || ! vlmxIsPlainScalar (dimension_array) || (dimension = mxGetScalar (dimension_array)) < 1) { vlmxError(vlmxErrInconsistentData, "FOREST.NUMDIMENSIONS must be a poisitve integer.") ; } numData_array = mxGetField (forest_array, 0, "numData") ; if (! numData_array || ! vlmxIsPlainScalar (numData_array) || (numData = mxGetScalar (numData_array)) < 1) { vlmxError(vlmxErrInconsistentData, "FOREST.NUMDATA must be a poisitve integer.") ; } trees_array = mxGetField (forest_array, 0, "trees") ; if (! mxIsStruct (trees_array)) { vlmxError(vlmxErrInconsistentData, "FOREST.TREES must be a structure array.") ; } numTrees = mxGetNumberOfElements (trees_array) ; if (numTrees < 1) { vlmxError(vlmxErrInconsistentData, "FOREST.TREES must have at least one element.") ; } if (! vlmxIsMatrix (data_array, dimension, numData)) { vlmxError(vlmxErrInconsistentData, "DATA dimensions are not compatible with TREE.") ; } if (! vlmxIsReal (data_array)) { vlmxError(vlmxErrInvalidArgument, "DATA must be real.") ; } switch (mxGetClassID (data_array)) { case mxSINGLE_CLASS : dataType = VL_TYPE_FLOAT ; break ; case mxDOUBLE_CLASS : dataType = VL_TYPE_DOUBLE ; break ; default : vlmxError(vlmxErrInvalidArgument, "DATA must be either SINGLE or DOUBLE.") ; } forest = vl_kdforest_new (dataType, dimension, numTrees, distance) ; forest->numData = numData ; forest->trees = vl_malloc (sizeof(VlKDTree*) * numTrees) ; forest->data = mxGetData (data_array) ; /* FOREST.TREES.NODES FOREST.TREES.DATAINDEX */ for (ti = 0 ; ti < numTrees ; ++ ti) { VlKDTree * tree = vl_malloc (sizeof(VlKDTree)) ; nodes_array = mxGetField (trees_array, ti, "nodes") ; dataIndex_array = mxGetField (trees_array, ti, "dataIndex") ; if (! nodes_array || ! mxIsStruct (nodes_array)) { vlmxError(vlmxErrInconsistentData, "FOREST.TREES(%d).NODES must be a struct array.", ti+1) ; } /* FOREST.TREES.NODES.LOWERCHILD FOREST.TREES.NODES.UPPERCHILD FOREST.TREES.NODES.SPLITTHRESHOLD FOREST.TREES.NODES.SPLITDIMENSION */ lowerChild_array = mxGetField (nodes_array, 0, "lowerChild") ; upperChild_array = mxGetField (nodes_array, 0, "upperChild") ; splitDimension_array = mxGetField (nodes_array, 0, "splitDimension") ; splitThreshold_array = mxGetField (nodes_array, 0, "splitThreshold") ; lowerBound_array = mxGetField (nodes_array, 0, "lowerBound") ; upperBound_array = mxGetField (nodes_array, 0, "upperBound") ; numUsedNodes = mxGetN (lowerChild_array) ; maxNumNodes += numUsedNodes ; if (! lowerChild_array || ! vlmxIsMatrix (lowerChild_array, 1, numUsedNodes) || mxGetClassID (lowerChild_array) != mxINT32_CLASS) { vlmxError(vlmxErrInconsistentData, "FOREST.TREES(%d).NODES.LOWERCHILD must be a 1 x NUMNODES INT32 array.",ti+1) ; } if (! upperChild_array || ! vlmxIsMatrix (upperChild_array, 1, numUsedNodes) || mxGetClassID (upperChild_array) != mxINT32_CLASS) { vlmxError(vlmxErrInconsistentData, "FOREST.TREES(%d).NODES.UPPERCHILD must be a 1 x NUMNODES INT32 array.",ti+1) ; } if (! splitDimension_array || ! vlmxIsMatrix (splitDimension_array, 1, numUsedNodes) || mxGetClassID (splitDimension_array) != mxUINT32_CLASS) { vlmxError(vlmxErrInconsistentData, "FOREST.TREES(%d).NODES.SPLITDIMENSION must be a 1 x NUMNODES UINT32 array",ti+1) ; } if (! splitThreshold_array || ! vlmxIsMatrix (splitThreshold_array, 1, numUsedNodes) || mxGetClassID (splitThreshold_array) != mxDOUBLE_CLASS) { vlmxError(vlmxErrInconsistentData, "FOREST.TREES(%d).NODES.SPLITTHRESHOLD must be a 1 x NUMNODES DOUBLE array",ti+1) ; } if (! splitThreshold_array || ! vlmxIsMatrix (lowerBound_array, 1, numUsedNodes) || mxGetClassID (lowerBound_array) != mxDOUBLE_CLASS) { vlmxError(vlmxErrInconsistentData, "FOREST.TREES(%d).NODES.LOWERBOUND must be a 1 x NUMNODES DOUBLE array",ti+1) ; } if (! splitThreshold_array || ! vlmxIsMatrix (upperBound_array, 1, numUsedNodes) || mxGetClassID (upperBound_array) != mxDOUBLE_CLASS) { vlmxError(vlmxErrInconsistentData, "FOREST.TREES(%d).NODES.UPPERBOUND must be a 1 x NUMNODES DOUBLE array",ti+1) ; } lowerChild = (vl_int32*) mxGetData (lowerChild_array) ; upperChild = (vl_int32*) mxGetData (upperChild_array) ; splitDimension = (vl_uint32*) mxGetData (splitDimension_array) ; splitThreshold = (double*) mxGetData (splitThreshold_array) ; lowerBound = (double*) mxGetData (lowerBound_array) ; upperBound = (double*) mxGetData (upperBound_array) ; if (! dataIndex_array || ! vlmxIsMatrix (dataIndex_array, 1, numData) || mxGetClassID (dataIndex_array) != mxUINT32_CLASS) { vlmxError(vlmxErrInconsistentData, "FOREST.TREES(%d).DATAINDEX must be a 1 x NUMDATA array of class UINT32.",ti+1) ; } tree->numAllocatedNodes = numUsedNodes ; tree->numUsedNodes = numUsedNodes ; tree->nodes = vl_malloc (sizeof(VlKDTreeNode) * numUsedNodes) ; tree->dataIndex = vl_malloc (sizeof(VlKDTreeDataIndexEntry) * numData) ; { vl_uindex ni ; for (ni = 0 ; ni < numUsedNodes ; ++ ni) { vl_int32 lc = lowerChild [ni] ; vl_int32 uc = upperChild [ni] ; vl_uint32 d = splitDimension [ni] ; if (uc < - (signed)numData - 1 || uc > (signed)numUsedNodes) { vlmxError (vlmxErrInconsistentData, "TREE.NODES.UPPERCHILD(%d)=%d out of bounds", ni+1,uc) ; } if (lc < - (signed)numData || lc > (signed)numUsedNodes) { vlmxError (vlmxErrInconsistentData, "TREE.NODES.LOWERCHILD(%d)=%d out of bounds", ni+1,lc) ; } if (d > dimension) { vlmxError (vlmxErrInconsistentData, "TREE.NODES.SPLITDIMENSION(%d)=%d out of bounds", ni+1,d) ; } tree->nodes[ni].parent = 0 ; tree->nodes[ni].upperChild = (uc >= 1) ? uc-1 : uc ; tree->nodes[ni].lowerChild = (lc >= 1) ? lc-1 : lc ; tree->nodes[ni].splitDimension = d - 1 ; tree->nodes[ni].splitThreshold = splitThreshold[ni] ; tree->nodes[ni].lowerBound = lowerBound[ni] ; tree->nodes[ni].upperBound = upperBound[ni] ; } } { vl_uindex di ; vl_uint32 * dataIndex = mxGetData (dataIndex_array) ; for (di = 0 ; di < numData ; ++ di) { tree->dataIndex[di].index = dataIndex [di] - 1 ; } } { int numNodesToVisit = tree->numUsedNodes ; restore_parent_recursively (tree, 0, &numNodesToVisit) ; if (numNodesToVisit != 0) { vlmxError (vlmxErrInconsistentData, "TREE has an inconsitsent tree structure.") ; } } forest->trees[ti] = tree ; } forest->maxNumNodes = maxNumNodes; return forest ; } vlfeat/toolbox/misc/vl_grad.m0000644000175000017500000000327612237004736015176 0ustar dimadimafunction [Ix,Iy] = vl_grad(I,varargin) ; % VL_GRAD Compute the gradient of an image % [IX,IY] = VL_GRAD(I) returns the gradient components IX,IY of the % 2-D discrete function I. I must be a two-dimensional % matrix. VL_GRAD() computes the gradient by using finite % differences; specifically, it uses central differences for all but % the boundary pixels, for which it uses forward/backward % differences as appropriate. % % Remark:: % VL_GRAD() is similar to the MATLAB built-in GRADIENT() function, % excepts that it supports different gradient approximations. % % VL_GRAD() accepts the following options: % % Type:: central % Specify which type of finite differences to use for all but the % boundary samples. TYPE can be one of 'central', 'forward', or % 'backward'. % % See also: GRADIENT(), VL_HELP(). % Authors: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). opts.type = 'central' ; opts = vl_argparse(opts, varargin) ; switch lower(opts.type) case 'central' Ix = [ I(:,2)-I(:,1) , ... 0.5*(I(:,3:end)-I(:,1:end-2)) , I(:,end)-I(:,end-1) ] ; Iy = [ I(2,:)-I(1,:) ; ... 0.5*(I(3:end,:)-I(1:end-2,:)) ; I(end,:)-I(end-1,:) ] ; case 'forward' Ix = [ I(:,2:end)-I(:,1:end-1) , I(:,end)-I(:,end-1) ] ; Iy = [ I(2:end,:)-I(1:end-1,:) ; I(end,:)-I(end-1,:) ] ; case 'backward' Ix = [ I(:,2)-I(:,1) , I(:,2:end)-I(:,1:end-1)] ; Iy = [ I(2,:)-I(1,:) ; I(2:end,:)-I(1:end-1,:)] ; otherwise error('Difference type ''%s'' unknown.', opts.type) ; end vlfeat/toolbox/misc/vl_kdtreebuild.m0000644000175000017500000000464612237004745016561 0ustar dimadima% VL_KDTREEBUILD Build randomized kd-tree % FOREST = VL_KDTREEBUILD(X) returns a structure FOREST containing % the kd-tree indexing the data X. X is a M x N dimensional matrix % of class DOUBLE or SINGLE with one data point per column. Use % VL_KDTREEQUERY() to query the index. % % VL_KDETREEBUILD() accepts the following options: % % NumTrees:: [1] % Specifies the number of semi-randomized KD-trees to add to the % forest. Multiple trees can be used to improve approximate % nearest-neighbors searches with VL_KDTREEQUERY(). % % ThresholdMethod:: [MEDIAN] % Specifies the thresholding method used to split the data. Two % methods are supported: split around the median (MEDIAN) or split % around the mean (MEAN). % % Verbose:: % Increases the verbosity level (can be repeated). % % Distance:: [L2] % Specifies the type of norm which the KD-Tree should use (L1 or L2) % % The FOREST structure has the following fields: % % FOREST.TREES:: % A structure array with one element per tree. % % FOREST.DIMENSION:: % Dimensionality of the indexed data. % % FOREST.NUMDATA:: % Number of indexed data points. % % The TREE structure has the following fields: % % TREE.NODES:: % A structure array representing the nodes of the tree. % % TREE.DATAINDEX:: % A 1 x NUMDATA vector of class UINT32 representing a permutation % of the data. % % Nodes are numbered from 1 to NUMNODES. The NODES structure array % has the following fields: % % NODES.LOWERCHILD and NODES.UPPERCHILD:: % 1 x NUMNODES vectors of class INT32. A positive value is the % index of the lower/upper child node. A negative value denotes a % leaf and is (after negation) is the first or last element plus % one of a range of entries in the permutation TREE.DATAINDEX. % Such entries are in turn indexes of the data points that belong % to that leaf. Typically there is one point per leaf. % % NODES.SPLITDIMENSION and NODES.SPLITTHRESHOLD:: % 1 x NUMNODES vector of class UINT32 and DOUBLE, respectively, % with the index of the splitting dimension and the threshold for % each node. % % See also: VL_KDTREEQUERY(), VL_HELP(). % Authors: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/misc/vl_svmtrain.c0000644000175000017500000005455112237004745016114 0ustar dimadima/** @file vl_svmtrain.c ** @brief vl_svmtrain MEX definition ** @author Daniele Perrone ** @author Milan Sulc ** @author Andrea Vedaldi **/ /* Copyright (C) 2012 Daniele Perrone. Copyright (C) 2013 Milan Sulc Copyright (C) 2011-13 Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include #include #include #include /* option codes */ enum { // common opt_epsilon, opt_max_num_iterations, opt_bias_multiplier, opt_diagnostic_function, opt_diagnostic_frequency, opt_validation_subset, opt_loss, opt_model, opt_bias, opt_weights, // switching to SDCA opt_verbose, opt_solver, // SGD specific opt_starting_iteration, opt_bias_learning_rate // DCA specific: }; /* options */ vlmxOption options [] = { {"Epsilon", 1, opt_epsilon }, {"MaxNumIterations", 1, opt_max_num_iterations }, {"BiasMultiplier", 1, opt_bias_multiplier }, {"DiagnosticFunction", 1, opt_diagnostic_function }, {"DiagnosticFrequency", 1, opt_diagnostic_frequency}, {"ValidationSubset", 1, opt_validation_subset }, {"Loss", 1, opt_loss }, {"Verbose", 0, opt_verbose }, {"Solver", 1, opt_solver }, {"Model", 1, opt_model }, {"Bias", 1, opt_bias }, {"Weights", 1, opt_weights }, // SGD specific {"StartingIteration", 1, opt_starting_iteration }, {"BiasLearningRate", 1, opt_bias_learning_rate }, // DCA specific: {0, 0, 0 } } ; mxArray * createScalarStructArray(void const **fields) { void const **iter ; char const **niter ; char const **names ; vl_size numFields = 0 ; mxArray * s ; mwSize dims [] = {1, 1} ; for (iter = fields ; *iter ; iter += 2) numFields++ ; names = vl_calloc(numFields, sizeof(char const*)) ; for (iter = fields, niter = names ; *iter ; iter += 2, niter++) { *niter = *iter ; } s = mxCreateStructArray(sizeof(dims)/sizeof(dims[0]), dims, (int)numFields, names) ; for (iter = fields, niter = names ; *iter; iter += 2, niter++) { mxSetField(s, 0, *niter, (mxArray*)(*(iter+1))) ; } return s ; } /* ---------------------------------------------------------------- */ /* Parsing datasets */ /* ---------------------------------------------------------------- */ VlSvmDataset * parseDataset(const mxArray * dataset_array) { VlSvmDataset * dataset ; { mxArray * data_array ; mxClassID dataClass ; vl_size dimension ; vl_size numData ; vl_type dataType ; if (! mxIsStruct(dataset_array)) { vlmxError(vlmxErrInvalidArgument, "DATASET is not a structure.") ; } if (mxGetNumberOfElements(dataset_array) != 1) { vlmxError(vlmxErrInvalidArgument, "DATASET is not a singleton.") ; } data_array = mxGetField(dataset_array, 0, "data") ; if (data_array == NULL) { vlmxError(vlmxErrInvalidArgument, "DATASET is missing the DATA field.") ; } if (!vlmxIsMatrix(data_array,-1,-1)) { vlmxError(vlmxErrInvalidArgument,"DATASET.DATA is not a matrix.") ; } dimension = mxGetM (data_array) ; numData = mxGetN (data_array) ; dataClass = mxGetClassID (data_array) ; if (dimension == 0 || numData == 0) { vlmxError(vlmxErrInvalidArgument, "DATASET.DATA is empty.") ; } switch (dataClass) { case mxSINGLE_CLASS : dataType = VL_TYPE_FLOAT ; break ; case mxDOUBLE_CLASS : dataType = VL_TYPE_DOUBLE ; break ; default: vlmxError(vlmxErrInvalidArgument, "DATASET.DATA is neither either SINGLE or DOUBLE.") ; } dataset = vl_svmdataset_new(dataType, mxGetData(data_array), dimension, numData) ; } /* homogeneous kernel map support */ { VlHomogeneousKernelType kernelType = VlHomogeneousKernelChi2 ; VlHomogeneousKernelMapWindowType windowType = VlHomogeneousKernelMapWindowRectangular ; double gamma = 1.0 ; double period = -1 ; int n = 1 ; VlHomogeneousKernelMap * hom = NULL ; mxArray * hom_array ; mxArray * field ; hom_array = mxGetField(dataset_array, 0, "homkermap") ; if (hom_array != NULL) { if (!mxIsStruct(hom_array)) { vlmxError(vlmxErrInvalidArgument, "DATASET.HOMKERMAP is not a structure") ; } field = mxGetField(hom_array, 0, "order") ; if (field != NULL) { if (! vlmxIsPlainScalar(field)) { vlmxError(vlmxErrInvalidArgument, "DATASET.HOMKERMAP.ORDER is not a scalar.") ; } n = *mxGetPr(field) ; if (n < 0) { vlmxError(vlmxErrInvalidArgument, "DATASET.HOMKERMAP.ORDER is negative.") ; } } field = mxGetField(hom_array, 0, "kernel") ; if (field != NULL) { char buffer [1024] ; mxGetString(field, buffer, sizeof(buffer) / sizeof(char)) ; if (vl_string_casei_cmp("kl1", buffer) == 0) { kernelType = VlHomogeneousKernelIntersection ; } else if (vl_string_casei_cmp("kchi2", buffer) == 0) { kernelType = VlHomogeneousKernelChi2 ; } else if (vl_string_casei_cmp("kjs", buffer) == 0) { kernelType = VlHomogeneousKernelJS ; } else if (vl_string_casei_cmp("kinters", buffer) == 0) { kernelType = VlHomogeneousKernelIntersection ; } else { vlmxError(vlmxErrInvalidArgument, "DATASET.HOMKERMAP.KERNEL is not a recognized kernel type.") ; } } field = mxGetField(hom_array, 0, "window") ; if (field != NULL) { char buffer [1024] ; mxGetString(field, buffer, sizeof(buffer) / sizeof(char)) ; if (vl_string_casei_cmp("uniform", buffer) == 0) { windowType = VlHomogeneousKernelMapWindowUniform ; } else if (vl_string_casei_cmp("rectangular", buffer) == 0) { windowType = VlHomogeneousKernelMapWindowRectangular; } else { vlmxError(vlmxErrInvalidArgument, "DATASET.HOMKERMAP.WINDOW is not a recognized window type.") ; } } field = mxGetField(hom_array, 0, "gamma") ; if (field != NULL) { if (! vlmxIsPlainScalar(field)) { vlmxError(vlmxErrInvalidArgument, "GAMMA is not a scalar.") ; } gamma = *mxGetPr(field) ; if (gamma <= 0) { vlmxError(vlmxErrInvalidArgument, "GAMMA is not positive.") ; } } field = mxGetField(hom_array, 0, "period") ; if (field != NULL) { if (! vlmxIsPlainScalar(field)) { vlmxError(vlmxErrInvalidArgument, "PERIOD is not a scalar.") ; } period = *mxGetPr(field) ; if (period <= 0) { vlmxError(vlmxErrInvalidArgument, "PERIOD is not positive.") ; } } hom = vl_homogeneouskernelmap_new (kernelType, gamma, n, period, windowType) ; vl_svmdataset_set_homogeneous_kernel_map (dataset, hom) ; } } return dataset ; } /* ---------------------------------------------------------------- */ /* Diagnostic helpers */ /* ---------------------------------------------------------------- */ mxArray * makeInfoStruct (VlSvm* svm) { VlSvmStatistics const * s = vl_svm_get_statistics(svm) ; mxArray * info = 0 ; switch (vl_svm_get_solver(svm)) { case VlSvmSolverSdca: { void const * fields [] = { "solver", mxCreateString("sdca"), "lambda", vlmxCreatePlainScalar(vl_svm_get_lambda(svm)), "biasMultiplier", vlmxCreatePlainScalar(vl_svm_get_bias_multiplier(svm)), "bias", vlmxCreatePlainScalar(vl_svm_get_bias(svm)), "objective", vlmxCreatePlainScalar(s->objective), "regularizer", vlmxCreatePlainScalar(s->regularizer), "loss", vlmxCreatePlainScalar(s->loss), "dualObjective", vlmxCreatePlainScalar(s->dualObjective), "dualLoss", vlmxCreatePlainScalar(s->dualLoss), "dualityGap", vlmxCreatePlainScalar(s->dualityGap), "iteration", vlmxCreatePlainScalar(s->iteration), "epoch", vlmxCreatePlainScalar(s->epoch), "elapsedTime", vlmxCreatePlainScalar(s->elapsedTime), 0, 0 } ; info = createScalarStructArray(fields) ; break ; } case VlSvmSolverSgd: { void const * fields [] = { "solver", mxCreateString("sgd"), "lambda", vlmxCreatePlainScalar(vl_svm_get_lambda(svm)), "biasMultiplier", vlmxCreatePlainScalar(vl_svm_get_bias_multiplier(svm)), "bias", vlmxCreatePlainScalar(vl_svm_get_bias(svm)), "objective", vlmxCreatePlainScalar(s->objective), "regularizer", vlmxCreatePlainScalar(s->regularizer), "loss", vlmxCreatePlainScalar(s->loss), "scoreVariation", vlmxCreatePlainScalar(s->scoresVariation), "iteration", vlmxCreatePlainScalar(s->iteration), "epoch", vlmxCreatePlainScalar(s->epoch), "elapsedTime", vlmxCreatePlainScalar(s->elapsedTime), 0, 0 } ; info = createScalarStructArray(fields) ; break ; } case VlSvmSolverNone : { void const * fields [] = { "solver", mxCreateString("none"), "lambda", vlmxCreatePlainScalar(vl_svm_get_lambda(svm)), "biasMultiplier", vlmxCreatePlainScalar(vl_svm_get_bias_multiplier(svm)), "bias", vlmxCreatePlainScalar(vl_svm_get_bias(svm)), "objective", vlmxCreatePlainScalar(s->objective), "regularizer", vlmxCreatePlainScalar(s->regularizer), "loss", vlmxCreatePlainScalar(s->loss), "elapsedTime", vlmxCreatePlainScalar(s->elapsedTime), 0, 0 } ; info = createScalarStructArray(fields) ; break ; } default: assert(0) ; } return info ; } /* ---------------------------------------------------------------- */ /* SVM diagnostic callback */ /* ---------------------------------------------------------------- */ typedef struct DiagnsoticOpts_ { vl_bool verbose ; mxArray const * matlabDiagonsticFunctionHandle ; } DiagnosticOpts ; void diagnostic (VlSvm * svm, DiagnosticOpts * opts) { VlSvmStatistics const * s = vl_svm_get_statistics(svm) ; if ((opts->verbose && s->status != VlSvmStatusTraining) || (opts->verbose > 1)) { const char * statusName = 0 ; switch (s->status) { case VlSvmStatusTraining: statusName = "training" ; break ; case VlSvmStatusConverged: statusName = "converged" ; break ; case VlSvmStatusMaxNumIterationsReached: statusName = "max num iterations reached" ; break ; } mexPrintf("vl_svmtrain: iteration: %d (epoch: %d)\n", s->iteration+1, s->epoch+1) ; mexPrintf("\ttime elapsed: %f\n", s->elapsedTime) ; mexPrintf("\tobjective: %g (regul: %g, loss: %g)\n", s->objective, s->regularizer, s->loss) ; switch (vl_svm_get_solver(svm)) { case VlSvmSolverSgd: mexPrintf("\tscore variation: %f\n", s->scoresVariation) ; break; case VlSvmSolverSdca: mexPrintf("\tdual objective: %g (dual loss: %g)\n", s->dualObjective, s->dualLoss) ; mexPrintf("\tduality gap: %g\n", s->dualityGap) ; break; default: break; } mexPrintf("\tstatus: %s\n", statusName) ; } if (opts->matlabDiagonsticFunctionHandle) { mxArray *rhs[2] ; rhs[0] = (mxArray*) opts->matlabDiagonsticFunctionHandle ; rhs[1] = makeInfoStruct(svm) ; if (mxIsClass(rhs[0] , "function_handle")) { mexCallMATLAB(0,NULL,sizeof(rhs)/sizeof(rhs[0]),rhs,"feval") ; } mxDestroyArray(rhs[1]) ; } } /* ---------------------------------------------------------------- */ /* MEX entry point */ /* ---------------------------------------------------------------- */ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum {IN_DATASET = 0, IN_LABELS, IN_LAMBDA, IN_END} ; enum {OUT_MODEL = 0, OUT_BIAS, OUT_INFO, OUT_SCORES, OUT_END} ; vl_int opt, next; mxArray const *optarg ; VlSvmSolverType solver = VlSvmSolverSdca ; VlSvmLossType loss = VlSvmLossHinge ; int verbose = 0 ; VlSvmDataset * dataset ; double * labels ; double * weights = NULL ; double lambda ; double epsilon = -1 ; double biasMultipler = -1 ; vl_index maxNumIterations = -1 ; vl_index diagnosticFrequency = -1 ; mxArray const * matlabDiagnosticFunctionHandle = NULL ; mxArray const * initialModel_array = NULL ; double initialBias = VL_NAN_D ; vl_index startingIteration = -1 ; /* SGD */ double sgdBiasLearningRate = -1 ; VL_USE_MATLAB_ENV ; if (nin < 3) { vlmxError(vlmxErrInvalidArgument, "At least three arguments are required.") ; } if (nout > OUT_END) { vlmxError(vlmxErrInvalidArgument, "Too many output arguments."); } #define GET_SCALAR(NAME, variable) \ if (!vlmxIsPlainScalar(optarg)) { \ vlmxError(vlmxErrInvalidArgument, VL_STRINGIFY(NAME) " is not a plain scalar.") ; \ } \ variable = (double) *mxGetPr(optarg); #define GET_NN_SCALAR(NAME, variable) GET_SCALAR(NAME, variable) \ if (variable < 0) { \ vlmxError(vlmxErrInvalidArgument, VL_STRINGIFY(NAME) " is negative.") ; \ } /* Mode 1: pass data, labels, lambda, and options */ if (mxIsNumeric(in[IN_DATASET])) { mxArray const* samples_array = in[IN_DATASET] ; vl_size dimension ; vl_size numSamples ; void * data ; vl_type dataType ; if (!vlmxIsMatrix(samples_array, -1, -1)) { vlmxError (vlmxErrInvalidArgument, "X is not a matrix.") ; } if (mxGetClassID(samples_array) == mxDOUBLE_CLASS) { dataType = VL_TYPE_DOUBLE ; } else if (mxGetClassID(samples_array) == mxSINGLE_CLASS) { dataType = VL_TYPE_FLOAT ; } else { vlmxError (vlmxErrInvalidArgument, "X is not of class SINGLE or DOUBLE.") ; } data = mxGetData(samples_array) ; dimension = mxGetM(samples_array) ; numSamples = mxGetN(samples_array) ; dataset = vl_svmdataset_new(dataType, data, dimension, numSamples) ; } /* Mode 2: pass dataset structure */ else { dataset = parseDataset(in[IN_DATASET]) ; } { mxArray const* labels_array = in[IN_LABELS] ; if (!vlmxIsPlainMatrix(labels_array, -1, -1)) { vlmxError (vlmxErrInvalidArgument, "Y is not a plain matrix.") ; } labels = mxGetPr(labels_array) ; if (mxGetNumberOfElements(labels_array) != vl_svmdataset_get_num_data(dataset)) { vlmxError (vlmxErrInvalidArgument, "The number of labels Y is not the same as the number of data samples X.") ; } optarg = in[IN_LAMBDA] ; GET_NN_SCALAR(LAMBDA, lambda) ; } /* Parse optional arguments */ next = 3 ; while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { char buf [1024] ; switch (opt) { case opt_verbose: verbose ++ ; break ; case opt_epsilon: GET_NN_SCALAR(EPSLON, epsilon) ; break ; case opt_bias_multiplier: GET_NN_SCALAR(BIASMULTIPLIER, biasMultipler) ; break ; case opt_max_num_iterations: GET_NN_SCALAR(MAXNUMITERATIONS, maxNumIterations) ; break ; case opt_diagnostic_frequency: GET_NN_SCALAR(DIAGNOSTICFREQUENCY, diagnosticFrequency) ; break ; case opt_diagnostic_function: if (!mxIsClass(optarg ,"function_handle")) { mexErrMsgTxt("DIAGNOSTICSFUNCTION is not a function handle."); } matlabDiagnosticFunctionHandle = optarg ; break ; case opt_solver : if (!vlmxIsString (optarg, -1)) { vlmxError (vlmxErrInvalidArgument, "SOLVER must be a string.") ; } if (mxGetString (optarg, buf, sizeof(buf))) { vlmxError (vlmxErrInvalidArgument, "SOLVER argument too long.") ; } if (vlmxCompareStringsI("sgd", buf) == 0) { solver = VlSvmSolverSgd ; } else if (vlmxCompareStringsI("sdca", buf) == 0) { solver = VlSvmSolverSdca ; } else if (vlmxCompareStringsI("none", buf) == 0) { solver = VlSvmSolverNone; } else { vlmxError (vlmxErrInvalidArgument, "Invalid value %s for SOLVER", buf) ; } break ; case opt_loss : if (!vlmxIsString (optarg, -1)) { vlmxError (vlmxErrInvalidArgument, "LOSS must be a string.") ; } if (mxGetString (optarg, buf, sizeof(buf))) { vlmxError (vlmxErrInvalidArgument, "LOSS argument too long.") ; } if (vlmxCompareStringsI("hinge", buf) == 0) { loss = VlSvmLossHinge ; } else if (vlmxCompareStringsI("hinge2", buf) == 0) { loss = VlSvmLossHinge2 ; } else if (vlmxCompareStringsI("l1", buf) == 0) { loss = VlSvmLossL1 ; } else if (vlmxCompareStringsI("l2", buf) == 0) { loss = VlSvmLossL2 ; } else if (vlmxCompareStringsI("logistic", buf) == 0) { loss = VlSvmLossLogistic ; } else { vlmxError (vlmxErrInvalidArgument, "Invalid value %s for LOSS", buf) ; } break ; case opt_model : if (!vlmxIsPlainVector(optarg, vl_svmdataset_get_dimension(dataset))) { vlmxError(vlmxErrInvalidArgument, "MODEL is not a plain vector of size equal to the data dimension.") ; } initialModel_array = optarg ; break ; case opt_bias: GET_SCALAR(BIAS, initialBias) ; break ; case opt_weights: if (!vlmxIsPlainVector(optarg, vl_svmdataset_get_num_data(dataset))) { vlmxError(vlmxErrInvalidArgument, "WEIGHTS is not a plain vector of size equal to the number of training samples.") ; } weights = mxGetPr(optarg) ; break ; /* SGD specific */ case opt_starting_iteration: GET_NN_SCALAR(STARTINGITERATION, startingIteration) ; break ; case opt_bias_learning_rate: GET_NN_SCALAR(BIASLEARNINGRATE, sgdBiasLearningRate) ; break ; /* DCA specific */ } /* choose option */ } /* next option */ { VlSvm * svm = vl_svm_new_with_dataset(solver, dataset, labels, lambda) ; DiagnosticOpts dopts ; if (initialModel_array) { if (solver != VlSvmSolverNone && solver != VlSvmSolverSgd) { vlmxError(vlmxErrInvalidArgument, "MODEL cannot be specified with this type of solver.") ; } if (mxGetNumberOfElements(initialModel_array) != vl_svm_get_dimension(svm)) { vlmxError(vlmxErrInvalidArgument, "MODEL has not the same dimension as the data.") ; } vl_svm_set_model(svm, mxGetPr(initialModel_array)) ; } if (! vl_is_nan_d(initialBias)) { if (solver != VlSvmSolverNone && solver != VlSvmSolverSgd) { vlmxError(vlmxErrInvalidArgument, "BIAS cannot be specified with this type of solver.") ; } vl_svm_set_bias(svm, initialBias) ; } if (epsilon >= 0) vl_svm_set_epsilon(svm, epsilon) ; if (maxNumIterations >= 0) vl_svm_set_max_num_iterations(svm, maxNumIterations) ; if (biasMultipler >= 0) vl_svm_set_bias_multiplier(svm, biasMultipler) ; if (sgdBiasLearningRate >= 0) vl_svm_set_bias_learning_rate(svm, sgdBiasLearningRate) ; if (diagnosticFrequency >= 0) vl_svm_set_diagnostic_frequency(svm, diagnosticFrequency) ; if (startingIteration >= 0) vl_svm_set_iteration_number(svm, (unsigned)startingIteration) ; if (weights) vl_svm_set_weights(svm, weights) ; vl_svm_set_loss (svm, loss) ; dopts.verbose = verbose ; dopts.matlabDiagonsticFunctionHandle = matlabDiagnosticFunctionHandle ; vl_svm_set_diagnostic_function (svm, (VlSvmDiagnosticFunction)diagnostic, &dopts) ; if (verbose) { double C = 1.0 / (vl_svm_get_lambda(svm) * vl_svm_get_num_data (svm)) ; char const * lossName = 0 ; switch (loss) { case VlSvmLossHinge: lossName = "hinge" ; break ; case VlSvmLossHinge2: lossName = "hinge2" ; break ; case VlSvmLossL1: lossName = "l1" ; break ; case VlSvmLossL2: lossName = "l2" ; break ; case VlSvmLossLogistic: lossName = "logistic" ; break ; } mexPrintf("vl_svmtrain: parameters (verbosity: %d)\n", verbose) ; mexPrintf("\tdata dimension: %d\n",vl_svmdataset_get_dimension(dataset)) ; mexPrintf("\tnum samples: %d\n", vl_svmdataset_get_num_data(dataset)) ; mexPrintf("\tlambda: %g (C equivalent: %g)\n", vl_svm_get_lambda(svm), C) ; mexPrintf("\tloss function: %s\n", lossName) ; mexPrintf("\tmax num iterations: %d\n", vl_svm_get_max_num_iterations(svm)) ; mexPrintf("\tepsilon: %g\n", vl_svm_get_epsilon(svm)) ; mexPrintf("\tdiagnostic frequency: %d\n", vl_svm_get_diagnostic_frequency(svm)) ; mexPrintf("\tusing custom weights: %s\n", VL_YESNO(weights)) ; mexPrintf("\tbias multiplier: %g\n", vl_svm_get_bias_multiplier(svm)) ; switch (vl_svm_get_solver(svm)) { case VlSvmSolverNone: mexPrintf("\tsolver: none (evaluation mode)\n") ; break ; case VlSvmSolverSgd: mexPrintf("\tsolver: sgd\n") ; mexPrintf("\tbias learning rate: %g\n", vl_svm_get_bias_learning_rate(svm)) ; break ; case VlSvmSolverSdca: mexPrintf("\tsolver: sdca\n") ; break ; } } vl_svm_train(svm) ; { mwSize dims[2] ; dims[0] = vl_svmdataset_get_dimension(dataset) ; dims[1] = 1 ; out[OUT_MODEL] = mxCreateNumericArray(2, dims, mxDOUBLE_CLASS, mxREAL) ; memcpy(mxGetPr(out[OUT_MODEL]), vl_svm_get_model(svm), vl_svm_get_dimension(svm) * sizeof(double)) ; } out[OUT_BIAS] = vlmxCreatePlainScalar(vl_svm_get_bias(svm)) ; if (nout >= 3) { out[OUT_INFO] = makeInfoStruct(svm) ; } if (nout >= 4) { mwSize dims[2] ; dims[0] = 1 ; dims[1] = vl_svmdataset_get_num_data(dataset) ; out[OUT_SCORES] = mxCreateNumericArray(2, dims, mxDOUBLE_CLASS, mxREAL) ; memcpy(mxGetPr(out[OUT_SCORES]), vl_svm_get_scores(svm), vl_svm_get_num_data(svm) * sizeof(double)) ; } vl_svm_delete(svm) ; if (vl_svmdataset_get_homogeneous_kernel_map(dataset)) { VlHomogeneousKernelMap * hom = vl_svmdataset_get_homogeneous_kernel_map(dataset) ; vl_svmdataset_set_homogeneous_kernel_map(dataset,0) ; vl_homogeneouskernelmap_delete(hom) ; } vl_svmdataset_delete(dataset) ; } } vlfeat/toolbox/misc/vl_xmkdir.m0000644000175000017500000000442312237004736015552 0ustar dimadimafunction vl_xmkdir(path, varargin) % VL_XMKDIR Create a directory recursively. % VL_XMKDIR(PATH) creates all directory specified by PATH if they % do not exist (existing directories are skipped). % % The function is meant as a silent replacement of MATLAB's builtin % MKDIR() function. It can also be used to show more clearly what % directories are or would be created by the command. % % The function accepts the following options: % % Pretend:: false % If TRUE the function does not create any directoty (implies % 'Verbose'). % % Verbose:: false % If TRUE the function prints the operations performed. % % See also: VL_HELP(). % Authors: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). opts.pretend = false ; opts.verbose = false ; opts = vl_argparse(opts,varargin) ; opts.verbose = opts.verbose | opts.pretend ; [subPath, name, ext] = fileparts(path) ; name = [name ext] ; % Paths are parsed as sequences of blocks % % ('/', 'DIR1/', 'DIR2/', ... , 'DIRK/') + DIRNAME % % So for example: % % '' -> () + '' % a -> () + 'a' % a/ -> ('a/') + '' % a/b -> ('a/') + 'b' % a/b/ -> ('a/', 'b/') + '' % / -> ('/') + '' % /a -> ('/') + 'a' % /a/ -> ('/', 'a/') + '' % /a/b -> ('/', 'a/') + 'b' % /a/b/ -> ('/, 'a/', 'b/) + '' % % DIRNAME is empty if PATH ends with / and is correctly extracted in % this way by FILEPARTS(). SUBDIR is always different from PATH except % for the base cases PATH='/' or PATH='', for which the recursion % stops. if ~strcmp(subPath, path) vl_xmkdir(subPath, varargin{:}) ; end % name is empty if path = '*/' if isempty(name) return ; end if opts.verbose fprintf('%s: directory ''%s'' in ''%s''', mfilename, name, subPath) ; end if ~exist(path, 'dir') if opts.pretend && opts.verbose fprintf(' does not exist, would create.\n') ; else [success,message,messageId] = mkdir(fullfile(subPath, name)) ; if opts.verbose fprintf(' did not exist, created.\n') ; end end else if opts.verbose if opts.pretend fprintf(' exists, would not create.\n') ; else fprintf(' exists, not creating.\n') ; end end end vlfeat/toolbox/misc/vl_alldist2.m0000644000175000017500000000433412237004736015773 0ustar dimadima% VL_ALLDIST2 Pairwise distances % D = VL_ALLDIST2(X,Y) returns the pairwise distance matrix D of the % columns of S1 and S2, yielding % % D(i,j) = sum (X(:,i) - Y(:,j)).^2 % % VL_ALLDIST2(X) returns the pairwise distance matrix fo the columns of % S, yielding % % D(i,j) = sum (X(:,i) - X(:,j)).^2 % % VL_ALLDIST2(...,'METRIC') changes the computed distance. Supported % values for METRIC are % % METRIC D(i,j) % -------------------------------------------------------- % LINF max |X - Y| % L2 sum (X - Y).^2 % L1 sum |X - Y| % L0 sum (X ~= Y) % CHI2 sum (X - Y).^2 ./ (X + Y) % HELL sum (X^.5 - Y^.5) .^ 2 % % (Notice that the standard definition of chi2 is half of what is % computed here). % % VL_ALLDIST2(...,'KERNEL') computes the following 'kernels' K: % % KERNEL K(i,j) % --------------------------------------------------------- % KL2 sum X .* Y % KL1 sum min (X, Y) % KCHI2 2 * sum (X .* Y) ./ (X + Y) % KHELL (X .* Y) .^ 0.5 % % The constant are chosen so that D(i,j) = K(i,i) + K(j,j) - 2 K(i,j) % where D is the metric corresponding to the kenrel (if the arguments % are non-negative vectors). Each kernel can be interpreted as the % inner product inducing the corresponding metric in an embedding of % the real space into an approrpiate reproducing Kenrel Hilbert % space. % % VL_ALLDIST2() supports several storage classes. X and Y must have the % same storage class. The sotrage class of D is promoted to reduce % the chance of overvlow, but this is not checked. % % X & Y class D class % --------------------------- % UINT8 UINT32 % INT8 INT32 % UINT16 UINT32 % INT16 INT32 % UINT32 UINT32 % INT32 INT32 % SINGLE SINGLE % DOUBLE DOUBLE % % Warning: Both chi2 and kchi2 use integer math when presented with % integer data types. This can easily result in zeros where you did % not expect them. % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/misc/vl_alphanum.m0000644000175000017500000000223212237004736016055 0ustar dimadimafunction [strings, perm] = vl_alphanum(strings) % VL_ALPHANUM Sort strings using the Alphanum algorithm % STRINGS = VL_ALPHANUM(STRINGS) sorts the cell array of strings % STRINGS by using the Alphanum algorithm [1]. [STRINGS,PERM] = % VL_ALPHANUM(...) returns the corresponding permutation PERM as % well. % % Example:: % Alphanum sorts strings in a way that 'makes sense'. For instance % % strings = {'B1', 'B2', 'B12', 'A12', 'A1', 'A2'} ; % sorted = vl_alphanum(strings) ; % % produces the sorted array {'A1', 'A2', 'A12', 'B1', B2', % 'B12'}. By contrast, SORT() produces the array {'A1', 'A12', % 'A2', 'B1', B12', 'B2'} (note the position of the elements % 'A12', 'B12'). % % References: % [1] Dave Koelle, 'The Alphanum Algorithm', % http://www.davekoelle.com/alphanum.html chunks = regexp(strings, '(\d+|\D+)', 'tokens') ; for i = 1:length(strings) chunks{i} = [chunks{i}{:}] ; for j = 1:length(chunks{i}) if isstrprop(chunks{i}{j},'digit') chunks{i}{j} = sprintf('%020.0f',sscanf(chunks{i}{j},'%d')) ; end end chunks{i} = [chunks{i}{:}] ; end [dorp,perm] = sort(chunks) ; strings = strings(perm) ; vlfeat/toolbox/misc/vl_svmdataset.m0000644000175000017500000000324312237004745016426 0ustar dimadimafunction dataset = vl_svmdataset(x, varargin) % VL_SVMDATASET Construct advanced SVM dataset structure % DATASET = VL_SVMDATASET(X) wraps the matrix X into a dataset % structure. All the formats supported by VL_SVMTRAIN() are % suppported here as well. % % DATASET = VL_SVMDATASET(X, 'homkermap', HOM) where HOM is a % structure with zero or more of the following fields: HOM.kernel, % HOM.order, HOM.window, HOM.gamma, HOM.period, See VL_HOMKERMAP() % for a discussion of these parameters. The effect is to use the % homogeneous kernel map to expand the data on the fly. This is % equivalent (albeit somewhat slower) to running VL_HOMKERMAP() % prior to learning. The main advantage is the significant memory % saving as the expanded data needs not to be stored in memory. % % See:: VL_SVMTRAIN(), VL_HOMKERMAP(), VL_HELP(). % Author: Daniele Perrone and Andrea Vedaldi opts.homkermap = [] ; opts = vl_argparse(opts, varargin) ; if issparse(x) error('X is a sparse matrix (sparse data will support be added in a future version.)') ; end if ~isa(x,'single') && ~isa(x,'double') error('X is neither SINGLE nor DOUBLE.') ; end sz = size(x) ; if numel(sz) > 2 error('X has more than two dimensions.') ; end dataset.data = x ; if isstruct(opts.homkermap) if numel(opts.homkermap) ~= 1 error('HOMKERMAP is not a singleton.') ; end ok = all(ismember(fieldnames(opts.homkermap), ... {'kernel', 'order', 'window', 'gamma', 'period'})) ; if ~ok error('HOMKERMAP contains an unsupported field name.') ; end dataset.homkermap = opts.homkermap ; elseif ~isempty(opts.homkermap) error('HOMKERMAP is not a structure nor []') ; end vlfeat/toolbox/misc/vl_colsubset.m0000644000175000017500000000453112237004736016257 0ustar dimadimafunction [Y, sel] = vl_colsubset(X,n,varargin) % VL_COLSUBSET Select a given number of columns % Y = VL_COLSUBSET(X, N) returns a random subset Y of N columns of % X. The selection is order-preserving and without replacement. If N % is larger or equal to the number of columns of X (e.g. N = Inf), % then the function returns all the columns (i.e., Y = X). % % If 0 < N < 1, then the function returns a fraction N of the % columns (rounded to the closest integer). % % [Y, SEL] = VL_COLSUBSET(...) returns the indexes SEL of the % selected columns. % % The function accepts the following options: % % Beginning:: % Returns the fist N columns. % % Ending:: % Returns the last N columns. % % Random:: [default] % Returns N columns selected at random (using RANDPERM()). % % Uniform:: % Returns N uniformly spaced columns. % % Largest:: % Returns the N largest columns (using SORTROWS()). % % Smallest:: % Returns the N smallest columns (using SORTROWS()). % % See also: VL_HELP(). % Authors: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if nargin < 2, n = 1 ; end mode = 'random' ; i = 1 ; while i <= length(varargin) switch lower(varargin{i}) case {'beginning', ... 'ending', ... 'random', ... 'uniform', ... 'largest', ... 'smallest'} mode = lower(varargin{1}) ; i = i + 1 ; otherwise error('Unknown option ''%s''.', varargin{i}) ; end end m = size(X,2) ; if n < 0, error('N must not be smaller than 0.') ; end if n ~= round(n) if n > 1 error('N must be a natural number, +inf, or a fraction in 0 and 1.') ; end n = round(m * n) ; end n = min(m,n) ; switch mode case 'random' perm = randperm(m) ; sel = sort(perm(1:n)) ; case 'beginning' perm = 1:m ; sel = sort(perm(1:n)) ; case 'ending' perm = m:-1:1 ; sel = sort(perm(1:n)) ; case 'uniform' if n < 1 sel = [] ; else sel = round(linspace(1, m, min(m,n))) ; end case 'largest' [drop, perm] = sortrows(X') ; sel = sort(perm(end-n+1:end)) ; case 'smallest' [drop, perm] = sortrows(X') ; sel = sort(perm(1:n)) ; end Y = X(:, sel) ; vlfeat/toolbox/misc/vl_alldist2.c0000644000175000017500000004271012237004736015761 0ustar dimadima/* file: alldist2.c ** description: All pairwise distances ** author: Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include #include #include #include #include enum { opt_LINF, opt_L2, opt_L1, opt_L0, opt_CHI2, opt_HELL, opt_KL2, opt_KL1, opt_KCHI2, opt_KHELL, opt_MIN } ; vlmxOption options [] = { {"linf", 0, opt_LINF }, {"l2", 0, opt_L2 }, {"l1", 0, opt_L1 }, {"l0", 0, opt_L0 }, {"chi2", 0, opt_CHI2 }, {"hell", 0, opt_HELL }, {"kl2", 0, opt_KL2 }, {"kl1", 0, opt_KL1 }, {"kchi2", 0, opt_KCHI2 }, {"khell", 0, opt_KHELL }, {"min", 0, opt_MIN }, {0, 0, 0 } } ; #undef MIN #undef MAX #undef ABS #undef ABS_DIFF #undef CORE #define MIN(x,y) ((x) <= (y) ? (x) : (y)) #define MAX(x,y) ((x) >= (y) ? (x) : (y)) #define ABS(x) ((x) >= 0 ? (x) : -(x)) #define ABS_DIFF(x,y) ((x) >= (y) ? ((x) - (y)) : ((y) - (x))) #ifndef sqrtf #define sqrtf(x) ((float)sqrt(x)) #endif /* for L2 norm */ /*#define CMP(s1,s2) ((double)(s1*s2)) */ /* for L1 norm */ #define CMP(s1,s2) ((double)MIN(s1,s2)) #define UINT8_t vl_uint8 #define INT8_t vl_int8 #define UINT16_t vl_uint16 #define INT16_t vl_int16 #define UINT32_t vl_uint32 #define INT32_t vl_int32 #define SINGLE_t float #define DOUBLE_t double #define CORE(NORM,F,DC,AC) \ void \ dist ## NORM ## _ ## DC ## _ ## AC \ ( \ AC ## _t * pt, DC ## _t * s1_pt, \ DC ## _t * s2_pt, \ vl_size L, vl_size N1, vl_size N2, \ bool self) \ { \ vl_uindex j1,j2,l ; \ for(j2 = 0 ; j2 < N2 ; ++j2) { \ for(j1 = 0 ; j1 < N1 ; ++j1) { \ if(! self || j1>=j2) { \ AC ## _t acc = 0 ; \ DC ## _t * s1_it = s1_pt + L*j1 ; \ DC ## _t * s2_it = s2_pt + L*j2 ; \ for(l = 0 ; l < L ; ++l) { \ AC ## _t s1 = *s1_it++ ; \ AC ## _t s2 = *s2_it++ ; \ F(AC, s1, s2) \ } \ *pt = acc; \ } else { \ *pt = *(pt + (j1 - j2) * (N1 - 1)) ; \ } \ pt++ ; \ } \ } \ } \ #define CORE_SPARSE(NORM, F) \ { \ double const * s1_pt = mxGetPr(in[IN_S1]) ; \ mwIndex const * s1_ir = mxGetIr(in[IN_S1]) ; \ mwIndex const * s1_jc = mxGetJc(in[IN_S1]) ; \ double const * s2_pt = 0 ; \ mwIndex const * s2_ir = 0 ; \ mwIndex const * s2_jc = 0 ; \ double * pt = mxGetPr(out[OUT_D]) ; \ vl_uindex j1, j2 ; \ \ if (self) { \ s2_pt = s1_pt ; \ s2_ir = s1_ir ; \ s2_jc = s1_jc ; \ } else { \ s2_pt = mxGetPr(in[IN_S2]) ; \ s2_ir = mxGetIr(in[IN_S2]) ; \ s2_jc = mxGetJc(in[IN_S2]) ; \ } \ \ for (j2 = 0 ; j2 < N2 ; ++j2) { \ for (j1 = 0 ; j1 < N1 ; ++j1) { \ int nz1 = s1_jc [j1+1] - s1_jc [j1] ; \ int nz2 = s2_jc [j2+1] - s2_jc [j2] ; \ if(! self || j1 >= j2) { \ double acc = 0 ; \ double const * s1_it = s1_pt + s1_jc [j1] ; \ double const * s2_it = s2_pt + s2_jc [j2] ; \ mwIndex const * s1_ir_it = s1_ir + s1_jc [j1] ; \ mwIndex const * s2_ir_it = s2_ir + s2_jc [j2] ; \ mwIndex ir1 ; \ mwIndex ir2 ; \ while (nz1 || nz2) { \ if (nz2 == 0) { \ double a = *s1_it++ ; \ F(DOUBLE, a, 0) ; \ s1_ir_it ++ ; \ nz1 -- ; \ continue ; \ } \ if (nz1 == 0) { \ double b = *s2_it++ ; \ F(DOUBLE, 0, b) ; \ s2_ir_it ++ ; \ nz2 -- ; \ continue ; \ } \ ir1 = *s1_ir_it ; \ ir2 = *s2_ir_it ; \ if (ir1 < ir2) { \ double a = *s1_it++ ; \ F(DOUBLE, a, 0) ; \ s1_ir_it ++ ; \ nz1 -- ; \ continue ; \ } \ if (ir1 > ir2) { \ double b = *s2_it++ ; \ F(DOUBLE, 0, b) ; \ s2_ir_it ++ ; \ nz2 -- ; \ continue ; \ } \ { \ double a = *s1_it++ ; \ double b = *s2_it++ ; \ F(DOUBLE, a, b) ; \ s1_ir_it ++ ; \ s2_ir_it ++ ; \ nz1 -- ; \ nz2 -- ; \ } \ } \ *pt = acc; \ } else { \ *pt = *(pt + (j1 - j2) * (N1 - 1)) ; \ } \ pt++ ; \ } \ } \ } #define DEF_CLASS(NORM,F) \ CORE (NORM, F, INT8, INT32) \ CORE (NORM, F, UINT8, UINT32) \ CORE (NORM, F, INT16, INT32) \ CORE (NORM, F, UINT16, UINT32) \ CORE (NORM, F, INT32, INT32) \ CORE (NORM, F, UINT32, UINT32) \ CORE (NORM, F, SINGLE, SINGLE) \ CORE (NORM, F, DOUBLE, DOUBLE) #define F_L0(AC,x,y) { acc += (x) != (y) ; } #define F_L1(AC,x,y) { acc += ABS_DIFF(x,y) ; } #define F_L2(AC,x,y) { AC ## _t tmp = ABS_DIFF(x,y) ; acc += tmp * tmp ; } #define F_LINF(AC,x,y) { acc = MAX(acc, ABS_DIFF(x,y)) ; } #define F_CHI2(AC,x,y) \ { \ AC ## _t meant2 = ((x) + (y)) ; \ if (meant2 != 0) { \ AC ## _t tmp = ABS_DIFF(x,y) ; \ acc += tmp * tmp / meant2 ; \ } \ } #define F_HELL_SINGLE(x,y) { acc += x + y - 2 * sqrtf (x * y) ; } #define F_HELL_DOUBLE(x,y) { acc += x + y - 2 * sqrt (x * y) ; } #define F_HELL_UINT32(x,y) { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } #define F_HELL_INT32(x,y) { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } #define F_HELL_UINT16(x,y) { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } #define F_HELL_INT16(x,y) { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } #define F_HELL_UINT8(x,y) { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } #define F_HELL_INT8(x,y) { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } #define F_HELL(AC,x,y) F_HELL_ ## AC (x,y) #define F_KL2(AC,x,y) { acc += (x*y) ; } #define F_KL1(AC,x,y) { acc += MIN(x,y) ; } #define F_MIN(AC,x,y) { acc += MIN(x,y) ; } #define F_KCHI2(AC,x,y) \ { \ AC ## _t mean = ((x) + (y)) / 2 ; \ if (mean != 0) { \ AC ## _t tmp = (x) * (y) ; \ acc += tmp / mean ; \ } \ } #define F_KHELL_SINGLE(x,y) { acc += sqrtf (x * y) ; } #define F_KHELL_DOUBLE(x,y) { acc += sqrt (x * y) ; } #define F_KHELL_UINT32(x,y) { acc += vl_fast_sqrt_ui32 (x * y) ; } #define F_KHELL_INT32(x,y) { acc += vl_fast_sqrt_ui32 (x * y) ; } #define F_KHELL_UINT16(x,y) { acc += vl_fast_sqrt_ui32 (x * y) ; } #define F_KHELL_INT16(x,y) { acc += vl_fast_sqrt_ui32 (x * y) ; } #define F_KHELL_UINT8(x,y) { acc += vl_fast_sqrt_ui32 (x * y) ; } #define F_KHELL_INT8(x,y) { acc += vl_fast_sqrt_ui32 (x * y) ; } #define F_KHELL(AC,x,y) F_KHELL_ ## AC (x,y) DEF_CLASS (LINF, F_LINF ) DEF_CLASS (L2, F_L2 ) DEF_CLASS (L1, F_L1 ) DEF_CLASS (L0, F_L0 ) DEF_CLASS (CHI2, F_CHI2 ) DEF_CLASS (HELL, F_HELL ) DEF_CLASS (KL2, F_KL2 ) DEF_CLASS (KL1, F_KL1 ) DEF_CLASS (KCHI2, F_KCHI2) DEF_CLASS (KHELL, F_KHELL) DEF_CLASS (MIN, F_MIN ) /* driver */ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { typedef int unsigned data_t ; /* mxClassID data_class = mxINT8_CLASS ;*/ enum {IN_S1,IN_S2} ; enum {OUT_D=0} ; vl_size L,N1,N2 ; vl_bool sparse = 0 ; void const * s1_pt ; void const * s2_pt ; mxClassID data_class ; mxClassID acc_class ; mwSize dims [2] ; /* for option parsing */ bool self = 1 ; /* called with one numeric argument? */ int norm = opt_L2 ; /* type of norm to be computed */ int opt ; int next = 1 ; mxArray const *optarg ; /** ----------------------------------------------------------------- ** Check the arguments ** -------------------------------------------------------------- */ if (nout > 1) { mexErrMsgTxt("Too many output arguments."); } if (nin < 1) { mexErrMsgTxt("At leat one argument required.") ; } if(! mxIsNumeric(in[IN_S1])) { mexErrMsgTxt ("X must be numeric") ; } if (nin >= 2 && mxIsNumeric(in[IN_S2])) { self = 0 ; next = 2 ; } sparse = mxIsSparse(in[IN_S1]) ; if (sparse && nin >=2 && mxIsNumeric(in[IN_S2])) { if (! mxIsSparse(in[IN_S2])) { mexErrMsgTxt ("X and Y must be either both full or sparse.") ; } } while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { switch (opt) { case opt_LINF : case opt_L2 : case opt_L1 : case opt_L0 : case opt_CHI2 : case opt_HELL : case opt_KL2 : case opt_KL1 : case opt_KCHI2 : case opt_KHELL : case opt_MIN : norm = opt ; break ; default: abort() ; } } data_class = mxGetClassID(in[IN_S1]) ; if ((!self) && data_class != mxGetClassID(in[IN_S2])) { mexErrMsgTxt("X and Y must have the same numeric class") ; } assert ((! sparse) || (data_class == mxDOUBLE_CLASS)) ; L = mxGetM(in[IN_S1]) ; N1 = mxGetN(in[IN_S1]) ; N2 = self ? N1 : mxGetN(in[IN_S2]) ; dims[0] = N1 ; dims[1] = N2 ; if ((!self) && L != mxGetM(in[IN_S2])) { mexErrMsgTxt("X and Y must have the same number of rows") ; } s1_pt = mxGetData(in[IN_S1]) ; s2_pt = self ? s1_pt : mxGetData(in[IN_S2]) ; #define DISPATCH_CLASS(NORM, DC,AC) \ case mx ## DC ## _CLASS : \ acc_class = mx ## AC ## _CLASS ; \ out[OUT_D] = mxCreateNumericArray(2,dims,acc_class,mxREAL) ; \ dist ## NORM ## _ ## DC ## _ ## AC \ ( (AC ## _t *)mxGetData(out[OUT_D]), \ (DC ## _t *)s1_pt, \ (DC ## _t *)s2_pt, \ L, N1, N2, \ self ) ; \ break ; #define DISPATCH_NORM(NORM) \ case opt_ ## NORM : \ if (sparse) { \ out[OUT_D] = mxCreateNumericArray(2,dims,mxDOUBLE_CLASS,mxREAL) ; \ CORE_SPARSE(NORM, VL_XCAT(F_, NORM)) \ } else { \ switch (data_class) { \ DISPATCH_CLASS(NORM, UINT8 , UINT32) \ DISPATCH_CLASS(NORM, INT8 , INT32) \ DISPATCH_CLASS(NORM, UINT16, UINT32) \ DISPATCH_CLASS(NORM, INT16, INT32) \ DISPATCH_CLASS(NORM, UINT32, UINT32) \ DISPATCH_CLASS(NORM, INT32, INT32) \ DISPATCH_CLASS(NORM, SINGLE, SINGLE) \ DISPATCH_CLASS(NORM, DOUBLE,DOUBLE) \ default: \ mexErrMsgTxt("Data class not supported!") ; \ } \ } \ break ; switch (norm) { DISPATCH_NORM(LINF ) ; DISPATCH_NORM(L2 ) ; DISPATCH_NORM(L1 ) ; DISPATCH_NORM(L0 ) ; DISPATCH_NORM(CHI2 ) ; DISPATCH_NORM(HELL ) ; DISPATCH_NORM(KL2 ) ; DISPATCH_NORM(KL1 ) ; DISPATCH_NORM(KCHI2) ; DISPATCH_NORM(KHELL) ; DISPATCH_NORM(MIN ) ; default: abort() ; } } vlfeat/toolbox/misc/vl_kdtreequery.m0000644000175000017500000000346312237004736016623 0ustar dimadima% VL_KDTREEQUERY Query KD-tree % [INDEX, DIST] = VL_KDTREEQUERY(KDTREE, X, Y) computes the nearest % column of X to each column of Y (in Euclidean distance). KDTREE is % a forest of kd-trees build by VL_KDTREEBUILD(). X is a % NUMDIMENSIONS x NUMDATA data matrix of class SINGLE or DOUBLE with % the data indexed by the kd-trees (it must be the same data matrix % passed to VK_KDTREEBUILD() to build the trees). Y is the % NUMDIMENSIONS x NUMQUERIES matrix of query points and must have % the same class of X. INDEX is a 1 x NUMQUERIES matrix of class % UINT32 with the index of the nearest column of X for each column % of Y. DIST is a 1 x NUMQUERIES vector of class SINGLE or DOUBLE % (depending on the class of X and Y) with the corresponding squared % Euclidean distances. % % [INDEX, DIST] = VL_KDTREEQUERY(..., 'NUMNEIGHBORS', NN) can be % used to return the N nearest neighbors rather than just the % nearest one. In this case INDEX and DIST are NN x NUMQUERIES % matrices. Neighbors are returned by increasing distance. % % VL_KDTREEQUERY(..., 'MAXNUMCOMPARISONS', NCOMP) performs at most % NCOMP comparisons for each query point. In this case the result is % only approximate (i.e. approximated nearest-neighbors, or ANNs) % but the speed can be greatly improved. % % Options: % % NumNeighbors:: % Sets the number of neighbors to compute for each query point (by % default 1). % % MaxNumComparisons:: % Sets the maximum number of comparisons per query point. The % special value 0 means unbounded. The default is 0. % % See also: VL_KDTREEBUILD(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/misc/vl_alldist.c0000644000175000017500000001326712237004736015704 0ustar dimadima/** @file vl_alldist.c ** @brief vl_alldist - MEX implementation ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include "mexutils.h" #include enum { opt_LINF, opt_L2, opt_L1, opt_L0, opt_CHI2, opt_HELL, opt_JS, opt_KL2, opt_KL1, opt_KCHI2, opt_KHELL, opt_KJS } ; vlmxOption options [] = { {"linf", 0, opt_LINF }, {"l2", 0, opt_L2 }, {"l1", 0, opt_L1 }, {"l0", 0, opt_L0 }, {"chi2", 0, opt_CHI2 }, {"hell", 0, opt_HELL }, {"js", 0, opt_JS }, {"kl2", 0, opt_KL2 }, {"kl1", 0, opt_KL1 }, {"kchi2", 0, opt_KCHI2 }, {"khell", 0, opt_KHELL }, {"kjs", 0, opt_KJS }, {0, 0, 0 } } ; /* driver */ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { typedef int unsigned data_t ; vl_bool autoComparison = VL_TRUE ; VlVectorComparisonType comparisonType = VlDistanceL2 ; enum {IN_X = 0, IN_Y} ; enum {OUT_D = 0} ; mwSize numDataX = 0 ; mwSize numDataY = 0 ; mwSize dimension ; mxClassID classId ; /* for option parsing */ int opt ; int next ; mxArray const *optarg ; VL_USE_MATLAB_ENV ; if (nout > 1) { vlmxError(vlmxErrTooManyOutputArguments, NULL) ; } if (nin < 1) { vlmxError(vlmxErrNotEnoughInputArguments, NULL) ; } if (! (vlmxIsMatrix (in[IN_X],-1,-1) && vlmxIsReal(in[IN_X]))) { vlmxError(vlmxErrInvalidArgument, "X must be a real matrix.") ; } next = 1 ; classId = mxGetClassID(in[IN_X]) ; dimension = mxGetM(in[IN_X]) ; numDataX = mxGetN(in[IN_X]) ; if (nin > 1 && vlmxIsMatrix (in[IN_Y],-1,-1) && vlmxIsReal(in[IN_Y])) { next = 2 ; autoComparison = VL_FALSE ; numDataY = mxGetN(in[IN_Y]) ; if (mxGetClassID(in[IN_Y]) != classId) { vlmxError(vlmxErrInvalidArgument, "X and Y must have the same class.") ; } if (dimension != mxGetM(in[IN_Y])) { vlmxError(vlmxErrInvalidArgument, "X and Y must have the same number of rows.") ; } } if (classId != mxSINGLE_CLASS && classId != mxDOUBLE_CLASS) { vlmxError(vlmxErrInvalidArgument, "X must be either of class SINGLE or DOUBLE."); } while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { switch (opt) { case opt_L2 : comparisonType = VlDistanceL2 ; break ; case opt_L1 : comparisonType = VlDistanceL1 ; break ; case opt_CHI2 : comparisonType = VlDistanceChi2 ; break ; case opt_HELL : comparisonType = VlDistanceHellinger ; break ; case opt_JS : comparisonType = VlDistanceJS ; break ; case opt_KL2 : comparisonType = VlKernelL2 ; break ; case opt_KL1 : comparisonType = VlKernelL1 ; break ; case opt_KCHI2 : comparisonType = VlKernelChi2 ; break ; case opt_KHELL : comparisonType = VlKernelHellinger ; break ; case opt_KJS : comparisonType = VlKernelJS ; break ; default: abort() ; } } /* allocate output */ { mwSize dims [2] ; dims[0] = numDataX ; dims[1] = autoComparison ? numDataX : numDataY ; out[OUT_D] = mxCreateNumericArray (2, dims, classId, mxREAL) ; } /* If either numDataX or numDataY are null, their data pointers are null as well. This may confuse vl_eval_vector_comparison_on_all_pairs_*, so we intercept this as a special case. The same is true if dimension is null. */ if (numDataX == 0 || (! autoComparison && numDataY == 0)) { return ; } if (dimension == 0) { return ; } /* make calculation */ switch (classId) { case mxSINGLE_CLASS: { VlFloatVectorComparisonFunction f = vl_get_vector_comparison_function_f (comparisonType) ; if (autoComparison) { vl_eval_vector_comparison_on_all_pairs_f ((float*)mxGetData(out[OUT_D]), dimension, (float*)mxGetData(in[IN_X]), numDataX, 0, 0, f) ; } else { vl_eval_vector_comparison_on_all_pairs_f ((float*)mxGetData(out[OUT_D]), dimension, (float*)mxGetData(in[IN_X]), numDataX, (float*)mxGetData(in[IN_Y]), numDataY, f) ; } } break ; case mxDOUBLE_CLASS: { VlDoubleVectorComparisonFunction f = vl_get_vector_comparison_function_d (comparisonType) ; if (autoComparison) { vl_eval_vector_comparison_on_all_pairs_d ((double*)mxGetData(out[OUT_D]), dimension, (double*)mxGetData(in[IN_X]), numDataX, 0, 0, f) ; } else { vl_eval_vector_comparison_on_all_pairs_d ((double*)mxGetData(out[OUT_D]), dimension, (double*)mxGetData(in[IN_X]), numDataX, (double*)mxGetData(in[IN_Y]), numDataY, f) ; } } break ; default: abort() ; } } vlfeat/toolbox/misc/vl_cummax.c0000644000175000017500000000743512237004736015542 0ustar dimadima/** @file vl_cummax.c ** @brief vl_cummax MEX defition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #define REPEAT1_1(m,p) m(1,p) #define REPEAT1_2(m,p) REPEAT1_1(m,p) m(2,p) #define REPEAT1_3(m,p) REPEAT1_2(m,p) m(3,p) #define REPEAT1_4(m,p) REPEAT1_3(m,p) m(4,p) #define REPEAT1_5(m,p) REPEAT1_4(m,p) m(5,p) #define REPEAT1_6(m,p) REPEAT1_5(m,p) m(6,p) #define REPEAT1_7(m,p) REPEAT1_6(m,p) m(7,p) #define REPEAT1_8(m,p) REPEAT1_7(m,p) m(8,p) #define REPEAT1_9(m,p) REPEAT1_8(m,p) m(9,p) #define REPEAT1_10(m,p) REPEAT1_9(m,p) m(10,p) #define TYPE_1 double #define TYPE_2 float #define TYPE_3 vl_int64 #define TYPE_4 vl_uint64 #define TYPE_5 vl_int32 #define TYPE_6 vl_uint32 #define TYPE_7 vl_int16 #define TYPE_8 vl_uint16 #define TYPE_9 vl_int8 #define TYPE_10 vl_uint8 #define TYPE_AUX(x) TYPE_ ## x #define TYPE(x) TYPE_AUX(x) #define CLASS_1 DOUBLE #define CLASS_2 SINGLE #define CLASS_3 INT64 #define CLASS_4 UINT64 #define CLASS_5 INT32 #define CLASS_6 UINT32 #define CLASS_7 INT16 #define CLASS_8 UINT16 #define CLASS_9 INT8 #define CLASS_10 UINT8 #define CLASS_AUX(x) CLASS_ ## x #define CLASS(x) CLASS_AUX(x) #include "vl_cummax.def" void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum {IN_X, IN_DIM, IN_END} ; enum {OUT_Y = 0} ; vl_index whichDimension = 0 ; vl_size dimension ; vl_size numDimensions ; mwSize const * dimensions ; mxClassID classId ; vl_size stride = 1 ; vl_index k ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin < 1) { vlmxError(vlmxErrNotEnoughInputArguments, NULL) ; } else if (nout > 1) { vlmxError(vlmxErrTooManyOutputArguments, NULL) ; } else if (nin > 2) { vlmxError(vlmxErrTooManyInputArguments, NULL) ; } /* get information on the data */ if (!mxIsNumeric(IN(X))) { vlmxError(vlmxErrInvalidArgument, "X is not a numeric array.") ; } classId = mxGetClassID(IN(X)) ; numDimensions = mxGetNumberOfDimensions(IN(X)) ; dimensions = mxGetDimensions(IN(X)) ; /* get the operating dimension */ if (nin == 2) { if (!vlmxIsPlainScalar(IN(DIM))) { vlmxError(vlmxErrInvalidArgument, "DIM is not a plain scalar.") ; } whichDimension = mxGetScalar(IN(DIM)) ; if (whichDimension < 1 || whichDimension > (signed)numDimensions) { vlmxError(vlmxErrInvalidArgument, "DIM=%d is not a valid dimension of X.", whichDimension) ; } } /* ----------------------------------------------------------------- * Do the job * -------------------------------------------------------------- */ OUT(Y) = mxCreateNumericArray(numDimensions, dimensions, classId, mxREAL) ; if (whichDimension >= 1) { /* Compute the stride to whichDimension. */ for (k = 0 ; k < whichDimension - 1 ; ++k) { stride *= dimensions[k] ; } } else { /* Pick the first non-singleton dimension, if any. Note that in this case the stride is equal to 1. */ for (k = 0 ; k < (signed)numDimensions-1 && dimensions[k] == 1 ; ++k) ; whichDimension = k + 1 ; } dimension = dimensions[whichDimension - 1] ; #define DISPATCH(I,V) \ case VL_XCAT3(mx,CLASS(I),_CLASS): \ VL_XCAT(_vl_cummax_,TYPE(I))(OUT(Y), IN(X), stride, dimension) ; break ; switch (classId) { REPEAT1_10(DISPATCH,_) ; default : vlmxError(vlmxErrInvalidArgument, "X is not of one of the supported storage classes.") ; } } vlfeat/toolbox/misc/vl_lbpfliplr.m0000644000175000017500000000154412237004736016243 0ustar dimadimafunction f = vl_lbpfliplr(f) % VL_LBPFLIPLR Flip LBP features left-right % F = VL_LBPFLIPLR(F) flips the LBP features F from left to % right. % % Example:: % The following instructions return results almost identical % assuming that the width of I is exactly divisible by the cell % size: % F = VL_LBP(FLIPLR(I), 8) % F_ = VL_LBPFLIPLR(VL_LBP(I), 8) % % See also: VL_LBP(), VL_HELP(). % construct permutation perm = zeros(1,58) ; perm(58) = 58 ; perm(57) = 57 ; % i is the start of the sequence of 1 and j its length % recall that i=0 -> E, i=1 -> SE, etc % the length j remains the same. % flipping the start gives the flipped end, and subtracting the length % gives the flipped start for i = 0:7 for j = 1:7 i_ = mod(4 - i - j + 1, 8) ; j_ = j ; perm(i * 7 + j) = i_ * 7 + j_ ; end end f = f(:, end:-1:1, perm) ; vlfeat/toolbox/misc/vl_override.m0000644000175000017500000001105612237004736016073 0ustar dimadimafunction config = vl_override(config,update,varargin) % VL_OVERRIDE Override structure subset % CONFIG = VL_OVERRIDE(CONFIG, UPDATE) copies recursively the fileds % of the structure UPDATE to the corresponding fields of the % struture CONFIG. % % Usually CONFIG is interpreted as a list of paramters with their % default values and UPDATE as a list of new paramete values. % % VL_OVERRIDE(..., 'Warn') prints a warning message whenever: (i) % UPDATE has a field not found in CONFIG, or (ii) non-leaf values of % CONFIG are overwritten. % % VL_OVERRIDE(..., 'Skip') skips fields of UPDATE that are not found % in CONFIG instead of copying them. % % VL_OVERRIDE(..., 'CaseI') matches field names in a % case-insensitive manner. % % Remark:: % Fields are copied at the deepest possible level. For instance, % if CONFIG has fields A.B.C1=1 and A.B.C2=2, and if UPDATE is the % structure A.B.C1=3, then VL_OVERRIDE() returns a strucuture with % fields A.B.C1=3, A.B.C2=2. By contrast, if UPDATE is the % structure A.B=4, then the field A.B is copied, and VL_OVERRIDE() % returns the structure A.B=4 (specifying 'Warn' would warn about % the fact that the substructure B.C1, B.C2 is being deleted). % % Remark:: % Two fields are matched if they correspond exactly. Specifically, % two fileds A(IA).(FA) and B(IA).FB of two struct arrays A and B % match if, and only if, (i) A and B have the same dimensions, % (ii) IA == IB, and (iii) FA == FB. % % See also: VL_ARGPARSE(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). warn = false ; skip = false ; err = false ; casei = false ; if length(varargin) == 1 & ~ischar(varargin{1}) % legacy warn = 1 ; end if ~warn & length(varargin) > 0 for i=1:length(varargin) switch lower(varargin{i}) case 'warn' warn = true ; case 'skip' skip = true ; case 'err' err = true ; case 'argparse' argparse = true ; case 'casei' casei = true ; otherwise error(sprintf('Unknown option ''%s''.',varargin{i})) ; end end end % if CONFIG is not a struct array just copy UPDATE verbatim if ~isstruct(config) config = update ; return ; end % if CONFIG is a struct array but UPDATE is not, no match can be % established and we simply copy UPDATE verbatim if ~isstruct(update) config = update ; return ; end % if CONFIG and UPDATE are both struct arrays, but have different % dimensions then nom atch can be established and we simply copy % UPDATE verbatim if numel(update) ~= numel(config) config = update ; return ; end % if CONFIG and UPDATE are both struct arrays of the same % dimension, we override recursively each field for idx=1:numel(update) fields = fieldnames(update) ; for i = 1:length(fields) updateFieldName = fields{i} ; if casei configFieldName = findFieldI(config, updateFieldName) ; else configFieldName = findField(config, updateFieldName) ; end if ~isempty(configFieldName) config(idx).(configFieldName) = ... vl_override(config(idx).(configFieldName), ... update(idx).(updateFieldName)) ; else if warn warning(sprintf('copied field ''%s'' which is in UPDATE but not in CONFIG', ... updateFieldName)) ; end if err error(sprintf('The field ''%s'' is in UPDATE but not in CONFIG', ... updateFieldName)) ; end if skip if warn warning(sprintf('skipping field ''%s'' which is in UPDATE but not in CONFIG', ... updateFieldName)) ; end continue ; end config(idx).(updateFieldName) = update(idx).(updateFieldName) ; end end end % -------------------------------------------------------------------- function field = findFieldI(S, matchField) % -------------------------------------------------------------------- field = '' ; fieldNames = fieldnames(S) ; for fi=1:length(fieldNames) if strcmpi(fieldNames{fi}, matchField) field = fieldNames{fi} ; end end % -------------------------------------------------------------------- function field = findField(S, matchField) % -------------------------------------------------------------------- field = '' ; fieldNames = fieldnames(S) ; for fi=1:length(fieldNames) if strcmp(fieldNames{fi}, matchField) field = fieldNames{fi} ; end end vlfeat/toolbox/misc/vl_lbp.m0000644000175000017500000000117112237004745015026 0ustar dimadima% VL_LBP Local Binary Patterns % F = VL_LBP(IM, CELLSIZE) computes the Local Binary Pattern (LBP) % features for image I. % % IM is divided in cells of size CELLSIZE. F is a three-dimensional % array containing one histograms of quantized LBP features per % cell. The witdh of F is FLOOR(WIDTH/CELLSIZE), where WIDTH is the % width of the image. The same for the height. The third dimension % is 58. % % See also: VL_HELP(). % Copyright (C) 2010-11 Andrea Vedaldi. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/misc/vl_hog.m0000644000175000017500000000331212237004745015025 0ustar dimadima% VL_HOG Compute HOG features % HOG = VL_HOG(IM, CELLSIZE) computes the HOG features for image IM % and the specified CELLSIZE. IM can be either grayscale or colour % in SINGLE storage class. HOG is an array of cells: its number % of columns is approximately the number of columns of IM divided % by CELLSIZE and the same for the number of rows. The third % dimension spans the feature compoents. % % PERM = VL_HOG('permutation') returns the left-right permutation % to apply to each HOG cell to flip it. % % IMAGE = VL_HOG('render', HOG) returns an IMAGE containing an % iconic representation of the array of cells HOG. % % Options: % % Variant:: 'UoCTTI' % Choose a HOG variant: 'UoCTTI' or 'DalalTriggs'. % % NumOrientations:: 9 % Choose a number of undirected orientations in the orientation % histograms. The angle [0,pi) is divided in to NumOrientation % equal parts. % % DirectedPolarField:: % By specifying this flag the image IM is interpreted as samples % from a 2D vector field specified by their argument IM(:,:,2) and % modulus IM(:,:,1). % % UndirectedPolarField:: % Same as above, but wraps angles in [0,pi). % % BilinearOrientations:: % This flags activates the use of bilinear interpolation to assign % orientations to bins. This produces a smoother feature, but is % not some other implementations (e.g. UoCTTI). % % Example:: computing and visualizing HOG features % hog = vl_hog(im2single(im)) ; % compute HOG features % Author: Andrea Vedaldi % Copyright (C) 2012-13 Andrea Vedaldi. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/misc/vl_cummax.def0000644000175000017500000000464312237004736016054 0ustar dimadima/** @file vl_cummax.def ** @brief vl_cummax MEX helper template ** @author Andrea Vedaldi **/ /* Copyright */ /* include this file for different values of ITERATE_1 */ #ifndef ITERATE_1 # define ITERATE_1 1 # include "vl_cummax.def" # undef ITERATE_1 # define ITERATE_1 2 # include "vl_cummax.def" # undef ITERATE_1 # define ITERATE_1 3 # include "vl_cummax.def" # undef ITERATE_1 # define ITERATE_1 4 # include "vl_cummax.def" # undef ITERATE_1 # define ITERATE_1 5 # include "vl_cummax.def" # undef ITERATE_1 # define ITERATE_1 6 # include "vl_cummax.def" # undef ITERATE_1 # define ITERATE_1 7 # include "vl_cummax.def" # undef ITERATE_1 # define ITERATE_1 8 # include "vl_cummax.def" # undef ITERATE_1 # define ITERATE_1 9 # include "vl_cummax.def" # undef ITERATE_1 # define ITERATE_1 10 # include "vl_cummax.def" # undef ITERATE_1 #endif /* For each value of ITERATE_1, instantiate the algorithm for a different data type. */ #if defined(ITERATE_1) # define __VALUE_T__ TYPE(ITERATE_1) /* The algorithm scans in linear order the input data X. X indexed as X[i1,i2,i3,...,iD] where D is the number of dimensions. In order to operate on the d-th dimension, one defines the output Y as / MAX(Y[i1,i2,...,id - 1,...], X[i1,i2,...,id,...]), if id > 0 (OP), Y[i1,i2,...] = < \ X[i1,i2,...,id,...], if id = 0 (COPY). So by scanning X in column major, one has id = 0 while i1,i2,...,id-1 traverse the first STRIDE = D1*D2*...*D_{d-1} elements and performs a COPY operation. Then id is incremented by one and remains > 0 until D1*D2*...*D_{d-1}*Dd elemenets are visited overall, and performs OP operations (MAX in this case). Then id = 0 again and so on until all elements are visited. */ VL_INLINE void VL_XCAT(_vl_cummax_,__VALUE_T__) (mxArray * Y_array, mxArray const * X_array, vl_size stride, vl_size dimension) { __VALUE_T__ const * x = (__VALUE_T__*) mxGetData(X_array) ; __VALUE_T__ const * x_stop = x + mxGetNumberOfElements(X_array) ; __VALUE_T__ * y = (__VALUE_T__*) mxGetData(Y_array) ; while (x < x_stop) { __VALUE_T__ const * x_ops_stop = x + stride ; /* copy stride elements */ while (x < x_ops_stop) { *y++ = *x++ ; } /* op stride * (dimension - 1) */ x_ops_stop += stride * (dimension - 1) ; while (x < x_ops_stop) { *y = VL_MAX(*x, *(y - stride)) ; ++ y ; ++ x ; } } } #undef __VALUE_T__ #endif vlfeat/toolbox/misc/vl_binsum.c0000644000175000017500000000750212237004736015540 0ustar dimadima/** @internal ** @file binsum.c ** @author Andrea Vedaldi ** @brief vl_binsum.c - MEX definition **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #define REPEAT1_1(m,p) m(1,p) #define REPEAT1_2(m,p) REPEAT1_1(m,p) m(2,p) #define REPEAT1_3(m,p) REPEAT1_2(m,p) m(3,p) #define REPEAT1_4(m,p) REPEAT1_3(m,p) m(4,p) #define REPEAT1_5(m,p) REPEAT1_4(m,p) m(5,p) #define REPEAT1_6(m,p) REPEAT1_5(m,p) m(6,p) #define REPEAT1_7(m,p) REPEAT1_6(m,p) m(7,p) #define REPEAT1_8(m,p) REPEAT1_7(m,p) m(8,p) #define REPEAT1_9(m,p) REPEAT1_8(m,p) m(9,p) #define REPEAT1_10(m,p) REPEAT1_9(m,p) m(10,p) #define REPEAT2_1(m,p) m(1,p) #define REPEAT2_2(m,p) REPEAT2_1(m,p) m(2,p) #define REPEAT2_3(m,p) REPEAT2_2(m,p) m(3,p) #define REPEAT2_4(m,p) REPEAT2_3(m,p) m(4,p) #define REPEAT2_5(m,p) REPEAT2_4(m,p) m(5,p) #define REPEAT2_6(m,p) REPEAT2_5(m,p) m(6,p) #define REPEAT2_7(m,p) REPEAT2_6(m,p) m(7,p) #define REPEAT2_8(m,p) REPEAT2_7(m,p) m(8,p) #define REPEAT2_9(m,p) REPEAT2_8(m,p) m(9,p) #define REPEAT2_10(m,p) REPEAT2_9(m,p) m(10,p) #define TYPE_1 double #define TYPE_2 float #define TYPE_3 vl_int64 #define TYPE_4 vl_uint64 #define TYPE_5 vl_int32 #define TYPE_6 vl_uint32 #define TYPE_7 vl_int16 #define TYPE_8 vl_uint16 #define TYPE_9 vl_int8 #define TYPE_10 vl_uint8 #define TYPE_AUX(x) TYPE_ ## x #define TYPE(x) TYPE_AUX(x) #define CLASS_1 DOUBLE #define CLASS_2 SINGLE #define CLASS_3 INT64 #define CLASS_4 UINT64 #define CLASS_5 INT32 #define CLASS_6 UINT32 #define CLASS_7 INT16 #define CLASS_8 UINT16 #define CLASS_9 INT8 #define CLASS_10 UINT8 #define CLASS_AUX(x) CLASS_ ## x #define CLASS(x) CLASS_AUX(x) #include "vl_binsum.def" /* ---------------------------------------------------------------- */ /* */ /* ---------------------------------------------------------------- */ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum {IN_ACCUMULATOR = 0, IN_VALUES, IN_INDEXES, IN_DIM} ; enum {OUT_ACCUMULATOR = 0} ; mxClassID valueClass ; mxClassID indexClass ; vl_index dim = 0 ; if (nin < 3) { vlmxError(vlmxErrNotEnoughInputArguments, NULL) ; } if (nin > 4) { vlmxError(vlmxErrTooManyInputArguments, NULL) ; } if (nout > 1) { vlmxError(vlmxErrTooManyOutputArguments, NULL) ; } if (!vlmxIsReal(IN(ACCUMULATOR))) { vlmxError(vlmxErrInvalidArgument, "ACCUMULATOR is not a numeric real array.") ; } if (!vlmxIsReal(IN(VALUES))) { vlmxError(vlmxErrInvalidArgument, "VALUES is not a numeric real array.") ; } if (!vlmxIsReal(IN(INDEXES))) { vlmxError(vlmxErrInvalidArgument, "INDEXES is not a numeric real array.") ; } indexClass = mxGetClassID(IN(INDEXES)) ; valueClass = mxGetClassID(IN(ACCUMULATOR)) ; if (valueClass != mxGetClassID(IN(VALUES))) { vlmxError(vlmxErrInvalidArgument, "ACCUMULATOR and VALUES do not have the same storage class.") ; } if (nin > 3) { if (!vlmxIsPlainScalar(IN(DIM))) { vlmxError(vlmxErrInvalidArgument, "DIM is not a plain scalar.") ; } dim = (vl_index)mxGetScalar(IN(DIM)) ; } out[0] = mxDuplicateArray(IN(ACCUMULATOR)) ; #define DISPATCH(I,V) \ case VL_XCAT3(mx,CLASS(I),_CLASS): \ VL_XCAT4(_vl_binsum_,TYPE(V),_,TYPE(I))(out[0], IN(VALUES), IN(INDEXES), dim) ; break ; #define DISPATCH_VALUE(V,_) \ case VL_XCAT3(mx,CLASS(V),_CLASS) : \ switch (indexClass) { \ REPEAT2_10(DISPATCH,V) ; \ default: \ vlmxError(vlmxErrInvalidArgument, "INDEXES is not of one of the supported storage classes.") ; \ } \ break ; switch (valueClass) { REPEAT1_10(DISPATCH_VALUE,_) ; default: vlmxError(vlmxErrInvalidArgument, "ACCUMULATOR is not of one of the supported storage classes.") ; } } vlfeat/toolbox/misc/vl_simdctrl.c0000644000175000017500000000173112237004736016062 0ustar dimadima/** @file vl_simdctlr.c ** @brief vl_simdctrl MEX definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include "mexutils.h" void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum {IN_ENABLED = 0} ; enum {OUT_ENABLED = 0} ; vl_bool wasEnabled = vl_get_simd_enabled() ; if (nout > 1) { vlmxError(vlmxErrInvalidArgument, "at most one output argument") ; } OUT(ENABLED) = vlmxCreatePlainScalar (wasEnabled) ; if (nin == 0) { return ; } if (nin > 1) { vlmxError(vlmxErrInvalidArgument, "At most one argument") ; } if (!vlmxIsScalar(IN(ENABLED))) { vlmxError(vlmxErrInvalidArgument, "ENABLED must be a scalar") ; } vl_set_simd_enabled ((vl_bool) mxGetScalar(IN(ENABLED))) ; } vlfeat/toolbox/misc/vl_ihashsum.m0000644000175000017500000000454712237004745016104 0ustar dimadima% VL_IHASHSUM Accumulate integer labels into a hash table % [H,ID,NEXT] = VL_IHASHSUM(H,ID,NEXT,K,X) counts the number of % occurences of the columns of X, accumulating these to the hash % table represented by the tripled H,ID,NEXT. % % X is a D x N array of class UINT8 each row of which defines an D % dimensional label. Labels cannot be all zeros. % % H and NEXT are 1 x C arrays of class UINT32 and ID is a D x C % array of class UINT8. H is a vector of counts, ID stores, for each % element of H, the corresponding label, and NEXT is a vector of % indexes. % % Once constructed, the hash table can be searched by means of the % VL_IHASHFIND() function. % % The hash table uses double hashing [1] with an initial size equal % to K (so that C >= K). Given a label X, this is first hashed by % using the FNV algorithm [2] to one of K bucket. If this bucket is % free, it is assigned to label X and the count is incremented. If % the bucket is already assigned to the same label X, the count is % incremented. If the bucket is already assigned to a different % label, a second hash is used to scan (probe) the table for a free % bucket. % % If no free/matching bucket is found (because the hash table is % full) an overflow area containing extra buckets is used. This is % visited by reading off indexe from the NEXT vector, until a % matching bucket is found or the overflow area is enlarged. % % Example:: % The following example counts integer bi-dimensional label % occurences: % % K = 5 ; % h = zeros(1,K,'uint32') ; % id = zeros(2,K,'uint8'); % next = zeros(1,K,'uint32') ; % X = uint8([1 1 ; 1 2 ; 2 1 ; 1 1]') ; % [h,id,next] = vl_ihashsum(h,id,next,K,X) ; % % resulting in % % h = [1 0 1 2 0] % id = [1 0 2 1 0 % 2 0 1 1 0] % next = [0 0 0 0 0] % % For example, [1;2] has a count of 1 and [1;1] has a count of % 2. NEXT is zero because there have been no collisions. % % REFERENCES:: % [1] http://en.wikipedia.org/wiki/Double_hashing % [2] http://www.isthe.com/chongo/tech/comp/fnv % % See also: VL_IHASHFIND(). % Author: Andrea Vedaldi % Copyright (C) 2008-12 Andrea Vedaldi. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/misc/vl_version.c0000644000175000017500000000317012237004736015725 0ustar dimadima/** @file vl_version.c ** @brief vl_version MEX definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include "mexutils.h" #include #include /* option codes */ enum { opt_verbose } ; /* options */ vlmxOption options [] = { {"Verbose", 0, opt_verbose }, {0, 0, 0 } } ; void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { int verbose = 0 ; char buffer [1024] ; int unsigned const bufferSize = sizeof(buffer)/sizeof(buffer[0]) ; int opt ; int next = 0 ; mxArray const *optarg ; VL_USE_MATLAB_ENV ; if (nout > 1) { vlmxError(vlmxErrTooManyOutputArguments, NULL) ; } while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { switch (opt) { case opt_verbose : ++ verbose ; break ; default: abort() ; } } if (verbose) { int offset = 0 ; char * string = vl_configuration_to_string_copy() ; offset = vl_string_copy(buffer, bufferSize, string) ; snprintf(buffer + offset, bufferSize - offset, " SIMD enabled: %s\n", VL_YESNO(vl_get_simd_enabled())) ; if(string) vl_free(string) ; } else { snprintf(buffer, sizeof(buffer)/sizeof(buffer[0]), "%s", VL_VERSION_STRING) ; } if (nout == 0) { mexPrintf("%s\n", buffer) ; } else { out[0] = mxCreateString(buffer) ; } } vlfeat/toolbox/misc/vl_binsearch.m0000644000175000017500000000151312237004736016207 0ustar dimadima% VL_BINSEARCH Maps data to bins % IDX = VL_BINSEARCH(B, X) maps the elements of X to the bins % defined by B. B is a non-decreasing vector of M real numbers % defining bins [-inf, B(1)), [B(1), B(2)), ... [B(M) +inf] (note % that the last bin contains +inf). The bins are numbered from 0 to % M. X is a real (plain) array and IDX is an array with the same % dimensions of X, specifying the bin correpsonding to each element % of X. % % If B(1) = -inf the bin number 0 is removed and the bin number 1 is % [-inf B(2)). If B(M) = +inf, the last bin M is the singleton +inf. % % See also: VL_BINSUM(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/misc/vl_twister.c0000644000175000017500000001200212237004736015733 0ustar dimadima/** @internal ** @file vl_twister.c ** @brief vl_twister - MEX definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include /* driver */ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum { MANIP_STATE, RUN_GENERATOR } mode ; VlRand * rand ; VL_USE_MATLAB_ENV ; rand = vl_get_rand() ; /** ----------------------------------------------------------------- ** Check the arguments ** -------------------------------------------------------------- */ if (nout > 1) { vlmxError(vlmxErrTooManyInputArguments, NULL) ; } if (nin > 0 && ! mxIsNumeric(in[0])) { mode = MANIP_STATE ; } else { mode = RUN_GENERATOR ; } switch (mode) { case RUN_GENERATOR: { enum { maxNumDimensions = 30 } ; vl_size numDimensions = 2, n ; vl_uindex k ; mwSize dimensions [maxNumDimensions] = {1, 1} ; double * x ; if (nin > 1) { /* TWISTER(N1 N2 ...) style */ if (nin >= maxNumDimensions) { vlmxError(vlmxErrTooManyInputArguments, "Too many dimensions specified.") ; } for (k = 0 ; k < (unsigned)nin ; ++k) { if (! vlmxIsPlainScalar(in[k])) { vlmxError(vlmxErrInvalidArgument, "The %d-th argument is not a plain scalar.", k + 1) ; } if (mxGetScalar(in[k]) < 0) { vlmxError(vlmxErrInvalidArgument, "The %d-th argument is negative.", k + 1) ; } dimensions[k] = mxGetScalar(in[k]) ; } numDimensions = k ; } else if (nin == 1) { /* TWISTER([N1 N2 ...]) style */ if (! vlmxIsPlainVector(in[0], -1)) { vlmxError(vlmxErrInvalidArgument, "The argument is not a plain vector.") ; } x = mxGetPr(in[0]) ; n = mxGetNumberOfElements(in[0]) ; numDimensions = VL_MAX(2, n) ; if (numDimensions > maxNumDimensions) { vlmxError(vlmxErrInvalidArgument, "Too many dimensions specified.") ; } if (n == 1) { if (*x < 0) { vlmxError(vlmxErrInvalidArgument, "The specified dimension is negative.") ; } dimensions[0] = dimensions[1] = *x ; } else { for (k = 0 ; k < n ; ++k) { if (x[k] < 0) { vlmxError(vlmxErrInvalidArgument, "One of the specified dimensions is negative.") ; } dimensions[k] = x[k] ; } } } out[0] = mxCreateNumericArray (numDimensions, dimensions, mxDOUBLE_CLASS, mxREAL) ; n = mxGetNumberOfElements (out[0]) ; x = mxGetPr (out[0]) ; for (k = 0 ; k < n ; ++k) { x[k] = vl_rand_res53(rand) ; } } break ; case MANIP_STATE: { enum { buff_size = 32 } ; char buff [buff_size] ; /* check for 'state' string */ if (! vlmxIsString(in[0], -1) || mxGetString(in[0], buff, buff_size) || vl_string_casei_cmp ("state", buff) != 0 ) { vlmxError(vlmxErrInvalidArgument, NULL) ; } /* TWISTER('state') */ if (nin == 1) { vl_uindex i ; vl_uint32 * data ; out[0] = mxCreateNumericMatrix (625, 1, mxUINT32_CLASS, mxREAL) ; data = mxGetData(out[0]) ; for (i = 0 ; i < 624 ; ++i) data[i] = rand->mt[i] ; data[624] = (vl_uint32) rand->mti ; } else { if (vlmxIsPlainScalar(in[1])) { /* TWISTER('state', X) */ vl_uint32 x = (vl_uint32) mxGetScalar(in[1]) ; vl_rand_seed (rand, x) ; } else if (mxIsNumeric(in[1]) && mxGetClassID(in[1]) == mxUINT32_CLASS && mxGetNumberOfElements(in[1]) == 624+1 && ((vl_uint32 const*)mxGetData(in[1]))[624] <= 624 ) { /* TWISTER('state', STATE) */ vl_uindex i ; vl_uint32 * data = mxGetData(in[1]) ; for (i = 0 ; i < 624 ; ++i) rand->mt[i] = data[i] ; rand->mti = data [624] ; } else if (mxIsNumeric(in[1]) && mxGetClassID(in[1]) == mxDOUBLE_CLASS && mxGetNumberOfElements(in[1]) <= 624) { /* TWISTER('state', KEY) */ vl_uint32 key [624] ; double const * x = mxGetPr(in[1]) ; vl_size n = mxGetNumberOfElements(in[1]) ; vl_uindex k ; for (k = 0 ; k < n ; ++k) { key [k] = x [k] ; } vl_rand_seed_by_array (rand, key, n) ; } } } break ; default: abort() ; } } vlfeat/toolbox/misc/vl_ihashfind.c0000644000175000017500000001065112237004736016177 0ustar dimadima/** @internal ** @file ihashfind.c ** @author Andrea Vedaldi ** @brief BINSUM - MEX **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include /* hash function */ unsigned int fnv_hash (void const *key, int len) { unsigned char const *p = key; unsigned int h = 2166136261U ; int i; for ( i = 0; i < len; i++ ) h = ( h * 16777619 ) ^ p[i]; return h; } int is_null (vl_uint8 const * x, int n) { int i ; for (i = 0 ; i < n ; ++i) { if (x[i]) return 0 ; } return 1 ; } int is_equal (vl_uint8 const * x, vl_uint8 const * y, int n) { int i ; for (i = 0 ; i < n ; ++i) { if (x[i] != y[i]) return 0 ; } return 1 ; } void cpy (vl_uint8 * x, vl_uint8 const * y, int n) { int i ; for (i = 0 ; i < n ; ++i){ /* mexPrintf("cpy:%d %d\n",x[i],y[i]);*/ x[i] = y[i] ; } } /** @brief Driver. ** ** @param nount number of output arguments. ** @param out output arguments. ** @param nin number of input arguments. ** @param in input arguments. **/ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum { IN_ID, IN_NEXT, IN_K, IN_X } ; enum { OUT_SEL } ; vl_uint32 const * next ; vl_uint32 * sel ; vl_uint8 const * id ; vl_uint8 const * x ; unsigned int K, i, N, res, last, ndims ; /* ----------------------------------------------------------------- * Check arguments * -------------------------------------------------------------- */ if( nin != 4 ) { mexErrMsgTxt("Four arguments required") ; } else if (nout > 1) { mexErrMsgTxt("At most one output argument.") ; } if(! mxIsNumeric(in[IN_NEXT])|| mxGetClassID(in[IN_NEXT])!= mxUINT32_CLASS) { mexErrMsgTxt("NEXT must be UINT32.") ; } if(! mxIsNumeric(in[IN_X]) || mxGetClassID(in[IN_X])!= mxUINT8_CLASS) { mexErrMsgTxt("X must be UINT8") ; } if (mxGetM(in[IN_NEXT]) != 1) { mexErrMsgTxt("NEXT must be a row vector") ; } if(! mxIsNumeric(in[IN_ID]) || mxGetClassID(in[IN_ID])!= mxUINT8_CLASS) { mexErrMsgTxt("ID must be UINT8.") ; } ndims = mxGetM(in[IN_ID]) ; res = mxGetN(in[IN_ID]) ; if(res != mxGetN(in[IN_NEXT])) { mexErrMsgTxt("ID, NEXT must have the same number of columns") ; } if(ndims != mxGetM(in[IN_X])) { mexErrMsgTxt("ID and X must havethe same number of rows") ; } if(! vlmxIsPlainScalar(in[IN_K])) { mexErrMsgTxt("K must be a scalar") ; } K = (unsigned int) *mxGetPr(in[IN_K]) ; N = mxGetN(in[IN_X]) ; id = mxGetData(in[IN_ID]) ; next = mxGetData(in[IN_NEXT]) ; x = mxGetData(in[IN_X]) ; out[OUT_SEL] = mxCreateNumericMatrix (1, N, mxUINT32_CLASS, mxREAL) ; sel = mxGetData (out[OUT_SEL]) ; /* search for last occupied slot */ last = res ; for (i = 0 ; i < res ; ++i) last = VL_MAX(last, next [i]) ; /* REMARK: last and next are 1 based */ if (K > res) { mexErrMsgTxt("K cannot be larger then the size of H") ; } if (last > res) { mexErrMsgTxt("An element of NEXT is greater than the size of the table") ; } /* ----------------------------------------------------------------- * Do job * -------------------------------------------------------------- */ for (i = 0 ; i < N ; ++i) { /* hash */ unsigned int h1, h2 ; unsigned int j, p = 0 ; if (is_null (x + i * ndims, ndims)) { *sel++ = 0 ; continue ; } h1 = fnv_hash(x + i * ndims, ndims) % K ; h2 = h1 | 0x1 ; /* this needs to be odd */ /* search first free or matching position */ p = h1 % K ; for (j = 0 ; j < K ; ++j) { if (is_null (id + p * ndims, ndims) || is_equal(id + p * ndims, x + i * ndims, ndims)) break ; h1 += h2 ; p = h1 % K ; } /* handle extended table */ while (! is_null (id + p * ndims, ndims) && ! is_equal(id + p * ndims, x + i * ndims, ndims)) { if (next[p] == 0) break ; p = next [p] - 1 ; } /* found or not ? */ if (is_equal(id + p * ndims, x + i * ndims, ndims)) { /* found */ *sel++ = p + 1 ; } else { /* not found */ *sel++ = 0 ; } } /* next guy to search for */ } vlfeat/toolbox/misc/vl_threads.c0000644000175000017500000000174312237004745015676 0ustar dimadima/** @file vl_threads.c ** @brief vl_threads MEX definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2013 Andrea Vedaldi All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include "mexutils.h" void mexFunction(int nout VL_UNUSED, mxArray *out[], int nin, const mxArray *in[]) { enum {IN_NUM = 0} ; enum {OUT_NUM = 0} ; vl_size numThreads ; numThreads = vl_get_max_threads() ; if (nout > 1) { vlmxError(vlmxErrInvalidArgument, "More than one ouptut argumnets requested.") ; } if (nin > 1) { vlmxError(vlmxErrInvalidArgument, "More than one input argument specified.") ; } OUT(NUM) = vlmxCreatePlainScalar (numThreads) ; if (nin == 0) { return ; } if (!vlmxIsScalar(IN(NUM))) { vlmxError(vlmxErrInvalidArgument, "NUM is not a scalar.") ; } numThreads = (vl_size) mxGetScalar(IN(NUM)) ; vl_set_num_threads (numThreads) ; } vlfeat/toolbox/misc/vl_ihashfind.m0000644000175000017500000000102012237004745016177 0ustar dimadima% VL_IHASHFIND Find labels in an integer hash table % SEL = VL_IHASHFIND(ID, NEXT, K, X) returns a vector SEL of the % entires in the hash table ID,NEXT,K corresponding to the labels % stored as columns of X. % % The format is the same as for the functino VL_IHASHSUM(). % % See also: VL_IHASHSUM(). % Author: Andrea Vedaldi % Copyright (C) 2008-12 Andrea Vedaldi. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/misc/vl_binsearch.c0000644000175000017500000000364712237004736016207 0ustar dimadima/** @internal ** @file vl_binsearch.c ** @brief vl_binsearch - MEX definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum { IN_B=0, IN_X, IN_END } ; enum { OUT_IDX=0 } ; vl_size numElementsX, numElementsB ; const double *X, *B ; double *IDX ; if (nout > 1) { vlmxError(vlmxErrTooManyOutputArguments, NULL) ; } if (nin != 2) { vlmxError(vlmxErrInvalidArgument, "Incorrect number of arguments.") ; } if (! vlmxIsPlain (IN(B)) || ! vlmxIsPlain (IN(X)) ) { vlmxError(vlmxErrInvalidArgument, "All arguments must be plain arrays.") ; } numElementsX = mxGetNumberOfElements(IN(X)) ; numElementsB = mxGetNumberOfElements(IN(B)) ; { mwSize const * dimensions = mxGetDimensions(IN(X)) ; vl_size numDimensions = mxGetNumberOfDimensions(IN(X)) ; OUT(IDX) = mxCreateNumericArray (numDimensions, dimensions, mxDOUBLE_CLASS, mxREAL) ; } /* if B is empty it defines only [-inf, +inf) */ if (numElementsB == 0) return ; IDX = mxGetPr(OUT(IDX)) ; X = mxGetPr(IN(X)) ; B = mxGetPr(IN(B)) ; { vl_uindex i ; for (i = 0 ; i < numElementsX ; ++i) { double x = X[i] ; vl_uindex blower = 0 ; vl_uindex bupper = numElementsB - 1 ; vl_uindex bsplit ; if (x < B[0]) { IDX [i] = 0 ; continue ; } if (x >= B[numElementsB - 1]) { IDX [i] = numElementsB ; continue ; } while (blower + 1 < bupper) { bsplit = (bupper + blower) / 2 ; if (x < B[bsplit]) bupper = bsplit ; else blower = bsplit ; } IDX [i] = blower + 1 ; } } } vlfeat/toolbox/misc/vl_version.m0000644000175000017500000000073612237004736015744 0ustar dimadima% VL_VERSION Obtain VLFeat version information % VL_VERSION() prints VLFeat version number. VL_VERSION('VERBOSE') % prints additional information. % % STR = VL_VERSION(...) returns the ouptut in a string rather than % printing it. % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/misc/vl_simdctrl.m0000644000175000017500000000074012237004736016073 0ustar dimadima% VL_SIMDCTRL Toggle VLFeat SIMD optimizations % VL_SIMDCTRL() returns TRUE if VLFeat SIMD optimizations are enabled % and FALSE otherwise. % % VL_SIMDCTRL(TRUE) enables VLFeat SIMD optimizations. VL_SIMDCTRL(FALSE) % disables them. % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/misc/vl_isoctave.m0000644000175000017500000000043212237004745016065 0ustar dimadimafunction x = vl_isoctave() % VL_ISOCTAVE Determines whether Octave is running % X = VL_ISOCTAVE() returns TRUE if the script is running in the % Octave environment (instead of MATLAB). persistent y ; if isempty(y) y = exist('OCTAVE_VERSION','builtin') ~= 0 ; end x = y ; vlfeat/toolbox/misc/vl_pegasos.m0000644000175000017500000000542512237004745015720 0ustar dimadima% VL_PEGASOS [deprecated] % VL_PEGASOS is deprecated. Please use VL_SVMTRAIN() instead. function [w b info] = vl_pegasos(X,Y,LAMBDA, varargin) % Verbose not supported if (sum(strcmpi('Verbose',varargin))) varargin(find(strcmpi('Verbose',varargin),1))=[]; fprintf('Option VERBOSE is no longer supported.\n'); end % DiagnosticCallRef not supported if (sum(strcmpi('DiagnosticCallRef',varargin))) varargin(find(strcmpi('DiagnosticCallRef',varargin),1)+1)=[]; varargin(find(strcmpi('DiagnosticCallRef',varargin),1))=[]; fprintf('Option DIAGNOSTICCALLREF is no longer supported.\n Please follow the VLFeat tutorial on SVMs for more information on diagnostics\n'); end % different default value for MaxIterations if (sum(strcmpi('MaxIterations',varargin)) == 0) varargin{end+1} = 'MaxIterations'; varargin{end+1} = ceil(10/LAMBDA); end % different default value for BiasMultiplier if (sum(strcmpi('BiasMultiplier',varargin)) == 0) varargin{end+1} = 'BiasMultiplier'; varargin{end+1} = 0; end % parameters for vl_maketrainingset setvarargin = {}; if (sum(strcmpi('HOMKERMAP',varargin))) setvarargin{end+1} = 'HOMKERMAP'; setvarargin{end+1} = varargin{find(strcmpi('HOMKERMAP',varargin),1)+1}; varargin(find(strcmpi('HOMKERMAP',varargin),1)+1)=[]; varargin(find(strcmpi('HOMKERMAP',varargin),1))=[]; end if (sum(strcmpi('KChi2',varargin))) setvarargin{end+1} = 'KChi2'; varargin(find(strcmpi('KChi2',varargin),1))=[]; end if (sum(strcmpi('KINTERS',varargin))) setvarargin{end+1} = 'KINTERS'; varargin(find(strcmpi('KINTERS',varargin),1))=[]; end if (sum(strcmpi('KL1',varargin))) setvarargin{end+1} = 'KL1'; varargin(find(strcmpi('KL1',varargin),1))=[]; end if (sum(strcmpi('KJS',varargin))) setvarargin{end+1} = 'KJS'; varargin(find(strcmpi('KJS',varargin),1))=[]; end if (sum(strcmpi('Period',varargin))) setvarargin{end+1} = 'Period'; setvarargin{end+1} = varargin{find(strcmpi('Period',varargin),1)+1}; varargin(find(strcmpi('Period',varargin),1)+1)=[]; varargin(find(strcmpi('Period',varargin),1))=[]; end if (sum(strcmpi('Window',varargin))) setvarargin{end+1} = 'Window'; setvarargin{end+1} = varargin{find(strcmpi('Window',varargin),1)+1}; varargin(find(strcmpi('Window',varargin),1)+1)=[]; varargin(find(strcmpi('Window',varargin),1))=[]; end if (sum(strcmpi('Gamma',varargin))) setvarargin{end+1} = 'Gamma'; setvarargin{end+1} = varargin{find(strcmpi('Gamma',varargin),1)+1}; varargin(find(strcmpi('Gamma',varargin),1)+1)=[]; varargin(find(strcmpi('Gamma',varargin),1))=[]; end setvarargin{:} DATA = vl_maketrainingset(double(X),int8(Y),setvarargin{:}); DATA [w b info] = vl_svmtrain(DATA,LAMBDA,varargin{:}); fprintf('\n vl_pegasos is DEPRECATED. Please use vl_svmtrain instead. \n\n'); end vlfeat/toolbox/plotop/0000755000175000017500000000000012237004745013754 5ustar dimadimavlfeat/toolbox/plotop/vl_plotframe.m0000644000175000017500000001046512237004745016632 0ustar dimadimafunction h = vl_plotframe(frames,varargin) % VL_PLOTFRAME Plot feature frame % VL_PLOTFRAME(FRAME) plots the frames FRAME. Frames are attributed % image regions (as, for example, extracted by a feature detector). A % frame is a vector of D=2,3,..,6 real numbers, depending on its % class. VL_PLOTFRAME() supports the following classes: % % Point:: % FRAME(1:2) are the x,y coordinates of the point % % Circle:: % FRAME(1:2) are the x,y coordinates of the center. FRAME(3) % is the circle radius.. % % Oriented circle:: % FRAME(1:2) are the x,y coordiantes of the center. FRAME(3) is the % radius. FRAME(4) is the orientation, expressed as a ppsitive % rotation (note that images use a left-handed system with the Y % axis pointing downwards). % % Ellipse:: % FRAME(1:2) are the x,y coordiantes of the center. FRAME(3:5) are % the element S11, S12, S22 of a 2x2 covariance matrix S (a positive % semidefinite matrix) defining the ellipse shape. The ellipse % is the set of points {x + T: x' inv(S) x = 1}, where T is the center. % % Oriented ellipse:: % FRAME(1:2) are the x,y coordiantes of the center. FRAME(3:6) is % the column-wise stacking of a 2x2 matrix A defining the ellipse % shape and orientation. The ellipse is obtaine by transforming % a unit circle by A as the set of points {A x + T : |x| = 1}, where % T is the center. % % All frames can be thought of as an affine transformation of the unit circle. % For unoriented frames, the affine transformation is selected so that % the positive Y direction (downwards, graviy vector) is preserved. % % H = VL_PLOTFRAME(...) returns the handle H of the graphical object % representing the frames. % % VL_PLOTFRAME(FRAMES) for a matrix of FRAMES plots multiple frames. % Using this call is much faster than calling VL_PLOTFRAME() for each frame. % % VL_PLOTFRAME(FRAMES,...) passes any extra argument to the % underlying plot function. The first optional argument can be a line % specification string such as the one used by PLOT(). % % See also: VL_FRAME2OELL(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). % number of vertices drawn for each frame np = 40 ; lineprop = {} ; if length(varargin) > 0 lineprop = vl_linespec2prop(varargin{1}) ; lineprop = {lineprop{:}, varargin{2:end}} ; end % -------------------------------------------------------------------- % Handle various frame classes % -------------------------------------------------------------------- % if just a vector, make sure it is column if(min(size(frames))==1) frames = frames(:) ; end [D,K] = size(frames) ; zero_dimensional = D==2 ; % just points? if zero_dimensional h = plot(frames(1,:),frames(2,:),'g.',lineprop{:}) ; return ; end % reduce all other cases to ellipses/oriented ellipses frames = vl_frame2oell(frames) ; do_arrows = (D==4 || D==6) ; % -------------------------------------------------------------------- % Draw % -------------------------------------------------------------------- K = size(frames,2) ; thr = linspace(0,2*pi,np) ; % allx and ally are nan separated lists of the vertices describing the % boundary of the frames allx = nan*ones(1, np*K+(K-1)) ; ally = nan*ones(1, np*K+(K-1)) ; if do_arrows % allxf and allyf are nan separated lists of the vertices of the allxf = nan*ones(1, 3*K) ; allyf = nan*ones(1, 3*K) ; end % vertices around a unit circle Xp = [cos(thr) ; sin(thr) ;] ; for k=1:K % frame center xc = frames(1,k) ; yc = frames(2,k) ; % frame matrix A = reshape(frames(3:6,k),2,2) ; % vertices along the boundary X = A * Xp ; X(1,:) = X(1,:) + xc ; X(2,:) = X(2,:) + yc ; % store allx((k-1)*(np+1) + (1:np)) = X(1,:) ; ally((k-1)*(np+1) + (1:np)) = X(2,:) ; if do_arrows allxf((k-1)*3 + (1:2)) = xc + [0 A(1,2)] ; allyf((k-1)*3 + (1:2)) = yc + [0 A(2,2)] ; end end if do_arrows h = line([allx nan allxf], ... [ally nan allyf], ... 'Color','g','LineWidth',3, ... lineprop{:}) ; else h = line(allx, ally, ... 'Color','g','LineWidth',3, ... lineprop{:}) ; end vlfeat/toolbox/plotop/vl_printsize.m0000644000175000017500000001046412237004745016667 0ustar dimadimafunction vl_printsize(varargin) % VL_PRINTSIZE Set the printing size of a figure % VL_PRINTSIZE(R) adjusts the PaperPosition property of the current % figure to make the figure paper width equal to R times the width % of a 'uslsetter' page, while preserving the aspect ratio of the % figure. Then, it sets the PaperSize property to match tightly the % size of the figure. % % VL_PRINTSIZE(FIG,R) operates on the specified figure FIG. The % function accepts the following optional arguments: % % Aspect:: [] % Change the figure aspect ratio (width/height) to the specified % value. % % Reference:: 'horizontal' % If set to 'horizontal', VL_PRINTSIZE(R) makes the width of the % figure equal to a fraction R of the width of the page. If set to % 'vertical', the height is used instead. % % PaperType:: 'usletter' % Set the type of the reference page to the specified type. Any of % the paper types supported by MATLAB can be used (see % PRINT()). % % Margin:: 0 % If greater than zero, VL_PRINTSIZE(R) leaves the specified % margin around the figure rather than fitting the paper size % tightly around it. The margin is expressed as a fraction of the % figure paper width (or height if Reference is set to % 'vertical'). % % PRINTING FIGURES IN MATLAB % % The standard procedure to include a MATLAB figure in a publication % consists in printing the figure to an EPS or PDF file (by using % the PRINT() function) and then rescaling it to the desired size in % the publication. PDF printing has the additional inconvenience % that large white margins are generated, and requires cropping the % figure too. % % Unfortunately, rescalign a figure in this manner has the usually % unwanted effect of rescaling elements of the graphics such as font % sizes and line thicknesses. For example, a font which is 12pt in % the original MATLAB figure may become too large or too small after % rescaling. % % The `proper' way of printing a figure is to specify its desired % size on paper before calling the PRINT() function. VL_PRINTSIZE() % helps doing so. % % Margins are an additional nuances. When printing to certain % formats such as PDF, MATLAB prints in fact entire page (e.g. a % whole US Letter sheet), resulting in wide white margin all around % the figure. VL_PRINTSIZE() alleviates this problem by setting the % paper size to match the figure size tightly. This does not % eliminate margins completely, especially if the figure has % multiple subplots, but it is certainly a large improvement. % % See also: VL_HELP(). % Author: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % Copyright (C) 2013 Andrea Vedaldi. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if length(varargin) >= 2 && isnumeric(varargin{2}) % called with two numeric arguments fig = varargin{1} ; varargin(1) = [] ; else fig = gcf ; end sizeRatio = varargin{1} ; varargin(1) = [] ; opts.aspectRatio = NaN ; opts.reference = 'horizontal' ; opts.paperType = 'usletter' ; opts.margin = 0 ; opts = vl_argparse(opts, varargin) ; opts.reference = lower(opts.reference) ; if ~ismember(opts.reference, {'horizontal', 'vertical'}) error('Invalid value ''%s'' for the REFERENCE option', opts.reference) ; end % set the paper size to the reference type set(fig, 'PaperType', opts.paperType) ; paperSize = get(fig, 'PaperSize') ; % get the current figure position to compute the current aspect ratio position = get(fig, 'PaperPosition') ; % if not specified, compute current aspect ratio if isnan(opts.aspectRatio) opts.aspectRatio = position(3) / position(4) ; end % resize the figure switch opts.reference case 'horizontal' s = paperSize(1) / position(3) * sizeRatio ; case 'vertical' s = paperSize(2) / position(4) * sizeRatio ; end position(3:4) = position(3) * s * [1 1/opts.aspectRatio] ; % add margin switch opts.reference case 'horizontal' position(1) = position(3) * opts.margin ; position(2) = position(3) * opts.margin ; case 'vertical' position(1) = position(4) * opts.margin ; position(2) = position(4) * opts.margin ; end set(fig, 'PaperPosition', position, ... 'PaperSize', 2 * position(1:2) + position(3:4)) ; end vlfeat/toolbox/plotop/vl_figaspect.m0000644000175000017500000000141512237004736016601 0ustar dimadimafunction vl_figaspect(a) % VL_FIGASPECT Set figure aspect ratio % VL_FIGASPECT(A) sets the current figure aspect ratio to A. It % leaves the length of the shortest side unaltered. Both the % screen and paper positions are affected. % % See also: VL_PRINTSIZE(), VL_HELP(). % Authors: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). pos = get(gcf, 'Position') ; if a >= 1 pos(3) = a * pos(4) ; else pos(4) = pos(3) / a ; end set(gcf,'Position',pos) ; pos = get(gcf, 'PaperPosition') ; if a >= 1 pos(3) = a * pos(4) ; else pos(4) = pos(3) / a ; end set(gcf,'PaperPosition', pos) ; vlfeat/toolbox/plotop/vl_roc.m0000644000175000017500000002105312237004745015417 0ustar dimadimafunction [tpr,tnr,info] = vl_roc(labels, scores, varargin) %VL_ROC ROC curve. % [TPR,TNR] = VL_ROC(LABELS, SCORES) computes the Receiver Operating % Characteristic (ROC) curve. LABELS are the ground truth labels, % greather than zero for a positive sample and smaller than zero for % a negative one. SCORES are the scores of the samples obtained from % a classifier, where lager scores should correspond to positive % labels. % % Samples are ranked by decreasing scores, starting from rank 1. % TPR(K) and TNR(K) are the true positive and true negative rates % when samples of rank smaller or equal to K-1 are predicted to be % positive. So for example TPR(3) is the true positive rate when the % two samples with largest score are predicted to be % positive. Similarly, TPR(1) is the true positive rate when no % samples are predicted to be positive, i.e. the constant 0. % % Set the zero the lables of samples that should be ignored in the % evaluation. Set to -INF the scores of samples which are not % retrieved. If there are samples with -INF score, then the ROC curve % may have maximum TPR and TNR smaller than 1. % % [TPR,TNR,INFO] = VL_ROC(...) returns an additional structure INFO % with the following fields: % % info.auc:: Area under the ROC curve (AUC). % The ROC curve has a `staircase shape' because for each sample % only TP or TN changes, but not both at the same time. Therefore % there is no approximation involved in the computation of the % area. % % info.eer:: Equal error rate (EER). % The equal error rate is the value of FPR (or FNR) when the ROC % curves intersects the line connecting (0,0) to (1,1). % % VL_ROC(...) with no output arguments plots the ROC curve in the % current axis. % % VL_ROC() acccepts the following options: % % Plot:: [] % Setting this option turns on plotting unconditionally. The % following plot variants are supported: % % tntp:: Plot TPR against TNR (standard ROC plot). % tptn:: Plot TNR against TPR (recall on the horizontal axis). % fptp:: Plot TPR against FPR. % fpfn:: Plot FNR against FPR (similar to DET curve). % % NumPositives:: [] % NumNegatives:: [] % If set to a number, pretend that LABELS contains this may % positive/negative labels. NUMPOSITIVES/NUMNEGATIVES cannot be % smaller than the actual number of positive/negative entrires in % LABELS. The additional positive/negative labels are appended to % the end of the sequence, as if they had -INF scores (not % retrieved). This is useful to evaluate large retrieval systems in % which one stores ony a handful of top results for efficiency % reasons. % % About the ROC curve:: % Consider a classifier that predicts as positive all samples whose % score is not smaller than a threshold S. The ROC curve represents % the performance of such classifier as the threshold S is % changed. Formally, define % % P = overall num. of positive samples, % N = overall num. of negative samples, % % and for each threshold S % % TP(S) = num. of samples that are correctly classified as positive, % TN(S) = num. of samples that are correctly classified as negative, % FP(S) = num. of samples that are incorrectly classified as positive, % FN(S) = num. of samples that are incorrectly classified as negative. % % Consider also the rates: % % TPR = TP(S) / P, FNR = FN(S) / P, % TNR = TN(S) / N, FPR = FP(S) / N, % % and notice that by definition % % P = TP(S) + FN(S) , N = TN(S) + FP(S), % 1 = TPR(S) + FNR(S), 1 = TNR(S) + FPR(S). % % The ROC curve is the parametric curve (TPR(S), TNR(S)) obtained % as the classifier threshold S is varied in the reals. The TPR is % also known as recall (see VL_PR()). % % The ROC curve is contained in the square with vertices (0,0) The % (average) ROC curve of a random classifier is a line which % connects (1,0) and (0,1). % % The ROC curve is independent of the prior probability of the % labels (i.e. of P/(P+N) and N/(P+N)). % % REFERENCES: % [1] http://en.wikipedia.org/wiki/Receiver_operating_characteristic % % See also: VL_PR(), VL_DET(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). [tp, fp, p, n, perm, varargin] = vl_tpfp(labels, scores, varargin{:}) ; opts.plot = [] ; opts.stable = false ; opts = vl_argparse(opts,varargin) ; % compute the rates small = 1e-10 ; tpr = tp / max(p, small) ; fpr = fp / max(n, small) ; fnr = 1 - tpr ; tnr = 1 - fpr ; % -------------------------------------------------------------------- % Additional info % -------------------------------------------------------------------- if nargout > 2 || nargout == 0 % Area under the curve. Since the curve is a staircase (in the % sense that for each sample either tn is decremented by one % or tp is incremented by one but the other remains fixed), % the integral is particularly simple and exact. info.auc = sum(tnr .* diff([0 tpr])) ; % Equal error rate. One must find the index S for which there is a % crossing between TNR(S) and TPR(s). If such a crossing exists, % there are two cases: % % o tnr o % / \ % 1-eer = tnr o-x-o 1-eer = tpr o-x-o % / \ % tpr o o % % Moreover, if the maximum TPR is smaller than 1, then it is % possible that neither of the two cases realizes (then EER=NaN). s = max(find(tnr > tpr)) ; if s == length(tpr) info.eer = NaN ; else if tpr(s) == tpr(s+1) info.eer = 1 - tpr(s) ; else info.eer = 1 - tnr(s) ; end end end % -------------------------------------------------------------------- % Plot % -------------------------------------------------------------------- if ~isempty(opts.plot) || nargout == 0 if isempty(opts.plot), opts.plot = 'fptp' ; end cla ; hold on ; switch lower(opts.plot) case {'truenegatives', 'tn', 'tntp'} hroc = plot(tnr, tpr, 'b', 'linewidth', 2) ; hrand = spline([0 1], [1 0], 'r--', 'linewidth', 2) ; spline([0 1], [0 1], 'k--', 'linewidth', 1) ; plot(1-info.eer, 1-info.eer, 'k*', 'linewidth', 1) ; xlabel('true negative rate') ; ylabel('true positive rate (recall)') ; loc = 'sw' ; case {'falsepositives', 'fp', 'fptp'} hroc = plot(fpr, tpr, 'b', 'linewidth', 2) ; hrand = spline([0 1], [0 1], 'r--', 'linewidth', 2) ; spline([1 0], [0 1], 'k--', 'linewidth', 1) ; plot(info.eer, 1-info.eer, 'k*', 'linewidth', 1) ; xlabel('false positive rate') ; ylabel('true positive rate (recall)') ; loc = 'se' ; case {'tptn'} hroc = plot(tpr, tnr, 'b', 'linewidth', 2) ; hrand = spline([0 1], [1 0], 'r--', 'linewidth', 2) ; spline([0 1], [0 1], 'k--', 'linewidth', 1) ; plot(1-info.eer, 1-info.eer, 'k*', 'linewidth', 1) ; xlabel('true positive rate (recall)') ; ylabel('false positive rate') ; loc = 'sw' ; case {'fpfn'} hroc = plot(fpr, fnr, 'b', 'linewidth', 2) ; hrand = spline([0 1], [1 0], 'r--', 'linewidth', 2) ; spline([0 1], [0 1], 'k--', 'linewidth', 1) ; plot(info.eer, info.eer, 'k*', 'linewidth', 1) ; xlabel('false positive (false alarm) rate') ; ylabel('false negative (miss) rate') ; loc = 'ne' ; otherwise error('''%s'' is not a valid PLOT type.', opts.plot); end grid on ; xlim([0 1]) ; ylim([0 1]) ; axis square ; title(sprintf('ROC (AUC: %.2f%%, EER: %.2f%%)', info.auc * 100, info.eer * 100), ... 'interpreter', 'none') ; legend([hroc hrand], 'ROC', 'ROC rand.', 'location', loc) ; end % -------------------------------------------------------------------- % Stable output % -------------------------------------------------------------------- if opts.stable tpr(1) = [] ; tnr(1) = [] ; tpr_ = tpr ; tnr_ = tnr ; tpr = NaN(size(tpr)) ; tnr = NaN(size(tnr)) ; tpr(perm) = tpr_ ; tnr(perm) = tnr_ ; end % -------------------------------------------------------------------- function h = spline(x,y,spec,varargin) % -------------------------------------------------------------------- prop = vl_linespec2prop(spec) ; h = line(x,y,prop{:},varargin{:}) ; vlfeat/toolbox/plotop/vl_det.m0000644000175000017500000000332612237004736015413 0ustar dimadimafunction [missRate, falseAlarm] = vl_det(labels, scores, varargin) % VL_DET Compute DET curve % [MISSRATE, FALSEALRAM] = VL_DET(LABELS, SCORES) computes the % Detection Error Trade-off (DET) curve for the given set LABELS and % SCORES. The function is a simple wrapper to VL_ROC(LABELS, % SCORES). In fact, MISSRATE is simply the false positive rate and % FALSEARALM the false negative rate returned by VL_ROC(). % % VL_DET(...) without output arguments plots the curves in the % current axis. Note that the DET curves use logarithmic axis. % % VL_DET(..., OPT, ARG, ...) accepts the same options as VL_ROC(). % % REFERENCES: % [1] A. Martin, G. Doddington, T. Kamm, M. Ordowski, and % M. Przybocki. The DET curve in assessment of detection task % performance. In Proc. Conf. on Speech Communication and Technology, % 1997. [tp,tn] = vl_roc(labels, scores, varargin{:}) ; missRate = 1 - tp ; falseAlarm = 1 - tn ; if nargout == 0 cla ; loglog(falseAlarm,missRate,'linewidth',2) ; grid on ; axis square ; xlabel('false alaram (false positive) rate') ; ylabel('miss (false negative) rate') ; title('DET') ; end % %conf = vl_argparse(conf, varargin{:}) ; % for i = 1:2:length(varargin) % opt = varargin{i} ; % val = varargin{i+1} ; % switch lower(opt) % case 'numnegatives' % N = val ; % otherwise % error('Unknown option %s', opt) ; % end % end % P = sum(labels > 0) ; % if ~exist('N'), N = sum(labels < 0) ; end % if N < sum(labels < 0), warning('NumNegatives < number of provided negatives') ; end % N_=N-sum(labels<0) ; % [scores, perm] = sort(scores) ; % disp(sum(labels<0)/N) % tp = [0 cumsum(labels(fliplr(perm)) > 0)/P 1] ; % tn = [1 (fliplr(cumsum(labels(perm) < 0))+N_)/N 0] ; vlfeat/toolbox/plotop/vl_clickpoint.m0000644000175000017500000000371712237004736017002 0ustar dimadimafunction sel = vl_clickpoint(V,N,varargin) % VL_CLICKPOINT Select a point by clicking % SEL = VL_CLICKPOINT(V) let the user vl_click a point in the current % figure and returns the index v of the closest point (in Euclidean % norm) in the collection V. The 2xK matrix V has a a column for % each point. % % The user can abort the operation by pressing any key. In this case % the function returns the empty matrix. % % VL_CLICKPOINT(V,N) selects N points in a row. The user can stop the % selection at any time by pressing any key. In this case the % partial selection is returned. This can be used in combination % with N=inf to get an arbitrary number of points. % % VL_CLICKPOINT() accepts the following options: % % PlotMarker:: [0] % Put a marker as points are selected. The markers are deleted on % exiting the function. % % See also: VL_CLICK(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). plot_marker = 0 ; for k=1:2:length(varargin) switch lower(varargin{k}) case 'plotmarker' plot_marker = varargin{k+1} ; otherwise error(['Uknown option ''', varargin{k}, '''.']) ; end end if nargin < 2 N=1; end if size(V,1) ~= 2 error('Array V should be 2xK') ; end % -------------------------------------------------------------------- % Do job % -------------------------------------------------------------------- fig = gcf ; is_hold = ishold(fig) ; hold on ; sel = [] ; h = [] ; for n=1:N P=vl_click ; if ~isempty( P ) d = (V(1,:)-P(1)).^2 + (V(2,:)-P(2)).^2; [drop,v]=min(d(:)) ; if(plot_marker) h=[h plot(V(1,v),V(2,v),'go')] ; end sel = [sel v] ; else return ; end end if ~is_hold hold off ; end if( plot_marker ) pause(.1); delete(h) ; end vlfeat/toolbox/plotop/vl_plotgrid.m0000644000175000017500000000127312237004736016462 0ustar dimadimafunction h=vl_plotgrid(x,y,varargin) % VL_PLOTGRID Plot a 2-D grid % VL_PLOTGRID(X,Y) plots a grid with vertices (X,Y). X and Y are MxN % matrices, with one entry per vertex. % % H=VL_PLOTGRID(...) returns the handle to the grid object. % % See also: VL_HELP(). washold = ishold ; [M,N] = size(x) ; hold on ; xh = [x' ; nan*ones(1,M) ] ; yh = [y' ; nan*ones(1,M) ] ; xh = xh(:) ; yh = yh(:) ; xv = [x ; nan*ones(1,N) ] ; yv = [y ; nan*ones(1,N) ] ; xv = xv(:) ; yv = yv(:) ; lineprop = {} ; if length(varargin) > 0 lineprop = vl_linespec2prop(varargin{1}) ; lineprop = {lineprop{:}, varargin{2:end}} ; end h = line([xh' xv'], [yh' yv'],lineprop{:}) ; if ~washold hold off ; end vlfeat/toolbox/plotop/vl_linespec2prop.m0000644000175000017500000000230512237004745017420 0ustar dimadimafunction prop=vl_linespec2prop(spec) % VL_LINESPEC2PROP Convert PLOT style line specs to line properties % PROPR = VL_LINESPEC2PROP(SPEC) converts the string SPEC to a cell % array of properties PROPR. SPEC is in the format of PLOT(). % % If SPEC is not a line spec, the string SPEC is returned unaltered % as the only element of the cell array PROPR. % % See also: VL_PLOTFRAME(), PLOT(), VL_HELP(). % Authors: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % Copyright (C) 2013 Andrea Vedaldi % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). prop = {} ; if ~ ischar(spec) error('SPEC must be a string') ; end spec_ = spec ; switch spec(1:min(numel(spec),1)) case {'b' 'g' 'r' 'c' 'm' 'y' 'k' 'w'} prop = {prop{:}, 'Color', spec(1)} ; spec(1) = [] ; end switch spec(1:min(numel(spec),1)) case {'.' 'o' 'x' '+' '*' 's' 'd' 'v' '^' '<' '>' 'p' 'h'} prop = {prop{:}, 'Marker', spec(1)} ; spec(1) = [] ; end if isempty(spec) return ; end switch spec case {'-' ':' '-.' '--'} prop = {prop{:}, 'LineStyle', spec} ; otherwise prop = {spec_} ; end vlfeat/toolbox/plotop/vl_pr.m0000644000175000017500000002165712237004745015267 0ustar dimadimafunction [recall, precision, info] = vl_pr(labels, scores, varargin) %VL_PR Precision-recall curve. % [RECALL, PRECISION] = VL_PR(LABELS, SCORES) computes the % precision-recall (PR) curve. LABELS are the ground truth labels, % greather than zero for a positive sample and smaller than zero for % a negative one. SCORES are the scores of the samples obtained from % a classifier, where lager scores should correspond to positive % samples. % % Samples are ranked by decreasing scores, starting from rank 1. % PRECISION(K) and RECALL(K) are the precison and recall when % samples of rank smaller or equal to K-1 are predicted to be % positive and the remaining to be negative. So for example % PRECISION(3) is the percentage of positive samples among the two % samples with largest score. PRECISION(1) is the precision when no % samples are predicted to be positive and is conventionally set to % the value 1. % % Set to zero the lables of samples that should be ignored in the % evaluation. Set to -INF the scores of samples which are not % retrieved. If there are samples with -INF score, then the PR curve % may have maximum recall smaller than 1, unless the INCLUDEINF % option is used (see below). The options NUMNEGATIVES and % NUMPOSITIVES can be used to add additional surrogate samples with % -INF score (see below). % % [RECALL, PRECISION, INFO] = VL_PR(...) returns an additional % structure INFO with the following fields: % % info.auc:: % The area under the precision-recall curve. If the INTERPOLATE % option is set to FALSE, then trapezoidal interpolation is used % to integrate the PR curve. If the INTERPOLATE option is set to % TRUE, then the curve is piecewise constant and no other % approximation is introduced in the calculation of the area. In % the latter case, INFO.AUC is the same as INFO.AP. % % info.ap:: % Average precision as defined by TREC. This is the average of the % precision observed each time a new positive sample is % recalled. In this calculation, any sample with -INF score % (unless INCLUDEINF is used) and any additional positive induced % by NUMPOSITIVES has precision equal to zero. If the INTERPOLATE % option is set to true, the AP is computed from the interpolated % precision and the result is the same as INFO.AUC. Note that AP % as defined by TREC normally does not use interpolation [1]. % % info.ap_interp_11:: % 11-points interpolated average precision as defined by TREC. % This is the average of the maximum precision for recall levels % greather than 0.0, 0.1, 0.2, ..., 1.0. This measure was used in % the PASCAL VOC challenge up to the 2008 edition. % % info.auc_pa08:: % Deprecated. It is the same of INFO.AP_INTERP_11. % % VL_PR(...) with no output arguments plots the PR curve in the % current axis. % % VL_PR() accepts the following options: % % Interpolate:: false % If set to true, use interpolated precision. The interpolated % precision is defined as the maximum precision for a given recall % level and onwards. Here it is implemented as the culumative % maximum from low to high scores of the precision. % % NumPositives:: [] % NumNegatives:: [] % If set to a number, pretend that LABELS contains this may % positive/negative labels. NUMPOSITIVES/NUMNEGATIVES cannot be % smaller than the actual number of positive/negative entrires in % LABELS. The additional positive/negative labels are appended to % the end of the sequence, as if they had -INF scores (not % retrieved). This is useful to evaluate large retrieval systems % for which one stores ony a handful of top results for efficiency % reasons. % % IncludeInf:: false % If set to true, data with -INF score SCORES is included in the % evaluation and the maximum recall is 1 even if -INF scores are % present. This option does not include any additional positive or % negative data introduced by specifying NUMPOSITIVES and % NUMNEGATIVES. % % Stable:: false % If set to true, RECALL and PRECISION are returned the same order % of LABELS and SCORES rather than being sorted by decreasing % score (increasing recall). Samples with -INF scores are assigned % RECALL and PRECISION equal to NaN. % % NormalizePrior:: [] % If set to a scalar, reweights positive and negative labels so % that the fraction of positive ones is equal to the specified % value. This computes the normalised PR curves of [2] % % About the PR curve:: % This section uses the same symbols used in the documentation of % the VL_ROC() function. In addition to those quantities, define: % % PRECISION(S) = TP(S) / (TP(S) + FP(S)) % RECALL(S) = TPR(S) = TP(S) / P % % The precision is the fraction of positivie predictions which are % correct, and the recall is the fraction of positive labels that % have been correctly classified (recalled). Notice that the recall % is also equal to the true positive rate for the ROC curve (see % VL_ROC()). % % REFERENCES: % [1] C. D. Manning, P. Raghavan, and H. Schutze. An Introduction to % Information Retrieval. Cambridge University Press, 2008. % [2] D. Hoiem, Y. Chodpathumwan, and Q. Dai. Diagnosing error in % object detectors. In Proc. ECCV, 2012. % % See also VL_ROC(), VL_HELP(). % Author: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). % TP and FP are the vectors of true positie and false positve label % counts for decreasing scores, P and N are the total number of % positive and negative labels. Note that if certain options are used % some labels may actually not be stored explicitly by LABELS, so P+N % can be larger than the number of element of LABELS. [tp, fp, p, n, perm, varargin] = vl_tpfp(labels, scores, varargin{:}) ; opts.stable = false ; opts.interpolate = false ; opts.normalizePrior = [] ; opts = vl_argparse(opts,varargin) ; % compute precision and recall small = 1e-10 ; recall = tp / max(p, small) ; if isempty(opts.normalizePrior) precision = max(tp, small) ./ max(tp + fp, small) ; else a = opts.normalizePrior ; precision = max(tp * a/max(p,small), small) ./ ... max(tp * a/max(p,small) + fp * (1-a)/max(n,small), small) ; end % interpolate precision if needed if opts.interpolate precision = fliplr(vl_cummax(fliplr(precision))) ; end % -------------------------------------------------------------------- % Additional info % -------------------------------------------------------------------- if nargout > 2 || nargout == 0 % area under the curve using trapezoid interpolation if ~opts.interpolate info.auc = 0.5 * sum((precision(1:end-1) + precision(2:end)) .* diff(recall)) ; end % average precision (for each recalled positive sample) sel = find(diff(recall)) + 1 ; info.ap = sum(precision(sel)) / p ; if opts.interpolate info.auc = info.ap ; end % TREC 11 points average interpolated precision info.ap_interp_11 = 0.0 ; for rc = linspace(0,1,11) pr = max([0, precision(recall >= rc)]) ; info.ap_interp_11 = info.ap_interp_11 + pr / 11 ; end % legacy definition info.auc_pa08 = info.ap_interp_11 ; end % -------------------------------------------------------------------- % Plot % -------------------------------------------------------------------- if nargout == 0 cla ; hold on ; plot(recall,precision,'linewidth',2) ; if isempty(opts.normalizePrior) randomPrecision = p / (p + n) ; else randomPrecision = opts.normalizePrior ; end spline([0 1], [1 1] * randomPrecision, 'r--', 'linewidth', 2) ; axis square ; grid on ; xlim([0 1]) ; xlabel('recall') ; ylim([0 1]) ; ylabel('precision') ; title(sprintf('PR (AUC: %.2f%%, AP: %.2f%%, AP11: %.2f%%)', ... info.auc * 100, ... info.ap * 100, ... info.ap_interp_11 * 100)) ; if opts.interpolate legend('PR interp.', 'PR rand.', 'Location', 'SouthEast') ; else legend('PR', 'PR rand.', 'Location', 'SouthEast') ; end clear recall precision info ; end % -------------------------------------------------------------------- % Stable output % -------------------------------------------------------------------- if opts.stable precision(1) = [] ; recall(1) = [] ; precision_ = precision ; recall_ = recall ; precision = NaN(size(precision)) ; recall = NaN(size(recall)) ; precision(perm) = precision_ ; recall(perm) = recall_ ; end % -------------------------------------------------------------------- function h = spline(x,y,spec,varargin) % -------------------------------------------------------------------- prop = vl_linespec2prop(spec) ; h = line(x,y,prop{:},varargin{:}) ; vlfeat/toolbox/plotop/vl_click.m0000644000175000017500000000514512237004736015725 0ustar dimadimafunction P = vl_click(N,varargin) ; % VL_CLICK Click a point % P=VL_CLICK() let the user click a point in the current figure and % returns its coordinates in P. P is a two dimensiona vectors where % P(1) is the point X-coordinate and P(2) the point Y-coordinate. The % user can abort the operation by pressing any key, in which case the % empty matrix is returned. % % P=VL_CLICK(N) lets the user select N points in a row. The user can % stop inserting points by pressing any key, in which case the % partial list is returned. % % VL_CLICK() accepts the following options: % % PlotMarker:: [0] % Plot a marker as points are selected. The markers are deleted on % exiting the function. % % See also: VL_CLICKPOINT(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). plot_marker = 0 ; for k=1:2:length(varargin) switch lower(varargin{k}) case 'plotmarker' plot_marker = varargin{k+1} ; otherwise error(['Uknown option ''', varargin{k}, '''.']) ; end end if nargin < 1 N=1; end % -------------------------------------------------------------------- % Do job % -------------------------------------------------------------------- fig = gcf ; is_hold = ishold ; hold on ; bhandler = get(fig,'WindowButtonDownFcn') ; khandler = get(fig,'KeyPressFcn') ; pointer = get(fig,'Pointer') ; set(fig,'WindowButtonDownFcn',@click_handler) ; set(fig,'KeyPressFcn',@key_handler) ; set(fig,'Pointer','crosshair') ; P=[] ; h=[] ; data.exit=0; guidata(fig,data) ; while size(P,2) < N uiwait(fig) ; data = guidata(fig) ; if(data.exit) break ; end P = [P data.P] ; if( plot_marker ) h=[h plot(data.P(1),data.P(2),'rx')] ; end end if ~is_hold hold off ; end if( plot_marker ) pause(.1); delete(h) ; end set(fig,'WindowButtonDownFcn',bhandler) ; set(fig,'KeyPressFcn',khandler) ; set(fig,'Pointer',pointer) ; % ==================================================================== function click_handler(obj,event) % -------------------------------------------------------------------- data = guidata(gcbo) ; P = get(gca, 'CurrentPoint') ; P = [P(1,1); P(1,2)] ; data.P = P ; guidata(obj,data) ; uiresume(gcbo) ; % ==================================================================== function key_handler(obj,event) % -------------------------------------------------------------------- data = guidata(gcbo) ; data.exit = 1 ; guidata(obj,data) ; uiresume(gcbo) ; vlfeat/toolbox/plotop/vl_tightsubplot.m0000644000175000017500000000702012237004736017362 0ustar dimadimafunction H = vl_tightsubplot(varargin) % VL_TIGHTSUBPLOT Tiles axes without wasting space % H = VL_TIGHTSUBPLOT(K,P) returns an handle to the P-th axis in a % regular grid of K axes. The K axes are numbered from left to right % and from top to bottom. The function operates similarly to % SUBPLOT(), but by default it does not put any margin between % axes. This is done by tiling the axes inner box rather than the % axes outer box. % % H = VL_TIGHTSUBPLOT(M,N,P) retursn an handle to the P-th axes in a % regular subdivision with M rows and N columns. % % VL_TIGHTSUBPLOT() accepts the following options: % % Margin:: [0] % MarginLeft:: [0] % MarginRight:: [0] % MarginTop:: [0] % MarginBottom:: [0] % Set the axes inner box margin, either uniformly in all % directions, or specifically to the left, right, top or bottom. % % Box:: [0] % If set to 'outer', tile the axes outer box, thus protecting % title and labels. Unfortunately this usually produces % unnecesarily large margins. % % Spacing:: [0] (legacy option) % Set extra spacing between axes. The space is added between the % inner or outer boxes, depending on the setting below. % % REMARK. While SUBPLOT kills any pre-existing axes that overalps a % new one, this function does not. % % See also: SUBPLOT(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). % margins ml = 0 ; mr = 0 ; mt = 0 ; mb = 0 ; use_outer=0 ; % -------------------------------------------------------------------- % Parse arguments % -------------------------------------------------------------------- K = varargin{1} ; p = varargin{2} ; N = ceil(sqrt(K)) ; M = ceil(K/N) ; a=3 ; NA = length(varargin) ; if NA > 2 if isa(varargin{3},'char') % Called with K and p else % Called with M,N and p a = 4 ; M = K ; N = p ; p = varargin{3} ; end end for a=a:2:NA opt=lower(varargin{a}) ; arg=varargin{a+1} ; switch opt case 'margin' mt = arg ; mb = arg ; ml = arg ; mr = arg ; case 'marginleft' ml = arg ; case 'marginright' mr = arg ; case 'margintop' mt = arg ; case 'marginbottom' mb = arg ; case 'spacing' mt = arg/2 ; mb = arg/2 ; ml = arg/2 ; mr = arg/2 ; case 'box' switch lower(arg) case 'inner' use_outer = 0 ; case 'outer' use_outer = 1 ; otherwise error(['Box is either ''inner'' or ''outer''']) ; end otherwise error(['Uknown parameter ''', varargin{a}, '''.']) ; end end % -------------------------------------------------------------------- % Check the arguments % -------------------------------------------------------------------- [j,i]=ind2sub([N M],p) ; i=i-1 ; j=j-1 ; pos = [ j * 1/N + ml,... 1 - i * 1/M - 1/M + mb,... 1/N - ml - mr, ... 1/M - mt - mb] ; switch use_outer case 0 H = findobj(gcf, 'Type', 'axes', 'Position', pos) ; if(isempty(H)) H = axes('Position', pos) ; else axes(H) ; end case 1 H = findobj(gcf, 'Type', 'axes', 'OuterPosition', pos) ; if(isempty(H)) H = axes('ActivePositionProperty', 'outerposition',... 'OuterPosition', pos) ; else axes(H) ; end end vlfeat/toolbox/plotop/vl_plotpoint.m0000644000175000017500000000202112237004736016656 0ustar dimadimafunction h=vl_plotpoint(V,varargin) % VL_PLOTPOINT Plot 2 or 3 dimensional points % VL_PLOTPOINT(V) plots the 2 or 3 dimensional points V. V is a 2xK or % 3xK array, with one point per column. % % H=VL_PLOTPOINT(...) returns the handle H of the plot. % % VL_PLOTPOINT() is a simple wrapper around the PLOT() and PLOT3() % functions. By default, VL_PLOTPOINT(V) plots the points with line % style '.'. VL_PLOTPOINT(V,...) does not use the default line style; % rather it passess any extra argument to the underlying plot % function. % % See also: PLOT(), PLOT3(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if length(varargin) == 0 varargin = {'.'}; end switch size(V,1) case 2 h=plot(V(1,:),V(2,:),varargin{:}) ; case 3 h=plot3(V(1,:),V(2,:),V(3,:),varargin{:}) ; otherwise error(['V must be either 2xK or 3xK.']) ; end vlfeat/toolbox/plotop/vl_tpfp.m0000644000175000017500000000321512237004736015605 0ustar dimadimafunction [tp, fp, p, n, perm, varargin] = vl_tpfp(labels, scores, varargin) % VL_TPFP Compute true positives and false positives % This is an helper function used by VL_PR(), VL_ROC(), VL_DET(). % % See also: VL_PR(), VL_ROC(), VL_DET(), VL_HELP(). % Author: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). % extraNeg and extraPos depend on numNegatives and numPositives: % % [ labels | -1 +1 ] % [ +inf | finite scores | -inf | extraNeg extraPos] opts.includeInf = false ; opts.numNegatives = [] ; opts.numPositives = [] ; [opts, varargin] = vl_argparse(opts, varargin) ; % make row vectors labels = labels(:)' ; scores = scores(:)' ; % count labels p = sum(labels > 0) ; n = sum(labels < 0) ; if ~isempty(opts.numPositives) if opts.numPositives < p warning('NUMPOSITIVES is smaller than the number of positives in LABELS.') ; end p = opts.numPositives ; end if ~isempty(opts.numNegatives) if opts.numNegatives < n warning('NUMNEGATIVES is smaller than the number of negatives in LABELS.') ; end n = opts.numNegatives ; end % sort by descending scores [scores, perm] = sort(scores, 'descend') ; % assume that data with -INF score is never retrieved if opts.includeInf stop = length(scores) ; else stop = max(find(scores > -inf)) ; end perm = perm(1:stop) ; labels = labels(perm) ; % accumulate true positives and false positives by scores % in descending order tp = [0 cumsum(labels > 0)] ; fp = [0 cumsum(labels < 0)] ; vlfeat/toolbox/plotop/vl_plotbox.m0000644000175000017500000000427012237004745016325 0ustar dimadimafunction [h, t] = vl_plotbox(boxes, varargin) % PLOTBOX Plot boxes % PLOTBOX(BOX) plots a box specified by the 4-dimensional vector % BOXES = [XMIN YMIN XMAX YMAX]'. If BOXES is a 4 x N matrix, a box % for each of the N columns is plotted. % % H = PLOTBOX(BOXES) returns an handle to the line drawings % representing the boxes. For multiple boxes, H is a row vector with % one handle per box. % % PLOTBOX(BOXES, 'LABEL', LABEL) annotates the box with the string % LABEL. If BOXES contains multiple boxes, then LABEL can be a cell % array with one entry for each box. H is then a 2 x N array with % handles to boxes and labels. % % PLOTBOX(BOXES, ...) passes any extra argument to the underlying % plotting function. The first optional argument can be a line % specification string such as the one used by PLOT(). % % See also:: VL_PLOTFRAME(). % Author:: Andrea Vedaldi % Copyright (C) 2008-13 Andrea Vedaldi % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). opts.label = {} ; % if the first optional argument is a linespec expand it if length(varargin) > 0 lineprop = vl_linespec2prop(varargin{1}) ; varargin = {lineprop{:}, varargin{2:end}} ; end % parse optional arguments [opts, varargin] = vl_argparse(opts, varargin) ; if ischar(opts.label) opts.label = {opts.label} ; end if size(boxes,2) == 0 h = [] ; return ; end if size(boxes,1) ~= 4 error('BOXES must be a 4 x N matrix') ; end Lx = [1 0 0 0 ; 0 0 1 0 ; 0 0 1 0 ; 1 0 0 0 ; 1 0 0 0 ] ; Ly = [0 1 0 0 ; 0 1 0 0 ; 0 0 0 1 ; 0 0 0 1 ; 0 1 0 0 ] ; fig = newplot ; h = line(Lx * boxes, Ly * boxes, varargin{:}) ; h = h' ; if ~isempty(opts.label) ish = ishold ; hold on ; t = zeros(1,length(opts.label)) ; for r = 1:size(boxes,2) cl = get(h(1,r), 'Color') ; q = mod(r - 1, length(opts.label)) + 1 ; h(2,r) = text(mean(boxes([1 3],r)), boxes(2,r), opts.label{q}, ... 'Background', cl, ... 'VerticalAlignment', 'bottom', ... 'HorizontalAlignment', 'center') ; end if ~ish, hold off ; end end if nargout == 0 clear h ; endvlfeat/toolbox/plotop/vl_clicksegment.m0000644000175000017500000000152312237004736017304 0ustar dimadimafunction [P1,P2] = vl_clicksegment % VL_CLICKSEGMENT Select a segment by clicking % [P1,P2] = VL_CLICKSEGMENT() lets the user select a segment in the % current figure and returns the starting and ending point P1 and P2. % % The user can abort the operation by pressing any key. In this case % the function returns the empty matrix. % % See also: VL_CLICK(), VL_CLICKPOINT(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). % Click first segment P1=vl_click ; if isempty(P1) P2=P1 ; return ; end was_hold = ishold(gca) ; hold on ; h=plot(P1(1),P1(2),'rx') ; % Click second segment P2=vl_click ; if isempty(P2) P1=P2 ; end delete(h) ; if ~was_hold, hold off ; end vlfeat/toolbox/plotop/vl_cf.m0000644000175000017500000000122212237004736015220 0ustar dimadimafunction h = vl_cf(h0) % VL_CF Creates a copy of a figure % VL_CF() creates a copy of the current figure and returns VL_CF(H0) % creates a copy of the figure(s) whose handle is H0. H = % VL_CF(...) returns the handles of the copies. % % See also: VL_HELP(). % Authors: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if nargin < 1 h0 = gcf ; end h=zeros(size(h0)) ; for i=1:numel(h0) h(i) = copyobj(h0(i),get(h0(i),'Parent')) ; end if nargout < 1 clear h ; end vlfeat/toolbox/plotop/vl_plotstyle.m0000644000175000017500000000404612237004736016676 0ustar dimadimafunction style = vl_plotstyle(index) % VL_PLOTSTYLES Get a plot style % STYLES = VL_PLOTSTYLE(INDEX) returns a cell array of PLOT() options % for the color/line style of index INDEX. The available styles are % defined the ColorOrder and LineStyleOrder properties of the % current axes and cycled first by color and then by line style. % % If there is no current axes can be found, then VL_PLOTSTYLE() uses % the DefaultAxesColorOrder and DefaultLineStyleOrder root % properties. % % If INDEXES has more than one element, then VL_PLOTSTYLE(INDEXES) % returns a cell array of styles of the same size of INDEXES. % % Example:: % The code fragment % % set(gca,'LineStyleOrder', {'-','-.'}, 'NextPlot', 'replacechildren') ; % plot([1 2], [1:20 ; 1:20]') ; % % and % % set(gca,'NextPlot', 'replacechildren') ; % set(gca,'LineStyleOrder', {'-','-.'}) ; % for i = 1:20 % style = vl_plotstyle(i) ; % plot([1 2], [i i], style{:}) ; % hold on ; % end % % produce visually similar results. % % See also: VL_HELP(). % Author: Andrea Vedaldi colors = [] ; lines = {} ; % try to get from current axes, if any fig = get(0, 'CurrentFigure') ; if ~isempty(fig) ax = get(fig, 'CurrentAxes') ; if ~isempty(ax) colors = get(gca, 'ColorOrder') ; lines = get(gca, 'LineStyleOrder') ; end end % if not, pick matlab defaults if isempty(colors) colors = get(0,'DefaultAxesColorOrder') ; lines = get(0,'DefaultAxesLineStyleOrder') ; end % make sure lines is a cell and not a char array if ~iscell(lines) lines_ = lines ; lines = {} ; for i = 1:size(lines_,1) lines{i} = deblank(lines_(i,:)) ; end end % if more than one style specified style = cell(size(index)) ; for i = 1:numel(index) ci = mod(index(i) - 1, size(colors,1)) + 1 ; li = mod(floor((index(i) - 1) / size(colors,1)), numel(lines)) + 1 ; style{i} = {'Color', colors(ci,:), 'LineStyle', lines{li}} ; end % remove one layer of cell array if single style requested if numel(index) == 1 style = [style{:}] ; end vlfeat/toolbox/vl_noprefix.m0000644000175000017500000000352312237004736015153 0ustar dimadimafunction vl_noprefix % VL_NOPREFIX Create a prefix-less version of VLFeat commands % VL_NOPREFIX() creats prefix-less stubs for VLFeat functions % (e.g. SIFT for VL_SIFT). This function is seldom used as the stubs % are included in the VLFeat binary distribution anyways. Moreover, % on UNIX platforms, the stubs are generally constructed by the % Makefile. % % See also: VL_COMPILE(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). root = fileparts(which(mfilename)) ; list = listMFilesX(root); outDir = fullfile(root, 'noprefix') ; if ~exist(outDir, 'dir') mkdir(outDir) ; end for li = 1:length(list) name = list(li).name(1:end-2) ; % remove .m nname = name(4:end) ; % remove vl_ stubPath = fullfile(outDir, [nname '.m']) ; fout = fopen(stubPath, 'w') ; fprintf('Creating stub %s for %s\n', stubPath, nname) ; fprintf(fout, 'function varargout = %s(varargin)\n', nname) ; fprintf(fout, '%% %s Stub for %s\n', upper(nname), upper(name)) ; fprintf(fout, '[varargout{1:nargout}] = %s(varargin{:})\n', name) ; fclose(fout) ; end end function list = listMFilesX(root) list = struct('name', {}, 'path', {}) ; files = dir(root) ; for fi = 1:length(files) name = files(fi).name ; if files(fi).isdir if any(regexp(name, '^(\.|\.\.|noprefix)$')) continue ; else tmp = listMFilesX(fullfile(root, name)) ; list = [list, tmp] ; end end if any(regexp(name, '^vl_(demo|test).*m$')) continue ; elseif any(regexp(name, '^vl_(demo|setup|compile|help|root|noprefix)\.m$')) continue ; elseif any(regexp(name, '\.m$')) list(end+1) = struct(... 'name', {name}, ... 'path', {fullfile(root, name)}) ; end end end vlfeat/toolbox/aib/0000755000175000017500000000000012237042170013164 5ustar dimadimavlfeat/toolbox/aib/vl_aibcut.m0000644000175000017500000000674712237004736015336 0ustar dimadimafunction [cut, map, short] = vl_aibcut(parents, n) % VL_AIBCUT Cut VL_AIB tree % CUT = VL_AIBCUT(PARENTS, N) cuts the binary merge tree PARENTS and % returns a cut CUT of N nodes. The format of PARENTS is the same % used by the VL_AIB() function. % % A cut is a set of N nodes such that no node is a descendant of any % other node in the cut and such that all leaves descend from a node % in the cut. The vector CUT lists the nodes of the binary merge tree % PARENT that form the cut. % % Nodes with null parent (as defined by PARENTS) are included in the % cut if the other nodes are not enough to fill a cut of N elements. % % [CUT, MAP] = VL_AIBCUT(...) returns a vector MAP with the same size % as PARENTS. MAP assigns each node below or in the cut to the % corresponding element in the CUT vector (each element above the cut % or with null parent is mapped to 0). To get the index of the % corresponding cut nodes use CUT(MAP). MAP can be used to quantize % the leaves in a sequences of N contiguous indexes, starting from % one (see also VL_AIBCUTPUSH()). % % [CUT, MAP, SHORT] = VL_AIBCUT(...) returns also a vector SHORT that % represents a version of the PARENTS tree where nodes below the cut % are short-circuitied to link to the corresponding cut ancestors % directly. Null parents are left unchanged, except if the % corresponding node is in the cut (in which case the map-to-itself % rule has the precedence). % % See also: VL_HELP(), VL_AIB(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). % -------------------------------------------------------------------- % Determine nodes in the cut % -------------------------------------------------------------------- if n > 1 root = max(parents) ; % count number of null nodes z = sum(parents(1:root) == 0) ; % determine number of leves nleaves = (root - z + 1) / 2 ; % find first node of the cut mu = root - min(n, nleaves) + 1 ; % correction for presence of null nodes nz = find(parents(1:mu) > 0) ; mu = nz(end) ; % find node belnoging to the cut cut = find(parents(1:mu) > mu) ; % In the presence of null nodes, the cut size might exceed nleaves, % which is the maximum cut size we can obtain with the specified % tree. The additional nodes have to be picked up from the null % nodes. if length(cut) < n sel_z = find(parents == 0) ; cut = [sel_z(1:n-length(cut)) cut] ; end % aesthetic reasons only cut = sort(cut) ; else mu = max(parents) ; cut = mu ; end % -------------------------------------------------------------------- % Short-circuit nodes to the cut % -------------------------------------------------------------------- stop = [cut find(parents == 0)] ; short = 1:length(parents) ; while 1 [drop,sel] = setdiff(short(1:mu), stop) ; sel = setdiff(sel, stop) ; if isempty(sel), break ; end short(sel) = parents(short(sel)) ; end short(setdiff(find(parents == 0), cut)) = 0 ; % -------------------------------------------------------------------- % Build quantizer map % -------------------------------------------------------------------- map = 1:numel(parents) ; map(cut) = 1:n ; map(short > 0) = map(short(short > 0)) ; map(short == 0) = 0 ; map(mu+1:end) = 0 ; vlfeat/toolbox/aib/vl_aibhist.c0000644000175000017500000001026412237004745015465 0ustar dimadima/** @internal ** @file aibhist.c ** @brief Push data down the AIB tree - MEX driver ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include #include #include #include /* ---------------------------------------------------------------- */ /** @brief MEX driver entry point **/ void mexFunction (int nout, mxArray * out[], int nin, const mxArray * in[]) { enum {IN_PARENTS = 0, IN_DATA, IN_OPT} ; enum {OUT_TREE} ; vl_uint32 const *parents ; vl_uint32 *tree ; double const *data ; int nnull = 0 ; int histmode = 0 ; vl_uint32 i, P, N ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if ((nin < 2) || (nin > 3)) { mexErrMsgTxt ("Two or three arguments required.") ; } if (nout > 1) { mexErrMsgTxt ("Too many output arguments.") ; } if (!vlmxIsMatrix(in[IN_DATA], -1, -1)) { mexErrMsgTxt ("DATA must be a matrix of DOUBLE"); } if (!vlmxIsVector(in[IN_PARENTS], -1)) { mexErrMsgTxt ("PARENTS must be a vector") ; } if (mxGetClassID(in[IN_PARENTS]) != mxUINT32_CLASS) { mexErrMsgTxt ("PARENTS must be UINT32") ; } N = mxGetNumberOfElements (in[IN_DATA]) ; data = mxGetPr (in[IN_DATA]) ; P = mxGetNumberOfElements (in[IN_PARENTS]) ; parents = mxGetData (in[IN_PARENTS]) ; if (nin > 2) { enum {buflen = 32} ; char buf [buflen] ; if (!vlmxIsString(in[IN_OPT], -1)) { mexErrMsgTxt("OPT must be a string") ; } mxGetString(in[IN_OPT], buf, buflen) ; buf [buflen - 1] = 0 ; if (!vlmxCompareStringsI("hist", buf)) { mexErrMsgTxt("OPT must be equal to 'hist'") ; } histmode = 1 ; } out[OUT_TREE] = mxCreateNumericMatrix(1, P,mxUINT32_CLASS, mxREAL) ; tree = mxGetData (out[OUT_TREE]) ; /* ----------------------------------------------------------------- * Do the job * -------------------------------------------------------------- */ { char buf [1024] ; vl_uint32 max_node = 0 ; vl_uint32 min_node = 0 ; vl_uint32 last_leaf = 0 ; /*vl_uint32 root = 0 ;*/ /* exhamine parents for errors and informations */ for (i = 0 ; i < P ; ++i) { vl_uint32 node = parents [i] ; if ((node != 0) & (node != 1)) { max_node = VL_MAX (node, max_node) ; min_node = VL_MIN (node, min_node) ; } /* check no node points outside the tree */ if (node > P) { snprintf(buf, sizeof(buf), "Out of bounds link PARENTS[%d] = %u > %u", i, node, P) ; mexErrMsgTxt (buf) ; } /* check node points to something above him */ if ((node != 0) & (node != 1) & (node < i)) { snprintf(buf, sizeof(buf), "Backward link PARENTS[%d] = %u < %d", i, node, i) ; mexErrMsgTxt (buf) ; } if (node == 0) ++ nnull ; } /* now * * min_node = first node which is not a leaf * max_node = root node * nnull = number of leaves pointing to the null node */ last_leaf = min_node - 1 ; /*root = max_node ;*/ /* process data */ for (i = 0 ; i < N ; ++i) { /*int w = 1 ;*/ vl_uint32 x = data [i] ; if (histmode) { /*w = x ;*/ x = i ; } if ((x < 1) | (x > last_leaf)) { if (histmode) { snprintf(buf, sizeof(buf), "DATA length exceeds number of AIB leaves") ; } else { snprintf(buf, sizeof(buf), "DATA [%u] = %u is not a leaf", i, x) ; } mexErrMsgTxt (buf) ; } while (VL_TRUE) { vl_uint32 x_ = parents [x -1] ; /* mexPrintf("%u : x_=%u, x=%u\n", i, x_, x) ; */ ++ tree [x - 1] ; if ((x_ == x) | (x_ == 0) | (x_ == 1)) break ; x = x_ ; } } } } vlfeat/toolbox/aib/vl_aib.m0000644000175000017500000000615212237004736014610 0ustar dimadima% VL_AIB Agglomerative Information Bottleneck % PARENTS = VL_AIB(PCX) runs Agglomerative Information Bottleneck % (AIB) on the class-feature co-occurrence matrix PCX and returns a % vector PARENTS representing the sequence of compressed AIB % alphabets. % % PCX is the joint probability of the occurrence of the class label % C and the feature value X. PCX has one row for each class label % and one column for each feature value, non negative entires and % sums to one. AIB iteratively merges the pair of feature values % that decreases the mutual information I(X,C) the least. This % compresses the alphabet of the discrete random variable X in such % a way that the new variable is still informative about C. % % Merge operations are represented by a binary tree. The nodes of % the tree correspond to the original feature values and any other % value obtained by merging. % % The vector PARENTS represents the merge tree. The nodes are % numbered in breadth-first order, starting from the leaves. The % numbers associated to the tree leaves correspond to the original % feature values (so the first leaf has number one and correspond to % the first feature value). In total there are 2*M-1 nodes, where M % is the number of feature values (the number of columns of % PCX). The internal nodes are numbered according to the order in % which AIB generates them. It is therefore possible to recover from % the tree the state of the AIB algorithm at each step (see also % VL_AIBCUT()). PARENTS is a UINT32 array with one element for each % tree node storing the index of the parent node. The root parent is % conventionally set to 1. % % Feature values with null probability (null columns of the PCX % matrix) are ignored by the AIB algorithm and the corresponding % entries in the PARENTS vectors are set to zero. Notice that this % causes the root of the tree to have index smaller of 2*M-1 % (PARENTS has still 2*M-1 entries, but the last portion is % zero-padded). % % Alternatively, the option ClusterNull can be used to assign the % null probability values to a special value. The result is similar % to pretending that the null probability nodes have indeed very % small probability, uniform across categories. % % [PARENTS, COST] = VL_AIB(...) returns the values COST of the cost % function being optimized by AIB (i.e. the mutual information % I(X,C)). COST has M column. The first column is the initial value % of the cost function. The others correspond to the cost after each % of the M-1 merges. If less than M-1 merges are performed, the rest % of the vector is filled with NaNs. % % VL_AIB() accepts the following options: % % Verbose:: % If specified, increase verbosity level. % % ClusterNull:: % If specified, do not signal null nodes; instead cluster them. % % See also: VL_AIBCUT(), VL_AIBHIST(), VL_AIBCUTHIST(), % VL_AIBCUTPUSH(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/aib/vl_aibcuthist.m0000644000175000017500000000354512237004736016217 0ustar dimadimafunction hist = vl_aibcuthist(map, x, varargin) % VL_AIBCUTHIST Compute a histogram by using an AIB compressed alphabet % HIST = VL_AIBCUTHIST(MAP, X) computes the histogram of the data X % using the compressed alphabet specified by a cut MAP of the AIB % tree (as returned by VL_AIBCUT()). Each element of HIST counts how % many elements of X are projected to the corresponding cut node % (encoding the compressed alphabet). % % Data are mapped to bins as specified by VL_AIBCUTPUSH(). Data mapped % to the null node are dropped. % % VL_AIBCUTHIST() accepts the following options: % % Nulls:: [drop] % What to do of null nodes: drop ('drop'), accumulate to an % extra bin at the end of HIST ('append'), or accumulate to % the first bin ('first') % % See also: VL_AIB(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). mode = 'drop' ; for k=1:2:length(varargin) opt=varargin{k} ; arg=varargin{k+1} ; switch lower(opt) case 'nulls' switch lower(arg) case 'drop' mode = 'drop' ; case 'append' mode = 'append' ; case 'first' mode = 'first' ; otherwise error(sprintf('Illegal argument ''%s'' for ''Nulls''', arg)) ; end otherwise error(sprintf('Unknown option ''%''', opt)) ; end end % determine cut size cut_size = max(map) ; % relabel data y = vl_aibcutpush(map, x) ; % null? if any(y == 0) switch mode case 'drop' y = y(y ~= 0) ; case 'append' cut_size = cut_size + 1 ; y(y == 0) = cut_size ; case 'first' y(y == 0) = 1 ; end end % Now we have the nodes of the cut. Accumulate. hist = zeros(1, cut_size) ; hist = vl_binsum(hist, ones(size(y)), y) ; vlfeat/toolbox/aib/vl_aibcutpush.m0000644000175000017500000000074212237004736016223 0ustar dimadimafunction y = vl_aibcutpush(map, x) % VL_AIBCUTPUSH Quantize based on VL_AIB cut % Y = VL_AIBCUTPUSH(MAP, X) maps the data X to elements of the AIB % cut specified by MAP. % % The function is equivalent to Y = MAP(X). % % See also: VL_HELP(), VL_AIB(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). y = map(x) ; vlfeat/toolbox/aib/vl_aib.c0000644000175000017500000001602112237004736014572 0ustar dimadima/** @internal ** @file aib.c ** @author Brian Fulkerson ** @author Andrea Vedaldi ** @brief AIB MEX driver **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include #include /* option codes */ enum { opt_cluster_null = 0, opt_verbose } ; /* options */ vlmxOption options [] = { {"ClusterNull",0, opt_cluster_null}, {"Verbose", 0, opt_verbose }, {0, 0, 0 } } ; #define CLUSTER_NULL_NODES 1 /** ------------------------------------------------------------------ ** ** Null nodes are nodes with null probability and are not merged by AIB. ** It is convenient, however, to treat them as follows: ** ** - we pretend that AIB merged those nodes at the very beginning into a ** single cluster (as they, after all, yield zero information drop). ** ** - we attach this cluster to the root as the very last step (as we ** do not want to change other nodes. ** **/ static void cluster_null_nodes (vl_uint32* parents, vl_uint32 nvalues, double *cost, int verbosity) { vl_uint32 nnull = 0 ; vl_uint32 n ; vl_uint32 first ; vl_uint32 last_intermed ; vl_uint32 a, b, c, d, e ; vl_uint32 dp, ep ; /* count null nodes so far */ for (n = 0 ; n < nvalues ; ++ n) { if (parents[n] >= 2 * nvalues - 1) { ++ nnull ; } } if (nnull == 0) return ; /* = : leaves * 0 : null leaves * i : internal node * * : padding * x : intermediate nodes to link null nodes * * Input: * * ====== 0000 ======= iiiiiii **** * | | | * 0 dp ep * * * Output: * * ====== ==== ======= xxxx iiiiiii * | | || | | * 0 a bc d e */ a = nvalues ; b = nvalues + nnull - 1 - 1 ; c = b + 1 ; d = c + 1 ; e = 2 * nvalues - 2 ; dp = nvalues ; ep = 2 * nvalues - 2 - nnull ; if (verbosity > 1) { mexPrintf("vl_aib: a:%u b:%u c:%u d:%u e:%u dp:%u ep:%u\n", a,b,c,d,e,dp,ep) ; } /* search first leaf that has been merged */ { vl_uint32 first_parent = e ; first = 0 ; for (n = 0 ; n < nvalues ; ++ n) { if ((parents[n] <= e) & (parents[n] != 1)) { if (first_parent >= parents [n]) { first_parent = parents [n] ; first = n ; } } } } if (verbosity > 1) { mexPrintf("vl_aib: nnull:%u, nvalues:%u, first: %u\n", nnull,nvalues,first) ; } /* move internal node block [dp:ep] to [d:e] */ for (n = 0 ; n < e ; ++ n) { if ((parents [n] <= e) & (parents [n] != 0)) { parents [n] += (e - ep) ; } } for (n = e ; n >= d ; -- n) { parents [n] = parents [n - (e - ep)] ; } /* find first null node and connect it to a */ last_intermed = a ; for (n = 0 ; n < a ; ++ n) { if (parents[n] > e) { parents [n] = last_intermed ; break ; } } if (verbosity > 1) { mexPrintf("vl_aib:first null %u parent seto to last_intermed:%u\n", n, last_intermed) ; } /* chain rest of intermediate nodes */ for (; n < a ; ++ n) { if (parents[n] > e) { parents [n] = last_intermed ; parents [last_intermed] = last_intermed + 1 ; ++ last_intermed ; } } if (verbosity > 1) { mexPrintf("vl_aib: after chaining other nulls last_intermed:%u\n", last_intermed) ; } /* make last_intermed point to d */ parents [last_intermed] = d ; /* change parent of first to be last_intermed */ if (verbosity > 1) { mexPrintf("vl_aib: parent of %u (first) was %u\n", first, parents[first]) ; } parents [first] = last_intermed ; if (verbosity > 1) { mexPrintf("vl_aib: parent of %u (first) is now %u\n", first, parents[first]) ; } /* fix cost too (reall that the fist entry is the cost before any merge) */ if (cost) { cost -= nvalues - 1 ; for (n = e ; n >= d ; --n) { cost [n] = cost [n - (e - ep)] ; } for (n = c ; n >= a ; --n) { cost [n] = cost [d] ; } } } /** ------------------------------------------------------------------ ** @brief MEX entry point **/ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum {IN_PCX = 0, IN_END} ; enum {OUT_PARENTS = 0, OUT_COST} ; enum {INFORMATION, EC} ; int verbose = 0 ; int opt ; int next = IN_END ; mxArray const *optarg ; int cluster_null = 0 ; double *Pcx ; vl_uint32 nlabels ; vl_uint32 nvalues ; mxArray *Pcx_cpy ; VL_USE_MATLAB_ENV ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin < 1) { mexErrMsgTxt("One argument required.") ; } else if (nout > 2) { mexErrMsgTxt("Too many output arguments."); } if (!vlmxIsMatrix(in[IN_PCX], -1, -1)) { mexErrMsgTxt("PCX must be a real matrix.") ; } Pcx_cpy = mxDuplicateArray(in[IN_PCX]); Pcx = mxGetPr (Pcx_cpy) ; nlabels = mxGetM (in[IN_PCX]) ; nvalues = mxGetN (in[IN_PCX]) ; while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { switch (opt) { case opt_verbose : ++ verbose ; break ; case opt_cluster_null : cluster_null = 1 ; break ; } } if (verbose) { mexPrintf("vl_aib: clustering null probability variables: %s\n", VL_YESNO(cluster_null)) ; } /* ----------------------------------------------------------------- * Do job * -------------------------------------------------------------- */ { VlAIB *aib; double* acost = 0, *cost = 0 ; vl_uint32 *aparents = 0, *parents = 0 ; vl_uint32 n ; out[OUT_PARENTS] = mxCreateNumericMatrix(1, 2*nvalues - 1, mxUINT32_CLASS, mxREAL); parents = mxGetData(out[OUT_PARENTS]); if (nout > 1) { out[OUT_COST] = mxCreateNumericMatrix(1, nvalues, mxDOUBLE_CLASS, mxREAL); cost = mxGetPr(out[OUT_COST]); } aib = vl_aib_new (Pcx, nvalues, nlabels) ; vl_aib_set_verbosity (aib, verbose) ; vl_aib_process (aib); aparents = vl_aib_get_parents (aib); acost = vl_aib_get_costs (aib); memcpy(parents, aparents, sizeof(vl_uint32)*(2*nvalues-1)); if (nout > 1) memcpy(cost, acost, sizeof(double)*nvalues); vl_aib_delete(aib); if (cluster_null) { cluster_null_nodes (parents, nvalues, (nout == 0) ? 0 : cost, verbose) ; } /* save back parents */ for (n = 0 ; n < 2 * nvalues - 1 ; ++n) { if (parents [n] > 2 * nvalues - 1) { /* map ingored nodes to zero */ parents [n] = 0 ; } else { /* MATLAB starts counting from 1 */ ++ parents [n] ; } } } mxDestroyArray(Pcx_cpy); } vlfeat/toolbox/aib/vl_aibhist.m0000644000175000017500000000150712237004736015477 0ustar dimadima% VL_AIBHIST Compute histogram over VL_AIB tree % H = VL_AIBHIST(PARENTS, DATA) computes the histogram of the data % points DATA on the VL_AIB tree defined by PARENTS. Each element of % DATA indexes one of the leaves of the VL_AIB tree. % % H = VL_AIBHIST(PARENTS, DATA, 'HIST') treats DATA as an histograms. % In this case each compoment of DATA is the number of occurences of % the VL_AIB leaves corresponding to that component. % % H has the same dimension of parents and counts how many data points % are descendent of the corresponding node of the VL_AIB tree. % % See also: VL_HELP(), VL_AIB(), VL_AIBCUTPUSH(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/vl_demo.m0000644000175000017500000000175412237035727014255 0ustar dimadimafunction vl_demo % VL_DEMO Run VLFeat demos % VL_DEMO runs all VLFeat demos in a row, exporting figures for % the documentation. Edit this file to see a list of the vailable % demos, or look into the toolbox/demo directory. % Author: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if vl_isoctave() more off ; end root = vl_root ; demo_path = fullfile(root,'toolbox','demo') ; addpath(demo_path) ; vl_demo_covdet ; vl_demo_mser_basic ; vl_demo_mser_delta ; %vl_demo_mser_cmd ; vl_demo_aib ; vl_demo_quickshift ; vl_demo_slic ; vl_demo_hog ; vl_demo_svm ; vl_demo_kdtree ; vl_demo_kdtree_self ; vl_demo_kdtree_forest ; vl_demo_kdtree_ann ; vl_demo_kmeans_2d ; vl_demo_imdisttf ; vl_demo_plots_rank ; vl_demo_gmm_2d_rand; vl_demo_gmm_2d_twist; vl_demo_gmm_3d; vl_demo_kmeans_ann_speed; rmpath(demo_path); vlfeat/toolbox/kmeans/0000755000175000017500000000000012237042170013707 5ustar dimadimavlfeat/toolbox/kmeans/vl_hikmeanspush.c0000644000175000017500000001367412237004736017274 0ustar dimadima/** @internal ** @file hikmeanspush.c ** @brief vl_hikm_push - MEX driver ** @author Brian Fulkerson ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include #include #include #include #include enum { opt_method, opt_verbose } ; vlmxOption options [] = { {"Method", 1, opt_method }, {"Verbose", 0, opt_verbose }, {0, 0, 0 } } ; #define NFIELDS(field_names) (sizeof(field_names)/sizeof(*field_names)) /** ------------------------------------------------------------------ ** @internal ** @brief Convert MATLAB structure to HIKM node **/ static VlHIKMNode * xcreate (VlHIKMTree *tree, mxArray const *mnode, int i) { mxArray const *mcenters, *msub ; VlHIKMNode *node ; vl_size M, node_K ; vl_uindex k ; /* sanity checks */ mcenters = mxGetField(mnode, i, "centers") ; msub = mxGetField(mnode, i, "sub") ; if (!mcenters || mxGetClassID (mcenters) != mxINT32_CLASS || !vlmxIsMatrix (mcenters, -1, -1) ) { mexErrMsgTxt("NODE.CENTERS must be a INT32 matrix.") ; } M = mxGetM (mcenters) ; node_K = mxGetN (mcenters) ; if (node_K > (vl_size)tree->K) { mexErrMsgTxt("A node has more clusters than TREE.K.") ; } if (tree->M < 0) { tree->M = M ; } else if (M != (vl_size)tree->M) { mexErrMsgTxt("A node CENTERS field has inconsistent dimensionality.") ; } node = mxMalloc (sizeof(VlHIKMNode)) ; node->filter = vl_ikm_new (tree->method) ; node->children = 0 ; vl_ikm_init (node->filter, mxGetData(mcenters), M, node_K) ; /* has any childer? */ if (msub) { /* sanity checks */ if (mxGetClassID (msub) != mxSTRUCT_CLASS) { mexErrMsgTxt("NODE.SUB must be a MATLAB structure array.") ; } if (mxGetNumberOfElements (msub) != node_K) { mexErrMsgTxt("NODE.SUB size must correspond to NODE.CENTERS.") ; } node-> children = mxMalloc (sizeof(VlHIKMNode *) * node_K) ; for(k = 0 ; k < node_K ; ++ k) { node-> children [k] = xcreate (tree, msub, k) ; } } return node ; } /** ------------------------------------------------------------------ ** @internal ** @brief Convert MATLAB structure to HIKM tree **/ static VlHIKMTree* matlab_to_hikm (mxArray const *mtree, int method_type) { VlHIKMTree *tree ; mxArray *mK, *mdepth ; int K = 0, depth = 0; VL_USE_MATLAB_ENV ; if (mxGetClassID (mtree) != mxSTRUCT_CLASS) { mexErrMsgTxt("TREE must be a MATLAB structure.") ; } mK = mxGetField(mtree, 0, "K") ; mdepth = mxGetField(mtree, 0, "depth") ; if (!mK || !vlmxIsPlainScalar (mK) || (K = (int) *mxGetPr (mK)) < 1) { mexErrMsgTxt("TREE.K must be a DOUBLE not smaller than one.") ; } if (!mdepth || !vlmxIsPlainScalar (mdepth) || (depth = (int) *mxGetPr (mdepth)) < 1) { mexErrMsgTxt("TREE.DEPTH must be a DOUBLE not smaller than one.") ; } tree = mxMalloc (sizeof(VlHIKMTree)) ; tree-> depth = depth ; tree-> K = K ; tree-> M = -1 ; /* to be initialized later */ tree-> method= method_type ; tree-> root = xcreate (tree, mtree, 0) ; return tree ; } /* ---------------------------------------------------------------- */ /** @brief MEX driver entry point **/ void mexFunction (int nout, mxArray * out[], int nin, const mxArray * in[]) { enum {IN_TREE = 0, IN_DATA, IN_END} ; enum {OUT_ASGN = 0} ; vl_uint8 const *data; int opt ; int next = IN_END ; mxArray const *optarg ; int N = 0 ; int method_type = VL_IKM_LLOYD ; int verb = 0 ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin < 2) mexErrMsgTxt ("At least two arguments required."); else if (nout > 1) mexErrMsgTxt ("Too many output arguments."); if (mxGetClassID (in[IN_DATA]) != mxUINT8_CLASS) { mexErrMsgTxt ("DATA must be of class UINT8"); } N = mxGetN (in[IN_DATA]); /* n of elements */ data = (vl_uint8 *) mxGetPr (in[IN_DATA]); while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { char buf [1024] ; switch (opt) { case opt_verbose : ++ verb ; break ; case opt_method : if (!vlmxIsString (optarg, -1)) { mexErrMsgTxt("'Method' must be a string.") ; } if (mxGetString (optarg, buf, sizeof(buf))) { mexErrMsgTxt("Option argument too long.") ; } if (strcmp("lloyd", buf) == 0) { method_type = VL_IKM_LLOYD ; } else if (strcmp("elkan", buf) == 0) { method_type = VL_IKM_ELKAN ; } else { mexErrMsgTxt("Unknown cost type.") ; } break ; default : abort() ; } } /* ----------------------------------------------------------------- * Do the job * -------------------------------------------------------------- */ { VlHIKMTree *tree ; vl_uint *ids ; int j; int depth ; tree = matlab_to_hikm (in[IN_TREE], method_type) ; depth = vl_hikm_get_depth (tree) ; if (verb) { mexPrintf("hikmeanspush: ndims: %d K: %d depth: %d\n", vl_hikm_get_ndims (tree), vl_hikm_get_K (tree), depth) ; } out[OUT_ASGN] = mxCreateNumericMatrix (depth, N, mxUINT32_CLASS, mxREAL) ; ids = mxGetData (out[OUT_ASGN]) ; vl_hikm_push (tree, ids, data, N) ; vl_hikm_delete (tree) ; for (j = 0 ; j < N*depth ; j++) ids [j] ++ ; } } vlfeat/toolbox/kmeans/vl_hikmeanshist.m0000644000175000017500000000345312237004736017270 0ustar dimadimafunction h = vl_hikmeanshist(tree,path) % VL_HIKMEANSHIST Compute histogram of quantized data % H = VL_HIKMEANSHIST(TREE,PATH) computes the histogram of the HIKM tree % nodes activated by the root-to-leaf paths PATH. PATH is usually % obtained by quantizing data by means of VL_HIKMEANSPUSH(). % % The histogram H has one bin for each node of the HIKM tree TREE. % The tree has K = TREE.K nodes and depth D = TREE.DEPTH. Therefore % there are M = (K^(D+1) - 1) / (K - 1) nodes in the tree (not % counting the root which carries no information). Nodes are stacked % into a vector of bins in breadth first order. % % Example:: % The following relations illustrate the structure of PATH: % H(1) = # of paths such that PATH(1,:) = 1 % H(K) = # of paths such that PATH(1,:) = K % H(K+1) = # of paths such that PATH(1:2,:) = [1 ; 1] % H(K+K) = # of paths such that PATH(1:2,:) = [1 ; K] % % See also: VL_HIKMEANS(), VL_HIKMEANSPUSH(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). % PATH(:,k) is colum of subscripts i1 i2 ... id identifying a path in % the tree. In a bread first enumeration of the tree nodes (starting % from one and not counting the root), the node of subscripts % i1,i2,...id has index % % idx = i1 K^{d-1} + i2 K^{d-2} + ... + id % % where we assumed the indeces i1,i2,... start from 1. This formula % can be easily computed recursively. Since we also have a root % node, we need to add one. K = tree.K ; D = tree.depth ; M = (K^(D+1) - 1) / (K - 1) ; h = zeros(M, 1) ; p = zeros(1,size(path,2)) ; h(1) = size(path,2) ; for d=1:D p = p * K + double(path(d,:)) ; h = vl_binsum(h, 1, p + 1) ; end vlfeat/toolbox/kmeans/vl_hikmeanspush.m0000644000175000017500000000145112237004736017274 0ustar dimadima% VL_HIKMEANSPUSH Push data down an integer K-means tree % PATH = VL_HIKMEANSPUSH(TREE,X) quanizes the data X with the % hierachical integer K-means tree TREE. This is obtained by % calculating the path of each datum from the root of TREE down to a % leaf. Here X has a datum for each column and each column of PATH % represents the corresponding root-to-leaf path. % % Example:: % PATH(:,1) = [2 1 4] means that the first datum follows % the branches number 2, 1 and 4 starting from the root of the % HIKM tree ending to a leaf. % % See also: VL_HIKMEANS(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/kmeans/vl_kmeans.m0000644000175000017500000000454312237004745016060 0ustar dimadima%VL_KMEANS Cluster data using k-means % [C, A] = VL_KMEANS(X, NUMCENTERS) clusters the columns of the % matrix X in NUMCENTERS centers C using k-means. X may be either % SINGLE or DOUBLE. C has the same number of rows of X and NUMCENTER % columns, with one column per center. A is a UINT32 row vector % specifying the assignments of the data X to the NUMCENTER % centers. % % [C, A, ENERGY] = VL_KMEANS(...) returns the energy of the solution % (or an upper bound for the ELKAN algorithm) as well. % % KMEANS() supports different initialization and optimization % methods and different clustering distances. Specifically, the % following options are supported: % % Verbose:: % Increase the verbosity level (may be specified multiple times). % % Distance:: [L2] % Use either L1 or L2 distance. % % Initialization:: % Use either random data points (RANDSEL) or k-means++ (PLUSPLUS) % to initialize the centers. % % Algorithm:: [LLOYD] % One of LLOYD, ELKAN, or ANN. LLOYD is the standard Lloyd % algorithm (similar to expectation maximisation). ELKAN is a % faster version of LLOYD using triangular inequalities to cut % down significantly the number of sample-to-center % comparisons. ANN is the same as Lloyd, but uses an approximated % nearest neighbours (ANN) algorithm to accelerate the % sample-to-center comparisons. The latter is particularly % suitable for very large problems. % % NumRepetitions:: [1] % Number of time to restart k-means. The solution with minimal % energy is returned. % % The following options tune the KD-Tree forest used for ANN % computations in the ANN algorithm (see also VL_KDTREEBUILD() % andVL_KDTREEQUERY()). % % NumTrees:: [3] % The number of trees int the randomized KD-Tree forest. % % MaxNumComparisons:: [100] % Maximum number of sample-to-center comparisons when searching % for the closest center. % % Example:: % VL_KMEANS(X, 10, 'verbose', 'distance', 'l1', 'algorithm', % 'elkan') clusters the data point X using 10 centers, l1 % distance, and the Elkan's algorithm. % % See also: VL_HELP(). % Authors: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/kmeans/vl_ikmeans.c0000644000175000017500000001061112237004736016210 0ustar dimadima/* file: ikmeans.c ** description: MEX weighted ikmeans function. ** author: Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include #include #include #include #include enum { opt_max_niters, opt_method, opt_verbose } ; vlmxOption options [] = { {"MaxIters", 1, opt_max_niters }, {"Method", 1, opt_method }, {"Verbose", 0, opt_verbose }, {0, 0, 0 } } ; /* driver */ void mexFunction (int nout, mxArray * out[], int nin, const mxArray * in[]) { enum {IN_X = 0, IN_K, IN_END} ; enum {OUT_C = 0, OUT_I} ; int opt ; int next = IN_END ; mxArray const *optarg ; int M, N, K = 0 ; int err = 0 ; vl_uint *asgn = 0 ; vl_ikm_acc *centers = 0 ; vl_uint8 *data ; int method_type = VL_IKM_LLOYD ; int max_niters = 200 ; int verb = 0 ; VlIKMFilt *ikmf ; VL_USE_MATLAB_ENV ; /* ------------------------------------------------------------------ * Check the arguments * --------------------------------------------------------------- */ if (nin < 2) { mexErrMsgTxt ("At least two arguments required."); } else if (nout > 2) { mexErrMsgTxt ("Too many output arguments."); } if (mxGetClassID (in[IN_X]) != mxUINT8_CLASS) { mexErrMsgTxt ("X must be of class uint8"); } M = mxGetM (in[IN_X]); /* n of components */ N = mxGetN (in[IN_X]); /* n of elements */ if (!vlmxIsPlainScalar (in[IN_K]) || (K = (int) *mxGetPr(in[IN_K])) < 1 || K > N ) { mexErrMsgTxt ("K must be a positive integer not greater than the number of data."); } while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { char buf [1024] ; switch (opt) { case opt_verbose : ++ verb ; break ; case opt_max_niters : if (!vlmxIsPlainScalar(optarg) || (max_niters = (int) *mxGetPr(optarg)) < 1) { mexErrMsgTxt("MaxNiters must be not smaller than 1.") ; } break ; case opt_method : if (!vlmxIsString (optarg, -1)) { mexErrMsgTxt("'Method' must be a string.") ; } if (mxGetString (optarg, buf, sizeof(buf))) { mexErrMsgTxt("Option argument too long.") ; } if (strcmp("lloyd", buf) == 0) { method_type = VL_IKM_LLOYD ; } else if (strcmp("elkan", buf) == 0) { method_type = VL_IKM_ELKAN ; } else { mexErrMsgTxt("Unknown method type.") ; } break ; default : abort() ; } } /* ------------------------------------------------------------------ * Do the job * --------------------------------------------------------------- */ if (verb) { char const * method_name = 0 ; switch (method_type) { case VL_IKM_LLOYD: method_name = "Lloyd" ; break ; case VL_IKM_ELKAN: method_name = "Elkan" ; break ; default : abort() ; } mexPrintf("ikmeans: MaxInters = %d\n", max_niters) ; mexPrintf("ikmeans: Method = %s\n", method_name) ; } data = (vl_uint8*) mxGetPr(in[IN_X]) ; ikmf = vl_ikm_new (method_type) ; vl_ikm_set_verbosity (ikmf, verb) ; vl_ikm_set_max_niters (ikmf, max_niters) ; vl_ikm_init_rand_data (ikmf, data, M, N, K) ; err = vl_ikm_train (ikmf, data, N) ; if (err) mexWarnMsgTxt("ikmeans: possible overflow!") ; /* ------------------------------------------------------------------ * Return results * --------------------------------------------------------------- */ { out[OUT_C] = mxCreateNumericMatrix (M, K, mxINT32_CLASS, mxREAL) ; centers = mxGetData (out[OUT_C]) ; memcpy (centers, vl_ikm_get_centers (ikmf), sizeof(vl_ikm_acc) * M * K) ; } if (nout > 1) { int j ; out[OUT_I] = mxCreateNumericMatrix (1, N, mxUINT32_CLASS, mxREAL) ; asgn = mxGetData (out[OUT_I]) ; vl_ikm_push (ikmf, asgn, data, N) ; for (j = 0 ; j < N ; ++j) ++ asgn [j] ; } vl_ikm_delete (ikmf) ; if (verb) { mexPrintf("ikmeans: done\n") ; } } vlfeat/toolbox/kmeans/vl_ikmeanspush.c0000644000175000017500000000714612237004736017121 0ustar dimadima/* file: ikmeanspush.c ** description: MEX weighted ikmeanspush function. ** author: Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include #include #include #include #include enum { opt_method, opt_verbose } ; vlmxOption options [] = { {"Method", 1, opt_method }, {"Verbose", 0, opt_verbose }, {0, 0, 0 } } ; /* driver */ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum {IN_X=0,IN_C,IN_END} ; enum {OUT_ASGN=0} ; vl_uint* asgn ; vl_ikm_acc* centers ; vl_uint8* data ; int M,N,j,K=0 ; int opt ; int next = IN_END ; mxArray const *optarg ; int method_type = VL_IKM_LLOYD ; int verb = 0 ; VlIKMFilt *ikmf ; VL_USE_MATLAB_ENV ; /** ----------------------------------------------------------------- ** Check the arguments ** -------------------------------------------------------------- */ if (nin < 2) { mexErrMsgTxt("At least two arguments required.") ; } else if (nout > 2) { mexErrMsgTxt("Too many output arguments.") ; } if(mxGetClassID(in[IN_X]) != mxUINT8_CLASS) { mexErrMsgTxt("X must be of class UINT8") ; } if(mxGetClassID(in[IN_C]) != mxINT32_CLASS) { mexErrMsgTxt("C must be of class INT32") ; } M = mxGetM(in[IN_X]) ; /* n of components */ N = mxGetN(in[IN_X]) ; /* n of elements */ K = mxGetN(in[IN_C]) ; /* n of centers */ if( (int) mxGetM(in[IN_C]) != M ) { mexErrMsgTxt("DATA and CENTERS must have the same number of columns.") ; } while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { char buf [1024] ; switch (opt) { case opt_verbose : ++ verb ; break ; case opt_method : if (!vlmxIsString (optarg, -1)) { mexErrMsgTxt("'Method' must be a string.") ; } if (mxGetString (optarg, buf, sizeof(buf))) { mexErrMsgTxt("Option argument too long.") ; } if (strcmp("lloyd", buf) == 0) { method_type = VL_IKM_LLOYD ; } else if (strcmp("elkan", buf) == 0) { method_type = VL_IKM_ELKAN ; } else { mexErrMsgTxt("Unknown cost type.") ; } break ; default : abort() ; } } /** ----------------------------------------------------------------- ** Check the arguments ** -------------------------------------------------------------- */ if (verb) { char const * method_name = 0 ; switch (method_type) { case VL_IKM_LLOYD: method_name = "Lloyd" ; break ; case VL_IKM_ELKAN: method_name = "Elkan" ; break ; default : abort() ; } mexPrintf("ikmeanspush: Method = %s\n", method_name) ; mexPrintf("ikmeanspush: ndata = %d\n", N) ; } out[OUT_ASGN] = mxCreateNumericMatrix (1, N, mxUINT32_CLASS, mxREAL) ; data = (vl_uint8*) mxGetData (in[IN_X]) ; centers = (vl_ikm_acc*) mxGetData (in[IN_C]) ; asgn = (vl_uint*) mxGetData (out[OUT_ASGN]) ; ikmf = vl_ikm_new (method_type) ; vl_ikm_set_verbosity (ikmf, verb) ; vl_ikm_init (ikmf, centers, M, K) ; vl_ikm_push (ikmf, asgn, data, N) ; /* adjust for MATLAB indexing */ for(j = 0 ; j < N ; ++j) ++ asgn[j] ; vl_ikm_delete (ikmf) ; } vlfeat/toolbox/kmeans/vl_kmeans.c0000644000175000017500000002462412237004745016050 0ustar dimadima/** @file vl_kmeans.c ** @brief vl_kmeans MEX definition. ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include enum { opt_max_num_iterations, opt_algorithm, opt_distance, opt_initialization, opt_num_repetitions, opt_verbose, opt_num_comparisons, opt_num_trees, opt_multithreading } ; enum { INIT_RANDSEL, INIT_PLUSPLUS } ; vlmxOption options [] = { {"MaxNumIterations", 1, opt_max_num_iterations }, {"Algorithm", 1, opt_algorithm }, {"Distance", 1, opt_distance }, {"Verbose", 0, opt_verbose }, {"NumRepetitions", 1, opt_num_repetitions, }, {"Initialization", 1, opt_initialization }, {"Initialisation", 1, opt_initialization }, /* UK spelling */ {"NumTrees", 1, opt_num_trees }, {"MaxNumComparisons", 1, opt_num_comparisons }, {0, 0, 0 } } ; /* driver */ void mexFunction (int nout, mxArray * out[], int nin, const mxArray * in[]) { enum {IN_DATA = 0, IN_NUMCENTERS, IN_END} ; enum {OUT_CENTERS = 0, OUT_ASSIGNMENTS, OUT_ENERGY} ; int opt ; int next = IN_END ; mxArray const *optarg ; vl_size numCenters ; vl_size dimension ; vl_size numData ; void const * data = NULL ; VlKMeansAlgorithm algorithm = VlKMeansLloyd ; VlVectorComparisonType distance = VlDistanceL2 ; vl_size maxNumIterations = 100 ; vl_size numRepetitions = 1 ; double energy ; int verbosity = 0 ; int initialization = INIT_PLUSPLUS ; vl_size maxNumComparisons = 100 ; vl_size numTrees = 3; vl_type dataType ; mxClassID classID ; VlKMeans * kmeans ; VL_USE_MATLAB_ENV ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin < 2) { vlmxError (vlmxErrInvalidArgument, "At least two arguments required."); } else if (nout > 3) { vlmxError (vlmxErrInvalidArgument, "Too many output arguments."); } classID = mxGetClassID (IN(DATA)) ; switch (classID) { case mxSINGLE_CLASS: dataType = VL_TYPE_FLOAT ; break ; case mxDOUBLE_CLASS: dataType = VL_TYPE_DOUBLE ; break ; default: vlmxError (vlmxErrInvalidArgument, "DATA must be of class SINGLE or DOUBLE") ; abort() ; } dimension = mxGetM (IN(DATA)) ; numData = mxGetN (IN(DATA)) ; if (dimension == 0) { vlmxError (vlmxErrInvalidArgument, "SIZE(DATA,1) is zero") ; } if (!vlmxIsPlainScalar(IN(NUMCENTERS)) || (numCenters = (vl_size) mxGetScalar(IN(NUMCENTERS))) < 1 || numCenters > numData) { vlmxError (vlmxErrInvalidArgument, "NUMCENTERS must be a positive integer not greater " "than the number of data.") ; } while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { char buf [1024] ; switch (opt) { case opt_verbose : ++ verbosity ; break ; case opt_max_num_iterations : if (!vlmxIsPlainScalar(optarg) || mxGetScalar(optarg) < 0) { vlmxError (vlmxErrInvalidArgument, "MAXNUMITERATIONS must be a non-negative integer scalar") ; } maxNumIterations = (vl_size) mxGetScalar(optarg) ; break ; case opt_algorithm : if (!vlmxIsString (optarg, -1)) { vlmxError (vlmxErrInvalidArgument, "ALGORITHM must be a string.") ; } if (mxGetString (optarg, buf, sizeof(buf))) { vlmxError (vlmxErrInvalidArgument, "ALGORITHM argument too long.") ; } if (vlmxCompareStringsI("lloyd", buf) == 0) { algorithm = VlKMeansLloyd ; } else if (vlmxCompareStringsI("elkan", buf) == 0) { algorithm = VlKMeansElkan ; } else if (vlmxCompareStringsI("ann", buf) == 0) { algorithm = VlKMeansANN ; } else { vlmxError (vlmxErrInvalidArgument, "Invalid value %s for ALGORITHM", buf) ; } break ; case opt_initialization : if (!vlmxIsString (optarg, -1)) { vlmxError (vlmxErrInvalidArgument, "INITLAIZATION must be a string.") ; } if (mxGetString (optarg, buf, sizeof(buf))) { vlmxError (vlmxErrInvalidArgument, "INITIALIZATION argument too long.") ; } if (vlmxCompareStringsI("plusplus", buf) == 0 || vlmxCompareStringsI("++", buf) == 0) { initialization = VlKMeansPlusPlus ; } else if (vlmxCompareStringsI("randsel", buf) == 0) { initialization = VlKMeansRandomSelection ; } else { vlmxError (vlmxErrInvalidArgument, "Invalid value %s for INITIALISATION.", buf) ; } break ; case opt_distance : if (!vlmxIsString (optarg, -1)) { vlmxError (vlmxErrInvalidArgument, "DISTANCE must be a string.") ; } if (mxGetString (optarg, buf, sizeof(buf))) { vlmxError (vlmxErrInvalidArgument, "DISTANCE argument too long.") ; } if (vlmxCompareStringsI("l2", buf) == 0) { distance = VlDistanceL2 ; } else if (vlmxCompareStringsI("l1", buf) == 0) { distance = VlDistanceL1 ; } else if (vlmxCompareStringsI("chi2", buf) == 0) { distance = VlDistanceChi2 ; } else { vlmxError (vlmxErrInvalidArgument, "Invalid value %s for DISTANCE", buf) ; } break ; case opt_num_repetitions : if (!vlmxIsPlainScalar (optarg)) { vlmxError (vlmxErrInvalidArgument, "NUMREPETITIONS must be a scalar.") ; } if (mxGetScalar (optarg) < 1) { vlmxError (vlmxErrInvalidArgument, "NUMREPETITIONS must be larger than or equal to 1.") ; } numRepetitions = (vl_size) mxGetScalar (optarg) ; break ; case opt_num_trees : if (!vlmxIsPlainScalar (optarg)) { vlmxError (vlmxErrInvalidArgument, "NUMTREES must be a scalar.") ; } if (mxGetScalar (optarg) < 1) { vlmxError (vlmxErrInvalidArgument, "NUMTREES must be larger than or equal to 1.") ; } numTrees = (vl_size) mxGetScalar (optarg) ; break; case opt_num_comparisons : if (!vlmxIsPlainScalar (optarg)) { vlmxError (vlmxErrInvalidArgument, "NUMCOMPARISONS must be a scalar.") ; } if (mxGetScalar (optarg) < 0) { vlmxError (vlmxErrInvalidArgument, "NUMCOMPARISONS must be larger than or equal to 0.") ; } maxNumComparisons = (vl_size) mxGetScalar (optarg) ; break; default : abort() ; break ; } } /* ----------------------------------------------------------------- * Do the job * -------------------------------------------------------------- */ data = mxGetPr(IN(DATA)) ; kmeans = vl_kmeans_new (dataType, distance) ; vl_kmeans_set_verbosity (kmeans, verbosity) ; vl_kmeans_set_num_repetitions (kmeans, numRepetitions) ; vl_kmeans_set_algorithm (kmeans, algorithm) ; vl_kmeans_set_initialization (kmeans, initialization) ; vl_kmeans_set_max_num_iterations (kmeans, maxNumIterations) ; vl_kmeans_set_max_num_comparisons (kmeans, maxNumComparisons) ; vl_kmeans_set_num_trees (kmeans, numTrees); if (verbosity) { char const * algorithmName = 0 ; char const * initializationName = 0 ; switch (vl_kmeans_get_algorithm(kmeans)) { case VlKMeansLloyd: algorithmName = "Lloyd" ; break ; case VlKMeansElkan: algorithmName = "Elkan" ; break ; case VlKMeansANN: algorithmName = "ANN" ; break ; default : abort() ; } switch (vl_kmeans_get_initialization(kmeans)) { case VlKMeansPlusPlus : initializationName = "plusplus" ; break ; case VlKMeansRandomSelection : initializationName = "randsel" ; break ; default: abort() ; } mexPrintf("kmeans: Initialization = %s\n", initializationName) ; mexPrintf("kmeans: Algorithm = %s\n", algorithmName) ; mexPrintf("kmeans: MaxNumIterations = %d\n", vl_kmeans_get_max_num_iterations(kmeans)) ; mexPrintf("kmeans: NumRepetitions = %d\n", vl_kmeans_get_num_repetitions(kmeans)) ; mexPrintf("kmeans: data type = %s\n", vl_get_type_name(vl_kmeans_get_data_type(kmeans))) ; mexPrintf("kmeans: distance = %s\n", vl_get_vector_comparison_type_name(vl_kmeans_get_distance(kmeans))) ; mexPrintf("kmeans: data dimension = %d\n", dimension) ; mexPrintf("kmeans: num. data points = %d\n", numData) ; mexPrintf("kmeans: num. centers = %d\n", numCenters) ; mexPrintf("kmeans: max num. comparisons = %d\n", maxNumComparisons) ; mexPrintf("kmeans: num. trees = %d\n", numTrees) ; mexPrintf("\n") ; } /* -------------------------------------------------------------- */ /* Clustering and quantization */ /* -------------------------------------------------------------- */ energy = vl_kmeans_cluster(kmeans, data, dimension, numData, numCenters) ; /* copy centers */ OUT(CENTERS) = mxCreateNumericMatrix (dimension, numCenters, classID, mxREAL) ; memcpy (mxGetData(OUT(CENTERS)), vl_kmeans_get_centers (kmeans), vl_get_type_size (dataType) * dimension * vl_kmeans_get_num_centers(kmeans)) ; /* optionally qunatize */ if (nout > 1) { vl_uindex j ; vl_uint32 * assignments ; OUT(ASSIGNMENTS) = mxCreateNumericMatrix (1, numData, mxUINT32_CLASS, mxREAL) ; assignments = mxGetData (OUT(ASSIGNMENTS)) ; vl_kmeans_quantize (kmeans, assignments, NULL, data, numData) ; /* use MATLAB indexing convention */ for (j = 0 ; j < numData ; ++j) { assignments[j] += 1 ; } } /* optionally return energy */ if (nout > 2) { OUT(ENERGY) = vlmxCreatePlainScalar (energy) ; } vl_kmeans_delete (kmeans) ; } vlfeat/toolbox/kmeans/vl_ikmeanshist.m0000644000175000017500000000102012237004736017104 0ustar dimadimafunction h = vl_ikmeanshist(K,asgn) % VL_IKMEANSHIST Compute histogram of quantized data % H = VL_IKMEANSHIST(K,ASGN) computes the histogram of the IKM clusters % activated by cluster assignments ASGN. % % See also: VL_IKMEANS(), VL_IKMEANSPUSH(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). h = zeros(K,1) ; h = vl_binsum(h, 1, double(asgn)) ; vlfeat/toolbox/kmeans/vl_hikmeans.m0000644000175000017500000000272112237004736016375 0ustar dimadimafunction [tree,asgn] = vl_hikmeans(data,K,nleaves) % VL_HIKMEANS Hierachical integer K-means % [TREE,ASGN] = VL_HIKMEANS(DATA,K,NLEAVES) applies recursive integer % K-menas to cluster the data DATA, returing a structure TREE % representing the clusters and a vector ASGN with the data to % cluster assignments. The depth of the recursive partition is % computed so that at least NLEAVES are generated. % % VL_HIKMEANS() is built on top of VL_IKMEANS() and requires the data to % be of class UINT8. % % TREE is a structure representing the hierarchical clusters. Each % node of the tree is also a structure with fields: % % DEPTH:: % Depth of the tree (only at the root node) % % CENTERS:: % K cluster centers % % SUB:: % Array of K node structures representing subtrees % (this field is missing at leaves). % % ASGN is a matrix with one column per datum and height equal to the % depth of the tree. Each column encodes the branch of the tree that % correspond to each datum. % % Example:: % ASGN(:,7) = [1 5 3] means that the tree as depth equal to 3 and % that the datum X(:,7) corresponds to the branch % ROOT->SUB(1)->SUB(5)->SUB(3). % % See also: VL_HIKMEANSPUSH(), VL_HIKMEANSHIST(), VL_IKMEANS(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/kmeans/vl_ikmeanspush.m0000644000175000017500000000067312237004736017131 0ustar dimadima% VL_IKMEANSPUSH Project data on integer K-means paritions % I = VL_IKMEANSPUSH(X,C) projects the data X to the integer K-meanns % clusters of centers C returning the cluster indeces I. % % See also: VL_IKMEANS(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/kmeans/vl_hikmeans.c0000644000175000017500000001360712237004736016370 0ustar dimadima/** file: hikmeans.c ** description: MEX hierarchical ikmeans. ** author: Brian Fulkerson **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include #include #include #include #include #define NFIELDS(field_names) (sizeof(field_names)/sizeof(*field_names)) enum { opt_max_niters, opt_method, opt_verbose } ; vlmxOption options [] = { {"MaxIters", 1, opt_max_niters }, {"Method", 1, opt_method }, {"Verbose", 0, opt_verbose }, {0, 0, 0 } } ; /** ------------------------------------------------------------------ ** @internal ** @brief Copy HIKM tree node to a MATLAB structure **/ static void xcreate (mxArray *mnode, int i, VlHIKMNode *node) { int node_K = vl_ikm_get_K (node->filter) ; int M = vl_ikm_get_ndims (node->filter) ; vl_ikm_acc const *centers = vl_ikm_get_centers (node->filter) ; mxArray *mcenters ; mcenters = mxCreateNumericMatrix (M, node_K, mxINT32_CLASS, mxREAL); memcpy (mxGetPr(mcenters), centers, sizeof(vl_ikm_acc) * M * node_K) ; mxSetField (mnode, i, "centers", mcenters) ; if (node->children) { mxArray * msub ; const char * field_names[] = {"centers", "sub" } ; mwSize dims [2] ; int k ; dims[0] = 1 ; dims[1] = node_K ; msub = mxCreateStructArray (2, dims, 2, field_names) ; for (k = 0 ; k < node_K ; ++k) { xcreate (msub, k, node -> children [k]) ; } mxSetField (mnode, i, "sub", msub) ; } } /** ------------------------------------------------------------------ ** @internal ** @brief Copy HIKM tree to a MATLAB structure **/ mxArray * hikm_to_matlab (VlHIKMTree * tree) { int K = vl_hikm_get_K (tree) ; int depth = vl_hikm_get_depth (tree) ; mwSize dims [2] = {1, 1} ; mxArray *mtree ; const char *field_names[] = {"K", "depth", "centers", "sub"} ; /* Create the main struct array */ mtree = mxCreateStructArray (2, dims, NFIELDS(field_names), field_names) ; mxSetField (mtree, 0, "K", mxCreateDoubleScalar (K)) ; mxSetField (mtree, 0, "depth", mxCreateDoubleScalar (depth)) ; if (tree->root) xcreate (mtree, 0, tree->root) ; return mtree; } /** ------------------------------------------------------------------ ** @internal ** @brief MEX driver **/ void mexFunction (int nout, mxArray * out[], int nin, const mxArray * in[]) { vl_uint8 *data ; enum {IN_DATA = 0, IN_K, IN_NLEAVES, IN_END} ; enum {OUT_TREE = 0, OUT_ASGN} ; int M, N, K = 2, depth = 0 ; int opt ; int next = IN_END ; mxArray const *optarg ; int nleaves = 1 ; int method_type = VL_IKM_LLOYD ; int max_niters = 200 ; int verb = 0 ; VlHIKMTree* tree ; VL_USE_MATLAB_ENV ; /* ------------------------------------------------------------------ * Check the arguments * --------------------------------------------------------------- */ if (nin < 3) { mexErrMsgTxt ("At least three arguments required."); } else if (nout > 2) { mexErrMsgTxt ("Too many output arguments."); } if (mxGetClassID (in[IN_DATA]) != mxUINT8_CLASS) { mexErrMsgTxt ("DATA must be of class UINT8."); } if (! vlmxIsPlainScalar (in[IN_NLEAVES]) || (nleaves = (int) *mxGetPr (in[IN_NLEAVES])) < 1) { mexErrMsgTxt ("NLEAVES must be a scalar not smaller than 2.") ; } M = mxGetM (in[IN_DATA]); /* n of components */ N = mxGetN (in[IN_DATA]); /* n of elements */ if (! vlmxIsPlainScalar (in[IN_K]) || (K = (int) *mxGetPr (in[IN_K])) > N ) { mexErrMsgTxt ("Cannot have more clusters than data.") ; } data = (vl_uint8 *) mxGetPr (in[IN_DATA]) ; while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { char buf [1024] ; switch (opt) { case opt_verbose : ++ verb ; break ; case opt_max_niters : if (!vlmxIsPlainScalar(optarg) || (max_niters = (int) *mxGetPr(optarg)) < 1) { mexErrMsgTxt("MaxNiters must be not smaller than 1.") ; } break ; case opt_method : if (!vlmxIsString (optarg, -1)) { mexErrMsgTxt("'Method' must be a string.") ; } if (mxGetString (optarg, buf, sizeof(buf))) { mexErrMsgTxt("Option argument too long.") ; } if (strcmp("lloyd", buf) == 0) { method_type = VL_IKM_LLOYD ; } else if (strcmp("elkan", buf) == 0) { method_type = VL_IKM_ELKAN ; } else { mexErrMsgTxt("Unknown cost type.") ; } break ; default : abort() ; break ; } } /* --------------------------------------------------------------- * Do the job * ------------------------------------------------------------ */ depth = VL_MAX(1, ceil (log (nleaves) / log(K))) ; tree = vl_hikm_new (method_type) ; if (verb) { mexPrintf("hikmeans: # dims: %d\n", M) ; mexPrintf("hikmeans: # data: %d\n", N) ; mexPrintf("hikmeans: K: %d\n", K) ; mexPrintf("hikmeans: depth: %d\n", depth) ; } vl_hikm_set_verbosity (tree, verb) ; vl_hikm_init (tree, M, K, depth) ; vl_hikm_train (tree, data, N) ; out[OUT_TREE] = hikm_to_matlab (tree) ; if (nout > 1) { vl_uint *asgn ; int j ; out [OUT_ASGN] = mxCreateNumericMatrix (vl_hikm_get_depth (tree), N, mxUINT32_CLASS, mxREAL) ; asgn = mxGetData(out[OUT_ASGN]) ; vl_hikm_push (tree, asgn, data, N) ; for (j = 0 ; j < N*depth ; ++ j) asgn [j] ++ ; } if (verb) { mexPrintf("hikmeans: done.\n") ; } /* vl_hikm_delete (tree) ; */ } vlfeat/toolbox/kmeans/vl_ikmeans.m0000644000175000017500000000157412237004736016232 0ustar dimadima% VL_IKMEANS Integer K-means % C = VL_IKMEANS(X,K) returns the centers of a K-means paritioning of % the data space X. X must be of class UINT8. C is of class UINT32. % % [C, I] = VL_IKMEANS(...) returns the cluster associations I of the % data as well. % % VL_IKMEANS() accepts the following options: % % MaxPasses:: 200 % Maximum number of iterations before giving up (the algorithm % stops as soon as there is no change in the data to cluster % associations). % % Method:: Lloyd % Algorithm to use ('Lloyd', 'Elkan'). % % Verbose:: % Increase the verbosity level. % % See also: VL_IKMEANSPUSH(), VL_IKMEANSHIST(), VL_HIKMEANS(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/fisher/0000755000175000017500000000000012237042170013711 5ustar dimadimavlfeat/toolbox/fisher/vl_fisher.m0000644000175000017500000000260112237004745016055 0ustar dimadima% VL_FISHER Fisher vector feature encoding % ENC = VL_FISHER(X, MEANS, COVARIANCES, PRIORS) computes the % Fisher vector encoding of the vectors X relative to the Gaussian % mixture model with means MEANS, covariances COVARIANCES, and pror % mode probabilities PRIORS. % % X has one column per data vector (e.g. a SIFT descriptor), and % MEANS and COVARIANCES one column per GMM component (covariance % matrices are assumed diagonal). PRIORS has size equal to the % number of GMM components. All data must be of the smae class, % either SINGLE or DOUBLE. % % ENC is a vector of the same class of X of size equal to the % product of the data dimension and the number of components. % % By default, the standard Fisher vector is computed. VL_FISHER() % accepts the following options: % % Normalized:: % If specified, L2 normalize the Fisher vector. % % SquareRoot:: % If specified, the signed square root function is applied to % ENC before normalization. % % Verbose:: % Increase the verbosity level (may be specified multiple times). % % See: Fisher vectors, VL_HELP(). % Authors: David Novotny, Andrea Vedaldi % Copyright (C) 2013 David Novotny and Andrea Vedaldi % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/fisher/vl_fisher.c0000644000175000017500000001221412237004745016044 0ustar dimadima/** @file vl_fisher.c ** @brief vl_fisher MEX definition. ** @author Andrea Vedaldi ** @author David Novotny **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include enum { opt_verbose, opt_normalized, opt_square_root, opt_improved, opt_fast } ; vlmxOption options [] = { {"Verbose", 0, opt_verbose }, {"Normalized", 0, opt_normalized }, {"SquareRoot", 0, opt_square_root }, {"Improved", 0, opt_improved }, {"Fast", 0, opt_fast } } ; /* driver */ void mexFunction (int nout VL_UNUSED, mxArray * out[], int nin, const mxArray * in[]) { enum {IN_DATA = 0, IN_MEANS, IN_COVARIANCES, IN_PRIORS, IN_END} ; enum {OUT_ENC} ; int opt ; int next = IN_END ; mxArray const *optarg ; vl_size numClusters = 10; vl_size dimension ; vl_size numData ; int flags = 0 ; void * covariances = NULL; void * means = NULL; void * priors = NULL; void * data = NULL ; int verbosity = 0 ; vl_type dataType ; mxClassID classID ; VL_USE_MATLAB_ENV ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin < 4) { vlmxError (vlmxErrInvalidArgument, "At least four arguments required."); } if (nout > 1) { vlmxError (vlmxErrInvalidArgument, "At most one output argument."); } classID = mxGetClassID (IN(DATA)) ; switch (classID) { case mxSINGLE_CLASS: dataType = VL_TYPE_FLOAT ; break ; case mxDOUBLE_CLASS: dataType = VL_TYPE_DOUBLE ; break ; default: vlmxError (vlmxErrInvalidArgument, "DATA is neither of class SINGLE or DOUBLE.") ; } if (mxGetClassID (IN(MEANS)) != classID) { vlmxError(vlmxErrInvalidArgument, "MEANS is not of the same class as DATA.") ; } if (mxGetClassID (IN(COVARIANCES)) != classID) { vlmxError(vlmxErrInvalidArgument, "COVARIANCES is not of the same class as DATA.") ; } if (mxGetClassID (IN(PRIORS)) != classID) { vlmxError(vlmxErrInvalidArgument, "PRIORS is not of the same class as DATA.") ; } dimension = mxGetM (IN(DATA)) ; numData = mxGetN (IN(DATA)) ; numClusters = mxGetN (IN(MEANS)) ; if (dimension == 0) { vlmxError (vlmxErrInvalidArgument, "SIZE(DATA,1) is zero.") ; } if (!vlmxIsMatrix(IN(MEANS), dimension, numClusters)) { vlmxError (vlmxErrInvalidArgument, "MEANS is not a matrix or does not have the correct size.") ; } if (!vlmxIsMatrix(IN(COVARIANCES), dimension, numClusters)) { vlmxError (vlmxErrInvalidArgument, "COVARIANCES is not a matrix or does not have the correct size.") ; } if (!vlmxIsVector(IN(PRIORS), numClusters)) { vlmxError (vlmxErrInvalidArgument, "PRIORS is not a vector or does not have the correct size.") ; } if (!vlmxIsMatrix(IN(DATA), dimension, numData)) { vlmxError (vlmxErrInvalidArgument, "DATA is not a matrix or does not have the correct size.") ; } while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { switch (opt) { case opt_verbose : ++ verbosity ; break ; case opt_normalized: flags |= VL_FISHER_FLAG_NORMALIZED ; break ; case opt_square_root: flags |= VL_FISHER_FLAG_SQUARE_ROOT ; break ; case opt_improved: flags |= VL_FISHER_FLAG_IMPROVED ; break ; case opt_fast: flags |= VL_FISHER_FLAG_FAST ; break ; default : abort() ; } } /* ----------------------------------------------------------------- * Do the job * -------------------------------------------------------------- */ data = mxGetPr(IN(DATA)) ; means = mxGetPr(IN(MEANS)) ; covariances = mxGetPr(IN(COVARIANCES)) ; priors = mxGetPr(IN(PRIORS)) ; if (verbosity) { mexPrintf("vl_fisher: num data: %d\n", numData) ; mexPrintf("vl_fisher: num clusters: %d\n", numClusters) ; mexPrintf("vl_fisher: data dimension: %d\n", dimension) ; mexPrintf("vl_fisher: code dimension: %d\n", numClusters * dimension) ; mexPrintf("vl_fisher: square root: %s\n", VL_YESNO(flags & VL_FISHER_FLAG_SQUARE_ROOT)) ; mexPrintf("vl_fisher: normalized: %s\n", VL_YESNO(flags & VL_FISHER_FLAG_NORMALIZED)) ; mexPrintf("vl_fisher: fast: %s\n", VL_YESNO(flags & VL_FISHER_FLAG_FAST)) ; } /* -------------------------------------------------------------- */ /* Encoding */ /* -------------------------------------------------------------- */ OUT(ENC) = mxCreateNumericMatrix (dimension * numClusters * 2, 1, classID, mxREAL) ; vl_fisher_encode (mxGetData(OUT(ENC)), dataType, means, dimension, numClusters, covariances, priors, data, numData, flags) ; } vlfeat/toolbox/gmm/0000755000175000017500000000000012237042170013211 5ustar dimadimavlfeat/toolbox/gmm/vl_gmm.c0000644000175000017500000002716312237004745014655 0ustar dimadima/** @file vl_gmm.c ** @brief vl_gmm MEX definition. ** @author David Novotny **/ /* Copyright (C) 2013 David Novotny. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include enum { opt_max_num_iterations, opt_distance, opt_initialization, opt_num_repetitions, opt_verbose, opt_means, opt_covariances, opt_priors, opt_covariance_bound } ; vlmxOption options [] = { {"MaxNumIterations", 1, opt_max_num_iterations }, {"Verbose", 0, opt_verbose }, {"NumRepetitions", 1, opt_num_repetitions, }, {"Initialization", 1, opt_initialization }, {"Initialisation", 1, opt_initialization }, /* UK spelling */ {"InitMeans", 1, opt_means }, {"InitCovariances", 1, opt_covariances }, {"InitPriors", 1, opt_priors }, {"CovarianceBound", 1, opt_covariance_bound }, {0, 0, 0 } } ; /* driver */ void mexFunction (int nout, mxArray * out[], int nin, const mxArray * in[]) { enum {IN_DATA = 0, IN_NUMCLUSTERS, IN_END} ; enum {OUT_MEANS, OUT_COVARIANCES, OUT_PRIORS, OUT_LL, OUT_POSTERIORS} ; int opt ; int next = IN_END ; mxArray const *optarg ; vl_size i; vl_size numClusters = 10; vl_size dimension ; vl_size numData ; void * initCovariances = 0 ; void * initMeans = 0 ; void * initPriors = 0 ; double covarianceScalarBound = VL_NAN_D ; double const * covarianceBound = NULL ; void const * data = NULL ; vl_size maxNumIterations = 100 ; vl_size numRepetitions = 1 ; double LL ; int verbosity = 0 ; VlGMMInitialization initialization = VlGMMRand ; vl_bool initializationSet = VL_FALSE ; vl_type dataType ; mxClassID classID ; VlGMM * gmm ; VL_USE_MATLAB_ENV ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin < 2) { vlmxError (vlmxErrInvalidArgument, "At least two arguments required."); } else if (nout > 5) { vlmxError (vlmxErrInvalidArgument, "Too many output arguments."); } classID = mxGetClassID (IN(DATA)) ; switch (classID) { case mxSINGLE_CLASS: dataType = VL_TYPE_FLOAT ; break ; case mxDOUBLE_CLASS: dataType = VL_TYPE_DOUBLE ; break ; default: vlmxError (vlmxErrInvalidArgument, "DATA is neither of class SINGLE or DOUBLE.") ; abort() ; } dimension = mxGetM (IN(DATA)) ; numData = mxGetN (IN(DATA)) ; if (dimension == 0) { vlmxError (vlmxErrInvalidArgument, "SIZE(DATA,1) is zero.") ; } if (!vlmxIsPlainScalar(IN(NUMCLUSTERS)) || (numClusters = (vl_size) mxGetScalar(IN(NUMCLUSTERS))) < 1 || numClusters > numData) { vlmxError (vlmxErrInvalidArgument, "NUMCLUSTERS must be a positive integer not greater " "than the number of data.") ; } while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { char buf [1024] ; switch (opt) { case opt_verbose : ++ verbosity ; break ; case opt_max_num_iterations : if (!vlmxIsPlainScalar(optarg) || mxGetScalar(optarg) < 0) { vlmxError (vlmxErrInvalidArgument, "MAXNUMITERATIONS must be a non-negative integer scalar") ; } maxNumIterations = (vl_size) mxGetScalar(optarg) ; break ; case opt_covariance_bound : if (vlmxIsPlainScalar(optarg)) { covarianceScalarBound = mxGetScalar(optarg) ; continue ; } if (!vlmxIsPlainVector(optarg,dimension)) { vlmxError (vlmxErrInvalidArgument, "COVARIANCEBOUND must be a DOUBLE vector of size " "equal to the dimension of the data X.") ; } covarianceBound = mxGetPr(optarg) ; break ; case opt_priors : { if (mxGetClassID (optarg) != mxGetClassID(IN(DATA))) { vlmxError (vlmxErrInvalidArgument, "INITPRIORS is not of the same class as the data X.") ; } if (! vlmxIsVector (optarg, numClusters) || ! vlmxIsReal (optarg)) { vlmxError(vlmxErrInvalidArgument, "INITPRIORS is not a real vector or does not have the correct size.") ; } initPriors = mxGetPr(optarg) ; break ; } case opt_means : { if (mxGetClassID (optarg) != mxGetClassID(IN(DATA))) { vlmxError (vlmxErrInvalidArgument, "INITMEANS is not of the same class as the data X.") ; } if (! vlmxIsMatrix (optarg, dimension, numClusters) || ! vlmxIsReal (optarg)) { vlmxError(vlmxErrInvalidArgument, "INITMEANS is not a real matrix or does not have the correct size.") ; } initMeans = mxGetPr(optarg) ; break; } case opt_covariances : { if (mxGetClassID (optarg) != mxGetClassID(IN(DATA))) { vlmxError (vlmxErrInvalidArgument, "INITCOVARIANCES is not of the same class as the data X.") ; } if (! vlmxIsMatrix (optarg, dimension, numClusters) || ! vlmxIsReal (optarg)) { vlmxError(vlmxErrInvalidArgument, "INITCOVARIANCES is not a real matrix or does not have the correct size.") ; } initCovariances = mxGetPr(optarg) ; break; } case opt_initialization : if (!vlmxIsString (optarg, -1)) { vlmxError (vlmxErrInvalidArgument, "INITLAIZATION must be a string.") ; } if (mxGetString (optarg, buf, sizeof(buf))) { vlmxError (vlmxErrInvalidArgument, "INITIALIZATION argument too long.") ; } if (vlmxCompareStringsI("rand", buf) == 0) { initialization = VlGMMRand ; } else if (vlmxCompareStringsI("custom", buf) == 0) { initialization = VlGMMCustom ; } else if (vlmxCompareStringsI("kmeans", buf) == 0) { initialization = VlGMMKMeans ; } else { vlmxError (vlmxErrInvalidArgument, "Invalid value '%s' for INITIALIZATION.", buf) ; } initializationSet = VL_TRUE ; break ; case opt_num_repetitions : if (!vlmxIsPlainScalar (optarg)) { vlmxError (vlmxErrInvalidArgument, "NUMREPETITIONS is not a scalar.") ; } if (mxGetScalar (optarg) < 1) { vlmxError (vlmxErrInvalidArgument, "NUMREPETITIONS is not larger than or equal to 1.") ; } numRepetitions = (vl_size) mxGetScalar (optarg) ; break ; default : abort() ; break ; } } /* ----------------------------------------------------------------- * Do the job * -------------------------------------------------------------- */ data = mxGetPr(IN(DATA)) ; switch(dataType){ case VL_TYPE_DOUBLE: for(i = 0; i < numData*dimension; i++) { double datum = *((double*)data + i); if(!(datum < VL_INFINITY_D && datum > -VL_INFINITY_D)){ vlmxError (vlmxErrInvalidArgument, "DATA contains NaNs or Infs.") ; } } break; case VL_TYPE_FLOAT: for(i = 0; i < numData*dimension; i++) { float datum = *((float*)data + i); if(!(datum < VL_INFINITY_F && datum > -VL_INFINITY_F)){ vlmxError (vlmxErrInvalidArgument, "DATA contains NaNs or Infs.") ; } } break; default: abort(); break; } if (initPriors || initMeans || initCovariances) { if (!initPriors || !initMeans || !initCovariances) { vlmxError (vlmxErrInvalidArgument, "All or none of INITPRIORS, INITMEANS, " "INITCOVARIANCES must be set.") ; } if (initializationSet && initialization != VlGMMCustom) { vlmxError (vlmxErrInvalidArgument, "INITPRIORS, INITMEANS, and " "INITCOVARIANCES requires 'custom' INITALIZATION.") ; } initialization = VlGMMCustom ; } gmm = vl_gmm_new (dataType, dimension, numClusters) ; vl_gmm_set_verbosity (gmm, verbosity) ; vl_gmm_set_num_repetitions (gmm, numRepetitions) ; vl_gmm_set_max_num_iterations (gmm, maxNumIterations) ; vl_gmm_set_initialization (gmm, initialization) ; if (!vl_is_nan_d(covarianceScalarBound)) { vl_gmm_set_covariance_lower_bound (gmm, covarianceScalarBound) ; } if (covarianceBound) { vl_gmm_set_covariance_lower_bounds (gmm, covarianceBound) ; } if (initPriors) { vl_gmm_set_priors(gmm, initPriors) ; } if (initMeans) { vl_gmm_set_means(gmm, initMeans) ; } if (initCovariances) { vl_gmm_set_covariances(gmm, initCovariances) ; } if (verbosity) { char const * initializationName = 0 ; switch (vl_gmm_get_initialization(gmm)) { case VlGMMRand : initializationName = "rand" ; break ; case VlGMMKMeans : initializationName = "kmeans" ; break ; case VlGMMCustom : initializationName = "custom" ; break ; default: abort() ; } mexPrintf("vl_gmm: initialization = %s\n", initializationName) ; mexPrintf("vl_gmm: maxNumIterations = %d\n", vl_gmm_get_max_num_iterations(gmm)) ; mexPrintf("vl_gmm: numRepetitions = %d\n", vl_gmm_get_num_repetitions(gmm)) ; mexPrintf("vl_gmm: data type = %s\n", vl_get_type_name(vl_gmm_get_data_type(gmm))) ; mexPrintf("vl_gmm: data dimension = %d\n", dimension) ; mexPrintf("vl_gmm: num. data points = %d\n", numData) ; mexPrintf("vl_gmm: num. Gaussian modes = %d\n", numClusters) ; mexPrintf("vl_gmm: lower bound on covariance = [") ; if (dimension < 3) { for (i = 0 ; i < dimension ; ++i) { mexPrintf(" %f", vl_gmm_get_covariance_lower_bounds(gmm)[i]) ; } } else { mexPrintf(" %f %f ... %f", vl_gmm_get_covariance_lower_bounds(gmm)[0], vl_gmm_get_covariance_lower_bounds(gmm)[1], vl_gmm_get_covariance_lower_bounds(gmm)[dimension-1]) ; } mexPrintf("]\n") ; } /* -------------------------------------------------------------- */ /* Clustering */ /* -------------------------------------------------------------- */ LL = vl_gmm_cluster(gmm, data, numData) ; /* copy centers */ OUT(MEANS) = mxCreateNumericMatrix (dimension, numClusters, classID, mxREAL) ; OUT(COVARIANCES) = mxCreateNumericMatrix (dimension, numClusters, classID, mxREAL) ; OUT(PRIORS) = mxCreateNumericMatrix (numClusters, 1, classID, mxREAL) ; OUT(POSTERIORS) = mxCreateNumericMatrix (numClusters, numData, classID, mxREAL) ; memcpy (mxGetData(OUT(MEANS)), vl_gmm_get_means (gmm), vl_get_type_size (dataType) * dimension * vl_gmm_get_num_clusters(gmm)) ; memcpy (mxGetData(OUT(COVARIANCES)), vl_gmm_get_covariances (gmm), vl_get_type_size (dataType) * dimension * vl_gmm_get_num_clusters(gmm)) ; memcpy (mxGetData(OUT(PRIORS)), vl_gmm_get_priors (gmm), vl_get_type_size (dataType) * vl_gmm_get_num_clusters(gmm)) ; /* optionally return loglikelihood */ if (nout > 3) { OUT(LL) = vlmxCreatePlainScalar (LL) ; } /* optionally return posterior probabilities */ if (nout > 4) { memcpy (mxGetData(OUT(POSTERIORS)), vl_gmm_get_posteriors (gmm), vl_get_type_size (dataType) * numData * vl_gmm_get_num_clusters(gmm)) ; } vl_gmm_delete (gmm) ; } vlfeat/toolbox/gmm/vl_gmm.m0000644000175000017500000000470312237004745014662 0ustar dimadima% Vl_GMM Learn a Gaussian Mixture Model using EM % [MEANS, COVARIANCES, PRIORS] = VL_GMM(X, NUMCLUSTERS) fits a GMM with % NUMCLUSTERS components to the data X. Each column of X represent a % sample point. X may be either SINGLE or DOUBLE. MEANS, COVARIANCES, and % PRIORS are respectively the means, the diagonal covariances, and % the prior probabilities of the Guassian modes. MEANS and COVARIANCES % have the same number of rows as X and NUMCLUSTERS columns with one % column per mode. PRIORS is a row vector with NUMCLUSTER entries % summing to one. % % [MEANS, COVARIANCES, PRIORS, LL] = VL_GMM(...) returns the % loglikelihood (LL) of the model as well. % % [MEANS, COVARIANCES, PRIORS, LL, POSTERIORS] = VL_GMM(...) returns % the posterior probabilities POSTERIORS of the Gaussian modes given % each data point. The POSTERIORS matrix has NUMCLUSTERS rows and % NUMDATA columns. % % VL_GMM() supports different initialization and optimization % methods. Specifically, the following options are supported: % % Verbose:: % Increase the verbosity level (may be specified multiple times). % % Initialization:: RAND % RAND initializes the means as random data poitns and the % covaraince matrices as the covariance of X. CUSTOM allow % specifying the initial means, covariances, and prior % probabilities. % % InitMeans:: none % Specify the initial means (size(X,1)-by-NUMCLUSTERS matrix). % % InitPriors:: none % Specify the initial weights (a vector of dimension NUMCLUSTER). % % InitCovariances:: none % Specify the initial diagonal covariance matrices % % NumRepetitions:: 1 % Number of times to restart EM. The solution with maximum % loglikelihood is returned. % % CovarianceBound:: 10e-6 % Set the lower bound on the diagonal covariance values. % The bound can be either a scalar or a vector with one % entry per dimension. Using null bounds is possible, but % may yield degenerate solutions, including NaNs. % % Example:: % VL_GMM(X, 10, 'verbose', 'MaxNumIterations', 20) estimates the % mixture of 10 gaussians using at mosst 20 iterations. % % See also: GMMs, VL_KMEANS(), VL_HELP(). % Authors: David Novotny and Andrea Vedaldi % Copyright (C) 2013 David Novotny and Andrea Vedaldi. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/vl_harris.m0000644000175000017500000000733212237004736014613 0ustar dimadimafunction [H,details] = vl_harris(I,si,alpha) % VL_HARRIS Harris corner strength % H = VL_HARRIS(I,SI) computes the Harris corner strength of the image I % at ``integration'' scale SI. % % The Harris strength [1] of a pixel is a statistic of the gradient % of the image integrated in a neighborhood of that pixel. This % neighborhood is a Gaussian window of variance SI. % % In computing the Harris corner strength, there is a second scale % parameter, the ``derivation'' scale SD, which is the variance of % the Gaussian kernel used to pre-smooth the image I before computing % its gradient. SI and SD are independent parameters and VL_HARRIS(I,SI) % assumes that I is already smoothed at level SD. % % VL_HARRIS(I,SI) uses Noble's variation [2] of the Harris score. If % SIGMAP and SIGMAM are respectively the biggest and smallest % eigenvalue of the structure tensor at a pixel, the score is given % by (SIGMAP*SIGMAM) / (SIGMAP+SIGMAM/2). Let GAMMA = SIGMAM/SIGMAP % the ratio between the eigenvalues, which measures the degree of % anisotropy of the tensor and is always comprised in the range % [0,1]. Noble's score can be decomposed in two factors: the biggest % eigenvalue SIGMAP and the number % % RHO = (2 GAMMA) / (GAMMA + 1). % % RHO is another measure of isotropy that has value one for a % symmetric tensor and and zero for maximally anisotropic tensor. % [H,DETAILS] = VL_HARRIS(I,SIGMA) returns the additional structure % DETAILS with the following fields: % % DETAILS.SIGMAP % DETAILS.RHO % % VL_HARRIS(I,SI,ALPHA) uses Harris' original score [1], defined to be % SIGMAP*SIGMAM - ALPHA*(SIGMAP+SIGMAM)^2. This can be decomposed in % the factors SIGMAP^2 (note the square) and % % RHO = GAMMA - ALPHA (1+GAMMA)^2. % % Note that RHO is equal to -ALPHA for a maximally anisotropic % tensor. Typically ALPHA=0.04 and this is what is used by % VL_HARRIS(I,SI,[]). % % REMARK. The gradient of the image I, used to compute the structure % tensor, is computed using central differencies. This means that a % function line [+1,-1,+1,...] has null Harris' score. This is % generally assumed to be a sampling artifact, and might be % avoided by oversampling the image. % % EXAMPLE:: % To extacts Harris points from image I: % idx = vl_localmax( vl_harris( vl_imsmooth( I, sd ), si ) ) ; % [i,j] = ind2sub( size(I), idx ) % % REFERENCES:: % [1] C. Harris and M. Stephens, "A combined corner and edge detector," % in Proceedings of The Fourth Alvey Vision Conference, pp. 147-151, % 1988. % % [2] J. A. Noble, "Finding corners, "Image Vision Computing, vol. 6, % no. 2, pp. 121-128, 1988. % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). [Ix,Iy] = gradient(I) ; H11 = vl_imsmooth(Ix.*Ix, si) ; H12 = vl_imsmooth(Ix.*Iy, si) ; H22 = vl_imsmooth(Iy.*Iy, si) ; if nargin > 2 % Harris' original if isempty(alpha) alpha = 0.04 ; end H = (H11.*H22 - H12.^2) - alpha*(H11+H22).^2 ; else % Noble's variation H = 2 * (H11.*H22 - H12.^2)./(H11+H22+eps) ; end % ------------------------------------------------------------------- % Extract auxiliary info % ------------------------------------------------------------------- if nargout > 1 tr = H11 + H22 ; dt = H11.*H22 - H12.^2 ; Lm = 0.5 * (tr - sqrt(tr.^2 - 4*dt)); Lp = 0.5 * (tr + sqrt(tr.^2 - 4*dt)); Lm = real(Lm) ; Lp = real(Lp) ; gamma=sqrt(Lm./Lp) ; details.sigmap = Lp ; if nargin > 2 details.rho = gamma - alpha * (1+gamma).^2 ; else details.rho = 2*gamma ./ (1 + gamma) ; end end vlfeat/toolbox/imop/0000755000175000017500000000000012237042170013375 5ustar dimadimavlfeat/toolbox/imop/vl_imintegral.m0000644000175000017500000000131412237004736016414 0ustar dimadima% VL_IMINTEGRAL Compute integral image % J = VL_IMINTEGRAL(I) calculates the integral image J of the image % I. I must a matrix with DOUBLE, SINGLE, UINT32, or INT32 storage % class. J is given by % % J(i,j) = sum(I(1:i,1:j)). % % J has the same size as I and the same storage class. % % Example:: % The following identity holds: % VL_IMINTEGRAL(ONES(3)) = [ 1 2 3 ; % 2 4 6 ; % 3 6 9 ] % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/imop/vl_imreadbw.m0000644000175000017500000000121212237004736016050 0ustar dimadimafunction I = vl_imreadgray(file,varargin) % VL_IMREADGRAY Reads an image as gray-scale % I=VL_IMREADGRAY(FILE) reads the image from file FILE and converts the % result to a gray scale image (DOUBLE storage class ranging in % [0,1]). % % VL_IMREADGRAY(FILE,FMT) specifies the file format FMT (see IMREAD()). % % See also: RGB2DOUBLE(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). I = imread(file) ; I = im2double(I) ; if(size(I,3) > 1) I = rgb2gray(I) ; end vlfeat/toolbox/imop/vl_rgb2xyz.m0000644000175000017500000000254212237004736015674 0ustar dimadimafunction J=vl_rgb2xyz(I,ws) % VL_RGB2XYZ Convert RGB color space to XYZ % J=VL_RGB2XYZ(I) converts the CIE RGB image I to the image J in % CIE XYZ format. CIE RGB has a white point of R=G=B=1.0 % % VL_RGB2XYZ(I,WS) uses the specified RGB working space WS. The % function supports the following RGB working spaces: % % * `CIE' E illuminant, gamma=2.2 % * `Adobe' D65 illuminant, gamma=2.2 % % The default workspace is CIE. % % See also: VL_XYZ2RGB(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). [M,N,K] = size(I) ; if K~=3 error('I must be a MxNx3 array.') ; end I=im2double(I) ; if(nargin < 2) workspace = 'CIE' ; else workspace = ws ; end switch workspace case 'CIE' % CIE: E illuminant and 2.2 gamma A = [ 0.488718 0.176204 0.000000 0.310680 0.812985 0.0102048 0.200602 0.0108109 0.989795 ]' ; gamma = 2.2 ; case 'Adobe' % Adobe 1998: D65 illuminant and 2.2 gamma A = [ 0.576700 0.297361 0.0270328 0.185556 0.627355 0.0706879 0.188212 0.0752847 0.99124 ]' ; gamma = 2.2 ; end [M,N,K] = size(I) ; I = reshape(I.^gamma, M*N, K) ; J = A*I' ; J = reshape(J', M, N, K) ; vlfeat/toolbox/imop/vl_xyz2rgb.m0000644000175000017500000000221112237004736015665 0ustar dimadimafunction J=vl_xyz2rgb(I,ws) % VL_XYZ2RGB Convert XYZ to RGB % J = VL_XYZ2RGB(I) the XYZ image I in RGB format. % % VL_XYZ2RGB(I,WS) uses the RGB workspace WS. WS is a string in % % - CIE: E illuminant and 2.2 gamma % - Adobe: D65 illuminant and 2.2 gamma % % The default workspace is CIE. % % See also: VL_RGB2XYZ(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if(nargin < 2) workspace = 'CIE' ; else workspace = ws ; end switch workspace case 'CIE' % CIE: E illuminant and 2.2 gamma A = [ 0.488718 0.176204 0.000000 0.310680 0.812985 0.0102048 0.200602 0.0108109 0.989795 ]' ; gamma = 2.2 ; case 'Adobe' % Adobe 1998: D65 illuminant and 2.2 gamma A = [ 0.576700 0.297361 0.0270328 0.185556 0.627355 0.0706879 0.188212 0.0752847 0.99124 ]' ; gamma = 2.2 ; end [M,N,K] = size(I) ; I = reshape(I, M*N, K) ; J = inv(A)*I' ; J = reshape(J'.^(1/gamma), M, N, K) ; vlfeat/toolbox/imop/vl_imgrad.m0000644000175000017500000000304312237004736015525 0ustar dimadimafunction [Fx,Fy] = vl_imgrad(F,varargin) ; % VL_IMGRAD Image gradient % [Fx,Fy] = VL_GRAD(F) returns the finite differencies gradient of the % image F. The function uses central differencies and for all but % the boundaries pixels, for which it uses forward/backward % differencies as appropriate. % % VL_GRAD(F,'forward') uses only forward differencies (except on the % lower and right boundaries, where backward difference is used). % Similarly, VL_GRAD(F,'backward') uses only backward differencies. % % See also: GRADIENT(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). type = 'central' ; % forward, backward for k=1:2:length(varargin) switch varargin{k} case 'Type' type = varargin{k+1} ; otherwise error(['Parameter ''', varargin{k}, ''' unknown']) ; end end [M,N]=size( F ) ; switch type case 'central' Fx = [ F(:,2)-F(:,1) , ... 0.5*(F(:,3:end)-F(:,1:end-2)) , F(:,end)-F(:,end-1) ] ; Fy = [ F(2,:)-F(1,:) ; ... 0.5*(F(3:end,:)-F(1:end-2,:)) ; F(end,:)-F(end-1,:) ] ; case 'forward' Fx = [ F(:,2:end)-F(:,1:end-1) , F(:,end)-F(:,end-1) ] ; Fy = [ F(2:end,:)-F(1:end-1,:) ; F(end,:)-F(end-1,:) ] ; case 'backward' Fx = [ F(:,2)-F(:,1) , F(:,2:end)-F(:,1:end-1)] ; Fy = [ F(2,:)-F(1,:) ; F(2:end,:)-F(1:end-1,:)] ; otherwise error(['Difference type ''', type, ''' unknown']) ; end vlfeat/toolbox/imop/vl_imup.m0000644000175000017500000000142212237004736015233 0ustar dimadimafunction J = vl_imup(I) % VL_IMUP Upsample an image by two % J=VL_IMUP(I) doubles the resolution of the image I by using % bilinear interpolation. % % See also: VL_IMDOWN(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). [M,N,K] = size(I) ; J = zeros(2*M,2*N,K) ; J(1:2:end,1:2:end,:) = I ; J(2:2:end,1:2:end,:) = 0.5*(I+[I(2:end,:,:);I(end,:,:)]) ; J(1:2:end,2:2:end,:) = 0.5*(I+[I(:,2:end,:),I(:,end,:)]) ; J(2:2:end,2:2:end,:) = ... 0.25*(... J(2:2:end,1:2:end-1,:)+... J(1:2:end-1,2:2:end,:)+... [J(2:2:end,3:2:end,:),J(2:2:end,end-1,:)]+... [J(3:2:end,2:2:end,:);J(end-1,2:2:end,:)]) ; vlfeat/toolbox/imop/vl_imwbackwardmx.c0000644000175000017500000001365712237004736017124 0ustar dimadima/* file: imwbackward.c ** author: Andrea Vedaldi ** description: Backward projection of an image. **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /* TODO. * - Make a faster version for the uniform grid case. * - Rename variables. */ #include #include #include #include /** Matlab driver. **/ #define greater(a,b) (a) > (b) #define getM(arg) mxGetM(in[arg]) #define getN(arg) mxGetN(in[arg]) #define getPr(arg) mxGetPr(in[arg]) VL_INLINE int findNeighbor(double x, const double* X, int K) { int i = 0 ; int j = K - 1 ; int pivot = 0 ; double y = 0 ; if(x < X[i]) return i-1 ; if(x >= X[j]) return j ; while(i < j - 1) { pivot = (i+j) >> 1 ; y = X[pivot] ; /*mexPrintf("%d %d %d %f %f\n",i,j,pivot,x,y) ;*/ if(x < y) { j = pivot ; } else { i = pivot ; } } return i ; } void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum { X=0,Y,I,iwXp,iwYp } ; enum { wI=0, wIx, wIy } ; int M, N, Mp, Np, ip, jp ; double *X_pt, *Y_pt, *I_pt, *iwXp_pt, *iwYp_pt, *wI_pt, *wIx_pt = 0, *wIy_pt = 0 ; double Xmin, Xmax, Ymin, Ymax ; const double NaN = mxGetNaN() ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin < 5) { vlmxError (vlmxErrNotEnoughInputArguments, NULL) ; } if (nin > 5) { vlmxError (vlmxErrTooManyOutputArguments, NULL) ; } if (nout > 3) { vlmxError (vlmxErrTooManyOutputArguments, NULL) ; } if (! vlmxIsPlainMatrix(in[I], -1, -1)) { vlmxError (vlmxErrInvalidArgument, "I is not a plain matrix.") ; } if (! vlmxIsPlainMatrix(in[iwXp], -1, -1)) { vlmxError(vlmxErrInvalidArgument, "iwXp is not a plain matrix.") ; } M = getM(I) ; N = getN(I) ; Mp = getM(iwXp) ; Np = getN(iwXp) ; if(!vlmxIsPlainMatrix(in[iwYp], Mp, Np)) { vlmxError(vlmxErrInvalidArgument, "iwXp is not a plain matrix of the same idmension of iwYp.") ; } if(!vlmxIsPlainVector(in[X],N) || !vlmxIsPlainVector(in[Y],M)) { vlmxError(vlmxErrInvalidArgument, "X and Y are not plain vectors with a length equal to the" " number of columns and rows of I.") ; } X_pt = getPr(X); Y_pt = getPr(Y) ; I_pt = getPr(I) ; iwXp_pt = getPr(iwXp) ; iwYp_pt = getPr(iwYp) ; /* Allocate the result. */ out[wI] = mxCreateDoubleMatrix(Mp, Np, mxREAL) ; wI_pt = mxGetPr(out[wI]) ; if (nout > 1) { out[wIx] = mxCreateDoubleMatrix(Mp, Np, mxREAL) ; out[wIy] = mxCreateDoubleMatrix(Mp, Np, mxREAL) ; wIx_pt = mxGetPr (out[wIx]) ; wIy_pt = mxGetPr (out[wIy]) ; } /* ----------------------------------------------------------------- * Do the job * -------------------------------------------------------------- */ Xmin = X_pt [0] ; Xmax = X_pt [N - 1] ; Ymin = Y_pt [0] ; Ymax = Y_pt [M - 1] ; if (nout <= 1) { /* optimized for only image output */ for(jp = 0 ; jp < Np ; ++jp) { for(ip = 0 ; ip < Mp ; ++ip) { /* Search for the four neighbors of the backprojected point. */ double x = *iwXp_pt++ ; double y = *iwYp_pt++ ; double z = NaN ; /* This messy code allows the identity transformation * to be processed as expected. */ if(x >= Xmin && x <= Xmax && y >= Ymin && y <= Ymax) { int j = findNeighbor(x, X_pt, N) ; int i = findNeighbor(y, Y_pt, M) ; double* pt = I_pt + j*M + i ; /* Weights. */ double x0 = X_pt[j] ; double x1 = (j < N-1) ? X_pt[j+1] : x0 + 1; double y0 = Y_pt[i] ; double y1 = (i < M-1) ? Y_pt[i+1] : y0 + 1; double wx = (x-x0)/(x1-x0) ; double wy = (y-y0)/(y1-y0) ; /* Load all possible neighbors. */ double z00 = 0.0 ; double z10 = 0.0 ; double z01 = 0.0 ; double z11 = 0.0 ; if(j > -1) { if(i > -1 ) z00 = *pt ; pt++ ; if(i < M-1) z10 = *pt ; } else { pt++ ; } pt += M - 1; if(j < N-1) { if(i > -1 ) z01 = *pt ; pt++ ; if(i < M-1) z11 = *pt ; } /* Bilinear interpolation. */ z = (1 - wy) * ((1-wx) * z00 + wx * z01) + ( wy) * ((1-wx) * z10 + wx * z11) ; } *(wI_pt + jp*Mp + ip) = z ; } } } /* do also the derivatives */ else { /* optimized for only image output */ for(jp = 0 ; jp < Np ; ++jp) { for(ip = 0 ; ip < Mp ; ++ip) { /* Search for the four neighbors of the backprojected point. */ double x = *iwXp_pt++ ; double y = *iwYp_pt++ ; double z = NaN, zx = NaN, zy = NaN ; /* This messy code allows the identity transformation * to be processed as expected. */ if(x >= Xmin && x <= Xmax && y >= Ymin && y <= Ymax) { int j = findNeighbor(x, X_pt, N) ; int i = findNeighbor(y, Y_pt, M) ; double* pt = I_pt + j*M + i ; /* Weights. */ double x0 = X_pt[j] ; double x1 = X_pt[j+1] ; double y0 = Y_pt[i] ; double y1 = Y_pt[i+1] ; double wx = (x-x0)/(x1-x0) ; double wy = (y-y0)/(y1-y0) ; /* Load all possible neighbors. */ double z00 = 0.0 ; double z10 = 0.0 ; double z01 = 0.0 ; double z11 = 0.0 ; if(j > -1) { if(i > -1 ) z00 = *pt ; pt++ ; if(i < M-1) z10 = *pt ; } else { pt++ ; } pt += M - 1; if(j < N-1) { if(i > -1 ) z01 = *pt ; pt++ ; if(i < M-1) z11 = *pt ; } /* Bilinear interpolation. */ z = (1-wy)*( (1-wx) * z00 + wx * z01) + wy*( (1-wx) * z10 + wx * z11) ; zx = (1-wy) * (z01 - z00) + wy * (z11 - z10) ; zy = (1-wx) * (z10 - z00) + wx * (z11 - z01) ; } *(wI_pt + jp*Mp + ip) = z ; *(wIx_pt + jp*Mp + ip) = zx ; *(wIy_pt + jp*Mp + ip) = zy ; } } } } vlfeat/toolbox/imop/vl_imdisttf.m0000644000175000017500000000211412237004736016103 0ustar dimadima% VL_IMDISTTF Image distance transform % DT = VL_IMDISTTF(I) computes the distance transform of image I. % The distance transform is defined as % % DT(x,y) = min_{u,v} I(u,v) + (u - x)^2 + (v - y)^2. % % [D, INDEXES] = VL_IMDISTTF(...) returns a matrix INDEXES that % contains for each pixel (x,y) the index of the pixel (u,v) which % is the minimizer of the distance transform objective. % % VL_IMDSITTF(I, PARAM) uses differenet parameters for the % transform: % % DT(u,v) = min_{u,v} I(u,v) + PARAM(1) (u - x - PARAM(2))^2 % + PARAM(3) (v - y - PARAM(4))^2 % % The function uses the fast algorithm from [1]. % % REFERENCES:: % [1] P. F. Felzenszwalb and D. P. Huttenlocher. Distance transforms % of sampled functions. Technical report, Cornell University, 2004. % % See also: VL_HELP(). % Author:: Andrea Vedaldi % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/imop/vl_tps.m0000644000175000017500000000253112237004736015071 0ustar dimadimafunction [phi,S] = vl_tps(x1,x2,Y) % VL_TPS Compute the thin-plate spline basis % PHI=VL_TPS(X1,X2,Y) returns the basis PHI of a thin-plate spline % (TPS) defined on the domain X1,X2 with control points Y. % % X1 and X2 are MxN matrices specifying the grid vertices. When % warping images, these usually correspond to image pixels. % % Y is a 2xK matrix specifying the control points, one per % column. Ofthen Y is a subset of the domain X1,X2, but this is not % required. % % PHI is a (K+3)xNxM matrix, with one layer per basis element. Each % basis element is a function of the domain X1,X2. % % [PHI,S] = VL_TPS(X1,X2,Y) additionally returns the stiffness matrix S % of the TPS. % % See also: VL_WTPS(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). X = [x1(:)';x2(:)'] ; K = size(Y,2) ; Q = size(X,2) ; U = vl_tpsu(Y,Y) ; L = [[ones(1,K); Y], zeros(3) ; U, ones(K,1), Y'] ; invL = inv(L) ; tmp = vl_tpsu(Y,X) ; phi = invL * [ ones(1,Q) ; X(1,:) ; X(2,:) ; tmp ] ; [M,N] = size(x1) ; phi = reshape(phi,K+3,M,N) ; if nargout > 1 % See Bookstein; note that here the terms are re-arranged a bit invLn = invL(1:K, end-K+1:end) ; S = invLn * U * invLn ; end vlfeat/toolbox/imop/vl_impattern.m0000644000175000017500000001533412237004745016273 0ustar dimadimafunction im = vl_impattern(varargin) % VL_IMPATTERN Generate an image from a stock pattern % IM=VLPATTERN(NAME) returns an instance of the specified % pattern. These stock patterns are useful for testing algoirthms. % % All generated patterns are returned as an image of class % DOUBLE. Both gray-scale and colour images have range in [0,1]. % % VL_IMPATTERN() without arguments shows a gallery of the stock % patterns. The following patterns are supported: % % Wedge:: % The image of a wedge. % % Cone:: % The image of a cone. % % SmoothChecker:: % A checkerboard with Gaussian filtering on top. Use the % option-value pair 'sigma', SIGMA to specify the standard % deviation of the smoothing and the pair 'step', STEP to specfity % the checker size in pixels. % % ThreeDotsSquare:: % A pattern with three small dots and two squares. % % UniformNoise:: % Random i.i.d. noise. % % Blobs: % Gaussian blobs of various sizes and anisotropies. % % Blobs1: % Gaussian blobs of various orientations and anisotropies. % % Blob: % One Gaussian blob. Use the option-value pairs 'sigma', % 'orientation', and 'anisotropy' to specify the respective % parameters. 'sigma' is the scalar standard deviation of an % isotropic blob (the image domain is the rectangle % [-1,1]^2). 'orientation' is the clockwise rotation (as the Y % axis points downards). 'anisotropy' (>= 1) is the ratio of the % the largest over the smallest axis of the blob (the smallest % axis length is set by 'sigma'). Set 'cut' to TRUE to cut half % half of the blob. % % A stock image:: % Any of 'box', 'roofs1', 'roofs2', 'river1', 'river2', 'spotted'. % % All pattern accept a SIZE parameter [WIDTH,HEIGHT]. For all but % the stock images, the default size is [128,128]. % Author: Andrea Vedaldi % Copyright (C) 2012 Andrea Vedaldi. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if nargin > 0 pattern=varargin{1} ; varargin=varargin(2:end) ; else pattern = 'gallery' ; end patterns = {'wedge','cone','smoothChecker','threeDotsSquare', ... 'blob', 'blobs', 'blobs1', ... 'box', 'roofs1', 'roofs2', 'river1', 'river2'} ; % spooling switch lower(pattern) case 'wedge', im = wedge(varargin) ; case 'cone', im = cone(varargin) ; case 'smoothchecker', im = smoothChecker(varargin) ; case 'threedotssquare', im = threeDotSquare(varargin) ; case 'uniformnoise', im = uniformNoise(varargin) ; case 'blob', im = blob(varargin) ; case 'blobs', im = blobs(varargin) ; case 'blobs1', im = blobs1(varargin) ; case {'box','roofs1','roofs2','river1','river2','spots'} im = stockImage(pattern, varargin) ; case 'gallery' clf ; num = numel(patterns) ; for p = 1:num vl_tightsubplot(num,p,'box','outer') ; imagesc(vl_impattern(patterns{p}),[0 1]) ; axis image off ; title(patterns{p}) ; end colormap gray ; return ; otherwise error('Unknown patter ''%s''.', pattern) ; end if nargout == 0 clf ; imagesc(im) ; hold on ; colormap gray ; axis image off ; title(pattern) ; clear im ; end function [u,v,opts,args] = commonOpts(args) opts.size = [128 128] ; [opts,args] = vl_argparse(opts, args) ; ur = linspace(-1,1,opts.size(2)) ; vr = linspace(-1,1,opts.size(1)) ; [u,v] = meshgrid(ur,vr); function im = wedge(args) [u,v,opts,args] = commonOpts(args) ; im = abs(u) + abs(v) > (1/4) ; im(v < 0) = 0 ; function im = cone(args) [u,v,opts,args] = commonOpts(args) ; im = sqrt(u.^2+v.^2) ; im = im / max(im(:)) ; function im = smoothChecker(args) opts.size = [128 128] ; opts.step = 16 ; opts.sigma = 2 ; opts = vl_argparse(opts, args) ; [u,v] = meshgrid(0:opts.size(1)-1, 0:opts.size(2)-1) ; im = xor((mod(u,opts.step*2) < opts.step),... (mod(v,opts.step*2) < opts.step)) ; im = double(im) ; im = vl_imsmooth(im, opts.sigma) ; function im = threeDotSquare(args) [u,v,opts,args] = commonOpts(args) ; im = ones(size(u)) ; im(-2/3 0) ; end function im = blobs1(args) [u,v,opts,args] = commonOpts(args) ; opts.number = 5 ; opts.sigma = [] ; opts = vl_argparse(opts, args) ; im = zeros(size(u)) ; square = 2 / opts.number ; num = opts.number ; if isempty(opts.sigma) sigma = 1/6 * square ; else sigma = opts.sigma * square ; end rotations = linspace(0,pi,num+1) ; rotations(end) = [] ; skews = linspace(1,2,num) ; for i=1:num for j=1:num cy = (i-1) * square + square/2 - 1; cx = (j-1) * square + square/2 - 1; th = rotations(i) ; R = [cos(th) -sin(th); sin(th) cos(th)] ; A = sigma * R * diag([1 1/skews(j)]) ; C = inv(A*A') ; x = u - cx ; y = v - cy ; im = im + exp(-0.5 *(x.*x*C(1,1) + y.*y*C(2,2) + 2*x.*y*C(1,2))) ; end end im = im / max(im(:)) ; function im = uniformNoise(args) opts.size = [128 128] ; opts.seed = 1 ; opts = vl_argparse(opts, args) ; state = vl_twister('state') ; vl_twister('state',opts.seed) ; im = vl_twister(opts.size([2 1])) ; vl_twister('state',state) ; function im = stockImage(pattern,args) opts.size = [] ; opts = vl_argparse(opts, args) ; switch pattern case 'river1', path='river1.jpg' ; case 'river2', path='river2.jpg' ; case 'roofs1', path='roofs1.jpg' ; case 'roofs2', path='roofs2.jpg' ; case 'box', path='box.pgm' ; case 'spots', path='spots.jpg' ; end im = imread(fullfile(vl_root,'data',path)) ; im = im2double(im) ; if ~isempty(opts.size) im = imresize(im, opts.size) ; im = max(im,0) ; im = min(im,1) ; end vlfeat/toolbox/imop/vl_xyz2lab.m0000644000175000017500000000304212237004736015654 0ustar dimadimafunction J=vl_xyz2lab(I,il) % VL_XYZ2LAB Convert XYZ color space to LAB % J = VL_XYZ2LAB(I) converts the image from XYZ format to LAB format. % % VL_XYZ2LAB(I,IL) uses one of the illuminants A, B, C, E, D50, D55, % D65, D75, D93. The default illuminatn is E. % % See also: VL_XYZ2LUV(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if nargin < 2 il='E' ; end switch lower(il) case 'a' xw = 0.4476 ; yw = 0.4074 ; case 'b' xw = 0.3324 ; yw = 0.3474 ; case 'c' xw = 0.3101 ; yw = 0.3162 ; case 'e' xw = 1/3 ; yw = 1/3 ; case 'd50' xw = 0.3457 ; yw = 0.3585 ; case 'd55' xw = 0.3324 ; yw = 0.3474 ; case 'd65' xw = 0.312713 ; yw = 0.329016 ; case 'd75' xw = 0.299 ; yw = 0.3149 ; case 'd93' xw = 0.2848 ; yw = 0.2932 ; end J=zeros(size(I)) ; % Reference white Yw = 1.0 ; Xw = xw/yw ; Zw = (1-xw-yw)/yw * Yw ; % XYZ components X = I(:,:,1) ; Y = I(:,:,2) ; Z = I(:,:,3) ; x = X/Xw ; y = Y/Yw ; z = Z/Zw ; L = 116 * f(y) - 16 ; a = 500*(f(x) - f(y)) ; b = 200*(f(y) - f(z)) ; J = cat(3,L,a,b) ; % -------------------------------------------------------------------- function b=f(a) % -------------------------------------------------------------------- sp = find(a > 0.00856) ; sm = find(a <= 0.00856) ; k = 903.3 ; b=zeros(size(a)) ; b(sp) = a(sp).^(1/3) ; b(sm) = (k*a(sm) + 16)/116 ; vlfeat/toolbox/imop/vl_imarray.m0000644000175000017500000000627112237004736015734 0ustar dimadimafunction J = vl_imarray(A,varargin) % VL_IMARRAY Flattens image array % J=VL_IMARRAY(A) creates a mosaic J from the array of images A. A % can be either a M*N*K array, storing one gray-scale image per % slice, or a M*N*3*K or M*N*K*3 array, storing a true color RGB % image per slice. The function returns an image J which is a tiling % of the images in the array. Tiles are filled from left to right % and top to bottom. % % VL_IMARRAY(...) displays the image J rather than returning it. % % VL_IMARRAY() accepts the following options: % % Spacing:: 0 % Separate the images by a border of the specified width (the % border is assigned 0 value, which usually corresponds to black). % % Layout:: empty % Specify a vector [TM TN] with the number of rows and columns of % the tiling. If equal to [] the layout is computed automatically. % % Movie:: false % Display or return a movie instead of generating a tiling. % % CMap:: [] % Specify a colormap to construct a movie when the input is an % indexed image array. If not specified, MATLAB default colormap % is used. % % Reverse:: true % Start filling the mosaic tiles from the bottom rather than from % the top. % % See also:VL_IMARRAYSC(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). opts.reverse = false ; opts.spacing = 0 ; opts.layout = [] ; opts.movie = false ; opts.cmap = [] ; opts = vl_argparse(opts, varargin) ; swap3 = false ; % retrieve image dimensions if ndims(A) <= 3 numChannels = 1 ; [height,width,numImages] = size(A) ; else if ndims(A) == 4 && size(A,3) == 3 [height,width,numChannels,numImages] = size(A) ; elseif ndims(A) == 4 && size(A,4) == 3 ; swap3 = true ; [height,width,numImages,numChannels] = size(A) ; else error('A is neither M*N*K, nor M*N*3*K, nor M*N*K*3.') ; end end % compute layout if isempty(opts.layout) N = ceil(sqrt(numImages)) ; M = ceil(numImages / N) ; else M = opts.layout(1) ; N = opts.layout(2) ; numImages = min(numImages, M*N) ; end % make storage for composite image if ~ opts.movie cdata = zeros(height * M + opts.spacing * (M-1), ... width * N + opts.spacing * (N-1), ... numChannels, ... class(A)) ; end % add one image per time for k = 1:numImages % retrieve k-th image if numChannels == 1 tmp = A(:,:,k) ; else if swap3 tmp = A(:,:,k,:) ; else tmp = A(:,:,:,k) ; end end if ~ opts.movie p = k - 1 ; i = floor(p/N) ; if opts.reverse i = M - 1 - i ; end j = mod(p,N) ; ir = i * (height + opts.spacing) + (1:height) ; jr = j * (width + opts.spacing) + (1:width) ; cdata(ir,jr,:) = tmp ; else if isempty(opts.cmap) opts.cmap = get(0, 'DefaultFigureColormap') ; end MOV(k) = im2frame(tmp, opts.cmap) ; end end if ~ opts.movie if nargout == 0 image(cdata) ; colormap(opts.cmap) ; return ; else J = cdata ; end else if nargout == 0 movie(MOV) ; return ; else J = MOV ; end end vlfeat/toolbox/imop/vl_tpsumx.c0000644000175000017500000000371612237004736015617 0ustar dimadima/* file: tpsumx.c ** author: Andrea Vedaldi ** description: vl_tpsumx - MEX definition **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include /** Matlab driver. **/ #define getM(arg) mxGetM(in[arg]) #define getN(arg) mxGetN(in[arg]) #define getPr(arg) mxGetPr(in[arg]) void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum { X=0,Y } ; enum { U } ; int NP, NCP ; int i,j ; double *X_pt, *Y_pt, *U_pt ; #undef small const double small = 2.220446049250313e-16 ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin != 2) { vlmxError(vlmxErrNotEnoughInputArguments, NULL) ; } else if (nout > 1) { vlmxError(vlmxErrTooManyOutputArguments, NULL) ; } if(!vlmxIsMatrix(in[X], 2, -1)) { mexErrMsgTxt("X must be a 2xNP real matrix") ; } if(!vlmxIsMatrix(in[Y], 2, -1)) { mexErrMsgTxt("Y must be a 2xNCP real matrix") ; } NP = getN(X) ; NCP = getN(Y) ; X_pt = getPr(X); Y_pt = getPr(Y) ; /* Allocate the result. */ out[U] = mxCreateDoubleMatrix(NP, NCP, mxREAL) ; U_pt = mxGetPr(out[U]) ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ for(j = 0 ; j < NCP ; ++j) { double xcp = *Y_pt++ ; double ycp = *Y_pt++ ; for(i = 0 ; i < NP ; ++i) { double dx = *X_pt++ - xcp ; double dy = *X_pt++ - ycp ; double r2 = dx*dx + dy*dy ; *U_pt++ = (r2 <= small) ? 0 : r2 * log (r2) ; } X_pt -= 2*NP ; } } vlfeat/toolbox/imop/vl_tpsu.m0000644000175000017500000000333312237004736015257 0ustar dimadimafunction [U,dU,delta]=vl_tpsu(X,Y) % VL_TPSU Compute the U matrix of a thin-plate spline transformation % U=VL_TPSU(X,Y) returns the matrix % % [ U(|X(:,1) - Y(:,1)|) ... U(|X(:,1) - Y(:,N)|) ] % [ ] % [ U(|X(:,M) - Y(:,1)|) ... U(|X(:,M) - Y(:,N)|) ] % % where X is a 2xM matrix and Y a 2xN matrix of points and U(r) is % the opposite -r^2 log(r^2) of the radial basis function of the % thin plate spline specified by X and Y. % % [U,dU]=vl_tpsu(x,y) returns the derivatives of the columns of U with % respect to the parameters Y. The derivatives are arranged in a % Mx2xN array, one layer per column of U. % % See also: VL_TPS(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if exist('tpsumx') U = tpsumx(X,Y) ; else M=size(X,2) ; N=size(Y,2) ; % Faster than repmat, but still fairly slow r2 = ... (X( ones(N,1), :)' - Y( ones(1,M), :)).^2 + ... (X( 1+ones(N,1), :)' - Y(1+ones(1,M), :)).^2 ; U = - rb(r2) ; end if nargout > 1 M=size(X,2) ; N=size(Y,2) ; dx = X( ones(N,1), :)' - Y( ones(1,M), :) ; dy = X(1+ones(N,1), :)' - Y(1+ones(1,M), :) ; r2 = (dx.^2 + dy.^2) ; r = sqrt(r2) ; coeff = drb(r)./(r+eps) ; dU = reshape( [coeff .* dx ; coeff .* dy], M, 2, N) ; end % The radial basis function function y = rb(r2) y = zeros(size(r2)) ; sel = find(r2 ~= 0) ; y(sel) = - r2(sel) .* log(r2(sel)) ; % The derivative of the radial basis function function y = drb(r) y = zeros(size(r)) ; sel = find(r ~= 0) ; y(sel) = - 4 * r(sel) .* log(r(sel)) - 2 * r(sel) ; vlfeat/toolbox/imop/vl_imarraysc.m0000644000175000017500000000570112237004736016257 0ustar dimadimafunction J = vl_imarraysc(A, varargin) % VL_IMARRAYSC Scale and flattens image array % J=VL_IMARRAYSC(A) constructs an image mosaic similar to % J=VL_IMARRAY(A), but it rescales the range of each image in the % array. If A is an array of grayscale images, J will index all the % colors in the current colormap; if A is a true color image, J will % span the range [0,1]. % % If A is of an integer class, J will be of class single SINGLE class. % % VL_IMARRAYSC(...) displays the image J rather than returning it. % % VL_IMARRAYSC() accepts the options of VL_IMARRAY() and: % % CLim:: [] % Rescale the specified range of values rather than the actual % range of each image. % % Uniform:: [false] % Rescale the range of all the images together, rather than on % an image-by-image basis. % % CMap:: [] % Use the specified color map as a reference rather than the % current or default one. % % Algorithm:: % CLim is seet to the image range [m, M], where m is the minimum % value of an image and M is the maximum. The image range CLim is % then affinely mapped to the integers from 1 to C, where C is the % number of colors in the colormap, or to the range [0,1] for true % color images. The mapping is done so that the first color is % assigned the first subinterval of length C of the range [m,M] % and so on. % % See also: VL_IMARRAY(), VL_HELP(), IMAGE(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). opts.clim = [] ; opts.cmap = colormap ; opts.uniform = false ; [opts, varargin] = vl_argparse(opts, varargin) ; numDimensions = ndims(A) ; if numDimensions <= 3 numChannels = 1 ; numImages = size(A,3) ; numLevels = size(opts.cmap,1) ; elseif numDimensions == 4 numChannels = size(A,3) ; numImages = size(A,4) ; numLevels = 1 ; if numChannels ~= 3 error('A has more than three dimensions and the third one is not equal to three.') ; end else error('A has neither 2, 3 or 4 dimensions.') ; end if opts.uniform & ~isempty(opts.clim) error('UNIFORM cannot be used in combination with CLIM.') ; end if isinteger(A) A = single(A) ; end if opts.uniform && numDimensions < 4 opts.clim = [min(A(:)) max(A(:))] ; end for k = 1:numImages if isempty(opts.clim) if numChannels == 1 tmp = A(:,:,k) ; else tmp = A(:,:,:,k) ; end dataMin = min(tmp(:)) ; dataMax = max(tmp(:)) ; else dataMin = opts.clim(1) ; dataMax = opts.clim(2) ; end a = numLevels / (dataMax - dataMin + eps) ; b = - dataMin * a ; if numChannels == 1 A(:,:,k) = max(min(floor(a * A(:,:,k) + b + 1),numLevels),1) ; else A(:,:,:,k) = max(min(a * A(:,:,:,k) + b,numLevels),0) ; end end if nargout == 0 vl_imarray(A,varargin{:}, 'cmap', opts.cmap) ; else J = vl_imarray(A,varargin{:}, 'cmap', opts.cmap) ; end vlfeat/toolbox/imop/vl_imsmooth.m0000644000175000017500000000227712237004736016131 0ustar dimadima% VL_IMSMOOTH Smooth image % J = VL_IMSMOOTH(I,SIGMA) convolves the image I by an isotropic % Gaussian kernel of standard deviation SIGMA. I must be an array % of doubles. IF the array is three dimensional, the third dimension % is assumed to span different channels (e.g. R,G,B). In this case, % each channel is convolved independently. % % VL_IMSMOOTH() accepts the following options: % % Kernel:: % Selects between GAUSSIAN and TRIANGULAR kernels. The triangular % kernel support has 2*SIGMA-1 sampels. Kernels have unit mass. % % Padding:: % Selects between ZERO or CONTINUITY padding method to handle the % image boundaries. ZERO extends the input image with zeroes % around the border, and CONTINUITY extends the image with % constant pixels. % % Step:: % Sets the subsampling step. A subsampling step of STEP pixels % causes J(1:STEPS:end, 1:STEPS:end, :) to be computed. This is % useful to downsample the image. % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). vlfeat/toolbox/imop/vl_imwbackward.m0000644000175000017500000000347612237004736016567 0ustar dimadimafunction [wI,wIx,wIy] = vl_imwbackward(varargin) % VL_IMWBACKWARD Image backward warping % J = VL_IMWBACKWARD(I, X, Y) returns the values of image I at % locations X,Y. X and Y are real matrices of arbitrary but % identical dimensions. I is bilinearly interpolated between samples % and extended with NaNs to the whole real plane. % % [J,JX,JY] = VL_IMWBACKWARD(...) returns the warped derivatives JX and % JY too. % % By default, VL_IMWBACKWARD() assumes that the image I uses the standard % coordinate system. VL_IMWBACKWARD(XR,YR,I,X,Y) assumes instead that I % is defined on a rectangular grid specified by the vectors XR and % YR. % % VL_IMWBACKWARD() is less general than the MATLAB native function % INTERP2(), but it is significantly faster. % % See also: IMWFORWARD(), INTERP2(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if nargin < 5 I = varargin{1} ; [M,N,K] = size(I) ; xr = 1:N ; yr = 1:M ; varargin = { varargin{2:end} } ; else xr = varargin{1} ; yr = varargin{2} ; I = varargin{3} ; [M,N,K] = size(I) ; varargin = { varargin{4:end} } ; end if K == 1 if nargout == 1 wI = vl_imwbackwardmx(xr, yr, I, varargin{:}) ; else [wI,wIx,wIy] = vl_imwbackwardmx(xr, yr, I, varargin{:}) ; end else [M,N] = size(varargin{1}) ; if nargout == 1 wI = zeros(M,N,K) ; for k=1:K wI(:,:,k) = vl_imwbackwardmx(xr, yr, squeeze(I(:,:,k)), varargin{:}) ; end else wI = zeros(M,N,K) ; wIx = zeros(M,N,K) ; wIy = zeros(M,N,K) ; for k=1:K [tmp1, tmp2, tmp3] = vl_imwbackwardmx(xr, yr, squeeze(I(:,:,k)), varargin{:}) ; wI(:,:,k) = tmp1; wIx(:,:,k) = tmp2; wIy(:,:,k) = tmp3 ; end end end vlfeat/toolbox/imop/vl_dwaffine.m0000644000175000017500000000133012237004736016042 0ustar dimadimafunction [dWx,dWy] = vl_dwaffine(x,y) % VL_DWAFFINE Derivative of an affine warp % [DWX,DWY]=VL_DWAFFINE(X,Y) returns the derivative of the 2-D affine % warp [WX; WY] = [A T] [X; Y] with respect to the parameters A,T % computed at points X,Y. % % See also: VL_WAFFINE(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). % dW = [ kron(x',I) I ] % | % = [ x1 0 x2 0 1 0 ] % [ 0 x1 0 x2 0 1 ] z = zeros(length(x(:)),1) ; o = ones(length(x(:)),1) ; dWx = [ x(:) z y(:) z o z ] ; dWy = [ z x(:) z y(:) z o ] ; vlfeat/toolbox/imop/vl_waffine.m0000644000175000017500000000332212237004736015701 0ustar dimadimafunction varargout = vl_waffine(A,T,varargin) % VL_WAFFINE Apply affine transformation to points % Y = VL_WAFFINE(A,T,X) applies the affine transformatio (A,T) to points % X. X contains one point per column. % % [Y1,Y2,...] = VL_WAFFINE(A,T,X1,X2,...) applies the affine % transformation (A,T) to the points (X1,X2,...). Each array % X1,X2,... contains one of the coordinates of the points. % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if numel(varargin)==1 X = varargin{1} ; [n,k] = size(X); if n == 2 Y(1,:) = A(1,1)*X(1,:) + A(1,2)*X(2,:) + T(1) ; Y(2,:) = A(2,1)*X(1,:) + A(2,2)*X(2,:) + T(2) ; elseif n == 3 Y(1,:) = A(1,1)*X(1,:) + A(1,2)*X(2,:) + A(1,3) * X(3,:) + T(1) ; Y(2,:) = A(2,1)*X(1,:) + A(2,2)*X(2,:) + A(2,3) * X(3,:) + T(2) ; Y(3,:) = A(3,1)*X(1,:) + A(3,2)*X(2,:) + A(3,3) * X(3,:) + T(3) ; else Y = A*X + repmat(T,1,k) ; end varargout{1} = Y ; else n = numel(varargin) ; if n == 2 varargout{1} = A(1,1)*varargin{1} + A(1,2)*varargin{2} + T(1) ; varargout{2} = A(2,1)*varargin{1} + A(2,2)*varargin{2} + T(2) ; elseif n == 3 varargout{1} = A(1,1)*varargin{1} + A(1,2)*varargin{2} + A(1,3)*varargin{3} + T(1) ; varargout{2} = A(2,1)*varargin{1} + A(2,2)*varargin{2} + A(2,3)*varargin{3} + T(2) ; varargout{3} = A(3,1)*varargin{1} + A(3,2)*varargin{2} + A(3,3)*varargin{3} + T(3) ; else for i=1:n varargout{i} = T(i) * ones(size(varargin{1})) ; for j=1:n varargout{i} = varargout{i} + A(i,j)*varargin{j} ; end end end end vlfeat/toolbox/imop/vl_imdisttf.c0000644000175000017500000000765012237004736016103 0ustar dimadima/** @internal ** @file vl_imdisttf.c ** @brief vl_imdisttf - MEX definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { vl_size M, N ; enum {IN_I = 0, IN_PARAM, IN_END} ; enum {OUT_DT = 0, OUT_INDEXES} ; vl_uindex * indexes = NULL ; mxClassID classId ; double const defaultParam [] = {1.0, 0.0, 1.0, 0.0} ; double const * param = defaultParam ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin < 1) { vlmxError(vlmxErrNotEnoughInputArguments, NULL) ; } if (nin > 2) { vlmxError(vlmxErrTooManyInputArguments, NULL) ; } if (nout > 2) { vlmxError(vlmxErrTooManyOutputArguments, NULL) ; } classId = mxGetClassID(IN(I)) ; if (! vlmxIsMatrix(IN(I), -1, -1) || (classId != mxSINGLE_CLASS && classId != mxDOUBLE_CLASS)) { vlmxError(vlmxErrInvalidArgument, "I is not a SINGLE or DOUBLE matrix.") ; } if (nin == 2) { if (! vlmxIsPlainVector(IN(PARAM), 4)) { vlmxError(vlmxErrInvalidArgument, "PARAM is not a 4-dimensional vector.") ; } param = mxGetPr (IN(PARAM)) ; if (param[0] < 0.0 || param[2] < 0.0) { vlmxError(vlmxErrInvalidArgument, "Either PARAM[0] or PARAM[2] is negative.") ; } } M = mxGetM (IN(I)) ; N = mxGetN (IN(I)) ; OUT(DT) = mxCreateNumericMatrix (M, N, classId, mxREAL) ; if (nout > 1) { vl_uindex i ; OUT(INDEXES) = mxCreateDoubleMatrix (M, N, mxREAL) ; indexes = mxMalloc(sizeof(vl_uindex) * M * N) ; for (i = 0 ; i < M * N ; ++i) indexes[i] = i + 1 ; } /* ----------------------------------------------------------------- * Do the job * -------------------------------------------------------------- */ switch (classId) { case mxSINGLE_CLASS: vl_image_distance_transform_f((float const*)mxGetData(IN(I)), M, N, 1, M, (float*)mxGetPr(OUT(DT)), indexes, param[2], param[3]) ; vl_image_distance_transform_f((float*)mxGetPr(OUT(DT)), N, M, M, 1, (float*)mxGetPr(OUT(DT)), indexes, param[0], param[1]) ; break ; case mxDOUBLE_CLASS: vl_image_distance_transform_d((double const*)mxGetData(IN(I)), M, N, 1, M, (double*)mxGetPr(OUT(DT)), indexes, param[2], param[3]) ; vl_image_distance_transform_d((double*)mxGetPr(OUT(DT)), N, M, M, 1, (double*)mxGetPr(OUT(DT)), indexes, param[0], param[1]) ; break; default: abort() ; } if (indexes) { vl_uindex i ; double * pt = mxGetPr(OUT(INDEXES)) ; for (i = 0 ; i < M * N ; ++i) pt[i] = indexes[i] ; mxFree(indexes) ; } } vlfeat/toolbox/imop/vl_imwhiten.m0000644000175000017500000000242012237004736016104 0ustar dimadimafunction J=vl_imwhiten(I,alpha,cutoff) % VL_IMWHITEN Whiten image % J = VL_IMWHITEN(I,ALPHA) approximatively whitens the power spectrum % of the natural image I. The algorithm assumes that the modulus of % the spectrum decays as 1/f^ALPHA (f is the frequency). % % VL_IMWHITEN(I) uses ALPHA=1 (a typical value for natural images). % % VL_IMWHITEN(I,ALPHA,CUTOFF) also applies a low-pass filter with % cutoff frequency equal to CUTOFF x FN, where FN is the Nyquist % frequency (half of the sampling frequency). % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if ~exist('alpha'), alpha = 1 ; end if ~exist('cutoff'), cutoff = [] ; end [M,N]=size(I) ; % Frequency domain fn = 0.5 ; % Nyquist freq (=1/2T, T=1) fx_range=linspace(-fn, fn, N) ; fy_range=linspace(-fn, fn, M) ; [fx fy]=meshgrid(fx_range, fy_range) ; % Whitening filter rho=sqrt(fx.*fx+fy.*fy); filt=rho.^alpha ; % Low-pass filter if ~isempty(cutoff) fcut = cutoff * fn ; filt = filt .* exp(-(rho/fcut).^4); %filt = filt .* exp( - 0.5 * (rho / fcut) .^ 2); end % Apply filter J = real(ifft2(fft2(I).*fftshift(filt))) ; vlfeat/toolbox/imop/vl_xyz2luv.m0000644000175000017500000000313012237004736015722 0ustar dimadimafunction J=vl_xyz2luv(I,il) % VL_XYZ2LUV Convert XYZ color space to LUV % J = VL_XYZ2LUV(I) converts the image I in XYZ format to the image J % in Luv format. % % J = VL_XYZ2LUV(I,IL) uses the specified illuminant. The following % illuminant are supported: A, B, C, E, D50, D55, D65, D75, D93. IL % is the name of the illuminant. % % See also: VL_XYZ2LAB(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if nargin < 2 il='E' ; end switch lower(il) case 'a' xw = 0.4476 ; yw = 0.4074 ; case 'b' xw = 0.3324 ; yw = 0.3474 ; case 'c' xw = 0.3101 ; yw = 0.3162 ; case 'e' xw = 1/3 ; yw = 1/3 ; case 'd50' xw = 0.3457 ; yw = 0.3585 ; case 'd55' xw = 0.3324 ; yw = 0.3474 ; case 'd65' xw = 0.312713 ; yw = 0.329016 ; case 'd75' xw = 0.299 ; yw = 0.3149 ; case 'd93' xw = 0.2848 ; yw = 0.2932 ; end J=zeros(size(I)) ; % Reference white xw = 1/3 ; yw = 1/3 ; Yw = 1.0 ; Xw = xw/yw ; Zw = (1-xw-yw)/yw * Yw ; J=zeros(size(I)) ; X = I(:,:,1) ; Y = I(:,:,2) ; Z = I(:,:,3) ; upw = 4*Xw / (Xw + 15*Yw + 3*Zw) ; vpw = 9*Yw / (Xw + 15*Yw + 3*Zw) ; up = 4*X ./ (X + 15*Y + 3*Z) ; vp = 9*Y ./ (X + 15*Y + 3*Z) ; sp = find( Y / Yw > 0.008856) ; sm = find( Y / Yw <= 0.008856) ; L = zeros(size(Y)) ; L(sp) = 116*( Y(sp) / Yw ).^(1/3) - 16 ; L(sm) = 903.3*( Y(sm) / Yw ) ; u = 13 * L .* (up - upw) ; v = 13 * L .* (vp - vpw) ; J = cat(3,L,u,v) ; vlfeat/toolbox/imop/vl_imdown.m0000644000175000017500000000211712237004736015560 0ustar dimadimafunction J = vl_imdown(I, varargin) % VL_IMDOWN Downsample an image by two % J = VL_IMDOWN(I) downsamples the image I by half by discarding % each other pixel. % % VL_IMDOWN() accepts the following options: % % Method:: Sample % 'Sample' downsamples the image by discarding % pixels. 'Average' instead averages groups of 2x2 pixels. % % See also: VL_IMUP(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). opts.method = 'sample' ; opts = vl_argparse(opts, varargin) ; switch lower(opts.method) case 'sample' J = I(1:2:floor(end-.5),1:2:floor(end-.5),:) ; case 'average' Iclass = class(I); I = double(I); J = ... I(1:2:end-1,1:2:end-1,:) + ... I(2:2:end,1:2:end-1,:) + ... I(1:2:end-1,2:2:end,:) + ... I(2:2:end,2:2:end,:) ; J = J / 4 ; eval(sprintf('J=%s(J);', Iclass)); otherwise error('Unknown downsampling method ''%s''.', method) ; end vlfeat/toolbox/imop/vl_imreadgray.m0000644000175000017500000000121212237004736016402 0ustar dimadimafunction I = vl_imreadgray(file,varargin) % VL_IMREADGRAY Reads an image as gray-scale % I=VL_IMREADGRAY(FILE) reads the image from file FILE and converts the % result to a gray scale image (DOUBLE storage class ranging in % [0,1]). % % VL_IMREADGRAY(FILE,FMT) specifies the file format FMT (see IMREAD()). % % See also: RGB2DOUBLE(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). I = imread(file) ; I = im2double(I) ; if(size(I,3) > 1) I = rgb2gray(I) ; end vlfeat/toolbox/imop/vl_imsc.m0000644000175000017500000000072412237004736015220 0ustar dimadimafunction J=vl_imsc(I) % VL_IMSC Scale image % J=VL_IMSC(I) scales the range of the gray-scale or color image I to % fit in the interval [0,1]. % % See also: VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if ~isfloat(I) I = im2double(I) ; end J = I - min(I(:)) ; J = J / max(J(:)) ; vlfeat/toolbox/imop/vl_witps.m0000644000175000017500000000265712237004736015442 0ustar dimadimafunction [x1,x2]=vl_witps(xp1,xp2,Y,Yp) % VL_WITPS Inverse thin-plate spline warping % [X1,X2]=VL_WITPS(XP1,XP2,Y,Yp) computes the inverse thin-plate spline % (TPS) warp of the points XP1,XP2. % % Remark:: % The inverse of a thin-plate spline in general is NOT a % thin-plate spline and some splines do not have an inverse. This % function uses Gauss-Newton to compute a set of points (X1,X2) % such that [XP1,XP2]=VL_WTPS(X1,X2,Y,Yp). % % See also: VL_WTPS(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). % Initial guess by inverting the control points [x1,x2] = vl_wtps(vl_tps(xp1,xp2,Yp),Y) ; X = [x1(:)';x2(:)'] ; Xp = [xp1(:)',;xp2(:)'] ; % Gauss-Newton K = size(Y,2) ; N = size(X,2) ; U = vl_tpsu(Y,Y) ; L = [[ones(1,K); Y], zeros(3) ; U, ones(K,1), Y'] ; invL = inv(L) ; A = [Yp, zeros(2,3)] * invL ; for t=1:5 [U,dU] = vl_tpsu(Y,X); W = A * [repmat([0 0;1 0;0 1],1,N); reshape(dU, K, 2*N)] ; err = Xp - A * [ ones(1,N) ; X(1,:) ; X(2,:) ; U ] ; W = reshape(W,4,N) ; dets = W(1,:).*W(4,:) - W(3,:).*W(2,:) ; dX = [ ( W(4,:).*err(1,:) - W(3,:).*err(2,:) ) ./ dets ; ... (- W(2,:).*err(1,:) + W(1,:).*err(2,:) ) ./ dets ] ; X = X + dX ; end [M,N] = size(xp1) ; x1 = reshape(X(1,:),M,N) ; x2 = reshape(X(2,:),M,N) ; vlfeat/toolbox/imop/vl_wtps.m0000644000175000017500000000240612237004736015261 0ustar dimadimafunction [xp1,xp2]=vl_wtps(phi,Yp) % VL_WTPS Thin-plate spline warping % [XP1,XP2]=VL_WTPS(PHI,YP) computes the thin-plate spline (TPS) % specified by the basis PHI and the warped control point Yp. % % Yp is a 2xK matrix with one column per control point and the basis % PHI is calculated by means of the VL_TPS function. % % The thin-palte spline is defined on a domain X1,X2 and specified % by a set of points Y and their warp YP. The spline passes % interpolates exaclty the control points. % % The parameters X1,X2 and Y are used to compute the basis PHI. This % operation is fairily slow, but computing the spline for a given Yp % is then very quick, as the operation is just a linear combination % of the basis. % % Example:: % To calculate the warped grid [X1,X2] by moving the control points Y to % the control points YP use: % [xp1,xp2]=VL_WTPS(VL_TPS(x1,x2,Y),Yp). % % See also: VL_TPS(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). [K,M,N] = size(phi) ; Xp=[Yp, zeros(2,3)]*reshape(phi,K,M*N) ; xp1 = reshape(Xp(1,:),M,N) ; xp2 = reshape(Xp(2,:),M,N) ; vlfeat/toolbox/imop/vl_imsmooth.c0000644000175000017500000002321112237004736016106 0ustar dimadima/** @internal ** @file imsmooth.c ** @author Andrea Vedaldi ** @brief Smooth an image - MEX definition **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifdef VL_IMSMOOTH_INSTANTIATING #include #include #if (FLT == VL_TYPE_FLOAT) #define IMCONVCOL vl_imconvcol_vf #define IMCONVCOLTRI vl_imconvcoltri_f #else #define IMCONVCOL vl_imconvcol_vd #define IMCONVCOLTRI vl_imconvcoltri_d #endif VL_INLINE void VL_XCAT(_vl_imsmooth_smooth_, SFX) (T * outputImage, vl_size numOutputRows, vl_size numOutputColumns, T const * inputImage, vl_size numRows, vl_size numColumns, vl_size numChannels, int kernel, double sigma, int step, int flags) { T * tempImage = (T*) mxMalloc (sizeof(T) * numRows * numOutputColumns) ; vl_uindex k ; vl_index j ; /* Note that MATLAB uses a column major ordering, while VLFeat a row major (standard) ordering for the image data. Effectively, VLFeat is operating on a transposed image, but this is fine since filters are symmetric. Therefore: input image width = numRows input image height = numColumns output image width = numOutputRows (downsamped rows) outout image height = numOutputColumns (downsampled columns) In addition a temporary buffer is used. This is an image that is obtained from the input image by convolving and downsampling along the height and saving the result transposed: temp image width = numOutputColumns temp image height = numRows */ switch (kernel) { case GAUSSIAN : { vl_size W = ceil (4.0 * sigma) ; T * filter = (T*) mxMalloc (sizeof(T) * (2 * W + 1)) ; T acc = 0 ; for (j = 0 ; j < (signed)(2 * W + 1) ; ++j) { T z = ( (T) j - W) / (sigma + VL_EPSILON_F) ; filter[j] = exp(- 0.5 * (z*z)) ; acc += filter[j] ; } for (j = 0 ; j < (signed)(2 * W + 1) ; ++j) { filter[j] /= acc ; } for (k = 0 ; k < numChannels ; ++k) { IMCONVCOL (tempImage, numOutputColumns, inputImage, numRows, numColumns, numRows, filter, -W, W, step, flags) ; IMCONVCOL (outputImage, numOutputRows, tempImage, numOutputColumns, numRows, numOutputColumns, filter, -W, W, step, flags) ; inputImage += numRows * numColumns ; outputImage += numOutputRows * numOutputColumns ; } mxFree (filter) ; break ; } case TRIANGULAR: { unsigned int W = VL_MAX((unsigned int) sigma, 1) ; for (k = 0 ; k < numChannels ; ++k) { IMCONVCOLTRI (tempImage, numOutputColumns, inputImage, numRows, numColumns, numRows, W, step, flags) ; IMCONVCOLTRI (outputImage, numOutputRows, tempImage, numOutputColumns, numRows, numOutputColumns, W, step, flags) ; inputImage += numRows * numColumns ; outputImage += numOutputRows * numOutputColumns ; } break ; } default: abort() ; } mxFree (tempImage) ; } #undef FLT #undef IMCONVCOLTRI #undef IMCONVCOL #undef VL_IMSMOOTH_INSTANTIATING /* ---------------------------------------------------------------- */ /* VL_IMSMOOTH_INSTANTIATING */ #else #include #include #include #include #include #include #include /* option codes */ enum { opt_padding = 0, opt_subsample, opt_kernel, opt_verbose } ; /* options */ vlmxOption options [] = { {"Padding", 1, opt_padding }, {"Verbose", 0, opt_verbose }, {"Subsample", 1, opt_subsample }, {"Kernel", 1, opt_kernel }, {0, 0, 0 } } ; enum {GAUSSIAN, TRIANGULAR} ; #define VL_IMSMOOTH_INSTANTIATING #define FLT VL_TYPE_FLOAT #include "vl_imsmooth.c" #define VL_IMSMOOTH_INSTANTIATING #define FLT VL_TYPE_DOUBLE #include "vl_imsmooth.c" void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum {IN_I = 0, IN_S, IN_END} ; enum {OUT_J = 0} ; int opt ; int next = IN_END ; mxArray const *optarg ; int padding = VL_PAD_BY_CONTINUITY ; int kernel = GAUSSIAN ; int flags ; vl_size step = 1 ; int verb = 0 ; double sigma ; mxClassID classid ; mwSize M, N, K, M_, N_, ndims ; mwSize dims_ [3] ; mwSize const * dims ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin < 2) { mexErrMsgTxt("At least two input arguments required."); } else if (nout > 1) { mexErrMsgTxt("Too many output arguments."); } while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { switch (opt) { case opt_padding : { enum {buflen = 32} ; char buf [buflen] ; if (!vlmxIsString(optarg, -1)) { vlmxError(vlmxErrInvalidArgument, "PADDING argument must be a string.") ; } mxGetString(optarg, buf, buflen) ; buf [buflen - 1] = 0 ; if (vlmxCompareStringsI("zero", buf) == 0) { padding = VL_PAD_BY_ZERO ; } else if (vlmxCompareStringsI("continuity", buf) == 0) { padding = VL_PAD_BY_CONTINUITY ; } else { vlmxError(vlmxErrInvalidArgument, "PADDING must be either ZERO or CONTINUITY, was '%s'.", buf) ; } break ; } case opt_subsample : if (!vlmxIsPlainScalar(optarg)) { vlmxError(vlmxErrInvalidArgument, "SUBSAMPLE must be a scalar.") ; } step = *mxGetPr(optarg) ; if (step < 1) { vlmxError(vlmxErrInvalidArgument, "SUBSAMPLE must be not less than one.") ; } break ; case opt_kernel : { enum {buflen = 32} ; char buf [buflen] ; if (!vlmxIsString(optarg, -1)) { vlmxError(vlmxErrInvalidArgument, "KERNEL argument must be a string.") ; } mxGetString(optarg, buf, buflen) ; buf [buflen - 1] = 0 ; if (vlmxCompareStringsI("gaussian", buf) == 0) { kernel = GAUSSIAN ; } else if (vlmxCompareStringsI("triangular", buf) == 0) { kernel = TRIANGULAR ; } else { vlmxError(vlmxErrInvalidArgument, "Unknown kernel type '%s'.", buf) ; } break ; } case opt_verbose : ++ verb ; break ; default: abort() ; } } if (! vlmxIsPlainScalar(IN(S))) { vlmxError(vlmxErrInvalidArgument, "S must be a real scalar.") ; } classid = mxGetClassID(IN(I)) ; if (classid != mxDOUBLE_CLASS && classid != mxSINGLE_CLASS) { vlmxError(vlmxErrInvalidArgument, "I must be either DOUBLE or SINGLE.") ; } if (mxGetNumberOfDimensions(IN(I)) > 3) { vlmxError(vlmxErrInvalidArgument, "I must be either a two or three dimensional array.") ; } ndims = mxGetNumberOfDimensions(IN(I)) ; dims = mxGetDimensions(IN(I)) ; M = dims[0] ; N = dims[1] ; K = (ndims > 2) ? dims[2] : 1 ; sigma = * mxGetPr(IN(S)) ; if ((sigma < 0.01) && (step == 1)) { OUT(J) = mxDuplicateArray(IN(I)) ; return ; } M_ = (M - 1) / step + 1 ; N_ = (N - 1) / step + 1 ; dims_ [0] = M_ ; dims_ [1] = N_ ; if (ndims > 2) dims_ [2] = K ; OUT(J) = mxCreateNumericArray(ndims, dims_, classid, mxREAL) ; if (verb) { char const *classid_str = 0, *kernel_str = 0, *padding_str = 0 ; switch (padding) { case VL_PAD_BY_ZERO : padding_str = "with zeroes" ; break ; case VL_PAD_BY_CONTINUITY : padding_str = "by continuity" ; break ; default: abort() ; } switch (classid) { case mxDOUBLE_CLASS: classid_str = "DOUBLE" ; break ; case mxSINGLE_CLASS: classid_str = "SINGLE" ; break ; default: abort() ; } switch (kernel) { case GAUSSIAN: kernel_str = "Gaussian" ; break ; case TRIANGULAR: kernel_str = "triangular" ; break ; default: abort() ; } mexPrintf("vl_imsmooth: [%dx%dx%d] -> [%dx%dx%d] (%s, subsampling step %d)\n", N, M, K, N_, M_, K, classid_str, step) ; mexPrintf("vl_imsmooth: padding: %s\n", padding_str) ; mexPrintf("vl_imsmooth: kernel: %s\n", kernel_str) ; mexPrintf("vl_imsmooth: sigma: %g\n", sigma) ; mexPrintf("vl_imsmooth: SIMD enabled: %s\n", vl_get_simd_enabled() ? "yes" : "no") ; } /* ----------------------------------------------------------------- * Do the job * -------------------------------------------------------------- */ flags = padding ; flags |= VL_TRANSPOSE ; switch (classid) { case mxSINGLE_CLASS: _vl_imsmooth_smooth_f ((float*) mxGetPr(OUT(J)), M_, N_, (float const*) mxGetPr(IN(I)), M, N, K, kernel, sigma, step, flags) ; break ; case mxDOUBLE_CLASS: _vl_imsmooth_smooth_d ((double*) mxGetPr(OUT(J)), M_, N_, (double const*) mxGetPr(IN(I)), M, N, K, kernel, sigma, step, flags) ; break ; default: abort() ; } } /* VL_IMSMOOTH_INSTANTIATING */ #endif vlfeat/toolbox/imop/vl_imintegral.c0000644000175000017500000000541212237004736016405 0ustar dimadima/** @internal ** @file imintegral.c ** @author Brian Fulkerson ** @brief Create an integral image - MEX definition **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include #include #include void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { vl_size numDimensions, numChannels ; mwSize const *dimensions ; mxClassID classId ; void * integral ; void const * image ; vl_uindex k ; enum {IN_I=0} ; enum {OUT_J=0} ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin > 1) { vlmxError(vlmxErrTooManyInputArguments, NULL) ; } if (nin < 1) { vlmxError(vlmxErrNotEnoughInputArguments, NULL) ; } if (nout > 1) { vlmxError(vlmxErrTooManyOutputArguments, NULL) ; } if (! mxIsNumeric(IN(I))) { vlmxError(vlmxErrInvalidArgument, "I is not numeric.") ; } dimensions = mxGetDimensions(IN(I)) ; numDimensions = mxGetNumberOfDimensions(IN(I)) ; if (numDimensions > 3) { vlmxError(vlmxErrInvalidArgument, "I has more than 3 dimensions (%d).", numDimensions) ; } if (numDimensions > 2) { numChannels = dimensions [2] ; } else { numChannels = 1 ; } classId = mxGetClassID(IN(I)) ; if (classId != mxSINGLE_CLASS && classId != mxDOUBLE_CLASS && classId != mxUINT32_CLASS && classId != mxINT32_CLASS) { vlmxError(vlmxErrInvalidArgument, "I is not of a supported storage class.") ; } OUT(J) = mxCreateNumericArray(numDimensions, dimensions, classId, mxREAL) ; image = mxGetData(IN(I)) ; integral = mxGetData(OUT(J)) ; /* ----------------------------------------------------------------- * Do the job * -------------------------------------------------------------- */ #define DO(CLASS, T, SFX) \ case mx ## CLASS ## _CLASS : \ vl_imintegral_ ## SFX (integral, dimensions[0], \ image, dimensions[0], dimensions[1], dimensions[0]) ; \ integral = ((T *) integral) + dimensions[0]*dimensions[1] ; \ image = ((T const *) image) + dimensions[0]*dimensions[1] ; \ break for (k = 0 ; k < numChannels ; ++k) { switch (classId) { DO(SINGLE, float, f) ; DO(DOUBLE, double, d) ; DO(UINT32, vl_uint32, ui32) ; DO(INT32, vl_int32, i32) ; default: abort() ; } } } vlfeat/toolbox/slic/0000755000175000017500000000000012237042167013371 5ustar dimadimavlfeat/toolbox/slic/vl_slic.c0000644000175000017500000001046612237004736015177 0ustar dimadima/** @file vl_slic.c ** @brief vl_slic ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include #include #include #include /* option codes */ enum { opt_verbose, opt_min_segment_size } ; /* options */ vlmxOption options [] = { {"Verbose", 0, opt_verbose }, {"MinRegionSize", 1, opt_min_segment_size }, {0, 0, 0 } } ; /** ------------------------------------------------------------------ ** @brief MEX entry point **/ void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { enum {IN_IMAGE, IN_REGIONSIZE, IN_REGULARIZER, IN_END} ; enum {OUT_SEGMENTATION = 0} ; int verbose = 0 ; int opt ; int next = IN_END ; mxArray const *optarg ; float const * image ; vl_size width ; vl_size height ; vl_size numChannels ; vl_size regionSize ; double regularizer ; vl_uint32 * segmentation ; int minRegionSize = -1 ; VL_USE_MATLAB_ENV ; /* ----------------------------------------------------------------- * Check the arguments * -------------------------------------------------------------- */ if (nin < 3) { vlmxError(vlmxErrInvalidArgument, "At least three arguments are required.") ; } else if (nout > 1) { vlmxError(vlmxErrInvalidArgument, "Too many output arguments."); } image = mxGetData(IN(IMAGE)) ; if (!mxIsNumeric(IN(IMAGE)) || mxIsComplex(IN(IMAGE))) { vlmxError(vlmxErrInvalidArgument, "IMAGE is not a real matrix.") ; } if (mxGetClassID(IN(IMAGE)) != mxSINGLE_CLASS) { vlmxError(vlmxErrInvalidArgument, "IMAGE is not of class SINGLE.") ; } if (mxGetNumberOfDimensions(IN(IMAGE)) > 3) { vlmxError(vlmxErrInvalidArgument, "IMAGE has more than three dimensions.") ; } width = mxGetDimensions(IN(IMAGE))[1] ; height = mxGetDimensions(IN(IMAGE))[0] ; if (mxGetNumberOfDimensions(IN(IMAGE)) == 2) { numChannels = 1 ; } else { numChannels = mxGetDimensions(IN(IMAGE))[2] ; } if (!vlmxIsPlainScalar(IN(REGIONSIZE))) { vlmxError(vlmxErrInvalidArgument, "REGIONSIZE is not a plain scalar.") ; } regionSize = mxGetScalar(IN(REGIONSIZE)) ; if (regionSize < 1) { vlmxError(vlmxErrInvalidArgument, "REGIONSIZE=%d is smaller than one.", regionSize) ; } if (!vlmxIsPlainScalar(IN(REGULARIZER))) { vlmxError(vlmxErrInvalidArgument, "REGULARIZER is not a plain scalar.") ; } regularizer = mxGetScalar(IN(REGULARIZER)) ; if (regularizer < 0) { vlmxError(vlmxErrInvalidArgument, "REGULARIZER=%g is smaller than one.", regularizer) ; } while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { switch (opt) { case opt_verbose : ++ verbose ; break ; case opt_min_segment_size : if (!vlmxIsPlainScalar(optarg)) { vlmxError(vlmxErrInvalidArgument, "MINREGIONSIZE is not a plain scalar.") ; } minRegionSize = mxGetScalar(optarg) ; if (minRegionSize < 0) { vlmxError(vlmxErrInvalidArgument, "MINREGIONSIZE=%d is smaller than zero.", minRegionSize) ; } break ; } } if (minRegionSize < 0) { minRegionSize = (regionSize * regionSize) / (6*6) ; } if (verbose) { mexPrintf("vl_slic: image = [%d x %d x %d]\n", width, height, numChannels) ; mexPrintf("vl_slic: regionSize = %d\n", regionSize) ; mexPrintf("vl_slic: regularizer = %g\n", regularizer) ; mexPrintf("vl_slic: minRegionSize = %d\n", minRegionSize) ; } /* ----------------------------------------------------------------- * Do work * -------------------------------------------------------------- */ OUT(SEGMENTATION) = mxCreateNumericMatrix((mwSize)height, (mwSize)width, mxUINT32_CLASS, mxREAL) ; segmentation = mxGetData(OUT(SEGMENTATION)) ; vl_slic_segment(segmentation, image, height, width, numChannels, /* the image is transposed */ regionSize, regularizer, minRegionSize) ; } vlfeat/toolbox/slic/vl_slic.m0000644000175000017500000000211712237004736015203 0ustar dimadima% VL_SLIC SLIC superpixels % SEGMENTS = VL_SLIC(IM, REGIONSIZE, REGULARIZER) extracts the SLIC % superpixes [1] from image IM. REGIONSIZE is the starting size of % the superpixels and REGULARIZER is the trades-off appearance for % spatial regularity when clustering (a larger value results in more % spatial regularization). SEGMENTS is a UINT32 array containing the % superpixel identifier for each image pixel. % % The image IM is a SINGLE array with two or three dimensions. The % third dimension is arbitrary, but it is usually three for RGB or % LAB images. % % VL_SLIC() accepts the following options: % % Verbose:: % Be verbose. % % MinRegionSize:: (1/6 of REGIONSIZE)^2 % The minimum size (in pixel area) of the extracted % superpixels. % % Example:: % If IM contains an RGB images, the SLIC superpixels can be % extracted as: % % REFERENCES:: % [1] R. Achanta, A. Shaji, K. Smith, A. Lucchi, P. Fua, and % S. Susstrunk. SLIC superpixels. Technical report, EPFL, 2010. % % See also:: http://www.vlfeat.org/doc/api/slic.html, VL_HELP(). vlfeat/vlfeat.vcproj0000644000175000017500000003011412237004745013456 0ustar dimadima vlfeat/apps/0000755000175000017500000000000012237035722011713 5ustar dimadimavlfeat/apps/recognition/0000755000175000017500000000000012237035722014233 5ustar dimadimavlfeat/apps/recognition/setupGeneric.m0000644000175000017500000000767012237004745017061 0ustar dimadimafunction imdb = setupGeneric(datasetDir, varargin) % SETUPGENERIC Setup a Caltech-101-like dataset % IMDB = SETUPGENERIC(DATASETDIR) initializes a IMDB structure % representing the dataset located at DATASETDIR. The dataset % is supposed to be organized similarly to Caltech-101, i.e. % to have one directory per image class, with a number of % image files in each directory. % % SETUPGENERIC(..., 'OPT', VAL, ...) accepts the following % options: % % Lite:: false % If set to TRUE, use at most 3 classes and at most 5 images % in each of TRAIN, VAL, and TEST. % % Seed:: 1 % The random seed used to generate the partitions. % % NumTrain:: 50 % Maximum number of training images per class. % % NumVal:: 0 % Maximum number of validation images per class. % % NumTest:: 50 % Maximum number of test images per class. % % ExpectedNumClasses:: [] % If set to a number, generate an error if the number % of classes found in DATASETDIR differs. This is only % used as a sanity check. % % IMDB is a structure with the following fields: % % IMDB.IMAGES:: % A structure of arrays representing the images in the % dataset. % % IMDB.IMAGES.ID:: % Vector of image numeric IDs. % % IMDB.IMAGES.NAME:: % Cell array with the image names. % % IMDB.IMAGES.SET:: % Vector of subset IDs for each image (train, val, test). % % IMDB.IMAGES.CLASS:: % Vector of class IDs for each image. % % IMDB.META:: % A substructure with meta information on the data. % % IMDB.META.CLASSES:: % Cell array of class names. % % IMDB.IMAGEDIR:: % Image directory. Join the image name to this directory to % access an image file. % Author: Andrea Vedaldi % Copyright (C) 2013 Andrea Vedaldi % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). opts.lite = false ; opts.numTrain = 50 ; opts.numVal = 0 ; opts.numTest = 50 ; opts.seed = 1 ; opts.expectedNumClasses = [] ; opts = vl_argparse(opts, varargin) ; % Construct image database imdb structure imdb.meta.sets = {'train', 'val', 'test'} ; names = dir(datasetDir) ; names = {names([names.isdir]).name} ; names = setdiff(names, {'.', '..'}) ; imdb.meta.classes = names ; names = {} ; classes = {} ; for c = 1:numel(imdb.meta.classes) class = imdb.meta.classes{c} ; tmp = dir(fullfile(datasetDir, [class filesep '*.jpg'])) ; names{c} = strcat([class filesep], {tmp.name}) ; classes{c} = repmat(c, 1, numel(names{c})) ; end names = cat(2,names{:}) ; classes = cat(2,classes{:}) ; sets = zeros(1,numel(names)) ; ids = 1:numel(names) ; numClasses = numel(imdb.meta.classes) ; if ~isempty(opts.expectedNumClasses) && numClasses ~= opts.expectedNumClasses error('Expected %d classes in image database at %s.', opts.expectedNumClasses, datasetDir) ; end for c = 1:numClasses sel = find(classes == c) ; randn('state', opts.seed) ; rand('state', opts.seed) ; selTrain = vl_colsubset(sel, opts.numTrain) ; selVal = vl_colsubset(setdiff(sel, selTrain), opts.numVal) ; selTest = vl_colsubset(setdiff(sel, [selTrain selVal]), opts.numTest) ; sets(selTrain) = 1 ; sets(selVal) = 2 ; sets(selTest) = 3 ; end ok = find(sets ~= 0) ; imdb.images.id = ids(ok) ; imdb.images.name = names(ok) ; imdb.images.set = sets(ok) ; imdb.images.class = classes(ok) ; imdb.imageDir = datasetDir ; if opts.lite ok = {} ; for c = 1:3 ok{end+1} = vl_colsubset(find(imdb.images.class == c & imdb.images.set == 1), 5) ; ok{end+1} = vl_colsubset(find(imdb.images.class == c & imdb.images.set == 2), 5) ; ok{end+1} = vl_colsubset(find(imdb.images.class == c & imdb.images.set == 3), 5) ; end ok = cat(2, ok{:}) ; imdb.meta.classes = imdb.meta.classes(1:3) ; imdb.images.id = imdb.images.id(ok) ; imdb.images.name = imdb.images.name(ok) ; imdb.images.set = imdb.images.set(ok) ; imdb.images.class = imdb.images.class(ok) ; end vlfeat/apps/recognition/setupVoc.m0000644000175000017500000001210512237004745016221 0ustar dimadimafunction imdb = setupVoc(datasetDir, varargin) % SETUPVOC Setup PASCAL VOC data % IMDB = SETUPVOC(DATASETDIR, 'EDITION', '2007') setups the % PASCAL VOC 2007 data. This is similar to SETUPGENERIC(), but adapted % to the peculiarities of this dataset. In particular, the % difficult image flag and the fact that multiple labels apply to % each image are supported. % % Note that only the PASCAL VOC 2007 data comes with test images % and labels. For the other editions, setting up the test images % cannot be automatized due to restrictions in the distribution. % % See also: SETUPGENERIC(). % Author: Andrea Vedaldi % Copyright (C) 2013 Andrea Vedaldi % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). opts.edition = '2007' ; opts.autoDownload = true ; opts.lite = false ; opts = vl_argparse(opts, varargin) ; switch opts.edition case '2007' urls = {'http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2007/VOCtrainval_06-Nov-2007.tar', ... 'http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2007/VOCtest_06-Nov-2007.tar'} ; case '2008' urls = {'http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2008/VOCtrainval_14-Jul-2008.tar'} ; case '2009' urls = {'http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2009/VOCtrainval_11-May-2009.tar'} ; case '2010' urls = {'http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2010/VOCtrainval_03-May-2010.tar'} ; case '2011' urls = {'http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2011/VOCtrainval_25-May-2011.tar'} ; case '2012' urls = {'http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2012/VOCtrainval_11-May-2012.tar'} ; otherwise error('Unknown PASCAL VOC edition ''%s''.', opts.edition) ; end % Download and unpack vl_xmkdir(datasetDir) ; if exist(fullfile(datasetDir, ['VOC' opts.edition], 'Annotations')) % ok elseif exist(fullfile(datasetDir, 'VOCdevkit', ['VOC' opts.edition], 'Annotations')) % ok datasetDir = fullfile(datasetDir, 'VOCdevkit') ; elseif opts.autoDownload for i = 1:length(urls) fprintf('Downloading VOC data ''%s'' to ''%s''. This will take a while.', urls{i}, datasetDir) ; untar(urls{i}, datasetDir) ; end datasetDir = fullfile(datasetDir, 'VOCdevkit') ; else error('VOC data not found in %s', datasetDir) ; end imdb.images.id = [] ; imdb.images.set = uint8([]) ; imdb.images.name = {} ; imdb.images.size = zeros(2,0) ; imdb.meta.sets = {'train', 'val', 'test'} ; imdb.meta.classes = {'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', ... 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', ... 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor'} ; imdb.imageDir = fullfile(datasetDir, ['VOC', opts.edition], 'JPEGImages') ; % Get the list of images map = containers.Map() ; j = 0 ; for si = 1:numel(imdb.meta.sets) setName = imdb.meta.sets{si} ; annoPath = fullfile(datasetDir, ['VOC' opts.edition], ... 'ImageSets', 'Main', ... [setName '.txt']) ; fprintf('%s: reading %s\n', mfilename, annoPath) ; [names,labels] = textread(annoPath, '%s %f') ; for i=1:length(names) j = j + 1 ; map(names{i}) = j ; imdb.images.id(j) = j ; imdb.images.set(j) = si ; imdb.images.name{j} = [names{i} '.jpg'] ; %info = imfinfo(fullfile(imdb.imageDir, imdb.images.name{j})) ; %imdb.images.size(:,j) = [info.Width ; info.Height] ; %fprintf('\radded %s', imdb.images.name{j}) ; end end % Get class labels for ci = 1:length(imdb.meta.classes) imdb.classes.imageIds{ci} = [] ; imdb.classes.difficult{ci} = false(0) ; end for si = 1:numel(imdb.meta.sets) for ci = 1:length(imdb.meta.classes) setName = imdb.meta.sets{si} ; className = imdb.meta.classes{ci} ; annoPath = fullfile(datasetDir, ['VOC' opts.edition], ... 'ImageSets', 'Main', ... [className '_' setName '.txt']) ; fprintf('%s: reading %s\n', mfilename, annoPath) ; [names,labels] = textread(annoPath, '%s %f') ; for i = 1:numel(names) j = map(names{i}) ; if labels(i) >= 0 imdb.classes.imageIds{ci}(end+1) = j ; imdb.classes.difficult{ci}(end+1) = (labels(i) == 0) ; end end end end if opts.lite ok = {} ; for c = 1:3 trainIds = intersect(imdb.images.id(imdb.images.set == 1), imdb.classes.imageIds{c}) ; testIds = intersect(imdb.images.id(imdb.images.set == 3), imdb.classes.imageIds{c}) ; ok{end+1} = vl_colsubset(find(ismember(imdb.images.id, trainIds)), 5) ; ok{end+1} = vl_colsubset(find(ismember(imdb.images.id, testIds)), 5) ; end ok = unique(cat(2, ok{:})) ; imdb.meta.classes = imdb.meta.classes(1:3) ; imdb.classes.imageIds = imdb.classes.imageIds(1:3) ; imdb.classes.difficult = imdb.classes.difficult(1:3) ; imdb.images.id = imdb.images.id(ok) ; imdb.images.name = imdb.images.name(ok) ; imdb.images.set = imdb.images.set(ok) ; for c = 1:3 ok = ismember(imdb.classes.imageIds{c}, imdb.images.id) ; imdb.classes.imageIds{c} = imdb.classes.imageIds{c}(ok) ; imdb.classes.difficult{c} = imdb.classes.difficult{c}(ok) ; end end vlfeat/apps/recognition/trainEncoder.m0000644000175000017500000001412212237004745017027 0ustar dimadimafunction encoder = trainEncoder(images, varargin) % TRAINENCODER Train image encoder: BoVW, VLAD, FV % ENCODER = TRAINENCOER(IMAGES) trains a BoVW encoder from the % specified list of images IMAGES. % % TRAINENCODER(..., 'OPT', VAL, ...) accepts the following options: % % Type:: 'bovw' % Bag of visual words ('bovw'), VLAD ('vlad') or Fisher Vector % ('fv'). % % numPcaDimension:: +inf % Use PCA to reduce the descriptor dimensionality to this % dimension. Use +inf to deactivate PCA. % % Whitening:: false % Set to true to divide the principal components by the % corresponding standard deviation s_i. % % WhiteningRegul:: 0 % When using whitening, divide by s_max * WhiteningRegul + s_i % instead of s_i alone. % % Renormalize:: false % If true, descriptors are L2 normalized after PCA or % whitening. % % % Subdivisions:: [] % A list of spatial subdivisions. Each column is a rectangle % [XMIN YMIN XMAX YMAX]. The spatial subdivisions are % % Layouts:: {'1x1'} % A list of strings representing regular spatial subdivisions % in the format MxN, where M is the number of vertical % subdivisions and N the number of horizontal ones. For % example {'1x1', 2x2'} uses 5 partitions: the whole image and % four quadrants. The subdivisions are appended to the ones % specified by the SUBDIVISIONS option. % % ReadImageFn:: @readImage % The function used to load an image. % % ExtractorFn:: @getDenseSIFT % The function used to extract the feature frames and % descriptors from an image. % Author: Andrea Vedaldi % Copyright (C) 2013 Andrea Vedaldi % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). opts.type = 'bovw' ; opts.numWords = [] ; opts.seed = 1 ; opts.numPcaDimensions = +inf ; opts.whitening = false ; opts.whiteningRegul = 0 ; opts.numSamplesPerWord = [] ; opts.renormalize = false ; opts.layouts = {'1x1'} ; opts.geometricExtension = 'none' ; opts.subdivisions = zeros(4,0) ; opts.readImageFn = @readImage ; opts.extractorFn = @getDenseSIFT ; opts.lite = false ; opts = vl_argparse(opts, varargin) ; for i = 1:numel(opts.layouts) t = sscanf(opts.layouts{i},'%dx%d') ; m = t(1) ; n = t(2) ; [x,y] = meshgrid(... linspace(0,1,n+1), ... linspace(0,1,m+1)) ; x1 = x(1:end-1,1:end-1) ; y1 = y(1:end-1,1:end-1) ; x2 = x(2:end,2:end) ; y2 = y(2:end,2:end) ; opts.subdivisions = cat(2, opts.subdivisions, ... [x1(:)' ; y1(:)' ; x2(:)' ; y2(:)'] ) ; end if isempty(opts.numWords) switch opts.type case {'bovw'} opts.numWords = 1024 ; case {'fv'} opts.numWords = 64 ; opts.numPcaDimensions = 80 ; case {'vlad'} opts.numWords = 64 ; opts.numPcaDimensions = 100 ; opts.whitening = true ; opts.whiteninRegul = 0.01 ; otherwise assert(false) ; end end if isempty(opts.numSamplesPerWord) switch opts.type case {'bovw'} opts.numSamplesPerWord = 200 ; case {'vlad','fv'} opts.numSamplesPerWord = 1000 ; otherwise assert(false) ; end if opts.lite opts.numSamplesPerWord = 10 ; end end disp(opts) ; encoder.type = opts.type ; encoder.subdivisions = opts.subdivisions ; encoder.readImageFn = opts.readImageFn ; encoder.extractorFn = opts.extractorFn ; encoder.numWords = opts.numWords ; encoder.renormalize = opts.renormalize ; encoder.geometricExtension = opts.geometricExtension ; %% Step 0: obtain sample image descriptors numImages = numel(images) ; numDescrsPerImage = ceil(opts.numWords * opts.numSamplesPerWord / numImages) ; parfor i = 1:numImages fprintf('%s: reading: %s\n', mfilename, images{i}) ; im = encoder.readImageFn(images{i}) ; w = size(im,2) ; h = size(im,1) ; features = encoder.extractorFn(im) ; randn('state',0) ; rand('state',0) ; sel = vl_colsubset(1:size(features.descr,2), single(numDescrsPerImage)) ; descrs{i} = features.descr(:,sel) ; frames{i} = features.frame(:,sel) ; frames{i} = bsxfun(@times, bsxfun(@minus, frames{i}(1:2,:), [w;h]/2), 1./[w;h]) ; end descrs = cat(2, descrs{:}) ; frames = cat(2, frames{:}) ; %% Step 1 (optional): learn PCA projection if opts.numPcaDimensions < inf || opts.whitening fprintf('%s: learning PCA rotation/projection\n', mfilename) ; encoder.projectionCenter = mean(descrs,2) ; x = bsxfun(@minus, descrs, encoder.projectionCenter) ; X = x*x' / size(x,2) ; [V,D] = eig(X) ; d = diag(D) ; [d,perm] = sort(d,'descend') ; d = d + opts.whiteningRegul * max(d) ; m = min(opts.numPcaDimensions, size(descrs,1)) ; V = V(:,perm) ; if opts.whitening encoder.projection = diag(1./sqrt(d(1:m))) * V(:,1:m)' ; else encoder.projection = V(:,1:m)' ; end clear X V D d ; else encoder.projection = 1 ; encoder.projectionCenter = 0 ; end descrs = encoder.projection * bsxfun(@minus, descrs, encoder.projectionCenter) ; if encoder.renormalize descrs = bsxfun(@times, descrs, 1./max(1e-12, sqrt(sum(descrs.^2)))) ; end %% Step 2 (optional): geometrically augment the features descrs = extendDescriptorsWithGeometry(opts.geometricExtension, frames, descrs) ; %% Step 3: learn a VQ or GMM vocabulary dimension = size(descrs,1) ; numDescriptors = size(descrs,2) ; switch encoder.type case {'bovw', 'vlad'} vl_twister('state', opts.seed) ; encoder.words = vl_kmeans(descrs, opts.numWords, 'verbose', 'algorithm', 'elkan') ; encoder.kdtree = vl_kdtreebuild(encoder.words, 'numTrees', 2) ; case {'fv'} ; vl_twister('state', opts.seed) ; if 1 v = var(descrs')' ; [encoder.means, encoder.covariances, encoder.priors] = ... vl_gmm(descrs, opts.numWords, 'verbose', ... 'Initialization', 'kmeans', ... 'CovarianceBound', double(max(v)*0.0001), ... 'NumRepetitions', 1) ; else addpath lib/yael/matlab [a,b,c] = ... yael_gmm(descrs, opts.numWords, 'verbose', 2) ; encoder.priors = single(a) ; encoder.means = single(b) ; encoder.covariances = single(c) ; end end vlfeat/apps/recognition/experiments.m0000644000175000017500000001537112237004745016764 0ustar dimadimafunction experiments() % EXPERIMENTS Run image classification experiments % The experimens download a number of benchmark datasets in the % 'data/' subfolder. Make sure that there are several GBs of % space available. % % By default, experiments run with a lite option turned on. This % quickly runs all of them on tiny subsets of the actual data. % This is used only for testing; to run the actual experiments, % set the lite variable to false. % % Running all the experiments is a slow process. Using parallel % MATLAB and several cores/machiens is suggested. % Author: Andrea Vedaldi % Copyright (C) 2013 Andrea Vedaldi % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). lite = true ; clear ex ; ex(1).prefix = 'fv-aug' ; ex(1).trainOpts = {'C', 10} ; ex(1).datasets = {'fmd', 'scene67'} ; ex(1).seed = 1 ; ex(1).opts = {... 'type', 'fv', ... 'numWords', 256, ... 'layouts', {'1x1'}, ... 'geometricExtension', 'xy', ... 'numPcaDimensions', 80, ... 'extractorFn', @(x) getDenseSIFT(x, ... 'step', 4, ... 'scales', 2.^(1:-.5:-3))}; ex(2) = ex(1) ; ex(2).datasets = {'caltech101'} ; ex(2).opts{end} = @(x) getDenseSIFT(x, ... 'step', 4, ... 'scales', 2.^(0:-.5:-3)) ; ex(3) = ex(1) ; ex(3).datasets = {'voc07'} ; ex(3).C = 1 ; ex(4) = ex(1) ; ex(4).prefix = 'vlad-aug' ; ex(4).opts = {... 'type', 'vlad', ... 'numWords', 256, ... 'layouts', {'1x1'}, ... 'geometricExtension', 'xy', ... 'numPcaDimensions', 100, ... 'whitening', true, ... 'whiteningRegul', 0.01, ... 'renormalize', true, ... 'extractorFn', @(x) getDenseSIFT(x, ... 'step', 4, ... 'scales', 2.^(1:-.5:-3))}; ex(5) = ex(4) ; ex(5).datasets = {'caltech101'} ; ex(5).opts{end} = ex(2).opts{end} ; ex(6) = ex(4) ; ex(6).datasets = {'voc07'} ; ex(6).C = 1 ; ex(7) = ex(1) ; ex(7).prefix = 'bovw-aug' ; ex(7).opts = {... 'type', 'bovw', ... 'numWords', 4096, ... 'layouts', {'1x1'}, ... 'geometricExtension', 'xy', ... 'numPcaDimensions', 100, ... 'whitening', true, ... 'whiteningRegul', 0.01, ... 'renormalize', true, ... 'extractorFn', @(x) getDenseSIFT(x, ... 'step', 4, ... 'scales', 2.^(1:-.5:-3))}; ex(8) = ex(7) ; ex(8).datasets = {'caltech101'} ; ex(8).opts{end} = ex(2).opts{end} ; ex(9) = ex(7) ; ex(9).datasets = {'voc07'} ; ex(9).C = 1 ; ex(10).prefix = 'fv' ; ex(10).trainOpts = {'C', 10} ; ex(10).datasets = {'fmd', 'scene67'} ; ex(10).seed = 1 ; ex(10).opts = {... 'type', 'fv', ... 'numWords', 256, ... 'layouts', {'1x1'}, ... 'geometricExtension', 'none', ... 'numPcaDimensions', 80, ... 'extractorFn', @(x) getDenseSIFT(x, ... 'step', 4, ... 'scales', 2.^(1:-.5:-3))}; ex(11) = ex(10) ; ex(11).datasets = {'caltech101'} ; ex(11).opts{end} = @(x) getDenseSIFT(x, ... 'step', 4, ... 'scales', 2.^(0:-.5:-3)) ; ex(12) = ex(10) ; ex(12).datasets = {'voc07'} ; ex(12).C = 1 ; ex(13).prefix = 'fv-sp' ; ex(13).trainOpts = {'C', 10} ; ex(13).datasets = {'fmd', 'scene67'} ; ex(13).seed = 1 ; ex(13).opts = {... 'type', 'fv', ... 'numWords', 256, ... 'layouts', {'1x1', '3x1'}, ... 'geometricExtension', 'none', ... 'numPcaDimensions', 80, ... 'extractorFn', @(x) getDenseSIFT(x, ... 'step', 4, ... 'scales', 2.^(1:-.5:-3))}; ex(14) = ex(13) ; ex(14).datasets = {'caltech101'} ; ex(14).opts{6} = {'1x1', '2x2'} ; ex(14).opts{end} = @(x) getDenseSIFT(x, ... 'step', 4, ... 'scales', 2.^(0:-.5:-3)) ; ex(15) = ex(13) ; ex(15).datasets = {'voc07'} ; ex(15).C = 1 ; if lite, tag = 'lite' ; else, tag = 'ex' ; end for i=1:numel(ex) for j=1:numel(ex(i).datasets) dataset = ex(i).datasets{j} ; if ~isfield(ex(i), 'trainOpts') || ~iscell(ex(i).trainOpts) ex(i).trainOpts = {} ; end traintest(... 'prefix', [tag '-' dataset '-' ex(i).prefix], ... 'seed', ex(i).seed, ... 'dataset', char(dataset), ... 'datasetDir', fullfile('data', dataset), ... 'lite', lite, ... ex(i).trainOpts{:}, ... 'encoderParams', ex(i).opts) ; end end % print HTML table pf('\n') ; ph('method', 'VOC07', 'Caltech 101', 'Scene 67', 'FMD') ; pr('FV', ... ge([tag '-voc07-fv'],'ap11'), ... ge([tag '-caltech101-fv']), ... ge([tag '-scene67-fv']), ... ge([tag '-fmd-fv'])) ; pr('FV + aug.', ... ge([tag '-voc07-fv-aug'],'ap11'), ... ge([tag '-caltech101-fv-aug']), ... ge([tag '-scene67-fv-aug']), ... ge([tag '-fmd-fv-aug'])) ; pr('FV + s.p.', ... ge([tag '-voc07-fv-sp'],'ap11'), ... ge([tag '-caltech101-fv-sp']), ... ge([tag '-scene67-fv-sp']), ... ge([tag '-fmd-fv-sp'])) ; %pr('VLAD', ... % ge([tag '-voc07-vlad'],'ap11'), ... % ge([tag '-caltech101-vlad']), ... % ge([tag '-scene67-vlad']), ... % ge([tag '-fmd-vlad'])) ; pr('VLAD + aug.', ... ge([tag '-voc07-vlad-aug'],'ap11'), ... ge([tag '-caltech101-vlad-aug']), ... ge([tag '-scene67-vlad-aug']), ... ge([tag '-fmd-vlad-aug'])) ; %pr('VLAD+sp', ... % ge([tag '-voc07-vlad-sp'],'ap11'), ... % ge([tag '-caltech101-vlad-sp']), ... % ge([tag '-scene67-vlad-sp']), ... % ge([tag '-fmd-vlad-sp'])) ; %pr('BOVW', ... % ge([tag '-voc07-bovw'],'ap11'), ... % ge([tag '-caltech101-bovw']), ... % ge([tag '-scene67-bovw']), ... % ge([tag '-fmd-bovw'])) ; pr('BOVW + aug.', ... ge([tag '-voc07-bovw-aug'],'ap11'), ... ge([tag '-caltech101-bovw-aug']), ... ge([tag '-scene67-bovw-aug']), ... ge([tag '-fmd-bovw-aug'])) ; %pr('BOVW+sp', ... % ge([tag '-voc07-bovw-sp'],'ap11'), ... % ge([tag '-caltech101-bovw-sp']), ... % ge([tag '-scene67-bovw-sp']), ... % ge([tag '-fmd-bovw-sp'])) ; pf('
\n'); function pf(str) fprintf(str) ; function str = ge(name, format) if nargin == 1, format = 'acc'; end data = load(fullfile('data', name, 'result.mat')) ; switch format case 'acc' str = sprintf('%.2f%% Acc', mean(diag(data.confusion)) * 100) ; case 'ap11' str = sprintf('%.2f%% mAP', mean(data.ap11) * 100) ; end function pr(varargin) fprintf('') ; for i=1:numel(varargin), fprintf('%s',varargin{i}) ; end fprintf('\n') ; function ph(varargin) fprintf('') ; for i=1:numel(varargin), fprintf('%s',varargin{i}) ; end fprintf('\n') ; vlfeat/apps/recognition/setupScene67.m0000644000175000017500000000450012237004745016704 0ustar dimadimafunction imdb = setupScene67(datasetDir, varargin) % SETUPSCENE67 Setup MIT Scene 67 dataset % This is similar to SETUPGENERIC(), with modifications to setup % MIT Scene 67 according to the standard evaluation protocols. The % function supports only the LITE option. % % See: SETUPGENERIC(). % Author: Andrea Vedaldi % Copyright (C) 2013 Andrea Vedaldi % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). opts.lite = false ; opts = vl_argparse(opts, varargin) ; % Download and unpack vl_xmkdir(datasetDir) ; if exist(fullfile(datasetDir, 'Images', 'airport_inside')) % ok else url = 'http://groups.csail.mit.edu/vision/LabelMe/NewImages/indoorCVPR_09.tar' ; trainImagesUrl = 'http://web.mit.edu/torralba/www/TrainImages.txt' ; testImagesUrl = 'http://web.mit.edu/torralba/www/TestImages.txt' ; fprintf('Downloading MIT Scene 67 data to ''%s''. This will take a while.', datasetDir) ; urlwrite(trainImagesUrl, fullfile(datasetDir, 'TrainImages.txt')) ; urlwrite(testImagesUrl, fullfile(datasetDir, 'TestImages.txt')) ; untar(url, datasetDir) ; end % Construct image database imdb structure imdb.meta.sets = {'train', 'val', 'test'} ; trainNames = textread(fullfile(datasetDir, 'TrainImages.txt'),'%s','delimiter','\n') ; testNames = textread(fullfile(datasetDir, 'TestImages.txt'),'%s','delimiter','\n') ; names = [trainNames; testNames]' ; sets = [ones(1,numel(trainNames)), 3*ones(1,numel(testNames))] ; imdb.images.id = 1:numel(names) ; [imdb.images.name,perm] = sort(names) ; imdb.images.set = sets(perm) ; a = regexp(imdb.images.name, '^([^/]+)*/.*$', 'tokens') ; for i = 1:numel(names) a{i} = a{i}{1}{1} ; end [imdb.meta.classes, ~, imdb.images.class] = unique(a) ; imdb.images.class = imdb.images.class(:)' ; imdb.imageDir = fullfile(datasetDir, 'Images') ; if opts.lite ok = {} ; for c = 1:3 ok{end+1} = vl_colsubset(find(imdb.images.class == c & imdb.images.set == 1), 5) ; ok{end+1} = vl_colsubset(find(imdb.images.class == c & imdb.images.set == 3), 5) ; end ok = cat(2, ok{:}) ; imdb.meta.classes = imdb.meta.classes(1:3) ; imdb.images.id = imdb.images.id(ok) ; imdb.images.name = imdb.images.name(ok) ; imdb.images.set = imdb.images.set(ok) ; imdb.images.class = imdb.images.class(ok) ; end vlfeat/apps/recognition/encodeImage.m0000644000175000017500000001223612237004745016616 0ustar dimadimafunction descrs = encodeImage(encoder, im, varargin) % ENCODEIMAGE Apply an encoder to an image % DESCRS = ENCODEIMAGE(ENCODER, IM) applies the ENCODER % to image IM, returning a corresponding code vector PSI. % % IM can be an image, the path to an image, or a cell array of % the same, to operate on multiple images. % % ENCODEIMAGE(ENCODER, IM, CACHE) utilizes the specified CACHE % directory to store encodings for the given images. The cache % is used only if the images are specified as file names. % % See also: TRAINENCODER(). % Author: Andrea Vedaldi % Copyright (C) 2013 Andrea Vedaldi % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). opts.cacheDir = [] ; opts.cacheChunkSize = 512 ; opts = vl_argparse(opts,varargin) ; if ~iscell(im), im = {im} ; end % break the computation into cached chunks startTime = tic ; descrs = cell(1, numel(im)) ; numChunks = ceil(numel(im) / opts.cacheChunkSize) ; for c = 1:numChunks n = min(opts.cacheChunkSize, numel(im) - (c-1)*opts.cacheChunkSize) ; chunkPath = fullfile(opts.cacheDir, sprintf('chunk-%03d.mat',c)) ; if ~isempty(opts.cacheDir) && exist(chunkPath) fprintf('%s: loading descriptors from %s\n', mfilename, chunkPath) ; load(chunkPath, 'data') ; else range = (c-1)*opts.cacheChunkSize + (1:n) ; fprintf('%s: processing a chunk of %d images (%3d of %3d, %5.1fs to go)\n', ... mfilename, numel(range), ... c, numChunks, toc(startTime) / (c - 1) * (numChunks - c + 1)) ; data = processChunk(encoder, im(range)) ; if ~isempty(opts.cacheDir) save(chunkPath, 'data') ; end end descrs{c} = data ; clear data ; end descrs = cat(2,descrs{:}) ; % -------------------------------------------------------------------- function psi = processChunk(encoder, im) % -------------------------------------------------------------------- psi = cell(1,numel(im)) ; if numel(im) > 1 & matlabpool('size') > 1 parfor i = 1:numel(im) psi{i} = encodeOne(encoder, im{i}) ; end else % avoiding parfor makes debugging easier for i = 1:numel(im) psi{i} = encodeOne(encoder, im{i}) ; end end psi = cat(2, psi{:}) ; % -------------------------------------------------------------------- function psi = encodeOne(encoder, im) % -------------------------------------------------------------------- im = encoder.readImageFn(im) ; features = encoder.extractorFn(im) ; imageSize = size(im) ; psi = {} ; for i = 1:size(encoder.subdivisions,2) minx = encoder.subdivisions(1,i) * imageSize(2) ; miny = encoder.subdivisions(2,i) * imageSize(1) ; maxx = encoder.subdivisions(3,i) * imageSize(2) ; maxy = encoder.subdivisions(4,i) * imageSize(1) ; ok = ... minx <= features.frame(1,:) & features.frame(1,:) < maxx & ... miny <= features.frame(2,:) & features.frame(2,:) < maxy ; descrs = encoder.projection * bsxfun(@minus, ... features.descr(:,ok), ... encoder.projectionCenter) ; if encoder.renormalize descrs = bsxfun(@times, descrs, 1./max(1e-12, sqrt(sum(descrs.^2)))) ; end w = size(im,2) ; h = size(im,1) ; frames = features.frame(1:2,:) ; frames = bsxfun(@times, bsxfun(@minus, frames, [w;h]/2), 1./[w;h]) ; descrs = extendDescriptorsWithGeometry(encoder.geometricExtension, frames, descrs) ; switch encoder.type case 'bovw' [words,distances] = vl_kdtreequery(encoder.kdtree, encoder.words, ... descrs, ... 'MaxComparisons', 100) ; z = vl_binsum(zeros(encoder.numWords,1), 1, double(words)) ; z = sqrt(z) ; case 'fv' z = vl_fisher(descrs, ... encoder.means, ... encoder.covariances, ... encoder.priors, ... 'Improved') ; case 'vlad' [words,distances] = vl_kdtreequery(encoder.kdtree, encoder.words, ... descrs, ... 'MaxComparisons', 15) ; assign = zeros(encoder.numWords, numel(words), 'single') ; assign(sub2ind(size(assign), double(words), 1:numel(words))) = 1 ; z = vl_vlad(descrs, ... encoder.words, ... assign, ... 'SquareRoot', ... 'NormalizeComponents') ; end z = z / max(sqrt(sum(z.^2)), 1e-12) ; psi{i} = z(:) ; end psi = cat(1, psi{:}) ; % -------------------------------------------------------------------- function psi = getFromCache(name, cache) % -------------------------------------------------------------------- [drop, name] = fileparts(name) ; cachePath = fullfile(cache, [name '.mat']) ; if exist(cachePath, 'file') data = load(cachePath) ; psi = data.psi ; else psi = [] ; end % -------------------------------------------------------------------- function storeToCache(name, cache, psi) % -------------------------------------------------------------------- [drop, name] = fileparts(name) ; cachePath = fullfile(cache, [name '.mat']) ; vl_xmkdir(cache) ; data.psi = psi ; save(cachePath, '-STRUCT', 'data') ; vlfeat/apps/recognition/readImage.m0000644000175000017500000000162712237004745016276 0ustar dimadimafunction [im, scale] = readImage(imagePath) % READIMAGE Read and standardize image % [IM, SCALE] = READIMAGE(IMAGEPATH) reads the specified image file, % converts the result to SINGLE class, and rescales the image % to have a maximum height of 480 pixels, returing the corresponding % scaling factor SCALE. % % READIMAGE(IM) where IM is already an image applies only the % standardization to it. % Author: Andrea Vedaldi % Copyright (C) 2013 Andrea Vedaldi % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). if ischar(imagePath) try im = imread(imagePath) ; catch error('Corrupted image %s', imagePath) ; end else im = imagePath ; end im = im2single(im) ; scale = 1 ; if (size(im,1) > 480) scale = 480 / size(im,1) ; im = imresize(im, scale) ; im = min(max(im,0),1) ; end vlfeat/apps/recognition/setupCaltech256.m0000644000175000017500000000461412237004745017300 0ustar dimadimafunction imdb = setupCaltech256(datasetDir, varargin) % SETUPCALTECH256 Setup Caltech 256 and 101 datasets % This is similar to SETUPGENERIC(), with modifications to setup % Caltech-101 and Caltech-256 according to the standard % evaluation protocols. Specific options include: % % Variant:: 'caltech256' % Either 'caltech101' or 'caltech256'. % % AutoDownload:: true % Automatically download the data from the Internet if not % found at DATASETDIR. % % See:: SETUPGENERIC(). % Author: Andrea Vedaldi % Copyright (C) 2013 Andrea Vedaldi % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). opts.lite = false ; opts.numTrain = 30 ; opts.numTest = 25 ; opts.seed = 1 ; opts.variant = 'caltech256' ; opts.autoDownload = true ; opts = vl_argparse(opts, varargin) ; % Download and unpack vl_xmkdir(datasetDir) ; switch opts.variant case 'caltech101' name = '101_ObjectCategories' ; checkClassName = 'airplanes' ; url = 'http://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz' ; numClasses = 102 ; case 'caltech256' name = '256_ObjectCategories' ; checkClassName = '001.ak47' ; url = 'http://www.vision.caltech.edu/Image_Datasets/Caltech256/256_ObjectCategories.tar' ; numClasses = 257 ; otherwise error('Uknown dataset variant ''%s''.', opts.variant) ; end if exist(fullfile(datasetDir, checkClassName), 'file') % ok elseif exist(fullfile(datasetDir, name, checkClassName), 'file') datasetDir = fullfile(datasetDir, name) ; elseif opts.autoDownload fprintf('Downloading %s data to ''%s''. This will take a while.', opts.variant, datasetDir) ; untar(url, datasetDir) ; datasetDir = fullfile(datasetDir, name) ; else error('Could not find %s dataset in ''%s''', opts.variant, datasetDir) ; end % Read classes imdb = setupGeneric(datasetDir, ... 'numTrain', opts.numTrain, 'numVal', 0, 'numTest', opts.numTest, ... 'expectedNumClasses', numClasses, ... 'seed', opts.seed, 'lite', opts.lite) ; % In Caltech 256 background is not evaluated switch opts.variant case 'caltech101' case 'caltech256' imdb.images.sets(classes == 257) = 0 ; ok = find(imdb.images.sets ~= 0) ; imdb.images.id = ids(ok) ; imdb.images.name = names(ok) ; imdb.images.set = sets(ok) ; imdb.images.class = classes(ok) ; end vlfeat/apps/recognition/extendDescriptorsWithGeometry.m0000644000175000017500000000146612237004745022502 0ustar dimadimafunction descrs = extendDescriptorsWithGeometry(type, frames, descrs) % EXTENDDESCRIPTORSWITHGEOMETRY Extend feature descriptors with geometric components % DESCRS = EXTENDDESCRIPTORSWITHGEOMETRY(TYPE, FRAMES, DESCRS) % extends the descriptorss DESCRS with either nothing (TYPE = % 'none') or XY (TYPE = 'xy') from the FRAMES matrix. Note that, % for this to make sense, DESCRS and FRAMES should be properly normalized. % Author: Andrea Vedaldi % Copyright (C) 2013 Andrea Vedaldi % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). switch lower(type) case 'none' case 'xy' z = frames(1:2,:) ; descrs = cat(1, descrs, z) ; otherwise error('Uknown geometric extension ''%s''.', type) ; end vlfeat/apps/recognition/traintest.m0000644000175000017500000001372112237004745016433 0ustar dimadimafunction recognition_demo(varargin) % RECOGNITION_DEMO Demonstrates using VLFeat for image classification if ~exist('vl_version') run(fullfile(fileparts(which(mfilename)), ... '..', '..', 'toolbox', 'vl_setup.m')) ; end opts.dataset = 'caltech101' ; opts.prefix = 'bovw' ; opts.encoderParams = {'type', 'bovw'} ; opts.seed = 1 ; opts.lite = true ; opts.C = 1 ; opts.kernel = 'linear' ; opts.dataDir = 'data'; for pass = 1:2 opts.datasetDir = fullfile(opts.dataDir, opts.dataset) ; opts.resultDir = fullfile(opts.dataDir, opts.prefix) ; opts.imdbPath = fullfile(opts.resultDir, 'imdb.mat') ; opts.encoderPath = fullfile(opts.resultDir, 'encoder.mat') ; opts.modelPath = fullfile(opts.resultDir, 'model.mat') ; opts.diaryPath = fullfile(opts.resultDir, 'diary.txt') ; opts.cacheDir = fullfile(opts.resultDir, 'cache') ; opts = vl_argparse(opts,varargin) ; end % do not do anything if the result data already exist if exist(fullfile(opts.resultDir,'result.mat')), load(fullfile(opts.resultDir,'result.mat'), 'ap', 'confusion') ; fprintf('%35s mAP = %04.1f, mean acc = %04.1f\n', opts.prefix, ... 100*mean(ap), 100*mean(diag(confusion))) ; return ; end vl_xmkdir(opts.cacheDir) ; diary(opts.diaryPath) ; diary on ; disp('options:' ); disp(opts) ; % -------------------------------------------------------------------- % Get image database % -------------------------------------------------------------------- if exist(opts.imdbPath) imdb = load(opts.imdbPath); else switch opts.dataset case 'scene67', imdb = setupScene67(opts.datasetDir, 'lite', opts.lite) ; case 'caltech101', imdb = setupCaltech256(opts.datasetDir, 'lite', opts.lite, ... 'variant', 'caltech101', 'seed', opts.seed) ; case 'caltech256', imdb = setupCaltech256(opts.datasetDir, 'lite', opts.lite) ; case 'voc07', imdb = setupVoc(opts.datasetDir, 'lite', opts.lite, 'edition', '2007') ; case 'fmd', imdb = setupFMD(opts.datasetDir, 'lite', opts.lite) ; otherwise, error('Unknown dataset type.') ; end save(opts.imdbPath, '-struct', 'imdb') ; end % -------------------------------------------------------------------- % Train encoder and encode images % -------------------------------------------------------------------- if exist(opts.encoderPath) encoder = load(opts.encoderPath) ; else numTrain = 5000 ; if opts.lite, numTrain = 10 ; end train = vl_colsubset(find(imdb.images.set <= 2), numTrain, 'uniform') ; encoder = trainEncoder(fullfile(imdb.imageDir,imdb.images.name(train)), ... opts.encoderParams{:}, ... 'lite', opts.lite) ; save(opts.encoderPath, '-struct', 'encoder') ; diary off ; diary on ; end descrs = encodeImage(encoder, fullfile(imdb.imageDir, imdb.images.name), ... 'cacheDir', opts.cacheDir) ; diary off ; diary on ; % -------------------------------------------------------------------- % Train and evaluate models % -------------------------------------------------------------------- if isfield(imdb.images, 'class') classRange = unique(imdb.images.class) ; else classRange = 1:numel(imdb.classes.imageIds) ; end numClasses = numel(classRange) ; % apply kernel maps switch opts.kernel case 'linear' case 'hell' descrs = sign(descrs) .* sqrt(abs(descrs)) ; case 'chi2' descrs = vl_homkermap(descrs,1,'kchi2') ; otherwise assert(false) ; end descrs = bsxfun(@times, descrs, 1./sqrt(sum(descrs.^2))) ; % train and test train = find(imdb.images.set <= 2) ; test = find(imdb.images.set == 3) ; lambda = 1 / (opts.C*numel(train)) ; par = {'Solver', 'sdca', 'Verbose', ... 'BiasMultiplier', 1, ... 'Epsilon', 0.001, ... 'MaxNumIterations', 100 * numel(train)} ; scores = cell(1, numel(classRange)) ; ap = zeros(1, numel(classRange)) ; ap11 = zeros(1, numel(classRange)) ; w = cell(1, numel(classRange)) ; b = cell(1, numel(classRange)) ; for c = 1:numel(classRange) if isfield(imdb.images, 'class') y = 2 * (imdb.images.class == classRange(c)) - 1 ; else y = - ones(1, numel(imdb.images.id)) ; [~,loc] = ismember(imdb.classes.imageIds{classRange(c)}, imdb.images.id) ; y(loc) = 1 - imdb.classes.difficult{classRange(c)} ; end if all(y <= 0), continue ; end [w{c},b{c}] = vl_svmtrain(descrs(:,train), y(train), lambda, par{:}) ; scores{c} = w{c}' * descrs + b{c} ; [~,~,info] = vl_pr(y(test), scores{c}(test)) ; ap(c) = info.ap ; ap11(c) = info.ap_interp_11 ; fprintf('class %s AP %.2f; AP 11 %.2f\n', imdb.meta.classes{classRange(c)}, ... ap(c) * 100, ap11(c)*100) ; end scores = cat(1,scores{:}) ; diary off ; diary on ; % confusion matrix (can be computed only if each image has only one label) if isfield(imdb.images, 'class') [~,preds] = max(scores, [], 1) ; confusion = zeros(numClasses) ; for c = 1:numClasses sel = find(imdb.images.class == classRange(c) & imdb.images.set == 3) ; tmp = accumarray(preds(sel)', 1, [numClasses 1]) ; tmp = tmp / max(sum(tmp),1e-10) ; confusion(c,:) = tmp(:)' ; end else confusion = NaN ; end % save results save(opts.modelPath, 'w', 'b') ; save(fullfile(opts.resultDir,'result.mat'), ... 'scores', 'ap', 'ap11', 'confusion', 'classRange', 'opts') ; % figures meanAccuracy = sprintf('mean accuracy: %f\n', mean(diag(confusion))); mAP = sprintf('mAP: %.2f %%; mAP 11: %.2f', mean(ap) * 100, mean(ap11) * 100) ; figure(1) ; clf ; imagesc(confusion) ; axis square ; title([opts.prefix ' - ' meanAccuracy]) ; vl_printsize(1) ; print('-dpdf', fullfile(opts.resultDir, 'result-confusion.pdf')) ; print('-djpeg', fullfile(opts.resultDir, 'result-confusion.jpg')) ; figure(2) ; clf ; bar(ap * 100) ; title([opts.prefix ' - ' mAP]) ; ylabel('AP %%') ; xlabel('class') ; grid on ; vl_printsize(1) ; ylim([0 100]) ; print('-dpdf', fullfile(opts.resultDir,'result-ap.pdf')) ; disp(meanAccuracy) ; disp(mAP) ; diary off ; end vlfeat/apps/recognition/setupFMD.m0000644000175000017500000000225512237004745016105 0ustar dimadimafunction imdb = setupFMD(datasetDir, varargin) % SETUPSCENE67 Setup Flickr Material Dataset % This is similar to SETUPCALTECH101(), with modifications to setup % the Flickr Material Dataset accroding to the standard % evaluation protocols. % % See: SETUPCALTECH101(). % Author: Andrea Vedaldi % Copyright (C) 2013 Andrea Vedaldi % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). opts.lite = false ; opts.seed = 1 ; opts.numTrain = 50 ; opts.numTest = 50 ; opts.autoDownload = true ; opts = vl_argparse(opts, varargin) ; % Download and unpack vl_xmkdir(datasetDir) ; if exist(fullfile(datasetDir, 'image', 'wood')) % ok elseif opts.autoDownload url = 'http://people.csail.mit.edu/celiu/CVPR2010/FMD/FMD.zip' ; fprintf('Downloading FMD data to ''%s''. This will take a while.', datasetDir) ; unzip(url, datasetDir) ; else error('FMD not found in %s', datasetDir) ; end imdb = setupGeneric(fullfile(datasetDir,'image'), ... 'numTrain', opts.numTrain, 'numVal', 0, 'numTest', opts.numTest, ... 'expectedNumClasses', 10, ... 'seed', opts.seed, 'lite', opts.lite) ; vlfeat/apps/phow_caltech101.m0000644000175000017500000002651312237004745014763 0ustar dimadimafunction phow_caltech101() % PHOW_CALTECH101 Image classification in the Caltech-101 dataset % This program demonstrates how to use VLFeat to construct an image % classifier on the Caltech-101 data. The classifier uses PHOW % features (dense SIFT), spatial histograms of visual words, and a % Chi2 SVM. To speedup computation it uses VLFeat fast dense SIFT, % kd-trees, and homogeneous kernel map. The program also % demonstrates VLFeat PEGASOS SVM solver, although for this small % dataset other solvers such as LIBLINEAR can be more efficient. % % By default 15 training images are used, which should result in % about 64% performance (a good performance considering that only a % single feature type is being used). % % Call PHOW_CALTECH101 to train and test a classifier on a small % subset of the Caltech-101 data. Note that the program % automatically downloads a copy of the Caltech-101 data from the % Internet if it cannot find a local copy. % % Edit the PHOW_CALTECH101 file to change the program configuration. % % To run on the entire dataset change CONF.TINYPROBLEM to FALSE. % % The Caltech-101 data is saved into CONF.CALDIR, which defaults to % 'data/caltech-101'. Change this path to the desired location, for % instance to point to an existing copy of the Caltech-101 data. % % The program can also be used to train a model on custom data by % pointing CONF.CALDIR to it. Just create a subdirectory for each % class and put the training images there. Make sure to adjust % CONF.NUMTRAIN accordingly. % % Intermediate files are stored in the directory CONF.DATADIR. All % such files begin with the prefix CONF.PREFIX, which can be changed % to test different parameter settings without overriding previous % results. % % The program saves the trained model in % /-model.mat. This model can be used to % test novel images independently of the Caltech data. % % load('data/baseline-model.mat') ; # change to the model path % label = model.classify(model, im) ; % % Author: Andrea Vedaldi % Copyright (C) 2011-2013 Andrea Vedaldi % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). conf.calDir = 'data/caltech-101' ; conf.dataDir = 'data/' ; conf.autoDownloadData = true ; conf.numTrain = 15 ; conf.numTest = 15 ; conf.numClasses = 102 ; conf.numWords = 600 ; conf.numSpatialX = [2 4] ; conf.numSpatialY = [2 4] ; conf.quantizer = 'kdtree' ; conf.svm.C = 10 ; conf.svm.solver = 'sdca' ; %conf.svm.solver = 'sgd' ; %conf.svm.solver = 'liblinear' ; conf.svm.biasMultiplier = 1 ; conf.phowOpts = {'Step', 3} ; conf.clobber = false ; conf.tinyProblem = true ; conf.prefix = 'baseline' ; conf.randSeed = 1 ; if conf.tinyProblem conf.prefix = 'tiny' ; conf.numClasses = 5 ; conf.numSpatialX = 2 ; conf.numSpatialY = 2 ; conf.numWords = 300 ; conf.phowOpts = {'Verbose', 2, 'Sizes', 7, 'Step', 5} ; end conf.vocabPath = fullfile(conf.dataDir, [conf.prefix '-vocab.mat']) ; conf.histPath = fullfile(conf.dataDir, [conf.prefix '-hists.mat']) ; conf.modelPath = fullfile(conf.dataDir, [conf.prefix '-model.mat']) ; conf.resultPath = fullfile(conf.dataDir, [conf.prefix '-result']) ; randn('state',conf.randSeed) ; rand('state',conf.randSeed) ; vl_twister('state',conf.randSeed) ; % -------------------------------------------------------------------- % Download Caltech-101 data % -------------------------------------------------------------------- if ~exist(conf.calDir, 'dir') || ... (~exist(fullfile(conf.calDir, 'airplanes'),'dir') && ... ~exist(fullfile(conf.calDir, '101_ObjectCategories', 'airplanes'))) if ~conf.autoDownloadData error(... ['Caltech-101 data not found. ' ... 'Set conf.autoDownloadData=true to download the required data.']) ; end vl_xmkdir(conf.calDir) ; calUrl = ['http://www.vision.caltech.edu/Image_Datasets/' ... 'Caltech101/101_ObjectCategories.tar.gz'] ; fprintf('Downloading Caltech-101 data to ''%s''. This will take a while.', conf.calDir) ; untar(calUrl, conf.calDir) ; end if ~exist(fullfile(conf.calDir, 'airplanes'),'dir') conf.calDir = fullfile(conf.calDir, '101_ObjectCategories') ; end % -------------------------------------------------------------------- % Setup data % -------------------------------------------------------------------- classes = dir(conf.calDir) ; classes = classes([classes.isdir]) ; classes = {classes(3:conf.numClasses+2).name} ; images = {} ; imageClass = {} ; for ci = 1:length(classes) ims = dir(fullfile(conf.calDir, classes{ci}, '*.jpg'))' ; ims = vl_colsubset(ims, conf.numTrain + conf.numTest) ; ims = cellfun(@(x)fullfile(classes{ci},x),{ims.name},'UniformOutput',false) ; images = {images{:}, ims{:}} ; imageClass{end+1} = ci * ones(1,length(ims)) ; end selTrain = find(mod(0:length(images)-1, conf.numTrain+conf.numTest) < conf.numTrain) ; selTest = setdiff(1:length(images), selTrain) ; imageClass = cat(2, imageClass{:}) ; model.classes = classes ; model.phowOpts = conf.phowOpts ; model.numSpatialX = conf.numSpatialX ; model.numSpatialY = conf.numSpatialY ; model.quantizer = conf.quantizer ; model.vocab = [] ; model.w = [] ; model.b = [] ; model.classify = @classify ; % -------------------------------------------------------------------- % Train vocabulary % -------------------------------------------------------------------- if ~exist(conf.vocabPath) || conf.clobber % Get some PHOW descriptors to train the dictionary selTrainFeats = vl_colsubset(selTrain, 30) ; descrs = {} ; %for ii = 1:length(selTrainFeats) parfor ii = 1:length(selTrainFeats) im = imread(fullfile(conf.calDir, images{selTrainFeats(ii)})) ; im = standarizeImage(im) ; [drop, descrs{ii}] = vl_phow(im, model.phowOpts{:}) ; end descrs = vl_colsubset(cat(2, descrs{:}), 10e4) ; descrs = single(descrs) ; % Quantize the descriptors to get the visual words vocab = vl_kmeans(descrs, conf.numWords, 'verbose', 'algorithm', 'elkan', 'MaxNumIterations', 50) ; save(conf.vocabPath, 'vocab') ; else load(conf.vocabPath) ; end model.vocab = vocab ; if strcmp(model.quantizer, 'kdtree') model.kdtree = vl_kdtreebuild(vocab) ; end % -------------------------------------------------------------------- % Compute spatial histograms % -------------------------------------------------------------------- if ~exist(conf.histPath) || conf.clobber hists = {} ; parfor ii = 1:length(images) % for ii = 1:length(images) fprintf('Processing %s (%.2f %%)\n', images{ii}, 100 * ii / length(images)) ; im = imread(fullfile(conf.calDir, images{ii})) ; hists{ii} = getImageDescriptor(model, im); end hists = cat(2, hists{:}) ; save(conf.histPath, 'hists') ; else load(conf.histPath) ; end % -------------------------------------------------------------------- % Compute feature map % -------------------------------------------------------------------- psix = vl_homkermap(hists, 1, 'kchi2', 'gamma', .5) ; % -------------------------------------------------------------------- % Train SVM % -------------------------------------------------------------------- if ~exist(conf.modelPath) || conf.clobber switch conf.svm.solver case {'sgd', 'sdca'} lambda = 1 / (conf.svm.C * length(selTrain)) ; w = [] ; parfor ci = 1:length(classes) perm = randperm(length(selTrain)) ; fprintf('Training model for class %s\n', classes{ci}) ; y = 2 * (imageClass(selTrain) == ci) - 1 ; [w(:,ci) b(ci) info] = vl_svmtrain(psix(:, selTrain(perm)), y(perm), lambda, ... 'Solver', conf.svm.solver, ... 'MaxNumIterations', 50/lambda, ... 'BiasMultiplier', conf.svm.biasMultiplier, ... 'Epsilon', 1e-3); end case 'liblinear' svm = train(imageClass(selTrain)', ... sparse(double(psix(:,selTrain))), ... sprintf(' -s 3 -B %f -c %f', ... conf.svm.biasMultiplier, conf.svm.C), ... 'col') ; w = svm.w(:,1:end-1)' ; b = svm.w(:,end)' ; end model.b = conf.svm.biasMultiplier * b ; model.w = w ; save(conf.modelPath, 'model') ; else load(conf.modelPath) ; end % -------------------------------------------------------------------- % Test SVM and evaluate % -------------------------------------------------------------------- % Estimate the class of the test images scores = model.w' * psix + model.b' * ones(1,size(psix,2)) ; [drop, imageEstClass] = max(scores, [], 1) ; % Compute the confusion matrix idx = sub2ind([length(classes), length(classes)], ... imageClass(selTest), imageEstClass(selTest)) ; confus = zeros(length(classes)) ; confus = vl_binsum(confus, ones(size(idx)), idx) ; % Plots figure(1) ; clf; subplot(1,2,1) ; imagesc(scores(:,[selTrain selTest])) ; title('Scores') ; set(gca, 'ytick', 1:length(classes), 'yticklabel', classes) ; subplot(1,2,2) ; imagesc(confus) ; title(sprintf('Confusion matrix (%.2f %% accuracy)', ... 100 * mean(diag(confus)/conf.numTest) )) ; print('-depsc2', [conf.resultPath '.ps']) ; save([conf.resultPath '.mat'], 'confus', 'conf') ; % ------------------------------------------------------------------------- function im = standarizeImage(im) % ------------------------------------------------------------------------- im = im2single(im) ; if size(im,1) > 480, im = imresize(im, [480 NaN]) ; end % ------------------------------------------------------------------------- function hist = getImageDescriptor(model, im) % ------------------------------------------------------------------------- im = standarizeImage(im) ; width = size(im,2) ; height = size(im,1) ; numWords = size(model.vocab, 2) ; % get PHOW features [frames, descrs] = vl_phow(im, model.phowOpts{:}) ; % quantize local descriptors into visual words switch model.quantizer case 'vq' [drop, binsa] = min(vl_alldist(model.vocab, single(descrs)), [], 1) ; case 'kdtree' binsa = double(vl_kdtreequery(model.kdtree, model.vocab, ... single(descrs), ... 'MaxComparisons', 50)) ; end for i = 1:length(model.numSpatialX) binsx = vl_binsearch(linspace(1,width,model.numSpatialX(i)+1), frames(1,:)) ; binsy = vl_binsearch(linspace(1,height,model.numSpatialY(i)+1), frames(2,:)) ; % combined quantization bins = sub2ind([model.numSpatialY(i), model.numSpatialX(i), numWords], ... binsy,binsx,binsa) ; hist = zeros(model.numSpatialY(i) * model.numSpatialX(i) * numWords, 1) ; hist = vl_binsum(hist, ones(size(bins)), bins) ; hists{i} = single(hist / sum(hist)) ; end hist = cat(1,hists{:}) ; hist = hist / sum(hist) ; % ------------------------------------------------------------------------- function [className, score] = classify(model, im) % ------------------------------------------------------------------------- hist = getImageDescriptor(model, im) ; psix = vl_homkermap(hist, 1, 'kchi2', 'period', .7) ; scores = model.w' * psix + model.b' ; [score, best] = max(scores) ; className = model.classes{best} ; vlfeat/vlfeat.sln0000644000175000017500000000155512236612215012752 0ustar dimadima Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vlfeat", "vlfeat.vcproj", "{07367665-DCDA-4044-94CE-ABC01CC4119D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {07367665-DCDA-4044-94CE-ABC01CC4119D}.Debug|Win32.ActiveCfg = Debug|Win32 {07367665-DCDA-4044-94CE-ABC01CC4119D}.Debug|Win32.Build.0 = Debug|Win32 {07367665-DCDA-4044-94CE-ABC01CC4119D}.Release|Win32.ActiveCfg = Release|Win32 {07367665-DCDA-4044-94CE-ABC01CC4119D}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal vlfeat/make/0000755000175000017500000000000012237042314011660 5ustar dimadimavlfeat/make/dll.mak0000644000175000017500000001021412237042135013124 0ustar dimadima# file: dll.mak # description: Build VLFeat DLL # author: Andrea Vedaldi # Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. # All rights reserved. # # This file is part of the VLFeat library and is made available under # the terms of the BSD license (see the COPYING file). all: dll-all clean: dll-clean archclean: dll-archclean distclean: dll-distclean info: dll-info # -------------------------------------------------------------------- # Configuration # -------------------------------------------------------------------- DLL_NAME = vl DLL_CFLAGS = $(STD_CFLAGS) DLL_CFLAGS += -fvisibility=hidden -fPIC -DVL_BUILD_DLL -pthread DLL_CFLAGS += $(call if-like,%_sse2,$*, $(if $(DISABLE_SSE2),,-msse2)) DLL_CFLAGS += $(call if-like,%_avx,$*, $(if $(DISABLE_AVX),,-mavx)) DLL_CFLAGS += $(if $(DISABLE_OPENMP),,-fopenmp) DLL_LDFLAGS += -lm -lpthread BINDIR = bin/$(ARCH) # Mac OS X on Intel 32 bit processor ifeq ($(ARCH),maci) DLL_SUFFIX := dylib DLL_LDFLAGS += -m32 endif # Mac OS X on Intel 64 bit processor ifeq ($(ARCH),maci64) DLL_SUFFIX := dylib DLL_LDFLAGS += -m64 endif # Linux-32 ifeq ($(ARCH),glnx86) DLL_SUFFIX := so DLL_LDFLAGS += -m32 endif # Linux-64 ifeq ($(ARCH),glnxa64) DLL_SUFFIX := so DLL_LDFLAGS += -m64 endif # -------------------------------------------------------------------- # Build # -------------------------------------------------------------------- # On Mac OS X the library install_name is prefixed with @loader_path/. # At run time this causes the loader to search for a local copy of the # library for any binary which is linked against it. The install_name # can be modified later by install_name_tool. dll_tgt := $(BINDIR)/lib$(DLL_NAME).$(DLL_SUFFIX) dll_src := $(wildcard $(VLDIR)/vl/*.c) dll_hdr := $(wildcard $(VLDIR)/vl/*.h) dll_obj := $(addprefix $(BINDIR)/objs/, $(notdir $(dll_src:.c=.o))) dll_dep := $(dll_obj:.o=.d) arch_bins += $(dll_tgt) comm_bins += deps += $(dll_dep) .PHONY: dll .PHONY: dll-all, dll-clean, dll-archclean, dll-distclean .PHONY: dll-info no_dep_targets += dll-dir dll-clean dll-archclean dll-distclean no_dep_targets += dll-info dll-all: dll dll: $(dll_tgt) # generate the dll-dir target $(eval $(call gendir, dll, $(BINDIR) $(BINDIR)/objs)) $(BINDIR)/objs/%.o : $(VLDIR)/vl/%.c $(dll-dir) $(call C,CC) $(DLL_CFLAGS) \ -c "$(<)" -o "$(@)" $(BINDIR)/objs/%.d : $(VLDIR)/vl/%.c $(dll-dir) $(call C,CC) $(DLL_CFLAGS) \ -M -MT '$(BINDIR)/objs/$*.o $(BINDIR)/objs/$*.d' \ "$(<)" -MF "$(@)" $(BINDIR)/lib$(DLL_NAME).dylib : $(dll_obj) $(call C,CC) -m64 \ -dynamiclib \ -undefined suppress \ -flat_namespace \ -install_name @loader_path/lib$(DLL_NAME).dylib \ -compatibility_version $(VER) \ -current_version $(VER) \ -isysroot $(SDKROOT) \ -mmacosx_version_min=$(MACOSX_DEPLOYMENT_TARGET) \ $(DLL_LDFLAGS) \ $(if $(DISABLE_OPENMP),,-fopenmp) \ $^ \ -o $@ $(BINDIR)/lib$(DLL_NAME).so : $(dll_obj) $(call C,CC) -shared \ $(^) \ $(DLL_LDFLAGS) \ $(if $(DISABLE_OPENMP),,-fopenmp) \ -o $(@) dll-clean: rm -f $(dll_dep) $(dll_obj) dll-archclean: dll-clean rm -rf $(BINDIR) dll-distclean: rm -rf bin dll-info: $(call echo-title,VLFeat core library) $(call dump-var,dll_hdr) $(call dump-var,dll_src) $(call dump-var,dll_obj) $(call dump-var,dll_dep) $(call echo-var,BINDIR) $(call echo-var,DLL_NAME) $(call echo-var,DLL_CFLAGS) $(call echo-var,DLL_LDFLAGS) $(call echo-var,DLL_SUFFIX) $(call echo-var,LIBTOOL) @echo # Local variables: # mode: Makefile # End: vlfeat/make/update-mak.sh0000755000175000017500000000354512237004736014264 0ustar dimadima#!/bin/bash # file: update-mak.sh # description: Helper script to update Makefile.mak # author: Andrea Vedaldi # AUTORIGHTS # This script updates Makefile.mak based on the current source tree # and version in vl/generic.h. It saves the new version to # Makefile.mak.new. function make { # sed below removes the trailing '\' from the last entry ( printf '%s \\\n' "$1 =" find "$2" \ -name '*.c' \ -not -path 'vl/doc/*' \ | tr '/' '\' | while read -r x do printf ' %s \\\n' "$x" done ) | sed '$s/ *\\$//' echo } function sub { # Put substitution text at the beginning. Then sed puts the # beginning in its hold buffer, finds the paragraph starting with # "$2 =", deletes all but the last lines of it and substititue the # last line with the hold buffer. It also removes trailing # whitespaces. (make "$2" "$3" ; echo "$1") | \ sed -e '1{h;d;}' \ -e '2,/^$/{H;d;}' \ -e "/$2 =/,/^$/{/^$/!d;g;}" \ -e 's/ *$//' } function subv { # Substitutes VER = x.x.x with the new version string. echo "$1" | sed -e "/VER *=/s/\(\([0-9][0-9]*\.\{0,1\}\)\{3\}\)/$2/" } # source version string from vl/generic.h ver=$(cat vl/generic.h | sed -n \ 's/.*VL_VERSION_STRING.*\"\([0-9.]*\)\".*/\1/p') # source current nmake script a=$(cat Makefile.mak) # updaetes version string a=$(subv "$a" "$ver") # updates hard-wired list of source code files in the nmake script a=$(sub "$a" libsrc vl) a=$(sub "$a" cmdsrc src) a=$(sub "$a" mexsrc toolbox) echo "$a" > Makefile.mak.new diffs=$(diff Makefile.mak Makefile.mak.new) if [ -z "$diffs" ] then echo "Makefile.mak is up to date" rm Makefile.mak.new else echo "Makefile.mak should be updated to Makefile.mak.new" echo "Differences:" echo "$diffs" fi vlfeat/make/matlab.mak0000644000175000017500000002015612237042135013617 0ustar dimadima# file: matlab.mak # description: Build MATALB toolbox # author: Andrea Vedaldi # Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. # All rights reserved. # # This file is part of the VLFeat library and is made available under # the terms of the BSD license (see the COPYING file). # MATLAB support is enabled if $(MEX) is executable and if MATLAB root # can be deduced from the output of `$(MEX) -v`. Therefore setting MEX to # the empty string disables MATLAB support. MEX ?= mex MATLAB_PATH ?= $(strip $(shell test "$$(command -v '$(MEX)')" && \ $(MEX) -v 2>&1 | sed -n 's/.*MATLAB *= *\(.*\)/\1/gp')) MATLAB_EXE ?= "$(MATLAB_PATH)/bin/matlab" # if expand to empty string, set to empty string for use with ifdef ifeq ($(MATLAB_PATH),) MATLAB_PATH= endif ifdef MATLAB_PATH all: mex-all matlab-all clean: mex-clean matlab-clean archclean: mex-archclean matlab-archclean distclean: mex-distclean matlab-distclean endif info: mex-info matlab-info MEX_ARCH = $(ARCH) MEX_CFLAGS = -I$(VLDIR) -I$(VLDIR)/toolbox MEX_LDFLAGS = -L$(BINDIR) -lvl MEX_FLAGS = $(MEXFLAGS) MEX_FLAGS += -$(MEX_ARCH) MEX_FLAGS += $(if $(DEBUG), -g, -O) MEX_FLAGS += $(if $(PROFILE), -O -g,) MEX_FLAGS += CFLAGS='$$CFLAGS $(STD_CFLAGS)' # Mac OS X on Intel 32 bit processor ifeq ($(ARCH),maci) MEX_SUFFIX := mexmaci MEX_FLAGS += LDFLAGS='$$LDFLAGS $(STD_LDFLAGS)' MEX_FLAGS += CC='$(CC)' MEX_FLAGS += LD='$(CC)' endif # Mac OS X on Intel 64 bit processor ifeq ($(ARCH),maci64) MEX_SUFFIX := mexmaci64 MEX_FLAGS += -largeArrayDims MEX_FLAGS += LDFLAGS='$$LDFLAGS $(STD_LDFLAGS)' MEX_FLAGS += CC='$(CC)' MEX_FLAGS += LD='$(CC)' endif # Linux on 32 bit processor ifeq ($(ARCH),glnx86) MEX_SUFFIX := mexglx MEX_FLAGS += LDFLAGS='$$LDFLAGS $(STD_LDFLAGS) -Wl,--rpath,\\\$$ORIGIN/' endif # Linux on 64 bit processorm ifeq ($(ARCH),glnxa64) MEX_SUFFIX := mexa64 MEX_FLAGS += -largeArrayDims MEX_FLAGS += LDFLAGS='$$LDFLAGS $(STD_LDFLAGS) -Wl,--rpath,\\\$$ORIGIN/' endif MEX_BINDIR := toolbox/mex/$(MEX_SUFFIX) # -------------------------------------------------------------------- # Sanity check # -------------------------------------------------------------------- err_no_mex_suffix = $(shell echo "** Could not set MEX_SUFFIX for ARCH = $(ARCH)" 1>&2) err_no_mex_suffix +=no_mex_suffix ifeq ($(MEX_SUFFIX),) die:=$(error $(err_no_mex_suffix)) endif # -------------------------------------------------------------------- # Build # -------------------------------------------------------------------- .PHONY: mex-all, mex-dir, mex-info, mex-test .PHONY: mex-clean, mex-distclean, mex-archclean no_dep_targets += mex-dir mex-info mex-test no_dep_targets += mex-clean mex-distclean mex-archclean mex_src := $(shell find $(VLDIR)/toolbox -name "*.c") mex_tgt := $(addprefix $(MEX_BINDIR)/,\ $(notdir $(mex_src:.c=.$(MEX_SUFFIX)) ) ) mex_dep := $(mex_tgt:.$(MEX_SUFFIX)=.d) mex_dll := $(MEX_BINDIR)/lib$(DLL_NAME).$(DLL_SUFFIX) ifdef MATLAB_PATH arch_bins += $(mex_tgt) $(MEX_BINDIR)/lib$(DLL_NAME).$(DLL_SUFFIX) comm_bins += deps += $(mex_dep) endif vpath vl_%.c $(shell find $(VLDIR)/toolbox -type d) mex-all: $(mex_dll) $(mex_tgt) # generate the mex-dir target $(eval $(call gendir, mex, $(MEX_BINDIR))) # generate mex-dir target $(eval $(call gendir, mex, $(MEX_BINDIR))) $(MEX_BINDIR)/lib$(DLL_NAME).dylib : $(mex-dir) $(dll_obj) $(call C,CC) -m64 \ -dynamiclib \ -undefined suppress \ -flat_namespace \ -install_name @loader_path/lib$(DLL_NAME).dylib \ -compatibility_version $(VER) \ -current_version $(VER) \ -isysroot $(SDKROOT) \ -mmacosx_version_min=$(MACOSX_DEPLOYMENT_TARGET) \ $(DLL_LDFLAGS) \ $(if $(DISABLE_OPENMP),,-L$(MATLAB_PATH)/bin/$(ARCH)/) \ $(if $(DISABLE_OPENMP),,-L$(MATLAB_PATH)/sys/os/$(ARCH)/ -liomp5) \ $(dll_obj) \ -o $@ $(MEX_BINDIR)/lib$(DLL_NAME).so : $(mex-dir) $(dll_obj) $(call C,CC) -shared \ $(dll_obj) \ $(DLL_LDFLAGS) \ $(if $(DISABLE_OPENMP),,-L$(MATLAB_PATH)/bin/$(ARCH)/) \ $(if $(DISABLE_OPENMP),,-L$(MATLAB_PATH)/sys/os/$(ARCH)/ -liomp5) \ -o $(@) #$(mex_dll) : $(dll_tgt) $(mex-dir) # cp -v "$(<)" "$(@)" $(MEX_BINDIR)/%.d : %.c $(mex-dir) $(call C,CC) \ $(MEX_CFLAGS) \ -I"$(MATLAB_PATH)/extern/include" -M -MT \ '$(MEX_BINDIR)/$*.$(MEX_SUFFIX) $(MEX_BINDIR)/$*.d' \ "$(<)" -MF "$(@)" $(MEX_BINDIR)/%.$(MEX_SUFFIX) : %.c $(mex-dir) $(call C,MEX) \ $(MEX_FLAGS) \ $(MEX_CFLAGS) \ "$(<)" \ $(MEX_LDFLAGS) \ -outdir "$(dir $(@))" mex-info: $(call echo-title,MATLAB support) $(if $(MATLAB_PATH),\ @echo "MATLAB support enabled (MEX found)",\ @echo "MATLAB support disabled (MEX not found)") $(call dump-var,mex_src) $(call dump-var,mex_tgt) $(call dump-var,mex_dep) mex-clean: rm -f $(mex_dep) mex-archclean: mex-clean rm -rf $(MEX_BINDIR) mex-distclean: rm -rf "toolbox/mex" ; # -------------------------------------------------------------------- # Prefix-less M files # -------------------------------------------------------------------- # Populate the directory toolbox/noprefix with links to the MEX / M # files without the vl_ prefix. m_src := $(shell find $(VLDIR)/toolbox -name "vl_*.m") m_lnk := $(addprefix toolbox/noprefix/, \ $(filter-out setup.m, \ $(filter-out help.m, \ $(filter-out version.m, \ $(filter-out root.m, \ $(filter-out demo.m, \ $(filter-out compile.m, \ $(filter-out test_%, \ $(filter-out demo_%, \ $(filter-out tune_%, \ $(subst vl_,,$(notdir $(m_src))))))))))))) m_lnk += $(addprefix toolbox/noprefix/, \ $(subst, $(MEX_SUFFIX),.m,$(subst vl_,,$(notdir $(mex_tgt))))) vpath vl_%.m $(shell find $(VLDIR)/toolbox -type d) .PHONY: matlab-all, matlab-noprefix, matlab-info .PHONY: matlab-clean, matlab-archclean, matlab-distclean no_dep_targets += matlab-all matlab-noprefix matlab-info no_dep_targets += matlab-clean matlab-archclean matlab-distclean ifdef MATLAB_PATH arch_bins += comm_bins += $(m_lnk) deps += endif matlab-all: matlab-noprefix # generate matlab-noprefix-dir target $(eval $(call gendir, matlab-noprefix, toolbox/noprefix)) matlab-noprefix: $(matlab-noprefix-dir) $(m_lnk) toolbox/noprefix/%.m : vl_%.m @upperName=`echo "$*" | tr [a-z] [A-Z]` ; \ echo "function varargout = $*(varargin)" > "$@" ; \ cat "$<" | sed -n -e '/^function/b' -e '/^%.*$$/p' \ -e '/^%.*$$/b' -e q >> "$@" ; \ echo "[varargout{1:nargout}] = vl_$*(varargin{:});" >> "$@" ; matlab-test: @echo "Testing Matlab toolbox" ; \ cd toolbox ; \ RESULT=$$( \ $(MATLAB_EXE) -$(ARCH) -nodesktop -r \ "vl_setup('xtest','verbose') ; vl_test ; exit") ; \ echo "$$RESULT" ; \ if test -n "$$(echo \"$$RESULT\" | grep \"failed\")" ; \ then \ echo "Matlab toolbox test encountered an error!" ; \ exit 1 ; \ else \ echo "Matlab toolbox test completed successfully!" ; \ fi matlab-info: $(call dump-var,m_src) $(call dump-var,m_lnk) $(call echo-var,mex_dll) $(call echo-var,MATLAB_PATH) $(call echo-var,MATLAB_EXE) $(call echo-var,MEX) $(call echo-var,MEX_FLAGS) $(call echo-var,MEX_CFLAGS) $(call echo-var,MEX_LDFLAGS) @echo matlab-clean: matlab-archclean: matlab-clean matlab-distclean: rm -rf toolbox/noprefix # Emacs: # Local variables: # mode: Makefile # End: vlfeat/make/doc.mak0000644000175000017500000002602512237042135013125 0ustar dimadima# file: doc.mak # description: Makefile submodule to build the documentation # author: Andrea Vedaldi # Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. # All rights reserved. # # This file is part of the VLFeat library and is made available under # the terms of the BSD license (see the COPYING file). info: doc-info clean: doc-clean distclean: doc-distclean archclean: doc-archclean # -------------------------------------------------------------------- # Configuration # -------------------------------------------------------------------- DOXYGEN ?= doxygen PDFLATEX ?= pdflatex FIG2DEV ?= fig2dev INKSCAPE ?= inkscape CONVERT ?= convert PYTHON ?= python GROFF ?= groff TIDY ?= tidy MV ?= mv SED ?= sed # 95 DPI makes a letter page 808 pixels large screen_dpi := 95 doc: doc-api doc-man doc-matlab # generate doc-dir: target $(eval $(call gendir, doc, \ doc \ doc/build doc/build/api doc/build/man doc/build/figures \ doc/demo doc/figures doc/matlab doc/api)) # generate results-dir: target $(eval $(call gendir, results, results)) # -------------------------------------------------------------------- # MATLAB # -------------------------------------------------------------------- .PHONY: doc-deep ifdef MATLAB_PATH doc-matlab: doc/matlab/helpsearch/deletable endif # use MATLAB to create the figures for the tutorials doc-deep: all $(doc-dir) $(results-dir) cd toolbox ; \ VL_DEMO_PRINT=y $(MATLAB_EXE) \ -$(ARCH) -nodesktop -nosplash \ -r "clear mex;vl_setup demo;vl_demo;exit" @echo "Trimming images ..." find doc/demo -name "*.jpg" -exec $(CONVERT) -trim "{}" "{}" ";" @echo "Done trimming" $(MAKE) doc # make documentation searchable in MATLAB doc/matlab/helpsearch/deletable : doc/build/matlab/helpsearch/deletable $(doc-dir) cp -v doc/build/matlab/helptoc.xml doc/matlab/ cp -rv doc/build/matlab/helpsearch doc/matlab/ doc/build/matlab/helpsearch/deletable: doc/build/matlab/helptoc.xml $(MATLAB_EXE) -$(ARCH) -nodisplay -r "builddocsearchdb('doc/build/matlab/') ; exit" # -------------------------------------------------------------------- # MDoc # -------------------------------------------------------------------- doc-matlab: doc/build/matlab/mdoc.html # # Use mdoc.py to create the toolbox documentation that will be # embedded in the website. # doc/build/matlab/mdoc.html doc/build/matlab/helptoc.xml: \ $(m_src) \ docsrc/mdoc.py #make/doc.mak $(PYTHON) docsrc/mdoc.py toolbox doc/build/matlab \ --format=web \ --exclude='noprefix/.*' \ --exclude='xtune/.*' \ --exclude='xtest/.*' \ --exclude='.*/vl_test_.*' \ --exclude='.*/vl_demo_.*' \ --exclude='.*/vl_tune_.*' \ --helptoc \ --helptoc-toolbox-name VLFeat \ --verbose # -------------------------------------------------------------------- # Auto-include demo m-files # -------------------------------------------------------------------- m_demo_src=$(wildcard toolbox/demo/vl_demo_*.m) # Convert the various man pages doc/build/matlab/demo.xml : $(m_demo_src) $(doc-dir) make/doc.mak @echo "Indexing demo files -> $@" @( \ echo '' ; \ echo "" ; \ for fullName in $(m_demo_src) ; \ do \ fileName=$${fullName#toolbox/demo/} ; \ stem=$${fileName%.*} ; \ ( \ echo "" ; \ printf "

Source code for %s.m

" "$${stem}"; \ echo "

This file is located in the toolbox/demo folder in VLFeat package.

" ; \ echo "" ; \ echo "" ; \ echo "" ; \ echo "" \ ) ; \ done ; \ echo "
" ; \ ) > "$@" # -------------------------------------------------------------------- # Man # -------------------------------------------------------------------- doc-man: doc/build/man/xman.xml doc/build/man/xman.html man_src := $(wildcard src/*.1) $(wildcard src/*.7) man_tgt := $(subst src/,doc/build/man/,$(addsuffix .html,$(man_src))) doc/build/man/index.html : $(doc-dir) # Integrate in Webdoc doc/build/man/xman.xml : $(man_tgt) $(doc-dir) @echo "Generating MAN XML webdooc document $@" @echo "" > "$@" @for fullName in $(man_src) ; \ do \ fileName=$${fullName#src/} ; \ stem=$${fileName%.*} ; \ ( \ echo "" ; \ echo "" ; \ echo "" \ ) >> "$@" ; \ done echo "" >> "$@" # Index page doc/build/man/xman.html : $(man_tgt) $(doc-dir) @echo "Generating MAN HTML index page $@" @echo "
    " > "$@" @for fullName in $(man_src) ; \ do \ fileName=$${fullName#src/} ; \ stem=$${fileName%.*} ; \ echo "
  • $${stem}
  • " >> "$@" ; \ done echo "
" >> "$@" # Convert the various man pages doc/build/man/%.html : src/% $(doc-dir) @$(print-command MAN2HTML, $@) @( \ echo '' ; \ echo "" ; \ $(GROFF) -mandoc -Thtml < "$<" | \ $(TIDY) -asxhtml 2>/dev/null | \ sed -e '1,// d' -e '/<\/body>/,$$ d' ; \ echo "" \ ) > "$@" # -------------------------------------------------------------------- # FIG and SVG figures and images # -------------------------------------------------------------------- doc_fig_src := $(wildcard docsrc/figures/*.fig) doc_svg_src := $(wildcard docsrc/figures/*.svg) doc_fig_tgt += $(subst docsrc/,doc/,$(doc_fig_src:.fig=.png)) $(subst docsrc/,doc/,$(doc_svg_src:.svg=.png)) .PRECIOUS: doc/build/figures/%.pdf .PRECIOUS: doc/build/figures/%.tex doc/figures/%.png : doc/build/figures/%.pdf $(call C,CONVERT) -density 300 "$<" -resample $(screen_dpi) -trim "$@" # Inkscape doc/build/figures/%-raw.pdf doc/build/figures/%-raw.tex: docsrc/figures/%.svg $(call C,INKSCAPE) --export-pdf=doc/build/figures/$(*)-raw.pdf --export-latex "$<" @$(MV) doc/build/figures/$(*)-raw.pdf_tex doc/build/figures/$(*)-raw.tex @$(SED) -e 's/$(*)-raw/doc\/build\/figures\/$(*)-raw/g' -i.bak 'doc/build/figures/$(*)-raw.tex' # Fig doc/build/figures/%-raw.tex : docsrc/figures/%.fig $(doc-dir) $(call C,FIG2DEV) -L pdftex_t -p doc/build/figures/$*-raw.pdf "$<" "$@" doc/build/figures/%-raw.pdf : docsrc/figures/%.fig $(doc-dir) $(call C,FIG2DEV) -L pdftex "$<" "$@" doc/build/figures/%.pdf doc/build/figures/%.aux doc/build/figures/%.log : \ doc/build/figures/%.tex doc/build/figures/%-raw.tex doc/build/figures/%-raw.pdf $(doc-dir) $(call C,PDFLATEX) -shell-escape -interaction=batchmode -output-directory="$(dir $@)" "$<" 2>/dev/null doc/build/figures/%.tex : $(doc-dir) @$(print-command GEN, $@) @/bin/echo '\documentclass[landscape]{article}' >$@ @/bin/echo '\usepackage[paper=a2paper,margin=0pt]{geometry}' >>$@ @/bin/echo '\usepackage{graphicx,color}' >>$@ @/bin/echo '\begin{document}' >>$@ @/bin/echo '\pagestyle{empty}' >>$@ @/bin/echo '\input{doc/build/figures/$(*)-raw.tex}' >>$@ @/bin/echo '\end{document}' >>$@ # -------------------------------------------------------------------- # Doxygen # -------------------------------------------------------------------- doc-api: doc/api/index.html doc/api/index.html: docsrc/doxygen.conf docsrc/vlfeat.bib VERSION \ $(dll_src) $(dll_hdr) $(doc_fig_tgt) toolbox/mexutils.h \ doc/build/doxygen_header.html doc/build/doxygen_footer.html ln -sf docsrc/vlfeat.bib vlfeat.bib $(DOXYGEN) $< 2>&1 | sed -e 's/Warning:/warning: /g' rm vlfeat.bib cp -fv docsrc/doxygen.css doc/api/doxygen.css # -------------------------------------------------------------------- # Webdoc # -------------------------------------------------------------------- webdoc_src = $(wildcard docsrc/*.xml) $(wildcard docsrc/*.html) doc: doc/index.html doc/vlfeat.css doc/pygmentize.css $(doc_fig_tgt) # prebuild to generate doxygen header and footer doc/build/doxygen_header.html doc/build/doxygen_footer.html: $(webdoc_src) $(doc-dir) VERSION=$(VER) $(PYTHON) docsrc/webdoc.py \ --outdir=doc/build/ \ --verbose \ docsrc/vlfeat-website-preproc.xml cat doc/build/api/index.html | \ sed -n '//q;p' > doc/build/doxygen_header.html echo '
' >> doc/build/doxygen_header.html cat doc/build/api/index.html | \ sed -n '//,$$p' > doc/build/doxygen_footer.html doc/vlfeat.css : docsrc/vlfeat.css cp -fv "$<" "$@" doc/pygmentize.css : docsrc/pygmentize.css cp -fv "$<" "$@" # build: this is the last step integrating all documentation doc/index.html: $(webdoc_src) $(doc-dir) \ doc/api/index.html \ doc/build/matlab/mdoc.html \ doc/build/man/xman.xml \ doc/build/man/xman.html \ doc/build/matlab/demo.xml \ docsrc/webdoc.py \ $(html_src) cp doc/api/index.html doc/api/index.html.bak VERSION=$(VER) $(PYTHON) docsrc/webdoc.py \ --outdir=doc \ --verbose \ --doxytag=doc/doxygen.tag \ --doxydir=api \ docsrc/vlfeat-website.xml mv doc/api/index.html.bak doc/api/index.html rsync -r docsrc/images doc/ # -------------------------------------------------------------------- # Maintenance and others # -------------------------------------------------------------------- .PHONY: doc-clean, doc-archclean, doc-distclean no_dep_targets := doc-clean doc-archclean doc-distclean VERSION: vl/generic.h echo "$(VER)" > VERSION doc-clean: rm -rf doc/build doc-archclean: doc-distclean: rm -f docsrc/*.pyc rm -rf doc # -------------------------------------------------------------------- # Debug Makefile # -------------------------------------------------------------------- .PHONY: doc-info doc-info : $(call echo-title,Documentation) $(call dump-var,man_src) $(call dump-var,fig_src) $(call dump-var,demo_src) $(call dump-var,pdf_tgt) $(call dump-var,eps_tgt) $(call dump-var,png_tgt) $(call dump-var,jpg_tgt) $(call dump-var,man_tgt) $(call dump-var,DOXYGEN) @echo # -------------------------------------------------------------------- # Xcode Support # -------------------------------------------------------------------- .PHONY: dox- dox- : dox .PHONY: dox-clean dox-clean: # Local variables: # mode: Makefile # End: vlfeat/make/nmake_helper.mak0000644000175000017500000000423412237004745015015 0ustar dimadima# -------------------------------------------------------------------- # Detect Visual Studio version # -------------------------------------------------------------------- !IF "$(MSVSVER)" == "" !IF "$(_NMAKE_VER)" == "" VL_MSVC = 4.0 VL_MSVS = 40 !ERROR *** Failed to determine version of Visual C++ !ELSEIF "$(_NMAKE_VER)" == "162" VL_MSVC = 5.0 VL_MSVS = 50 !ERROR *** Detected Visual C++ 5.0 - NOT SUPPORTED !ELSEIF "$(_NMAKE_VER)" == "6.00.8168.0" VL_MSVC = 6.0 VL_MSVS = 60 VL_MSC = 1200 !ERROR *** Detected Visual C++ 6.0 - NOT SUPPORTED !ELSEIF "$(_NMAKE_VER)" == "7.00.9466" VL_MSVC = 7.0 VL_MSVS = 70 VL_MSC = 1300 !ERROR *** Detected Visual C++ 7.0 - NOT SUPPORTED !ELSEIF "$(_NMAKE_VER)" == "7.10.3077" VL_MSVC = 7.1 VL_MSVS = 71 VL_MSC = 1310 !ERROR *** Detected Visual C++ 7.1 - NOT SUPPORTED !ELSEIF "$(_NMAKE_VER)" == "8.00.50727.42" VL_MSVC = 8.0 VL_MSVS = 80 VL_MSC = 1400 !ERROR *** Detected Visual C++ 8.0 - NOT SUPPORTED !ELSEIF "$(_NMAKE_VER)" == "8.00.50727.762" VL_MSVC = 8.0 VL_MSVS = 80 VL_MSC = 1400 !ERROR *** Detected Visual C++ 8.0 - NOT SUPPORTED !ELSEIF "$(_NMAKE_VER)" == "9.00.21022.08" VL_MSVC = 9.0 VL_MSVS = 90 VL_MSC = 1500 !ELSEIF "$(_NMAKE_VER)" == "9.00.30729.01" VL_MSVC = 9.0 VL_MSVS = 90 VL_MSC = 1500 !ELSEIF "$(_NMAKE_VER)" == "10.00.30128.01" VL_MSVC = 10.0 VL_MSVS = 100 VL_MSC = 1600 !ELSEIF "$(_NMAKE_VER)" == "10.00.30319.01" VL_MSVC = 10.0 VL_MSVS = 100 VL_MSC = 1600 !ELSEIF "$(_NMAKE_VER)" == "11.00.40825.2" VL_MSVC = 11.0 VL_MSVS = 110 VL_MSC = 1700 !ELSEIF "$(_NMAKE_VER)" == "11.00.51106.1" VL_MSVC = 11.0 VL_MSVS = 110 VL_MSC = 1700 !ELSEIF "$(_NMAKE_VER)" == "11.00.50727.1" VL_MSVC = 11.0 VL_MSVS = 110 VL_MSC = 1700 !ELSEIF "$(_NMAKE_VER)" == "11.00.60315.1" VL_MSVC = 11.0 VL_MSVS = 110 VL_MSC = 1700 !ELSEIF "$(_NMAKE_VER)" == "11.00.60430.2" VL_MSVC = 11.0 VL_MSVS = 110 VL_MSC = 1700 !ELSE VL_MSVC = VL_MSVS = VL_MSC = !ENDIF MSVSVER=$(VL_MSVS) !ENDIF !IF "$(MSVSVER)" == "" !MESSAGE *** Cannot determine Visual C++ version !ERROR *** Aborting make job !ELSE !MESSAGE *** Using Microsoft NMAKE version $(_NMAKE_VER) !MESSAGE *** Using Microsoft Visual C++ version $(MSVSVER) !MESSAGE *** !ENDIF vlfeat/make/octave.mak0000644000175000017500000000761512237042135013645 0ustar dimadima# file: octave.mak # description: Build MEX files for GNU Octave # author: Andrea Vedaldi # Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. # All rights reserved. # # This file is part of the VLFeat library and is made available under # the terms of the BSD license (see the COPYING file). # Octave support is experimental. Currently, the MEX files compile # successfully but a number of bugs and subtle MATLAB # imcompatibilities make VLFeat not fully functional. # # Octave support is enabled if $(MKOCTFILE) is executable. Therefore # setting MKOCTFILE to the empty string disables Octave support. OCTAVE ?= octave MKOCTFILE ?= OCTAVE_ENABLE ?= $(strip $(shell type -P $(MKOCTFILE) 2>&1 >/dev/null && \ $(MKOCTFILE) -p OCTAVE_LIBS 2>&1 | \ grep octave)) # if expand to empty string, set to empty string for use with ifdef ifeq ($(OCTAVE_ENABLE),) OCTAVE_ENABLE= endif ifdef OCTAVE_ENABLE all: octave-mex-all clean: octave-mex-clean archclean: octave-mex-archclean distclean: octave-mex-distclean endif info: octave-mex-info OCTAVE_MEX_SUFFIX := mex OCTAVE_MEX_BINDIR := toolbox/mex/octave/$(MEX_SUFFIX) OCTAVE_MEX_FLAGS = -L$(BINDIR) -lvl OCTAVE_MEX_CFLAGS = -I$(VLDIR)/toolbox OCTAVE_MEX_CFLAGS += $(if $(DEBUG), -g, -O) OCTAVE_MEX_CFLAGS += $(if $(PROFILE), -O -g,) OCTAVE_MEX_CFLAGS += $(STD_CFLAGS) OCTAVE_MEX_LDFLAGS = # Mac OS X on Intel 32 bit processor ifeq ($(ARCH),maci) endif # Mac OS X on Intel 64 bit processor ifeq ($(ARCH),maci64) endif # Linux on 32 bit processor ifeq ($(ARCH),glnx86) OCTAVE_MEX_FLAGS += -Wl,--rpath,\\\$$ORIGIN/ endif # Linux on 64 bit processorm ifeq ($(ARCH),glnxa64) OCTAVE_MEX_FLAGS += -Wl,--rpath,\\\$$ORIGIN/ endif # -------------------------------------------------------------------- # Build # -------------------------------------------------------------------- .PHONY: octave-all, octave-mex-all, octave-mex-dir, octave-info .PHONY: octave-clean octave-archclean octave-distclean no_dep_targets += octave-info no_dep_targets += octave-clean octave-archclean octave-distclean octave_mex_src := $(shell find $(VLDIR)/toolbox -name "*.c") octave_mex_tgt := $(addprefix $(OCTAVE_MEX_BINDIR)/,\ $(notdir $(mex_src:.c=.$(OCTAVE_MEX_SUFFIX)) ) ) octave_mex_dep := $(octave_mex_tgt:.$(OCTAVE_MEX_SUFFIX)=.d) octave_mex_dll := $(OCTAVE_MEX_BINDIR)/lib$(DLL_NAME).$(DLL_SUFFIX) ifdef OCTAVE_ENABLE arch_bins += $(octave_mex_tgt) $(octave_mex_dll) comm_bins += deps += $(octave_mex_dep) endif vpath vl_%.c $(shell find $(VLDIR)/toolbox -type d) octave-mex-all: $(octave_mex_tgt) matlab-noprefix # generate octave-mex-dir target $(eval $(call gendir, octave-mex, $(OCTAVE_MEX_BINDIR))) $(OCTAVE_MEX_BINDIR)/%.d : %.c $(octave-mex-dir) $(call C,MKOCTFILE) $(OCTAVE_MEX_FLAGS) -M "$(<)" @mv "$(<:.c=.d)" $(OCTAVE_MEX_BINDIR) $(octave_mex_dll) : $(dll_tgt) cp -v "$(<)" "$(@)" $(OCTAVE_MEX_BINDIR)/%.$(OCTAVE_MEX_SUFFIX) %.o : %.c $(octave-mex-dir) $(octave_mex_dll) CFLAGS="$(OCTAVE_MEX_CFLAGS)" \ CXXFLAGS="$(OCTAVE_MEX_CXXFLAGS)" \ LDFLAGS="$(OCTAVE_MEX_LDFLAGS)" \ $(MKOCTFILE) \ --mex $(OCTAVE_MEX_FLAGS) \ "$(<)" --output "$(@)" -v @rm -f $(<:.c=.o) octave-mex-info: $(call echo-title,Octave support) $(if $(OCTAVE_ENABLE),\ @echo "OCTAVE support enabled (MKOCTFILE found)",\ @echo "OCTAVE support disabled (MKOCTFILE not found)") $(call dump-var,octave_mex_src) $(call dump-var,octave_mex_tgt) $(call dump-var,octave_mex_dep) $(call echo-var,OCTAVE) $(call echo-var,MKOCTFILE) $(call echo-var,OCTAVE_MEX_BINDIR) $(call echo-var,OCTAVE_MEX_FLAGS) $(call echo-var,OCTAVE_MEX_CFLAGS) $(call echo-var,OCTAVE_MEX_LDLAGS) @echo octave-mex-clean: rm -f $(octave_mex_dep) octave-mex-archclean: octave-clean rm -f $(octave_mex_tgt) octave-mex-distclean: octave-archclean rm -rf toolbox/mex/octave # Emacs: # Local variables: # mode: Makefile # End: vlfeat/make/dist.mak0000644000175000017500000002025712237042135013324 0ustar dimadima# file: dist.mak # description: Build VLFeat DLL # author: Andrea Vedaldi # Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. # All rights reserved. # # This file is part of the VLFeat library and is made available under # the terms of the BSD license (see the COPYING file). clean: dist-bin-clean archclean: dist-bin-archclean distclean: dist-bin-distclean dist-src-distclean info: dist-bin-info dist-src-info # -------------------------------------------------------------------- # Configuration # -------------------------------------------------------------------- GIT ?= git RSYNC ?= rsync VER ?= $(shell cat vl/generic.h | sed -n \ 's/.*VL_VERSION_STRING.*\"\([0-9.]*\)\".*/\1/p') NAME := vlfeat DIST := $(NAME)-$(VER) BINDIST := $(DIST)-bin HOST := vlfeat-admin:vlfeat.org/sandbox # -------------------------------------------------------------------- # Build source package # -------------------------------------------------------------------- .PHONY: dist-src, dist-src-clean, dist-src-info no_dep_targets += dist-src, dist-src-clean, dist-src-info dist-src: COPYFILE_DISABLE=1 \ COPY_EXTENDED_ATTRIBUTES_DISABLE=1 \ $(GIT) archive --prefix=$(NAME)-$(VER)/ v$(VER) | gzip > $(DIST).tar.gz dist-src-distclean: rm -f $(DIST).tar.gz dist-src-info: $(call echo-title,Source distribution) $(call echo-var,DIST) @echo # -------------------------------------------------------------------- # Build binary package # -------------------------------------------------------------------- # dist-bin-release: Rebuild binaries with optimizations and no debug # symbols. # # dist-bin-commit: Creates a new vXX.XX.XX-ARCH branch with the # binaries and pushes it to the remote called bin. # # dist-bin-commit-common: Creates a new vXX.XX.XX-common branch with # the architecture-independent parts of VLFeat. # # dist-bin-merge: Creates a new vXX.XX.XX-bin branch by merging the # architecture specific binary branches and adding additional # files. It then pushes the result to the remote called bin. # # dist-bin: Packs the commit remotes/bin/vXX.XX.XX-bin. # # dist-src: Packs the commit vXX.XX.XX. .PHONY: dist-bin, dist-bin-release, dist-bin-commit, dist-bin-info .PHONY: dist-bin-clean, dist-bin-archclean, dist-bin-distclean no_dep_targets += dist-bin dist-bin-release dist-bin-commit dist-bin-info no_dep_targets += dist-bin-clean dist-bin-archclean dist-bin-distclean dist-bin-release: tmp-dir=$(TMPDIR)/tmp-$(NAME)-$(VER)-$(ARCH) dist-bin-release: @echo Cloning VLFeat ; test -e "$(tmp-dir)" || $(GIT) clone --no-checkout . "$(tmp-dir)" ; \ $(GIT) --git-dir="$(tmp-dir)/.git" config remote.bin.url $$($(GIT) config --get remote.bin.url) ; \ $(GIT) --git-dir="$(tmp-dir)/.git" config remote.origin.url $$($(GIT) config --get remote.origin.url) ; @echo Checking out v$(VER) ; cd "$(tmp-dir)" ; $(GIT) fetch origin --tags v$(VER) ; cd "$(tmp-dir)" ; $(GIT) fetch origin v$(VER) ; cd "$(tmp-dir)" ; $(GIT) checkout v$(VER) ; echo Rebuilding binaries for release ; make -C "$(tmp-dir)" ARCH=$(ARCH) all dist-bin-commit: tmp-dir=$(TMPDIR)/tmp-$(NAME)-$(VER)-$(ARCH) dist-bin-commit: branch=v$(VER)-$(ARCH) dist-bin-commit: dist-bin-release @echo Setting $(branch) to v$(VER) ; cd "$(tmp-dir)" ; $(GIT) branch -f $(branch) v$(VER) ; cd "$(tmp-dir)" ; $(GIT) checkout $(branch) ; @echo Adding binaries to $(branch) ; cd "$(tmp-dir)" ; $(GIT) add -f $(arch_bins) ; cd "$(tmp-dir)" ; \ if test -z "$$($(GIT) diff --cached)" ; \ then \ echo No changes to commit ; \ exit 1 ; \ else \ echo Commiting changes ; \ $(GIT) commit -m "$(ARCH) binaries for version $(VER)" ; \ echo Pushing $(branch) to the server ; \ $(GIT) push -v --force bin $(branch):refs/heads/$(branch) ; \ fi dist-bin-commit-common: tmp-dir=$(TMPDIR)/tmp-$(NAME)-$(VER)-$(ARCH) dist-bin-commit-common: branch=v$(VER)-common dist-bin-commit-common: dist-bin-release @echo Building doc make -C "$(tmp-dir)" ARCH=$(ARCH) doc-deep @echo Setting up $(branch) to v$(VER) ; cd "$(tmp-dir)" ; $(GIT) branch -f $(branch) v$(VER) cd "$(tmp-dir)" ; $(GIT) checkout $(branch) @echo Adding products to $(branch) cd "$(tmp-dir)" ; $(GIT) add -f $(m_lnk) cd "$(tmp-dir)" ; $(GIT) add -f $$(find doc \ -name '*.html' -or -name '*.jpg' -or -name '*.png' -or -name '*.css') cd "$(tmp-dir)" ; \ if test -z "$$($(GIT) diff --cached)" ; \ then \ echo No changes to commit ; \ exit 1 ; \ else \ echo Commiting changes ; \ $(GIT) commit -m "common products for $(VER)" ; \ echo Pushing $(branch) to the server ; \ $(GIT) push -v --force bin $(branch):refs/heads/$(branch); \ fi dist-bin-merge: tmp-dir=$(TMPDIR)/tmp-$(NAME)-$(VER)-merge dist-bin-merge: branch=v$(VER)-bin dist-bin-merge: @echo Cleaning up merge directory rm -rf "$(tmp-dir)" @echo Cloning VLFeat $(GIT) clone --no-checkout . "$(tmp-dir)" ; $(GIT) --git-dir=$(tmp-dir)/.git config remote.bin.url $$($(GIT) config --get remote.bin.url) ; $(GIT) --git-dir=$(tmp-dir)/.git config remote.origin.url $$($(GIT) config --get remote.origin.url) ; echo Creating or resetting and checking out branch $(branch) to v$(VER); cd "$(tmp-dir)" ; $(GIT) fetch origin --tags v$(VER); cd "$(tmp-dir)" ; $(GIT) fetch origin v$(VER) ; cd "$(tmp-dir)" ; $(GIT) checkout v$(VER) ; cd "$(tmp-dir)" ; $(GIT) branch -f $(branch) v$(VER) ; cd "$(tmp-dir)" ; $(GIT) checkout $(branch) ; cd "$(tmp-dir)" ; \ MERGE_BRANCHES=; \ FETCH_BRANCHES=; \ for ALT_ARCH in common maci maci64 glnx86 glnxa64 win32 win64 ; \ do \ MERGE_BRANCH=v$(VER)-$$ALT_ARCH ; \ MERGE_BRANCHES="$$MERGE_BRANCHES bin/$$MERGE_BRANCH" ; \ FETCH_BRANCHES="$$FETCH_BRANCHES $$MERGE_BRANCH:remotes/bin/$$MERGE_BRANCH" ; \ done ; \ echo Fetching binaries ; \ echo $(GIT) fetch -f bin $$FETCH_BRANCHES ; \ $(GIT) fetch -f bin $$FETCH_BRANCHES ; \ echo merging $$MERGE_BRANCHES ; \ $(GIT) merge -m "Merged binaries $$MERGE_BRANCHES" $$MERGE_BRANCHES ; echo Pushing to server the merged binaries ; \ cd "$(tmp-dir)" ; $(GIT) push -v --force bin $(branch):refs/heads/$(branch) ; dist-bin: branch=v$(VER)-bin dist-bin: echo Fetching binaries ; \ $(GIT) fetch -f bin $(branch):remotes/bin/$(branch) ; \ echo Creating archive ; \ COPYFILE_DISABLE=1 \ COPY_EXTENDED_ATTRIBUTES_DISABLE=1 \ $(GIT) archive --prefix=$(NAME)-$(VER)/ bin/v$(VER)-bin | gzip > $(BINDIST).tar.gz dist-bin-clean: dist-bin-archclean: rm -rf $(TMPDIR)/tmp-$(NAME)-$(VER)-$(ARCH) dist-bin-distclean: rm -rf $(TMPDIR)/tmp-$(NAME)-$(VER)-* rm -f $(BINDIST).tar.gz dist-bin-info: $(call echo-title,Binary distribution) $(call dump-var,arch_bins) $(call dump-var,comm_bins) $(call echo-var,NAME) $(call echo-var,BINDIST) @echo # -------------------------------------------------------------------- # Post packages on the web # -------------------------------------------------------------------- .PHONY: post, post-doc post: $(RSYNC) \ -aP $(DIST).tar.gz $(BINDIST).tar.gz \ $(HOST)/download post-doc: tar xzvf $(BINDIST).tar.gz -C $(TMPDIR)/ $(NAME)-$(VER)/doc/ $(RSYNC) \ --recursive \ --perms \ --group=lab \ --chmod=Dg+s,g+w,o-w \ --exclude=*.eps \ --exclude=download \ --exclude=cvpr10wiki \ --exclude=benchmarks \ --exclude=man-src \ --exclude=mdoc.build \ --exclude=.htaccess \ --exclude=favicon.ico \ --delete \ --progress \ $(TMPDIR)/$(NAME)-$(VER)/doc/ $(HOST) # Local variables: # mode: Makefile # End: vlfeat/make/bin.mak0000644000175000017500000000520212237042135013122 0ustar dimadima# file: bin.mak # description: Build VLFeat command line utilities # author: Andrea Vedaldi # Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. # All rights reserved. # # This file is part of the VLFeat library and is made available under # the terms of the BSD license (see the COPYING file). all: bin-all clean: bin-clean archclean: bin-archclean distclean: bin-distclean info: bin-info # -------------------------------------------------------------------- # Configuration # -------------------------------------------------------------------- BIN_CFLAGS = $(STD_CFLAGS) -I$(VLDIR) BIN_LDFLAGS = $(STD_LDFLAGS) -L$(BINDIR) -lvl # Mac OS X Intel 32 ifeq ($(ARCH),maci) endif # Mac OS X Intel 64 ifeq ($(ARCH),maci64) endif # Linux-32 ifeq ($(ARCH),glnx86) BIN_LDFLAGS += -Wl,--rpath,\$$ORIGIN/ endif # Linux-64 ifeq ($(ARCH),glnxa64) BIN_LDFLAGS += -Wl,--rpath,\$$ORIGIN/ endif # -------------------------------------------------------------------- # Build # -------------------------------------------------------------------- # On Mac OS X the library install_name is prefixed with @loader_path/. # At run time this causes the loader to search for a local copy of the # library for any binary which is linked against it. The install_name # can be modified later by install_name_tool. bin_src := $(wildcard $(VLDIR)/src/*.c) bin_tgt := $(addprefix $(BINDIR)/, $(patsubst %.c,%,$(notdir $(bin_src)))) bin_dep := $(addsuffix .d, $(bin_tgt)) deps += $(bin_dep) arch_bins += $(bin_tgt) comm_bins += .PHONY: bin-all, bin-info .PHONY: bin-clean, bin-archclean, bin-distclean no_dep_targets += bin-dir bin-clean bin-archclean bin-distclean no_dep_targets += bin-info bin-all: $(dll-dir) $(dll_tgt) $(bin_tgt) # BIN_LDFLAGS includes the libraries to link to and must be # specified after the object "$<" that uses them. If not, stricter # linkers (e.g. --as-needed option with the GNU toolchain) # will break as they will not include the dependencies. See # also http://wiki.debian.org/ToolChain/DSOLinking $(BINDIR)/% : $(VLDIR)/src/%.c $(call C,CC) $(BIN_CFLAGS) "$<" $(BIN_LDFLAGS) -o "$@" $(BINDIR)/%.d : $(VLDIR)/src/%.c $(dll-dir) $(call C,CC) $(BIN_CFLAGS) -M -MT \ '$(BINDIR)/$* $(BINDIR)/$*.d' \ "$<" -MF "$@" bin-clean: rm -f $(bin_dep) bin-archclean: bin-clean bin-distclean: bin-info: $(call echo-title,Command line utilities) $(call dump-var,bin_src) $(call dump-var,bin_tgt) $(call dump-var,bin_dep) $(call echo-var,BIN_CFLAGS) $(call echo-var,BIN_LDFLAGS) @echo # Local variables: # mode: Makefile # End: vlfeat/docsrc/0000755000175000017500000000000012237042512012220 5ustar dimadimavlfeat/docsrc/aib.html0000644000175000017500000000370212237004736013651 0ustar dimadima

The Agglomerative Information Bottleneck (AIB) algorithm greedily compresses discrete data by iteratively merging the two elements which cause the mutual information between the data and the class labels to decreases as little as possible.

Here we test AIB on the problem of finding a discriminatively optimal quantization of a mixture of Gaussians. The data in this case is 2 dimensional:

Random data generated from a Gaussian mixture with three components (class labels are indicated by color).

We quantize this data on a fixed lattice (a 20x20 grid shown in the figures below), and construct histograms for each class.

f1 = quantize(X1,D,K) ; f2 = quantize(X2,D,K) ; f3 = quantize(X3,D,K) ; Pcx(1,:) = vl_binsum(Pcx(1,:), ones(size(f1)), f1) ; Pcx(2,:) = vl_binsum(Pcx(2,:), ones(size(f2)), f2) ; Pcx(3,:) = vl_binsum(Pcx(3,:), ones(size(f3)), f3) ;

Next we apply AIB:

[parents, cost] = vl_aib(Pcx) ;

This provides us with a list of parents of each column in Pcx, forming a tree of merges. We can now "cut" this tree to obtain any number of clusters.

Three "cuts" of the merge tree, showing 10, 3, and 2 clusters. The gray squares are nodes of the tree which did not have any data points which were quantized to them.

Notice that the resulting clusters do not have to be contiguous in the original space.

vlfeat/docsrc/doc.html0000644000175000017500000000233512237004745013664 0ustar dimadima

The VLFeat reference documentation has three parts:

MATLAB functions

The reference documentation of VLFeat MATLAB commands (this is an on-line version of the documentation built in the command themsevles).

C API reference

This documentation includes descriptions of all the algorithms and hence it is useful even if you do not plan to use the C library directly.

Man pages

The documentation of the command line utilities bundled with VLFeat (this is an on-line version of the Unix man found in the src/ subdirectory.

In addition to the documentation, there are also tutorials which introduce many of the algorithms contained in the library.

vlfeat/docsrc/gmm.html0000644000175000017500000001273012237004745013677 0ustar dimadima %tableofcontents;

This tutorial shows how to estiamte Gaussian mixture model using the VlFeat implementation of the Expectation Maximization (EM) algorithm.

A GMM is a collection of $K$ Gaussian distribution. Each distribution is called a mode of the GMM and represents a cluster of data points. In computer vision applications, GMM are often used to model dictionaries of visual words. One important application is the computation of Fisher vectors encodings.

Learning a GMM with expectation maximization

Consider a dataset containing 1000 randomly sampled 2D points:

numPoints = 1000 ; dimension = 2 ; data = rand(dimension,N) ;

The goal is to fit a GMM to this data. This can be obtained by running the vl_gmm function, implementing the EM algorithm.

numClusters = 30 ; [means, covariances, priors] = vl_gmm(data, numClusters) ;

Here means, covariances and priors are respectively the means $\mu_k$, diagonal covariance matrices $\Sigma_k$, and prior probabilities $\pi_k$ of the numClusters Gaussian modes.

These modes can be visualized on the 2D plane by plotting ellipses corresponding to the equation: \[ \{ \bx: (\bx-\mu_k)^\top \Sigma_k^{-1} (\bx-\mu_k) = 1 \} \] for each of the modes. To this end, we can use the vl_plotframe:

figure ; hold on ; plot(data(1,:),data(2,:),'r.') ; for i=1:numClusters vl_plotframe([means(:,i)' sigmas(1,i) 0 sigmas(2,i)]); end

This results in the figure:

GMM fittting 2D random points.

Diagonal covariance restriction

Note that the ellipses in the previous example are axis alligned. This is a restriction of the vl_gmm implementation that imposes covariance matrices to be diagonal.

This is suitable for most computer vision applications, where estimating a full covariance matrix would be prohebitive due to the relative high dimensionality of the data. For example, when clustering SIFT features, the data has dimension 128, and each full covariance matrix would contain more than 8k parameters.

For this reason, it is sometimes desirable to globally decorrelated the data before learning a GMM mode. This can be obtained by pre-multiplying the data by the inverse of a square root of its covariance.

Initializing a GMM model before running EM

The EM algorithm is a local optimization method, and hence particularly sensitive to the initialization of the model. The simplest way to initiate the GMM is to pick numClusters data points at random as mode means, initialize the individual covariances as the covariance of the data, and assign equa prior probabilities to the modes. This is the default initialization method used by vl_gmm.

Alternatively, a user can specifiy manually the initial paramters of the GMM model by using the custom initalization method. To do so, set the 'Initialization' option to 'Custom' and also the options 'InitMeans', 'InitCovariances' and 'IniPriors' to the desired values.

A common approach to obtain an initial value for these parameters is to run KMeans first, as demonstrated in the following code snippet:

numClusters = 30; numData = 1000; dimension = 2; data = rand(dimension,numData); % Run KMeans to pre-cluster the data [initMeans, assignments] = vl_kmeans(data, numClusters, ... 'Algorithm','Lloyd', ... 'MaxNumIterations',5); initCovariances = zeros(dimension,numClusters); initPriors = zeros(1,numClusters); % Find the initial means, covariances and priors for i=1:numClusters data_k = data(:,assignments==i); initPriors(i) = size(data_k,2) / numClusters; if size(data_k,1) == 0 || size(data_k,2) == 0 initCovariances(:,i) = diag(cov(data')); else initCovariances(:,i) = diag(cov(data_k')); end end % Run EM starting from the given parameters [means,covariances,priors,ll,posteriors] = vl_gmm(data, numClusters, ... 'initialization','custom', ... 'InitMeans',initMeans, ... 'InitCovariances',initCovariances, ... 'InitPriors',initPriors);

The demo scripts vl_demo_gmm_2d and vl_demo_gmm_3d also produce cute colorized figures such as these:

The figure shows how the estimated gaussian mixture looks like with and without the kmeans initialization.
vlfeat/docsrc/webdoc.py0000644000175000017500000012210412237004745014043 0ustar dimadima#!/usr/bin/python # file: webdoc.py # author: Andrea Vedaldien # description: Implementation of webdoc. # Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. # All rights reserved. # # This file is part of the VLFeat library and is made available under # the terms of the BSD license (see the COPYING file).s import cProfile import types import xml.sax import xml.sax.saxutils import re import os import sys import random import copy import htmlentitydefs from xml.sax.handler import ContentHandler from xml.sax import parse from urlparse import urlparse from urlparse import urlunparse from optparse import OptionParser from doxytag import Doxytag # this is used for syntax highlighting try: import pygments import pygments.lexers import pygments.formatters has_pygments = True except ImportError: has_pygments = False DOCTYPE_XHTML_TRANSITIONAL = \ '' # Create a dictonary that maps unicode characters to HTML entities mapUnicodeToHtmlEntity = { } for k, v in htmlentitydefs.name2codepoint.items(): c = unichr(v) if c == u'&' or c == u'<' or c == u'>': continue mapUnicodeToHtmlEntity [c] = "&%s;" % k # This indexes the document nodes by ID nodeIndex = { } nodeUniqueCount = 0 doxygenIndex = None doxygenDir = '' def getUniqueNodeID(id = None): """ getUniqueNodeID() generates an unique ID for a document node. getUniqueNodeID(id) generates an unique ID adding a suffix to id. """ global nodeUniqueCount if id is None: id = "id" uniqueId = id while uniqueId in nodeIndex: nodeUniqueCount += 1 uniqueId = "%s-%d" % (id, nodeUniqueCount) return uniqueId def dumpIndex(): """ Dump the node index, for debugging purposes. """ for x in nodeIndex.itervalues(): print x def ensureDir(dirName): """ Create the directory DIRNAME if it does not exsits. """ if os.path.isdir(dirName): pass elif os.path.isfile(dirName): raise OSError("cannot create the direcory '%s'" "because there exists already " "a file with that name" % newdir) else: head, tail = os.path.split(dirName) if head and not os.path.isdir(head): ensureDir(head) if tail: os.mkdir(dirName) def calcRelURL(toURL, fromURL): """ Calculates a relative URL. """ fromURL = urlparse(fromURL) toURL = urlparse(toURL) if not fromURL.scheme == toURL.scheme: return urlunparse(toURL) if not fromURL.netloc == toURL.netloc: return urlunparse(toURL) fromPath = fromURL.path.split("/") toPath = toURL.path.split("/") for j in xrange(len(fromPath) - 1): fromPath[j] += u"/" for j in xrange(len(toPath) - 1): toPath[j] += u"/" # abs path: ['/', 'dir1/', ..., 'dirN/', 'file'] # rel path: ['dir1/', ..., 'dirN/', 'file'] # path with no file: ['dir1/', ..., 'dirN/', ''] # find common path (but do not count file name) i = 0 while True: if i >= len(fromPath) - 1: break if i >= len(toPath) - 1: break if not fromPath[i] == toPath[i]: break i = i + 1 # a/b/c/d.html --> ../../../d.html # a/b//c/d.html --> ../../../d.html for j in xrange(len(fromPath) - 1): if len(fromPath[j]) > 1: fromPath[j] = u"../" else: fromPath[j] = u"" fromPath = fromPath[i:-1] toPath = toPath[i:] relPath = u"".join(fromPath) + "".join(toPath) return urlunparse(("", "", relPath, "", "", toURL.fragment)) def walkNodes(rootNode, nodeType = None, nodeBarrier = None): if nodeBarrier and rootNode.isA(nodeBarrier): return for n in rootNode.getChildren(): for m in walkNodes(n, nodeType): yield m if not nodeType or rootNode.isA(nodeType): yield rootNode def walkAncestors(leafNode, nodeType = None): if not nodeType or leafNode.isA(nodeType): yield leafNode p = leafNode.getParent() if p: for m in walkAncestors(p, nodeType): yield m # -------------------------------------------------------------------- class DocLocation: # -------------------------------------------------------------------- """ A location consisting of a URL (file), a row number, and a column number. """ def __init__(self, URL, row, column): self.URL = URL self.row = row self.column = column def __str__(self): return "%s:%d:%d" % (self.URL, self.row, self.column) # -------------------------------------------------------------------- class DocError(BaseException): # -------------------------------------------------------------------- """ An error consisting of a stack of locations and a message. """ def __init__(self, message): BaseException.__init__(self,message) self.locations = [] def __str__(self): str = "" if len(self.locations) > 0: for i in xrange(len(self.locations)-1,0,-1): str += "included from %s:\n" % self.locations[i] return str + "%s:%s" % (self.locations[0], BaseException.__str__(self)) else: return self.message def appendLocation(self, location): self.locations.append(location) return self # -------------------------------------------------------------------- class makeGuard(object): # -------------------------------------------------------------------- """ Decorates the method of a DocNode object so that, on raising a DocError exception, the location of the node is appended to it. """ def __init__(self, func): self.func = func def __call__(self, obj, *args, **keys): try: self.func(obj, *args, **keys) except DocError, e: if len(e.locations) == 0: e.appendLocation(obj.getLocation()) raise e except: raise def __get__(self, obj, type=None): return types.MethodType(self, obj, type) # -------------------------------------------------------------------- class DocBareNode: # -------------------------------------------------------------------- """ A node of the document tree without parent, children, or any other attribute. It is used to implement common leaf nodes such as text chunks. """ def __init__(self): pass def isA(self, classInfo): """ Returns TRUE if the node is of class CLASSINFO. """ return isinstance(self, classInfo) def getChildren(self): """ Returs an empty list """ return [] def setParent(self, parent): pass def getPublishDirName(self): pass def getPublishFileName(self): pass def getPublishURL(self): pass def visit(self, generator): pass def publish(self, generator, pageNode = None): pass def publishIndex(self, gen, pageNode, openNodeStack): return False # -------------------------------------------------------------------- class DocNode(DocBareNode): # -------------------------------------------------------------------- """ A node of the document with a parent, childern, attributes, and additional meta-information such as the location of the XML element that caused this node to be generated. """ def __init__(self, attrs, URL, locator): self.parent = None self.children = [] self.attrs = attrs self.sourceURL = None self.sourceRow = None self.sourceColumn = None if attrs.has_key('id'): self.id = attrs['id'] else: self.id = getUniqueNodeID() self.sourceURL = URL if locator: self.sourceRow = locator.getLineNumber() self.sourceColumn = locator.getColumnNumber() nodeIndex[self.id] = self def __str__(self): return "%s:%s" % (self.getLocation(), self.getID()) def dump(self): """ Recusively dump the tree of nodes, for debugging purposes. """ depth = self.getDepth() print " " * depth, self for x in self.children: x.dump() def getID(self): """ Return the node ID. """ return self.id def getParent(self): """ Return the node parent. """ return self.parent def getChildren(self): """ Return the list of node children. """ return self.children def getAttributes(self): """ Return the dictionary of node attributes. """ return self.attrs def getDepth(self): """ Return the depth of the node in the tree. """ if self.parent: return self.parent.getDepth() + 1 else: return 0 def setParent(self, parent): """ Set the parent of the node. """ self.parent = parent def adopt(self, orfan): """ Adds ORFAN to the node children and make the node the parent of ORFAN. ORFAN can also be a sequence of orfans. """ self.children.append(orfan) orfan.setParent(self) def findAncestors(self, nodeType = None): """ Return the node ancestors of type NODETYPE. If NODETYPE is None, returns all ancestors. """ if nodeType is None: nodeType = DocNode if self.parent: if self.parent.isA(nodeType): found = [self.parent] else: found = [] found = found + self.parent.findAncestors(nodeType) return found return [] def findChildren(self, nodeType = None): """ Returns the node chldren of type NODTYPE. If NODETYPE is None, returns all children. """ if nodeType is None: nodeType = DocNode return [x for x in self.children if x.isA(nodeType)] def getLocation(self): """ Get the location (file, row number, and column number) where this node was instanitated """ location = DocLocation(self.sourceURL, self.sourceRow, self.sourceColumn) if self.parent: parentLocation = self.parent.getLocation() if location.URL is None: location.URL = parentLocation.URL if location.row is None: location.URL = parentLocation.row if location.column is None: location.URL = parentLocation.column return location def getPublishDirName(self): """ Returns the publish dir name of the parent. """ if self.parent: return self.parent.getPublishDirName() return None def getPublishFileName(self): """ Returns NONE. """ return None def getPublishURL(self): """ Returns NONE. """ return None def visit(self, generator): """ Recursively calls VISIT() on its children. """ for c in self.getChildren(): c.visit(generator) return None def publish(self, generator, pageNode = None): """ Recursively calls PUBLISH() on its children. """ for c in self.getChildren(): c.publish(generator, pageNode) return None publish = makeGuard(publish) def publishIndex(self, gen, pageNode, openNodeStack): """ Recursively calls PUBLISHINDEX() on its children. """ hasIndexedChildren = False for c in self.getChildren(): hasIndexedChildren = c.publishIndex(gen, pageNode, openNodeStack) \ or hasIndexedChildren return hasIndexedChildren def publishTableOfContents(self, gen, pageNode): """ Create a TOC by lookin at H1, H2, ... tags in a DocPage." """ gen.putString("
\n") gen.putString("

Table of Contents

") previousLevel = 0 for q in pageNode.getChildren(): for x in walkNodes(q, DocHtmlElement, DocPage): if x.tag not in ['h1', 'h2', 'h3', 'h4', 'h5']: continue level = int(x.tag[1]) title = "".join([y.text for y in walkNodes(x, DocHtmlText)]) while previousLevel < level: gen.putString("
    ") previousLevel += 1 while previousLevel > level: gen.putString("
\n") previousLevel -= 1 gen.putString('
  • ' '%s' '
  • \n' % (level, x.id, title)) while previousLevel > 0: gen.putString("\n") previousLevel -= 1 gen.putString("
    \n") def expandAttr(self, value, pageNode): """ Expand an attribute by substituting any directive with its value. """ xvalue = "" next = 0 for m in re.finditer("%[-\w._#:]+;", value): if next < m.start(): xvalue += value[next : m.start()] next = m.end() directive = value[m.start()+1 : m.end()-1] mo = re.match('pathto:(.*)', directive) if mo: toNodeID = mo.group(1) toNodeURL = None if nodeIndex.has_key(toNodeID): toNodeURL = nodeIndex[toNodeID].getPublishURL() if toNodeURL is None: print "%s:warning: could not cross-reference '%s'" % (self.getLocation(), toNodeID) toNodeURL = toNodeID fromPageURL = pageNode.getPublishURL() xvalue += calcRelURL(toNodeURL, fromPageURL) continue mo = re.match('env:(.*)', directive) if mo: envName = mo.group(1) if envName in os.environ: xvalue += os.environ[envName] else: print "%s:warning: the environment variable '%s' not defined" % (self.getLocation(), envName) continue mo = re.match('dox:(.*)', directive) if mo: if doxygenIndex is None: print "%s:warning: no Doxygen tag file loaded, skipping this directive." % self.getLocation() continue if not mo.group(1) in doxygenIndex.index: print "%s:warning: the ID %s was not found in the Doxygen tag file." % (self.getLocation(), mo.group(2)) continue toNodeURL = nodeIndex['root'].getPublishURL() + '/' + doxygenDir + '/' + doxygenIndex.index[mo.group(1)] fromPageURL = pageNode.getPublishURL() xvalue += calcRelURL(toNodeURL, fromPageURL) continue raise DocError("unknown directive '%s' found while expanding an attribute" % directive) if next < len(value): xvalue += value[next:] #print "EXPAND: ", value, " -> ", xvalue return xvalue # -------------------------------------------------------------------- class DocInclude(DocNode): # -------------------------------------------------------------------- def __init__(self, attrs, URL, locator): DocNode.__init__(self, attrs, URL, locator) if not attrs.has_key("src"): raise DocError("include missing 'src' attribute") self.filePath = attrs["src"] def __str__(self): return DocNode.__str__(self) + ":" \ % xml.sax.saxutils.quoteattr(self.filePath) # -------------------------------------------------------------------- class DocDir(DocNode): # -------------------------------------------------------------------- def __init__(self, attrs, URL, locator): DocNode.__init__(self, attrs, URL, locator) if not attrs.has_key("name"): raise DocError("dir tag missing 'name' attribute") self.dirName = attrs["name"] def __str__(self): return DocNode.__str__(self) + ":" \ % xml.sax.saxutils.quoteattr(self.dirName) def getPublishDirName(self): return self.parent.getPublishDirName() + self.dirName + os.sep def visit(self, generator): generator.changeDir(self.dirName) DocNode.visit(self, generator) generator.parentDir() # -------------------------------------------------------------------- class DocGroup(DocNode): # -------------------------------------------------------------------- def __init__(self, attrs, URL, locator): DocNode.__init__(self, attrs, URL, locator) def __str__(self): return DocNode.__str__(self) + ":" # -------------------------------------------------------------------- class DocCDATAText(DocBareNode): # -------------------------------------------------------------------- def __init__(self, text): DocBareNode.__init__(self) self.text = text def __str__(self): return DocNode.__str__(self) + ":CDATA text:" + self.text def publish(self, gen, pageNode = None): gen.putString(self.text) # -------------------------------------------------------------------- class DocCDATA(DocNode): # -------------------------------------------------------------------- def __init__(self): DocNode.__init__(self, {}, None, None) def __str__(self): return DocNode.__str__(self) + ":CDATA" def publish(self, gen, pageNode = None): gen.putString("") publish = makeGuard(publish) # -------------------------------------------------------------------- class DocHtmlText(DocBareNode): # -------------------------------------------------------------------- def __init__(self, text): DocBareNode.__init__(self) self.text = text def __str__(self): return DocNode.__str__(self) + ":text:'" + \ self.text.encode('utf-8').encode('string_escape') + "'" def publish(self, gen, pageNode = None): # find occurences of %directive; in the text node and do the # appropriate substitutions next = 0 for m in re.finditer("%(\w+)(:.*)?;", self.text): if next < m.start(): gen.putXMLString(self.text[next : m.start()]) next = m.end() directive = self.text[m.start()+1 : m.end()-1] directive = m.group(1) if directive == "content": pageNode.publish(gen, pageNode) elif directive == "pagestyle": for q in pageNode.getChildren(): for s in walkNodes(q, DocPageStyle, DocPage): s.expand(gen, pageNode) elif directive == "pagescript": for q in pageNode.getChildren(): for s in walkNodes(q, DocPageScript, DocPage): s.expand(gen, pageNode) elif directive == "pagetitle": gen.putString(pageNode.title) elif directive == "path": ancPages = [x for x in walkAncestors(pageNode, DocPage)] ancPages.reverse() gen.putString(" - ".join([x.title for x in ancPages])) elif directive == "navigation": gen.putString("
      \n") # get the branch of DocPage nodes from the site root to this page openNodeStack = [x for x in walkAncestors(pageNode, DocPage)] # find the root site node and publish the contents siteNode = walkAncestors(pageNode, DocSite).next() siteNode.publishIndex(gen, pageNode, openNodeStack) gen.putString("
    \n") elif directive == "tableofcontents": pageNode.publishTableOfContents(gen, pageNode) elif directive == "env": envName = m.group(2)[1:] if envName in os.environ: gen.putString(os.environ[envName]) else: print "warning: environment variable '%s' not defined" % envName else: print "warning: ignoring unknown directive '%s'" % label if next < len(self.text): gen.putXMLString(self.text[next:]) # -------------------------------------------------------------------- class DocCodeText(DocBareNode): # -------------------------------------------------------------------- def __init__(self, text): DocBareNode.__init__(self) self.text = text def __str__(self): return DocNode.__str__(self) + ":text:'" + \ self.text.encode('utf-8').encode('string_escape') + "'" # -------------------------------------------------------------------- class DocCode(DocNode): # -------------------------------------------------------------------- def __init__(self, attrs, URL = None, locator = None): DocNode.__init__(self, attrs, URL, locator) self.type = "plain" if attrs.has_key("type"): self.type = attrs["type"] def __str__(self): str = " type = " + self.type return DocNode.__str__(self) + ":" + str def publish(self, gen, pageNode = None): code = "" for n in self.getChildren(): if n.isA(DocCodeText): code = code + n.text if has_pygments and not self.type == "plain": try: lexer = pygments.lexers.get_lexer_by_name(self.type) gen.putString(pygments.highlight(code, lexer, pygments.formatters.HtmlFormatter())) except pygments.util.ClassNotFound: print "warning: could not find a syntax highlighter for '%s'" % self.type gen.putString("
    " + code + "
    ") else: gen.putString("
    " + code + "
    ") DocNode.publish(self, gen, pageNode) publish = makeGuard(publish) # -------------------------------------------------------------------- class DocHtmlElement(DocNode): # -------------------------------------------------------------------- def __init__(self, tag, attrs, URL = None, locator = None): DocNode.__init__(self, attrs, URL, locator) self.tag = tag def __str__(self): str = "" return DocNode.__str__(self) + ":" + str def getPublishURL(self): anc = self.findAncestors(DocPage) if len(anc) == 0: return None return anc[0].getPublishURL() + "#" + self.id def publish(self, gen, pageNode = None): gen.putString("<") gen.putString(self.tag) # make sure headings have and id (for ToCs) if self.tag in ['h1', 'h2', 'h3', 'h4', 'h5'] and \ not "id" in self.attrs: self.attrs["id"] = self.id ; for name, value in self.attrs.items(): gen.putString(" ") gen.putString(name) gen.putString("=") gen.putXMLAttr(self.expandAttr(value, pageNode)) if self.tag == 'br': # workaround for browser that do not like

    gen.putString("/>") elif self.tag == 'code': # expand tags such as vl_function as links gen.putString("/>") text = "".join([y.text for y in walkNodes(self, DocHtmlText)]) ok = nodeIndex.has_key(text) if ok: gen.putString("") DocNode.publish(self, gen, pageNode) if ok: gen.putString("") gen.putString("") else: gen.putString(">") DocNode.publish(self, gen, pageNode) gen.putString("") publish = makeGuard(publish) # -------------------------------------------------------------------- class DocTemplate(DocNode): # -------------------------------------------------------------------- def __init__(self, attrs, URL, locator): DocNode.__init__(self, attrs, URL, locator) # -------------------------------------------------------------------- class DocPageStyle(DocNode): # -------------------------------------------------------------------- def __init__(self, attrs, URL, locator): DocNode.__init__(self, attrs, URL, locator) def publish(self, gen, pageNode = None): return None def expand(self, gen, pageNode = None): sa = self.getAttributes() if sa.has_key("href"): gen.putString("\n") else: gen.putString("\n") expand = makeGuard(expand) # -------------------------------------------------------------------- class DocPageScript(DocNode): # -------------------------------------------------------------------- def __init__(self, attrs, URL, locator): DocNode.__init__(self, attrs, URL, locator) def publish(self, gen, pageNode = None): return None def expand(self, gen, pageNode = None): sa = self.getAttributes() gen.putString("\n") expand = makeGuard(expand) # -------------------------------------------------------------------- class DocPage(DocNode): # -------------------------------------------------------------------- counter = 0 def __init__(self, attrs, URL, locator): DocNode.__init__(self, attrs, URL, locator) DocPage.counter = 1 + DocPage.counter self.templateID = "template.default" self.name = "page%d" % DocPage.counter self.title = "untitled" self.hide = False for k, v in self.attrs.items(): if k == 'src': self.title = v elif k == 'name': self.name = v elif k == 'id': pass elif k == 'title': self.title = v elif k == 'hide': self.hide = (v.lower() == 'yes') else: raise DocError( "web:page cannot have '%s' attribute" % k) def __str__(self): return DocNode.__str__(self) + ":" \ % (xml.sax.saxutils.escape(self.name), xml.sax.saxutils.escape(self.title)) def getPublishFileName(self): return self.name + ".html" def getPublishURL(self): siteNode = self.findAncestors(DocSite)[0] return siteNode.getPublishURL() + \ self.getPublishDirName() + \ self.getPublishFileName() def visit(self, generator): generator.open(self.getPublishFileName()) templateNode = nodeIndex[self.templateID] templateNode.publish(generator, self) generator.close() DocNode.visit(self, generator) def publish(self, generator, pageNode = None): if pageNode is self: # this is the page being published, so go on print "publishing " + self.__str__() DocNode.publish(self, generator, pageNode) # otherwise this page has been encountered recursively # during publishing return None def publishIndex(self, gen, pageNode, openNodeStack): if self.hide: return gen.putString("
  • ") gen.putXMLString(self.title) gen.putString("\n") pos = gen.tell() gen.putString("
      \n") hasIndexedChildren = False if len(openNodeStack) > 0 and self == openNodeStack[-1]: openNodeStack.pop() hasIndexedChildren = DocNode.publishIndex(self, gen, pageNode, openNodeStack) if hasIndexedChildren: gen.putString("
    ") else: gen.seek(pos) gen.putString("
  • \n") return True # -------------------------------------------------------------------- class DocSite(DocNode): # -------------------------------------------------------------------- def __init__(self, attrs, URL, locator): DocNode.__init__(self, attrs, URL, locator) self.siteURL = "http://www.foo.org/" self.outDir = "html" def __str__(self): return DocNode.__str__(self) + ":" def getPublishURL(self): return self.siteURL def getPublishDirName(self): return "" def getOutDir(self): return self.outDir def setOutDir(self, outDir): self.outDir = outDir def publish(self): generator = Generator(self.outDir) self.visit(generator) publish = makeGuard(publish) # -------------------------------------------------------------------- class Generator: # -------------------------------------------------------------------- def __init__(self, rootDir): ensureDir(rootDir) self.fileStack = [] self.dirStack = [rootDir] ensureDir(rootDir) #print "CD ", rootDir def open(self, filePath): filePath = os.path.join(self.dirStack[-1], filePath) fid = open(filePath, "w") self.fileStack.append(fid) fid.write(DOCTYPE_XHTML_TRANSITIONAL) #print "OPEN ", filePath def putString(self, str): fid = self.fileStack[-1] try: encoded = str.encode('utf-8') fid.write(encoded) except (UnicodeEncodeError, IOError), e: print str raise DocError("writing text:" + e.__str__()) except: raise def putXMLString(self, str): fid = self.fileStack[-1] xstr = xml.sax.saxutils.escape(str, mapUnicodeToHtmlEntity) try: fid.write(xstr.encode('utf-8')) except (UnicodeEncodeError, IOError), e: raise DocError("writing XML-escaped string:" + e.__str__()) except: raise def putXMLAttr(self, str): fid = self.fileStack[-1] xstr = xml.sax.saxutils.quoteattr(str) try: fid.write(xstr.encode('utf-8')) except (UnicodeEncodeError, IOError), e: raise DocError("writing XML-escaped attribute:" + e.__str__()) except: raise def close(self): self.fileStack.pop().close() #print "CLOSE" def changeDir(self, dirName): currentDir = self.dirStack[-1] newDir = os.path.join(currentDir, dirName) ensureDir(newDir) self.dirStack.append(newDir) #print "CD ", newDir def parentDir(self): self.dirStack.pop() #print "CD .." def tell(self): fid = self.fileStack[-1] return fid.tell() def seek(self, pos): fid = self.fileStack[-1] fid.seek(pos) # -------------------------------------------------------------------- class DocHandler(ContentHandler): # -------------------------------------------------------------------- def __init__(self): ContentHandler.__init__(self) self.rootNode = None self.stack = [] self.locatorStack = [] self.filePathStack = [] self.verbosity = 1 self.inDTD = False def resolveEntity(self, publicid, systemid): """ Resolve XML entities by mapping to a local copy of the (X)HTML DTDs. """ return open(os.path.join( os.path.dirname(__file__), 'dtd/xhtml1', systemid[systemid.rfind('/')+1:]), "rb") def lookupFile(self, filePath): if os.path.exists(filePath): return filePath if filePath[0] == '/': return None for path in self.filePathStack: dir = os.path.dirname(path) qualFilePath = os.path.join(dir, filePath) if os.path.exists(qualFilePath): return qualFilePath return None def makeError(self, message): e = DocError(message) for i in xrange(len(self.filePathStack)-1,-1,-1): URL = self.filePathStack[i] locator = self.locatorStack[i] e.appendLocation(DocLocation(URL, locator.getLineNumber(), locator.getColumnNumber())) return e def startElement(self, name, attrs): """ SAX interface: starting of XML element. The function creates a new document node, i.e. a specialized class of DocNode for the type of XML element encountered. It then appends it as the head of the parsing stack for further processing." """ # convert attrs to a dictionary (implicitly copies as required by the doc) attrs_ = {} for k, v in attrs.items(): attrs_[k] = v attrs = attrs_ URL = self.getCurrentFileName() locator = self.getCurrentLocator() # The element is not parsed recusrively; instead # it simply switches to parsing the specified file. if name == "include": if not attrs.has_key("src"): raise self.makeError(" lacks the 'src' attribute") filePath = attrs["src"] qualFilePath = self.lookupFile(filePath) if qualFilePath is None: raise self.makeError("the file '%s' could not be found while expanding " % filePath) if self.verbosity > 0: print "parsing '%s'" % qualFilePath if attrs.has_key("type"): includeType = attrs["type"] else: includeType = "webdoc" if includeType == "webdoc": self.load(qualFilePath) elif includeType == "text": self.characters(open(qualFilePath, 'r').read()) else: raise makeError("'%s' is not a valid type" % includeType) return if len(self.stack) == 0: parent = None else: parent = self.stack[-1] node = None if name == "site": node = DocSite(attrs, URL, locator) elif name == "page": node = DocPage(attrs, URL, locator) elif name == "dir": node = DocDir(attrs, URL, locator) elif name == "template": node = DocTemplate(attrs, URL, locator) elif name == "pagestyle": node = DocPageStyle(attrs, URL, locator) elif name == "pagescript": node = DocPageScript(attrs, URL, locator) elif name == "group": node = DocGroup(attrs, URL, locator) elif name == "precode": node = DocCode(attrs, URL, locator) else: node = DocHtmlElement(name, attrs, URL, locator) if parent: parent.adopt(node) self.stack.append(node) def endElement(self, name): """ SAX interface: closing of XML element. """ if name == "include": return node = self.stack.pop() if len(self.stack) == 0: self.rootNode = node def load(self, qualFilePath): self.filePathStack.append(qualFilePath) parser = xml.sax.make_parser() parser.setContentHandler(self) parser.setEntityResolver(self) parser.setProperty(xml.sax.handler.property_lexical_handler, self) try: parser.parse(qualFilePath) except xml.sax.SAXParseException, e: raise self.makeError("XML parsing error: %s" % e.getMessage()) def setDocumentLocator(self, locator): """SAX interface: This is called when a new file is parsed to set the locator object.""" self.locatorStack.append(locator) def getCurrentLocator(self): if len(self.locatorStack) > 0: return self.locatorStack[-1] else: return None def characters(self, content): """ SAX interface: characters. """ parent = self.stack[-1] if parent.isA(DocCDATA): node = DocCDATAText(content) elif parent.isA(DocCode): node = DocCodeText(content) else: node = DocHtmlText(content) parent.adopt(node) def ignorableWhitespace(self, ws): self.characters(ws) def getCurrentFileName(self): return self.filePathStack[-1] def endDocument(self): self.locatorStack.pop() self.filePathStack.pop() def startCDATA(self): node = DocCDATA() self.stack[-1].adopt(node) self.stack.append(node) def endCDATA(self): node = self.stack.pop() if len(self.stack) == 0: self.rootNode = node def comment(self, body): if self.inDTD: return node = DocCDATAText("") self.stack[-1].adopt(node) def startEntity(self, name): pass def endEntity(self, name): pass def startDTD(self, name, public_id, system_id): self.inDTD = True def endDTD(self): self.inDTD = False # -------------------------------------------------------------------- def start(filePath, opts): # -------------------------------------------------------------------- global doxygenIndex global doxygenDir if not has_pygments and opts.verb: print "Warning: Pygments module not found: syntax coloring disabled." handler = DocHandler() try: handler.load(filePath) except DocError, e: print e sys.exit(-1) # configure handler.rootNode.setOutDir(opts.outdir) if opts.doxytag: if opts.verb: print "Loading doxygen tag file", opts.doxytag try: doxygenIndex = Doxytag(opts.doxytag) doxygenDir = opts.doxydir except Exception, e: print "Error parsing Doxygen tag file ", opts.doxytag print e sys.exit(-1) #print "== Index Content ==" # dumpIndex() #print #print "== Node Tree ==" #handler.rootNode.dump() if opts.verb: print "== All pages ==" for x in walkNodes(handler.rootNode, DocPage): print x if opts.verb: print "== Publish ==" try: handler.rootNode.publish() except DocError, e: print e sys.exit(-1) sys.exit(0) # -------------------------------------------------------------------- if __name__ == '__main__': # -------------------------------------------------------------------- usage = """webdoc [OPTIONS...] --outdir Set output directory --verbose Be verbose --doxytag Doxygen tag file --doxydir Doxygen documentation location """ parser = OptionParser(usage=usage) parser.add_option( "-v", "--verbose", dest = "verb", default = False, action = "store_true", help = "print debug informations") parser.add_option( "-o", "--outdir", dest = "outdir", default = "html", action = "store", help = "write output to this directory") parser.add_option( "", "--doxytag", dest = "doxytag", default = None, action = "store", help = "use this doxygen tag file") parser.add_option( "", "--doxydir", dest = "doxydir", default = ".", action = "store", help = "find doxygen documentation here") parser.add_option( "", "--profile", dest = "profile", default = False, action = "store_true", help = "run the profiler") (opts, args) = parser.parse_args() if opts.profile: cProfile.run('start(args[0], opts)') else: start(args[0], opts) vlfeat/docsrc/about.html0000644000175000017500000001544412237004745014236 0ustar dimadima img.photo { float: left ; margin: 0px 13px 0px 0px ; width: 100px ; } %tableofcontents;

    VLFeat is a cross-platform open source collection of vision algorithms with a special focus on visual features (for instance SIFT and MSER) and clustering (k-means, hierarchical k-means, agglomerative information bottleneck). It bundles a MATLAB toolbox, a clean and portable C library and a number of command line utilities. Thus it is possible to use the same algorithm both from MATLAB, the command line, and your own programs.

    Many parties make the development of VLFeat possible:

    Sponsors

    PASCAL2 credits In 2012 the development of VLFeat is supported by the PASCAL Harvest programme. Several people have been working in Oxford to add new functionalities to the library. Moreover, leading researchers in computer vision were consulted as advisors of the project. Some of these advancements have been presented at a tutorial at the European Conference in Computer Vision (ECCV) 2012. See the PASCAL Harvest Roadmap for further details.

    Yandex
credits

    Team

    VLFeat is developed by a team of computer vision researchers, including master and PhD students, postgraduates, and senior researchers, as listed below. VLFeat was created by Andrea Vedaldi and Brian Fulkerson in 2007, based on previously published software by the same authors.

    Andrea Vedaldi picture Andrea Vedaldi joined the faculty at the University of Oxford in 2012. Since 2008 he was junior research fellow in the Oxford Visual Geometry Group. He received the Ph.D. and Master's degrees in Computer Science from the University of California - Los Angeles, in 2008 and 2005, and the Bachelor's degree in Information Engineering from the University of Padova, Italy, in 2003. He is the recipient of the UCLA outstanding Master's and Ph.D. awards.

    Brian Fulkerson picture Brian Fulkerson received his B.S. in Computer Engineering from the University of California - San Diego in 2004, and his M.S. and Ph.D. in Computer Science from the University of California - Los Angeles Vision Lab in 2006 and 2010.

    Karel Lenc picture Karel Lenc Karel Lenc received his B.S. degree in Cybernetics and Measurements from the Czech Technical University in 2010. He is currently pursuing M.S. degree in Computer Vision and Computer Engineering at the CTU, Center for Machine Perception. He visited the Department of Engineering Mathematics, University of Bristol in 2011 and the Oxford Visual Geometry Group in 2012.

    Daniele Perrone picture Daniele Perrone received his B.S. degree in Computer Engineering from Università della Calabria in 2007, and his M.S. degree in Artificial Intelligence from "Sapienza" Università di Roma in 2009. He started his Ph.D. in June 2010 at Heriot-Watt University, Edinburgh, UK. From June 2012 he joined the Computer Vision Group at the Universität Bern, Switzerland.

    Michal Perdoch picture Michal Perdoch received his Bachelor's degree in Software Engineering from the Slovak University of Technology in Bratislava in 2001, Master's degree in Computer Science and Ph.D. degree in Artificial Intelligence and Biocybernetics from the Czech Technical University in Prague, in 2004 and 2011. He is currently a postdoctoral researcher at the CTU Center for Machine Perception.

    Milan Sulc picture Milan Sulc received his Bachelor's degree in Cybernetics and Robotics from the Czech Technical University in 2012. He is currently pursuing Master degrees in Computer Vision and Artificial Intelligence at the CTU and Entrepreneurship and Commercial Engineering in Industry at CTU. He is a student intern at the CTU Center for Machine Perception.

    Hana Sarbortova picture Hana Sarbortova received her Bachelor of Engineering degree in Digital Signal and Image Processing from the University of Central Lancashire in 2012. She is currently studying Computer Vision and Digital Image at the Czech Technical University in Prague. She is a student intern at the CTU Center for Machine Perception.

    Advisors

    The development of VLFeat is supported by a number of computer vision groups and researchers:

    • Prof. Andrew Zisserman, Oxford VGG Lab.
    • Prof. Jiri Matas, Czech Technical University in Prague.
    • Prof. Tinne Tuytelaars, KU Leuven.
    • Dr. Cordelia Schmid, LEAR, Grenoble.
    • Dr. Krystian Mikolajczyk, Surrey.
    • Prof. Stefano Soatto, UCLA Vision Lab.

    Users and community

    The authors would like to thank the many colleagues that have contributed to VLFeat by testing and providing helpful suggestions and comments.

    vlfeat/docsrc/index.html0000644000175000017500000002573212237035754014240 0ustar dimadima #content p.widePar { padding-right: 1em ; } #changes dd { margin-bottom: 1em ; } .award { margin: 1em 0em ; width: 10em ; font-size: 0.9em ; text-align:center ; float: right ; border: 1px solid #DDD ; background-color: #f6f6f6 ; } #changes .date { font-weight: normal ; font-style: italic ; width: 10em ; }

    The VLFeat open source library implements popular computer vision algorithms including HOG, MSER, k-means, hierarchical k-means, agglomerative information bottleneck, SLIC superpixels, and quick shift. It is written in C for efficiency and compatibility, with interfaces in MATLAB for ease of use, and detailed documentation throughout. It supports Windows, Mac OS X, and Linux. The latest version of VLFeat is %env:VERSION;.

    Download

    Documentation

    Tutorials

    Example applications

    Citing

    @misc{vedaldi08vlfeat,
     Author = {A. Vedaldi and B. Fulkerson},
     Title = {{VLFeat}: An Open and Portable Library
              of Computer Vision Algorithms},
     Year  = {2008},
     Howpublished = {\url{http://www.vlfeat.org/}}
    

    Acknowledgments

    PASCAL2 credits Yandex
                                                               credits UCLA Vision Lab Oxford VGG.

    News

    &nsbp;
    22/06/2013 VLFeat 0.9.17 released
    Rewritten SVM implementation, adding support for SGD and SDCA optimisers and various loss functions (hinge, squared hinge, logistic, etc.) and improving the interface. Added infrastructure to support multi-core computations using OpenMP. Added OpenMP support to KD-trees and KMeans. Added new Gaussian Mixture Models, VLAD encoding, and Fisher Vector encodings (also with OpenMP support). Added LIOP feature descriptors. Added new object category recognition example code, supporting several standard benchmarks off-the-shelf. This is the third point update supported by the PASCAL Harvest programme. [Details]
    01/10/2012 VLBenchmarks 1.0-beta released.
    This new project provides simple to use benchmarking code for feature detectors and descriptors. Its development was supported by the PASCAL Harvest programme. [Details]
    01/10/2012 VLFeat 0.9.16 released
    Added VL_COVDET() (covariant feature detector). This function implements the following detectors: DoG, Hessian, Harris Laplace, Hessian Laplace, Multiscale Hessian, Multiscale Harris. It also implements affine adaptation, estiamtion of feature orientation, computation of descriptors on the affine patches (including raw patches), and sourcing of custom feature frame. Addet the auxiliary function VL_PLOTSS(). This is the second point update supported by the PASCAL Harvest programme. [Details]
    11/9/2012 VLFeat 0.9.15 released
    Added VL_HOG() (HOG features). Added VL_SVMPEGASOS() and a vastly improved SVM implementation. Added IHASHSUM (hashed counting). Improved INTHIST (integral histogram). Added VL_CUMMAX(). Improved the implementation of VL_ROC() and VL_PR(). Added VL_DET() (Detection Error Trade-off (DET) curves). Improved the verbosity control to AIB. Added support for Xcode 4.3, improved support for past and future Xcode versions. Completed the migration of the old test code in toolbox/test, moving the functionality to the new unit tests toolbox/xtest. Improved credits. This is the first point update supported by the PASCAL Harvest (several more to come shortly). A big thank to our sponsor! [Details].
    10/1/2012 PASCAL2 Harvest funding
    In the upcoming months many new functionalities will be added to VLFeat thanks to the PASCAL Harvest! See here for details.
    vlfeat/docsrc/hikm.html0000644000175000017500000000732512237004745014053 0ustar dimadima %tableofcontents;

    VLFeat offers a hierarchical version of integer k-means, which recursively applies vl_ikmeans to compute finer and finer partitions. For more details see Hierarchical Integer k-means API reference and the Integer k-means tutorial.

    Usage

    First, we generate some random data to cluster in [0,255]^2:

    data = uint8(rand(2,10000) * 255) ; datat = uint8(rand(2,100000)* 255) ;

    To cluster this data, we simply use vl_hikmeans:

    K = 3 ; nleaves = 100 ; [tree,A] = vl_hikmeans(data,K,nleaves) ;

    Here nleaves is the desired number of leaf clusters. The algorithm terminates when there are at least nleaves nodes, creating a tree with depth = floor(log(K nleaves))

    To assign labels to the new data, we use vl_hikmeanspush:

    AT = vl_hikmeanspush(tree,datat) ;
    Hierarchical integer K-means. Left: A depiction of the recursive clusters. Each node is a cluster center. The root note is not depicted (its center would be the mean of the dataset). Right: Clusters are represented as different colors (here are more than 100 clusters, but only three colors are used).

    Tree structure

    The output tree is a MATLAB structure representing the tree of clusters:

    > tree tree = K: 3 depth: 5 centers: [2x3 int32] sub: [1x3 struct]

    The field centers is the matrix of the cluster centers at the root node. If the depth of the tree is larger than 1, then the field sub is a structure array with one entry for each cluster. Each element is in turn a tree:

    > tree.sub ans = 1x3 struct array with fields: centers sub

    with a field centers for its clusters and a field sub for its children. When there are no children, this field is equal to the empty matrix

    > tree.sub(1).sub(1).sub(1).sub(1) ans = centers: [2x3 int32] sub: []

    Elkan

    VLFeat supports two different implementations of k-means. While they produce identical output, the Elkan method is sometimes faster. The method parameters controls which method is used. Consider the case when K=10 and our data is now 128 dimensional (e.g. SIFT descriptors):

    K=10; nleaves = 1000; data = uint8(rand(128,10000) * 255); tic; [tree,A] = vl_hikmeans(data,K,nleaves,'method', 'lloyd') ; % default t_lloyd = toc tic; [tree,A] = vl_hikmeans(data,K,nleaves,'method', 'elkan') ; t_elkan = toc t_lloyd = 8.0743 t_elkan = 3.0427
    vlfeat/docsrc/vlfeat-website-main-content.xml0000644000175000017500000000677612237042456020304 0ustar dimadima vlfeat/docsrc/install-c.html0000644000175000017500000000225212237004745015003 0ustar dimadima

    These instructions explain how to use VLFeat in your C programs.

    Download and unpack the latest VLFeat binary distribution in a directory of your choice (e.g. ~/src/vlfeat). The following tutorials provide step-by-step instructions for two typical use cases:

    In general, let VLFEATROOT denote the path to the directory where you unpacked VLFeat. To compile and link your C program against VLFeat, include in your C source code the appropriate files from the VLFEATROOT/vl hierarchy and link against the library vl located in the appropriate subdirectory vlfeat/bin/ARCH, where ARCH depends on your architecture.

    VLFeat is a C library. To use it from a C++ program, do not forget to enclose your #include statements in a extern "C" block.

    vlfeat/docsrc/utils.html0000644000175000017500000000405712237004745014262 0ustar dimadima

    This is a list of other notable MATLAB functions included in VLFeat

    • vl_imsmooth smoothes an image by a Gaussian kernel (simple but very useful as it is generally much faster than MATLAB's general purpose smoothing functions).
    • vl_plotframe plots a variety of feature frame types (such as oriented ellipses).
    • vl_binsum performs binned summations, useful as a building block for the fast computation of histograms. vl_whistc computes weighed histograms.
    • vl_imarray and vl_imarraysc arrange and visualize multiple images in a grid
    • vl_imsc scales the image range;
    • vl_tightsubplot is similar to built-in subplot, but produces narrower margins.
    • vl_cf makes a copy of a figure.
    • vl_rodr and vl_irodr compute the Rodrigues' formula and its inverse
    • vl_override overrides members of a structure with members of another structure.
    • vl_imwbackward warps an image by the inverse mapping method (generally much faster than MATLAB general purpose warping functions).
    • vl_waffine computes the affine warp of a set of points. vl_tps, vl_tpsu, vl_wtps compute the thin-plate spline warp of a set of points. vl_witps computes the inverse thin plate warp of a set of point (by numerically inverting the transformation). They may be used in combination with vl_imwbackward.
    • vl_xyz2lab, vl_xyz2luv, vl_xyz2rgb, vl_rgb2xyz convert color spaces.
    • vl_rcos, vl_gaussian, vl_dgaussian, vl_ddgaussian compute some useful special functions.
    vlfeat/docsrc/notfound.html0000644000175000017500000000055612237004745014756 0ustar dimadima

    The page you attempted to view no longer exists, never existed, or is not currently available.

    Try searching for what you need:



    vlfeat/docsrc/slic.html0000644000175000017500000000270212237004745014047 0ustar dimadima

    SLIC is superpixel extraction (segmentation) method based on a local version of k-means. For a detailed description of the algorithm, see the SLIC API reference.

    This demo shows how to use SLIC to extract superpixels from this image:

    The image to be segmented

    In the simplest form, SLIC can be called as:

    % im contains the input RGB image as a SINGLE array regionSize = 10 ; regularizer = 10 ; segments = vl_slic(im, regionSize, regularizer) ;

    By making varting regionSize and regularizer one obtains the segmentations:

    SLIC segmentations regionSize spaning the values 10,30, and regularizer the values 0.01, 0.1, 1.

    SLIC is often intended to be applied on top of LAB rather than RGB images. To do this, simpyl convert the image to LAB format before calling vl_slic.

    % IM contains the image in RGB format as before imlab = vl_xyz2lab(vl_rgb2xyz(im)) ; segments = vl_slic(imlab, 10, 0.1) ;
    vlfeat/docsrc/imdisttf.html0000644000175000017500000000624112237004745014742 0ustar dimadima

    The distance transform of an image image is defined as

      dt(u,v) = min  image(u',v') + alpha (u'-u-u0)^2 + beta (v'-v'-v0)^2
                u'v'
    

    The most common use of the image distance transform is to propagate the response of a feature detector to nearby image locations. This is used, for example, in the implementation of certain deformable part models or the computation of the Chamfer distance. In this tutorial, the image distance transform is used to compute the distance of each image pixel to the nearest element in an edge map, obtained from the Canny's edge detector. The code of this tutorial is located in the VLFeat folder in toolbox/demo/vl_demo_imdisttf.m.

    VLFeat implements the fast distance transform algorithm of Felzenszwalb and Huttelnocher [1], which has a linear time complexity in the number of image pixels.

    Consider the edge map extracted by the MATLAB built-in Canny edge detector on one of VLFeat test images:

    im = vl_impattern('roofs1') ; im = im(1:100,1:100,:) ; imSize = [size(im,1) size(im,2)] ; edges = zeros(imSize) + inf; edges(edge(rgb2gray(im), 'canny')) = 0 ;
    Left: A detail of the source image. Right: Extracted Canny edges. Figure generated by vl_demo_imdisttf.

    The edge map is preprocessed to assign value -inf to the pixels that do not contain an edge element and o to the pixels that do. In this way, the distance transform of the image has for each pixel the distance to the nearest edge element, provided that one chooses alpha=beta=1 and v0=u0=0 in the definition. Since these are the default values for VLFeat implementations, the result an be computed by

    [distanceTransform, neighbors] = vl_imdisttf(single(edges)) ;

    The matrix neighbors contains for each pixel (u,v) the index of the pixel (u',v') where the maximum is attained in the definition of the distance transform. This allows to associate to know for each pixel which is the nearest edge element, not just its distance, as exemplified by the following figure:

    The distance sqrt(distanceTransform) to the closest edge element (left) and arrows connecting pixels to their closest edge element (right). Figure generated by vl_demo_imdisttf.

    References

    • [1] P. F. Felzenszwalb and D. P. Huttenlocher. Distance transforms of sampled functions. Technical report, Cornell University, 2004.

    vlfeat/docsrc/tutorials.html0000644000175000017500000000641412237042456015150 0ustar dimadima %tableofcontents;

    This section features a number of tutorials illustrating some of the algorithms implemented in VLFeat, roughly divided into visual features such as SIFT and Fisher vectors and statistical methods, such as K-means, GMMs, KDTrees, and SVMs.

    Visual features

    Statistical methods

    Obsolete tutorials

    vlfeat/docsrc/mser.html0000644000175000017500000002106612237042456014070 0ustar dimadima %tableofcontents;

    Maximally Stable Extremal Regions (MSER) is a feature detector; Like the SIFT detector, the MSER algorithm extracts from an image I a number of co-variant regions, called MSERs. An MSER is a stable connected component of some level sets of the image I. Optionally, elliptical frames are attached to the MSERs by fitting ellipses to the regions. For a more in-depth explanation of the MSER detector, see our API reference for MSER

    Extracting MSERs

    Each MSERs can be identified uniquely by (at least) one of its pixels x, as the connected component of the level set at level I(x) which contains x. Such a pixel is called seed of the region.

    To demonstrate the usage of the MATLAB command vl_mser we open MATLAB and load a test image

    pfx = fullfile(vl_root,'data','spots.jpg') ; I = imread(pfx) ; image(I) ;
    A test image.

    We then convert the image to a format that is suitable for the vl_mser command.

    I = uint8(rgb2gray(I)) ;

    We compute the region seeds and the elliptical frames by

    [r,f] = vl_mser(I,'MinDiversity',0.7,... 'MaxVariation',0.2,... 'Delta',10) ;

    We plot the region frames by

    f = vl_ertr(f) ; vl_plotframe(f) ;

    vl_ertr transposes the elliptical frame and is required here because the vl_mser code assumes that the row index is the first index, but the normal image convention assumes that this is the x (column) index.

    Plotting the MSERs themselves is a bit more involved as they have arbitrary shape. To this end, we exploit two functions: vl_erfill, which, given an image and a region seed, returns a list of the pixels belonging to that region, and the MATLAB built-in contour, which draws the contour lines of a function. We start by

    M = zeros(size(I)) ; for x=r' s = vl_erfill(I,x) ; M(s) = M(s) + 1; end

    which computes a matrix M whose value are equal to the number of overlapping extremal regions. Next, we use M and contour to display the region boundaries:

    figure(2) ; clf ; imagesc(I) ; hold on ; axis equal off; colormap gray ; [c,h]=contour(M,(0:max(M(:)))+.5) ; set(h,'color','y','linewidth',3) ;
    Extracted MSERs (left) and fitted ellipses (right).

    MSER parameters

    In the original formulation, MSERs are controlled by a single parameter Δ, which controls how the stability is calculated. Its effect is shown in the figure below.

    Effect of Δ. We start with a synthetic image which has an intensity profile as shown. The bumps have heights equal to 32, 64, 96, 128 and 160. As we increase Δ, fewer and fewer regions are detected until finally at Δ=160 there is no region R which is stable at R(+Δ).

    The stability of an extremal region R is the inverse of the relative area variation of the region R when the intensity level is increased by Δ. Formally, the variation is defined as:

    |R(+Δ) - R| ----------- |R|

    where |R| denotes the area of the extremal region R, R(+Δ) is the extremal region levels up which contains R and |R(+Δ) - R| is the area difference of the two regions.

    A stable region has a small variation. The algorithm finds regions which are "maximally stable", meaning that they have a lower variation than the regions one level below or above. Note that due to the discrete nature of the image, the region below / above may be coincident with the actual region, in which case the region is still deemed maximal.

    However, even if an extremal region is maximally stable, it might be rejected if:

    • it is too big (see the parameter MaxArea);
    • it is too small (see the parameter MinArea);
    • it is too unstable (see the parameter MaxVariation);
    • it is too similar to its parent MSER (see the parameter MinDiversity).

    By default, MSERs are extracted for both dark-on-bright regions and bright-on-dark regions. To control this, parmeters BrightOnDark and DarkOnBright which take values 0 or 1 to enable or disable the regions. For example:

    [r,f] = vl_mser(I,'MinDiversity',0.7,... 'MaxVariation',0.2,... 'Delta',10,... 'BrightOnDark',1,'DarkOnBright',0) ;

    computes the regions in green in the figure below.

    Extracted MSERs (left) and fitted ellipses (right) for both bright-on-dark (green) and dark-on-bright (yellow).

    Conventions

    As mentioned in the introduction, vl_mser uses matrix indices as image coordinates. Compared to the usual MATLAB convention for images, this means that the x and y axis are swapped (this has been done to make the convention consistent with images with three or more dimensions). Thus the frames computed by the program may need to be "transposed" as in:

    [r,f] = vl_mser(I) ; f = vl_ertr(f) ;

    On the other hand, the region seeds r are already in row major format, which is the standard MATLAB format for pixel indices.

    Instead of transposing the frames, one can start by transposing the image. In this case, the frames f have the standard image convention, but the region seeds are in column-major format and may need to be "transposed" as in:

    [r,f] = vl_mser(I') ; [i,j] = sub2ind(size(I'),r) ; r = ind2sub(size(I),j,i) ;

    The command line utility mser uses the normal image convention (because images are rasterized in column-major order). Therefore the image frames are in the standard format, and the region seeds are in column major format.

    In order to convert from the command line utility convention to the MATLAB convention one needs also to recall that MATLAB coordinates starts from (1,1), but the command line utility uses the more common convention (0,0). For instance, let the files image.frame and image.seed contain the feature frames and seeds in ASCII format as generated by the command line utility. Then

    r_ = load('image.seed')' + 1 ; f_ = load('image.frame')' ; f_(1:2,:) = f_(1:2,:) + 1 ; [r,f] = vl_mser(I') ; % notice the transpose

    produces identical (up to numerical noise) region seeds r and r_ and frames f and f_.

    vlfeat/docsrc/kmeans.html0000644000175000017500000001223512237004745014375 0ustar dimadima %tableofcontents;

    This tutorial shows how to use the K-means algorithm using the VlFeat implementation of Llloyd's algorithm as well as other faster variants.

    Running K-means

    KMeans is a clustering algorithm. Its purpose is to partition a set of vectors into $K$ groups that cluster around common mean vector. This can also be thought as approximating the input each of the input vector with one of the means, so the clustering process finds, in principle, the best dictionary or codebook to vector quantize the data.

    Consider a dataset containing 1000 randomly sampled 2D points:

    numData = 5000 ; dimension = 2 ; data = rand(dimension,numData) ;

    The function vl_kmeans can be used to cluster the data into, say, 30 groups:

    numClusters = 30 ; [centers, assignments] = vl_kmeans(data, numClusters);

    By default, this uses the the Lloyd algorithm, a method that alternates between optimizing the cluster centers and the data-to-center assignments. Once this process terminates, the matrix centers contains the cluster centers and the vector assignments the (hard) assignments of the input data to the clusters. The cluster centers are also called means because it can be shown that, when the clustering is optimal, the centers are the means of the corresponding data points. The cluster centers and assignments can be visualized as follows:

    KMeans clustering of 5000 randomly sampled data points. The black dots are the cluster centers.

    Given a new data point x, this can be mapped to one of the clusters by looking for the closest center:

    x = rand(dimension, 1) ; [~, k] = min(vl_alldist(x, centers)) ;

    For larger datastes, this process may be significantly accelerated by using KDTrees or other approximate nearest neighbor procedures.

    Choosing an initialization method

    K-means uses local optimization algorithms and is therefore sensitive to initalization. By default, vl_kmeans initializes the cluster centers by picks $K$ data points at random. Other initalization strategies can be selected as well. kmeans++ is a popular method that greedily pick $K$ data points that are maximally different, and can be use as follows:

    [centers, assignments] = vl_kmeans(data, numClusters, 'Initialization', 'plusplus') ;

    Choosing an optimization algorithm

    In addition to the original KMeans algorithm proposed by Lloyd, vl_kmeans supports two additional algorithms: Elkan's variant, an exact algorithm using an acceleration technique based the triangular inequality, and ANN, an approximated algorithm using approximate nearest neighbours.

    These optimization methods can be enabled by setting the 'Algorithm' parameter to 'Lloyd', 'Elkan' or 'ANN' respectively. When using the 'ANN' algorithm, the user can also specify the parameters 'MaxNumComparisons' and 'NumTrees' to configure the KD-tree used used as ANN. In particular, 'MaxNumComparisons' controls the trade-off between approximation quality and speed.

    vl_demo_kmeans_ann_speed compares the speed of the three algorithms. Because of the random initialization, each of the KMeans calls converges to a different local minimum in a different amount of iterations. In order to measure more accurately the speed of each pass, a relatively small number of 'MaxNumIterations' option) is selected. Note that the speedup factor are in general much more dramatic when truly large datasets are considered.

    Comparisons of Elkan, Lloyd and ANN for different values of MaxNumComparison, expressed as a fraction of the number of clusters. The figure reports the duration, final energy value, and speedup factor, using both the serial and parallel versions of the code. The figure was generated using vl_demo_kmeans_ann_speed.
    vlfeat/docsrc/svm.html0000644000175000017500000001265212237004745013727 0ustar dimadima %tableofcontents;

    VLFeat includes fast SVM solvers, SGC [1] and (S)DCA [2], both implemented in vl_svmtrain. The function also implements features, like Homogeneous kernel map expansion and SVM online statistics. (S)DCA can also be used with different loss functions.

    Support vector machine

    A simple example on how to use vl_svmtrain is presented below. Let's first load and plot the training data:

    % Load training data X and their labels y vl_setup demo % to load the demo data load('vl_demo_svm_data.mat'); Xp = X(:,y==1); Xn = X(:,y==-1); figure plot(Xn(1,:),Xn(2,:),'*r') hold on plot(Xp(1,:),Xp(2,:),'*b') axis equal ;

    Now we have a plot of the tutorial training data:

    Training Data.

    Now we will set the learning parameters:

    lambda = 0.01 ; % Regularization parameter maxIter = 1000 ; % Maximum number of iterations

    Learning a linear classifier can be easily done with the following 1 line of code:

    [w b info] = vl_svmtrain(X, y, lambda, 'MaxNumIterations', maxIter)

    Now we can plot the output model over the training data.

    % Visualisation eq = [num2str(w(1)) '*x+' num2str(w(2)) '*y+' num2str(b)]; line = ezplot(eq, [-0.9 0.9 -0.9 0.9]); set(line, 'Color', [0 0.8 0],'linewidth', 2);

    The result is plotted in the following figure.

    Learned model.

    The output info is a struct containing some statistic on the learned SVM:

    info = solver: 'sdca' lambda: 0.0100 biasMultiplier: 1 bias: 0.0657 objective: 0.2105 regularizer: 0.0726 loss: 0.1379 dualObjective: 0.2016 dualLoss: 0.2742 dualityGap: 0.0088 iteration: 525 epoch: 3 elapsedTime: 0.0300

    It is also possible to use under some assumptions [3] a homogeneous kernel map expanded online inside the solver. This can be done with the following commands:

    % create a structure with kernel map parameters hom.kernel = 'KChi2'; hom.order = 2; % create the dataset structure dataset = vl_svmdataset(X, 'homkermap', hom); % learn the SVM with online kernel map expansion using the dataset structure [w b info] = vl_svmtrain(dataset, y, lambda, 'MaxNumIterations', maxIter)

    The above code creates a training set without applying any homogeneous kernel map to the data. When the solver is called it will expand each data point with a Chi Squared kernel of period 2.

    Diagnostics

    VLFeat allows to get statistics during the training process. It is sufficient to pass a function handle to the solver. The function will be then called every DiagnosticFrequency time.

    (S)DCA diagnostics also provides the duality gap value (the difference between primal and dual energy), which is the upper bound of the primal task sub-optimality.

    % Diagnostic function function diagnostics(svm) energy = [energy [svm.objective ; svm.dualObjective ; svm.dualityGap ] ] ; end % Training the SVM energy = [] ; [w b info] = vl_svmtrain(X, y, lambda,... 'MaxNumIterations',maxIter,... 'DiagnosticFunction',@diagnostics,... 'DiagnosticFrequency',1)

    The objective values for the past iterations are kept in the matrix energy. Now we can plot the objective values from the learning process.

    figure hold on plot(energy(1,:),'--b') ; plot(energy(2,:),'-.g') ; plot(energy(3,:),'r') ; legend('Primal objective','Dual objective','Duality gap') xlabel('Diagnostics iteration') ylabel('Energy')
    SVM objective values plot.

    References

    • [1] Y. Singer and N. Srebro. Pegasos: Primal estimated sub-gradient solver for SVM. In Proc. ICML, 2007.
    • [2] S. Shalev-Schwartz and T. Zhang. Stochastic Dual Coordinate Ascent Methods for Regularized Loss Minimization. 2013.
    • [3] A. Vedaldi and A. Zisserman. Efficient additive kernels via explicit feature maps. In PAMI, 2011.
    vlfeat/docsrc/doxygen.conf0000644000175000017500000022662112237004745014563 0ustar dimadima# Doxyfile 1.8.1.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" "). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or sequence of words) that should # identify the project. Note that if you do not use Doxywizard you need # to put quotes around the project name if it contains spaces. PROJECT_NAME = VLFeat # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer # a quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify an logo or icon that is # included in the documentation. The maximum height of the logo should not # exceed 55 pixels and the maximum width should not exceed 200 pixels. # Doxygen will copy the logo to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doc/ # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = NO # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful if your file system # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 2 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding # "class=itcl::class" will allow you to use the command class in the # itcl::class meaning. TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this # tag. The format is ext=language, where ext is a file extension, and language # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all # comments according to the Markdown format, which allows for more readable # documentation. See http://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you # can mix doxygen, HTML, and XML commands with Markdown formatting. # Disable only in case of backward compatibilities issues. MARKDOWN_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also makes the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and # unions are shown inside the group in which they are included (e.g. using # @ingroup) instead of on a separate page (for HTML and Man pages) or # section (for LaTeX and RTF). INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and # unions with only public data fields will be shown inline in the documentation # of the scope in which they are defined (i.e. file, namespace, or group # documentation), provided this scope is documented. If set to NO (the default), # structs, classes, and unions are shown on a separate page (for HTML and Man # pages) or section (for LaTeX and RTF). INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = YES # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penalty. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will roughly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols. SYMBOL_CACHE_SIZE = 0 # Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be # set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given # their name and scope. Since this can be an expensive process and often the # same symbol appear multiple times in the code, doxygen keeps a cache of # pre-resolved symbols. If the cache is too small doxygen will become slower. # If the cache is too large, memory is wasted. The cache size is given by this # formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespaces are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to # do proper type resolution of all parameters of a function it will reject a # match between the prototype and the implementation of a member function even # if there is only one candidate or it is obvious which candidate to choose # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen # will still accept a match between prototype and implementation in such cases. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or macro consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and macros in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files # containing the references data. This must be a list of .bib files. The # .bib extension is automatically appended if omitted. Using this command # requires the bibtex tool to be installed. See also # http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style # of the bibliography can be controlled using LATEX_BIB_STYLE. To use this # feature you need bibtex and perl available in the search path. CITE_BIB_FILES = vlfeat.bib #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # The WARN_NO_PARAMDOC option can be enabled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = vl \ toolbox/mexutils.h \ src/generic-driver.h # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py # *.f90 *.f *.for *.vhd *.vhdl FILE_PATTERNS = *.h \ *.c \ *.tc # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = test_* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = vl/doc # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = doc/figures # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. # Transformations: # \[ --> @f[ # \] --> @f] # $ --> @f$ # \cite{xyz} --> @cite xyz INPUT_FILTER = "\ sed -e 's/\/\*\* -----------* *$/\/** /g' \ -e \"s/__VLFEAT_VERSION__/$(cat VERSION)/g\" \ -e \"s/@cite{\([a-zA-Z0-9-]*\)}/@cite \1 /g\" \ -e 's/\([^f]\)\$/\1@f$/g' \ -e 's/^\$/@f$/g' \ -e 's/\\\[/@f[/g' \ -e 's/\\\]/@f]/g' \ " # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty or if # non of the patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) # and it is also possible to disable source filtering for a specific pattern # using *.ext= (so without naming a filter). This option only has effect when # FILTER_SOURCE_FILES is enabled. FILTER_SOURCE_PATTERNS = #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C, C++ and Fortran comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = NO # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = NO #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = api # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. Note that when using a custom header you are responsible # for the proper inclusion of any scripts and style sheets that doxygen # needs, which is dependent on the configuration options used. # It is advised to generate a default header using "doxygen -w html # header.html footer.html stylesheet.css YourConfigFile" and then modify # that header. Note that the header is subject to change so you typically # have to redo this when upgrading to a newer version of doxygen or when # changing the value of configuration settings such as GENERATE_TREEVIEW! HTML_HEADER = doc/build/doxygen_header.html # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = doc/build/doxygen_footer.html # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # style sheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that # the files will be copied as-is; there are no commands or markers available. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the style sheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. HTML_DYNAMIC_SECTIONS = NO # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of # entries shown in the various tree structured indices initially; the user # can expand and collapse entries dynamically later on. Doxygen will expand # the tree to such a level that at most the specified number of entries are # visible (unless a fully collapsed tree already exceeds this amount). # So setting the number of entries 1 will produce a full collapsed tree by # default. 0 is a special value representing an infinite number of entries # and will result in a full expanded tree by default. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) # at top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. Since the tabs have the same information as the # navigation tree you can set this option to NO if you already set # GENERATE_TREEVIEW to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. # Since the tree basically has the same information as the tab index you # could consider to set DISABLE_INDEX to NO when enabling this option. GENERATE_TREEVIEW = NONE # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values # (range [0,1..20]) that doxygen will group on one line in the generated HTML # documentation. Note that a value of 0 will completely suppress the enum # values from appearing in the overview section. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 13 # Use the FORMULA_TRANSPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are # not supported properly for IE 6.0, but are supported on all modern browsers. # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax # (see http://www.mathjax.org) which uses client side Javascript for the # rendering instead of using prerendered bitmaps. Use this if you do not # have LaTeX installed or if you want to formulas look prettier in the HTML # output. When enabled you may also need to install MathJax separately and # configure the path to it using the MATHJAX_RELPATH option. USE_MATHJAX = YES # When MathJax is enabled you need to specify the location relative to the # HTML output directory using the MATHJAX_RELPATH option. The destination # directory should contain the MathJax.js script. For instance, if the mathjax # directory is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to # the MathJax Content Delivery Network so you can quickly see the result without # installing MathJax. # However, it is strongly recommended to install a local # copy of MathJax from http://www.mathjax.org before deployment. MATHJAX_RELPATH = http://www.mathjax.org/mathjax # The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension # names that should be enabled during MathJax rendering. MATHJAX_EXTENSIONS = # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = NO # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client # using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server # based approach is that it scales better to large projects and allows # full text search. The disadvantages are that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = YES # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = letter # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = amsmath \ amsfonts \ amssymb \ sfmath # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for # the generated latex document. The footer should contain everything after # the last chapter. If it is left blank doxygen will generate a # standard footer. Notice: only use this tag if you know what you are doing! LATEX_FOOTER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = YES # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See # http://en.wikipedia.org/wiki/BibTeX for more info. LATEX_BIB_STYLE = plain #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load style sheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = NO #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # pointed to by INCLUDE_PATH will be searched when a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = vl # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = __DOXYGEN__=1 \ VL_INLINE=inline \ VL_EXPORT= \ VL_UNUSED= # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition that # overrules the definition found in the source code. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all references to function-like macros # that are alone on a line, have an all uppercase name, and do not end with a # semicolon, because these will confuse the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. For each # tag file the location of the external documentation should be added. The # format of a tag file without this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths # or URLs. Note that each tag file must have a unique name (where the name does # NOT include the path). If a tag file is not located in the directory in which # doxygen is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = doc/doxygen.tag # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option also works with HAVE_DOT disabled, but it is recommended to # install and use dot, since it yields more powerful graphs. CLASS_DIAGRAMS = NO # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will use the Helvetica font for all dot files that # doxygen generates. When you want a differently looking font you can specify # the font name using DOT_FONTNAME. You need to make sure dot is able to find # the font, which can be done by putting it in a standard location or by setting # the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the # directory containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the Helvetica font. # If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to # set the path where dot can find it. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = NO # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If the UML_LOOK tag is enabled, the fields and methods are shown inside # the class node. If there are many fields or methods and many nodes the # graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS # threshold limits the number of items for each type to make the size more # managable. Set this to 0 for no limit. Note that the threshold may be # exceeded by 50% before the limit is enforced. UML_LIMIT_NUM_FIELDS = 10 # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will generate a graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are svg, png, jpg, or gif. # If left blank png will be used. If you choose svg you need to set # HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible in IE 9+ (other browsers do not have this requirement). DOT_IMAGE_FORMAT = png # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to # enable generation of interactive SVG images that allow zooming and panning. # Note that this requires a modern browser other than Internet Explorer. # Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you # need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible. Older versions of IE do not have SVG support. INTERACTIVE_SVG = NO # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the # \mscfile command). MSCFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = YES # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES vlfeat/docsrc/quickshift.html0000644000175000017500000000735212237004745015275 0ustar dimadima %tableofcontents;

    Quick shift is a mode seeking algorithm (like mean shift) which instead of iteratively shifting each point towards a local mean instead forms a tree of links to the nearest neighbor which increases the density. For a more in-depth description of the algorithm, see our API reference for quick shift

    Using quick shift to find superpixels

    This demo shows quick shift in a simple superpixelization problem where we seek to segment this image:

    The image we wish to segment

    As a feature vector, we choose the LAB colorspace representation of the image augmented with the x,y location of the pixel. vl_quickseg is a convenient wrapper function which takes care of the transformation of the image to LAB and performs segmentation, making our job as easy as:

    ratio = 0.5; kernelsize = 2; Iseg = vl_quickseg(I, ratio, kernelsize, maxdist);

    where ratio is the tradeoff between color importance and spatial importance (larger values give more importance to color), kernelsize is the size of the kernel used to estimate the density, and maxdist is the maximum distance between points in the feature space that may be linked if the density is increased.

    The effect of maxdist on the superpixelization. As we increase maxdist, superpixels become larger and larger since we can link less similar points. Top: maxdist=10. Bottom: maxdist=20.

    Multiple segmentations

    Quick shift arranges all of the data points into a tree where parents in the tree are the nearest neighbors in the feature space which increase the estimate of the density. By imposing a limit on the distance between nearest neighbors (maxdist), we decrease the amount of computation required to search for the nearest neighbors. However, we also break our tree into a forest, because local modes of the density will now have no neighbor which is close enough in the feature space to form a link.

    In the previous section, we created a superpixel segmentation by taking each of the trees in this forest as a distinct cluster. However, since maxdist simply prevents new links from forming, the segmentation formed by every dist < maxdist is contained in the result. vl_quickvis lets us visualize this by running quick shift once and forming multiple segmentations by cutting links in the tree which are smaller and smaller.

    maxdist = 50; ndists = 10; Iedge = vl_quickvis(I, ratio, kernelsize, maxdist, ndists) imagesc(Iedge); axis equal off tight; colormap gray;
    A visualization of multiple maxdist thresholds on a single image. Here, boundaries are colored by the largest maxdist where the boundary is preserved.
    vlfeat/docsrc/hog.html0000644000175000017500000001314712237004745013677 0ustar dimadima %tableofcontents;

    The HOG features are widely use for object detection. HOG decomposes an image into small squared cells, computes an histogram of oriented gradients in each cell, normalizes the result using a block-wise pattern, and return a descriptor for each cell.

    Stacking the cells into a squared image region can be used as an image window descriptor for object detection, for example by means of an SVM.

    This tutorial shows how to use the VLFeat function vl_hog to compute HOG features of various kind and manipulate them.

    Basic HOG computation

    We start by considering an example input image:

    An example image.

    HOG is computed by calling the vl_hog function:

    cellSize = 8 ; hog = vl_hog(im, cellSize, 'verbose') ;

    The same function can also be used to generate a pictorial rendition of the features, although this unavoidably destroys some of the information contained in the feature itself. To this end, use the render command:

    imhog = vl_hog('render', hog, 'verbose') ; clf ; imagesc(imhog) ; colormap gray ;

    This should produce the following image:

    Standard HOG features with a cell size of eight pixels.

    HOG is an array of cells, with the third dimension spanning feature components:

    > size(hog) ans = 16 16 31

    In this case the feature has 31 dimensions. HOG exists in many variants. VLFeat supports two: the UoCTTI variant (used by default) and the original Dalal-Triggs variant (with 2×2 square HOG blocks for normalization). The main difference is that the UoCTTI variant computes bot directed and undirected gradients as well as a four dimensional texture-energy feature, but projects the result down to 31 dimensions. Dalal-Triggs works instead with undirected gradients only and does not do any compression, for a total of 36 dimension. The Dalal-Triggs variant can be computed as

    % Dalal-Triggs variant cellSize = 8 ; hog = vl_hog(im, cellSize, 'verbose', 'variant', 'dalaltriggs') ; imhog = vl_hog('render', hog, 'verbose', 'variant', 'dalaltriggs') ;

    The result is visually very similar:

    Dalal-Triggs variant. Differences with the standard version are difficult to appreciated in the rendition.

    Flipping HOG from left to right

    Often it is necessary to flip HOG features from left to right (for example in order to model an axis symmetric object). This can be obtained analytically from the feature itself by permuting the histogram dimensions appropriately. The permutation is obtained as follows:

    % Get permutation to flip a HOG cell from left to right perm = vl_hog('permutation') ;

    Then these two examples produce identical results (provided that the image contains an exact number of cells:

    imHog = vl_hog('render', hog) ; imHogFromFlippedImage = vl_hog('render', hogFromFlippedImage) ; imFlippedHog = vl_hog('render', flippedHog) ;

    This is shown in the figure:

    Flipping HOG features from left to right either by flipping the input image or the features directly.

    Other HOG parameters

    vl_hog supports other parameters as well. For example, one can specify the number of orientations in the histograms by the numOrientations option:

    % Specify the number of orientations hog = vl_hog(im, cellSize, 'verbose', 'numOrientations', o) ; imhog = vl_hog('render', hog, 'verbose', 'numOrientations', o) ;

    Changing the number of orientations changes the features quite significantly:

    HOG features for numOrientations equal to 3, 4, 5, 9, and 21 repsectively.

    Another useful option is BilinearOrientations switching on the bilinear orientation assignment of the gradient (this is not used in certain implementation like UoCTTI).

    % Specify the number of orientations hog = vl_hog(im,cellSize,'numOrientations', 4) ; imhog = vl_hog('render', hog, 'numOrientations', 4) ;

    resulting in

    From left to right: input image, hard orientation assigments for numOrientations equals to four, and soft orientation assigments.
    vlfeat/docsrc/vlfeat-website.xml0000644000175000017500000000251212237004745015671 0ustar dimadima

    These man pages describe VLFeat command line utilities.

    vlfeat/docsrc/compiling.html0000644000175000017500000001057012237004745015100 0ustar dimadima %tableofcontents;

    These instructions explain how to compile VLFeat on your own. This can be useful to customize or contribute to VLFeat, but it is otherwise not necessary (use the binary package instead).

    Compiling on Unix

    Compiling for UNIX-like platforms (e.g. Mac OS X, Linux) uses the standard GNU toolchain. It is usually sufficient to change to VLFeat root directory, denoted VLFEATROOT in the following, and type make:

    $ cd VLFEATROOT $ make

    The make script attempts to automatically detect the host architecture and configure itself accordingly. If the architecture is not detected correctly, it can be specified manually. For instance

    $ make ARCH=glnx86

    compiles for GNU/Linux 32-bit. make help can be used to obtain a list of other useful options. You can also use make info to obtain a list of the configuration parameters used by the Makefile, which might allow you do debug any potential issue.

    MATLAB support. In order for MATLAB support to be compiled, the MATLAB mex script must be in the current path. If it is not, its location must be passed to make as follows. First, determine MATLAB's root directory by running a MATLAB session and issuing the matlabroot command. Let MATLABROOT denote the returned path (e.g. /Applications/MATLAB_R2009b.app/). The mex script is usually located in MALTABROOT/bin/mex. Then run the compilation with the command

    $ make MEX=MATLABROOT/bin/mex

    VLFeat must be compiled for the architecture used by MATLAB (run MATLAB's computer command to obtain this information). On Mac OS X it is often necessary to turn on 64-bit support explicitly by setting ARCH=maci64 as both the 32 and 64 bit versions are plausible targets on 64-bit machines.

    Mac OS X 10.6 (Snow Leopard), 64-bit, and MATLAB 2009b. MATLAB 2009b for Snow Leopard has added 64 bit mex support and a corresponding extension mexmaci64. VLFeat now supports compiling for this platform, but the architecture must be specified manually when compiling, either like:

    $ make ARCH=maci64

    or

    $ make ARCH=maci

    Unfortunately, MATLAB 2009b's mex script has a bug that must be manually fixed in order for this procedure to work correctly. It is recommend to make backup of the mex script before attempting this. Th fix the bug, edit the MATLABROOT/bin/mex script by cutting the line:

    get_arch # Call $MATLAB/bin/util/arch.sh

    and pasting it after the processing of options:

    ... shift done #PASTE get_arch call here get_arch # Call $MATLAB/bin/util/arch.sh if [ $v7_compat -eq 1 ] ; then fc_flags="$fc_flags -DMX_COMPAT_32" ...

    Compiling on Windows

    For Windows, the library bundles an NMake makefile (Makefile.mak). In order to use it, you must edit Makefile.mak to adjust the values of a number of configuration variables to match your setup. Once you have done that, start the Visual Studio Command Prompt and type

    $ nmake /f Makefile.mak # for the Windows 32 target $ nmake /f Makefile.mak ARCH=win64 # for the Windows 64 target

    For Windows platform, it is also possible to compile just the MATLAB MEX files from within MATLAB (using the vl_compile command). This is meant to help less experienced users that may need to recompile the mex file due to binary incompatibilities with older MATLAB versions.

    Windows troubleshooting

    syntax error: '=' unexpected:

    Use nmake /f Makefile.mak. Without /f, nmake will default to the wrong makefile.

    'long' followed by 'long' is illegal:

    This error is usually caused by attempting to compile outside of the Visual Studio Command Prompt.

    vlfeat/docsrc/pygmentize.css0000644000175000017500000000617612237004736015145 0ustar dimadima.hll { background-color: #ffffcc } .c { color: #408080; font-style: italic } /* Comment */ .err { border: 1px solid #FF0000 } /* Error */ .k { color: #008000; font-weight: bold } /* Keyword */ .o { color: #666666 } /* Operator */ .cm { color: #408080; font-style: italic } /* Comment.Multiline */ .cp { color: #BC7A00 } /* Comment.Preproc */ .c1 { color: #408080; font-style: italic } /* Comment.Single */ .cs { color: #408080; font-style: italic } /* Comment.Special */ .gd { color: #A00000 } /* Generic.Deleted */ .ge { font-style: italic } /* Generic.Emph */ .gr { color: #FF0000 } /* Generic.Error */ .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .gi { color: #00A000 } /* Generic.Inserted */ .go { color: #808080 } /* Generic.Output */ .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ .gs { font-weight: bold } /* Generic.Strong */ .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ .gt { color: #0040D0 } /* Generic.Traceback */ .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ .kp { color: #008000 } /* Keyword.Pseudo */ .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ .kt { color: #B00040 } /* Keyword.Type */ .m { color: #666666 } /* Literal.Number */ .s { color: #BA2121 } /* Literal.String */ .na { color: #7D9029 } /* Name.Attribute */ .nb { color: #008000 } /* Name.Builtin */ .nc { color: #0000FF; font-weight: bold } /* Name.Class */ .no { color: #880000 } /* Name.Constant */ .nd { color: #AA22FF } /* Name.Decorator */ .ni { color: #999999; font-weight: bold } /* Name.Entity */ .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ .nf { color: #0000FF } /* Name.Function */ .nl { color: #A0A000 } /* Name.Label */ .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ .nt { color: #008000; font-weight: bold } /* Name.Tag */ .nv { color: #19177C } /* Name.Variable */ .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ .w { color: #bbbbbb } /* Text.Whitespace */ .mf { color: #666666 } /* Literal.Number.Float */ .mh { color: #666666 } /* Literal.Number.Hex */ .mi { color: #666666 } /* Literal.Number.Integer */ .mo { color: #666666 } /* Literal.Number.Oct */ .sb { color: #BA2121 } /* Literal.String.Backtick */ .sc { color: #BA2121 } /* Literal.String.Char */ .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ .s2 { color: #BA2121 } /* Literal.String.Double */ .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ .sh { color: #BA2121 } /* Literal.String.Heredoc */ .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ .sx { color: #008000 } /* Literal.String.Other */ .sr { color: #BB6688 } /* Literal.String.Regex */ .s1 { color: #BA2121 } /* Literal.String.Single */ .ss { color: #19177C } /* Literal.String.Symbol */ .bp { color: #008000 } /* Name.Builtin.Pseudo */ .vc { color: #19177C } /* Name.Variable.Class */ .vg { color: #19177C } /* Name.Variable.Global */ .vi { color: #19177C } /* Name.Variable.Instance */ .il { color: #666666 } /* Literal.Number.Integer.Long */ vlfeat/docsrc/api.html0000644000175000017500000000002212237004736013657 0ustar dimadima vlfeat/docsrc/download.html0000644000175000017500000000477112237004745014734 0ustar dimadima

    The latest version of VLFeat is %env:VERSION;. To use VLFeat, simply download and unpack the latest binary package and add the appropriate paths to your environment (see below for details).

    Downloads

    Install

    &nsbp;

    Repository access

    VLFeat is under active development. You can browse our Git repository or download it by

    git clone git://github.com/vlfeat/vlfeat.git

    (This will require Git to be installed). The top of the master branch corresponds to the most recent version of VLFeat, but it could be unstable.

    We welcome contributions to both the documentation and the source code of VLFeat. You can create patches against our Git repository and send them to us for inclusion in the next version. There are two ways to contribute. For minor changes, simply clone our public repository, as explained above. Once you have made and committed your changes locally, you can submit them to the project via e-mail using a command like git format-patch:

    git format-patch origin

    For major additions, we prefer to handle collaboration through github. Follow their tutorial to fork our project and submit your modifications using a pull request.

    vlfeat/docsrc/doxytag.py0000644000175000017500000000403712237004745014263 0ustar dimadima#!/bin/python # file: Doxytag.py # brief: Parse doxygen.tag file # author: Andrea Vedaldi """ DOXYTAG parses doxygen.tag files. """ import xml.dom.minidom import sys import os import re __mpname__ = 'Doxytag' __version__ = '0.1' __date__ = '2013-07-09' __description__ = 'Doxygen tags parser' __long_description__ = __doc__ __license__ = 'BSD' __author__ = 'Andrea Vedaldi' # -------------------------------------------------------------------- class Doxytag: # -------------------------------------------------------------------- """ d = Doxytag(FILENAME) """ def __init__ (self, filename): self.index = {} dom = xml.dom.minidom.parse(filename) self.xBuildIndex(dom) def getText(self, nodelist): rc = [] for node in nodelist: if node.nodeType == node.TEXT_NODE: rc.append(node.data) return ''.join(rc) def xBuildIndex(self, node): if node.nodeType == node.ELEMENT_NODE: if node.tagName == "docanchor": anchor=self.getText(node.childNodes) filename=node.getAttribute("file") if os.path.splitext(filename)[1] != '.html': filename += '.html' self.index[anchor] = filename + "#" + anchor # do filenames filename = node.getElementsByTagName("filename") if filename.length > 0: name = node.getElementsByTagName("name") if name.length > 0: s1 = self.getText(name[0].childNodes) s2 = self.getText(filename[0].childNodes) if os.path.splitext(s2)[1] != '.html': s2 = s2 + '.html' self.index[s1] = s2 for x in node.childNodes: self.xBuildIndex(x) def dump(self): for k in self.index: print "%40s -> %40s" % (k, self.index[k]) if __name__ == '__main__': d = Doxytag("doc/doxygen.tag") d.dump() vlfeat/docsrc/plots-rank.html0000644000175000017500000002175612237004745015221 0ustar dimadima

    This tutorial illustrates the use of the functions vl_roc, vl_det, and vl_pr to generate ROC, DET, and precision-recall curves.

    VLFeat includes support for plotting starndard information retrieval curves such as the Receiver Operating Characteristic (ROC) and the Precision-Recall (PR) curves.

    Consider a set of samples with labels labels and score scores. scores is typically the output of a classifier, with higher scores corresponding to positive labels. Ideally, sorting the data by decreasing scores should leave all the positive samples first and the negative samples last. In practice, a classifier is not perfect and the ranking is not ideal. The tools discussed in this tutorial allow to evaluate and visualize the quality of the ranking.

    For the sake of the illustration generate some data randomly as follows:

    numPos = 20 ; numNeg = 100 ; labels = [ones(1, numPos) -ones(1,numNeg)] ; scores = randn(size(labels)) + labels ;

    In this case, there have five times more negative samples than positive ones. The scores are correlated to the labels as expected, but do not allow for a perfect separation of the two classes.

    ROC and DET curves

    To visualize the quality of the ranking, one can plot the ROC curve by using the vl_roc function:

    vl_roc(labels, scores) ;

    This produces the figure

    An example ROC curve.

    The ROC curve is the parametric curve given by the true positve rate (TPR) against the true negative rate (TNR). These two quantities can be obtained from vl_roc as follows:

    [tpr, tnr] = vl_roc(labels, scores) ;

    The TPR value tpr(k) is the percentage of positive samples that have rank smaller or equal than k (where ranks are assigned by decreasing scores). tnr(k) is instead the percentage of negative samples that have rank larger than k. Therefore, if one classifies the samples with rank smaller or equal than k to be positive and the rest to be negative, tpr(k) and tnr(k) are repsectively the probability that a positive/negative sample is classified correctly.

    Moving from rank k to rank k+1, if the sample of rank k+1 is positive then tpr increases; otherwise tnr decreases. An ideal classifier has all the positive samples first, and the corresponding ROC curve is one that describes two sides of the unit square.

    The Area Under the Curve (AUC) is an indicator of the overall quality of a ROC curve. For example, the ROC of the ideal classifier has AUC equal to 1. Another indicator is the Equal Error Rate (EER), the point on the ROC curve that corresponds to have an equal probability of miss-classifying a positive or negative sample. This point is obtained by intersecting the ROC curve with a diagonal of the unit square. Both AUC and EER can be computed by vl_roc:

    [tpr, tnr, info] = vl_roc(labels, scores) ; disp(info.auc) ; disp(info.eer) ;

    vl_roc has a couple of useful functionalities:

    • Any sample with label equal to zero is effecitvely ignored in the evaluation.
    • Samples with scores equal to -inf are assumed to be never retrieved by the classifier. For these, the TNR is conventionally set to be equal to zero.
    • Additional negative and positive samples with -inf score can be added to the evaluation by means of the numNegatives and numPositives options. For example, vl_roc(labels,scores,'numNegatives',1e4) sets the number of negative samples to 10,000. This can be useful when evaluating large retrieval systems, for which one may want to record in labels and scores only the top ranked results from a classifier.
    • Different variants of the ROC plot can be produced. For example vl_roc(labels,scores,'plot','tptn') swaps the two axis, plotting the TNR against the TPR. Since the TPR is also the recall (i.e., the percentage of positive samples retrieved up to a certain rank), this makes the plot more directly comparable to a precision-recall plot.
      Variants of the ROC plot.

    A limitation of the ROC curves in evaluating a typical retrieval system is that they put equal emphasis on false positive and false negative errors. In a tipical retrieval application, however, the vast majority of the samples are negative, so the false negative rate is typically very small for any operating point of interest. Therefore the emphasis is usually on the very first portion of the rank, where the few positive samples should concentrate. This can be emphasized by using either precision-recall plot or a variant of the ROC curves called Detection Error Tradeoff (DET) curves.

    A DET curve plots the FNR (also called false alarm rate) against teh FPR (also called miss rate) in logarithmic coordiantes. It can be generated by vl_det function call:

    An example DET curve.

    Precision-recall curves

    Both ROC and DET curves normalize out the relative proportions of positive and negative samples. By contrast, a Precision-Recall (PR) curve reflects this directly. One can plot the PR curve by using the vl_pr function:

    vl_pr(labels, scores) ;

    This produces the figure

    An example precision-recall curve.

    The PR curve is the parametric curve given by precision and recall. These two quantities can be obtained from vl_roc as follows:

    [recall, precision] = vl_roc(labels, scores) ;

    The precision value precision(k) is the proportion of samples with rank smaller or equal than k-1 that are positive(where ranks are assigned by decreasing scores). recall(k) is instead the percentage of positive samples that have rank smaller or equal than k-1. For example, if the first two samples are one positive and one negative, precision(3) is 1/2. If there are in total 5 positive samples, then recall(3) is 1/5.

    Moving from rank k to rank k+1, if the sample of rank k+1 is positive then both precision and recall increase; otherwise precision decreases and recall stays constant. This gives the PR curve a characteristic saw-shape. For aan ideal classifier that ranks all the positive samples first the PR curve is one that describes two sides of the unit square.

    Similar to the ROC curves, the Area Under the Curve (AUC) can be used to summarize the quality of a ranking in term of precision and recall. This can be obtained as info.auc by

    [rc, pr, info] = vl_pr(labels, scores) ; disp(info.auc) ; disp(info.ap) ; disp(info.ap_interp_11) ;

    The AUC is obtained by trapezoidal interpolation of the precision. An alternative and usually almost equivalent metric is the Average Precision (AP), returned as info.ap. This is the average of the precision obtained every time a new positive sample is recalled. It is the same as the AUC if precision is interpolated by constant segments and is the definition used by TREC most often. Finally, the 11 points interpolated average precision, returned as info.ap_interp_11. This is an older TREC definition and is obtained by taking the average of eleven precision values, obtained as the maximum precision for recalls largerer than 0.0, 0.1, ..., 1.0. This particular metric was used, for example, in the PASCAL VOC challenge until the 2008 edition.

    vlfeat/docsrc/apps.html0000644000175000017500000001173312237042456014065 0ustar dimadima #content table.checker { border-collapse: collapse ; margin-left: auto ; margin-right: auto ; } #content table.checker td { background-color: #f6f6f6 ; border: 1px solid #DDD ; padding: 0.5em ; }

    This page lists a number of sample VLFeat applications. Their code can be found in the VLROOT/apps/ subdirectory.

    Basic recognition

    Caltech-101 Collage

    This sample application uses VLFeat to train an test an image classifier on the Caltech-101 data. The classifier achieves 65% average accuracy by using a single feature and 15 training images per class. It uses:

    • PHOW features (dense multi-scale SIFT descriptors)
    • Elkan k-means for fast visual word dictionary construction
    • Spatial histograms as image descriptors
    • A homogeneous kernel map to transform a Chi2 support vector machine (SVM) into a linear one
    • SVM classifiers

    The program is fully contained in a single MATLAB M-file, and can also be simply adapted to use your own data (change conf.calDir).

    Advanced encodings for recognition

    This example application extends the Caltech-101 demo above in many ways: it supports multiple encoding methods, including BoVW, VLAD, and Fisher Vectors, tweaked image featuers, and multiple benchmark datasets. The code is located int apps/recognition. Start from the main file.

    The following tables report results on a few standard benchmark datasets (PASCAL VOC 2007 classification challenge, Caltech 101 30 training images, MIT Scene 67, and Flickr Material Dataset) for a number of different encodings:

    methodVOC07Caltech 101Scene 67FMD
    FV59.12% mAP73.02% Acc58.25% Acc59.60% Acc
    FV + aug.60.25% mAP75.61% Acc57.57% Acc60.80% Acc
    FV + s.p.62.23% mAP77.63% Acc61.83% Acc60.80% Acc
    VLAD + aug.54.66% mAP78.68% Acc53.29% Acc49.40% Acc
    BOVW + aug.49.87% mAP75.98% Acc50.22% Acc46.00% Acc

    The baseline feature is SIFT (vl_dsift) computed at seven scales with a factor $\sqrt{2}$ between successive scales, bins 8 pixel wide, and comptued with a step of 4 pixels. All experiments but the Caltech-101 ones start by doubling the resolution of the input image. The details of the encodings are as follows:

    • Bag-of-visual-words uses 4096 vector quantized visual words histogram square rooting, followed by $L^2$ normalization (Hellinger's kernel).
    • VLAD uses 256 vector quantized visual words, signed square-rooting, component wise $L^2$ normalization, and global $L^2$ normalization (see vl_vlad).
    • Fisher vectors uses a 256 visual words GMM and the improved formulation (signed square-rooting followed by $L^2$ normlization, see vl_fisher).
    • Learning uses a linear SVM (see vl_svmtrain). The parameter $C$ is set to 10 for all dataset except PASCAL VOC, for which it is set to 1.
    • Experiments labelled with “aug.” encode spatial information by appending the feature coordinates to the descriptor; the ones labelled with “s.p.” use a spatial pyramid with 1x1 and 3x1 subdivisions.
    vlfeat/docsrc/install-octave.html0000644000175000017500000000305412237004745016043 0ustar dimadima

    This page shows how to compile VLFeat MEX files for usage in GNU Octave (tested on version 3.6.4).

    Make sure that the image toolbox is installed in Octave. This can be obtained, for example, by using the pkg builtin Octave command:

    >> pkg install image

    Unpack VLFeat and use the Makefile to compile the MEX files. To instruct the Makefile to target Octave as well, specify the path to the mkoctfile command. For example, if mkoctfile is in your current path and VLFeat is unpacked in VLFEATROOT, the following should work:

    > cd VLFEATROOT > MKOCTFILE=mkoctfile make

    After the MEX files are successfully compiled (look for them into toolbox/mex/octave/), you can start using VLFeat in Octave in the same way as MATLAB. Do not forget to use the vl_setup command to initalize the paths:

    octave:1> addpath VLFEATROOT/toolbox octave:2> vl_setup octave:3> vl_version verbose VLFeat version 0.9.17 Static config: X64, little_endian, GNU C 40201 LP64, POSIX_threads, SSE2, OpenMP 4 CPU(s): GenuineIntel MMX SSE SSE2 SSE3 SSE41 SSE42 OpenMP: max threads: 4 (library: 4) Debug: yes SIMD enabled: yes
    vlfeat/docsrc/covdet.html0000644000175000017500000003323212237042456014404 0ustar dimadima %tableofcontents;

    This tutorial introduces the vl_covdet VLFeat command implementing a number of co-variant feature detectors and corresponding descriptors. This family of detectors include SIFT as well as multi-scale conern (Harris-Laplace), and blob (Hessian-Laplace and Hessian-Hessian) detectors.

    Extracting frames and descriptors

    The first example shows how to use vl_covdet to compute and visualise co-variant features. Fist, let us load an example image and visualize it:

    im = vl_impattern('roofs1') ; figure(1) ; clf ; image(im) ; axis image off ;
    An example input image.

    The image must be converted to gray=scale and single precision. Then vl_covdet can be called in order to extract features (by default this uses the DoG cornerness measure, similarly to SIFT).

    imgs = im2single(rgb2gray(im)) ; frames = vl_covdet(imgs, 'verbose') ;

    The verbose option is not necessary, but it produces some useful information:

    vl_covdet: doubling image: yes vl_covdet: detector: DoG vl_covdet: peak threshold: 0.01, edge threshold: 10 vl_covdet: detected 3518 features vl_covdet: kept 3413 inside the boundary margin (2)

    The vl_plotframe command can then be used to plot these features

    hold on ; vl_plotframe(frames) ;

    which results in the image

    The default features detected by vl_covdet use the DoG cornerness measure (like SIFT).

    In addition to the DoG detector, vl_covdet supports a number of other ones:

    • The Difference of Gaussian operator (also known as trace of the Hessian operator or Laplacian operator) uses the local extrema trace of the multiscale Laplacian operator to detect features in scale and space (as in SIFT).
    • The Hessian operator uses the local extrema of the mutli-scale determinant of Hessian operator.
    • The Hessian Laplace detector uses the extrema of the multiscale determinant of Hessian operator for localisation in space, and the extrema of the multiscale Laplacian operator for localisation in scale.
    • Harris Laplace uses the multiscale Harris cornerness measure instead of the determinant of the Hessian for localization in space, and is otherwise identical to the previous detector..
    • Hessian Multiscale detects features spatially at multiple scales by using the multiscale determinant of Hessian operator, but does not attempt to estimate their scale.
    • Harris Multiscale is like the previous one, but uses the multiscale Harris measure instead.

    For example, to use the Hessian-Laplace operator instead of DoG, use the code:

    frames = vl_covdet(imgs, 'method', 'HarrisLaplace') ;

    The following figure shows example of the output of these detectors:

    Different detectors can produce a fairly different set of features.

    Understanding feature frames

    To understand the rest of the tutorial, it is important to understand the geometric meaning of a feature frame. Features computed by vl_covdet are oriented ellipses and are defined by a translation $T$ and linear map $A$ (a $2\times 2$) which can be extracted as follows:

    T = frame(1:2) ; A = reshape(frame(3:6),2,2)) ;

    The map $(A,T)$ moves pixels from the feature frame (also called normalised patch domain) to the image frame. The feature is represented as a circle of unit radius centered at the origin in the feature reference frame, and this is transformed into an image ellipse by $(A,T)$.

    In term of extent, the normalised patch domain is a square box centered at the origin, whereas the image domain uses the standard MATLAB convention and starts at (1,1). The Y axis points downward and the X axis to the right. These notions are important in the computation of normalised patches and descriptors (see later).

    Affine adaptation

    Affine adaptation is the process of estimating the &ldqo;affine shape&rdqo; of an image region in order to construct an affinely co-variant feature frame. This is useful in order to compensate for deformations of the image like slant, arising for example for small perspective distortion.

    To switch on affine adaptation, use the EstimateAffineShape option:

    frames = vl_covdet(imgs, 'EstimateAffineShape', true) ;

    which detects the following features:

    Affinely adapted features.

    Feature orientation

    The detection methods discussed so far are rotationally invariant. This means that they detect the same circular or elliptical regions regardless of an image rotation, but they do not allow to fix and normalise rotation in the feature frame. Instead, features are estimated to be upright by default (formally, this means that the affine transformation $(A,T)$ maps the vertical axis $(0,1)$ to itself).

    Estimating and removing the effect of rotation from a feature frame is needed in order to compute rotationally invariant descriptors. This can be obtained by specifying the EstimateOrientation option:

    frames = vl_covdet(imgs, 'EstimateOrientation', true, 'verbose') ;

    which results in the following features being detected:

    Features with orientation detection.

    The method used is the same as the one proposed by D. Lowe: the orientation is given by the dominant gradient direction. Intuitively, this means that, in the normalized frame, brighter stuff should appear on the right, or that there should be a left-to-right dark-to-bright pattern.

    In practice, this method may result in an ambiguous detection of the orientations; in this case, up to four different orientations may be assigned to the same frame, resulting in a multiplication of them.

    Computing descriptors

    vl_covdet can also compute descriptors. Three are supported so far: SIFT, LIOP and raw patches (from which any other descriptor can be computed). To use this functionality simply add an output argument:

    [frames, descrs] = vl_covdet(imgs) ;

    This will compute SIFT descriptors for all the features. Each column of descrs is a 128-dimensional descriptor vector in single precision. Alternatively, to compute patches use:

    [frames, descrs] = vl_covdet(imgs, 'descriptor', 'liop') ;

    Using default settings, each column will be a 144-dimensional descriptor vector in single precision. If you wish to change the settings, use arguments described in LIOP tutorial

    [frames, descrs] = vl_covdet(imgs, 'descriptor', 'patch') ;

    In this case each column of descrs is a stacked patch. To visualize the first 100 patches, one can use for example:

    w = sqrt(size(patches,1)) ; vl_imarraysc(reshape(patches(:,1:10*10), w,w,[])) ;
    Patches extracted with the standard detectors (left) and adding affine adaptation (right).

    There are several parameters affecting the patches associated to features. First, PatchRelativeExtent can be used to control how large a patch is relative to the feature scale. The extent is half of the side of the patch domain, a square in the frame reference frame. Since most detectors latch on image structures (e.g. blobs) that, in the normalised frame reference, have a size comparable to a circle of radius one, setting PatchRelativeExtent to 6 makes the patch about six times largerer than the size of the corner structure. This is approximately the default extent of SIFT feature descriptors.

    A second important parameter is PatchRelativeSigma which expresses the amount of smoothing applied to the image in the normalised patch frame. By default this is set to 1.0, but can be reduced to get &ldqo;sharper&rdqo; patches. Of course, the amount of smoothing is bounded below by the resolution of the input image: a smoothing of, say, less than half a pixel cannot be recovered due to the limited sampling rate of the latter. Moreover, the patch must be sampled finely enough to avoid aliasing (see next).

    The last parameter is PatchResolution. If this is equal to $w$, then the patch has a side of $2w+1$ pixels. (hence the sampling step in the normalised frame is given by PatchRelativeExtent/PatchResolution). Extracting higher resolution patches may be needed for larger extent and smaller smoothing. A good setting for this parameter may be PatchRelativeExtent/PatchRelativeSigma.

    Custom frames

    Finally, it is possible to use vl_covdet to compute descriptors on custom feature frames, or to apply affine adaptation and/or orientation estimation to these.

    For example

    delta = 30 ; xr = delta:delta:size(im,2)-delta+1 ; yr = delta:delta:size(im,1)-delta+1 ; [x,y] = meshgrid(xr,yr) ; frames = [x(:)'; y(:)'] ; frames(end+1,:) = delta/2 ; [frames, patches] = vl_covdet(imgs, ... 'frames', frames, ... 'estimateAffineShape', true, ... 'estimateOrientation', true) ;

    computes affinely adapted and oriented features on a grid:

    Custom frame (on a grid) after affine adaptation.

    Getting the scale spaces

    vl_covdet can return additional information about the features, including the scale spaces and scores for each detected feature. To do so use the syntax:

    [frames, descrs, info] = vl_covdet(imgs) ;

    This will return a structure info

    info = gss: [1x1 struct] css: [1x1 struct] peakScores: [1x351 single] edgeScores: [1x351 single] orientationScore: [1x351 single] laplacianScaleScore: [1x351 single]
    \[ test \]

    The last four fields are the peak, edge, orientation, and Laplacian scale scores of the detected features. The first two were discussed before, and the last two are the scores associated to a specific orientation during orientation assignment and to a specific scale during Laplacian scale estimation.

    The first two fields are the Gaussian scale space and the cornerness measure scale space, which can be plotted by means of vl_plotss. The following is the of the Gaussian scale space for our example image:

    Gaussian scale space.

    The following is an example of the corresponding cornerness measure:

    Cornerness scale space (Difference of Gaussians).
    vlfeat/docsrc/roadmap.html0000644000175000017500000000466712237004745014554 0ustar dimadima

    PASCAL2 credits In 2012 the development of VLFeat is supported by the PASCAL Harvest programme. Several people have been working in Oxford to add new functionalities to the library. Moreover, leading researchers in computer vision were consulted as advisors of the project. These contributions will be made public in the next several weeks as the code is tuned and finalised.

    A particularly significant contribution is the creation of a new sub-project, VLBenchmakrs, for the evaluation of feature detectors and descriptors. VLBenchmarks is meant to provide a future-proof benchmarking suite. The first release includes reimplementations of standard feature benchmarks to replace ageing legacy code and a brand new benchmark. In the future, it will be used to deliver to the community new, modern benchmarks in a consistent and simple to use pacakge.

    Version 0.9.17 (released)

    • Large scale Approximate Nearest Neighbours (ANN) K-means.
    • Gaussian Mixture Models (GMMs).
    • Fisher Kernel encoding.
    • VLAD encoding.
    • New SVM algorithms: SGD and SDCA with support for multiple loss functions, data weighting, and other useful features.
    • LIOP feature descriptor.
    • Multicore computations through OpenMP.
    • New extensive image recognition examples running on several standard computer vision benchmark datasets.
    • Improved documentation.

    Version 0.9.16 (released)

    • VLBenchmarks: detector repeatability, descriptor matching score, and image retrieval benchmarks.
    • Affine covariant feature detectors. The aim is to create a future proof replacement of the legacy implementation.

    Version 0.9.15 (released)

    • Histogram of Oriented Gradients (HOG) features.
    • New Stochastic Gradient Descent (SGD) Support Vector Machine (SVM) implementation. Layed down a good infrastructure to add more learning algorithms in the future.
    • Several utility functions (hashed summation, integral images, plotting functions).
    • Significant cleanup of the codebase, outstanding bugs squashed.
    vlfeat/docsrc/doxygen.css0000644000175000017500000005412412237004745014423 0ustar dimadima#context div.doxygen, #content .doxygen table, #content .doxygen div, #content .doxygen p, #content .doxygen dl { } #content .doxygen h1 { font-size: 150%; } #content .doxygen .title { font-size: 150%; font-weight: bold; margin: 10px 2px; } #content .doxygen h2 { font-size: 120%; } #content .doxygen h3 { font-size: 100%; } #content .doxygen h1, #content .doxygen h2, #content .doxygen h3, #content .doxygen h4, #content .doxygen h5, #content .doxygen h6 { -webkit-transition: text-shadow 0.5s linear; -moz-transition: text-shadow 0.5s linear; -ms-transition: text-shadow 0.5s linear; -o-transition: text-shadow 0.5s linear; transition: text-shadow 0.5s linear; margin-right: 15px; } #content .doxygen h1.glow, #content .doxygen h2.glow, #content .doxygen h3.glow, #content .doxygen h4.glow, #content .doxygen h5.glow, #content .doxygen h6.glow { text-shadow: 0 0 15px cyan; } #content .doxygen dt { font-weight: bold; } #content .doxygen div.multicol { -moz-column-gap: 1em; -webkit-column-gap: 1em; -moz-column-count: 3; -webkit-column-count: 3; } #content .doxygen p.startli, #content .doxygen p.startdd, #content .doxygen p.starttd { margin-top: 2px; } #content .doxygen p.endli { margin-bottom: 0px; } #content .doxygen p.enddd { margin-bottom: 4px; } #content .doxygen p.endtd { margin-bottom: 2px; } #content .doxygen caption { font-weight: bold; } #content .doxygen span.legend { font-size: 70%; text-align: center; } #content .doxygen h3.version { font-size: 90%; text-align: center; } #content .doxygen div.qindex, #content .doxygen div.navtab { background-color: #EBEFF6; border: 1px solid #A3B4D7; text-align: center; } #content .doxygen div.qindex, #content .doxygen div.navpath { width: 100%; line-height: 140%; } #content .doxygen div.navtab { margin-right: 15px; } #content .doxygen a { color: #3D578C; font-weight: normal; text-decoration: none; } #content .doxygen .contents a:visited { color: #4665A2; } #content .doxygen a:hover { text-decoration: underline; } #content .doxygen a.qindex { font-weight: bold; } #content .doxygen a.qindexHL { font-weight: bold; background-color: #9CAFD4; color: #ffffff; border: 1px double #869DCA; } #content .doxygen .contents a.qindexHL:visited { color: #ffffff; } #content .doxygen a.el { font-weight: bold; } #content .doxygen a.code, #content .doxygen a.code:visited { color: #4665A2; } #content .doxygen a.codeRef, #content .doxygen a.codeRef:visited { color: #4665A2; } #content .doxygen dl.el { margin-left: -1cm; } #content .doxygen pre.fragment { border: 1px solid #C4CFE5; background-color: #FBFCFD; padding: 6px 6px; margin: 0px 8px 0px 2px; overflow: auto; word-wrap: break-word; font-size: 9pt; line-height: 125%; font-family: monospace, fixed; font-size: 105%; } #content .doxygen div.fragment { padding: 4px; margin: 4px 0px 4px 0px ; background-color: #FBFCFD; border: 1px solid #C4CFE5; } #content .doxygen div.line { font-family: monospace, fixed; font-size: 13px; min-height: 13px; line-height: 1.5 ; text-wrap: unrestricted; white-space: -moz-pre-wrap; /* Moz */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ white-space: pre-wrap; /* CSS3 */ word-wrap: break-word; /* IE 5.5+ */ text-indent: -53px; padding-left: 53px; padding-bottom: 0px; margin: 0px; -webkit-transition-property: background-color, box-shadow; -webkit-transition-duration: 0.5s; -moz-transition-property: background-color, box-shadow; -moz-transition-duration: 0.5s; -ms-transition-property: background-color, box-shadow; -ms-transition-duration: 0.5s; -o-transition-property: background-color, box-shadow; -o-transition-duration: 0.5s; transition-property: background-color, box-shadow; transition-duration: 0.5s; } #content .doxygen div.line.glow { background-color: cyan; box-shadow: 0 0 10px cyan; } #content .doxygen span.lineno { padding-right: 4px; text-align: right; border-right: 2px solid #0F0; background-color: #E8E8E8; white-space: pre; } #content .doxygen span.lineno a { background-color: #D8D8D8; } #content .doxygen span.lineno a:hover { background-color: #C8C8C8; } #content .doxygen div.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px; padding: 0.2em; border: solid thin #333; border-radius: 0.5em; -webkit-border-radius: .5em; -moz-border-radius: .5em; box-shadow: 2px 2px 3px #999; -webkit-box-shadow: 2px 2px 3px #999; -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; background-image: -webkit-gradient(linear, left top, left bottom, from(#eeeeee), to(#000000), color-stop(0.3, #444444)); background-image: -moz-linear-gradient(center top, #eeeeee 0%, #444444 40%, #000000); } #content .doxygen div.groupHeader { margin-left: 16px; margin-top: 12px; font-weight: bold; } #content .doxygen div.groupText { margin-left: 16px; font-style: italic; } #content .doxygen body { background-color: white; color: black; margin: 0; } #content .doxygen div.contents { margin-top: 10px; margin-left: 0px; margin-right: 0px; } #content .doxygen td.indexkey { background-color: #EBEFF6; font-weight: bold; border: 1px solid #C4CFE5; margin: 2px 0px 2px 0; padding: 2px 10px; white-space: nowrap; vertical-align: top; } #content .doxygen td.indexvalue { background-color: #EBEFF6; border: 1px solid #C4CFE5; padding: 2px 10px; margin: 2px 0px; } #content .doxygen tr.memlist { background-color: #EEF1F7; } #content .doxygen p.formulaDsp { text-align: center; } #content .doxygen img.formulaInl { vertical-align: middle; } #content .doxygen div.center { text-align: center; margin-top: 0px; margin-bottom: 0px; padding: 0px; } #content .doxygen div.center img { border: 0px; } #content .doxygen address.footer { text-align: right; padding-right: 12px; } #content .doxygen img.footer { border: 0px; vertical-align: middle; } #content .doxygen span.keyword { color: #008000; } #content .doxygen span.keywordtype { color: #604020; } #content .doxygen span.keywordflow { color: #e08000; } #content .doxygen span.comment { color: #800000; } #content .doxygen span.preprocessor { color: #806020; } #content .doxygen span.stringliteral { color: #002080; } #content .doxygen span.charliteral { color: #008080; } #content .doxygen span.vhdldigit { color: #ff00ff; } #content .doxygen span.vhdlchar { color: #000000; } #content .doxygen span.vhdlkeyword { color: #700070; } #content .doxygen span.vhdllogic { color: #ff0000; } #content .doxygen blockquote { background-color: #F7F8FB; border-left: 2px solid #9CAFD4; margin: 0 24px 0 4px; padding: 0 12px 0 16px; } #content .doxygen td.tiny { font-size: 75%; } #content .doxygen .dirtab { padding: 4px; border-collapse: collapse; border: 1px solid #A3B4D7; } #content .doxygen th.dirtab { background: #EBEFF6; font-weight: bold; } #content .doxygen hr { height: 0px; border: none; border-top: 1px solid #4A6AAA; } #content .doxygen hr.footer { height: 1px; } #content .doxygen table.memberdecls { border-spacing: 0px; padding: 0px; } #content .doxygen .memberdecls td { -webkit-transition-property: background-color, box-shadow; -webkit-transition-duration: 0.5s; -moz-transition-property: background-color, box-shadow; -moz-transition-duration: 0.5s; -ms-transition-property: background-color, box-shadow; -ms-transition-duration: 0.5s; -o-transition-property: background-color, box-shadow; -o-transition-duration: 0.5s; transition-property: background-color, box-shadow; transition-duration: 0.5s; } #content .doxygen .memberdecls td.glow { background-color: cyan; box-shadow: 0 0 15px cyan; } #content .doxygen .mdescLeft, #content .doxygen .mdescRight, #content .doxygen .memItemLeft, #content .doxygen .memItemRight, #content .doxygen .memTemplItemLeft, #content .doxygen .memTemplItemRight, #content .doxygen .memTemplParams { background-color: #F9FAFC; border: none; margin: 4px; padding: 1px 0 0 8px; } #content .doxygen .mdescLeft, #content .doxygen .mdescRight { padding: 0px 8px 4px 8px; color: #555; } #content .doxygen .memItemLeft, #content .doxygen .memItemRight, #content .doxygen .memTemplParams { border-top: 1px solid #C4CFE5; } #content .doxygen .memItemLeft, #content .doxygen .memTemplItemLeft { white-space: nowrap; } #content .doxygen .memItemRight { width: 100%; } #content .doxygen .memTemplParams { color: #4665A2; white-space: nowrap; } #content .doxygen .memtemplate { font-size: 80%; color: #4665A2; font-weight: normal; margin-left: 9px; } #content .doxygen .memnav { background-color: #EBEFF6; border: 1px solid #A3B4D7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } #content .doxygen .mempage { width: 100%; } #content .doxygen .memitem { padding: 0; margin-bottom: 10px; margin-right: 5px; -webkit-transition: box-shadow 0.5s linear; -moz-transition: box-shadow 0.5s linear; -ms-transition: box-shadow 0.5s linear; -o-transition: box-shadow 0.5s linear; transition: box-shadow 0.5s linear; display: table !important; width: 100%; } #content .doxygen .memitem.glow { box-shadow: 0 0 15px cyan; } #content .doxygen .memname { font-weight: bold; margin-left: 6px; } #content .doxygen .memname td { vertical-align: bottom; } #content .doxygen .memproto, #content .doxygen dl.reflist dt { border-top: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; border-right: 1px solid #A8B8D9; padding: 6px 0px 6px 0px; color: #253555; font-weight: bold; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); background-image: url('nav_f.png'); background-repeat: repeat-x; background-color: #E2E8F2; /* opera specific markup */ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); border-top-right-radius: 4px; border-top-left-radius: 4px; /* firefox specific markup */ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; -moz-border-radius-topright: 4px; -moz-border-radius-topleft: 4px; /* webkit specific markup */ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -webkit-border-top-right-radius: 4px; -webkit-border-top-left-radius: 4px; } #content .doxygen .memdoc, #content .doxygen dl.reflist dd { border-bottom: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; border-right: 1px solid #A8B8D9; padding: 6px 10px 2px 10px; background-color: #FBFCFD; border-top-width: 0; background-image: url('nav_g.png'); background-repeat: repeat-x; background-color: #FFFFFF; /* opera specific markup */ border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); /* firefox specific markup */ -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; /* webkit specific markup */ -webkit-border-bottom-left-radius: 4px; -webkit-border-bottom-right-radius: 4px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); } #content .doxygen dl.reflist dt { padding: 5px; } #content .doxygen dl.reflist dd { margin: 0px 0px 10px 0px; padding: 5px; } #content .doxygen .paramkey { text-align: right; } #content .doxygen .paramtype { white-space: nowrap; } #content .doxygen .paramname { color: #602020; white-space: nowrap; } #content .doxygen .paramname em { font-style: normal; } #content .doxygen .paramname code { line-height: 14px; } #content .doxygen .params, #content .doxygen .retval, #content .doxygen .exception, #content .doxygen .tparams { margin-left: 0px; padding-left: 0px; } #content .doxygen .params .paramname, #content .doxygen .retval .paramname { font-weight: bold; vertical-align: top; } #content .doxygen .params .paramtype { font-style: italic; vertical-align: top; } #content .doxygen .params .paramdir { font-family: "courier new", courier, monospace; vertical-align: top; } #content .doxygen table.mlabels { border-spacing: 0px; } #content .doxygen td.mlabels-left { width: 100%; padding: 0px; } #content .doxygen td.mlabels-right { vertical-align: bottom; padding: 0px; white-space: nowrap; } #content .doxygen span.mlabels { margin-left: 8px; } #content .doxygen span.mlabel { background-color: #728DC1; border-top: 1px solid #5373B4; border-left: 1px solid #5373B4; border-right: 1px solid #C4CFE5; border-bottom: 1px solid #C4CFE5; text-shadow: none; color: white; margin-right: 4px; padding: 2px 3px; border-radius: 3px; font-size: 7pt; white-space: nowrap; } #content .doxygen div.directory { margin: 10px 0px; border-top: 1px solid #A8B8D9; border-bottom: 1px solid #A8B8D9; width: 100%; } #content .doxygen .directory table { border-collapse: collapse; } #content .doxygen .directory td { margin: 0px; padding: 0px; vertical-align: top; } #content .doxygen .directory td.entry { white-space: nowrap; padding-right: 6px; } #content .doxygen .directory td.entry a { outline: none; } #content .doxygen .directory td.entry a img { border: none; } #content .doxygen .directory td.desc { width: 100%; padding-left: 6px; padding-right: 6px; border-left: 1px solid rgba(0, 0, 0, 0.05); } #content .doxygen .directory tr.even { padding-left: 6px; background-color: #F7F8FB; } #content .doxygen .directory img { vertical-align: -30%; } #content .doxygen .directory .levels { white-space: nowrap; width: 100%; text-align: right; font-size: 9pt; } #content .doxygen .directory .levels span { cursor: pointer; padding-left: 2px; padding-right: 2px; color: #3D578C; } #content .doxygen div.dynheader { margin-top: 8px; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } #content .doxygen address { font-style: normal; color: #2A3D61; } #content .doxygen table.doxtable { border-collapse: collapse; margin-top: 4px; margin-bottom: 4px; } #content .doxygen table.doxtable td, #content .doxygen table.doxtable th { border: 1px solid #2D4068; padding: 3px 7px 2px; } #content .doxygen table.doxtable th { background-color: #374F7F; color: #FFFFFF; font-size: 110%; padding-bottom: 4px; padding-top: 5px; } #content .doxygen table.fieldtable { width: 100%; margin-bottom: 10px; border: 1px solid #A8B8D9; border-spacing: 0px; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); } #content .doxygen .fieldtable td, #content .doxygen .fieldtable th { padding: 3px 7px 2px; } #content .doxygen .fieldtable td.fieldtype, #content .doxygen .fieldtable td.fieldname { white-space: nowrap; border-right: 1px solid #A8B8D9; border-bottom: 1px solid #A8B8D9; vertical-align: top; } #content .doxygen .fieldtable td.fielddoc { border-bottom: 1px solid #A8B8D9; width: 100%; } #content .doxygen .fieldtable tr:last-child td { border-bottom: none; } #content .doxygen .fieldtable th { background-image: url('nav_f.png'); background-repeat: repeat-x; background-color: #E2E8F2; font-size: 90%; color: #253555; padding-bottom: 4px; padding-top: 5px; text-align: left; -moz-border-radius-topleft: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-left-radius: 4px; -webkit-border-top-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom: 1px solid #A8B8D9; } #content .doxygen .tabsearch { top: 0px; left: 10px; height: 36px; background-image: url('tab_b.png'); z-index: 101; overflow: hidden; font-size: 13px; } #content .doxygen .navpath ul { font-size: 11px; background-image: url('tab_b.png'); background-repeat: repeat-x; height: 30px; line-height: 30px; color: #8AA0CC; border: solid 1px #C2CDE4; overflow: hidden; margin: 0px; padding: 0px; } #content .doxygen .navpath li { list-style-type: none; float: left; padding-left: 10px; padding-right: 15px; background-image: url('bc_s.png'); background-repeat: no-repeat; background-position: right; color: #364D7C; } #content .doxygen .navpath li.navelem a { height: 32px; display: block; text-decoration: none; outline: none; } #content .doxygen .navpath li.navelem a:hover { color: #6884BD; } #content .doxygen .navpath li.footer { list-style-type: none; float: right; padding-left: 10px; padding-right: 15px; background-image: none; background-repeat: no-repeat; background-position: right; color: #364D7C; font-size: 8pt; } #content .doxygen div.summary { float: right; font-size: 8pt; padding-right: 5px; width: 50%; text-align: right; } #content .doxygen div.summary a { white-space: nowrap; } #content .doxygen div.ingroups { font-size: 8pt; width: 50%; text-align: left; } #content .doxygen div.ingroups a { white-space: nowrap; } #content .doxygen div.header { background-image: url('nav_h.png'); background-repeat: repeat-x; background-color: #F9FAFC; margin: 0px; border-bottom: 1px solid #C4CFE5; } #content .doxygen div.headertitle { padding: 5px 5px 5px 7px; } #content .doxygen dl { padding: 0 0 0 10px; } #content .doxygen dl.section { margin-left: 0px; padding-left: 0px; } #content .doxygen dl.note { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #D0C000; } #content .doxygen dl.warning, #content .doxygen dl.attention { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #FF0000; } #content .doxygen dl.pre, #content .doxygen dl.post, #content .doxygen dl.invariant { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #00D000; } #content .doxygen dl.deprecated { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #505050; } #content .doxygen dl.todo { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #00C0E0; } #content .doxygen dl.test { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #3030E0; } #content .doxygen dl.bug { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #C08050; } #content .doxygen dl.section dd { margin-bottom: 6px; } #content .doxygen #projectlogo { text-align: center; vertical-align: bottom; border-collapse: separate; } #content .doxygen #projectlogo img { border: 0px none; } #content .doxygen #projectname { font: 300% Tahoma, Arial, sans-serif; margin: 0px; padding: 2px 0px; } #content .doxygen #projectbrief { font: 120% Tahoma, Arial, sans-serif; margin: 0px; padding: 0px; } #content .doxygen #projectnumber { font: 50% Tahoma, Arial, sans-serif; margin: 0px; padding: 0px; } #content .doxygen #titlearea { padding: 0px; margin: 0px; width: 100%; border-bottom: 1px solid #5373B4; } #content .doxygen .image { text-align: center; } #content .doxygen .dotgraph { text-align: center; } #content .doxygen .mscgraph { text-align: center; } #content .doxygen .caption { font-weight: bold; } #content .doxygen div.zoom { border: 1px solid #90A5CE; } #content .doxygen dl.citelist { margin-bottom: 50px; } #content .doxygen dl.citelist dt { color: #334975; float: left; font-weight: bold; margin-right: 10px; padding: 5px; } #content .doxygen dl.citelist dd { margin: 2px 0; padding: 5px 0; } #content .doxygen div.toc { padding: 14px 25px; background-color: #F4F6FA; border: 1px solid #D8DFEE; border-radius: 3px 3px 3px 3px; float: right; height: auto; margin: 0px 0px 10px 10px; width: 200px; } #content .doxygen div.toc li { background: url("bdwn.png") no-repeat scroll 0 5px transparent; font: 10px/1.2 Verdana, DejaVu Sans, Geneva, sans-serif; margin-top: 5px; padding-left: 10px; padding-top: 2px; } #content .doxygen div.toc h3 { font: bold 12px/1.2 Arial, FreeSans, sans-serif; color: #4665A2; border-bottom: 0 none; margin: 0; } #content .doxygen div.toc ul { list-style: none outside none; border: medium none; padding: 0px; } #content .doxygen div.toc li.level1 { margin-left: 0px; } #content .doxygen div.toc li.level2 { margin-left: 15px; } #content .doxygen div.toc li.level3 { margin-left: 30px; } #content .doxygen div.toc li.level4 { margin-left: 45px; } #content .doxygen .inherit_header { font-weight: bold; color: gray; cursor: pointer; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } #content .doxygen .inherit_header td { padding: 6px 0px 2px 5px; } #content .doxygen .inherit { display: none; } #content .doxygen tr.heading h2 { margin-top: 12px; margin-bottom: 4px; } @media print { #content .doxygen #top { display: none; } #content .doxygen #side-nav { display: none; } #content .doxygen #nav-path { display: none; } #content .doxygen body { overflow: visible; } #content .doxygen h1, #content .doxygen h2, #content .doxygen h3, #content .doxygen h4, #content .doxygen h5, #content .doxygen h6 { page-break-after: avoid; } #content .doxygen .summary { display: none; } #content .doxygen .memitem { page-break-inside: avoid; } #content .doxygen #doc-content { margin-left: 0 !important; height: auto !important; width: auto !important; overflow: inherit; display: inline; } } /* missing in original doxygen.css ? */ #content .doxygen div.tabs, #content .doxygen div.tabs2, #content .doxygen div.tabs3, #content .doxygen div.tabs4 { padding: 0 ; margin: 0 ; border: 1px solid white ; font-size: .9em ; } #content .doxygen ul.tablist { display: block ; width: 100% ; margin: 5px 0 ; padding: 0 ; border-bottom: 2px solid #aaa ; } #content .doxygen ul.tablist li { display: inline-block ; margin: 0px 4px ; padding: 5px ; border: 1px solid #aaa ; border-bottom: none ; background-color: #f6f6f6 ; } #content .doxygen ul.tablist li.current { background-color: inherit ; } #content .doxygen ul.tablist li a { text-decoration : none ; color: black ; } #content .doxygen ul.tablist li.current a { font-weight: bold ; } vlfeat/docsrc/dtd/0000755000175000017500000000000012236612215012775 5ustar dimadimavlfeat/docsrc/dtd/xhtml1/0000755000175000017500000000000012237004736014216 5ustar dimadimavlfeat/docsrc/dtd/xhtml1/xhtml1-frameset.dtd0000644000175000017500000010026612237004736017741 0ustar dimadima %HTMLlat1; %HTMLsymbol; %HTMLspecial; vlfeat/docsrc/dtd/xhtml1/xhtml-lat1.ent0000644000175000017500000002677712237004736016744 0ustar dimadima vlfeat/docsrc/dtd/xhtml1/xhtml-symbol.ent0000644000175000017500000003303012237004736017364 0ustar dimadima vlfeat/docsrc/dtd/xhtml1/xhtml.soc0000644000175000017500000000111712237004736016060 0ustar dimadimaOVERRIDE YES -- Oasis entity catalog for Extensible HTML 1.0 -- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "xhtml1-strict.dtd" PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd" PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "xhtml1-frameset.dtd" -- ISO latin 1 entity set for Extensible HTML (XML 1.0 format) -- PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN" "xhtml-lat1.ent" PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN" "xhtml-symbol.ent" PUBLIC "-//W3C//ENTITIES Special for XHTML//EN" "xhtml-special.ent" SGMLDECL "xhtml1.dcl" vlfeat/docsrc/dtd/xhtml1/xhtml1.dcl0000644000175000017500000001631412237004736016124 0ustar dimadima" PIC "?>" SHORTREF NONE NAMES SGMLREF QUANTITY NONE -- Quantities are not restricted in XML -- ENTITIES "amp" 38 "lt" 60 "gt" 62 "quot" 34 "apos" 39 FEATURES MINIMIZE DATATAG NO OMITTAG NO RANK NO SHORTTAG STARTTAG EMPTY NO UNCLOSED NO NETENABL IMMEDNET ENDTAG EMPTY NO UNCLOSED NO ATTRIB DEFAULT YES OMITNAME NO VALUE NO EMPTYNRM YES IMPLYDEF ATTLIST NO -- VALID: was YES -- DOCTYPE NO ELEMENT NO -- VALID: was YES -- ENTITY NO NOTATION NO -- VALID: was YES -- LINK SIMPLE NO IMPLICIT NO EXPLICIT NO OTHER CONCUR NO SUBDOC NO FORMAL NO URN NO KEEPRSRE YES VALIDITY TYPE -- VALID: was NOASSERT -- ENTITIES REF ANY INTEGRAL YES APPINFO NONE SEEALSO "ISO 8879//NOTATION Extensible Markup Language (XML) 1.0//EN" > vlfeat/docsrc/dtd/xhtml1/xhtml1-transitional.dtd0000644000175000017500000007656012237004736020653 0ustar dimadima %HTMLlat1; %HTMLsymbol; %HTMLspecial; vlfeat/docsrc/dtd/xhtml1/xhtml1-strict.dtd0000644000175000017500000006160112237004736017442 0ustar dimadima %HTMLlat1; %HTMLsymbol; %HTMLspecial; vlfeat/docsrc/dtd/xhtml1/xhtml-special.ent0000644000175000017500000001004312237004736017476 0ustar dimadima vlfeat/docsrc/liop.html0000644000175000017500000000336112237004745014062 0ustar dimadima %tableofcontents;

    This tutorial shows how to extract Local Intensity Order Pattern (LIOP) deascriptors using VLFeat. LIOP is implemented in the vl_liop as well as in vl_covdet.

    LIOP descriptor computation

    A LIOP descriptor can be computed from a square, gray scale image with and odd side length patch. This is usually not a restriction since local patches are obtained by cropping and warpinig an input image. The descriptor is computed using the vl_liop function:

    descr = vl_covdet(patch) ;

    You can use the verbose option verbose if you wish to see the parametr and descriptor details.

    descr = vl_covdet(patch,'Verbose') ;

    patch can be a 3D array, with one image per 2D layer. In this case, descr is a matrix with as many columns as images. LIOP is also integrated into vl_covdet.

    vl_liop allows full customization of the LIOP descriptor parameters. These are discussed here. A parameter that is commonly tweaked is the intensity threshold to downweight unstalbe intensity order patterns in the descriptor computation. For example

    descr = vl_covdet(patch,'IntensityThreshold', 0.1) ;

    set this threshold to 0.1.

    vlfeat/docsrc/mdoc.py0000644000175000017500000003750312237004745013532 0ustar dimadima#!/usr/bin/python # file: mdoc.py # author: Brian Fulkerson and Andrea Vedaldi # description: MDoc main # Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. # All rights reserved. # # This file is part of the VLFeat library and is made available under # the terms of the BSD license (see the COPYING file). import sys, os, re, shutil import subprocess, signal from wikidoc import wikidoc from formatter import Formatter from optparse import OptionParser excludeRegexList = [] format = 'html' verb = 0 sitexml = "" usage = """usage: %prog [options] Takes all .m files in basedir and its subdirectories and converts them to html documentation, placing the results in docdir.""" parser = OptionParser(usage=usage) parser.add_option( "-f", "--format", dest = "format", default = "html", action = "store", help = "specify the output format (html, wiki, web)", metavar = "STRING") parser.add_option( "-x", "--exclude", dest = "excludeList", action = "append", type = "string", help = "exclude files matching the specified regexp") parser.add_option( "-v", "--verbose", dest = "verb", default = False, action = "store_true", help = "print debug information") parser.add_option( "-t", "--helptoc", dest = "helptoc", default = False, action = "store_true", help = "create helptoc.xml") parser.add_option( "", "--helptoc-toolbox-name", dest = "helptoc_toolbox_name", default = "Example", action = "store", type = "string", help = "helptoc.xml: Toolbox Name") # -------------------------------------------------------------------- def runcmd(cmd): # -------------------------------------------------------------------- """ runcmd(CMD) runs the command CMD. The function waits for the command to complete and correctly react to Ctrl-C by stopping the process and raising an exception. """ try: p = subprocess.Popen(cmd, shell=True) sts = os.waitpid(p.pid, 0) except (KeyboardInterrupt, SystemExit): os.kill(p.pid, signal.SIGKILL) raise # -------------------------------------------------------------------- class MFile: # -------------------------------------------------------------------- """ MFile('sub/file.m') represents a MATLAB M-File. """ def __init__(self, basedir, dirname, name): funcname = os.path.splitext(name)[0] self.funcname = funcname #.upper() self.path = os.path.join(basedir, dirname, name) self.mdocname = funcname.replace(os.path.sep, '_') self.webname = funcname.replace(os.path.sep, '.') self.htmlname = self.mdocname + '.html' self.wikiname = 'MDoc_' + (os.path.join(dirname, funcname) .upper().replace(os.path.sep, '_')) self.prev = None self.next = None self.node = None def getId (self, format='html'): if format == 'html': return self.htmlname elif format == 'web': return self.webname elif format == 'wiki': return self.wikiname def getRef (self, format='html'): if format == 'html': return self.htmlname elif format == 'web': return '%pathto:' + self.webname + ';' elif format == 'wiki': return self.wikiname def __cmp__(self, other): return cmp(self.webname, other.webname) def __str__(self): str = "MFile: %s\n" % (self.funcname) str += " path : %s\n" % (self.path) str += " mdocname: %s\n" % (self.mdocname) str += " htmlname: %s\n" % (self.htmlname) str += " wikiname: %s\n" % (self.wikiname) return str # -------------------------------------------------------------------- class Node: # -------------------------------------------------------------------- """ A Node N represents a node in the toolbox hierechy. A node is a directory in the toolbox hierarchy and contains both M-files and other sub-directories. """ def __init__(self, dirname): self.dirname = dirname self.children = [] self.mfiles = [] def addChildNode(self, node): "Add a child node (toolbox subdirectory) to this node" self.children.append(node) def addMFile(self, mfile): "Add a MATLAB M-File to this node" self.mfiles.append(mfile) mfile.node = self def toIndexPage(self, format='html', depth=1): "Converts the node hierarchy rooted here into an index." page = "" if format == 'html' or format == 'web': if len(self.mfiles) > 0: page += "%s" % (self.dirname.upper()) page += "
      \n" for m in self.mfiles: page += "
    • " page += "%s" % (m.getRef(format), m.funcname) page += " %s" % (m.brief) page += "
    • " page += "
    \n" elif format == 'wiki': if len(self.mfiles) > 0: if depth > 1: page += "=== %s ===\n" % (self.dirname.upper()) for m in self.mfiles: page += "* [[%s|%s]]" % (m.getRef(format), m.funcname) page += " %s\n" % (m.brief) elif format == 'helptoc': for m in self.mfiles: page += "%s\n" % (m.getRef('html'), m.funcname) else: assert False for n in self.children: page += n.toIndexPage(format, depth+1) return page def toIndexXML(self): xml = "" for m in self.mfiles: dirname = m.node.dirname.upper() if len(dirname) > 0: xml += \ "" \ "
    " \ "
    \n" % (m.getId('web'), m.funcname, dirname, m.funcname, m.htmlname) else: xml += \ "" \ "
    " \ "
    \n" % (m.getId('web'), m.funcname, m.funcname, m.htmlname) for n in self.children: xml += n.toIndexXML() ; return xml def __str__(self): s = "Node: %s\n" % self.dirname for m in self.mfiles: s += m.__str__() for n in self.children: s += n.__str__() return s # -------------------------------------------------------------------- def depth_first(node): # -------------------------------------------------------------------- """ depth_first(NODE) is a generator that implements a depth first visit of the node hierarchy rooted at NODE. """ yield node for n in node.children: for m in depth_first(n): yield m return # -------------------------------------------------------------------- def extract(path): # -------------------------------------------------------------------- """ (BODY, FUNC, BRIEF) = extract(PATH) extracts the comment BODY, the function name FUNC and the brief description BRIEF from the MATLAB M-file located at PATH. """ body = [] func = "" brief = "" seenfunction = False seenpercent = False for l in open(path): # Remove whitespace and newline line = l.strip().lstrip() if line.startswith('%'): seenpercent = True if line.startswith('function'): seenfunction = True continue if not line.startswith('%'): if (seenfunction and seenpercent) or not seenfunction: break else: continue # remove leading `%' character line = line[1:] # body.append('%s\n' % line) # Extract header from body if len(body) > 0: head = body[0] body = body[1:] match = re.match(r"^\s*(\w+)\s*(\S.*)\n$", head) func = match.group(1) brief = match.group(2) return (body, func, brief) # -------------------------------------------------------------------- def xscan(baseDir, subDir=''): # -------------------------------------------------------------------- """ NODE = xscan(BASEDIR) recusrively scans the directory BASEDIR and construct the toolbox hierarchy rooted at NODE. """ node = Node(subDir) dir = os.listdir(os.path.join(baseDir, subDir)) fileNames = [f for f in dir if os.path.isfile( os.path.join(baseDir, subDir, f))] subSubDirs = [s for s in dir if os.path.isdir ( os.path.join(baseDir, subDir, s))] fileNames.sort() # Scan M-FileNames for fileName in fileNames: # only m-files if not os.path.splitext(fileName)[1] == '.m': continue # skip if in the exclude list exclude = False for rx in excludeRegexList: fileRelPath = os.path.join(subDir, fileName) mo = rx.match(fileRelPath) if mo and (mo.end() - mo.start() == len(fileRelPath)): if verb: print "mdoc: excluding ''%s''." % fileRelPath exclude = True if exclude: continue node.addMFile(MFile(baseDir, subDir, fileName)) # Scan sub-directories for s in subSubDirs: node.addChildNode(xscan(basedir, os.path.join(subDir, s))) return node # -------------------------------------------------------------------- def breadCrumb(m): # -------------------------------------------------------------------- breadcrumb = "" #breadcrumb += "%s" % m.node.dirname.upper() return breadcrumb # -------------------------------------------------------------------- if __name__ == '__main__': # -------------------------------------------------------------------- # # Parse comand line options # (options, args) = parser.parse_args() if options.verb: verb = 1 format = options.format helptoc = options.helptoc print options.excludeList for ex in options.excludeList: rx = re.compile(ex) excludeRegexList.append(rx) if len(args) != 2: parser.print_help() sys.exit(2) basedir = args[0] docdir = args[1] if not basedir.endswith('/'): basedir = basedir + "/" if not basedir.endswith('/'): docdir = docdir + "/" if verb: print "mdoc: search path: %s" % basedir print "mdoc: output path: %s" % docdir print "mdoc: output format: %s" % format # # Search for mfiles # toolbox = xscan(basedir) # # Extract dictionaries of links and M-Files # linkdict = {} mfiles = {} prev = None next = None for n in depth_first(toolbox): for m in n.mfiles: if prev: prev.next = m m.prev = prev prev = m func = m.funcname.upper() mfiles[func] = m linkdict[func] = m.getRef(format) if verb: print "mdoc: num mfiles: %d" % (len(mfiles)) # Create output directory if not os.access(docdir, os.F_OK): os.makedirs(docdir) # ---------------------------------------------------------------- # Extract comment block and run formatter # ---------------------------------------------------------------- for (func, m) in mfiles.items(): if format == 'wiki': outname = m.wikiname elif format == 'html': outname = m.htmlname elif format == 'web': outname = m.htmlname if verb: print "mdoc: generating %s from %s" % (outname, m.path) # extract comment block from file (lines, func, brief) = extract(m.path) m.brief = brief # Run formatter content = "" if len(lines) > 0: if format == 'wiki' : formatter = Formatter(lines, linkdict, 'wiki') else: formatter = Formatter(lines, linkdict, 'a') content = formatter.toDOM().toxml("UTF-8") content = content[content.find('?>')+2:] # add decorations if not format == 'wiki': content = breadCrumb(m) + content if format == 'web': content = "\n" + content + "\n" # save the result to an html file if format == 'wiki': f = open(os.path.join(docdir, m.wikiname), 'w') else: f = open(os.path.join(docdir, m.htmlname), 'w') f.write(content) f.close() # ---------------------------------------------------------------- # Make index page # ---------------------------------------------------------------- page = "" if format == 'html': pagename = 'index.html' page += toolbox.toIndexPage('html') elif format == 'web': pagename = 'mdoc.html' page += '\n' + toolbox.toIndexPage('web') + '\n' elif format =='wiki' : pagename = 'MDoc' page = "== Documentation ==\n" page += toolbox.toIndexPage('wiki') f = open(os.path.join(docdir, pagename), 'w') f.write(page) f.close() if format == 'web': f = open(os.path.join(docdir, "mdoc.xml"), 'w') f.write(""+toolbox.toIndexXML()+"\n") f.close() # ---------------------------------------------------------------- # Make helptoc.xml # ---------------------------------------------------------------- if helptoc: page = """ %s Functions """ % (options.helptoc_toolbox_name, pagename) page += toolbox.toIndexPage('helptoc') page += """ """ f = open(os.path.join(docdir, "helptoc.xml"), 'w') f.write(page) f.close() # ---------------------------------------------------------------- # Checkin files to wiki # ---------------------------------------------------------------- def towiki(docdir, pagename): pagenamewiki = pagename + '.wiki' runcmd("cd %s ; mvs update %s" % (docdir, pagenamewiki)) if verb: print "mdoc: converting", pagename, "to", pagenamewiki wikidoc(os.path.join(docdir, pagenamewiki), os.path.join(docdir, pagename)) runcmd("cd %s ; mvs commit -M -m 'Documentation update' %s" % (docdir, pagenamewiki)) if format == 'wiki' : try: towiki(docdir, pagename) except (KeyboardInterrupt, SystemExit): sys.exit(1) for (func, m) in mfiles.items(): try: towiki(docdir, m.wikiname) except (KeyboardInterrupt, SystemExit): sys.exit(1) vlfeat/docsrc/install-shell.html0000644000175000017500000000523112237004745015670 0ustar dimadima #content table.checker { border-collapse: collapse ; margin-left: auto ; margin-right: auto ; } #content table.checker td { background-color: #f6f6f6 ; border: none ; border-top: 1px solid #DDD ; border-bottom: 1px solid #DDD ; padding: 0.5em ; }

    These instructions explain how to use VLFeat from the command line (shell).

    Download and unpack the latest VLFeat binary distribution in a directory of your choice (e.g. ~/src/vlfeat). Let VLFEATROOT denote this directory.

    The command line tools are located in VLFEATROOT/bin/ARCH. Here ARCH denotes the subdirectory relative to your architecture (e.g. mac for Mac OS X PPC, maci for Mac OS X Intel, glnx86 for Linux, and so on). For the sake of illustration, the following table gives the path to the SIFT feature extraction program for the varius architectures:

    Platform ARCH Path to command
    Windows 32 win32 VLFEATROOT\bin\w32\sift.exe
    Windows 64 win64 VLFEATROOT\bin\w64\sift.exe
    Mac Intel 32 maci VLFEATROOT/bin/maci/sift
    Mac Intel 64 maci64 VLFEATROOT/bin/maci64/sift
    Linux 32 glnx86 VLFEATROOT/bin/glnx86/sift
    Linux 64 glnxa64 VLFEATROOT/bin/glnxa64/sift

    All commands have a corresponding man page found in VLFEATROOT/src. For UNIX based systems, the man pages can be viewed with the man utility. For instance

    > man VLFEATROOT/src/sift.1

    It might be convenient to add VLFeat to the system search paths. In Linux and Mac OS X this involves modifying the PATH and MANPATH environment variables. The exact details may vary, but it should be enough to add the following to your ~/.bash_profile:

    export PATH=VLFEATROOT/bin/ARCH:$PATH export MANPATH=VLFEATROOT/src:$MANPATH

    Alternatively, you can copy the executables and man pages to appropriate system-wide directories.

    vlfeat/docsrc/formatter.py0000644000175000017500000004503212237004745014607 0ustar dimadima#!/usr/bin/python # file: formatter.py # author: Andrea Vedaldi # description: Utility to format MATLAB comments. # Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. # All rights reserved. # # This file is part of the VLFeat library and is made available under # the terms of the BSD license (see the COPYING file). """ MDOC fromats the help block of a MATLAB M-file based on a simple set of rules. Pharagraphs, verbatim sections, lists and other structures are automatically instantiated by looking at blank lines, indentation and a few decoration symbols. The documentation starts at a conventional indentation level N (by default 2). A block of non-epmty lines prefixed by N characters is considered a paragraph. For instance | Bla bla bla | bla bla bla. | | Bla bla. generates two pharagraps. If there are more than N white spaces, then the block is taken verbatim instead (and rendered in
     HTML
    tags). For instance
    
     |  Bla bla bla
     |   Code Code Code
     |
     |   Code Code Code
    
    generates one paragraph followed by one verbatim section.
    """
    
    import xml.dom.minidom
    import sys
    import os
    import re
    
    __mpname__           = 'MDocFormatter'
    __version__          = '0.1'
    __date__             = '2008-01-01'
    __description__      = 'MDoc formatting module'
    __long_description__ = __doc__
    __license__          = 'BSD'
    __author__           = 'Andrea Vedaldi'
    
    # terminal
    class Terminal:
        def isa(self, classinfo):
            return isinstance(self, classinfo)
    
    # empty terminal
    class E (Terminal):
        pass
    
    # blank line
    class B (Terminal):
        content = ""
    
    # non-blank line
    class L (Terminal):
        indent  = 0
    
    # regular line
    class PL (L):
        pass
    
    # line with bullet
    class BL (L):
        bullet = None
        inner_indent = 0
    
    # line with description
    class DL (L):
        pass
    
    # --------------------------------------------------------------------
    def lex(line):
    # --------------------------------------------------------------------
        """
        Parse the string LINE to a terminal symbol. Each line corresponds
        to exactly one terminal type. Terminal types are the leaf of a
        hierarchy of types.
        """
    
        # a blank line
        match = re.match(r"\s*\n?$", line) ;
        if match: return B()
    
        # a line of the type '  content::inner_content'
        match = re.match(r"(\s*)(.*)::(.*)\n?$", line)
        if match:
            x = DL()
            x.indent        = len(match.group(1))
            x.content       = match.group(2)
            x.inner_content = match.group(3)
            return x
    
        # a line of the type '  - inner_contet'
        match = re.match(r"(\s*)([-\*#]\s*)(\S.*)\n?$", line)
        if match:
            x = BL()
            x.indent        = len(match.group(1))
            x.inner_content = match.group(3)
            x.bullet        = match.group(2)
            x.inner_indent  = x.indent + len(x.bullet)
            x.content       = x.bullet + x.inner_content
            return x
    
        # a line of the type  '   content'
        match = re.match(r"(\s*)(\S.*)\n?$", line)
        if match:
            x = PL()
            x.indent  = len(match.group(1))
            x.content = match.group(2)
            return x
    
    # --------------------------------------------------------------------
    class Lexer(object):
    # --------------------------------------------------------------------
        """
        l = Lexer(LINES) parses the array of strings LINES. Lexer has a
        head pointing to the current line. The head can be controlled by
        the following methods:
    
        l.next() advances the head and fetches the next terminal.
        l.back() moves back the head.
        l.getpos() returns the head position.
        l.seek(POS) sets the head position to POS.
        """
        def __init__(self, lines):
            self.tokens = []
            self.pos    = -1
            for line in lines:
                self.tokens.append(lex(line))
    
        def next(self):
            self.pos = self.pos + 1
            if self.pos >= len(self.tokens):
                return E()
            else:
                return self.tokens [self.pos]
    
        def seek(self, pos):
            self.pos = pos
    
        def back(self):
            if self.pos >=0: self.pos -= 1
    
        def rewrite(self, str):
            self.tokens [self.pos] = str ;
    
        def getpos(self):
            return self.pos
    
        def __str__(self):
            str = ""
            for i,t in enumerate(self.tokens):
                 str += "%5d) %s %s\n" % (i, t.__class__.__name__,t.content)
            return str
    
    # --------------------------------------------------------------------
    class Formatter:
    # --------------------------------------------------------------------
        """
        f = Formatter(LINES) parses the array of strings LINES.
    
        f = Formatter(LINES, FUNCS) takes the dictionary of functions
        FUNCS. Function names must be uppercase. The dictionary entries
        are used to cross link functions in the generated documentation.
    
        Formatter(LINES, FUNCS, LINKTYPE) produces links of the specified
        type.  Use 'a' for HTML anchors and 'wiki' for MediaWiki style
        links.
    
        f.toDOM() process the data to construct an XML (HTML) representation
        of them.
        """
        def __init__ (self, lines, funcs={}, linktype='a'):
            self.indentinit = 0
            lineone = lines[0]
            while lineone.startswith(' '):
                lineone = lineone[1:]
                self.indentinit += 1
    
            self.tokens = Lexer(lines)
            self.xmldoc = xml.dom.minidom.Document()
            self.funcs = funcs
            self.linktype = linktype
            #print self.tokens
    
        def toTextNode(self,s):
            return self.xmldoc.createTextNode(unicode(s, 'iso-8859-1'))
    
        def addAttr(self, tag, attr, val):
            x = self.xmldoc.createAttribute(attr)
            x.nodeValue = val
            tag.setAttributeNode(x)
    
        def addText(self, tag, s):
            txt = self.toTextNode(s)
            tag.appendChild(txt)
    
        def addFancyText(self, tag, s):
            "Adds text while transforming function references to links."
            xs = []
            last = -1
            iter = re.finditer(r'(?:'
                               r'(?P[A-Z][A-Z0-9_]*)'
                               r'\([^\)]*\)'
                               r')|(?:'
                               r''
                               r'(?P[^<]*)'
                               r''
                               r')',s)
    
                               # r'(?P[a-zA-Z0-9_]*)'
                               # r')', s)
    
    
    
                               # r')', s)
    
            for i in iter:
                func_name = i.group("function")
                page_name = i.group("page")
    
                if func_name and self.funcs.has_key(func_name.upper()):
                    # retrieve function HTML location
                    func_href = self.funcs[func_name.upper()]
    
                    # add text so far
                    xs.append(self.toTextNode(s[last+1:i.start()]))
    
                    if self.linktype == 'a':
                        # add link to function
                        atag = self.xmldoc.createElement(u"a")
                        self.addText(atag, i.group('function'))
                        atag.setAttribute(u"href", u"%s" % (func_href))
                        xs.append(atag)
                    elif self.linktype == 'wiki':
                        linktxt = "[[%s|%s]]" % (func_href, i.group('function'))
                        xs.append(self.toTextNode(linktxt))
    
                    # set head
                    last = i.start()+len(i.group(1))-1
    
                elif page_name:
                    #print "page %s:" % page_name, i.group("text")
                    page_href = "%%dox:%s;" % page_name
    
                    # add text so far
                    xs.append(self.toTextNode(s[last+1:i.start()]))
    
                    if self.linktype == 'a':
                        # add link to function
                        atag = self.xmldoc.createElement(u"a")
                        self.addText(atag, i.group('text'))
                        atag.setAttribute(u"href", u"%s" % (page_href))
                        xs.append(atag)
                    elif self.linktype == 'wiki':
                        linktxt = "[[%s|%s]]" % (func_href, i.group('function'))
                        xs.append(self.toTextNode(linktxt))
    
                    # set head
                    last = i.end()-1
    
            xs.append(self.toTextNode(s[last+1:]))
            for x in xs:
                tag.appendChild(x)
    
        # ................................................................
        # E, B, L, PL, BL, DL, ...
        def parse_Terminal(self, T):
            "If the next terminal on the stream is of type T, the terminal"
            "is extracted and returned. Otherwise the function returns None"
            pos = self.tokens.getpos()
            t = self.tokens.next()
            if t.isa(T):
                return t
            self.tokens.seek(pos)
            return None
    
        # ................................................................
        # DIV(N) -> (B | P(N) | BL(N) | DL(N) | V(N))+
        def parse_DIV(self, indent):
            "Parse a DIV(N) symbol. A DIV(N) a sequence of blank"
            "lines (B or other blocks at indentation level N, such as"
            "pharagraphs P(N), bullet lists BL(N), description lists DN(N)"
            pos = self.tokens.getpos()
            xs = []
            while True:
                x = self.parse_Terminal(B)
                if x: continue
    
                x = self.parse_P(indent)
                if x:
                    xs.append(x)
                    continue
    
                x = self.parse_V(indent)
                if x:
                    xs.append(x)
                    continue
    
                x = self.parse_UL(indent)
                if x:
                    xs.append(x)
                    continue
    
                x = self.parse_DL(indent)
                if x:
                    xs.append(x)
                    continue
    
                break
            if len(xs) == 0: return None
            return xs
    
        # ................................................................
        # P(N) -> PL(N) L(N)*
        def parse_P(self, indent):
            content = "\n"
            good = False
            pos = self.tokens.getpos()
    
            # Introduced by PL
            x = self.parse_Terminal(PL)
            if x:
                if x.indent == indent:
                    content += x.content + "\n"
                    good = True
                else:
                    self.tokens.back()
            if not good:
                return None
    
            # Continued by zero or more L
            while True:
                x = self.parse_Terminal(L)
                if x:
                    if x.indent == indent:
                        content += x.content + "\n"
                        good = True
                        continue
                    else:
                        self.tokens.back()
                break
    
            ptag = self.xmldoc.createElement("p")
            self.addFancyText(ptag, content)
            return ptag
    
        # ................................................................
        # V(N) -> L(M)+, M > N
        def parse_V(self, indent):
            content = "\n"
            good = False
            pos = self.tokens.getpos()
            while True:
                x = self.parse_Terminal(L)
                if x:
                    if x.indent > indent:
                        content += " "*(x.indent - indent) + x.content + "\n"
                        good = True
                        continue
                    else:
                        self.tokens.back()
                x = self.parse_Terminal(B)
                if x:
                    content += "\n"
                    continue
                break
            if good:
                ptag = self.xmldoc.createElement("pre")
                # remove potential blank line at the end
                if content[-2:] == "\n\n":
                    content= content[:-1]
                self.addText(ptag, content)
                return ptag
            self.tokens.seek(pos)
            return None
    
        # ................................................................
        # UL(N) -> ULI(N)+
        def parse_UL(self, indent):
            xs = []
            while True:
                x = self.parse_ULI(indent)
                if x:
                    xs.append(x)
                    continue
                break
            if len(xs) == 0: return None
            ultag = self.xmldoc.createElement("ul")
            for x in xs:
                ultag.appendChild(x)
            return ultag
    
        # ................................................................
        # ULI(N) -> UL(N,M) L(M)* DIV(M), M > N
        def parse_ULI(self, indent):
            content = "\n"
            good = False
            pos = self.tokens.getpos()
    
            # Introduced by UL
            x = self.parse_Terminal(BL)
            if x:
                if x.indent == indent:
                    content += x.inner_content + "\n"
                    indent   = x.inner_indent
                    good = True
                else:
                    self.tokens.back()
            if not good:
                return None
    
            # Continued by zero or more L
            while True:
                x = self.parse_Terminal(L)
                if x:
                    if x.indent == indent:
                        content += x.content + "\n"
                        good = True
                        continue
                    else:
                        self.tokens.back()
                break
            litag = self.xmldoc.createElement(u"li")
            ptag  = self.xmldoc.createElement(u"p")
            self.addFancyText(ptag, content)
            litag.appendChild(ptag)
    
            # Continued by DIV
            xs = self.parse_DIV(indent)
            if xs:
                for x in xs:
                    litag.appendChild(x)
    
            return litag
    
    
        # ................................................................
        # DL(N) -> DI(N)+
        def parse_DL(self, indent):
            xs = []
            while True:
                x = self.parse_DI(indent)
                if x:
                    xs += x
                    continue
                break
            if len(xs) == 0: return None
            dltag = self.xmldoc.createElement(u"dl")
            for x in xs:
                dltag.appendChild(x)
            return dltag
    
        # ................................................................
        # DI(N) -> DL(N) DIV(M)?, M > N
        def parse_DI(self, indent):
            content = "\n"
            good   = False
            pos    = self.tokens.getpos()
            xs     = []
    
            # Introduced by DL
            x = self.parse_Terminal(DL)
            if x:
                if x.indent == indent:
                    content += x.content + "\n"
                    good = True
                else:
                    self.tokens.back()
            if not good:
                return None
    
            if False:
                # adds text after :: as part of the description dd
                dttag = self.xmldoc.createElement(u"dt")
                dttxt = self.toTextNode(content)
                dttag.appendChild(dttxt)
                xs.append(dttag)
    
                # Inject inner_content
                c = x.inner_content.strip()
                if len(c) > 0:
                    tk = PL()
                    tk.content = x.inner_content
                    t = self.tokens.next()
                    self.tokens.back()
                    if t.isa(L) and t.indent > indent:
                        tk.indent = t.indent
                    else:
                        tk.indent = indent+1 ;
                        self.tokens.rewrite(tk)
                        self.tokens.back()
            else:
                # adds text after :: as part of the description term dt
                dttag = self.xmldoc.createElement(u"dt")
                dttxt = self.toTextNode(content)
                dttag.appendChild(dttxt)
                c = x.inner_content.strip()
                if len(c) > 0:
                    deftag = self.xmldoc.createElement(u"span")
                    self.addAttr(deftag, "class", "defaults")
                    self.addText(deftag, c)
                    dttag.appendChild(deftag)
                xs.append(dttag)
    
            # Continued by DIV
            t = self.tokens.next()
            self.tokens.back()
            if t.isa(L) and t.indent > indent:
                xs_ = self.parse_DIV(t.indent)
                if len(xs_) > 0:
                    ddtag = self.xmldoc.createElement(u"dd")
                    for x in xs_:
                        ddtag.appendChild(x)
                    xs.append(ddtag)
    
            return xs
    
        # ................................................................
        def toDOM(self):
            # write 
            xmf = self.xmldoc.createElement("div")
            xmf.setAttribute(u"class", u"documentation")
    
            self.xmldoc.appendChild(xmf)
    
            # parse documentation
            xs = self.parse_DIV(self.indentinit)
            for x in xs: xmf.appendChild(x)
    
            return self.xmldoc
    
    
    if __name__ == '__main__':
        text=""" Lorem Ipsum is simply dummy text of the printing and typesetting
     industry. Lorem Ipsum has been the industry's standard dummy text
     ever since the 1500s, when an unknown printer took a galley of type
     and scrambled it to make a type specimen book. It has survived not
     only five centuries, but also the leap into electronic typesetting,
     remaining essentially unchanged. It was popularised in the 1960s with
     the release of Letraset sheets containing Lorem Ipsum passages, and
     more recently with desktop publishing software like Aldus PageMaker
     including versions of Lorem Ipsum.
    
     Also Fisher vectors.
    
     These are links BL(), BL(A,B) and BLA(A,A) (as long as the dictionary
     cites them).
    
     Mimamama
       verbatim1
       verbatim2
       verbatim3
    
       verbatim4
       verbatim5
     Lorem Ipsum is simply dummy text of the printing and typesetting
     industry. Lorem Ipsum has been the industry's standard dummy text
     ever since the 1500s, when an unknown printer took a galley of type
     and scrambled it to make a type specimen book. It has survived not
     only five centuries, but also the leap into electronic typesetting,
     remaining essentially unchanged. It was popularised in the 1960s with
     the release of Letraset sheets containing Lorem Ipsum passages, and
     more recently with desktop publishing software like Aldus PageMaker
     including versions of Lorem Ipsum.
    
     - outer1 /
       outer1 line 2 /
       outer1 line 3 /
    
       outer1 new paragarph
    
       - inner1
       - inner2
       - inner3
         continued on next line
           continued with verbatim
    
           more verbatim after blank
       - inner4
     - outer again
     - outer
     bla
    
     - list2
     - list4
     - BL()
     - BL(A,B)
    
     Test descrition::
         Lorem Ipsum is simply dummy text of the printing
         and typesetting industry. Lorem Ipsum has been the industry's
         standard dummy text ever since the 1500s, when an unknown printer
         took a galley of type and scrambled it to make a type specimen
         book. It has survived not only five centuries, but also the leap
         into electronic typesetting, remaining essentially unchanged. It
         was popularised in the 1960s with the release of Letraset sheets
         containing Lorem Ipsum passages, and more recently with desktop
         publishing software like Aldus PageMaker including versions of
         Lorem Ipsum.
    
     Ancora::
         Bli bli bli
         Blu blu blu
    
         - list
         - lust
         - last
    
         Bli bla
    
      Verbatimmo
    """
        lines = text.splitlines()
        formatter = Formatter(lines, {'BL':'http://www.google.com'}, 'a')
        print formatter.toDOM().toxml("UTF-8")
    vlfeat/docsrc/kdtree.html0000644000175000017500000001362512237004745014401 0ustar  dimadima
    
    
    %tableofcontents;
    
    

    VLFeat implements the randomized kd-tree forest from FLANN. This enables fast medium and large scale nearest neighbor queries among high dimensional data points (such as those produced by SIFT).

    Introduction

    A kd-tree is a data structure used to quickly solve nearest-neighbor queries. Consider a set of 2D points uniformly distributed in the unit square:

    X = rand(2, 100) ;

    A kd-tree is generated by using the vl_kdtreebuild function:

    kdtree = vl_kdtreebuild(X) ;

    The returned kdtree indexes the set of points X. Given a query point Q, the function vl_kdtreequery returns its nearest neighbor in X:

    Q = rand(2, 1) ; [index, distance] = vl_kdtreequery(kdforest, X, Q) ;

    Here index stores the index of the column of X that is closest to the point Q. distance is the squared euclidean distance between X(index),Q.

    A kd-tree is a hierarchal structure built by partitioning the data recursively along the dimension of maximum variance. At each iteration the variance of each column is computed and the data is split into two parts on the column with maximum variance. The splitting threshold can be selected to be the mean or the median (use the ThresholdMethod option of vl_kdtreebuild).

    kd-tree partitions of a uniform set of data points, using the mean (left image) and the median (right image) thresholding options of vl_kdtreebuild. On the bottom right corner a query point is marked along with the ten closest neighbors as found by vl_kdtreequery. Figure generated by vl_demo_kdtree.

    Querying

    vl_kdtreequery uses a best-bin first search heuristic. This is a branch-and-bound technique that maintains an estimate of the smallest distance from the query point to any of the data points down all of the open paths.

    vl_kdtreequery supports two important operations: approximate nearest-neighbor search and k-nearest neighbor search. The latter can be used to return the k nearest neighbors to a given query point Q. For instance:

    [index, distance] = vl_kdtreequery(kdtree, X, Q, 'NumNeighbors', 10) ;

    returns the closest 10 neighbors to Q in X and their distances, stored along the columns of index and distance.

    The MaxComparisons option is used to run an ANN query. The parameter specifies how many paths in the best-bin-first search of the kd-tree can be checked before giving up and returning the closest point encountered so far. For instance:

    [index, distance] = vl_kdtreequery(kdtree, X, Q, 'NumNeighbors', 10, 'MaxComparisons', 15) ;

    does not compare any point in Q with more than 15 points in X.

    Finding the 10 approximated nearest neighbors for increasing values of the MaxComparisons parameter. Note that at most MaxComparisons neighbors can be returned (if more are requested, they are ignored). Figure generated by vl_demo_kdtree_ann.

    Randomized kd-tree forests

    VLFeat supports constructing randomized forests of kd-trees to improve the effectiveness of the representation in high dimensions. The parameter NumTrees of vl_kdtreebuild specifies how many trees to use in constructing the forest. Each tree is constructed independently. Instead of always splitting on the maximally variant dimension, each tree chooses randomly among the top five most variant dimensions at each level. When querying, vl_kdtreequery runs best-bin-first across all the trees in parallel. For instance

    kdtree = vl_kdtreebuild(X, 'NumTrees', 4) ; [index, distance] = vl_kdtreequery(kdtree, X, Q) ;

    constructs four trees and queries them.

    The parameter NumTrees tells vl_kdtreebuild to construct a number of randomized kd-trees. Figure generated by vl_demo_kdtree_forest.
    vlfeat/docsrc/vlfeat-website-template.xml0000644000175000017500000000672012237004745017507 0ustar dimadima VLFeat - %path; %pagestyle; %pagescript;
    %path;
    %content;
     
    vlfeat/docsrc/using-vsexpress.html0000644000175000017500000000531212237004745016302 0ustar dimadima

    These instructions show how to setup a basic VLFeat project with Visual C++ Express 2008 on Windows XP (32 bit). Instructions for other versions of Visual Studio should be similar.

    First, we create a new project called vlfeat-client. Open Visual C++ Express 2008 and select File > New > Project and choose General > Empty Project. Give your project a name and location (here vlfeat-client) and click OK.

    New Project
    Empty Project

    Next, we have to modify the project properties to include the VLFeat library and include directories. Right click on the project and select properties.

    Properties

    We want these settings to apply to both Debug and Release builds, so switch to all configurations.

    All Configurations

    Add an additional include path which points to the root of the VLFeat folder:

    Additional Includes

    Add an additional library include path pointing to the bin/w32 folder in the distribution, and add vl.dll as a dependency:

    Additional LIBDIR Additional Dependencies

    This will allow us to compile, but we will not be able to run, getting because vl.dll will not be found:

    vl.dll was not found

    To remedy this, we add a post-build step which copies vl.dll to the debug or release folder. Since this only needs to be done once for each project, we could instead copy the file manually.

    Post-build step

    Now that we have created our project, add a new .cpp file (right click on Source Files and choose Add > New Item) with this code:

    extern "C" { #include <vl/generic.h> } int main (int argc, const char * argv[]) { VL_PRINT ("Hello world!\n") ; return 0; }

    Build and run the project (Ctrl+F5). It should run correctly, and you should see this:

    Visual C++ OK
    vlfeat/docsrc/using-xcode.html0000644000175000017500000000725012237004745015345 0ustar dimadima

    These instructions show how to setup a basic VLFeat project with Apple Xcode. For the sake of simplicty, we create a command line tool written in C. However, these steps apply with minor modifications to other project types and to the C++ lanuage.

    First, let us create a new project called vlfeat-client. Open Xcode and select File > New Project > Command Line Utility > Standard Tool and click Choose. Give a name to your project (in our case vlfeat-client), and click Save.

    Xcode new project

    Now we need to add VLFeat to the C compiler include search path. To do this, select the vlfeat-client target and open the information panel (the blue button, or Command-i). Then select the Build panel, search for the field Header Search Paths, and add VLFeat root path (in our case this is just ~/src/vlfeat).

    Xcode info

    Next, we add the libvl.dylib library file to the project resources so that Xcode links against it. To do this, drag and drop the libvl.dylib file (in our example ~/src/vlfeat/bin/maci/libvl.dylib) to the left panel and click Add.

    Xcode dylib

    Next, edit the main.c source file and type the following code:

    #include <vl/generic.h> int main (int argc, const char * argv[]) { VL_PRINT ("Hello world!") ; return 0; } Xcode edit

    If you try to build the project, it should compile without errors (if you are using C++, do not forget to wrap the include statements in a extern "C" {} block). However, if you try to run the program, it will fail, complaining that it cannot find the library image.

    Xcode error

    The reason is that libvl.dylib is compiled with the library install_name equal to @loader_path/libvl.dylib. This causes the run-time loader to look for the library in the same directory of the executable. There are two ways around this problem: The first is to install the library in a standard location (e.g. /usr/local/lib) and use the otool command to change the library install_name. The other is to simply copy the libvl.dylib file in the executable directory. Here we demonstrate the second technique.

    To copy libvl.dylib in the executable directory, we add a Copy Files build phase to the project. Right-click the vlfeat-client target in the project panel and select Add > New Build Phase > New Copy Files Build Phase. Select Destination: Executables. Then drag-and-drop the libvl.dylib item from the panel to the Copy Files build phase.

    Xcode copy Xcode copy

    Now rebuild the project, and run it. It should run correctly, and if you open the debugger console you should see this:

    Xcode ok
    vlfeat/docsrc/images/0000755000175000017500000000000012237035722013472 5ustar dimadimavlfeat/docsrc/images/vl_blue.png0000644000175000017500000000402612237004736015633 0ustar dimadima‰PNG  IHDRóÿaðiCCPICC Profile(‘UÝoÛT?‰o\¤? ±Ž‹¯US[¹­ÆI“¥éB¹ÍØ*¤ÉunS×6¶ÓmUŸöo ø€²xB Äö²í´ISAÕ$¤=tÚ@h“ö‚ªp®¯S»]Ƹ‘¯9çw>ïÑ5@ÇWšã˜I`Þò]5Ÿ‘Ÿ˜–;V! ÏA'ô@§¦{Nº\..Æ…GÖÃ_!ÁÞ7ÚëÿsuV©§$žBlW=}ñi€”©;® ÞFùð)ßAÜñ<â.&ˆXax–ã,Ã38Sê(b–‹¤×µ*â%Äý31ùl ó‚µ#O-êºÌzQvíšaÒXºOPÿÏ5o6Zñzñéòæ&â»Õ^wÇÔ®k¹IÄ/#¾æø&ñ½Æ\%x/@ò™š{¤ÂùÉ7ëSï Þ‰¸jø…©P¾hÍ”&¸mryÎ>ª†œkº7Š=ƒߪÓB‘ç#@•fs¬_ˆ{ë±Ð¿0î-LæZ~ë£%îGpßÓÆËˆ{èÚêÏYX¦f^åþ…+Ž_sÖ-³Tä>‰D½ Æ@îקƸ-9àã!r[2]3ŽBþ’c³ˆ¹‘ónC­„œš›Ës?ä>µ*¡ÏÔ®ª–e½D|Ž%4 `à î:X°2¨‡ ¾pQSL”PÔR”‰§aeíyå€ÃqĘ ¬×™5FiÏáî„›t…ìÇç )’Cd˜Œ€LÞ$o‘Ã$‹ÒrpÓ¶‹ÏbÝÙôó>4Ð+ãƒÌ¹žF_ï¬{ÒЯô÷kû‘œi+ŸxÀô˜ñú¯.ý°+ò±B.¼{³ëêL<©¿©Û©õÔ î«©µˆ‘ú=µ†¿UHcnfÑ<>F‡Ë ^Ãe||ÐpÿyvŒ·%bÍ:×iX'襇%8ÛI•ß”?•å å¼rw[—ÛvIøTøVøQøNø^ødá’pYøI¸"|#\ŒÕãçcóìƒz[Õ2M»^S0¥Œ´[zIÊJ/H¯HÅÈŸÔ- IcÒÔìÞ<·x¼x-œÀ½ÕÕö±8¯‚ZNxA‡-8³mþCkÒK†HaÛÔ³Yn1Äœ˜Ó ‹{ÅqHg¸•Ÿ¸u#¸ç¶Lþ˜ hŒ¯s ˜:6«Ìz!Ðy@}zÚgí¨íœqÙº/ïS”×å4~ª¨\°ôÁ~Y3M9Py²K=ê.Ðê °ï ¿¢¨Á÷-±óz$óß8ôÞY7"Ùtàk ûµHÖ‡wⳟ\8 7Ü…ðÎO$~ðjû÷ñ]¼›n5›ð¾êø`ããfóŸåfsãKô¿pÉüYqxÄ(Â@ pHYs  šœniTXtXML:com.adobe.xmp å? ARIDAT8“_LÍqÀ?ßß½¹¹¿®nêvwívSqÕEV3½Èƒš–yhµ±%Oš,f,3k™†¤¬F5%kekb“ÆLµ¡ÑT4n"‰(&¤_ÿÚÒ¿‡{ÞÎÎù|vvvŽ0­Þ…*U"„UÅ•ðõI(ƒâ4²)ä=¸û[ÍÜ»yEu{ÙÖ±S è\…ljJ31›¼øüµdÉ%$A~V*…ewhwvÑÜêT´® RcçaC3!+lô}˜»[ÌÞ?”@fÎ ŽŒ'·¨úÿd3MÞFBÓ¹¿Õ @rB4_¾ýÀäc¤ãCoßuÏØ­4ÖäríB:B"#ÖÒp;— aÁ$ÅoåYs;ûöFq± jön´ Ùix äUc\"“—•Ê2L¨#ˆ%=ágä3:6>_p )†5Á\¯¼OiU‰{¶`1{s¹¸šðP;Êð)éçééퟷ n[$õOZ8v¦EnZvEoâýÇ^®–Ýeý:;õO[iyÝ €›Vê ¿Ù«Å‡ºÇÏq×é(¿r›ÕŒÍêË­¢ÓxdlË|õîd§¡Ó¹M „ɱC-Î9JÈJ4 y1qû3èîécH¦¢0ƒÍÃhljÃlZÊ©s%<¨1sAIE-þ~fe„ؤ¼éèfH öQ0uÆY—ÊgÁÂ'$vP!{yz0ðû/êé°/ÇÙù‰ñ‰‰94)©»(?- ´;»æÀ„PTu2ù“È:¾ŠIEND®B`‚vlfeat/docsrc/images/vedaldi.jpg0000644000175000017500000002765412236612215015617 0ustar dimadimaÿØÿàJFIFHHÿâ XICC_PROFILE HLinomntrRGB XYZ Î 1acspMSFTIEC sRGBöÖÓ-HP cprtP3desc„lwtptðbkptrXYZgXYZ,bXYZ@dmndTpdmddĈvuedL†viewÔ$lumiømeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ óQÌXYZ XYZ o¢8õXYZ b™·…ÚXYZ $ „¶ÏdescIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view¤þ_.ÏíÌ \žXYZ L VPWçmeassig CRT curv #(-27;@EJOTY^chmrw|†‹•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿÿávExifMM* † ¨°(1¸2È<܇iìFUJI PHOTO FILM CO., LTD.SP-3000HHQuickTime 7.6.32009:10:14 22:21:43Mac OS X 10.6.10220FZ 0100  x x : : : : 2009:05:07 13:30:19ÿÛC      ÿÛC  ÿÀxx"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?üƒOibe`Ð[@˜í\¦óžKƒ’yÈÇÔö®ƒÁšU¯ˆej:Œs ¥ äŸ6ÜuÚÙ$ãž2Er}úizAi/VϺ]»<Ì0ªâçø³Xí§ÜGWVÒ[†-å((ËóuÚ8 Óž:ŠäZ#ÌT¯tGOk? µ\xó¥ÜD宕÷<1¶B’Hlã7xF×5 k%Üs‰a…^O;*ÎŽF@ßtì93žõÊü<¼»¶uÿ„Šk˜4»‰ü—ù 9ÜB±õ!sÀÿëWUá/ˆ7Ô¦³eò£¿Þno\€ðD0¹ŽNvìEù*e¢×cÉJêzÛúù–ÿm¼Qâý+Sñ^‹i Ë8²€ ñ¹3êÄð@ìz×[«kMáÝWÌÐ`ž7¸b¡b‹hÉþƒóuù&¥ðÿ€æø½âë ‡«©\jm8[Kkx¼¨•·À óÐ u¯±¾ü)ðwìµà‹{ߊ ¦O¯Ï ùÕÌ÷ÒÌpÂ(cÁXÇ qÎOZññµNÉýÇNQ•WÇÚOH­ÿ/SäÏ|ñG‰5x¯|áMF>Á¤±1Çæmù@•ã ü«Ü÷Åz§€>øÛG¹_‹4}"ÔßB$/¨<1Úœ7îÎáè8ãÛ5Ùê^;Ó|sⓨ\ ËXNdû=î©# pª‡‡Ï—ÊôÁrj׋h‹_ xi!ºðÞ¥ª^È]>Ðcò¢Ôä…VË•\ã'ýk–¦.U=ÞT}L8âœÛºüO:ø©û|OƒM[ŸÂ;,2„Bêêmî” ³Ÿ—=ñ^Aâïø—öjÕ-l>"ø}´™¥O(Mlöì>öÄtâlçîç8ëÒ¾¿ø9ñòÊ(ÿ°ã·\j_érZù޾D¬àÎ~R™à-zþ—câ} Xï­muk=B5I*¥Ì¸e!œÇ®ja¨ï ±M}ÌšÜ1ƒ­r÷zê~GüEø¯/Š<`—?ÙÂÂWU¦hÏËzžÀäôÇjÒÓ>x‡Äz4w*·¸Ñ­§ò^]ÂDgnI,'žÀàädg­}7ûC~ÉöŸ³Ïˆï~ |<’Kí!í•láš7¹c&FçPS€Hàç&¼BËâeåþ­sgâ‰]VîØ‰ƒJ”+&ãµN}sÉãìÃÏéì|¦? [?eÚÝÈç> |Ñ|Y¦éw?´É£@ò,ÂâúI¦¹\¨IHvB£$¶àqò×›jž»ðî©,:ªßع,‚6b  dd2®N$cë^ïáë­3Àú‚ž"¬tk™y¿øsÁ|7eªiºRYKmwe5ìR0žî3 šÜHŸièqà ô¢½â^¸¾&ð”wWÈéøG[Yd!™õ$ü tèLsEsJ0”¯%¨©×ærn:ßËõ<;Gd‚Ñ Ühá“2,Òb%§òŸZ»e®ˆ'{m"•.Xí‹èìOÝLõö5Ö£g}yäßO•¢‡* yñHœ‘ŒöÍs^dÖ7Ígp§W¶F}}«ØØöãmZÔï´j^¿H¯ä¶Åºƒ$R±~qÏN}:sé]7†~&=½ý¼3Ú;Êãd›FZàö9–-‘ØŒãÒ¼¥à»·ÓlenÛÚBŽÊ@p¸©èpOQÞ»ƒ×W1xŽÆG”´ñ?™œ>Y~aŒÿÆxôIrŲ¡„V£.§Þ¿>$ü;ý“ü¥ÞøÓ[“Iñ7‰™(ÄÓiñ`¢CÇpIõ5^Ëö˜ÒüYu~º*éºÁ·»3AqåK!Œçr2§8ä£Ú¾-ø€—Ÿu¸~ÂF­u+¨óù³‹ž§OOjôõÿ‚T|lÒlmⷾŒI¬yS¸ c?6:vE|ÄéÇâ©=^§ÜàÜéÃØÐ¥x£sÄ~<‚M`i¾Š ËvƒûHJH ’yç O9ÉükFoÛ&ãÃÞ.ði⥂e¶¸ºšwnæv) ãn[<úc¿Þÿ‚<|kñFž¬úXÃ9äÜÊP'võük–ø‹ÿ¹øÅðrLë:\Cnû’{Fóƒ‚>{Õ7M«·¡³§ŠþCÔü[ñgÂÞ/Ð.­,ã[-2Þá~×e¼Çq Ç#(üåU”ñý*‡?µžð¶â?øV¾šF‹‰$ºóšTõnpý®k™ø{ÿáñÇLJ——·vsÙê‘7œ7‚o¨ì{ûלx·þ çñkÀz¿Ù×LÔ¤˜ìhؘÛÜœóÅsÊTdҔ΅CÞ4ϯþ~ßÞø¯£ÅÖún•sr^Ú;V‘Y÷Œ2õÛÈϾkæßÚÇöxмãBçDkí'÷Bi‚¢ÜBÈ@¢9BIà}Üšñ‹²¯Ä†Ößx£ÃÚ­šFĴʬÞaù‹}yéOð÷íM{¬ø.= ÅÒK5Å»CÓ?E ü¤útãÞ¶ÃÊTåÍJwSËÌ(Ƽ=ž"²èÌý: nõR×ën4ëvæal³g%YËàƒžµÎêþ¸Ñãxö弜Z\Oä åv× Ezû_x£O´¹ÔYì-c‰A$–\àÜ}½zgå~6Ð5 îò VçhÕŸ8\ß(nvò9ü:澎”½¢>•Fn ¥ùýýþE Ûòu€²Ýíð¹Lˆ¶v=†zcŠ*…וq"ñ™ @RqŽNAõ¢ªP¹¤ žòh¹mð³PÕbŽm-ìnÂJ£Èó?ÒXŒÇ?J£}áYíõŸ#VfcWVó#+‰‡ŒƒÀúfºy4kJÒd·ðÕ® $iDždHTñê@çÁšÎñ±ªxÁa¹ñ m5Ë -í8y£‘&ݾ¹ÆkI%} éTrÝ«úŠÙKÒd‚èi¶m ²\fEŒ72Öî=É­¿ÚAÁ›ËçÓ®’úÑ£Š;äFwÛ";g±€08Íq²“SÖ£‹R•Bä’V3&6ÿQŒdñ“ï^¾×SOðW^µ1é–ѺHð¡bÅ›‘È$õJæ«&âÐR›hÆ÷Ôôßø%χ,¢°uKK}Aä3"¸“‚§ø³ëV4]^¯šéå“ÔA5¥'…¡büžpja)ÔZê{œ°ƒ²9¨ô›M>ö+x¡cäP?•gˤÙÏ.n­¢àçæ@Mk]Z:\”bqôâ®Äçuô£ÀÎ1\òŒ›Ðß•$s6¶º>©|¶úÆ™k{ÈÛ4 ê~JüEÿ‚Û~Íøû\ê¿ ,£Ó4ßÄ·¦Æ ‡(@NÞ1ø×î.»¡›)ËiìÜàŒsÅ~\ÁÁާ„|O gϹ’ÆãŽTùeÕ¾œŠœiÓ®©Ë©åg8xUÃ9­Ñð—€ ·†{9/®î.JÀ¢YÈT^¡ð¿6=køÏá±ájÙ4¦Ôn,å¤Qp‡j9c¹Cgæýyé]ï€Ñ|7¥YM ²mÚG™ØFÅH#Ð’Ý:ŒVŒþɤè÷‰TŽÍ2RìmцTé¿¶Ì ã¨é_]AìÏÆ1u}–!¿Òç%É´¹ýüB5n§aPNO*ONÙ¢·|Gb/숻MÝD'yÎ9Éöì8ÅÛ¿CxMM_o™îW>$m[IlÖx.mY aðê뵘ö`óÔc½ñ]ì6öº¤vÜ Ÿ1r l¤«}Üu Øâ³¼iá«câ%Ý…®í~Å=¼Wh£h €‘¸`g  m^ Aá/†ÎÐÅ?ŠÚKI&Ga |í G ‘¸c·“\±qäæ¹áÓTéÁMËÎÝN6ö;{?ëÏ¥ê"í®î\BU¶åH s·8 ü¾‡h¯ª?f¯ø'_Ä/ÚOöJ×þ$|.½Ðõ]7L¸¹µ“@šI?¶®­mØG-Ì!G”ê’äly9èÏ<+¢éZ¥´ž‘RÎL¸¾ú äHÆ9Çzýfÿ‚Ão}û"xro:Âɯ“¶_õ3ýµðŽ™]§iìGZò³¬uLNšÞI|šªGÝðv[C<Ä5ZöQr^©£àŸø&ÿÂø£ûdi>×ÄÖó¬s\ÍB®Ã ޽:ó_¯ŸÿjÏ ~Ä^°>!¶¹Õ/.%½¤MòÄ‹ÁiXôÏ¥q_¿fèµ_ø*Œ>!O ­Æ‘á kh匣Ç,ò»£à/"!9Ë~Ó cÓ¾SŽŒå Cþ»Ÿ§`°?T„¨¯ë±%ïüçáΚ ß…õû{–8ž¸ìFOÓóxþ 'á‰Z]ïP´–Wì×Ðá£é¼dqÓ5ð¯ÆïÙßâ5ö©¢Éáô·žÂôâêd•¶ ÉŸ ÆÜ‘°˜­…¿ õÍâÓeÔ­/4äno.­ãUÇ,v©nÞôëãß³RƒÕù£L':©(Ê:.èý*»ý´ô»«d{WR÷OPµóíÿ„Ÿá§ˆ¤µðn•s¬Þ[)V‰ÜÇ0=Xà’>ŸÒ»_…_³ë|EýŸüCâ/ hZ¦¬Úp“ì×vÌÞ`ƒæòÑØ;ƒÑ:ùã?„µ_YiRx_TŽ*óku°6íÿ~i˜8“Ÿº@ÅqG]òºÚ'çý\õ12§rQ^ñèšü;âæ¤^Ú/ hj¹%L6­#ìíÔòGùëLý·¾6jÿðPOغí›B·³ñ.‡®é,âh¼Ñ-ÊÂ͵º ??yÀŸÙ³Å¨Ý¿Šõ»HžA¦-³ù‚æMÜ–eªã·^M}õàï€wÚÀI|;ã ù†­â}úÁ@XÃ$H'†twŒqƒÖ¶ž`éW„`Ժ߷Þxë *´¤ë&“ÒÏÀùƒÇ²7ÿ³Ãûßé:ºø»NÓËÄúŒ—“Mmurð;B±[¢‘Úà' œ ùoƾÒµ ù¾šöËT€ÉÖsÊóÝ^¢ÆÒÑWæ °¦Ü8ãšû·öó’ßUø3á e}òk·ö{쌒‘1‘ÛäŒ)?36F2:‘_|Z¹ñK5Ó›}bÑZÞ‹9’HŽxq"°æ7ױâqé©Ô–·qùwˆ8ÑÓÃèœS·gmǼwàí[áÕ¤Ûés ˜’QùÛU†H‘S …s‚¼ã=Nh­_ZÝx›PÐ4?I ݟ"(ä‰ZyXmQæ’¼aG,Tdg­õON’J¼Ò‘òtåUí,zv»à‹~ :/‰¿° 1yRÛ-°y ‚Ͳ>B±¸Îî§Ò¼âUÌ¿ |c< ®Ë¯n™=ëΧYaj(JW‰åӽʕ[8ü´û•ÿÂÔ4Ÿ‡7"çU°»ŽY.":·([éE{„¡*àŸÂqáð÷œ›êzŸÂ„_ t]V+Ø,ôapá äöJõ_évš„Öw Ž[€$µ³*ÛTÙ“ÇLwì+á…¯œh¯jç¢î|Ùÿø}m6©¢x6òK-FÇÁž¹Ô¤¸–ðÛÂuf]©Ÿ¾Ä’®àÜËÚ¾1ð÷Ã:j'ÇWr­š[YJ¥¢¹*Å9rK(¬Ì¹_•ÁŠõ?Û£ö¦ºøÿûKë:Ït¢4›ÌEc+ÂÞk¬J?|ÈË´¨(@IÇ'©Å:ïáõ·ôíOiÏ.š‘Ivú8¸D¸tY6¬² nöÞ¸!g8&¾â§ì­¥¾ZϼIž?V¼Ýîß^‡€Ãð"Ë]ñ z‡’ÏTÐ&™íßÌùX(3>éÉ8`FzâŠõ xzyu» ïjÞÐt;€ßjÓ×…\¡6FU÷cŽO)×­írMéÒÿ¡òU£:Ò¿6‹úîŽIõŸ Yø{R¹ñ6µäÛ“ool¹šH™¹›ï ãÀùNî•ä?~ Xø|@|«kWòKÛÞY_À† »ÌË›9œu\çš¿¥ë:/Šå™çŽ´¹DRWy`,¤“’8ǨüªÞƒ•¨j·kynÆNÏÈž žTgvÖÆìŒœc¡®Ê=Œ¯&ßävR§;ýâw]F×X¶»Ó”èê¶LˆIUÈUsŒ… nûÜ~-Ž¥c$m{~wÊsé¤-1=# ç‘ߎk¤ñÒhVïiäMipñˆÑ‚|Êêi˜qŸ™zñ\¬&©ªêöþ|Vì »–C¼Ì7cæ#‚p3Óž¾µìE{HóXî¤ÔÒv²=[öLñyð?í%àmjÖ9m!Ñ5Ë[‹’Èhy998à£6}qÇ¥~Í|fŽPd’Ь§r_¿¾|Ô~0üDÒ|)ðÝg×|M⛸´»o7Êi®em«ó¨ù]ˆRUQÛµû—ñçáÄßnãðÖµª&¹u£Ø[EqxŠÍ—ÊPä éóŠù$Âs%8ôÜý'‚ñN*P—ªýCàŠÖÚç¼y>¡¡iRêÓ2ïU†àòÏ~µSÐÿk¨¾/hŸ„ï4ÍCKÖ~]ŵÌÕ½ÝÇæ©ãÖ¾šÔ¼>­söp†hÛ#åÉÁ5oÆ_ |)¬iboèÐ\]2ó!‡k©Æ3¸`­|mµ„´ó?R§'5KåkŸ_þË·Í«y‹6»§n]`¸HrAÿ9¬}3ÆöµwÓþE­ø‹U¾}§N´Q+—a÷¤nŠ8å¯Ò¾—ñ?†< ²²_[Ì…É’Ü9ó9ç‚}«¾øcàÌDÞÐ,í¦À"T‹ {r{õ®…WyK›ð¿àoS Ëó%èÿæ€~ñ¶¯ñ6 ¿ˆ6âÆ|ù­¥}Ƭ>ltë^³ûbjSÙþÏö]ZÚ\ø£\Šd›vØ­âÉ;rHhéÞ½SRðCèzÄóMòËrÛ‹v®?*ûgà¯ü§áÆOƒ>¾øãá´×õÈmÚU¹[Ù¢ò»j`0¼õȽL— S‹SKXüˆâlB§ËâÒûŸ‰¾ðQÕ5—6£RVo—ÏlË!’4™‡™€xÎèØç“Äþ¹±ñ–©{n-­äœZÊ%ó ±—mžj)¤Ç^Õûiãø#ìý¯Z—¿'ѤiC¦¾Ê¦FP¥¿zc€:çּƿðB„^$Ö®ÁŸ|V·±¸š{g´·¿#®Ƭ£ž™ôíÅ}ƒÂbÝHþ+õkò?#þÆœõŒ—ÜÿÈü’O xsHÔ†§­Å®jQs&“so¼K4‰ŒC€!b0XåwŽ¢¿N>"ÿÁó0ã$žÇ©< ÓðOÂûxŠÒÚKY¼¾¼½1ÙXiö&k«­ÄeTXõéÐ â½ZQ¼ôF2¬ì“¿’¿älÝxVÓÅww–^iŒ Ëq}t 2„KäG÷qV?d¯ØïÇ¿µ¯Ç /|Òîoµ{æó$šÛieb¦k‰qˆ£òܶPÇŠý ýŒ?àÛïüXÔ¬ø:ÄŸ`òÑõËåÉ'ÍÉ1Û‚å·7'…5úÍû1~Í¿eŸ¯†ÿfß ÛøAB­-Þ7Ýë2þ²Y[ç‘}ØóØc’Q稭KgÕ¯ÉuõÛ×cÓÂåÊ”oYÞÝ?Ïü–¾‡‚~Â?ðGo†ðN[x¼m«â–jçå·Ó¬‚Ê‘äC— à¶8¯•þ üO½ý¤ÿj¯Œz÷ˆ¥Ó6%†™l…Hfpdíü€¯Ñ_ÛcÆ÷ ý›üaªé¯¶{2yPû„5ùuû]ÿÂ5¤\Í&Cj+ó’9cëõêkçø•*ÊŒ=[êú¢pµ%*ujË}òê]ø¥ñrëàd—‘‚æöÒ9Ñ娙1Ä Øöî=+k··Ã‰‘ÚNæ8¼÷³°P·zž8£ñ_K¶Ô¤”ÞÆ­Û©äG ×ÿ´/ì Òx†]Wá¨úSNÁÚÐŒÆwB:uϱÅ|­)Ò»UgÜú©ûhZ¥-{®§Ü¾6ø³ðsÃ÷b{ãÜK6áT’OB3ß·­sß?o?|)ð¤ßðe½‘ijbêH¿~ck²÷ĪLuN&BÉæLÛ›2½{ìãû OÅ:§ÆmR]q£ÿ—N|€MÄòÀ~µÝ*¸:z¦Ÿ’F/‹¬œ6—vϨ~x¿Vø‘ð;ž.ñ­°´ŠM6æ}*Ü!Þˆ±’²s’y÷ßüâ£øïö^ðÕóHÎR/(–9ÈŒûâ¾øÅâK_üÖ¬´ÕH’kk H0ª¤ctȯ§¿àŒQOiûh^vy4ì¹?Ãæ¶?Jôøu¿­]+]?Ðñsø¯ªÙ÷GØÑxÂþ¿ŸÄ7©oöù¤,ou;£9„±û‘´ÌDK詊©¡þÑV~$ñBéÒ5}fReÕ aÓ!nËçÈWÌcé`;‘[š|1j–B-F' ë"¬¨+©Ê°<ƒÈ=«‹ñßíák JãD³»¹ñ¿köÓtKf¿G@Ë"9þû-}ò§e¥—Ÿü9ñ1n®’NOúþ·±ÖϨxßPwÓšügµW³®[œŽ\ÇŒ~Þz=Ç‹e/Øhß5ÕΑ:Çœü„ÿJüÀø|t [8û§Û#<^h¢¾7‰ HKËõ>׆$Õ ‘óýçYñ*ÝÀRçŸïr:œ©8`[æ è>´Q_Zû Ri$p>#û;^>4bœt×ø Q‚ é÷”1´QEqR‚u‡MVÝ.c„ø÷â;½cE½©ûf¦ó¡µ­Þ~Í™¹óè™óû•XzzÎ9}zfîüÿ}útÏàÜÙ3Hɱ›o»$„põ5×­º'À’?~<„pIþàÁî_ig€¥zÚª;¬À%åßÿºßyêÁ  ´Â… %B –õÚ•! •å'VÿWÙFó»Ú4–¾h‡.®ÝóÆ®>µÜ¹‘¦]Ž{‘[J :»:¡=oÙ½æ¹ëͪìfüÇ£ikQ/rÇÿªít¾ÈÍ=ŸðfµÕhn¢¥ç3¿Èmovûçªó¯àâžOüƒm^n}³"^Øø¿ˆŽ¾7|®ºz>ã‹\+þÔg¬õsÕÔÛˆ¿ˆI¯TÌ›ÕþÂÆÿE\\¢ë·û¯ ¥çSÿ4½YퟥRo§éù¤ï󨿂ò>,ØKþÁ—Šec¢K&æ×^_øèÑ£?û‘S3×*“ÀŠEÎÇ?yêôÁkdÐ/‡)–wÛž† àñ‡ï !|û•ïÊ>öåϼêØÌøú¹»Ë¿óÅ·Ä×ý»?ýháù/}odù¿þÌ!„ïþþÛâ7½’‡ÿ<ð:|äÐá#“€r•¶5u­3ÿò=Ótx‚ï8tËw¼ø–Âßþãñµž÷Ò÷>/:ü@šŠt!þC÷Y€Ç¾|â™W>uôÿèC¿^,?ëŸÜBøæ?B¸üEï~䋟!\ñ}7}ã ¿B¸âê›»·ú÷ŸûÕÂs^òó_ýܯ>çš[C_yà®âÙç~OáïþôcùÃ| àoÿä£Eïzùûò…¿ù쇋•/¼öÉCÿ¿ú£|$àÝ}€*"wd /jå•F:4|û÷>u _xô¡!„Ë®ºñ²<öé×+N嫟ûÕ'¸+„ðÜknÍcÿWÎ~,„ð¼—¾§(™‡ÿç¿ì}yìÿü‘p!ü¿àïÁ+Þ_„ÿÂwÿmÂ?kmªðŸ+ GÖjøö+ßU?P˜Ê×Î=9øÿ/¾¥¸!Âs^òó!\tg‡nû'™më°ñÊgb’€®³Ï¼òX1»ìª+7k !ä§Bù)€Fßqè–‹nk5“ç¿ì}K¼o¬Ì´—Ì0pÂ=Ëóêžõ¢wç —¿èÝ—ßMùò€Ù”Oêǵ³«ÇÞಫŽ=úЉ‹'¾;²îDϹæÖ¯>pW1ð¹‡ßS9ÔþËÞû·òÑòY€ïzùû^ðŠ÷ÿÍg?\L|áµ·½ðÚÛþú3wš @Rê‡û3ž(¦æžyå±|ìþ²«n !TÎ\þ¢§ò€Æ£ÿgºyPûÿΗü|¸øŒÀs¯¹5„®9ÏÙ{뿞ð‚W¼ÿÉ®\xâ…×ÞvñϼÀúYÜ€ ý½'`~5àó^ú^Á€ÍÖvãÞEÔ*ô7xÞKßãP€wôèÑ¥Õ*ëo)¨ÿjßâj•M¸ØHüÑÉ·¬ª'kY†^0)’@Šd"¤H)’@Šd"÷€Þ9à=ÿ·¶¶|àþî22è£×½æú…¶ï,¤H)rëÐá#ù¹³gºWv·P)Ù¸2ž1X¸ñK`Žx5`¿f–Ã%H—oQTß•¾Îu´Ù¶ÖHý µÀ\Yj1»­…Æö}`€…Zõc¦ig.̦¼o[¬o¥-°ø±™Ø‚ °L¿04â¶•‘b3€™¿—óMÚ8®pÀáVè€ïZå(bû>0ÀB| `•3n棺©iÛRªƒS²‹~ã|`€dÍá~åÙyõC«ÊS•5§.&žÏèn³^€õÒñ‰ªk,Y¿h¥ü¡ò! Î=sõ5×=øÀýómwŽS«*M™´EÁ‡ØT'O~Ýk®Ÿ¹zwd?yêôöööBÎø^€ž[È]çþc®$M> À¦ÚÚÚZô&ü.ôÎÜÏÎ×-ïZ ?d¢¨³'O^t?HÍÖÖV>ÆåÓ0wÅwl‡ØyÛÛÛí\pâî;Ë}ºæ¨òÛfŠ™€÷Þ{﬋Ô3SŸ.€y‰œEh¤H)Zï `0¬º °–æpG ãÇ·=ÕxK£Á`eYy¹¼æàÊiÁ›€M2Ÿ{6FúŽÌ b¾á¿­µ¶§æ›°¾òÜqî†5;[â;³Ìn÷á%‚õâ®ÀE .ß+:Úaƒ•£Å m¶Í²­ÈŠÓ¶¿´ð¹ª8-?€YAPD÷JÀމßõœÂÂÂÃ|cOd;>ØÀr4(†úë‡J3´61®Ï0õ¯\¥2ÆÐ¸~ÚöéƒúÀ@®rÈÞQlæ-Æ´?±“-׋5Öa×:Úéн¡¶!“Ž1½š¸ÝŽŠ@›ƒ^ PÌÈ.6CSyÅÁ`Ðö”çÓ¶_®³LÏ1 ñ½X9ñ -—é{ƒ êÕ;ªt”©<Û½õJ±¶,?ŒÙµÆ>tw»±?*¯œX ±ý‰U"_ Ãjædíóÿ³Ú¡Ï\š%)1£÷1³¬6VÔ“OW÷ÆÿüzÚ¹_‘Ù`c13`*½˜ ˜«ŒÖS˜ä RÆwAjÊ€î CBûp}¥Ár••›¸ƒñ»æñ2ß?±Þ—âaÌû”Í'ˆ¿ð¯PÀ M_%×´"LÜbÌzz+ëœüÖׯïàl¼,0­9d7€•¨eM“KWv·ÖØ`~ÖyÚö+ÏN•ƒvï`[&ö!¦îÄ ÅïHÛ¾O|1Û¶käfУ³¯m4(~Xh†1§‰[o­#J5îËT;رé‰}èŸñêÞVÇÃî o½˜M_2€fkÇÕzÐ}ÉL&€eêË<€ãÇKRö©Ïç³ðØ8œ‡'BØÉBãá¿X]7á ú’øm@&*/‡I_Ía<þüŸ¾`5eý}ïUß³?ïìg»{ãó»ãìññc{Ùùáp' »!ì®}îo† `õ%þ‰ñ½W}OaâWs!|ö¾dÌèá‡þ,„ðøÎøëçÃΣ£ðÍ,<:ŒÂã!ŒÇOzõÔÍÆ\”_Üä÷MX‚¾dƈ‘/‡ÒWó辇?õ[ŸøÉÜuÑWs!ìäÿwèð‘r çΞ‰ßÜ¡ÃGbÊ—7Ù~|ËSu˜¹¸ã­W¼áÕ//f!ŒGÙh†£l8Ga”í³×¾õÓyz̳^ˆTŽ÷‘±¿~ôT[9x1ÖW_2៉>ð†KêÇ~(„B6‡, ã,„óŸž¿äñ¿ûçY–³0‡,dŸÿò_Þú ŸáŸæ—D‹MDÆlq½Ÿ~ヌB—>ã[ó…Üp4üg?ô¢á8 ÇÙ0φÙç¿ø¥Ew&>úN›4ˆëäú’ÄŒ´eÇùrÇG¿~Ë ¶›ÑgÃýýB²,d!{úîGž¶÷Ä`÷±·¼þGÂ_½íî=ô¶þïq–'½¥Å!û¹³gòå<7ÊÊ¡}b˜Ï ÅÊ[,·Yª»0Kðê¼òiƒÁ0ËF£l4̆£ìú7þÜ«ð“£Q6eÃQ6e£Ú‡¬ø *þÍ×·}ÕßWmßNõï´øo­ÊWb¥byˆbâwãAÆ3迾dèÿ¹‚a®5òŒg|[–…, òû?ý§ÿo‡çŸþæ×þÐ'ë‡ç/ á’q~g¨ñàÑG¿Y®X²Ep­,ÔcüÌ¡·Þx±\dõ§ê¹…Ø¿LçÏŸßeÿóþ/‡†£á%O¿$„pûûoýýûކ?|øª< Øèè¼›ë+¿‘¦ýÖêØD‘ ÄGùzÜl}É> ’z‡ ŸÝú'ØgzMí÷Ów Y–½ö§ʲlðoÿ–õË8Ùå—þ›OýÖ'^õ¦/T*Î%ˆá¹q -ɘ¨2MÕÚÛÝÙÛÏBËHÀü‡{†£l8ÎF£ìñÖa€òÊú¯“´ÙOÔQ²~(?! rël¤¾d1á¿>ÎÖ´V2ÜÐ>ÇZîïçƒüÙ…ÿÆYøø]‡ð´qȲqçž¿ä¢é€Ë2s’á¿Wvw÷ööÇùHÀ‡~ç«;{áü~ØÙ |Í~aœ ÇùY€°³?ÝLºr.¯ŸádÿTOÍÜ&)è×=Ûþ=¸òØWNø_;Ãá0Ëò‰a<£,gƒ>ö?õÑ?¸bp×£_<ñõ·¼þGžÿŸyè?¿}h˜ ƒ}°¿¿·³—å#·ýø³oÿø¦gÝñ“—íî³,ŽÆ£a°e²IäWJÖôË¥s ˜™Á€4õk  íß¹þ×Ñh4g!Ëž¼ Ëãlœ Ôç”+Æ_­W̯LœMÑH½úS•5séñ†Ãáîþ8 øÈÉoc7¾j“±4ÊÚ2€ŠÆH_~ª\ û)¾d|ÅúS•5ÅCß–›ª/@ä<€òZ÷üÿBã™9è55ÎB6YÈÆÙ`<ç'ÆYöª7}a4Î_»atþ[~ìƒ÷mÿÑÃoÜ“W©ÇÎú©úŽ“÷å5mݵ Ì¥.‹°³7ÎGÞù£ÏÚóKÿýÚ×CŸ{ø/÷† U:&uL¬kœ¨ÔQ í[kâT§©N˜ ˜”¾d‹»@c <Ã=4èƒ|à8ŒÇÙ8Œ³l<ãÆY–]˜=M{eÜç§Ïn8vÓ›ßðÚÝýñoþ÷G‹1€·þÀ~áÃýðª{7(ô%ˆ¿ ž#——Ÿ•ÕnŒ?ÿ‹¿ !ìíg;ûÙî0ììwö³½a–™½àµ¿BøÃÏýÅlOŒÊó ÛÂo{óõÇÞ|ý‰ÿxzgoüã×>º?íïö‡£½á(„pÿ§{Õœ_€ú’¸' 1Þòî_ZuH ÇnZu`áú’ø]&ÊÏâËo䯳Ó~Ò`Mõåj@á–i=ÆVx0wõ5×­jÓ÷ ƒ1HQ_2€yÝûˆÑ—  WcîÏ ÀÆëK?pèð‘â¿…v 6X_fFޏ™ÌE_2€˜û´…ÿÊo«4þ L½LùwÞÚ~¸6U_2€™ç”Ó‚b¹²¦±LyeýYØlýšÐöoEe@Ì´€z™Êo¾™X@Rú5ÐöoÅ C÷e*#ÓöÖQ_Æbäãùbâ·¡?c‘êI@yMÛ~w™‰‰lž5ËBKo{XŸë7ÃCØ<ët˜¤H)Zy~èæËÌÍ`0 «î@”õ€Bb³,›¸²­nÙÄ*sÙI€å0ÀZ*ÇòøÃî,ËŠ\^H1ÖÕ`0Ȳ¬þËÇÙñÇÜåFÊuË+‹5m&¶ÙÖÃJ™¶Šóe €õS – “E#Q¹X9±@½“1U*Ë+…`¡Œ°–ŠƒòJ˜Ì×WŽ×cÌ}_dƒÅÌ–@Àºšo€œokmCý·[>Ý<̱WeΰiÊsýVÛ“Ùÿ–髜83;è>Q_™‡ùúvM–FÀšiŒ‹m“í#[è^Ó¶Üýpb?#{° Î@ŠŒ°i–sí`XwÆ EÆè…O}æ‘bùÂÅp¡{l'{lgüÄnØfy™ñhA[ Y–õ¡‘ƒëI7€•°fþá3ÿü ¯~yñ0 a<ÊFã0eÃÑx8 û£l˜½ö­w„p]^¦üÃçKxÅæ&nk†\ù÷íŽÌR`& kã÷î{è÷î{èÒg|k¾ÿwjûÁQ–}ä“ÿu8Îî<ñ»ÃQö+Ÿøí½ýqQ+f…Ew²¼¹J´®›¡?Å^,gw€ f €uòª—|¾²æ•?ñ?^ýƒŸ¼é†× GÙÍoÿ‰á0»õ7ììM>øÎŠ ZY“òâP¸þl¥zÑHyMÑBÛ Ddzñ ÝÝË—+ë{ÞØ¶ýª{@?ÉX£á0„pß—^º³7ކ—<ý’Âíïñïßÿðp4üáÃWFÙp”}èÃw¿ï¦‹Zå[Žîùšb¹¾¦¾Pn³Rx¢î*•g{ئcwê»ÐÖlÌ ÒØ=`}ÉX{ûûa¼÷ìË.}Å÷ýã|M~ÀÞ~öª×¿ã~ç7†£l8Î>xË»wö'ìúø|}ÍjƒÜÄ33ž¡…Æ—KëÎ<ÖÆÞîÎøÑ?¿ô[ž~ã‡N„¶îúÝÝaöž_ºçüîx0ì³á8޲Ûîø•áhBpªÌ (Ÿ¼_ÆžD˜jîÂ':LÜýJûÅ,‡ƒgÀ ÉX»»{ão<ôÈ£âŽcû£ì}ïzÓÎÞønyÇ»ã,ˆ£ñhF£püƒMÊ óa•“úóºnpA…gÐ1¡aâ2Ð72ÖÆþþÞè_¸ìÛ.ý¹Ûmwo¼³7>¿;ÞúØ=çwG!„Ñ(Üò wŒFÙ-ü×ÃÑSµ%Å!lÇšúv»Ÿí(±›…y|ô¡Û>øØÎøŽÛq8~êjÀÆ(Õ1oâöåÈÆËóì*sîÊËÝÁ5²· 7×±›ñ…¥Ðg2ÖÉþæk~ãÃO{ï/ÿúí7¿ó—ïºç]oLJïþø;~úÆÂÏÝróª{°Nd¬co¾þØ›¯ÿ/Ÿþ?¸éOìŒßù3o?¿;~û 7îìC÷ú·WÝÁ¾sD”ÉX3_ùÚ7_ÿ¶c«îÀÚ“°fò‘€U÷`í¹R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E2H‘ R$€É E—D–;q÷>pÿB»B²|º–/*ØÚÚZt?H–OÀJDeŽÏXŸ.€•0R5pòÔéE÷˜—­­­‰#¬±3···Ú`ñNÜ}gL±Ø ¾E ÿÌ€É E2€Ù:|äÐá#«îÅ̼sÙýÍx ÖÎ2€å„ÀÅm"²åÆb‡9wö̹³gæÝ©¨nl^Ôœá½Ø¼`™’Xfüž¯õíy›öhó^€ešâZ€Šü ¸²P<[ÿv.ž­>wöL¾ÜÑHQ ØVy»•öËM•«4v ñ©î•-¶5^ém½Ùîîu¬)×m{­*+Û¬ˆ|â[h|S»×ý6Õ»4ñíî'³g:Âsý©zQ^߸fڭ׊å"‚ÖŸªGîÆ4îlã_“îîE¾=¯’·½;m{Ññ:4¶ÐÝçŽ5}˜Ø`[·cú Àœ3€s9k[?tžX>¦ÙEœQž¶{õ>̽Wopb =ì3fÌŠ£çâáÄ€×çC±>ô­ûÐöàí¼Á‰-ô°Ï´™}&`>>Ã|ø~•ÇÌ a¦}`ã-é,@yÚÚÄà])Y™*_1²õ§*k&v rïfîC¥Lä&⟊éCùu˜jë13Ûúó"LõÑ 08wöÌÕ×\×ý B'OÞÞÞ^ÎïL<¾o+0ÃÀÀfOëÃÞÅÌõ`îº#{Ö—7°o659  Fï2€™gNð65@öj¿:._`µ’¾' $+6XÎ$`9¢Îlmm-ºÀ2EeÝW kÇ<H‘ R$€É E2H‘ R$€õîwÖÚÉS§WÝž´µµå~6ds¶½½½ê.àfö“ÉæïÞ{ï]uRçè"ó E2H‘ `ÙƒA±P,Ͻqè•:|äÐá#å‡ ëO*ƒA–eY–Å—ŸªñE4 À&1°â ’{-À¹³g>rîì™òÊb0 __~˜/å+%ó5•Ö6R~¬__Ž¿ó5űx¹pãšzto,ÙØlùˆb³l¶] XçE*P^(ûDŒÆÌ XîXSVÉ*Úžš¶Y6Þ@} ~B@½d"y@–ey¬íÕ¡é||ÇúúA|³›}  rdß]8‘x?³J,¯¾wŽo ÓÍ,NðϬ¨žÎÊtÔn0€ŠÙÇâ³rIƒuyŠP,WÖTÊT2‰zݘ§&6 ÀÆ‹ÊÊa»m¹ü°c¡­îf+Çׯùwõ³fbã[i+@"ÜR$€É Eº#u'î¾ÓRÐ2€yÚÚÚZu Š `žý°.Ì€É E2H‘y¤èêk®[uèèÑ£'î¾³»Œ €Dmêôí“§NÇ“ÌSä‹ÀlmmmjŒŸ Àœmoo¯º „‰càÈæïÞ{ï]u6ÍTGóÇn¾mq=Ù2ÖCäܽãÇ/º'›AÀÚp^Žd+6 ²,[u/huèð‘bùÜÙ3+ìÉ|Eݨ¼ó³)·pðÖÖΠäàÅ*UæX €FçΞÉÿÛ¤¶‚{nR#?Ê/t.ŠEÆlãË—çE6pèð‘ü¿ò³m •’å‡K6ãY€¢»E8¯¬i+'Pe‡YŠÂkªm¿XŸû¶9g=*’IDAT@ž?U(Ò‚òÃÆ§¦- °FCæBƒEcP+‚Wd̪<_qAfÉê®w½¾W•{¾1ŽÊá¿ÝËCõ§êYE¥Àòv`Þê£ñ‹ƒZ]c|¬?\@gc-j&à¼öjS󀎃þJÈh=Õ™~I°îÊIÀºDŠò€wd±P ™ç8ù‹hƒENè¨9Õ`ªù†=Ô‡ Ú¨|è_hìp}Æ@Çò¼ôýjÀu?ÐvšqGá‘-ÇO6è­¥ˆŽñ†øÑˆJ±•cÄfå^Ö;]YÓx†¦<îQ¯r è·J¬­‡çîÉ€íÔÏñWžª¬)v4@£Æ¨_ ø¦jyâÈÁEeÓvº»@Ûkùz­£Æ¨?C±Ž˜_Wà ¬ä~Ì‹ }ÌLÐ ³rမõ}& äüèß|ÉXÇn¾mÕ]Ø42€9;q÷~¼`îNÜ}çÜÛUÂäÆD¸iwdªòñ…7æõdcÜ{ï½mOõêèÿÐá#çΞYmBsìÃÊ÷ˆå‹Êò8qõ5×k¦úS,2ƒ¼‘þŒËµfk!)‚:©ÉÃan†06sð›¡â\í2£uy[²„ ;P»Å¨@9Þ4ñ?~â¡KŠQJx®¯ŸÞ/H±ÝÊ‘}w­bt¡låõsõÓm…ã›…tT¢]åÙúšøggØÜlM5ÌПrÇÄfÊÖæ~å3aÊaü¼dùìøJ†b /¨oæü“²îC؉帹ž¨Ÿ€€ØkŠåâäqef@±\9(/ÖÅÚêÆ«o%¦dùJ„>Ì(”çH/oåп>ñ­nÌS›…u1Õ!ò´Áø1÷lœWk¬»Ø™€õKË+Ë'×+…'®©œ˜¯‡±ÆZ•6Ë[¯/”·UßÄÔw°c7ã×Ll¼ûÅìnÖE%ªÕOºW¦­Õ£`±æÜÙ3õòmšØ™úæÊíwo+^d#ݽjl­²¦rzâ€Ý¦çΞéÕñZ;yêôöö¶;—A!þë%æ\Uj_VÎܳ y´Z›yÀfkœ´ ,Ž è…¤î#`¡ü:ðœ9ÀZ00O†1X2€y2Œ ÀºpR$€É E2H‘ R$€É ESÿ:0Ðs[[[oQ•¸Õl˜¨ À­î`Ø)’@Šd"¤H)’@Š¢®`³:|dÕ]X¬sgÏTÖ\}Íu+éÉr=zôÄÝwv—‘BY–­º qôèÑíííÆ§6õn7‘wò•ð¤Í‹ˆîjßÁ<H‘ R$€É G–v]†™€,\ÕŠ«ò>Ò¸¼^ÊÑzívAÀbuûµÿkÚóœ €ª„ÉsgÏlÌÑcÏ+£ƒme–üRÈXõ ÿêÉMeMe¯W˜É`nf˜Ç·ª[2ËXúñº«ÐGÖZÕ+àj@(óÅÃÆi«è×A-¢çK~)Œ}´a‡†‰+ËúÛº¾#•$àÜÙ31iAåÕè~qJôÔšF5þŽg×E÷~…–Ýì(ÓØæ‚8 ôT–ek:> kAô—$Gôš$Dô$ÁL@` dY6 Öw¾Øº8yêôª»ÀòÈ€õ X´£G®º Ë–xÆ#Ö†$`¡¶··WÝ…¥J0ã©ëD° ¾¤'î¾sÕ]X135cb Ì… Xƒ Âê~N 6†³@ß ƒ,Ëòå«aAŒ½–ñsg è¯bÒ_> ` Ì‘1 §{X(ÐS•ŸUÍO¸æEô‘£X4° À|]B8~üøª»0Äïè7xå+_¹ê>ÄÊï]ï‹ îÿ-d·îÞ”IEND®B`‚vlfeat/docsrc/images/using-vs-additional-deps.png0000644000175000017500000003251312236612215021013 0ustar dimadima‰PNG  IHDRíôÎdg pHYsÄÄ•+ IDATxœíÝ[Ð%Û]ðþ0ReEc€î×p$93ÉD28SÜ‚OyH•¥UòèK€D $!Àäƒ$ñ‡²¬Òª¬Òª±œò' žQg‚30‚IÀ Þ¢äR<~>ô™Nk­^{uïîÝ«÷þýꜩ½×^½zõÞ½wÿ¿¯îuöðÅ{ ÀÖ|ÛÛßõ²¦i®\»¾vOF8??ošæeí“Gî¯Ú€Ñ^Ö=zã[~ªÿÂÙYÓ4gŸ´ÎzƒÒ—–é=~ÜF°\ºÉO®òñ¢Áÿ‰§ý†+¿üÚY¸X¼-——¶¥¿ÑéÎÛw6Ðñ>ž]êÊÎmyÜXº‹;·åR×w}8ñ¶¤:?°-a/>ʰV¿÷á³nKâ³³-Ã.Ú–ËÝ?¥ÁmÉ|üc¾bQÙ¸¯Xn· >æÔ:³í¿Ñ{µ›úÜ‚þ¿Y;¿bùu&¶%Ýùôf¥ñ¶ÿïÜ–øk•jxp[Âþg?Àx[eð4û‹>ù’¯X¿óÁ»±c·Lí¥#¶%ṎmIÔ³-A'ROs_±åJ¿bÁÿÁ âm(ZÌ>õÃíƒO9Ø*æõ²ÝUvù+_ù§Ë+߸qã¯ÿÍÛ“—êˆc€y·½uûÎþKµŠâ˜?øç›¦ùS_öíMÓüþ‡¢-|Åk¿£dÙ þ÷ƒ¿Ý4ÍŸyê»j8€«O=Ý=^è>/ãò1¿ÿ?Ñ4Í+^ûíMÓôGûä}âásMÓ|úÕ¿1j]MÓüï´išWùˆ€æüÒ4Mó9_ùΠü¿ýâ÷Ÿ~ÞõïÛ™±>ö¯ßÛ4Í—~Ý{K*ÿÆ¿úþþÓ×~ÃûèNÄ´áËÕ§ž¾úÔÓ;C™þ"C%ªÇùþ™§¾ûÕ³fe>÷ïþ¼ëïnšæ·ï`Æfçòe_ÿC_öõ?Ô4͇ÿå÷­Ý8´.èiŸî bš8ó‡ùɦi^þÄ[›¦ùƒÿø|Ó4òÏ~[Pç÷>ümJæ÷~ýÇ»Â?ýº—N3ýî‡þnWøiWÞÞ=þ‡§išO}"+ó~õǺǯºö]Ýã~>æã¿ò·ºòÏüsïhšæþòßì7òÙþ“9˜ÿþڬ̻âuõýö½4MóùOï½÷Ïÿª÷4Mó_þýû»W¿ð«¿¯išÿüï.¥F¾è/¾”8ù­_øÁ®ðK¾æš¦ùÍŸ?ošæ5_{óc?þšÇi˜¶Y™gÎ?z÷fÓ4OÜ8ošæ#/ÜlšæÏÞøÁf—~@óºo|©oú™÷ôë\ùæ4Móèλ»’«ßòlûà×þÅ'ß7ü¥Ù¹:˜K”„#ý¥ÚäMÐÈ)ù˜—‚˜ÿxÓ4¯xÝw´Ìÿ{Ó¼òÉ·½òÉ·½òÊÛš¦ùģ纥>ýêßHžZú¿¿úcMÓ¼ê ßùªkßÕbú>þ+m@óŽÏüòw4Mó¿~ù“1Íg}Å÷|ÖW|OóøŒRës¾ò;ƒ˜Î½÷Rn¦ b¾à«Þó_õžæróEáû¿è/|Ó4ÿé~¨yÄ|ñ×üÀ·Ì¿ùdDò±Ÿ?ï7þ¥_÷Þ/}æ½…=‰½öÞ÷ºo|_ÁüúϾ§yÄ<ùMxò›>™RzôÁw7MsõM?|õM?Ü4ÍÃñ®æqóúoyöõéG1¬bTÓê*—,æc^þÄ[ÿð#?ÙfešT2&ÐOÉ´úù˜¤ßùµ¿Ó=þŒ7|çÎ.vú)™iºQ2ýñ1Ÿÿô÷6Mx£¥¿õo •×|íÍdkmJ¦ÍÄ4MóÄŒ×÷?÷R²§3êÓÃ^J¦ÓF3â¶¢^ig(³ïuׯxÝwôoî×1¯|òmÍYó»ÒM{j)ºëên¯þòw„w+ésßøî³=´É˜K·KÜO;8¦y|KÄ6ˆyÝ7¾¯iÎÚdL^›Œé–ý·<ÛWúÕŸ~§P€Ã{™ÒØÑÁ‰óJíà˜¦ Ã(O<óÒ)§v”̼þ[ž}ýã±2pxýÁ.%•›è¼R~ñéù˜W¼ö;~ïÃ?~i¨ï“o{å“oûÝýÝàÔÒ§]}û'>74Î÷3Þðÿ÷W¬ê›"óê/ÿîÿÊ^êû=É^}öŸçÿø¥)çø‚¯zÏù÷ïï†ú¶ã|[ÿéß¾”)iÇù~ñ_üßú…ìŸWú’¯¹´öš¯{ïÇþõ{»q¾£zÒzí7¼ïÃÿòû~ýg/Zzò›Þÿ¡Ÿyχ~æÒuãW¾ù‡}ðÝýóJýdLã¼[§^v¦sξxïʵëÜ7Odrö®v´o;È7¹-åsõ/YJ¼Á#¶å¥’6š¹ò͈g œ‰Ì<‘æ‰,ýŠåvËàcN­3»Áág¿Q»æ‰ì¯Ð<‘é'ܪےjfĶ$j÷<‘õ¯,¿3ïÝ»w»y &,õ†OýpûÔ¼Ûӿèjœ:`¡¥Z☾ð«¿/üSnª'ž9Ÿ£™æÉozêoXÓ7¶TGÌ ˜‰zÑ¥:UÏKñÉ|Ì/ÞúÖûÀ2. J`«äc€­Ç[%޶Jl•8Ø*q °Uâ`«Ä1ÀV‰c€­Ç[%޶JlÕËvW9=·nßY» ”ºyóæ£÷×îÅtv6˜ËÎ_ƒ+×®¬3ìéÆÏ?÷lIMqLÚÝ»w×î»î啳³Áþ  6ýgÏéõž8fÐ /¼°vNΨŸ˜o{û»–ëÉÙÙ p²¿Œ%Ž¡.…‰ßóóó¥{¬Ë¯%Ä1TGâhù5`'×+[%Ž™âìì¬ûw®gl ’–ÞÇìܲ«O=}õ©§×îÅ):P³õ¸<Î8ë)oüââââ⢙ïHÐoÇÑ%P¸+®µÓæwžÉŸl»›eZØÇ;vPrqqagã´ßýQ¿WŸzúá‹÷¾x¯)þ…)i3ù¸|ñ …M…3Fé¿ígV²HW³ÿxK´¹¿îP1Ùž‹¬ÍH~å&|Ðå{l;UÆ!÷–þ¾Ý>ŽKfï ´æú5(\מ-/ѱúŽV4.Ž9͸ÿ‡læÇzèÕþ_«Íå¿wû‡æñŸ³ÉjCG‘¸~I›;{ÒTý<|ñ^ðã5ùƒÞPt’ÜÙ’\¼4©¤KÉ®w Þ7âÅ“ ýYÌøk7ôÑ­=θô^º®&«Å)õÿ×’o3Ó“x¥Ý¿c7'Y/Ø= 6ó0FÄ1Çñø-Nc2%É¥JÛf²'µú_¼%>µÌN•|ܤ¾®ý—ú‹43ílñ‡²ó3ÊgJ‚hè£O¶Ð…PùÂì–þ5ÈHfj3%É¥JÛæPOvµ9qtÒnN²3«ü­¸ïu×Ç÷oHÿà1ãÀšªŽI‹F÷ù*¹ó$¿®AÉw¶¡ÄÌBëjvÅI°UþÖ_Zs–¿’|ÓJV4­Î*ŸNÕ÷Yâû.ƒëü՞뜶˜¥oûÛÿ‹1ôgÜ>;UI¯VÜÙóñÕùuàˆYÓWøçýaVTØ™J>Žm\wÝ _å]»èÉW;Ž‹5ŽïÈ”ÜyÖÝ©†îlñR;‡g Õ/<Ÿ·#ˆáø<ŒâüÄ%ß´¡ë­f‡GäcŽ#§·è&Ä$û%å?úqH”’2õûhvö¤žA¾Ça–-øàâOvç"Mq°RÞöA<XpÃÖ¡Lû§Î„¡9qH”’2õû§°÷$T«•t~ÅKq畎þŽ%?]Á‘,Ì ÒŒÛIŽÛÝÙN~½ñƒ’ž½’*®¹è×uè*);xhÙ’}²p°Qñ×<þM'‡Öŧf2íä×?êɨÖ2dŸ°9™~îoôø˜­À[É'IÌ¥üËœyiÔ®UçÎv€ëÑ$c ¯’tÅ\ªÝœÕÆùVûŽTâd¦®]ÎÒ;ÕÉî´,dë¿Gvt«vsV‹cª}GXÑ·½ý]kw¨‚_ U}ÝõŠžîYóÅÞóÏ=»vV`gƒØiþ08&áæÍ›kwSag؇8&ÁÇŒ éÖí;kw™‰c8 7nÜX» ÌOÀI0ææ(mc^€˜8Ø*q °Uâ`«Ä1ÀV‰c€­Ç[5âþ1nƒH¡›7oî¼M­Ý €Œ·¼ùM%ÕÆÝïîÝ»SúÂ))¿ÓTá> À©)ÿ[wôý|_xá…±‹pR–˜0èoù©ÙÛ„r¿xë[¯\»>{³ggg탋‹‹þãÙW«ûøÿüíòÊù¯üµgžy¦°²y êìì¬ Vº¥+#öêÏú¼’jçç磚LJ°DÂÞõJ›?üÈOî,Yb-‡±ÖzÉèN %KâWÍ–É$‚nÞ¼9ôRÿ~ø´êÒkïçŠåçÕÎ_þÄ[G-òò'ÞÚþÛ/™±?­¹Úœ×ŒK!ßz8€9Ï+%ã•L|S×ü`qÆê[J|Ÿ÷¸¾Dx4£ »tô|ëáS Õ íÇãùó噚‚Ÿ•¶W]ßJšŠëÄ-dÚL–× Ar%®6´TÓ4ýÜLW3xÚ\ŽN‚’!{¶œ¯o]aËC]µi4cò¬™o=0—ºÆù& úñÁÎòL ÍÈ«¤©d~a°º¸~ I©#4™'8Z'Ï4•”ŒíU² u&´œéRÙ£#ãü2,gæ8¦û³#È‘œŸŸß¼y³ýwÞ5î)þ;iì¯L<ˆ/ßBrH Ÿ¶úM`[²Ôr-.(”¥ûóÃ7j0s'$ZmøR[ÓÌ‘æÛBP?8ý´ggNA—èžàœ?•QÒ·iýŸ¼ÕÁ‚Á¹¶im¬eµë®û÷¯<c7gÝkµ6íåO¼µûoí¾$ Ð)YpÚê&,,Xç;Y­¡dÌ‘ý¦ÁB>ø³?÷GôGMÓ<|ô¡~ì7›¦ùÄ'~÷çáßMkm‘ñ1…Gå ”¹¸¸ØÿæÜ3ÞÞ;ÙTP’_]<9®oà,Úqù’ ¼;r÷k·Zë‹I¶”L[ûØ¥2]2È÷|Í¡ï»Þñžþô?ûÜ?ñ'þñ?ù§Ÿó9Ÿý¥¯ù’~ì7ßÿ¿õµ?ýÏ&´6g3ö^ÂÍÀ±?ù4x0Tži!ÿÒ´ ;Õ=J$O‹Äå%5‡–í?-©“\{a¯¦­}ÂR…B¡äKògÊwŸù™¯þcŸò)MÓ¼â¯xùË_Þ4ͧ~êÕ«>cZk³Å1Ž}jósüçíƒïùî·µ®½áõÿè§þÁ´Ö9¯TáuI³ðw{’ü ñKÂIú{ÿ.Ôò"qÌQ1óŠïçÙˆr8RwïÞ]¨eù6ào}ëÚ]àÔ-1OïÃïu÷Ͼ"XÝóÏ=;ªþ­Ûw kÊǰW®]_» œ´GîÛ áÊã˜Eî3áÂ%€±‰c–ÎÇœ¹ß0Ûy¥L&ÖL¸§mùd³åölsé;ó.±ÉL³çÄ:£& »ûp‚擌W2ñÍþ?»KüjO¾pû`éc‰Õ/ë(‰< ÙiûÆÐýïû…ûïub rÁ.á­ƒu-2ηÄЗè¶ýÍåŽæò'Aµ8ü=4á@¦Î¨¤K~u™ê׉[(Ù„’îmZó ¯{T;üt§•X-ŽIJž@É”$—*i|l›C=)Ù–’¦’u’ê^…‡öÈCØþÓ N&FlRÇòäg‘W.õ*Xo¼ÔЛi³äUññ(Éoœ7 V1ó8߳˺òöìÒº×1†y w Eå-t%;ÏeõgÜœ­hßðVWØ•´oH¿N÷Jðêì}ëáú{Házƒ ÜY3¹¥;_Mö9ù[nGòfÎÇ ýصCg*¹¯Laþf”ýåǶÔïÿ1í³SœíXB¾åÃíò[šLAÅ%ö¨X2%Þjç•ü û¶pû[p¬¡w»KHtO÷Œ5ƒÆg¦ó ×(>¶eÍñ1Ñh† ?­dIaýd@°çÏw²© $¿º’î97¿¿8R™¶I†;[ ÙÅÇ;y[ sÆ1†¿$ÙCO»C~üêP|PÒìPS;{2m+¦-2ª{Ç-·Q2¸¤$FL¾:¶WÍå¨p½C%AyÐH²ñQk̬«kA|\hÆ¿|€Qf‹cÖûâät pñÁ¾0æÚg’Õâ`zl ™¥v¯%}›Öñq¹¡?i¼W°Šº®»žl[¿ Ûêmå„°§ìHâN–ðà”-2Oäd&ÊÊÕ•©ä3ÔæÑƒûkwSg'„:ÕÇœŸŸ eˆ]¹v}í.pÒ=¸o'„CºuûNaͺÎ+Uĸ3T®®8¦||Lr'à¤Ôu^©0³Å»£râö¹µ¿`Èöò1C¿éAz&™°‰ë4½óG<›pÈiÿ´_p÷áf×ùÊàU{#@Þ&ó1±`¼àö¦mI²N0‰Lܵ¹8Ô £³¬¥dJŠQ‹ÐWc>fèßÀP&Ó~\'˜›F>fs‚”É¢y¸’ƃ’`-c×;T9ßTÿÕ c;·`[jÌÇ ý˜0]¦ÎÙålÍØž³Šä§6*—|µk'nsgãgYœx–Çi‰™dÏó¯±ó1y;§í-üÃzD·8:…y¸‹Ç2;Ly:g^ùMˆ§ÝÙG©Æ|ÌNñq%ù§sf©ä¨ÁÍiÚóè¾zp •œ²íåcZ=AI÷´_yg¸ÍÕOØžA@µ1ÄÁFFÞ&ó1œ²þY’’,Zy.ÂÒ¯vÁîÎ’±½J–K%$m5ÃÉZ.7´¢ ÍQ%qno¨WÉ•vÿî“J”ŒŽ˜| Û6ê‚5ŽŒ| Û6”MYh]XËì6Úm€uÅ1ò1@¹ºÎ+ŸŸ eˆ=zpí.pêì„P§ºâ˜ƒcÉ•k××î'íуûvB8¤[·ïÖ¬ë¼Rá|ׇ¼ƒª+Z Z›ÌÇôoæ±tÒERªµ½|L_ÿ`q’&9 pð8Îî%Ý¿™öålê7ôÍøÙ­»'Ø Ó´É|Lì,5kñδM<1Mfªš 5“Ú¬¥}·ƒ7¹´Yò®¾Éj…û[IÍÂþ4æN^ù˜¡ó¤FXHw‹šÂ½k(ªHÞ2xŸþ$ïÞ pRjÌÇ ý›ç×üttIˆîß¶<¾·oydr!å“"µ†Ö÷ª«,›i­0 4yCŽFù˜rÉŒº”Ìi:{f§ø/΋ÔìÁAIòp²³dˆãĺf2öÓ\ñÓÏoµÝ8)ÛËǃâòLµ¸0S§{Ú\>rd–e»†ö«¹êLµXÂ&ó13ڙŵ,‡´ÐÛžIó Ǭs¨¶c3Ú^>f^;ó1£–eE홦ÖEïLbI\2´l_üR¾~a? ×>­qA p"N=ÃæÄ‡çà$`aåËŽ*Ïf‚n&ÌŒ3݃~…nÁv˜Óæã˜NwWº~hrÖ›O8®àœÔQÊIJó6;cãK[è=X]-qÌÙe]y{viÚuLñHšø>ª{t™5%soӖݧ©ÂÕª,Â(WÅø˜f8¤h‡ÎL»Žéâò”È¢82µÄ1 B™–ÓI[œ.ì ãjC-t;F÷o°ÈP³Áƒ„_°lðR×çLµÌv%Ï<í¯th½™ÍØ„MÆ1™#A,>Vù±>>ñ?â”4ÁùFòAò¥’¸!—dkA$”®`+ªˆcF I!FÍÒ—l‡S“ÌÕíc¡q-;C™}òRû4°Šõãs*1JpÁ|=à=»‘Ü®þÙ¢øéþ+غZ®Wj™_‰={¶3W—ú&çH†¶«$•¸ÏJë‰ÆZ?Ó'7Ã4Á}ƒ’%£é²…Íf`õ‡Üާ•Õ;ª5ãÀ£t$ù‰œÓ1”œˆ“…éd#ý—òÍf– ÉWKvrhÕq÷â I¶WŒ6­®8fr>F"NP]qŒ| ˜d °iuÅ1Ç‘q_y8ŒºÆùžŸŸO‹HÊ4¿Ò=zpí.pêì„P§ºâ˜¥ó1†4nÔ•k××î'íуûvB8¤[·ïÖ¬ë¼Ò¢ãc†‚˜`ìä´Ûqæò-ËLS ‡wZù˜Xf†š®$Y'9“¶|ÒQåc†þ %`2íÇuúñŠ|LÆ~"U}‚Uu¦ÜF» l×Qåc†þ $oš—©3a^eöß`wÑîZù¶ÚƧ'os\CÇ€SsTù˜¼‹]7ª/‰BD*5ºQïqë6¹’pè¾Æ‡tTù˜âcÀEÁ 5ù:õWNVÿÓI&Q Kb]š¡û7ÙH2Y’_ÑPRpò¹°¡õÆO“ÿú¿ò=Ìô$8ÙZ¸ À>N(ÓJN4“œw¦ÿ8S'nÓ÷ҒÕºƒqwöKº É’òÄ©‘%ñŠöïÌÎâ ™vÆ.~Ö³³c 9­| ÇaŸHqìaõ"5òc®S£:“Ìp ÅåÍ6Ù÷3Ÿ¬Ê´)|ãäò1œ¸‹ži-”dM 3+£:“¬´Ð¥@æ #&¿]û¿Ï%êŠcäc8˜ò#ýŽÄ£:“¬¼ôM“#‰`QuWZh~¥LŒâžå‡T~ÌÎÅ\DC¶' à(Y$®“/Õ™‹‘@ÍÞÛ{ï™6\wò‚cÕÇÈǰSòÜJòAòšY|Šâ§Cuú%ùËßJ:SÒ“Â’QOw6›Ù|€%Ôu^ÉøŽXwuc<À\äcà@„/³;¡|ÌÕ§žnÿ›¶Š¶…É˳;¡|ÌÃï]}êé‡/Þ›¶ Vt€‘Úg'„:ÕÇ,t½R¬ŸYi#›dIôtÛj‚¡s9ëzôà¾éÖí;…5ëŠc9>&ŽQâ’ÌRÀêŽj|ÌпÀQª+ŽÙ33ô/,möÙ”‚Ý ©®8ÆýcØéì²åŸ·åÉëênÝ»t¶è„ÆÇ´Ct3c_º¡¾Ýp™àBë®Ä(™u-tP?üêúwø©LPW³èõJýà#ù8ŽNJJ¨A<ÍP7 QòÕþÓ|³A¨Ñ_¶}œ™m`ÚCCí mKÉ–fz5W·VQWã~¾”Ïq´‘|Tˆ_*œÝp¨ý8â™nI.•l'¿¥%½J."3l‹ñ1/‘hÙ‹žL¡—2£Rºf»Hû`¡£{rÆ¥ü ™øÕòe 4¦ØùNN=ù†øìO³«{û¼Z²H¿Kõ¼QCêŠcãFœ$•dYpªehùõîóêÎEú§ØjVW#Ãùq-Á«™ÊC'k Í޶éw2ß½m–¬qç»a/°-ÆÇ°1Éãk0\&>W¼š[“vN>H.»³Wɧc·¥ðÕLû%o@êŠcêÏÇŒDYÞììmÀÑ«+ŽY4_”Q=ô/Z)üS5ÙøÙeCÕ¨‡Ì@ÍŒ)2ãÁ,r(WW³èý|›ÞhÊîß¶|h¨c¿¤ÿÒЈÈd;ùH%¾wHÐ&MÓfèß¾dÀ1á.¨É¥JZH^زgOà4U>fèß¼ R¾ÒdöeÏ¡ÊÁ@¹£ÊÇš=VØóþi;Ûd‚ÿ%kô±Ìë¨ò1Ó\LºûÅ®¡^ôæœÜ&±%¢Æ®å¿íÉm‰‡~Û†œP>&>Ä÷0 ù6½ $naçPãA0C}p7ÕQºwéÒÇ´-‡'ÆõGmïœ5)¸„¾)Huì¼´¾I**©“ß–æ¬gÚZF1|–vZù˜àâØië*äïæjùhŽÆ åcúúw‰“4ñè„þKA¡’`4C²}9ØÇiåcbg©»»îLÛK%K:Ak™š yôàþÚ]àÔÙ ¡NuÅ1çççÓ"’vÁ¡óË &êwåÚõµ»ÀI{ôà¾éÖí;…5ëŠcöÌÇ ý›g´lÔ‰ŽIž0’˜€m9ª|ÌNý›•uâ ä"5õàÎ’!å59¼8ÀëÒ6÷%X åc†f½ “ÕâÂLîisù¤UfYƪçj¯ c{åâ5€}œV>fF;³8£–åhLøLy[#€#sBù˜yíÌÇŒZ–QÎÏ;¿ëOáÓü݃ºÂäãdßšl–¥0ï’¹íÐÐÓ¸ýòüâ%Ã18‹æYzzvù.AÝÓ³â»J¶SØf¼HÉeÚ™¶8@ýäc8ùq*{¦ºÜÏ>Gý¡e»¾¡Fœ»ÆLÓú×ÎñIDATWåc€ã ÃÆÄ§Kº“tmaü´©c(RœVéÊ›áÛ@ÇufÙ–Þ€ýÉǰ=ÉkÊšc`ϔ̞‡ÿ‹á«î‡^ê.|HÉ›&Ã1èÆAn£KÆ%åMMX{^&ê^Š;¼s‹2R\ÔP³ÓÊÇô.")½fdZXN2é¤gv^M6ô Îôì,ŸÆ*Él΄-êIæØ¢ÊǸ.ŽÌiåcÉ‹A’·ÙÈ¼Ô ;•¼9n‚`€ P>¦dL@œ³IžVØyàêŠcÎÏϧ…2í‚CÿvÕ‚@äâñ°Êò»ŠMèû{ôàþÚ]àÔÙ ¡NuÅ1{æc†þ-×¥UšTÎF®e^W®]_» ÔèÖí;…5Oz|L3pìÎxEbjpTù˜¼’û‰ Ý“£; •_8¤ÊÇÄ·i¢Ñ0C÷äH¾šy@]qŒûùåêŠcV3mA`uuÅ1ò1@¹ºâó]åêŠcäc€ruÅ1ò1@¹ºâù \]qÌò1ÁœÕCu’ó5gi(wB÷ómæ¬ÎË×™pÙ¶+½`.'”‰oÝÛ¦FÎzú•»W›ËYœ~Í¡v6×IvÈ8­|Ì8I34ÙuW¡õ/l0™›+€wTù˜¡#MdV`iG•ú÷†FÞe`9G•ÉëÄ´f(WW#”«+Ž©$3ö&¼qý’ÜêöTW³ô|×5Ï)O©Ϙ½^ï F'w?ßií@{‡ßäÚ5wVtBù˜XœI¾´tI^<ËÐ:­|L<¥Qû Ëyt‚tHf§~0‘‚‘4ýÁ¶qIWž)Z*Xc¤NÜÏd!œ¬ÊÇ\\ÖD£}›^´¤É”ô*É,×Ìw@­ºâ˜Jîç lB]qÌ&ÆÇ•¨+Ž‘ÊÕÇÈÇåêŠcäc€ruÅ1ò1@¹ºâ˜uó1›=À40‹ºâ˜äcÌvG£®8Æø \]qÌÒù˜ö®ÿÁäÁ”ÔÁKCu≬‡ê UötZó+Åú³0f"Œ~`Nƒ¶$˜Í1h6¨ ”€YU>fèßQºlMyŒM¥È¾ÀÒŽ*3ôo«‹Nº§….NK¥˜Í–vTù˜ §ŒŽÏíCJrTù˜ ‚1¿³Ô †wãi40¯ÊÇù•îi2IWî×IÖ I¶Y’  ÕǸ P®®8ÆüJ@¹ºâù \]qŒ| P®®8F>(WW#”«+Ž9…|Œ»ÈÀ\êŠcINU½¢ •ô 6á´îç;ãl ©¼{P•ÊÇ 1Az¦ÿ´¤<ÓB¦N¦“{¶§ã´ò1±`.ëþ´ÝÓÂòLÉ„³ó-HÛ@sdù˜¡—v˜L‰| Ž*3ôï¢&äZ¦‘ƒ€À‘äcJ´gg–kÿ`Žc+`G’)„2ý’i ’ð(_§¤û÷ŽÏ åcZ=AI÷4ù _¡ßH?Ϊ3ÔŸ’öà8ÔÇlè¶¼ÀêêŠcL“”«+Ž‘ÊÕÇÈÇåêŠcäc€ruÅ1ò1@¹ºâ˜ƒåcV¹Á¿û×À¼Ö¿^&“ kÚh ˜  ð®*ñœ‹…‹$ûÐqOXÅúqL3¯,qŽi®€#˜ïXEqL§02èr*Ý¿Ýâ]…ærÖ$ˆ<úYœø~ÿÉvvvlg;À¼êŠcöÔ ‚üR²|è¬SI’oGæ–PË8ßnàm0·=»ŸcJgMXu)r`jÉÇ 8i‡Î”\Çä?Æ®:îIüP•Zò1ÌdÄãi€šÕ’ií=ôüN[*9ì·«ï[ÜN\Ì«Š8fÔ%ÖqLЕdÆçö‡ýæ‡ñfÚÏ—ï\P4óZ?Ž1§0M]ãc̯”«+Ž‘›ÊÕÇÈÇåêŠcäc€ruÅ1ò1@¹ºâù Üú×]gr0ɰ&9#cÍ2œ€©_¡µÖ=]23G {æ­à8¬Ç4ñʢ瘪‰º¶þ@ͪˆc:%Gñ.ÑÒ¯–OPÐo'žF _2”jRs Íu×éoïÎÒÎÖúuJ6-ùjüö@êŠc -q”M†)%AUÙxÁîq¦dlÇâÖ’u‚8og†–€jÕ2Î÷ìì¬Í tZíÙ¥’sLU¥Î›eñ’Öâ:A¦gT*y ¯–|ÌP :  ©ÿÄÇž:4mAÆeŸŽ@UjÉÇ”ëŸ ŽÊ¢‡¥ƒ¡QqÃΑ=%­‰T8µäcZ³‡C)¸<·—”Ž›ÊÔ *$ƒ³òÖ’u2mÛUm~ ’ªˆcF]bÝ?Ö ˜Í¤-/ƒŒäÓ̃¡>ÏÕ’5îlsge¨ÓúqŒ{øÓÔ5>ÆüJ@¹ºâ¹ \]qŒ| P®®8F>(WW#”«+ŽÙh>fŸ)€ÉÖ¿î:“ƒI†5CS-'›¸%»¬Ç4ñJ&¾9ð1~ݹœ10¤Š8¦3-\¦ Ò'ýòøAP³ÿth]Ýã`òÅÌÚ»»—‚I âUwvö6ßa8buÅ1…’GýxÆì|T¼Z¾`\-¹`²KCU¦ÍLËÎ=pâjçÛ • ÆÌ¶g—‚sL•OpdDºÂ¸³Ø-‰0Z5·Zò1qê¢ÕYâ:¦þÙ™ü¼’K r-«ô¶¨–|ÌrúCLâ»C— ®ÀTµäcZ…‘Ìé¤ò“MAµÌ‚Ý ¯Ýuª+¹TPÒX3¡e8nUÄ1£n㛌]Ê+Cnó foÎFežÆ«.éÌPY%8zëÇ1½‡/°ººÆÇ˜_ (WW#7”«+Ž‘ÊÕÇÈÇåêŠcäc€ruÅ1óæcâÛÙ¹Á“õ¯»Îä`’aMÉ<Ï…ó&ÆwŸÛ¹È>«æµ~Ó Ä+™øfç<Ï£î¥[X¨M]畦÷é/ÕÍ!T(œM:n*^ü¬'XÅØÕû¨"3Ö¨™†ò³Iïl*X<˜‹ S,­–|L—À2íÙ¥àÓÅcûç<º¦º§ñ¬có+21pµäcÚ !Nf´CgÖ½¯Ì¨üJ·!cƪ%S6%“ AÊ-"8€Zò1­ÂÃ0¨%‚)ÿêΫ¸û‹u¯«SR˜KqÌ¨Ûø–\hŒ½ÍÄ%å™§ñ*„/p0ëÇ1æT¦©k|Œù•€ruÅ1r3@¹ºâù \]qŒ| P®®8F>(WWsù˜ÌNÀ¼Ö¿î:“ƒÉ„5;ï_×ßçÎ.%«+_EК©%`šõã˜f ^ÉÄ7«øwÎh]ĈZ`UÄ1’c|²N0=u²Æ&5wcò¥æò åÝhu:©¤o%½€“RW3£8ÜI&TºÇÁ„Ûñâ£&N Vt#nª¤oÉ^À)«eœïÙÙY{tï´Ú³KÓ®cšw€íÅcû7›oêì±=×G¯–|ÌP¤:3á:¦ø\ÒVl«·°¢Zò1åFeD6HÉ@^-ù˜VaØ„2És4Á”þÞ䕆,éa²ò¾Mè-œ‚*☠Ã_â#úШÞdÉPåøÁPkCu†Z(oj禭õã˜#¸‡/°Ší95’10Dl•8Ø*q °Uâ`«Ä1ÀV‰c€­Ç[%޶Jl•8Ø*q °Uâ`«Ä1ÀV‰c€­Ç[%޶Jl•8Ø*q °Uâ`«Ä1ÀV‰c€­Ç[%޶Jl•8Ø*q °Uâ`«Ä1ÀV‰c€­Ç[%޶Jl•8Ø*q °Uâ`«Ä1ÀV‰c€­zÙÚàtŸŸ¯Ý¶MÃjÞòæ7­ÝjtëöšÎ+[%޶Êy%VSž6€$q «1>€$ãc€ã'޶Jl•8†-¹úÔÓWŸzº¤ð`k_E==X—q¾Ô¥;íã¸$^j­7a‰õ®²-kýàÐ'Ž¡^%÷õJºßëîæ¹AI¾©«Hö­é'v®·p£ògšíþ’.ÜÌ¡7gŸwcòZÆ~RÝ«ù‰’GñÌR™w¬_q܉Î3{H·ÿ”woÚ5óíöá;Fù~žüvåñûß7Æ~ã’[±ô ÇP‹þïHÿÇ´}0ô'fášå î\iÜÚ¨õÆí'KJ:–l$8ö”oæPöy7&¬eç'¿?…K.W‹ºÉ!Y8ª{A[øÄkÉWŽ«ÝÏ“K•¬kl›ùïר½}ÚKÇP‘ÂãÇ´Æ“Y„äZ&¯b² k,_dÏŸÔÿ3öaÚ¶®.´kÚÁ‚£iÜδîeb£}¬{HοW{ÚùþÔ°ÿ“'Žac&ÿ¤&ÿðŠÿ~-üqFÓÖXø> mæ¢}›Ý>ú„ù¨÷v‚ W u¯9º¬Àì{cÉ·ã˜ÞÀcåz%¶j–ÄÌüH•¼G°™­ úÃ=.½›˜éN=ìl!Ù«±ý̯(ÄL{+Ž;'QøíØóM8î÷p]ò1Ô"^#fFchâ’¤¸ÚÐRñ¦¤$(ïÿ©½³{…Ú~ã…[Ýlf¾µ}Þ kyP¸±CFeevöshÇ ^*’Ä=%=ªŸ,/Ù“Ë–¡¦}F£ö¥|ýQ߸Næ›ý‡åœ=|ñÞ•k×=¸¿³ê­ÛwîÞ½û / [l×£÷Kö¨[·ï¼åÍoÊ×9²¬8GàtöÉÙÙ”¯n-5ôNÉ1¢ KäcJMp³9 b$-ØŸ8†zùi£B§°[g¬³¢ÕUÕÊç l•8Ø*q °Uâ`«Ä1ÀV‰c€­Ç[%޶Jl•8Ø*q °Uâ`«Ä1ÀV‰c€­Ç[%޶Jl•8Ø*q °Uâ`«Ä1ÀV‰c€­Ç[%޶êe£j?ÿܳÜ_¨+£ŒˆcnÞ¼¹\?8A·nßY» lÛˆ8F&8€›7oFãÎ+Á\¤÷ØŸ8†uHï°?×+[%޶Jl•8Ø*q °Uâ`«Ä1ÀV¹ À1»úÔÓkwaY_¼”\¹v}•žÆ7žîÙ ð7¹#Ž8rkwa7nܸ{÷nò¥c½ÓffZºÜä–8àøßAÎD³´Œ¶Jl•8Ø*q Â_;¶âp%ã|˜®;6w×?_}êéäãméÇÝ„ÉÚ ä-o~Ó¨¥®\»¾Êprq åC–M1íùŒÖŠKÆÇ0Ep°øâ½£ÉÄ${dž’ ›¡:z+nݾó–7¿éʵëçççmJ¦Îh¨¤¿lüxQâf¶Ý &#Ñ‚’`«·Õu™˜îÁÍ›7Û—ºà&. –m•ÑÇÀnFéÓÀÞ~tÒæcâ’·¼ùMmXs°dL#Ž`vqrbë‚äJáR›{Úpäüü¼}äZ µaÍÁ†×¸î€)Ú`¥{š.³F¿öµDÏ7ôVÜìiÆÏ@Ù¥d–é]‚| õùqîa»Y™ ”yøâ½’à&x7òoNÍâËXYZ Zs¬¦&XYZ (W¸3XYZ óRÏsf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlcurv3mluc enUS$žesES,LdaDK4ÚdeDE,˜fiFI(ÄfrFU<ÂitIT,rnlNL$noNO xptBR(JsvSE*ìjaJPkoKR2zhTW2zhCNÄKameran RGB-profiiliRGB-profil för Kamera0«0á0é RGB 0×0í0Õ0¡0¤0ëexOMvøj_ RGB ‚r_icÏðPerfil RGB para CámaraRGB-kameraprofilRGB-Profil für Kamerasvøg: RGB cÏðe‡NöRGB-beskrivelse til KameraRGB-profiel CameraÎtºT·| RGB Õ¸\Ó Ç|Perfil RGB de CâmeraProfilo RGB FotocameraCamera RGB ProfileProfil RVB de l appareil-phototextCopyright 2003 Apple Computer Inc., all rights reserved.descCamera RGB ProfileCamera RGB Profileÿá¹ExifMM* †Œ£«(1³2Ã<ׇiçCanonCanon PowerShot SD1000HHQuickTime 7.5.52008:10:24 12:54:28Mac OS X 10.5.5‚š1‚9ˆ'P0220AU‘i’ q’y’ ’‰’’ ’ ‘ 0100  – –¢™¢¡¢¢¤¤¤¤©¤ô2008:10:19 17:11:522008:10:19 17:11:52 k k Åè “™ÿÛC      ÿÛC  ÿÀ––"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ñ¿€ö&»á |k,6ñ\JÞL œŒ vÎ}ºyâçí#r.âÏÁVéag¬‘ˆú°Çñ7sïÏÖ¼ÿáUÔvúNqpä*JÃa< C}}ëÑ>"jÐêÐ\M1-¸ükÌ•)*Ü×Ó±æá©ª´W3Ó±à›Áâ f‘ÈÌ 8žçÔýk¶ðâÅ]z§ø£Œþ\ьïCí2ŸÖº Bxî@Ý^ÙN=pÇükª²\ªßÖŒâÅÅFq²éúŸnÿÁ|g?ü#þ0‚w2}ŸQU;ˆ¨À¾òðާ¯ö¶¸ ºCŒùÿ"¾ÿ‚Kü4»Ò¼3ãJÖÖuŽêâ ˜„¤~ó&dfP ;sœgãößÃ-mÑ¶æ °';sÿëù®{8ÇQuÑýñOõ?HÊ}ì9y~§åÇ_‡ñéßðT®™‹Rð7ˆÜd•Ë*½Ê‘øÆ>µÉ|@ø3¬øGÀÞñŸ†÷ÅvòE­iÓ ÁCÁ·˜Ü©T¥{¯íçŸ ÁM¼M|‰ÔüâÁóÚEÁà~"½_ÅÞ Ò5/ø$7Â-WVšu»}Vú(×ïÜÁ#Éç 1Äsî=kí°•Ú­N/XÎ0Oçú¤|¾*¸”úÂRkå/ò¹ù›$zÿµË‰Úb±M˜Ï=ôølc¹‚+’}‰¯ÒØÏàŒÞø!áé'‰£û|j wVÆÜúp¹ükó¿Kñ—ˆ¾!OáØ%ò<ïÛÙ¦pâˆC'¦Ý÷,Iã=+õ/Pÿ‚†þÏ_ ü?g¦i>5MPi6 I¦YK:ʱ C±Š…ê8$ŽkËâ,EU'i¾föWÑ+/óG©’QNœ\žÉ}ïSÑ~4ZAáÙOÆ×Z”a¼­hâ£Ý¾R6F¸îwmÀö¯Ç¿ø(?Æ8µOˆz/‡´yËb’`§;D€;7ýóå~uõíaÿ¬°ø™¢¿†¾x]ãÐ ëpnîî@¸¾ ’7ÆI8¯ˆ<ñ7À÷|Yâ/Úë7×ZýœšaC²DÓØ•e+»iÀÆ€³ï[pü^ 8bNR½»++~$fôgZ¼jSI¨®û¶õüÝßø!/Á ¾þÇQë·°:MâÛ¥»Œ(Îûx×Ë_ÍŒ­øŠûl;Ë9U,²®@û€\ǽ~{ÿÁ ?o? øÏö}Ó>øÛÅz]¯Šü;ttíÊæå#›R´rÍ…XåÝt dŒ-~„H|›bÓO k-!säŸL~•óø–ý´îï¯õò±×…+[úÿ3à¯ø+¿Äø'ø­à_ÛǾ}ù×3d(ÝŒ>˜T8õpkðÓãçÄ}OöŽý¤üS¬øb ¯4oIù#HmüÁçýî÷&¾öÿ‚üx“⦭ãígDgk­wQûŽ#«)ó+m¤r0[ð5âðKïÙþÛHðÄ+-}ẃÇ7’ØÃpØÞÐÁ…» ³3ì=«ô,=†ÃÓ ÷µÚüÿSåomVuú_•ªÿðBï€ÐøöPÿ„Á|¹'ñ´ßº‘ï*Ö(ªÄt&Bí÷kî8á1·¢·Íµ±ßÞ¿3?à„ÿ´M×€¥ü4cŸ~ÚL8Í_¼Òo‹ka¸;Wè «»Ÿ+„þÎimÌºí¢ž¦Tøõz>¥àßì_‰–ÀŒyº[L? @®gÅž>Õlg €$B}°Ez¯fŠŒz@ˆƒú]Ì`ÿÀ•«›Q®[c#¬n}9ÿQñåÝßÅ}>úáž ¬Ì±ÉR×YÀ=²JûÃþ Œxål41É|c?¥|cÿc>-ü`ÓÓöÖRŒñÿ-%ßb¾Ì›E:_Ä[9gŒß±Î8Ï·­~_žT¶eQ>ª?úLOÑòe| 7ëù³ãø(‡…Ò_ø(F Q Ô4­fÓ.>]Ϥ8výk‹ø…ñÊÏHÿ‚l|(ŽáÃ'…¿´¯'‰0^fž]‘GƒÐ’3ÇnkÚÿà¢k¯ÛÀ—2*¼Óê’[*¯;–m,ªŒgÕkãŸ‹?hßè–Ú–•/…ì¡+gMå­ÄƒïÏ!#$sµTzÜ×ÜÑÅC U¦õä…½ymÿð°ùu\Úu0ðZsÊþ—ýv>)Ö,õ+ÛV»¶´(úÆÀbdrÝŸ\/à>µnóáv½§h; ŒÚ:‚àL'Ç/’A$ߥ~š[Á*ÿ¶­¬í/¢ŠÓI´"S°ßÈ'< ž2b¤Ôà›>ð½»­ì¯rÐùAíò“ëϽrÇ3§-l}œ8vi(©#òwW¸} YôÖß!r‹©V„ä–t$䜂zö«žø}©kV—ÉfûDÂRUIÞvàýz×ß:ßìáM Q-dì7dí+’§ê:«áÿ†šg‚5‰`Sh8ä~¸é[VÇ(ÚšÔÂRµYiä|9¥é¾!øM¨ÚêÞ{ÛWL”Mew˜ä‰•²=C)ä0ç5ú+ûÁÁ>3o‚^$ðwíæk q`ú~™¯ÈÁnl%‘Jbã÷‹†ÈsÊœuGPø áÏhÓG$LèQ›©L÷•|eûI~Í·À[ÙŠ~Ó§Í2ÌÄ‚ äg×'çQÆP̪(Ô¦žç{zy㲉a©¹Swµî¼Ï ~'xŽIöׄ'·–ß¶GUó•÷"ÜLÂÖ×X4²Êÿž9«±7‡üAi k3øz—Ót‘ýܱ–Ós¬BCè ²Ö¼/Á1¼ŸÀ°ø~gÙê3GzÁF謑«¶pBùÒ¾­_³ðG/Ù_Nÿ†6ñï‹lr~ ÊöOæ€7Y 1‚ÿÖ4§ê£Ó5íUÍœ$ñZÝ+y-ÿöæ“yB§†OK7>Ÿ¡ñ/Ä_ˆ—?h_ücð¢yWeô1ê‘ÄHóO£¦Wð ×íǼmiâÿ Ùk^¹Y´ýbÖ;¸ÂXÝ©ü˜Wä_Ç/iíâÏx­Úìd–Ïs¬¼Ç(ö#cf¯¨¿à‡ß´ä¿¾^ü:ñ|àø›áÜÍj©!ýä¶lO–@ï±ò¾Á’¸¸Ÿ âéâ©=6=ŸõÜYMg%*57þ¿¯‘÷½â/F³ŠÜÅknͱI|¡»“´7~ãÚŠøÇþ GûCÅG…t9ƒ›þÙv¤nÛ#ä Çl Ïü Š2ü‘ã°ð¯9YË]“Ó¡8¬ÖJ®’MÛÌü\øs©‹/Ýîê·*Àú|Íþ5ì¿<Þ)ÒqÝq^á)ÔxsRïó£ãËþ5õÿìeŸ5îq¹šú:ÍÅ6.÷¢ÓîÏ øÚc1¬l }ί&ŸãÏ I¨±b`3ê k âýûIâ½BÉĬªÖºOZG.£àixvøÜûùâ+ ËÝ̱º´}‘ÿ>¶¿íañ>ÙpË>…Øî6Íÿ_£ú߀…þ¢$®ä*#æÍ~tÁÚþÝ>.Ðì»ð“ÜõYíOZýiÔ´d’V•Jüó>ËåWíbí¤Wà‘öF?ØááMíoÔü»ÿ‚Âxz[¯þ²ÑžoíDzŽÈDØ>kÇ4;É€Xý+Û¾ø6ÛÀþ²ÓtH’;{5òÆÀäþ'ŸÆ¸Oø(¥iªÿÁD¼)¦Î¡¤Ñ<$º›‚xIâXã8õÚX×CáŠ‘é– …,0·¥zj}aR‹ÙE/¸úüƒõ\<ê­å&ÍíXÛo 2hÏ ž1^=ñÅi=ì$d‚ ÎvÔŸ¾#bYY‰]Ùž:õ¯$ñGG›$ªI#5ÓJŽ·Höv–¬Àñ߈ 2É,¬>Rqƒ÷«Â¼gâó6¬þK îõ®»âF­=ïšñ;„' ´õ¯פµYöäðEz°¤œ]Ï6µVåt{O|tÐÁwc “ÖŸñ‹Âp|VðT¶×x2„% Åy7‡5É-ž0“œf½KO×¼!„§’¼þUò¸Ê/ UT‡sº3U)´Ï‹ìU¼7¯ÿbjo± ÚÞNêÊyöȘýÁ>7蟿a¿C៳ÛÞx^ì}RÚ7Ɇt$‰Þ‚$Ï«5;ÿ´+æ|DšH×jI&ðãø9ÏÔu¯ÓŸø5Ïãz[|Yøà;Û•xµ[ }WOˆ¿ßxX¤ª=~YPý½šñöžÎ·G¿ÏOÎÇÆbí:}VÇÖ¿ðTƒ'ÃZö“ãÝ-“y7Rl‡˜d$z¨dÏû _ü9ø¹'ìQû|øOÇVï*xsÄ“ -Y"É „$™£*ãÝE~×||øIeñ¿á»á­RS©Z•߆aóFGÑÀü3_¼'k=”v^4€ GBÔW÷2 ;d‰˜09ëÈ9¾‹ N†XYz|žßסòXº¯ YW_Óþ¿Ssâ—ʼn¾5|Xñ7‰¯°ŸÛ”ÓÀ»ˆ1ÀdKøF‘þ$Ñ_þÞ_´~£ðÇFðî“àKdzÕo]ï&xŽÒ((ªqêÄÿßW½Ó¤”ËCÃد޻jp>‰ ðåü8‘¢…AoïÚ ý+ê?Ù›ÄcAø}z›¶åIúñ_0øTŸZ†1… (Óÿ õo‡~'6þ™c}¬c*}¸¯:¢s‚ùØ'Èæ¼ÎGÅ·ßÚž3»—¨wcúÖÎµâŸ¶Úø]“ ØÞ$méÊíþUÅßj-UÜœòsZÉ|¡iìç•¿ñÿÅMX{«ÈËôOÌû£þ•âÑÿo놙˜­×†."èqѧD¯Ùk-@jHHÁÏoZüÿ‚iøÆOþÝúàýš}"êÞGäRcr3ïò ý¬øEã%ñ-²I¸Éëï_â%G0…&ýÙ%÷ݯÐúl· ªàUºÿ€~~ÿÁLoìô_ø*ˆÓ—¯àÑéœ^JSëòÿJã-üXËvÃ~ñ]/ü'F¶ðücÂÞ*¼”Eo«øxî v6÷Œ~-|}â?Û»Âþ•¤×xÁb*n'Þ½8g9Ùi—báKf{ÇŒµé.¤w‘×h=ó^wâ Cíñ”‰›;ºÔzד7íûá£Ç£É8-ÇïP©úóYoñÌI¨ áóL õÆAâ½Jt¬¬Ñ³ÄÂzÆZ÷‹n¢ÓíxãÏZò}Zé.5òÔÎ0+Ïþ2þÔ÷¶÷2A£Â”õ'¡ÏJñ}Kö…ñ_‰/D÷N´@s€ÀõÅuÇ ÏO.¾g O•j}Kck±Î»Ë3#ت˜Å|àk6S,‘ëw—ªëíÔ×Ð ~%·ˆôµ[¨ü«˜Æ3}Á¯›ÍðsƒRèz¸ l1¶Ìùïö»‘ôÊ£!—æQŽ•öŸü¹äøöö»›QwK­/Â÷’B£‘&d‰ï@±ÏsŠù§ößð£ê^´Ôl¢œÜÈ#¥züKöª°ýƒhïxçǺuΫ¤Þhhå#™a1³Í »÷09ÀˆÆºéN5p*]šü¹àcðÕeŒ•:jîIÛî?¦¹íRE)*SèÝyà×ä§üNËHð§í_ªÁá‰G½†+Ëè‡Ý·¹‘Aqï• ÿW5úá?Ú~X|DÐ.óá‹ý$k+4ƒi[+Ì9ç†G¨¯ç¿þ ûUË«[ø÷Ç·nñê¾ šd¶MÄmiŸ0ð þ^ÎMzÒ­†ß}ÏÍ5FKÞoî¶çÊ>>ý£Rûö˜ñ?ˆÖ×IÔ´øÑ´‹!¨XC{n#׿XæC„î 1è®[ÅÞ Ñ¾| ðUόཟÄþ'3ê“ÊÏŸ.ݶˆ£*za¾¬h¯F¾_ Lý¤Ö¯ÈTq¥ì´=—LŒÅâ}f%8ùe#ÿ5§ámjKdh;e\øV^—ÇŽoѲ7Æzû¯ÿ^£Ó.¼±?\J‡¿J-öG%%jµW™6¦¤Lsž¹¦ßß}KºªÅ,rN6áºÖ¦¥jºƒ¯Ù>müŒV?‹´ómáËÈ®†ˆçŽ£'r³‹Dâ•â½O_ý|f±|{ðV©¡L·ÝA:¤Ñ¾U”¤ƒ þ5ûaû xÂ]{ÁÖæåÎä |ÝkðöÕ¿âcð¦IÊ—3ZàY]:À…~ðÿÁ>®WPðª´xùXdµð\YNtçmûf}fB­†;è®ygükáü'<5úæßþmB-ã¨"â&#èr?Züqøß¥øçÆ2ëxÆÓKÑô½Ënò[î’ô©Á ‘…ã8'®+÷Ÿþ O¡ÿiøçÀ²Ï-´ÍBžä½¹þ•ðÆƒºTömg¹F pè6þ½vQ­:5U•ôNÌúœ§^^•Úwz¯Sò%|'â­3WŒ_Þrî18ù¹=GAÆ+íï‡:½¿ì÷~Ú©r­ _õ˜k®Ðÿcÿ &´×—q ©Pî+Œ‚}Ïô«Ÿ¼*š'X1yT(è=«Ø•e^¤l­mM0™ké)6×™ð'ÇÝy§©—åÑ¥i-,füyÑá$øywlØ/ùª>•âß_OÔü>›l½Fù[xb={ôÅzçŒõ·»‚éd-å˜Xëž y§ì¥ðwSøÏâ[[?Ff¾ŸSŽÂÞ—÷³Ë4SðŒ×‘‚Š…)»+ž…[SÅÓœw³ü,~ÅxïâÍ÷ìñÿ8ø]á-QžwÆúRÛÇHt³iZv?Œo ÛJüsý¥ü@Þ<ø“§è`‰,ôhþÙp¤eZFU#¹Æ?ï£_£ÿðTω°?àðÕ­âÍ¢|.Ñaðì/Ü&Ú ³È>®¬>Š+óÁ1KâËëíZegºÖoE@2Ás…P+êp´ž ?ŠK_-?Cò¼EíÆ­e²oïlãlÏ¿‹'ð¢Î›e³°häQƒ¸nŠýDý¸à‰š‡ÄÿÙàÝŸÂK;+ˆ>—Zy]aûLwJ×¶2ÑJU|1ì(ªÁç˜Jô”¥UEífû;_ç¹Ó,›MÚºßïùô>!´Tÿ…ž§ *¨'¾QO J²”Ò.mî ±üóT®åx¾"Û² ØŒ>ÜuÆN?JÑmUe¾a$O,XteçõªÃ7ì¡nLJ^¤¨×Ÿ/sá‡î5/ê0L¨Í´’§ýk‰ÿ‚†hž,øOãG·±kK]ØÄérq$!'åùŽGz÷¿Øÿâ×ü+oŒtú„‘\YÈûJÊ7¢1œŸ¥z—üoÃÚ~§¬x'YÒ­m¢¶Öô;”‘"@±³G"žþÚÒ¹§‹åÅÆ‹Žé›,DgJíkt|_ÿýÔÆ£¬ü+†}¡›Å"ÕØ•·] ϶wgñ¯ßߨkÃw ¿¾±ºUUY÷&[$þ]+ðöÓâ“â„ü»‘öG¡Ÿ ¸ÜMÄ-í×ë_ҟŸýƒPK«TÚà gŸÖ¾CŒj5V”;¯ÉÿÁ>³"åö5_gùžÿ3‡ìÚ—Ãë 8®âcß ±ÿP+äO‹ÒØÉ ™Ø„™Î8¯§à²2“À tÍfØeô‹K›à=|¹ $~#"¾ ý­üc&•ðÎãQÐ7KoušSQÆAèEz˜È*u(N;J+ðÿ‡GÒðŽ/ÚaëÐoXJÿ&—ê™Âhßm®¾ ¦ƒáÀ²É)s4¸Ï–Š $×7ñ×âVžtf5 i<ÌÈ6œíÁÆ>µÖþÃ?bð§€ncR³ÖjÍlwö_ỳV·q‡AãéVãñÙ“~g¿JñµÄÚ«*ešÙ›ç@s°žâºØç’£Ž ¾ßZXº*¢³3Ãf-#мE­­Ö‘4¨2þS ç©ÁÿëWWÿ™Ö|Uð7ↅñKÐ…ÌòæâÒKÁˆ–6Œ¸ï˜ÙÕÇÞ¼ÛíF+1AZ¾°øãë{¯€Z&•q¯öA–&   Û—ôc^v N­Oa=›¿­ºæ5°˜w‰¥½¬ü”•¯÷ž[ÿøƒ5þ‰e+GÄ×,×S³’Í`Ò7ü ˆü×{ÿký”á¡¿k]§µSáÏÖ¯Ér?”ÃɈö%ä Ç÷Uý+æŒ^0OˆßõBÝ÷ÚÃ'Ø,œâ4$3÷˜¹üköÿþsû07ÀïØ±Ud}ÓNZŸÍþ„ÞükÐà»o–à˜˜{2Èùö®“ÅŸ 'Òm¥»xÉ€´žãŽkˆÔ5¤üFðíäG Ú@ê7Ž?ñãù×Ôßtû{Ÿ…e †²/ÏcƒýkôØÖt£I­žŸ‰ùf>¾‘ã<oâŸÛÇç)½”í³)WIûcþÔ7?9“P¾Ç—oo)Áþ#´à~x¯7¾½{Ï\MrA’òÜ»`u%É?úw{iˆç–¶Z|÷9cQ¨ò܃öM²—Á^'³Ô5íö½ ôF!–EóS†Óêõ¯˜â ¶3 u§¼¿ô“ê2ŒEèW][_©ñ·ü…'örCj…•ô­IÓbcú þò_¾GâOØËá”þ"¸KÓ¯xí%ÞEŽêxéˆ5öçüßJ:§ì¾èªë-M±6¤Œß5ñ7ÁO‰j~É’=ýÜžI–+p$’I'ÔîJG×ï*œuä×»˜åî¾ ;Á6¾Vý ²,Þ9V>n£÷dãÿo+/¹ë÷ž[ñ×Cø™wà©4ïÙÂïOµ¼Ó­Ñ\Æq…]¸R¶q^ikð·Áþ"Ž Ž>,ñ`ñtÖ"iíngò¡YÈU*„ 0ß¿à­}‰¬hÃóÜìÁʱVÈ$G_­|ÑûC]_øväËoegªG/’§ï¢>™ïŠùüHÕj-ÛÓõ?Z”aìÚækúó<âgÂOèÚvž¾´Öumbæ9°¤m#Á XžäIî |ûñ?àÁñ§7‹m¦F†'ó$ æRG}+×¾%þÐzõô¯ei´.¸'?˜Ír^·7’³ê ÒÎç’Nz×ÔSR„S¹ò˜ÿªÊñMÉùèŠ~ðe¯ƒmü2!FœÉ>ä÷9©C‡¥rNÒ[içò­}n±¶,„în0Ojæ®îȈ¢0à’;ÖŸâ9{= ×YÊ)ç(×ød¬Î‡öý•/¾?~Ô^ðÕ¾¯¥Ühšäè¦üÌ!Рß'˜®C,›Càs¹ˆ×ôÕ xvÓñÒ|=VúUŒ[ÙCm[xQUUös_ɬÞ7{I{¤Îöìò³)*FN{WÝ¿ðN¿ø-Ž¿fZéµ+ÿü>H]f±º™d»·m§a·™ÎTÆUŽ0x澇9àœ^*”qTewËðu»Þϯ£¶ÛŸ„ÎèQ©*3ÚîÒéeß·â~åêºbù»’6gΨ'4WÇ_?ཟ~'Íxž&Ÿ\ð]Ä8MJØL“Ÿ#Â[žz(¯Ìq;˜Q¨á<-KùAµ÷¤}m,Ò„¢œjÆÞ¨ü8ñ´ßfÖ´—`~K•oü}+è/ˆÞ1];áŸØb—-p€F ä)ë_9üHº –²*ò“uüô¯Tø†Í{ámèpŒ~£ükíéÓS…+ôlø<ÇJ­ù,Ó4‘“ƒY÷Œ#ñ}¶奻ɔչæÛÏ\ÕH|A§É$å§Ïé^Õ¬y±4¾Íåè2 üÑÏ2ûì×õ ðWþÕøYák½ÁÖïE²™Xu¼g#ó¯åÃÀsl¶Ô#ì—ÒÏú×ôƒû(üEIeo†3³/>Óp:gý1üÅ|gÕŽØT“³MþHú|‚Œ±¬—êbÁ]´á©~ËŠêrÂêX¿™k0Çé_’š·Ä´ý—?g…7þ Ø÷Z‡©$ä“’I$×ÉŸ´ÿìñ©k:åæ©ðT$·R¡’m8¾ß1º“ XñçÂë ‘)-ôÆ:ó¹àÓ¼4ì°²–XÑãÿëÞÔn-üMi}mp¤©ITŒ÷¯.Õ5ë›Û¦r_,I$ׇC '\ú\neJú-N“Å~"Žâ}–îHŽù®j{Öº˜!à{U9gd\‚K“Ö§Ò"g˜Év5³¥ìÕÛºÒ:]3# Œ×ô¥ñ¿‰£Óô9‘_ *ùKß#‚AúÒ‹´Ñ¬k‡@Ëé^aâ{V%IF~Qí]™>PóTe%îEÝþ‹çù™fPÃ8ÅûòV_«þº’M¨å˜– Ÿ^ÿ…MdnnÌv¶NêÛ³+rpOE§Ú²tõ7÷ +°X¢ä±è zWÃìúzß*’ç+l­ÎÕï!>§×Ò¿bÃáž&I-Ì1Ö7{›¶OY¿ÌÇ€íîÝ讯Bð¼×¨e‘7u–A–“éè=¨¯ua¨Ó\¶G…,LæîÛ9Ÿˆ¤>¼pRLþ`רë~/µÔ> xjÚÕâ’êIXJ¹ùãTþY&¼‹Æ“³ès,½w/óãWü$ïy¢Ä7UÆ>•üÏ…¦ªSMôwüÓ3%ûÄü;†ÜH5é?þÇâ{6½™÷I=¦©j‘c¡]:i”ýIOÒ¼æò&˜8Á^µzÏìy┋âg†ô‹Ö;ýLÂ7týõ¥ÄäA[ã¥%BR‰æÇsÆ<6/5¤ë‹ÍØôÊ)¯Þ¿ÙKQøa_„÷öm»³îÎv¦Ò?¸¯Àß «Xø¯\·s†ŽdÏ×nþƒ_½_°¢.¡ÿÍøUp2ÿñ(h¸í²âUÇ¿Jù7§Í‡¥.Š_£>·…'ˈ©èã¾5|dûW„õuƒº>D½EcÁtÈQù°?…p¿ ­à+MBá‹\ßÍæ3“´tαk[±e¡êåp†âDTô#æ'ù×)ð›Ä…¶b3†´b©ÈÅ@xG–ÓÂpõ:‘Þ¤¥'ò|«òüOÌ|EÅJ¾q8?°£Âÿ©è¾6ñbZkΕ^@ÔW77ˆÇ‡ìo5 •àFçþzãŠÅ×nßXÔ’yHùÀažÕÇühñ{XiqZBÛŽw‘ž£ Í~˜ãʬ|<Ú9¹¼áÿÛGàpׯm-Ó_´–[OÊ]¬“Æq»û˵¿àUñƃÇá·ˆ¤³Ša2†;Tãxø¯£?g?Ü|ø÷{ä%ðoŒìúœhrtéòvO·û¹8$vnzVïǯØÃþÿ\jºWˆm^ÒäïÙpƒëšþjÇaqcWU5M¶ã£i¦ôHþ”Âb°Ùî]KI§Q$¥ªM;ksâÝᮥã-I-<=i=åËŸ–8“'¯è>µÛj³‰ü§5ι¤É Üì]N;óÏõ‚ü[ðëöQðœÉm(×õ¢¤9¶ ¿£?`=kÁ¾5|Rñ‡í©ËrºN4çí+y?uz¿Ñkè|ÉñÅ×:Íë[Â’G œÇÌõ…a¤Ï{p–Öñ»O)ä÷¿¥{ü?´ÿ‡³E‡Ôk>#ºàÜܱqÈŒtP;±ì:ö®sâ$Pü5ÐÞÞ@××_5ÔÀrDz‚yÚ?^µú~#§‚¤¡þµógçÕ³™ãjó=[Ûþ±ç‹¢‹­rÇCÓ[‰yî¿Ý±ü¯sðõ”m,(,Ðcî¢×|ÓÞÿU¾Õ®²ÃLlÞ§“Óó¯gÒÎÈÑ!äôZörÊiÁÔµ¯·¢<œÎ£RP¾Ûú³ †ú8"ºÆƒïE`\ê‹!;6º¡Ø<{š+Ôöhò®ÙæŸ.g½Ò¥tšHþÊé.Õ<>n¿¥t½’ÛN…Õ¾c_Š+ù§•$ÒGëxÖÝ®zÿÃOÁãO jßl8•Y°ØéÅsºf·'Ã{=^°P÷zN³ Ê3ådéŸ|QEp]ʤàöºüN‰œe¾¨n¾"k×(Sx#˜¨è¥‹šýÒÿ‚]jRj¿ðK_,§&ÞMJ$ôöb1ùÑE|ßi€…¿ž?©ôü/þöÿÂx7ípéz–c¤Îd'8í\?Âßð4ÚŒÀñþ}¨¢¿¦<=Š`RþEø»Ÿ‘q“rÎ1Mÿ7åc¬’Õmð¤)/õâ?^C©LѶ6ÆÏ8¢Šú÷¹óTÏŸu»ém¯þGe.ܰnzÿõëA-fÖ-Ö;«ëÒŸ{o˜H¢Šæ©äu©8­ 6þ Ò´ $¸·k™$oAœ{f©_EqªÌl­ž;HN2±/ c>¼è=¨¢´¥gÎÞ­“x‹Áö{m+LŒµÕô-=åËrÒF£>ZžÀþò_í¯É®øÅà#`Þ~h¢¹ñúR#ÕÊ=ê—{Øï´?Gà ÒÆ®ÊHã»rOùô­‰µc§O*g1¦Ûñ*”¼¢(‚§(ðÒ"€—ì|ÚtnËÚ=¿’Ç@Ý“Ûx§"ÿ¹U‹Mëáèlñáò}N?¬gFÐÞi§ÆÆ½´¿õŽ÷ôÁÑ´Ô{8ï:±vqþº7o7¿pMµ~t×þCéSK ·Ï Yùtgqƒaý®í·tœMCcãîãa¿gR“e((¬ž?oEÌ^<“\Ð'… T2@a†™lßêšæ4{z@a —¤Ž6ïê•Ý·bã+·0F8œD†‡qzÀÛÚ#ý`Õí“Âáí¡1ç":¤û鎃½öa˜4¼Y›,°"…À„BÐS’"Ð åõk/wÑÓkžxé\¯]¾Ô§Î Ї iù ssUÁœÕ–4Cv¢)ŒõZnkÛâòÕçÕ‰6TíÅ{ÝóÔê,"{ §³ *² ™,Äb1PDÂy"Gw÷Ÿ¯±øüÐØ3Q·u uHáM Löøå$€x½ÈI¦ô\Cz9°ªŠejwW»•çy@(Nõ‡qþpëahKøx®¼D »Ëí;òú ‡‚€×.êC~^n (åÑ ²‰ó$+·®Ô™Ó 'øºY@šJÀJ$/7åô:­F†Nïuj’uC™ebFš28pZŽå‰°·ýÀúô ¢ÛŸ.=eÈÓÒ+/-T Då8ÜÏX:Jl‡Dêr[¡ä*ž‡(rÈÓªKe€û/†ü‚’4N$æâ~B‘(2Ã1W²`l †€ãÄÈÐ,*³Ä…"ËΞ ^‘¬¯œ^³ô®Ì,TÊ‹Îãõ 9M[pb”û¸¯Ë:< Q«b‘ªŠ`†QÐÔåèÞ)gc"°å†™ÓçÏ´,¯Ÿ•÷¥ùøî”áÖf„%/àXs³íøÏvU›—è/{ÑóÅ9½{OþxF—,`p4Šý£ÔÖèŽ5HÿŸ"Š€%·t¶^ÅÌ]Šþk u·™´QÄâ2ºLóaY‚·6}ù‚Õh2¬Ü¹,`fXîýe³,˜®´ÀåÂìµÏ¢Ó0+Öwâh×H»ª·[.ŠNV—1.ÃÆ1]ƒA@àC¾êKîÜÜêxM[¶ IÍî½ÊMkSµs?~`ö¾ÜT9`² xeÆ<>Lú}3 ÄölGV뤈 hØ(”ˆxŒaº½šÉg¾h¹gïødó%æ5v]—‘Róö#µ_ÏÈOÉ$K=˜âê«æG·C{rxN b A›šŽscî [v¯ùitüÇ«yÌ|]j宆õ§<îQ""’åÅãq""r´þBþï7ý²¨õòïÝF;¹¿yžÀWý¯?¹<õ†Ò¢BÓÂeO®[g¹sI‘ZÁ@Eœm³"nŒ»\Ò-GNüÔ¸ïëN»ã»¢‰Dœë~úåJSë3ÍU·­”zÏv©E­.ôÇ#N[÷˜Gðʲ­“(ø¯€©þâ’bš> …Û‚cS&\'I„JYšIEND®B`‚vlfeat/docsrc/images/PASCAL2.png0000644000175000017500000012757612237004745015250 0ustar dimadima‰PNG  IHDRFdúÄ™ygAMA± üa AiCCPICC ProfileH –wTSهϽ7½Ð" %ôz Ò;HQ‰I€P†„&vDF)VdTÀG‡"cE ƒ‚b× òPÆÁQDEåÝŒk ï­5óÞšýÇYßÙç·×Ùgï}׺Pü‚ÂtX€4¡XîëÁ\ËÄ÷XÀáffGøDÔü½=™™¨HƳöî.€d»Û,¿P&sÖÿ‘"7C$ EÕ6<~&å”S³Å2ÿÊô•)2†12¡ ¢¬"ãįlö§æ+»É˜—&ä¡Yμ4žŒ»PÞš%ᣌ¡\˜%àg£|e½TIšå÷(ÓÓøœL0™_Ìç&¡l‰2Eî‰ò”Ä9¼r‹ù9hžx¦g䊉Ib¦טiåèÈfúñ³Sùb1+”ÃMáˆxLÏô´ Ž0€¯o–E%Ym™h‘í­ííYÖæhù¿Ùß~Sý=ÈzûUñ&ìÏžAŒžYßlì¬/½ö$Z›³¾•U´m@åá¬Oï ò´Þœó†l^’Äâ ' ‹ììlsŸk.+è7ûŸ‚oÊ¿†9÷™ËîûV;¦?#I3eE妧¦KDÌÌ —Ïdý÷ÿãÀ9iÍÉÃ,œŸÀñ…èUQè” „‰h»…Ø A1ØvƒjpÔzÐN‚6p\WÀ p €G@ †ÁK0Þi‚ð¢Aª¤™BÖZyCAP8ÅC‰’@ùÐ&¨*ƒª¡CP=ô#tº]ƒú Ð 4ý}„˜Óa ض€Ù°;GÂËàDxœÀÛáJ¸>·Âáð,…_“@ÈÑFXñDBX$!k‘"¤©Eš¤¹H‘q䇡a˜Æã‡YŒábVaÖbJ0Õ˜c˜VLæ6f3ù‚¥bÕ±¦X'¬?v 6›-ÄV``[°—±Øaì;ÇÀâp~¸\2n5®·׌»€ëà á&ñx¼*Þï‚Ásðb|!¾ ߯¿' Zk‚!– $l$Tçý„Â4Q¨Ot"†yÄ\b)±ŽØA¼I&N“I†$R$)™´TIj"]&=&½!“É:dGrY@^O®$Ÿ _%’?P”(&OJEBÙN9J¹@y@yC¥R ¨nÔXª˜ºZO½D}J}/G“3—ó—ãÉ­“«‘k•ë—{%O”×—w—_.Ÿ'_!Jþ¦ü¸QÁ@ÁS£°V¡Fá´Â=…IEš¢•bˆbšb‰bƒâ5ÅQ%¼’’·O©@é°Ò%¥!BÓ¥yÒ¸´M´:ÚeÚ0G7¤ûÓ“éÅôè½ô e%e[å(ååå³ÊRÂ0`ø3R¥Œ“Œ»Œó4æ¹ÏãÏÛ6¯i^ÿ¼)•ù*n*|•"•f••ªLUoÕÕªmªOÔ0j&jajÙjûÕ.«Ï§ÏwžÏ_4ÿäü‡ê°º‰z¸újõÃê=ꓚ¾U—4Æ5šnšÉšåšç4Ç´hZ µZåZçµ^0•™îÌTf%³‹9¡­®í§-Ñ>¤Ý«=­c¨³Xg£N³Î]’.[7A·\·SwBOK/X/_¯Qï¡>QŸ­Ÿ¤¿G¿[ÊÀÐ Ú`‹A›Á¨¡Š¡¿aža£ác#ª‘«Ñ*£Z£;Æ8c¶qŠñ>ã[&°‰I’IÉMSØÔÞT`ºÏ´Ï kæh&4«5»Ç¢°ÜYY¬FÖ 9Ã<È|£y›ù+ =‹X‹Ý_,í,S-ë,Y)YXm´ê°úÃÚÄšk]c}džjãc³Î¦Ýæµ­©-ßv¿í};š]°Ý»N»Ïöö"û&û1=‡x‡½÷Øtv(»„}Õëèá¸ÎñŒã'{'±ÓI§ßYÎ)ΠΣ ðÔ-rÑqá¸r‘.d.Œ_xp¡ÔUÛ•ãZëúÌM×çvÄmÄÝØ=Ùý¸û+K‘G‹Ç”§“çÏ ^ˆ—¯W‘W¯·’÷bïjï§>:>‰>>¾v¾«}/øaýývúÝó×ðçú×ûO8¬ è ¤FV> 2 uÃÁÁ»‚/Ò_$\ÔBüCv…< 5 ]ús.,4¬&ìy¸Ux~xw-bEDCÄ»HÈÒÈG‹KwFÉGÅEÕGME{E—EK—X,Y³äFŒZŒ ¦={$vr©÷ÒÝK‡ãìâ ãî.3\–³ìÚrµå©ËÏ®_ÁYq*ßÿ‰©åL®ô_¹wåד»‡û’çÆ+çñ]øeü‘—„²„ÑD—Ä]‰cI®IIãOAµàu²_òä©””£)3©Ñ©Íi„´ø´ÓB%aа+]3='½/Ã4£0CºÊiÕîU¢@Ñ‘L(sYf»˜ŽþLõHŒ$›%ƒY ³j²ÞgGeŸÊQÌæôäšänËÉóÉû~5f5wug¾vþ†üÁ5îk­…Ö®\Û¹Nw]Áºáõ¾ëm mHÙðËFËeßnŠÞÔQ Q°¾`h³ïæÆB¹BQá½-Î[lÅllíÝf³­jÛ—"^ÑõbËâŠâO%Ü’ëßY}WùÝÌö„í½¥ö¥ûwàvwÜÝéºóX™bY^ÙЮà]­åÌò¢ò·»Wì¾Va[q`id´2¨²½J¯jGÕ§ê¤êšæ½ê{·íÚÇÛ׿ßmÓÅ>¼È÷Pk­AmÅaÜá¬ÃÏë¢êº¿g_DíHñ‘ÏG…G¥ÇÂuÕ;Ô×7¨7”6’ƱãqÇoýàõC{«éP3£¹ø8!9ñâÇøïž <ÙyŠ}ªé'ýŸö¶ÐZŠZ¡ÖÜÖ‰¶¤6i{L{ßé€ÓÎ-?›ÿ|ôŒö™š³ÊgKϑΜ›9Ÿw~òBÆ…ñ‹‰‡:Wt>º´äÒ®°®ÞË—¯^ñ¹r©Û½ûüU—«g®9];}}½í†ýÖ»ž–_ì~iéµïm½ép³ý–ã­Ž¾}çú]û/Þöº}åŽÿ‹úî.¾{ÿ^Ü=é}ÞýÑ©^?Ìz8ýhýcìã¢' O*žª?­ýÕø×f©½ôì ×`ϳˆg†¸C/ÿ•ù¯OÃÏ©Ï+F´FêG­GÏŒùŒÝz±ôÅðËŒ—Óã…¿)þ¶÷•Ñ«Ÿ~wû½gbÉÄðkÑë™?JÞ¨¾9úÖömçdèäÓwi獵ŠÞ«¾?öý¡ûcôÇ‘éìOøO•Ÿ?w| üòx&mfæß÷„óû2:Y~ pHYs''MTØÇ iTXtXML:com.adobe.xmp Microsoft Office 1 ×#Å@IDATxì}|TU¾ÿ¹÷NM&“Þ )„¡iÀŽ]ÃÚŲ¸««ÛÜòvŸ&Ùúvß¾¿o×m¸ººÖ]â*v1¤%½÷ÉL’éýÞûÿþîÌ„ ¡)*¾Odn;íþÎ9ßókç\N–ev¾†rÆøRƤpýâp´†Ïy#÷÷Æã§À8Î `Î×À—qœR·Êfëò§vwl}õPÿáÊJåUUªóµâãõ§À8¾ÚàÎSŽ‘çŠ¨›td ¸èÍϰ'e«‚Þ%…9\[˜ð ‘½‚1¡„1ñ«Ýãµ§À8Î7 œã(ì .zë`ó‹ÕfפASŸÿØS·³®cýk5C÷! Ç9Çó­K×gœ_} œoãqP§ø.@q¿#×f 5ïJbP¥VÍN6ú/*Èþæê §&¨‚X]\\üê7ÇøŒS`œçÎ'`<Šàß=Òôâ¾G®Ón 4*!(Éœ•c@’ƒ’J£š™ã_”—ùÍkf'ƒãùГÆë0NÿC8_Di€b¹¢S<Øã(6¾°À™ëuÚƒI½ U©¸hŠéÔjfÔiT1œl´º5»Z{þ²éÈÐÝÔÄ1çø¨mÆ_eœãø’(p>pŒ£8EÏ¢÷޶=¿oÀ=Éã´ôZ1Å syxâE)è4ªI±:ÿâü‰ß¸vfÈ 3.VŸ@ªñ‹q ŒSàSPàËÆPÜ N±êHûóûahq;ŠQ:Vi@`ÄϧJ]#! Š2ÀQ­ÊÕù–æOüæUãàø)ºÀx’q ŒSàãø2EéP<`ò\XIœ"@Ñ¥€"8E©ºˆP<~-Õ§ÒIÁ@‹Ý§ÝÝÖýç͵ƒk)ƸXMTã§À§¥À—Å1Ž€âaS`áÛ›^ qŠpŠÚ0§xü•"°âé—îÈ /)ç(ÉpŽêÉñZ/Äêo^]˜øl85Dñq?Ç0-Æã§ÀRàËà Õ$rÞ>6XðÎ!¸ä˜ÝŸGƒbCï@(‡øFJ ¤‰Ò*R6â¿ZàÕZ1höév5wþåõcƒw…Ò2±¢‚8އq ŒS`œgL/šc¤-’™¼»Ý~ÙÇ:ÿrÀâÊ ¸bœ^Ëã>aBé2ĆWÂ((BD:Ð9-š&„çôñ*U¶AëY4)óG7ÍMý#nSfôx|m5ˆ0Æ)0NÓSà å×TTø)¨Çólš¬Õçö;,N¯‘ÙÔHA¥î28C¦p†TQBžn D‘yüæö™(ó€Z°>¯WÒ³‚¼Ñ÷nM% %¤Äãaœã§À)(ðEqŒÀ:eís„¤*iÞoüÁÁŽÁ_ìë¶0• ª^¥àæH,@ Î×*xwÇGkÈM‡Y½¢¬W!ªJæ¬.¿ì 9µÌD·(«fNÌ`óÓcÿyéÜ´o@9#Üb9ÎKÇ9ÇSt‡ñGã§QàsÆòrÆ—•Q1²üVíàJ9¸qQVÚOâã™*°£Õþ؇Í}建LÌÀ¤ FP©D°•ZA&PV€P#L§Xb´–c ʤÅ3¬ˆaœF˪[{Ùæ¦>¶pB:»hb\ÅME™ß@ÖC”ÿ{µù–[/Ìù ]ÓÚêÒ/zù hPqLáZ© § µÓk•©¡´´”ŽÊùiG§À8Î>W` ƒ¢²¢åÃNwÑË•5N177Qÿ‹?Ü\ôhä-¶µZ;Ø9X~°ÛÌÜno0F§SÅG«™'•£´j ƒ,kyAJ6F MJg©1LE¬$Ço3ÙsM>Ñn³ýëÚÙiŠÊ¾¥[ê¾öѱÖç4<¯^5/ïŽï¬šò"•I™’’/ÄZMâûg¶òòº£´t\GJ7Æ)ðPàsÆ(Ò2¿Rik«{Áæ]‡_ªhÈïuzØå¹)l^NÊÏyÕôÇ"ïx Û]º§} ¬~ÀÆŒ*ô‚*O@dÉ1Ä-Ê]Cn.ÉÖf±¬~Kj”ªæ”ÊE‹œ–mP³âœÄgÕ_?¨¿ûù=-¿Ù5àŠg?»&;Ñ»ªhÒº‡W–oD«(K–S_=!Ö{é¼I_ÿÖª)/PÚÏ«`ø)f´ãOBóK{_êÙuì²€Çcá5XðMÎJcÁ'¼Õ9JÖ$GÁñHðJý¾êäÙ9cvRuú¼iï±vŒê[:”*I?#J™‡q ŒSà¤8ç›.”ÃÀ¢">¿×j›¿eWÝ‹[,ùŸ[̉âý¢(hå`°ÛêPyÁGÿsó1ùWO/¥ÎJ‹*ðJœ(Š¥|vš:Ë õcQ &ºÅxƒúZž=‡hÕ{Ÿ²ºÃÊîpNzŒê§,&XÜÈ{0‘sN•Wäy ŽQbü‘ã&½:£²†]jØÆ³š>Á´±.Õ}mï·›zVåΙz'@q?h@O„¡äã¿ã§À9£À9ÆrâàH†–Û¼´©Õ29Jò‹“Sx»×Ï¥€â“ˆ g™æç$AÖXU_°tÐé•yU!²a¬0Íð puMV—ø_XðgÓªU?Ám± â),b†‹Ž$¶Ò*—^ž[”›,­[Vø½>·Ÿoí– Àc=ÏepŽv½7pìo.—'ú?®˜þ7EÊ{[1“(‘Ç9 ¼ÀñªXЂ $ ¼håè¨N—Åä 8ÅŠ¤£_fÁ?”‹^À ž©LÃs›ðÉ›º¦ ¯í~aªõ¢Û@ƒêòãbõ9­ëxfã‹ CRÆŒ¹{¬ÌdZôÍȘ+ÖWæÞ9ƃbŶÃ/½Ú2X ÜbnjDŽÓ«9+©`iŸÚA¤†"¯òƒs¬³XUZ5_Vþf-Wzea¨½-Ôá܃?2F`s´N\$%‹ˆQ³_LÏŒ_pç‚iËyc¯”ÀK¼åƤ¬0‚˜åä(5'Ü€¸dŒñ"ï`1N>ïÈH¨±ì%ñ™c~³‹Å/ÍârWÕ«£´Í“]¼ï3;dû‘þ zŸkÐÎ tØÕŽ}µ×ïgQ™qâ`-(?[?¥##öùôåSo.•åÃŒ«Àf%ôÎãaœŸ ” ¸ˆ @;‘mOÙ×ärŽg+8UÊ_ùÝô?30ŽEŸ7m?úâ¦ÖÁ‚n§C\–P$mà™QUþù^L-“`p w 6žeÁ–!‡Êæ ”þèÕÿ›fÿ ­ìÅ_DŸ™¥NŠ‘ŽDöÐñáÌxݶY™±ËòõBë€]ž ëv“ËÇæf¥«n˜ž²ëÊ ¦~?\ëp²i‚ÄL%F6T…:‡8ÐHžŸéH A¼:<‹xÙ/9XÊô,VpÉ‚§cŠÒ~z¢¬Ð¡N'±£®Ô¾öÎÅ–¶îU¦©Í—;ôL8ÖÍërãesÛ€·§cZ]ÅL{påaP ?µëÑõÿÄ ÷8_јþΤïžWïP=ŸSc†ÏÄñº?1™3^¬ÖÅOÓaxÂO¢]Ôñû{ÉQÛ+…4WЏk°ÙþWœ{üLÀX>J|~·%Pôúî£/niµL±z<ÁE)FÈœ¢STix¬c–˜î7`Á12æÇ9-å•.ƒÎ^Ÿ¸×éâ¢t>½½9óÞ‹òïGƒÛÓå„@—gÂCÝ bþ¢¼xvQ>÷äG Á¦ÞA~^V&ãô´¾~ÍÌ»’k¦ÍÞ¥ƒnÿsA‘m›`4ÞSŒr««™º¨í9##B9QôƒÌiµJ1,r§Ú/gF´)}Æ´×ÒÙ´×f¶-ŸuðŸoÿôOvñàá>NŸèÚÚgNýU)9Y'®žü~9·‚+•+?m-Ôú´ÉÏ8Pýd5_Ô硲`1\Ñ-ëd¶ ƒˆÒç8ˆ|õðñ²©(RGW§ÇpEE2+V&•ϋԻ)ïsŸ?q‘@v»s.±„qEûPd{§s4îb5/¯ºÛÀÍ8_4Üà?Kç}üjÏäœ+ìuÉÜÛi5â[E0?¼ƒÄï`øÔÀX> ‰S|c÷‘7·N±y\ÁÉqzägâ i‘Dfæpûì.J e}tŽ]q@;@lž­æƒ‡ú‡ G”îÁf,Í)Ï(RY¥£f­P.'ý呵èõ²µZ^~ÅÔL¹®oPpóîºÂä=ߺfÖÆ0(v8‚‹-nß3AA—}¹v8ÝK³ (ž+pT8ÆÑÕE9–ó (º›JY`+ÈB^ΖrÉÓ“¹e+°H><÷{×<ƒ[|‡«&{"`ø X‡5~ «ó–D6y+@1¢[=¥˜3ºx¥ÌÑVi„sß+* ê¯YÃJ0PŠÖ)õ+FCšBÕÁ¡zþ“ê¢ýëBÜrèîgÿ…¾¸jE9HZF:/±ˆ.;”½â/€S…e•*VZL}®A-}B ,ùø½"œÉE9@§,‘Ž¥ «¾ñ‡h" b³T1#ŰT°ÞW¨ Þ ãç\5ÆòHŸjéu862Ú}{Ð:WøwõLÝŠd¹ÄýÊ‚ã'ÆìÈ‹Ÿú„ -ä6"U¶@|Þqø…-E§ «à6ÈùHLF7 ‰mÐåg^TH¸â(ËühÛ0Z`‚ UPâ)½R ø-Vëv”½rhmÄtø¡Kj¬@÷G?Sš Þ‚30Ôuxö«Œ8ý¿nX2‡{hÁĽ·^\tû(›†ÝÏË‚6ß6dñy\.²<ða›íH'DÀq¬BÏæÞ'FÕ6<˃†ÄµîÛ¥RɆ±¸´8ˆÛ´¯Ï´¬1aBÚ¯¢W¤0ÉášjƒžÝvf®ë™ÁÚX Õ£úþê3oG¬ú¡2ûß®ÏéyþÀÚ¶§ö¤’Ò·ªüÜ~/§Š+W•””ˆЍ"½±‘ýÝc~°ÊÀÞBÀo  ¨ˆjà(I7ü™}Ö4@Ï`±\J4Œô#{ÝcùíNåÎQÕAG´(Òä"Ußÿ$ÕáÌi‰È' XJϬvÛvvÿ€Y•)+“ÅIæA˜K,Å{ѻчS§ÉhìÇŠJ{!ã¶Ùêe—k,o¤k‚4ò'A‘J õc^˜>ýV¢Åjŧªý¯Ôê³Ñ¯$|ãøÜÐsì*nw? ÇHä Fa (î:üÂÆ¶¡©ý.gpFl”€MDg£NÍô@'·_d&§—i¡j$ Ä,Â`h¡ À5’!cøõp‹Eq¼zÐéòµX=Ú‹§ëÊ<";¢Ø«\y9'—"Oœq!¬sTÊHµ£ŠÉÅIð°½>µ¿D¥Ò6iî§SãÕg­œ±6[Ÿ[†<‹çü¼&Ï1<Œ5Ú‚–¶-s8œ*ƒÁp´ËKsߎ€ãg«?eÏ÷¯[OUJÉJÛ39µÃQÙ—íOeÌaf±vG¾­»uFlnžé7OΗ6¬P‘Þþ¤ãÖÐ|ý®Í~•¥¶ã >Js[.c/ý¹l…\\zFyœ4óð®‚[×ȨôCûz¯15µ^âhÈÞÑ)úz\’Á\«2Ö¤{£b»&/™ûzVÂGà(H‡¹úÙV„°ªŠ×èݨ\ϱyUǦ¸ƒž ‚NßdÛGÝAÿ ‹ž1uJ5‹«›¨2f§ E飪²æV±‰šcEë†'}9Ï>›û–6NáMGð »oÈ‘ïÆ-Í­™^«xN(ϔʜéÕ 'ÛÍôGÞ~çRGs†o¾Á·ÎsçÞ´ð-Àî €ŠÓÙÒN©A9&áÒÐ$Æzf«îʤǵ9^aI#<í°] kAÅ;ôœÜé—ùx•Çà™ØÏ%šÞ¤r&Gkå9i²ÿ·›7£=DÒ9žÎps¦dø¢â50’búÞÆ#–¢íGZŸÛÒ><Õät§ÇëÁ)B³€YƒZºB¦‡8ìñÑ'˜±Ú Z£Rá>”x¸€=£–¤<‰e‚C E¯Ò®œ”Æ&ƪ71Ê>ŠHC7ZA4 °bwé>‡)´LKËÒªýÉÕë8%+7#ñÙì<ä5“lÖá t¡à¢¦ð¯„U(èr9UÑÑÑîìpÊK² ç©Ü³ EÊËÅ,Íãâ×Ë}ì²P0€WŸà6¹ÒàÆN–tŠGÓNˆ')q‹ŠèÝw¨ùBqk?Ó¬Î*Aô-dÙN\#q«'I~&·ÑþhQ lzíü¤¿±ýVï‘æé´3ÑuÊ@y­Ìz¸›i³Œ«ÍM݃™3ò×çß³äŠCáBNû.£*Cœ5ŠTôazëþž›zªëKë»:Û,)þN“¼AB٦㠪RÕÌÑ`bÚ”h¦Í‹»©}×Ñæ¸øÄ—g^¼àE6?©AÅÏŽà¼H}ÀÀ%.ïïè¹Äúxƒõçø+  KKüŒ¸É³Ô­V÷¦ èã’¹¡=v°©«Ôßd™kÛ?ÈbVfØríb£¬`| ;{/j´HÇ霩½=U#=«%±S”OäXeñÒPÛTÔº±Îm¦>D3öo§&ÇÜ¢³.N”Å_F©ä"NR¬×‡¤ãä5g¨þ‚hUl:Ù[C4ªÝÎëÓ³Æ5ŠÆÄ;Ë?ÐÔýÒã ƒ©>»F\”†°Hí´®ŠKŽ– YEç¡É‘'u:‹ˆûR˜…"{u¤A@74„$vû„‡çOc…©ÆM°&¯õ¬$~”B, SR4ÈJ6Û}“UáFµJ%ÀÐòžÁ}ZcLÙ’âŠÚÐ3œ* ¸È4ìyN(Ú­Vlu¦€"ÅC*EÜWñB§“8ǘoÙ— ŽJ½´PÕ4 ˜{ˆ†9;l²ùXŸ/ý¦™V”÷ŒˆTJ’1 wOÍ^8´ÐÖ`*îÛWÍò.4^æØÕµ"fqÖ¦ÏÊ5–‡:¿äÞÙ7ÿØ;»žÜÚ8½sW-Xø †Š¬Š[Ç\}ÃÌÝçd|ƒšE½ß–è^Õÿ|×lñ”;—ÎV‡Âg¤½Ç|åf`0Pk Ì®}oÇOû޵•x>êe–½]ÌÅì ¼úÑ%¢X,3¤$0ÿ€—Y;û•¬HÜv+.Óò­$?:ÔÙk^Çìg².™÷€#4õÔÓÓut iƒ’0çÕµëðÕî&sœÃ?À†Úz¯ÃÒ§¿CùaªN¯È]¾á2d›Svö[%çþ~lOÕÏÒ\.1ý½ZñRÃI½á,Ce1Æ \l¶ê&Ï×~¥€"Hê û,î§¹Gï‘ 4°"á‡õfÎß©¡1åsÁ×±ª5‹ÃðF$A`(Ë“ñ¼Š¬ÕràÄä‘lÎËã#6™â‡óðrEbª‘ÙÓbu «S¢ *MnH¡gÉðB%óÏ Übx˜ àË ½"ºEš— XÉ¢×H"¶_ † C6±Ú®ÍÀf§Eo\2)î^PÌ +&éªÆäb´:킚në¯ÛL6¤ïKM44ÎÏKy[1¼ˆ´4°À« »ßtÛÙÂ~«ç¹¯žä§¨€"jEõ¢±Eí  ÊAÀ‘ G;Àñ܈աRÎþW ­@L 82/¨­ã8m f§ °Å!C 3õ÷ÞÉ™½™Nø¸kÌú¶‰G‹gÁ5ŠÈLÀØ:=(}¼@ÚθÑf–\ój埞=6½g¨#@òAKQ%­Ëjb öýu©ËfL÷: ,O5ñf ´l=(DEé‹1³þnÊ]ËnçhgÕÐ9·Ö¼<ªgi¨žƒ›¯o®®yÂôú±Ìšæfv¯%è2¦å3Õƒ'~iÎÖn­³&þÊø”Üɉó ¼«ÖÅfnèeC{M¾ÌÃÎI.óðÏ»5T/úù-oCç(@¼>;«­B›ÓV&©=;ë–Ø^%€ö1óž–YÛ<¸üµßÜÕŒòŸ6¨tê— ùʤaSÀª‰ðꬳEm•0C¸œ_³Oxg_P·öÊ£ÎþÐCl¢C9yè„¡òÚs˜&§Möõ‚Ñå} “ïF\…ûD,2¤’ö+øs&ÀÈqåxÙR…c×TÔj6”<°jêí†(ýÓqú›*Z»øùÑ1(sŠÛ"@]Ó¯€"¹1ÒBs/éÅuØC1Jƒ gƒ>æ€Ó³F%`û0€¢Ë'\“3]’Ÿ´éž¥“î-‡È*\\<Ê•%D`¹leÑÉÉÒàöf˜‘zÿèð3šñ‡«Ö”s0\PžgxÞãòHÅ›?6½Uwi¨GV1½0iÍ,>¶0óŸY §>•:sRËêê`7fåôhÊîLI½ßÓbº¡ñ_‡‚5›«D¯'°Jg4þ*ûúÙ‡A½†fƒ…§¨€wÇ¿Z¥ÆÆ³z€ ¹èÐg ‚q°LÃPÝæ ×dg²‹Š®* P$j† Ÿð¶‘ÁâúúÒ¼óA1ëuÿç“åU,ê——Ææg&_œnx³€Hù z ±3Å ‚Z›?¬Z8€"Çц¸4òƂҔ*œ£Ž.€#qŽnè£ã“àhÖŠ£¡|Ã!RÙÈõ¹Gž¼_®\¿Ž™›{ †kû2| }SÔ2= º¼FÓšÐByU²2z1¹êpYBØ­‡õ4vÜî©·$¹™[Œ6¦ªf“ìïsäõ7´ß2ÀHÖܳ塛䡛”üÕƒSûëÛop×ÙA=90aEž&çªÿštÇ…ä“jWêòP>Ò3f4¤_5ã@ë »9WËÐõûýL;5‘©cõD.ìH¬¬x¢¶?1ŒÒýµ¬ßùµ–‡þhÙÜÄp‹gÉQ©÷Ne™ §=;iÉÜ¿ª {NH|3Āʴ5³áE:»ÏŸì|zß–=ZÞ®[б«I%$¨hqÁYÐ!¢ÃU šÌ·ùwXuxQ›®ç‡ºûXLßÀ•C»:W',žø ·b ?ѷϤP…ÑPæAš 9E¹ú™À1\(5z——kªwèoS@q2§åš™_Þ‘§Æ¨–*w £ ¬«ðFñ3³Œ4ÐÇecäwžÜRpá$uáÊ`¤g¯˜½þÕݯ<ûæÁç¼, à¯Ðã‘íŽ sï½8?ùÕÕy™ ºƒšà ðMä¡å#C´‹Œœ 5IˆÝ£aºBâ„(Øî…eÒØ¥É› ¢t¤róðG¶ŠªÔG%8,'¤öP½œ½~éÔ_®{´˜éeÿ¾£áÏ‘g»»íX\âó9é†üh΄[ M0eIõ:UP8G,[D‡!ƒ ÈÒC;;Ý¿GŽ@±jtW8EFŸ 2½)e:?þ‡ÁÿÖ•Oh*Ã3¹¹©ó©Í¡GßÅ;)‘E ûô…‰5”Eqåòã9q‘0T…VïÄîýMË-ot@#-‰-ÇàÐk]¬wc1ëcI”¼úýpü1òë–\Ýïü¨n±³gx¢‹9¡Ó‹Ö$,Èn˜TráñÈ^Îqr‡¡ŠŽOp“ ü,y·/z ûö…»§þàÊ}SW_¸"ceÁqŸ–=h¸àÈÊ”²õ^ݺýàŸ{Ÿ?ˆÈ~r|ZTú½Ó;f~måS¿¾üëP$rRþ`\¢ò#×ጃï]°yÞ£×]™}ß’—ò¿~¡604­<‹8;Ž®ÁÉÏÉ÷T™M/w ÝèmÄÑaâñ 0ýņAMÿá¦Õ”ú–®Qñe=y–'{2ºëœ,ÎÞ§No¬'¨ÚÖáÓ|{q³c€î•7£ËÓó“J^&àø< (ê×AX™õ™9µÒ?¡šÁ:E>'ËÿK¼ãO¬^y /ËÄ÷Ú­sÞÚ]ûÂßjLycôL§=ðòƒWÏ»UþnIëâÇwëw}w‘mí’œ{ˆŒÑ«nx·©Kˆ•%QÅñ´¾R¡Y¤‰,^è}X+=ì ¥XDï.Â7Zгã_pEéNœæZ¿(¯–Ü#:ò ê@#‘ÁÀd7c†(¿ûúúÓÓÓÝw_4ù×Ù)qývß„hv„^ÇÉØE¨ÄóŽ jb߀ ~ÒrH|F}Èòä-N©CÚ“Ötc•NÐI®<11E 2ŨSÀ‘Ž¡Øcÿç#%B‚…>*`ÕZS±&r© š+û3c¿ÿïo¶í<|½µÞÌÔI:I´xÔršVŒ1ÆT  …v"ÍîIqCéØsì*[Mgá0vˆÉKWë°Ñ{ØÅšXtmמ^™yýÜçÂñiôE*|ÒÌCB ÿ®íM±ÏËÃS•Å/Ìfq9i•ÐKµSœÒPGê‰2"óEÿŒ;/]‡¡ãÂ4ØÊOùýDÙ Sè]Yfý–¿tTu'x™è‹fÑÚ”ë š—ܵz­jYÆNJAªÒ •rÄ2’oiñÈ)N7ŸùÐù†–)w_ôMì2R¨ótS¤uW¯©ïèDcž+zSÚAcé¸7pxPïé1e~®Z  ÓöNfªê`º))9wöO7,I;Vµb+–‹ÇÌîT72xü òœ*É©ŸQ'G˜:”ü7¹§ÇM ¨4þqÉ1ÓWÁhSŒ¾Ïa’sÍ•§…§úÚþÈÜ;ó{ZÇLø¸霣«z(V¼WóÒ¿j-ÓYÀètXÅ×Ì ÿºåÀK&ÆrŠž϶“µík ³îYž“øê…™©ì€Ç/¨y«ý _É $ü£%N_©UœØæ-?)‰]’›¸ù;—L¹Q©=<~v#,Ùë¦ùEâF‡H}mj‘=fóˆû¢ãSTMŠz쪳rjò—æ÷D¾% 6Þ•nк<7;Ögå}]ŒQ!¡ƒÄè3ˆKb5 Öjd öЇíöÿEz®8 ާÊ+Ri哇èÐÐÄ2u´fäÝÈ©}s$ ¯houÿŠšß¾õrËû‡þŸmOŸÀÅk¤ ÅÇâY\AÆS®º”ܘ\VIÙŸôeHÌ¥xÖ>ó=N¸èÓ0)©gêÚ‹ÞŽ™ï¦Äb»ƒëÞ×p9Nv„ÄBJt6ÁUÕëÀêKÕÑ$`M‰Åü5>^Gê#}a<;J ¸†”ÐdT+ щ5oÙõÓgö÷v£´9ß-’Šî½âÇŠèB<ê®RT§7"Éä? ÂKU+ óg;iíâ¿]ºãÛ{•*œ…Kͬð¡à98P4ØÚwµéX'æ:©(§)½¸p·ZШ˜ã½Ö'°ZêöüÐ^Ó÷ŸÎƒýZ÷t<ÚõꡟTÿÇÆŸíûÅ«onâß›Z_Øu³ó°EÇb5X[Å-ó«5óœYK§ÿ…Ma4,³Å§âVGÄ»žWÍí?ÐTdöuÉÉÙXâ´Ìš™·_ú§ØiéýF “ép<Ú»²ï…Ãs‰äºs’Œ<†ÿœržzS¾V—CR(Ï<fo5'D"Õ–WŒ%`Õ ´QäÜ £­”‹KãXY¹’UàÐà‚ž} ·ìî„JK«¹(•e_8ë7†ÅþMäJ™ô§¢I¤J£rq%ÒH‡Â¿»é‹>.ZÞÙ[lßÓaðB‡›vaK›ŸÿVÁª¹J¼l‚¬†êtè­nfií¾_%Ê¥­Š”*ùŒ•ùëŒcŸQD1´…"æ.Å d’ÕÒÕpÕ!gp?…sHìí¬#S·*Yƒ¦g²§+î‹~>º³âUCâóÛmó^#Pl°Ló¸œâ„8=¾I€’<|š`w$AéBWóÒƒWϾàØ¶âÙ*]åÚbÛKrî†a…üw®ûw{¯0[¯ÂÞ¬<æKÐG’¡Ö e¦³‹'%m~`åä{ð§^z÷>¿üo»OxQ+@gÙd ‹ô‚ÆôB^çñI%ptnÆ(pÁžsµ[`Ûa´ŠSö–nA×Ýf›OYÂÊðìú?X«ñ"°V+G¶4ÇðâSˆÕJÏG´e††ƒçùëmò!õ›—Rb/'¿Nl¹C@É|V7óµÁ‰¦Áɼ7RìɨÑe;|fe»fÚ-‹Yƪ™›tÏ¢×èÅÐßNýÇÅ;~àh{‰{g/êÀÉúÙ \jáÄÝ,[x3cþ”Ͷɖ­{|ÌâM…X}W:cB®;Xë|Ü”Š3L·Ï„•SM½¢j¿J¨íb1õ%¾#–ÝÚ™IO’c3òcàü¨Þ‘¶ŒŒ›±1TV=1ZõÐÝÐr¿­º;–€')-]H™•óÁÄ5EåJÄ* ËâS«5Bžä ­lZ\VJ¶·SÓvTek¸’R0HõÞ[ßЖ]]бÆê) þô©9›K'îŽ}%í€;Ö\d±u˦=MSºrö/ʺu~¬Ø"¬ØÔϸ¼ãÃaT%ÎÅéiD犘Žc³c¶>7]%_¯Ô¶T€ ŠÂïdù¨_Ùe§ ®Í'$üj\(c–:C·vÏzå½C/ÿ«ÞRèq:Å cîˆç0™“øée>Ó¥ÝÎ ÿööÑI¬(zsŽxmÛ=Ë&­½rZêÆ²ÓYÓgONLŒÒJ‰槤°åyñ[Š÷"®«1T­ÃX„6d¤Fk^VñÒ·£5Ìtîú7¸B~¨×ò߯nfObÍwµ{=*Àn “Þ‹š"7ë5\)¶`lwÊ\6ò–Œøê ”Jïã3o¼8BÙ¥ˆÕÃÞÕî|eqÅGšâ8”­ 1t›ìA®ãŸ‡ØÑ?l•ëþ¼M®êC¹ùù½r÷æZ\›ì8°Ò\Ä„ÀKœ_TÃ{^Up÷2–³æÂ ù÷.û•’qHä—‘ÂŽŸ I×(¯å¬î_>Ü7Xbjïo˜Ìk³â;²fMQ匩›„¼8YU®ý»[™µè†ïôP6åáôdzû¬tÃ¥œô‹g¿m4îŽÓ%`œp>ÓóõÑþ]õ'Ë­ß ”ðOÃâ°}!qôZ†ü¥‘‚' ·ö®²~Dê­ žl“ó²žÆCYØgÅp ÊNîgŠôô^”¼»®áfW×ÐT'³I±“RXlZÒ±K'nÇ#W”1ö9>W‡ùYÍyv[ØP¿ùÜS&7ìDéÏ<œ†\gžÑ§Š©Ð:Ì-ÆñþÀ-NÆ4§ì!èøõy5­‘ŒO;yG"žgGºŒ£Î@†–­Ý®YÞ®yé•K!œ›Åt£žV÷£BÓ1(ôƒÅÐØk‘µZ¤- –EOo9úBÀ± àHœ#ÞÑ_DÇM×åf²Wï‡wþÌŒv唤7¾}ñTE3Ñž8ýú­u[ŸÝ×}7]SØ»Sý¤ZÅÿœ¥ÂO*”Ž>§^1Ò‘`ü¾–æ›\¹ L©¢4Çó`DŽî@Њ•a, ˜j *Çy "(סÃé‘éP8Â}W–¿½³Ýþÿ ¥òQõ£{#•¥‹pT`†5̯Ùhåk@à¦EM0 1Y­gZ1.F0ÎKa™wÌÙ3ùÚ¥_Ÿxݼ{ƒE•±EN*A X-D† ¥´¶ªC—ú-Q~Wf°ÌùÕQ‹’ë(bìÒÌǦ$T&d¥ÒJ‘€«®?¹eçáô¬4”þ„êÓýOp•Š~0– ç­˜û—¨+ÒDFí«§©¼Rµ÷÷¯>Qóë7^|·e%Ò*€$+ñ(öYãW^j ¡ím…{Û°% ¨§c1¹‰Ç&_·B„%B*­±2ø\ïÁÉ7ò†:z×ö¿ÖHÜ"ϥ꜆ظgñŒ$6åÒ Þ3ÎLm‰eqÌdî`ÖŽ¾Kûz—Ñ38P;…^’nœQøòÀ±¤(Ô¥û°ÑÖMCéÓP›;ü\][ók¥úäÿxšmÏè5¿¤H| •½©Þ4³âíý/ü³Þ2Ýæp§ˆu+`Y ñæÔr*øß$ô,.ZQOäÕXÖ²­­WzíXÿâç7|¡Ÿ±â#àxï²üµ×¦mZ–™Æ%ÇÄñŹñ›¾x* î*óÝfÇÕÍÖ?öxY~÷°ã·› ¬Ãm¾84ó[pÄ÷‚‘kãA ü(£ÕÜe°il¦ôø‹<]¦Ñí 0”ûYK¢=Þ "¿βW*i!㉤sôŠòwvµ;Ö›ÍÌP øÓ/ÕdÆÂPAà“ˆ¢ä“Ç ð—ad†ÌXfÌOdiç³”¦ÈI_ËïÊûþ’Ón_öÍ•¿_wÙ„k§?… \´ÁATBùì–n%ìš0PݱÚôA¼cÕB–Ñ•<9çE<ó†]fcS“^äó  FmÚÔĶ^ƒç‰”¾Ú?:ž.(úADÊ^{ÁKçLû~â%“d‹ÒcŠ¿ûõZUË3»nÞ÷ô[Žüõýwû¶7|QS)ÏâJøMB„%ƒ ]ÊÂíiï4ÏÅ·‚ŒØÉ“i2±ÎYµ›åB® PRr™•{Ÿÿ:QHÄÜÕqùp]÷;³ˆÑ#Kš7ñXá\²3RÃEé ió öÅ,"Ç?)`ßÕÍÚvÔ¬¤ç致ëõÛ³gÔ,g‘ß™E­yû4–cK2£ þL£F3#ø‚œP¾»²ÁÝ£ˆÐÕŸA¥qfUù\c©6`¶ÿ Ë6ió‡õ/=}Ô4ƒ¹~ì­¯öaë0ì›yŒ\~±µr PdvøôE~¢†WtŽðv_Üxðŵ×ͽ àØÎs”×[×.›tñ ¾@¿uùäûMë-Wë~Öâ“DÙï焸®a×ú£=Ž%32c¾xŒ$nEÀ§#³jð8ˆÔ»èÁ¨0z€Ð9p“ùãt“Ýîk‡DÎ ºÝ~lfÅÇpѲÒK…Þ2” G Ýû—ôÏXVÈùRP¥Ñ©8ÉwA0Koá)¤éÀÚ½ÂP:¥Ç£|PöÛÝ,cõ–<7o£»zà-o›K#¤ky>È$mš‘¥/ËW%ÌÊ´aG¶Ø<¢9ÀVEU„[Njî>”ë)~a ˆˆwmGnZì3a ‘2&çòqY)Ûâ–L 1š]]ùž2º¦\¿b‡¹³§Í¿gx’ÅÝ+ºMCK,[›nLZ5ùÉútÀø Ê%’Ñ«J3»ò÷ñÿÊàÚŠêþËòN½vè`35uˆ\S—Þ^Ùµ(áòœE½ÛkïNÈË~*÷Úy¯±ûÉ`Þ]gt{S5à £­©?ÙÛl§;L?ÍÈÒ.,PôÓ  lbgÒb”Ë9 ååÔ”¡®}ûáKû_oB‡Uó†e),kq!¢âi^í!‹ÙES¶šŽ´Ü¬Ý­W›÷w±Øe9_ó× ?­™”ö­TD˜sX½sUV¹‡Eè‡ÔÃ¥Ñ*¹Xá˜0¬¢Pšs(ð• ¯‘6;×uø¢òSféìøXý¬Œ8C±ÙϪº¼>Eê3éãŸéÀ’Ñšg›WÄs¬\A '–'åDk¤}&L.l1ÿÚÁîºbîÅ6ر Äv×’¼;•@NÅ·ŠuaP xät­Ñ³ïhßk¼S„Ûýì Æ‡Ÿ Õ‘twcáUd4Df[ºŽÜƒºœ¶*SDÜßžõ·äûI¿/€5‰"vÕÁn:ˆþ‰1…’”Â"9!ñÇA)K,))A%û}ûb´w¤ë°¯ ’çwÙFL9¡¼`jŠn›Â¦]·ä=ãÏ3žüx¾¿V}VŸ‡Fþ)jt<åˆ1ÀË&v÷Ýc~¯ÄçyÂT6qñŒíˆéS€¾ÇJª ¬)abú&óŒ–ïñ{8Û¾^ÖSÔ|€ñïx¬(,äJŽgª3ZG«¬µÎüÚœÿM[PÐX—•òž=u—x臆ع_6?ß%Ƴ´Ù‰«'>ÝbîËš[ð»ôëf¼@`G"Yä]#íž ›’¸<0ìGóرù§äÛM•)½CØIBw?÷¿ ¸XÊlû{—ZÛú®îï#1š3ÎÈpä.­€Ä†’ |ÉÉô,vIö«Æ×ãn3$¯0;{EGM_zó›N[uTñ·<³ ès±± (ÇÄ\ŠþNϺg©nMQK(ñ€6?÷·ÔCÿR®žx¯_é£ ÇM2°£ë®œ}gñ”„JfŒZ|~΀ ¸iEŸ²&"Á#KÅ’Œ:–jÄ>%ÐÓ°æY‹U,:ì ÚTƒ–èé“6Ö›—ükë‘+@Q,¯R€±(µµiøªz€â 8E)Š*g±… ÃjÁʺvv sðÞ¶añvŠ_j UêõÔÁ" ˆÓ‘@ÏF&)rNä®R£Tfµÿ TÀš mžKÊB%PîJè”2þd@Þðø!n3>>WKþýé1ÚÛ§$iWIV=*‘’=ÝÅ C¼7má´:„èÏ@£rÐ@aäŒàü<„¨‰ÔcWeT9Êé(nѲ¯åköæþiVf“ÒX줌ú´+¦)n-••Šÿ#­¾ ‰‡¥gçýC—Óa`±¼¥©õ}Ô¸À¼µm=ƒ^„ötyêÒ}*¯,äE½9ãU×-¾ÿ†›óï[¶9õÞéæÔy¹v³QÙØÔúÆ`ÛÏ>œ}ðï>߸~MÉ!pS¬Ä$ÔKnøÁB«Ý¶Í÷­ª¥Ê–lˆL§®Û9| ƒ%>)Òá6¿±ïbûÞ’LdÃôDŸ‘ú:ËÒ¾KÅAí!ÓšhjW\Åæe¼¦_‘ŒA¡¬t3k—é¸7ÆSÜŠc…áÞGW'¡îzfÝá乜ù꣥ø 8©u¦f~¢JzŸORzºÝÏÞÿUwIxL³+¿ú Hïx89bÇU7]uû¤ä¦¬Ó p„)ÕSF¤1šþp‰¥~$BBhÀj=vË¡U/.x–À‚]g ¼Ñ:¼ìÕmu/CN/…¾ ïÎün½åª#]昽R‚ìsULÄòdü€+ƒÞO-ý~»Èë=>Ïÿ ZsJC€§ÌT¸Ž‡Þ}Ž‘éH'ôH8ô^²ÕëÍ®é¶?Öï׆HbT?œ¯8°ýV´`sZ5ÞE1À„Ú:’7À5T·‘8!N÷±Aš$'ÑW§¹-/IÛHöÑq?y®p™J.Àc¥ÎTO˜¡à±!K%¬âø93Ÿ † «86¢Ôví©»ÒRÙ†­4¹€¼¤„!Z3ú¹ªqÅËÐrBÅŠmÊ8‹¿&÷pÊ윃1…ñ`ϱïQ¯3¡÷H‹Â(¢Š@:BëO¾Ö'ïP{qUå0¬ ýbglšñà%7-]wÝ•So^ú‹ŒoÍlÉZ9•7²DÕ0òöl<Ì:+ö}½æWoüñŽ%bØj=:g8‹ñè¼òyYMq\ÒM¯í[L°jˆfœ³©ßè|?Õyá±cJy¾K­ÍôµáC}d)çbæ¥Ë)Órw*,=Ô…&ËRÓîºèYXw|Ú÷ †ÓF£,ÏI‹€ãÐ+VMÓ礩ƒëõj9…¨í r¶Kòm¿1cû1[ ÇØhâœTàKÈ„ P®»æ1æ^ÿõ¥ß/[–W¿8+ëö ðH@Û„ ؼ¬× Û¥_Áx&.’DIŒ'›°eFÃÏàžçðzBÜŒÕе}ÃÏš¼r‚߃ÞðQr(¤æÅ@Uò£<£°D s`HòI| ¬ÈÿÇóÃu$;¶N~Š‘p †o n¨ï¤½¾¿ó/•-¶ò·ª[þþúáÞ2ÜSþ¢ùfÄj~—Ãd^PÀÛ7)ÉQ…Ð1t×/t{PãèѾêÌxã­™1ÚF¨U„ââbýǪS8·Ñ™b–‰„’pÉÈ_äÙÙ9$fè–ý5-ê€É%‘EMK9<õá•äNE×Éë$¾•È#ª–±°ð/ЋذI…0¸³‡õX·œU™Ó(Műкy:?ÀÁaXÁÜ€ €ôG]¾Ú.}tù#w\=ùÆ¥¿L¾iRgRB æd]°akµ4°µö†¦§wP› aÐ:YÜöý<\Åà8Æôz½†r³Ãu!{ÖȽ VpjkÖ]Ó|—»k0LJ`%géLÙ–rÙä×éY±\ê-­‰ÎÅmkCS¢ö§Nø\lq^ãl•]ÌÒԹє†–=Òñ¼ acËãYYú¹ºÀ“QjyÕÍîçÛj|êûgÕÈ,缩ó9¨H„ÃÁ®b…°N°wí%ÓÖª„g°¹l懽r^ŒŸ>fü00"4qXpndNb°= 3b—œƒv°ÎÛWLJ~ã›WN»«b1| ØÐ;ô¬Å+'ŠÈWEß•&¢M©OSÏ&à!î-(‹ÜáŽ9;1çb€­8v/¢lÄÖXþ|ÊÀ¿Õܬº"?_´¸Ù„h½~êóµ²÷w6pw/Ÿ^êvú¦ß¼8÷äàÅj˜Ã"á#!?´»TPžiM´æˆÞ/T'â H¨ÌÐ0QŠO(½Õ)QÚÛ2c˜Š`­Œ•˜ûK ¤S%îþ›æÎîûm¶hš¢ÔyQ„%…"ëö¯´vöŠ*=Ð…¶wÄ\€8tJ>ùíNÉNMH,œ0d³'ÓŸì°Ïjh¬¿yJqòÿ† Bš³y= Auâ±—@KðX¶¦nÊýgV^î¦Ãy;þ*¼^;Ï\/úº>hвã- Ùé¯%^œ¿ .@ðøIiæÄ‹©m“¾ – {çÑ!Ö¾ù ”}¦s Ÿ¦f¡”gý[Iág…–¶žÛ†?èAñ§Ïâ³2zƒí®U.“%Z ÔQNü‚.)z8}n~|wM#ªš9›yˆõík™—òFãìäÕ;j‰û%EÍ—Ý—¨Þär.ãfhœszŸŒVK—ÐmW€ëhö ·.¬õÕ2è¹c,p‹R¤¯xˆ#½º^ÈåAËØ{·¬˜z×/ý¡Ýå™Òêt`™¸ K ÕøDˆJÙ6Ìåóƒ%„ø ®qbŒZ<<è–¦§`ís›ß\]x_·69®jê³>ñ ñ™ÄWP‘L7èî!$Aç'Ž“ˆ •%±±rŸÕ%·ôZƒ ¹q ê¿„;) þÆ!ši%€¢G–Åö_]”õ˜ÓåýÛûÍݺgvÖ²v»û¦Ê¶¡êõ·‘¢XL‹æJFŽ3t€Ä;çÅ7wº÷×Íjï®bá¼èuAiš–à?)ð’µ­_ÚDÒÉŽœ}ÕÀ=ˆEzÉ.X§9X>íŠÔnÃ÷Y¸ûçÓǪö]8ñÚ{·9¼ÿôµº§ ùMÞ@E7ÐÑsS"˧Ï-W—¨ÐꉔÛ:¶îçÅéüíøpÙÊàrL•)Èg€vyÿ4Ûú#ÿ³ ‡~ ¿Æ¦ ×Ûj»³=p€?ªì堃 oï¼¾õÃêHCèJà”®3ª …ºµÙùT‡® cæŽî(óü®Û“YÁŽREmQN^Ÿ–Σ û §Ä* Èi,³…§Š·“üçòs-¢êæyµþ°Sý¸²Îÿ3”t^& ŒTAj ¥AÑÙÞ½~yáÕý¶_~dÒÜâ÷xø a#žÄg êµQØ,¢Ý+ò—LšÀ.(þðªÄÝõㆠ-ÏÀÐ’ä'P§Hé(ŠQˆŒÏÐUhœƒ0ìñs}6§Ð3¬ÆÇh yQ~Y§æ~Žxo‡ãŽt9¦}%R@IDATeP_ºv©ÃÇf y‚,ͨʾdVŽÿq¿¬ûîÛ‡|•-}Úa÷×÷½ ÊOÝ~ÁoO0%Zõ#eå˜GepŽŽJ!Tˆ1ŠS<¯»='Fs^"jÉEĻ֎^?øA[<1…œZ]=ƒº¿µbÞ¡PœlÌɤ=5ÌPñÞ%9Øp}ÏLó; '_6å™ò2Å ;Bw…6Çhó>f36×Í‹Çç7C>( ÷˜Ö°®ÀS,K½¯¼Lñ:gùypŠœÚ6—ʨ‚!ÜíAá–Y‡ŠøÀU9vòŸ¬3}^µûBòý80R¡`˜hÅզ푻Ý¿µ²!åÝf˪MmýÒ|\»†§°ž {Ò6:¼ÂEÙÅ‚¤·¾uYá}H¯€âŽûê†~ËßM1Éå²ÕÅG·¸Â«„‘‘œ6¶åá@d­Ãu>¨%çdƒCýkŒŽ[…H-JDô?¤àd€bŸ—eo;ÖS£®‰‰ÒÇè†j_b¹)æÅî:€{m ¾Ðéô¾¶þ_ÿ䵚¨_]?ûÈÇœpÄb½ñó°]Ö0HÕP@ÄÀì/%$& \Ðw`b¼ñ¶ôV>qŠTwÒM)z¹6i¸«ï.O=mË‚ø$™*m^¾ÀÁhA_eTf4exRªÑ±A˜¡„À WnÂVI¶÷»ù޼#W0bÀ37CãH_D‰•Ï4t?ÒìÇïÓŒrëÙ:2H2gæÔö×6»Ôª£Ýmˆ)¬Å—Æ&i›÷o‘KË(ÂäØžäé¹,Óš2úëÚà´Ô}E-wÉÕg¬û”o(ò§þ¥NHá“õÆû”ãUA6¼­ýzsCçR‡Ë†;‚“jT&N`¬µ'ŸxBsX H¼ÚÝegÖn›äÃj:û®¸Öw÷­Ì»wñ>úŒ.bFêJôEüGRŒ.CËŸ&sù?D«¤[ í>¾é˜—_»¨.°{(†ø‡/¢n_pc#UpP"‘AºGÇ”S¾wå—Ý^qÎû}}Òlƒ^¦O6Y½ü¢‰Ð)NN&P¼7*ì’ó~“}u]¯ù‹WL&PÄvó (Fæ–Ñ-Nçä#IâÒ¡u`[š~››Õt rY‰F8É祳±×ÂÕð"#5 å« )¼=-1þ.˜‹™Ûër÷XÌþM=Ö8ö=t9Ý, ^¢V#h!.× :Uù]ýq°gÑê¹™w#Ÿ€ã±Føi|¤gІ¯hˆpˤ•?ø|iJ² û½b£5·Ÿ ˆúƒ[ qh}Õµw[ë{sà¨4ðH¹qJ{ÖÒiƒ"¹[€ÌïN0#’8@;%¶lÙ·tà½æ(‡e˜ wš®pí,>J@¬k7íüM£…ÜüµÚó¯’cô¶,ƒ‡¹”‹~©¤onn&ÃЂøœš“6/H×¹ñ©Ö[˜—“j:ÚeZ½·}H³½¡[êsù`DÆÀÃ.Z>°¹Ë¬N©‰º¤yÈùзWMù12“ôüaƒÇgÿßc¶ ØÙÖŸ’’¢áDïÁŒx€¢ASw¾qŠ !6F![L÷žúËl»ú ¢”vy_X²tó„ð •ІŸìJ#?DXÒÑÆø,޾#C+‡úM’§mØÐy¬å–iF€SìÀ¦¢= eðêÏiÝVûØ@KûŠ@—=GŸ·#©ªýš¸â+Äkœä˜\\:»…êÃ,µ]~8'ÂP}v!v‰ý˜Å¿×â²å\# ð×Z•÷vFí´·»ú¯6µwùM5Méÿ™6§ €óÚ ¨A*Cíì.½Ki)i‡(@Í®ÐA¹ˆüT±*¾˜Kîݽ³{vÕͳ¤ .ùÒ<ïÌËý zYÖ;ˆKiOW6¾#¦Øçu½Þö?»bð© 6ÔÔ3¿ý…ê…9·mdeˆ F«Òp8!„zÿ ·>Û (§ìÚê•…ñøîçtÊÔæªz}Ú[çÔºúës2“JáEQ…4ô¼˜~¡ Çb¬xü¿œ§£1úZ‰¦€×1¶í†â‚K§Æ¼Ø¥Šæ‹ÒSù›fe¼õÝëfÞ z„@±Î²º®{ð™ApŠ^EAEÌaÊ}ì@  A«§‰z!¥oNÓ&}›ºÕb÷Ú….‹Û¯Uó["ÙäÃЂ¬)w){.à³§WöؼÉÛëû¦þsÛ‘E{xe“_€ÂÖ^Ø<›Ì*†õD5 >}¬½\ÝúÈCü0œgÄêTƒêw©ñ1,%5MÃ<ûÓ“ ·}P<Ý(‰¼Ï§=ÒJJÛSqø2Ӟ晎!+F§žži›°h:°\ ôÅ=ZéBÇ“ý)†+cõ3aúÀ=¡ÐÓ8 ž^Rá gÆÉ©,?¼I±’ r7SÎAŒ‡„³°ðgq—ç XŒÆË¾Á·ëcwÿé•ÇØá¡ EáÈî= ]p}²@Ïy쩉ìi¯î{¸å•ý+•¡Œ"i¹Àw¨¿ÓYkJÅÖg²AËRçæ(îG$žŒ¾‘û!×4¶=uZÞöعiÊDæÜÖÇú5ߤäqº¼¬|Ìú‡ü&"ÕÂ]%O§ãÉþ(ʉ¸}Ò'V†œ²{æh¾‘§_ÒÑjŸ_zÝ¡ÿÚ4E ä§Hq±9D1Žô§\‡Ê5ž•**f(ÿ¯hPPÿtu:’Ò‘D€ö‚ÉS¿ñͨ–¨ÜDCü÷/?Î)V6Ú¯¬ï·þÖçd@QâIô‘铆ÁF |î@dXiL>ŒXnˆá6$d$ÒbeèÆ"%¬ÞƒŒ÷'d÷^8Ëc3£ápë>_PÌ–£Tïnu²ªúfÆg176vÂahHæõj.Q‡3CF§%È剸†ë |s¦Ë4]æß<òê!ö»æüy‰)zþb@ ñEê(íÚt ûLœâhT8A¯uևȺh¹µûë¾–a-Ä;)iN&31u#KWí ¶;¶á˜º0y]|’ªpÏ̵<+)ô§Ì+Ü {sÏÚ(f˜î†é×Õ2o:ÐtGöÔ?ÇJYñ½ð·‘§G¥Æoã§®pú›¬†ÞêÆû3®Ÿù6âù*f”kJJJƒåðÀ±Ò ¥Ø-,›ØL[ÿàCÎ,4¾9m~,VŽ$~ˆÊÀ}Lés!.sfi9Dxò‡œj^øë€Åñ¸ë•ýZóá¾€ý°eŽèl^´îÚ2¡0nSDµ­ ÏÊJ)ЄÊgt 6›¬ËÄ´W$nèZ_ü¨¼k×Ñz65Þ3é¦ùÊ·oŠJօʧɀ |6ÏÒÑ·ÆsÀ ìX쥙,¥ ûHï¦oÙ­[‡i¥ °RŒ[c…*Ü,fÍGÞòºÂ—”•öWíDc±ú :Ú5dgv“ùZçöž•†‹2?(<éJd¯¢!¾:Ep‹ÐXUÆmS@²L¹Žü”"–Â>DnдÅmÊ(ðkè¿‘äú%öU¼Ÿ>H"˜×Tý6íP ôŽprÙÙ0ý3JQPÝ“³!»%@Cœ !ÒaÆÅ¡MÔ­^aèŠ&w7Drè›ñàx9J¼¯ÊÏ#^†:Oœ>|ï´³äûÐd}S8E|wùŠ#}f8o‹E|a%$>+øä„Àâ8âà`çrããÜX‰‚Í#¨¡ñiU™ó%®Ùb•Û­^Õ’¼ vÁ㟦§Fÿ$œ_ú›»žnt]V81ñð“’ŸˆÖ ï÷Ùÿ;-ŽÝ7avzPÇón›™ûîÁ¶¢¿ ?a,C`§ž Ç@Z±Ã£žQð\?„ð†ž¡ß<¿«=çŽÅ9dˆq¤Õÿ?rºí¢2a襤ôwÖa4Çø©28E‰XjÆÁð¡ë-íÝ+‡› [Ä×\ÒC‰éORÒ2VÆì°xî9‡žqà:h¼¤³Î¸Ì´Y¦ü̽§Uòæ-mÝ·d³O£/ô‚m¤Mgi÷m×îIËæ½mk5]m9Öe0×÷KÂÖÚ+ÓbWð­‹.9r"/¥‘‚ÿ†>Ê3ýÈ+ï>?XÙ<ß—öƱD±pBcÞE‹? 8û×­§þö8+aUÓWOÿß¡†þèY~Ö¹ù˜œc°÷å£s>dÒ¿r—ÍþëÄçÑÊ©.Àéùi]óñ¸]«±Ú²î£M?²ìnº´í•j|¹BVüeG}>•S@‘2Üqè{c_† ˘4¸ÔEù}™WÎÜNùny²OÄçVO1ùP¬búa/nÛ+•²+XÒ¥“«Ò÷sî7]0ÔÓ'z-†Þ–ÖueV)à~¢ÞSIb A?¬OÔ£ít¾_ñ¤ã‘CŸø-ékº´ÏR/8EüŸh5Ö· K8H‰CAa›[ä:†ç ?|N‚{±m—§ƒî_~G!Éjð x„©«ÆE.à³5«c._g ¿›p$P¥4ôW•wû対!áÃ÷Ð 3ýi(eg³sͱþÁ?š=Ád¯ÛÑ)ži"! þ +jàg ‹Êy)rNb Gë³ýø"ÖLÎâòa/äàŸæL0|eËÜ\ÕøÌ¦ƒ—ll5³ÛfeÍ‘yÕÓó³ãŸý:Ý÷/ÄËE{%k Wµ  cÛ~¸R#Äv씆µÞ‹ÃŠÈÉÜ[O'?ì·ª¢v|Óåõ©¿±rÊ÷­°¡¿È»„»îœeÀ[Ž@êHf4Óö@ ¨p4-;_á>lR‘–69;‰OY<éPÆM3öR¥egQqY”)—ͯlét˜÷tƸlvÖ³»1?³âàâ´’¹¯Ð·»° ÛxnP^ϸ0ã¹äÝÙ«ì3&ÝÐs´Y´|ÔË7Åìû–µc06oÉüß']7© µ ~£וÜúÊ®Å}­¥Ã{Úfšjºi™€.ûÅ,oùܲVO5ƳBÜ]D@‘– hLÿÞªßéSc2}vïýæm-ªÁŸ÷÷.íð®owî«¿2sþ”÷ôº˜`»¯6|+•è=Î&Ùúf[”›ó]3ØÞSÒ]yd¶í££·ËŠH|›š†ù¨@ɆրÇwl«YêØAü€,¥¬Ìó&T`&Rê[ZV:*Ñ©OÒ ´œ)3ò6÷Ïm¸`¸§Ÿ·ïµ°¾ š—,™SÀ bê6ðøxN´šÞT0UáÛí>”«ÉtŸ­kñ»\Q¼ Vú)âPC‚Ô‚1ºF—i¨TòЖ÷Ð5Gýýtµø_Z¼‡B”¦û|¼JZœ(ˆ—b1ØHÙÐïR¢~ÛgÁúôvŸŠŠX J*H P $!½‘Þ{Ù’ýþg²wݬ¡ª(¿Çä·¹wî´3gfΜsfæŒDézXÍnÂ9EZñVâà-öhQõk\ W×ØÔ¼¥´AÞ˯eZ±–[å*ábqŠFÆo¿^]®ÎÖ!Ñ›V0HÚD Ý`ª­]+ÝuÃèø­FgkºÇ¥ ªÆ¢ øpN½W˜ÿf¤o[ôøm^7KD0``1^ä=œNÚxºìVû:ϬÈ)Ôµ¤TKгŠf»r‘Û™92ÒB¼$[ŠÐ¿Õw~`ÄûMÍ ½µ¯Ö{–r%Ú™↔ê¹Ù%ã\R|¯T§·vV;Æ^ùÇÒÜ›O—Ëa íª“Žèɹ ê´Ãutðç HÒï]Å/Ec™Mþ³{?Ž;Ëór{%½Søy¼¬ª¥‚kŒN7ÔG—UÈâ„’)ݼj¬½íš‹÷%F‰leV¶½‡U%X7U×úb±HP›T…fƒFÓ(Ы*m»x2b»„(Ó!öÓ œÂí—&Ug—ö¬©¬-´É}Š=|½¾£HF.ìf¾ç~=º¬Ms´™ {˜a¤·¬¸çš}ib@pÿXagj ˆñ[DËb/dKQT¢âTeí«bH@tó$1Ìá‰{Œ9µJÍ©:{î }xðI|‡Ô€dx>ƒ;£ÿ«LIAµ(t I(96˜TŒ$2òÉrãÿQýÚJ ÿmµ¥ÿmom‹NÌx«\bppnÕÏBX,ht«ûñþû‰ÿ‰î¦ #U‚îTƃ:O«³­ÕkÕ 5JwGÇ™¹%¥°ä… °p •(òU…7â*U²ÒÓÃÛpå\am3Wë)˜q$ظï/|r¬ Ð }gI츞Ïa–ûlCb™UjN±áÈ©LÍ‘ôRÉìžaN¶Ê°ÂŠ:nsz>®Ò‚ÒZ*pŪ·\ŒÕ$;9le£áÉtš5ºB^½Fo«²‘ϲ/æµD1ÊQ¤Žô‡]+Nòè‹1»s-0»Ø£Œè¿ït7W)ä¸éÀ¢»üë±ûjS ý±æ±UBç~YÞ÷Fì¢ ž>ÜUWy£7CS<ÚÈà3¨óª´ü™%9¢FìmÌ‹Nê§vr ÷›™@ºAiÿ¢ÞHb»Mº€v/ˆ¾?çUžVë1e\Ý•rûò­©ö0;x_‹1JûdœTâ=½'ç7®ÇvÿYýŒF¢×FÔ¯4-„ðœ£×Ýßµ ÷È”©TOJ$ jŽ«Ô×UqõS¿Üµ**Ç•TobNÊÊ/â.£ll³9¤§!={IU==µîáþË;Mí}šŠÝ=¢1´ñŽ}aZÎü¦3eâ&®Fçå"V¹Ûo‘ôvf}«æ”„'ô~]G:W¦^ð“ç:Gì«ï]–“dh§Ó‹¤û’ò[׈×rjP>’RåâVw{kÜqÌ š1“JQž•„S!¸Aƒa ¢¨‰¹lð«’[‹þ/Ø©dúÀ°'z{©v‹a„ßø~Ó6^ƒ%Èm¬¬]yrÂz+ië5ç€q;XGÉ—³WLƒF(‹S—Ë«€ýmoγ_çÙ=x?Œ·€¥†¸Û¹í>–ϘÅDŸ_Bõ78ÚkòRBPŸÈˆZlRhÄ.UåDÀž"â„'5§a1ÖçðäÄÔQÝš8F¦V-µ>•4"ª¤ ÆeõKäÚlÁã~XØLPràìûù{÷éò¹×”®Ÿ!¸Äø¡†Å×$Š,#üc:8#g© wÙÔ+|Ò.Gw·)eýóŦ½›³*ØÑÁf¨SÚ61P1¤­ìŽ<9ë;Njc•ëÔ?äTàðÃLí ¢•Ì…‘·ñBétAuÓ@Q³s÷ ; æ¼G„"XøI„‡ëFŸ4ÑJ;mèöº·,-û¯ìƒlÂÙJM§’ýé“\F}†I‡¿òËV¡V ¬<Õ «þ§ë«$rÜ1¬ÇÞ]4sm5Lb§«ÑpvNvœ•½JÂÃçæe"ÜCsmwQ¹ …)•€´‡%ÀµN0CÞfç ¿±UX¯Rp`E«P*Ê¡GÌaÔi°^šÛ" V 2•°ÕJß*Á^`è}åBƒ;zFdOa­JKäË¿SžÄü!XNN–N Ó€7s=x±hsjµnP~I±Aꈨ,:žL¤® s™Ï ÏN™UÚ' Ê«ÇäT4.‹ºÀ%䕵B4XƒòÂ*ÝÇÂDfRgâB.0Ü|‚Ýâ Ú¸ûVWàφº”ÌÜùqÅƼ à?ÆÓý& *Ëdþ«ìbn×VÇ´bu ›Ü¥Wð™Ÿ"ÊXߟÞx@×K‹)?¦8ˆj*ŸÕj›<õ:­ÆÆÕ±ÅµwÈ Y'U°ÅþnÍ™`*=˜5µ6=bcU}½T!S:„y¥: ¦Möø™ãŠhõ)ÂuñþÔ>ÅÉÙèt-c2Ê$h,¡­T¬ôµo %<ÝMî{ˆó’²s#œbGU!k786H, ßfÊÒƒ)*’òV”uÅië®-åõV-¹Õ¸ÞS ûÙ‹å.ê‰Nxν‡Š»—çf.Òžv7ðÎTw¢z”qclù„âK“ëK«Z„±Ì!ĽÀm|çeHPEååßä“/K\´ñÂUÅ•‘ºfM³Le-sìásÜ¡¯ï–™´ƒ]G.ƒ³É;÷dCYM¨^§«£D˜¸B”߯½2v»BÄ2‰ÌÆÏá¸ëø.ßáB¯`uj—vs·>Ž{[pnKÑyÕ­ÂÂR½¤`ðeç*ƒ!»m[‘1á<µ4¶‹ÜÓE ¿×ZØÚßÐ*~Ë1¡9u©Ù‚ÏäówÇùÄ.–"Ö1¼×œÉ_v¥^;µ¦¦\x}pŽ:ôWH±lV£^@~âÁýUœ×ü%V¶x{zȺ;Iszû¨û!J1/:$CÛ?­\&ú½ôm:VEéZcxDiƒþåÓ©…¥)·f +°è¢Õ|”VÂF´:‰Ñ Djh‘q:Ž+hÖé*…RñÝÜ4û‡Íêé©$C tC2Ùùþ£@<ëÿ‰0ІýµX±nÛÚò[9Aš“•ÒÂã©z¹»µÈuT„«ÞY6©*,λÿ–òÆßLÙÅY‹#”ZŒC@þõ‹%u ôP. ø ¥ö4è3ͳ_Jƒ½Û¹kâÙ<ƒ[}¿öÆÎ[ÍÝ<ÝoyÝLÿ ¸mL õ'¬Ð3†…‹yÿj®ÍK£wâŠÚ·‡eŒ¤ÿÏ ŒmÕÇ` 3Ëð(¿?[ð]•¦uZKΑ‚C¯mщè‹ÙœÆµÀO7öuv³mµUHqMÐàíh³¼““õûȃ¶ûïŒ-R¾´u†D,âRÈ –â·¸=g7å|~õ²Ã©¥>5 Í\LJ>u¹Pïí¨Õ£ iZt€â² _WKd¢¥=<¹éC:¿ØÉYñQ[– »f"»ñÛøømü]Ѓ‹"‹ÔLܽ oB˜þ§8DˆÌÙURÜÀg"2Kˆ@.Åc ¦†kOŒèa;ÓÒ%D 7ªE…æ²ÛW¾9Ñj[iÉŒàaŒA0¹1œÇ#ím£þÇÝÉ·þY„‘á!.Ž“`!O Ëݪýç ¾­Ö ¦å—Òõ*z\¯‚Òô°“'0ó"à*4G[éÄpw®¯¯údò-ëx©o6Œ’‹±S§íæ?þD+Çâ5QÆ}T6è×hd¢yՕ͉ÑIy®¯Jv¬(¯lõU)„hP [tÝ­$Ouq-}b\%¡ÎÖ_óû+‰b[G±Þ?kXæÿgåËCl™?}¿Ñ2Ú8H$ K’Èa×¶å'C Btë¢>ËëªÿÚ¸0l/[*ã·¼ËÇÀe.0Ü1ü#8¸*˜7ZFGñ,²ú·ãö"jlîþ,ÂÌçûgågãmxÿS #Ák¶•Gµ!®øÛ¬ª¦i…e¥œ\ 1'ÒA&&kÙ¸q=·Š»à>ã¾ê¯#âk'ßâæä £¶¸Íb*®-Å¢±AW«1ˆ{ø¹qý}ìVƒ(>‡0¶€“WÇMP`ß¡5Öe A~ ‹ÇS++™MâôÕ©0ÙÌg%®hjlýB*LöVqú/ùè,p+­%Í™øí>^Ü##»¾ÆEdxÇè¯Vù¿ð»—ø/Ìÿ>k’Œ8nϹý˜1Âs#´A@ºaÄgqQ¡ñ<ûßý­Mõ ú°ˆÓý+~+Ï“óµY{¶ðç%Q†g6Å^Ý~¾ù©Íq†•§ò  êV!Ž•1žûÇ.o[¶/Ù°7©ô]|ë©Õ¶&ãIn8~'?c\®Ño ;Ž,¸âº:çš&}zS‹þ"üá‰Åu?mN¬5ÌýöDBlNõT³´"œæ!D°ßСCÅ›7of{0ÍâX–ñOô ÿ¸-ñlé¿­xÀ­†D Y;aZŒõ…Û Ã_Pž%N-ýmõÃ^š¨/­ÌÿQœX–oé7Çw»°¿ ÿ™—u;ÞÛÕ‡y…ü þ™‰ÕêоI+k¸?¯¢†ëãëÄõò±û¦›»ŠÄgZLqß~.wÕ†“™ã¶ÄæroÍèÅM³£äF߆b«ärñÄ#QšfÖŽõ%€£ÁCÜe "ÏÄTFG3*Z^έÒl¸'PÅ6ï^K|¦™ƒ€Êºœ%>,ý·R–GVV–Z*•FZ[[Ÿ···§±[ɛһV›µÅ¸ÊâªÐ¥'N嵓1o*¹£ü¯‘qqáæÒXæÅpYVVˆ›ß\<]b¡£þmŽsówóüÌ¿›¿›Ç¹Þ;KWYYiÓXÛØ]Çéâ}}}«‘¨£üLß #­DVZ;»Ä¢Ü¢ÐVq«ÔÃÃ# ûv\æ?#ÜT—ÆšÆî`»œ6Šƒ7Â.ßráfbuÍ‘n \âmƒ<¹îŒ(>ƒŒ‰(ºm‹QŒÉ·åòìü54¿±ÿwìRîó'sj“JEÛåò„ãØ/É‹t×ëÀD©²¨Ü[9m÷Ää:Èž&¢Á…ê̋ϒŒÔŒûÎÅœ[{6öÍK.ÑÆrš˜qz¿†Ðu©¼xL¬¸Fü¿"ˆ5jMiMX$  º~èû­:êÄÒëtº1 ñ +Ž8îdÌìVò%x®×fW…ÕŒ(:Ÿ8vâ‰û¼¼4&h%üÓÏxuí ÁgßHp¯‹3Êß$f¡>€‹@¸¡ò,+GuB^lì=ttHJFÊW°ÎèMñøïfyjkk{755õÆ·Žà$ 555þÙ—³}Œqð¸9ØørwnÚé˜x)ñ œÖbcá*õ$惜}zjú²è“Ñ3ȳ;j÷ÄcGŽM§wrd…©ííýßÔ†É)ÉsãÎŽ he¬qþJ°‰8;mmooç§ûûªíá­ze6áçºí\îê ±9ã¶Ägq>j+} ƒJÎÁèØ“?áöÇå<{>¯› {xÑ&r\ëA bªÈ5à¦Ä©/5î~¥‰ý–d šÂa*I””œôåéS§ÿuñÒÅñgcÎ~ýËÖ_Ö"È“ˆ£Ù@ èæŽuFˆÞ:ÚØK Ø­Ô¶¯’Ê1üW½óåDŸŠ~èØ±cïÉ©,ÀÃwÜ[*"ÃÎÚº9:xˆupàã–ëÅÃz3þ‰pµÔ´ü²ý—Ý999””–LHMM]»yãæ·—„ðO?j ø îëÁ+Üíâó ±:ó³'Ëò§öåëq£Õ,Ó«1-óÇÄÆ«+«½5z mG#ÂȾ£ Mõ±>žÆ 9‚“[¾ßÑÇ„ó ÿÎ+Î{ÞÉ!Ÿ[Û߬þF_RVêØªku¥|Œ°š`¡o\œ ÇŠšÚ/´‡”>ÇÄĈãããy†OKÛ§§ÈÿgÞ§KŠJÄ9¹9ìDš©%œÔ©ÐÞÐçYÓ1µo¨,ì¿ øåLö²­®ŒÛšÍùÙZéqgø=•B\(iÑ¿u0^T\Y=üA†‡¹½¾y÷“Nø×ZŒ¡h4PÁ“¶IꑳuëÖ[šZšgÍ™µQ4tf›ßdLÓ®n”'m"XEax¦§J©ÒaoÆ ÑÁ\3}bάý¸KI—¼ZZZú©Ôª€ðððÌU«V‰{ì±V~’V«í~.îÜl/O/ǩަöµ,å›ú`[I¬ÏQ»±1Õ½Gw!Ì6@›OŒ s`l„Ô¿!Ù*YÖfÂN/ ëÑçÙn[[[TÛÁpG}œn߃> œ]Ì’àà`?–®‡9Ž(£íOÖä7w–uãÃ7ßGÛú>ðÀ övu7¦Ç‰dv%†A"•håR9Áo¸-„‘\ú£m瞉`qÑIEíN*¸édJk¸—­¡X‡k„ F²Âä’Õ¬á"ìT"¥L¿:>—khûÃjβ!\r‘ôÄaD]Ü®Pž8SAÿ.èܹ3C4Î,êd2YÝàaƒ¯ìÚ³‹¹z÷ÎÝcÀ=vaäg<aYsîM M«R“Ri&/Àlé…KàŸ}ÿý÷}衇8êè¼Z4†eZ·Yã±pÐ1~ R²oDHPÑ«v žÖ_ýu’£‹£R¥,è#a’`"b‹êÄÌű ÿø|©cPT_&‹2´-"κÓ`×××Qá`mF˧—¾™¸d ·¬SeE¥¡°¼°¹¡¹µ9Å1N*ôÊ8‰kÔ8;V÷‚‚‚^înî›îuÏz–*L›/g_.aäpÅE¤½= ¸¿j2ÆÆö¾¶«—1qYqY¹—ümx×5µ4I1¨)˜ðßWè§R©¬«Ê«–Éåëà]^SU£··³wÄ»~d¦sX®Æ»ÉYâ˜:‚æi‚£qÈpÌg@ĸ"8l;wꚘ˜è–p!aãÇ .Ô¡oÁðÊE÷Ø·gßN¸{Ò›œY[Y–Íó¾Èà_ñÍŠ–>ýûà¦f ‡ÚˆÆe»1pâÄ ˆr[90´[C)œLl¥DÙ{ScS+~D8™ŸÆÅAèÁœ|‡ú¡ÞGT?8Ö×X"ã?³´–u3ÖÖ÷ÛA–—YzõobØnM’ÑDöÏ<§¿ò}(¸  g[ÕÜѲp·“SbM½ÎW!3àBLȸλ¯Ô5rÖ2‘hLˆ³aCJ.Îè`QO°nHˆólÅÓ8ö"4,n?;Þ ì†¤¤$ÖX¸Ó…LÛ‰¡lf~JßØÔˆõ²ÀÔæÊsËÝŸ=ÜÕÆÆ¦òÞ{ï%ŽÄ¿BÌÒ65Õ5î‘ ˆbúúúz¥$§x¿òûNð^2vùú”——s3gμ€ïÔq[1;Kѱì33G£*úé_ ?ÍЊ””‡ôôtŸ0Ÿ°4o?вcÑ`Äærrò¿€T,ޤ^¹råáä„äoÃ"Â.`ЈÛEGT _ýË/¿ìÑ©S'ÑÃ?œ‡|ëž tôà’Â’;G»äáÇ!¾¿"`ý=E ‹ øIQ.Lb¶ë¨®Ðoµ¨ÕêªÄóç»–”;Ž3êâè<·  “w ÌÀùLPQ¸Ë—/‡£,Ï¡÷ †·' nîx¢HßüüýÊ233ûnß¾=tòäÉ—ñ©µ{÷îôdÎÁÎ!°´¼Ô#?7ß×ÓÇ3y̘1D˜¬Æ6Ô6h†v~+pô:Àj©XPSQãžœŠ ÂûB¡à ›ðÔáS~Ç¢I^ýj6ȵäçç«››]qSG8`Ѐ·<==­ñZG~ÔƒÒÚb2 WÈVÁaÁÇñ­uã¹zªŽ~ ª¡=‡Æ»¸4@íapssƒ©¥6ósèsí&À´´4’L8”­@>ZWWŒý8ÔiòN[³fÏf´âŒÞ/'?ÇúÁßý÷».nnß777{ÐnÙ´EÖ%ìM«uˆ",æ˜2tò¬_¿~¨µÜzää©“_ÔÔkNŸ9ýsem¥¬0¿°)ìêjêv¢Ï¾ z@DX†Eµw¡ßÑ„»ŽëêöÖ×Ö ^˜¬Ÿ@xúˆ8J|â`õ;vì°¾WhZ4ÝÑ®ušxìJîÎÞÖ>µïÀ¾6L¶j媕ЕºlúgPn~î;3fÎXIù½ì*¤P^Qžòýwßs*kU°V§MCy @·ß2Y¹Ð6ï™qOø¼¥ƒJ]íìEÙM°ÖMœ;"qt€Á‡´ê&.®°Z0ÑY)hÒ6ëfVûÅäV¬E«MB4RÊÐÌaj¼_×AÇâ@ôÕ¢Ó‹F ñ¾§«ç~tè_?ß·‡Œòá©èS÷åä弃YzOD·ˆ9øþüõÑ'¢{nÛ·MáèŸ ‚¡SX+v9:;~‡Æ9b£¶ÉÂü™×åfå®lhl°ëѫǴûfÞ7³iBvNöÇàý‰SÈÍÉ%­)ž‚î.ŠÕ@'œdû<¼køT¥ —“•óŠŽ` N›ºÍ}qW QÐ=òÈ#1Ó`›D,ÄÂÀŸ1±pç±\|B|Vç;ýþé¯@º4//o¸Œ™”×·«¿}ÄfœƒƒÃGÁ!Á€ ú$þB¼;2­pÃî–¨ZeØÂш~&7/wfõ{ Jfg.¼3–Äb0ÌEG.3nÌã>>> À‡CMn ïJ^ß’òâ8pLïƒgtëÞmŒ­ƒmRCM ûNa9*‡¸pñ³œ}ŸÚ^ý>:ùì-Û·œ<~ôø+Æ4© ûÐ>\hhè&P'´Ó­FÛäãë3]i£|@a¥ÀΣ¬N¤É„A×ý˜Ð Ã;o7ˆ à$gç§ÁíÙ·gh~AþáÉÓ&?‰ö­Ç¤æŠ‰450 °ÆËËëD@§€¸³gφ -C)~Y~Yàù„ó_6·4§Gv‰|ÄÁÅáQG'Ç$m«–Ú@|î̹!zwF;=Ý)¬Ó\Lûкa²¥þ+iªoÒѶ”—¹ƒ*†áøƒ>p.]ìökš5Û¡Ö ýgP£+--uA؃*…jÛ†m¾†~ÏO¢0 æôéÓV‡þâ¬3t³Ou‹ b¼ýËÛ7oŸOe>|øáÚêÚÿ ^1Ø¢2ÖÏ×o5&5ÆI7VξÎ? ×Þ}zOëÙ«ç½èÇ©ñqñoè’*¡¤‘qˆ”™”nY]@ØÝªª«Fâ³ ÄFZPX†²jõ4ÒÕàõù-·ô¦tÛ¶l{¾¤¤äQ¹B¾cãþ®]»®Å$Ð3î|\?pé¬ß“Ú€ÆôÅŒ óðê; ãpQXPØ,Ô1|DJjJà ¿¥©;aìG‡­`<þïÝwßu¡2Ïž:ûYKsËÀN!/aüÎöôð<ÙÐÔàɃàoÓPÄÛìZ¡eµÁhÿΣîñ°ÙÍY[ r[4œ&ËàqtWÈpO´–»”_)ÆÝÃC‹.±´% £¸þsÀÌž<Ѹ¡jð„±©¶I e« µrô¸Ñó jŒ1jÄ” ˆÖLÌ’§çΛ»³vúøñãO4p©»‡{Éј£Äi'‚Ó+?qòÄ.¼ç­þvõ~¬˜žQûê§Ÿ~²Å` Ñ$­UÓª‚Ȉ˜†Ní·â³Ôp0LתûÛ*žWB:E.5=5^&—]quwݶiæî· y\ÃÙyóæeN™1åk+ë\ˆÐ$ÒqÐÅÅ*ÊBW×m«,†º+EW‡äæìVéäà4Õ«GïÏA4Ì‚Š¢`¡T$=€ä-¬:’(¯#'ŽLE~™³fÍšL¢ÚŒ3Fß;z>ð¹Üù`,u] Uʉ{î¹' ýë¥ÊªÊ¯‰½"à†@Ê‹8#z°ÁI/a}AÔ€åØÈž#7cr©øiÝO)ìäÑ“ Ðm$rÉš§~JŒ]²”ÄÊ—«,®œ‰öòëÖ£ÛÃ÷Ž¿÷ÄÀ÷dáùêº0=Œ(¶à°FAú;nì#sæÌ)ê7°ßö²ê²9Ày ÝT â6¼¹©y4&¼“ú}€µÔ:ÂÑÑñ2úƒïê/VFM€ÿ·v‹‚~Ãêƒ80je¨AœVLV8 ¬«ÅÄöQ×þ]K‡~yÕª/W±q[T\4ª®¡î“¹³ç®F_(3ñ&Ã7­äVÕU%U¬¿cÌb“;rƒÑïÅ· _ÿõÖžác†g:øi\t·F"–”CÄS£Çìì?ãQÓXÕø)&ñìÿûßšòšžÀÕhÀ7RË£ FŽùo©LºU©T’ʈ]NŽçíw]ú¥ h‚aKÅ .áµû{=ùÑ€€ä>î.‚ÜšF­Z$6ÐÝ/: Ù;x²Á9î‰Íàî¡7 ê nh‡éFÈ™^àFk#kL£…b¡aÿý¿ !Žöêիؘ‡/tfáè8ûÉÿé§ŸÚÒ„SïãíÓêçD%7)‚˜ª¤0\åª[.ÂJŠþÈ[V]U»¦ª´jÄ™¹péнáhk…µÁÑÙ™mÑ ôXýxzy\|GÃ}^B"(í;óCšŽE H.»1X’!† “ÿ*“É+¡û|”ò„ÓªmÕBÄ#®šë7¢ŸˆƤ¨Õ ·éò¥Ë4Ø9~;z†…‡µ¸¹» Ôi È¿b㦰ªxĽ¾Kºk´Uxhøø¹a#‡-qZ›z9uùª¯Vý¼ÿçýöàDš šA["&}7|Ôð¹AAA»°_l1Dü…y…è»q0µ«'}7s„oðU”e,ü×Â70‰ì¼pîq$´8¢ e?^|ý|‡AŒ…¢KÆ4”¶Üt9ôÄ4¡qh3¶ÇHðªÐ tBøõŽ¶Ž FˆÇog{ÏÅžûäÇ5?þ„ÁähÀuKѾ,޵ W«ÀH=å%·–…ø–ƒW à=ÿüó„+væÌZ³&$,$ ߈㱧§›“[:I+x‰¤"Ö6ôݱ<ŠËŠ¥ÀúW_}Õ:°O`-`9Ó¢k¡z»AÚ™îäìt mWQ[ B"\½vuå£vTß‹}¨à¾áŽõSWW׋˜°²îÚØÜØ b•Bñ.§ç×?}fgcWÑ*h•šÓ¬knB? 7hgmÇt‹-"N” HqvrÖV7VS;q˜hÙV;z¯(­ðÂÄ&êÑ“¥þœˆ‡|Ò!µQ¿%$ø_ ‘™M`•M•V˜hÒЗû¢¯êlâ᧺³þíìàœ :ÀÒÓ¿¿Í-Ælb8²˜m¦³“ç=6¡Û+ôt¯psqfÖ7ëmÁ9¶0âH÷ÂȸsE5Üæ3éÂÓ)yºKW*D9eïø1T̳7\“Ž7¬õ׃+`³5C²+€²:ËÅÕ¥åýì³Ï2äfgd«‹‹Š%'#%/S¬cгLñ¨OdÙeµbÖÑb C™“›Óãc'Ží:aÊ„HÄIƒ† ú[Ab’³“µ4t 0;DéÈaE¬ÕSlp¬ÄIàG~“#] ú%õXt¾Ó ŸX8yÎCsžœÿèü‡ñ|ÜÝÓý½âÂâþ€ßÑ`“Wk‘f«®¸N™[%ÆÌ_$–Š…~¡~=)¿Ý»w3…:Äs{pKôI®«t­:m6kwéÖå0ÒÕ‚`¼x'Ö×ÕGuìzèàÏÕþÎþÖÌ|േæ?ÔDįN_÷tª"­^Û€ID@R[Vë<,zåÕWús:|h„:™pH~rTWz®ûn]ȱÃǾ×€h”s¨ŸŽˆ>yP½p® €×'öx¬ü´xDø²†x­§Äð6Çò)n™€Ã  .VÆ1B<5Ìž3û¥~ýûE¢LÇ‹.¾Â#%ôn¬<(ë(_F°ð.…TJ*kÙ²e4øX¼^={齇\©,èÓH¯‹Û)…½Àq÷ ‰–€dúNSÛKÛàæ0‰kÑ?¹…ó*(É!gGç ˆŸÛ¡#w¡ÛDßAdr©Ï>2÷š¸8ˆ‰g@ð}ÁÙ».‚·ž¾—•–ù ¬aêÔ©Uj¥Z†=”„'jÒurŸýç³^Ð{ºîæÞ=zK\Ý\µh÷—&NžŽ_wHV÷ôíÓ÷u¬Œ_Dt+LÆÀf[Gdžš´ÕÄ›J%Ü ´­ú·H'býß´ZôP¹ÈПr¡s.¨m¬õÇwzòrzBÝàÎZŠIò ½cF&k.&.ƇüP7ÔÑE÷ª«c¯”»¡±¸ŠyÂÐ'@¥¡Ú;ÙcÂÇ>ÛÁ†º3.‹0n`f¨_ü}#dtÔh¬Ò û»f ë<é`ÿÊ„Gv-"¦IDATnÎâllÛqÄ̬®!Óq®¶V\ry=·lÏ%Á²\Jq-í‹d³ºÓï_€å“çõB=¥L„Û±àÐ)iÖ'djÁ5íÆ"É8ˆ-/¯ÈÎÎö ÿ8@šÑˆ“£De‹¦…¥mªkÂô/R@"ŽŒŒÜ ˜ îé ðÄ-8rèȤ³gÎ>NËŠkÜÞ W¡Oñ… —ƒFafƒpÐrÆ¡às´ÒH/§ŽŸ…Ç@44É]íê ¢¿¹EÛ"øyÓÏ÷!Œì¼Á}7@\)fo9Ä#Æ©b‘©N&–½°sëN‹$XÌ’˜œ8¿¤¸D²©¿Óʧ‚&9ˆ$éjõ7 "Ï£cÞçéí¹‘¾·ª[ûGŒÚ.dˆõ¬ì—AoIÄ@†z* yÒiµ؈õá‡Âw•„±ÔKé³Ò³F€M¤w£cõ¤wì«ç^É¿sÇÎN'x@T·Ù½k÷gà fõØÿ Å‘‘÷j¼ °0°{mSsR?ƒìŽÏj릭‹ ' eƒ 0‰#4ôüØ‚ 6îݱ7àÜÙsÁéM€ô 7(®m¨eâ µ5pÁÚ‹žHÃÒC¯¹dÐ8üŠ3TŽØ‰ð6ÄèEØòu0 pÿÍJËêØeÇ T33µm+ˆó©êÙD@õ!‡2X»‚°I¡¿¬ñ ô© ï÷ƒÈÄÔÕÖõÁÝJ§ú軓¾“ê:òJlÛB~Ðín®n¶gNžY¢â ÎLãÓ˜¨—ºQJl”Š=h‚aØsø:üÂŒäŒÈÂ’ÂwÁèQ»K±šï¹Ð)>!’ˆÎ`²|kÏž=Á~öÄÙÇ´ÍÚG°ÀHx°AM³#âH0¨DÜ/S‡vž]TÓüN|iu÷ÌÁ«Ç5zƒP #³Åb¡†S*¤Üœµ| ÒÄ‘R³1ëH7Ržc”‹ä:ˆXe«ò©|(wÙ ìÓ¯Ï÷H ä}ý“>‚n+ƒhÙ=2ÿóeËÖj4Ú¥>=ú°´B:i1@*°ÒIÜgEH`È é™é«°sð£ÿ~T‹Y>œÅ'}ïë{ÈåCOÂf*‚3?äõÔù)o=â^F:5´nqØbÁn Øð‚²¹ÐÑÕñ޹ϟù\VéP©tò±ryƒ­ 6g‚«M¥x˜¡ V2«2ÌÂŒóÂ~µ—bÎÄ| bÿý{ï½wÒÑÞÑuÊà ˦AŒ$9Õ2ÔN|¹8Þ?mø©(wþ‚ùÑ”/ðƒ›lì[üðµW_{<0(Pãíïýì#Õƒk¬ÇV ­ÄZr8ŒGW¼µô­???!t¶_Qú‹ñÆ Ñûü…ühOÚŽÄN™ _$AﵜìÇcŽG••—å@Þ9ü+è•¶QüˆðˆfLbñàÞt TE÷¡ÓÿwÏ®=¿‚€—C¹î‚­JuçˆÈqÐß6¡®eôŽSb£²I7~œ|̤1¿ûî»ó..¡ÖCœŸŸûAþÀ|ÒCׂC¥ ÚÏÙµ{ïÙ³ç,м¾  "Öäìê½Ü[ˆÚÜ)ø%ìVø~ׯ»¾ÄÄW 5KxPpP9Ê?pômZ,n\Ä$Í8v¾o"Œõg_ßFp\àÏ1fôâ›ÀµöE;nÀwSÛDv‹¬…>’Õ‹€Ù¨óB,–-ÆÉ®‡)õóôŽÅŸuØYð Òqã'ß÷Åþ_÷åfç>ñɲOaBqÄB‡ºe`ò#)©4¼Kø‹i_£Íw€mñt÷ìg§°û_ ‚ê"Ú’á"²kd›Ø&£§‹È%´_3È7(w¡SR‡³ÇѾØ7'¹oÊ}YØw–²qÍFߊêŠå˜Á×=þäã›!¢IV®\ÉãÏT¯ºòº`,t܃…ŽêA}ņuË0ÂOk£ŽÕ ÕJ[WÛþDbÿ# ‡,Øgàqw?wö´Õƒ€æA'ëý’ˆ5é![7@®‘WÙxÚTÂ/زeË8èb½ºv뺱˜& 7ŸN:¡®’8bâD¡ë“'y„*‹]–¯XîîI0aò„TL(ÄMôí¿ýâÛÈ„¤ù¼óŠ@XkêK°gÉEYJ;ª´Ur‚‹ò3Õ™y˜œš(1œ8ýþP7`›×ip¢ÅØZ¤”*¥)D„þi?·ä3V¥5 ý:*±5¤œŠ§ãdRzžk³)Él6R<þ‡¸¬áÍÒÊò0ƒ *äE¢0o/‘¥£Û.m[}ø8<ì¿ËÏ”÷ƒe\> ÿ$¼ð¸¡'+—ÒS¹ŠåEpa2OË`@|Ö)±ÿQõÕŠ¯Ža³ú&XŒySž”¾ƒüM„…Ce!=Ës׿]‰ñ‰Ãà—ó4Áj^åKx´Ä¥Y¾¾„†_*Ï,¾y½© \Æz³r) ßfôÎÃ`Q/ËÅÊ£8ü`àÓâiÂY8Ÿ7Åãßùö3Z–eªŸEôò1Ï‹åMeòík^'ÄåÈOá„'c»0¿YÞ×­Ÿ'=ùwcz‚ƒðm‰ql±zBþþ·«¾-Þ´~Ó;ï,}çž­[¶®Çdiعmç4¤hŒÉ0¥¥oÆŸ vªŽeò}Øn—|ÔÌói—žåaÄŸÁ?ñÉ#•+¨k™±éLVüñô²gÍbêØfßn©F„t˜ˆ4Pƹ^ùqKy\¯Œ› ·@ׄ‰çâÖ¯_ï¿}Ûö ©<þûõÊÆ £ ”é6|<3|˜ÚØféo¥3KÛ.ŒÏÛüy³ñ‘ö·òÛ&ºë–a^ÞþnN0nK½Ñ><¾•8QóÜÚ5k/÷¸~Ýz:00ødƮ͈mÇpýñ¶ú]Ý;.è7Šüw‡óˆ#8øŽ·Ùl¶ç¿ÝêÓœ(dx½ùÆ›‘جÛcͪ5‘'ÏÅ  ÛÍ47^ÈJøºƬ‰¸™øødº5Z)ÀuX<סÌÒ™ÂÐÙߎ‰ý„³€C1Ú™¸Qc¸)ÿv<ùö執£Ì»e´q¬fxpÅ1ÚQð;òß,úÊmwÄZþ“-€ð0²í ð °5Ç´÷G€§. ÊËg†?Ž>}T(¾ƒ·ç°ÁlãÆõáÀ—AÊtþýo| Rœcå–ðsM˜x˜QZµ¾¼UäQi‰wZapt™¾ÑÊ2†…šîØ^B'~LŽß§ˆ… VÆb»ÅH 4;ÙcŠ{;^0™ÌFOg·£Üÿõ2¨OR_ 3ÐÀE±½³}žåF?­D³ík·O<ѹÝåÞLyüà'Ä]s0ÞL¦ÆeÊÛvíÚµë±Ýâqì†ß­oûùù½‡Õ´÷p®WŽÕÉõ0Ѓ ¸4‚¯{ÃhÙ¿#ü1ËÞá4ÆÚù)½…’‰2>¾E˜‰¸¿³úSž™—3à 3 ½ð hc8Ë‹':TG‚›ždÕ&ãb3Àµ/ê1²„Í%slÏŸ¯ï·€…6ÙœrÊÏ¢\ŠzÕz`KL ~l“<Ÿ'V¬Yݰr)ÈÌÊô½”|ɉÂȪ O†;±L³ ¶W‚•àêfʇYö6¶Ÿ¯)O„“->öýüÙó}a¾kEô¡è®„3c~¬Ntš qùôm·ý¿ZÙæqî¾_ÄœÐÄh"àú$é ÉoÞ·¯“ËŸŒ>pÛØÓJYæìùúÖúɇŸ9pd¨%|8e—œ˜üVAnÁ ƒ®ŒööµõŒ kþÿd8¥¸ø™«è»)Ž1­ ÿƼ-ã›ÂÍÖ~‡ŽÆ¹ày‰ÕHÛNçJ~ZLbáX9þnÕwŸþðÝt–Ã~»ÕÛÞ~Æ(sË—/7© (œ~æõ2Âe‚ƒÂÍpÈÄz>ÿ4‡gå—+7Š:´Ÿ£´ø±ÅÂéK/½ôÎÏ£p˜´âÅôßáê‰8<þ·¿«sG°ò嚥5Õ…Ï#öLìП`cöX 8Lqñ‡©£²)Œ‡Í<ÍÝwcŸ"¼Þ)¿Ž8ô•ÿ w:útoœ˜ëà¿ÖœR­Ÿyæq(`$$dc0´sèîÞî'áâ<4Î9 à@Üp‚!ÑiU‹6"3Ëð³ °\âCqáÈö'ömwGŽâ0¼gE",!WR¯ÐÑ- k5Š—w,>Š¥Z»šºš “gN²pœŸÖ#)ͰÂ}¿ì ¡=•äçƒ[2Ls.FtüäqÆñbsë[ýzõ› јm¸}úé§ÙÂ] ôC>t["«åi„‹ËÍÍu£zQ¡F‡òcb=}Ã~Ȉƞôn„‡^QaöÇpÃ>˜ýÃþ2œ´Ã¹˜ ¡ÏØÛÆ[b"áíСCÁfÜwÇãÀ¢:+ì?ÒOZÜ!<°rr¸:å@yªaä5”+gö$yígm̃óòõÚÕ«w¯>0È@¢Çï¥ùî¿;ÄiüO9Éx½ŽjM—H¥µ8ú+!D.pOŒH€¨0bÇÇ¥ŽOfô¨Uj2 æðý7ß'âàþ›;…䆘Ó1“qÊ`ÎH÷ÅQâLñ؛ۄM· J‹J%H³ìÞ ÷~‰¸d s,ì¿ùÙÚÙ V«mDD×7oZ·àу(5áÌkàèñ£gÁ Ùo¼ôñ{w‚­Çiî›°ærb²wjJª§'¦_N/Gùû÷ýºo6NÚ<€c`aÛ·nOª(«8ˆƒøò鳦¯9s>tó–Í£°Áµ 8´‚Ô,¹Ñ¶zNô™Hçl›aL¢ ŽÜ=‚ó«ƒ`>ß W<¤ÁÐÕëÕë½·ß«Blml{áÄ…ýgŸ}¶›Áß aS÷þ²wÊ~Ç(û9}¦ 'Ybq¤¦¹¾5“\ð͘:ÚDVäw=Gyé4‘ŽŸ½ئÂP§‡NôèÖãÓa£†E#šŸþùàÿEœvðâœÆ9ˆcbÙ¯¿þú&l¶‰Ê‰zEe¥ºD¯’ çüú믻کìæb³ywlb÷ÄiŽ 0)÷:6I_ÀÉ#É?ü0iìØ±°/ˆ_±|ÅBœVŽÍÂ]² ²Õ0SõÎŒY3VØGÀñµ)ee‹î·uóÖÔêºê½ u ÿYòŸÀ&îñ.¡$dÝŽÍÒw Ü ÈHŽ8|™±Ó'8­ÀNð™‰"é—ȹÂèçÚ–†–áv¶v_ƒPüÇÎÁN€÷›·nÜÚ‡"ÀÐÀ4±Dô¸ÒZûn+`NéIœNx#""b5øï.)+y7¦¸ÙYÙãazi…“³£Ÿ¯ßëÐinÀ1Àç òþ‡Âq†Ö‡ð_ÄAxâà@ ZAØž7\‚£z˜+ JÄŠîLp5àLsfpPð¶ö¶GqûYœxË$î°þRˆcoµ °E8µ…ó¤³aHáU*?YÔþ¨/a¢j L”} ÂúŽœ5l„×QT68¢I0 úòÝâéåù%LxÍ.ž¢0:_]×T÷ NÖøøúú¾£d vb~^þëbNìAq`íºý §ƒ(*9Fô`+ò±œÜœQ ¹bY·®Ýž‡Ý=¯¢Ò¢Ÿ@Ø»Q¤=»÷<“i߸:¹¦Â|ÛK°¬ríù"Nµ¼z¤=z´û#G‡©€éM$É‘À)YÙY ëëøú¾Œ#ŒN—“.3|#Ü qßÕ4iú!}+p÷B~aþØa|Äwé’Ó'OÏ¢²qmLAqÁ×8{žàð ̳m«©¬ye¿†`³IÕÀžô~×ÝyøŸãÍ›gˆkaR‰:0ëÄàÔh›F(Þù#Š ×>KÝ~ä÷á¬éEʧ'×sãî»ÏáN“wàaКu:}2ì¾Lá°Z<DÉ)"2bLâÞiY~]"»§£j °©&NX€¨…ÆWk Ó|DZ–Á¸)ö¶š°hÁàÁC‡ãL-8(¯ÁqÄL¢*Üjø’åâ¹À•n]ôÒ"F¬pæ˜[þñòjÒOA9Ÿ ŸË0š{ÊPo8øY8qíX+q{†?ï˜SU[å »Š÷;’YìÛ¿ï:»”xiAxDxƒçHㆠò.ÒpEùE]qÓX¼¾wìбa0C• ë>ág ®¢-‡Ñ†Ok«jÛ&•ë’EʵÍa2Ò€s€É·I0æúÝSO?µœB`x¶êLÌ™8y3âÙ矯(¯x ÷Àœ?iüCm)q2°¡Î–}†Áo€ñ^2ž‘˜ž“þïYófѱ4rrk½€³¹¬}`EºÔTrÍ É5è ÍÄí}úñ§-Þ>ÞÛqÌìü~>ÆTUT‘ú„ƒxÿðuòþé÷Ï%?lr߬ú†¼D8o¢¶”ú®û'bà®1ðh;«7üApYaÐA §ÆÁsºULDâ¶qU’Œ[0½^vf¶XXôÚ¢Ëz@2шÁð!PW¼‡‚Ø5ÁØ%#z³X.fbºJ¢rAÒ€`0Qº4-ˆÜ D+à1\3ó·•x÷ÿŠë÷Ø;µfW‡Û1‡…‚ó;ŒžŒ{“_¤Xõ¥[ýØ~?^—„ÃðÞÝ[#ôdž0aG~p—ŒhØ©í:Æ[*>å‹"IJápbhàj¶MEº³GžŸ€a _0EÄ€e"¼Î^çý¥ VhjDÐS A¸)Ä¿<ˆÈÑ@‡)"a+,ái&ΕÞ)/6Ða™Ä œ¬‚‰¦ 2ÄRŠÂDsöDYzܱ!¯Äú_/¨Á•¤lS\FäX"\ ?#]"º("{Fö§ïÐMŒ\~q¾æ‹¶‹žØZ$¬RX‡&= J›/8ãZX§©.¾|éßPÙ¨–‚à-…Î4 ô°£‚%˜@Êuf Vh|›››èR*6™è ¡>ø nÄçM~ö 8cg&(ÞEzPƒud/DfÚžM0ÏÃÕC I€/»‰¾áʃ ªîPi°‰¾Ýuw.þ #[QÅLOu¯Ç@˜qJÑ)ể3#ð pû÷îÿ$!.áPeIeßn]º}»Uô±èW‡Œ‹ç/Þ‹{"ž'yß`6ŒlÓñH½Èdƒ R@ƒ:,†sl•Ñ`äi˜·šŠ´ä¬ÒRÒþKÑa‘8iêSÅ0Å¥†®Î›5ÍÁXÐà<=Šà%»wô™Q:,8l§9:µ¡ôƒSŽ+`ÿÑOÍê,",§p°HÁt/‡ŸqR}zõ98>\õáƒ,ÿ°°0áÿ‡ÛðJè$D¤ùpJ!8Vkòã²®\ïûFœo —`¢™C÷×À *#Ò˜Ä Rmb5Ÿ‰Ù:O.++‹M(h1ÌQǵgmílûƒÃ¯…õ‹ ŠN ¶‹±êí7bÚ´X›¹¬mѾk?´" µ-Ðó-ß&m½VŒÉበf€g6Ù7pø"3¸ ”´¯‘µâ ‰°RÞ˜ ƒ¡ö0𪂈ý/Êkܤq—wíܵîMÜi2=08Ы¾Û•ÊË0Ôâs+l2±ùþûï_}!öÂhX°ù5=+ý<®Q  0.Xt¨nÔâZ‰5‡Ë®ä vŒø(T L"£,‰èqÖ“?†òQ\70ê…FpÀaàÈö<` ÁñR§ézQÜË`£nÁ…>õ«Më6ÑåPïáèß臜\7Ø­‚«e„‹6dќŧü̶àh’.&©Q·Þ^úö\ƒ(=1zÔèÏÓ3Ó~ýiýOSãtL"¸wå„·³÷YJß³OÏ/œ¿ÐõÐC{Àµgwj:GL`¤'yzÑ¥öÖ¨;?QqÀ‡ y¨Ì#ºÎÆÎ†Á¤¢0î5”ç*ruv•À˜®æWQhÁ"æMfL[üËŽ_º@¤Þ]RQ’=®&%DeŽ—Oqïº;lCê úŸ5¶­‚Šòè¡£t}ã=à Ô0ÀY §aWð•dŒg }‚:N7DÐ[*—F᢬Ÿ̈!öäõ‡¢‚Áƒø&Â=Ç÷‹,ö ð9ŽH ø÷ãþâxÜÇ·tÉÒ¯`%º«ÛGq»Ùhˆju +Á¥˜m)²Æêïs Z!JFÁ¾ÜfäKƒÎ 3@ÔɘíøÉyÂ؃¸K#l6ˆÀF\šî‹;=ŽáÎéZpÅS¿Dî N—ô’$¶~A~' w¿ ƽsÀ5YÁ¸çê݀όãC=¦bŸ >»(nVRV/ µ?¥gîÀ¾“ÁMžŠý÷ÃÒw T Ç@èSa‘y€­ÒV‚•à£Æè¤O¤#PàpgîѸ«Eõ@ ã~åêë Kó9}2²rfb•[]_U¿uƃ3vSz”A»I”·wû0Dí~¸¾á¬VŸÃö™œòÙáàï`¥æÔ¬ Ö}‰Ëæ`wq’—¹{¹ï$?pÒy»`»ÎÞ’Ìg½L?m°zàjè‡çˆâX'§x²+‰«Fh¦½òŸW2?ùä“¡À{.Úf4Òƒ×C0®8t`Þî_w? u±YRQw݆t0ÒÑüÏþÐ^4@ióµp@ÈUO5@gÙ.=åižŸe8…-y}É—0­ô©y<³wF8Ìüæ°µ+ q®·-™õ‘%\{X;‚/×Ö®. £íüˆk 9¬4,ã· ç˺‰'Ëïfò¥¸Ä¿Q¸ÚŃÁ Åk~ˆÅ^ÑÇÌaÞ¼qó‹_}ñÕåô3鼡kâÅ<íÝ÷k޽?Ú_n)½Io„Žó?éÐ)ÉцkÚšÓô~@ qUôý WÄE’߸ߑq•ô2dŒÿÌÃùï©é^ ÞOùó¦ALYð'@X¾,x—ŧë(.…!>Õ‡ò"ÈMð,60CÄÂ6*—÷Stz§oF¸YZ>œæz'Gqá~—ÞXHõh‹mŠÏ¾ßÀ?ò4æËà±ÄÅC9íÚOKqÉãðp_ .>œáiX:¾N¸:¢úÅhp›ÏbCøìüœü!Øè?3ñbâdˆß[è&?c¹,ÃÝç…~ö½³ þë ¥Áhø´ü7K? \Fؾ\ñ凨L]>ùþÉPþØö"6y#¯¹c0Ý@Y”Æ¿v*¿#X,á²L{³õê(=}ë¨lún霫„Uü™áý·ú,®Í¼Y–ø±¬3%±¬wG~>~GaôÚO‰3ö¯à:†G –àU)ö‘®Æµ®Ë¨¥¿M*ä½ëî@ Ü%ŒS£Aè #uãÆ£»fîº;¦É \c$N2©qñW.8ÉlªÂ]¢xç4äµ ý½86J/SIEND®B`‚vlfeat/docsrc/images/using-vs-new-project.png0000644000175000017500000002073012236612215020205 0ustar dimadima‰PNG  IHDR¶#c† pHYsÄÄ•+ IDATxí] ¸Õ•®æ±<à±É"‚ ‚ì‚,‚  ÙŒQ“‘$Ÿd13‰_LDÇh\ã¾ &51щ“Œßd™ Y&jÔ,.ID1¨,ï±=VEÙá­ÝÕÕsnªÓ·n-]]]½¾S¶·Ï=÷l÷¯îù·êU'W¿:õ”Ó4>F€`\tGNÓš•®!f0Œ#ÐÕèÖÕàù3Œ#à€UE¢ÀÜO?á/v$‘Iñ¿8H™]‹ÎØB &阤4ä6“µkR®®mÌ~·¤¤®WÖø—:"œl×&MNv ¢kYH:þƒ²[Áƒg›C–˜Ì²íÛœ!›¶¸"j³£¦›ìì{ήóœÚš³P±‡€¶HsÜêJ4ŒºÎˆÉNqÑujÊ]›6•äé-K -fM¶ÜØrò<-¯ö3&‹k:°%œÊŽ3"Dìÿ=HÛ‚²Ò vfÚ°ÙžåN@ ì‰Æ$]ñ™ã8h™1em[¶¦¬m³‡ì®­béË]¿3b…fY€(l%AÙ´Ëž°-šBYY«k©Øvqg×r# :R$(ÃÑú«H@›6é´¦ëZ ÛT"©kI=‘L&ZÚµÎdâc÷Í!a&F€¨1P ËlÓ@ã³×ÃËÍg#Ð5ð¨";:õFÛ½™dk¢³åâÏž¥¥î[ví¦+þ¼¨(/z²¾ JC3:[Û³¶µù‡ Ôwü7 mÙüh&|³e“ úM´–í@Çuì_û}ÙÔS¾%w£Ñï­º—G̹éw^[JÌ‘§Y¹c×Ê»‰9jÞ H¿õÊ]Ä}úMD±ãå;äî‰ n–»%¦×ÿéFÙãÔs²s‘ùëžL;w)ÓϳÀYûôµÀ?åüûda¦ZEÀ#E¶u&fŒ_üì?ôöº/.ZðãG_‡BR\ر+ÊáÃ44ô̤;Û;rÀÒ0ñ›Ù«I9dóÞ¿NäÇÁÓ¯‚Ö²ï,g÷®þîÐW{ZÜóÆýÇκÆ=„ùñ¸SÅ÷èwÿ¹²$´Ð9’Eâ×îygå=ÇŸvý®•÷óøÓn€Ë]o¿z7¼FÍ»ñm3?Žž/²äÊ·VÜy‚3KÌßñÆJ~Lù¨ÈŒö%@÷=¸š6ýü{‹qN=}1“(;)²½#¡© >÷üî=ï%ô‡Óí=.¿ûÓ¢¢l;`V”?_vó¦»õΞ©H¦Á«È£&áþ“–ÙðtL^íáõB;pÊÐj4ƒ¦^i“EÇäXt7¶ƒíÿ¸ÈŠrrÛß=öÌ[¶ýí6{\¼;ëVh·¼(Ú“>p[ó‹·Œÿ€h~áhñ˜ð!¡ Ǧ¿~ h'}X­ÿ’­d'Ÿ­pIL&šžS×TE¢ØÚ?Š< –”«È5O}›ŒÌøøý@¯~ÒñÏϬ ¾KL0Õˆ€GŠlF#Yß+=|hÃ74kZ7wE¹{÷;ÃôŽd*›"a‰ km\n°Ê–á8ºIäÇþ“hÅU”Å€8¥(n6-ƒ× “K—%1,'i¡­„ç×5_’´Ö†…¶{†´Ü^h;ó`ëK·Âë$3K‚Ó-/ZióãøÞö7¿póæço†,¹ùy‘'š™Âü8é#wŠ®E gýŸ¬ýXh7='è©»„ü6"i¡ ’x¬yZäÇS>~h­~êÛ«ŸºfÆ'D–„c&‰Ä›¸ú?\ÍY1á¶JðH‘­í‰Œ‘êÞ-ÙÐ'ñÕ;–íÞ½§¥å(Ü"™ÐÿåÌs/=væÖ{7¿cÀý’yGÌBRJ”Úré1ÈÚ·æ{4km¤‡Í+î÷ß´¾½@ÃZ‡†ÏÎAȉ–A7ß…6dI($·›õ#¨]iCðn¡Š”Ç›_ðØÍÄB’%ÂD9ùl‘(•#çB[‘ç.#Ð5ðH‘-m\Š—­3z}Ïôða}ôApY&ýÀ¢¢¬ï™é‘y÷ú?.œ›úóÁà !Qƒ+6XH‚<$JXh{*Â÷Ô+!@ é)À„‹6"$´½«¿{‘H£ü°™×`÷"•ûôQ†¶#‰à¯|CXERVð¡;°„ˆ QÂBêGZhoøóM9Úå› {f*ÏÙMK'3»—g2z·ŒÞîϤ´ŒqÉ×&ïÞÛªu¼ÒçP¯%‹¾p÷c_îw@ì'Òkmè*«lè7érHRXH’Jå”K’¼ µä¶¿ß{‘…¸Æâѱ#i®²)Qbœu.‹€GŠ„»ìOmÆà£™ãi£fÆì7FÒ‡´è}u½£{÷zh/û´vá¹ó~ù‹-õ-ë;Z[rÂG%$Hš íDÿÉâŠÍaó¢ ©Ã($åªO» .jË÷ýÄrÓ„‰ãíH¼¨M÷ýÀM?åñ¢6Ý÷cÞô“ˆq/r«}Ñ.׈Ê×yŒÿàm°)/´i/!W‚–œÍ…¶jIÞ‹ÄíÈ&ŸÛ!ñ¾º\CáÀ}?°IWlÄåÕ É2ÁT+ |^$> M~ŒÅ€†;ôØãŽ:bä1CŽ;vøÐ^}$SðÚZï§îØ´ãHÓŠÿÙóÖNyöŽ‹ÖŸ’›_쟕ƒ¸s¥+ëY³FeU‹¶ÔÝãæ^™0­X}…-ôœîÁŸiZŒˆCîÚ#rBÄÂæá´0(›1iP'^ÑÆË5¶]kX•e %ѵ-ˆn–v'‰Úb–´Ý5mÉ'ÈaÏiÞ3-ø6Îíl¯vüҜ²јږª[Óž‚*%% §u1»±=Y"V×tc9Ÿ@l §²KÜTaY–$Ò¶ „¬tḜ™6¬F¶g¹³¼‰kÔ$%ZHÈVÍ!‹ai™*BØ]ûÝf›š¦”iPîÚgMd­‹©Ú¦[IˆØ´5í ÊWÏ”ÎÚ²´âNmI£ŠKp´u¤ßÙÛ±·õ`wº^ûêêº%Üúcèí½íü mÜ~ ù§8„òÜ2Œ#P{ø¦ÈTg ¼ÚîòœóÚõ;wnøäÇ0«lO Ìt#Û‘ÙÝÃÌa’#—ª£œ£ Æ:Œ#PmøV‘Áyÿmïê2X‹GF€¨.)òµåWWô-#À0EEÀ‘"ó÷do™ïv'ÀŒKDbH$Yðâá sÄîÙïdÀM8D¬ŽƒçVÉzôô`e-˜ƒ¹%HÁ)êì‘MØäì~öÝ[Qåª}Ðw°¬q›Ê[T–a‹ø¾›¢ŽË“¾¢Ù¬}ÿ™g¥•ÉXA>³öe+¤ˆ„$$‘ 6Ë’oál?.iÃv!Þ¥A‰$ ÏÅpÚ E$ò‡ÍaßÑ!Ó®£C"@x –[Ö"Ú–3ßíú–¾EÜ‹ô1ÍlF€`j Udñ~b{ýÚÖ<F€¨E‚R$äÇ»þã]=ûÄo\rþ —ŸÇY2v`Ù #ÀÄ‹@PŠO®‹ÿ‘ƒ¦] )2Þ™°5F€`bG GŠ™Ø}²AF€`ª)2ÃI²JN&‡É0q#ûжøéìpGï>}à ”s§LŸ7moÂä•ßI§UBcÇO©„08†®ƒ@î©Aé|õéÛ ¿`ºB§¤o7à)ÓçÚ¯9~ qÊ4‘(± 4æ;8ùäSilÒɳƖ˜±§Ì”_±Û08~Ò)4:~Òt¢O2il‰Ybìø©²_¥+1Í” m¯ÝÈÖ–#%dPèB li(2±~ík¦®ï½žë×ÅÏÐÆÆ×#FqÓú7A ²$aTJ#³eãÚÒ8b/Œ@Õ!"Ebyèœ,¨eFC¿-GùÐÅQdÊ’‘i¥œ„ú³$’âȘPEb–¤r’º1uÖÆ¦7` “l"òtHq”™Ho6(ЦX+ëÍV“˜àÛ+n…/ËD£¡Š„,)×’[6YIÓ½¾&ÎÖMëÀݸ‰Ó¶n6‰ 'oÝÜ(86-E‹ÊÉmÍëièÄ“²Ëíí[²|`‚ˆ Ü)ÒZA;RvËó‘‘öB»¡ÿ@‹¿Ð©Gê9{°ÐF¼wò#ÝD©äÊÈå䆯U“Ož½¡ñuhåú‘% Ó9cŽ ¥”^ ùZ49‘²¡LGpÔ¼q ¬¯›7®•[ÌŒ²5)3Nß²idChQ3£ÌÉÑ•D¦)’àlknÂ.ìBÊY’2#¤K¢I‘ F .r§H¥`DÇG¤P@n!K*£Ô Iä\h‡´MŒªHY}ÒÔÙPBÆX?ÊÆÃÐfÉ0."ËŒ›µdcõ#eCƒÒ%‘ccEF B¤H¯½H÷ž£¼yäðŠÉ-ICKÈEe…‰å$®µ©´¬ØŠ†”7}7¦‹ïâä¾¢ å¡rdžäË£ý£Hb·B@ÇU6´~ñ`9 S¬¸›„Xy ÉB’#­²aHÇr•ÖÚf )Öã…’~'ø|»O8)ÒÈ]úYd>#¼‡“\, eŸ'¼ï+ÚõȲð“aÉjD€÷pªñ¬Uḭϓoä>U¤k¡¯]–gB" ìáܽ¸)ÓkðÔéãFuþîÝúóV¬Ú»Ï¡ÇþrbHk,Æ  ìóHÒ_Š,ÛB’ÁÁCØ0DèMA3QÃìKþÊìÆ1§Ÿ¾kÍ©:eìØº—vôºtÀüEíÉL[g¦Ín;’ZG*“Ò3kþ°´†Ñà©•ŠK‘eG„(ÿU;sÞð1 ækõ3Ž;Që3lÌžu{ê×tÓÊtÂKÏ$SFRZJ7V­Þ\`´¬Î#à·i¸/jŠqÊF¬%e›ÀÁ2IÀMÈZL—:)¼lýõ[«þÚºwŸn?thmë·½µoö}k›÷½¾~ïÊÆý¯6ísÓþÆ­t*‚ V‰†@¾§5@†F£…W$­ê¨"MZnËt‘@a³…#ù4½Ó÷3gÏ­õغ煾ƒ‡žõ-Ó°ì£Ãt&mhz:£§ =­¥Òb•}á—nÓ´^!£•¿“ôq Ö 9‹bÁ¾Ê8ª y:Š÷ŒÐ²l_¦ÝòÈA³tʨø™ŠÀ¯Ð‰…$C˜”"X%†L‰»~D;/#FŽÛ±âÑѳ>~dÛŽ¾õsw¬øIë‹7·6¿`²)ÒȈ¥žY·a£Ÿk?>}¢BÆFò~k€ ÷LE¥ë–NH<Øò´_ ¦÷B»ž ´ àÒ«@S¬^B~”`ÚÞß8䤅Z&HnÙ±»çñg£­Yzÿ2ÃÐÒPHŠ*R¼Òqܺ _EðŽ-@+] ù4,Œ*UÑÂŒ¡["¡gDå˜ÖEåxÎE_ŸÿÄ#¢Š4³µ#ï, _TtJá 1I‘8]‡P ’¡ eHøD‡Ь ÑdˆhfÃà)Yq)’pýhœIð¨çl™YäóÁ]ggÒ8´±½½êÄï<±îlOiÐÞø)qñ:%ö"q¡-î‹Ì×~äØ"+æaå˱'¬âY.Uï½HXhWÂZ»‰±n•"J%Ó‡ÖC- 7?^ÿ™A7]4ð¶Ïõ¿ã ý:áv’£‘ÖaSR\·)Ë©º ð.ËøÑꥂ¬$GXJ×|•%ÚŠ«"#Ç*µ„€Ç¡mÉ$Ü"~ïòCTE.9[‡ibrÛ‘q§HùëGå ëR8ÔU«â¼Pð4Yâä59Õ†WŒæ«”Àz§HxÆx)ƒ`_Œ€Œ€Þv •Iv$3—×?•6ðÈ£‚ÌÚæ]I‘*£îï­ÂQº²÷‘»ahÙxÙi9` †8D_¦svÔ•[t¤ˆ!3À‘2DFŠGx§H÷*ûª¯œ¥ÅŸ §ÈâcÌJB€³d^gƒSd^p±0#P p– 9E†ÇŠ%K|{Û·.íqø¿éñlûëçéñ½;ŸÒwÿ ®<ÒmdxûÞLVŠ˜jÑgÉgµBS$l—à+ä4X¬–4jVë®ßÖ÷i¯2»¾¡{˶ŸõÔPK,ï\àNr< Þ—Ìy.W´sJ—FN]t“éÒxg/"Pø)ëÝGxÆWå߉}{Wë3¯n‡À ö™4føñƒ+ñs[ nÅV‡´è¡ú~Ûi د¸*Rù‚Á¹ -½w…C] H†‰Ò#P þ;ÿö]åwbëvýúëŸ?^étúú{~ôö¾8¶ÀhKo#h•L¥’OA5ýkLÿô ˜:œQ7§d§™Éà9’9áéμºWï´ò;±¨“¼óÆ+o¸kÙ]×]zü üþW¾‡ÊG(|xU' ù¿XHB-IœbÏEÆ<2àh¤\_íü>dÅ4_û€¾òUdù =òr×ÞÖcÇŠÇÃÏÙö[­uÕŽ—’ì°Š ]OÝt×2°vãÒGó²‰Âð5£pè[ÁTµ¨”,º¡Ô‘?9î çTSéžm^¸»Õ™ST"Ÿƒïnì7jQ2Ù=Ó¿»àØ©—Ú½sر"Øo}í3ƒ‡Ž„ç¨<öÓÿ*‚(4IEND®B`‚vlfeat/docsrc/images/perrone.jpg0000644000175000017500000001177612237004736015663 0ustar dimadimaÿØÿàJFIFÿÛC  !"$"$ÿÛCÿÀ––"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?àLè¼pGÒ«Í?– ð„p=sTÒl!@õ§M:ýr8 ñ»ñf Þ³Å$ÆqZÞ.3Ä×Íë)¬Šµ§=°»‡íÂcj$_8B@}™ù¶çŒã8Ϩ¤“,v/lõ¨×¡¤ du9Í/˜sŸòi”PÝà  ôï^×àÒ¿ð†éè>ñOë^#^ËàËŰM‡xü3@.§ þÎc» :\ µ¹Œê1+8Ï›Á­WoiùiG?Þ©Ÿá¶Œ®ÿz½hY[ùŠ»:Ô‚ÂÕ˜å(ÉÓᎌOÌg¶H¢½tû00ó¢€Õ2øR±„`ŸZõÏÙ§ÂvÚ¾µ>¥qûȬ‘FJäo$œ{ðç@UsáÝFÁãi¢`ÅCcJ<={tâ·ÏÝ⾿ñ†4HÉt-‡šYs€N:W%s£YأŠj¼sòÐËš†}d MלAVÁ5î¾%Ñ ».¢5 “^[ã- m2X§eÄr’ @ýžoÌóÝiìX¼CÌCŸá6Øô5Ê\xRîßìm`$ß°›–)òîÏ}±]–ƒßÙV7aKIǸ g+é@wð³Oiu“¨0s ¾…^¬ÙÀ¯hÓßd±˜ #ææ¾´½Òl¤Žá^ØJà¯÷ä­›=kV±p7òtæ€=f×Ue‹hwû\“W×SÝ·zpJñ´×5Tvßs´/?w¦C®ë¸ý«j·û=¨Ým¦ ÀƒG«KÉÆkÎ|7¯ùQ¢Ktîkªƒ^±wí ¤P@ŠIëEd/ˆ4ôäܩϠ¢€>`–öæu€€¼c2¬²)S¸äW{kð·Æ¯˜žºÚÞ«ëQIà?[eפŽâ&"€9­B×¶´‹Í¹H`AÕ¤ üÍ|¹7ìëñãØ µcýuuÿ ¾øËÀPjRëð[›+…Œ+,™*ÀàþÒ½?Uøýà*A濦+ŸáŽq!÷ÎkÍþ(~Õ>žÂ-Gõu2¬óí(–é‘–ç’zð( JÓM’Aˆ\ÜI³{(ùOsÏa^uñ¿O·PˆY”dB¬…€RG|Ö·µ)m¯m¯á—0J ÕIííÞ¼‹ÄßmÕ™$M[ζÏ*ÀåO2ñ‡‚ÓQÑRÊXfSûѼmãi'­pú燵¯jòiÚµ³Z\!û¯ÆG¨¯AðL>#ømxú¯‡ï¯m¥-sg#‹P„õ èÞŒA¤ø¡ñ÷À?Ò Sú®•«@qÀ$ƒ=Á ƒÛÒ€<ÐÙ©re;¿Ö˜mUr2BŸsU­]µä§æˆã…sŸ»ï^Ï~|íFY<Â霩 ŽÔè³ø«J€(çø@±µÛL­š9<FkŒy†ìŒÿLÔrÜÃg×H±Å™±À MfüZø›cám[™ÂæLZÀ:–9±é_øÛÆž!ñEûϪêSÜ.âQ ˆ`:bµ¾4xÆOxÒ{Ôm¶‘/‘›ž\šMÄ’{÷©-Ð;ÄíU$Ô4õ}¨ÃÖ€=‡áwZö]Rœ íŸt çbãO¸¿¯xvâ{–¹Ó粎 -” ËÏ"¼M™à¿‚t?4r+|ö­FRM>íö9-n†à’Pœer=3úPº‚î¼C$šNyCq+.5ã©çŸjô]Â:ÃXþáÅi™Æ6ñÑGoÖ»ÝL¶ð?R4`ˆ4Ó†–B9cÞ¾{ø›â‰nõófÎ`nëÅtzÇŒ«ªO—on¬#’Mx¯Å[µí“©‚÷t¡3ÊØ?<ÇÒ¦ÔõôHþW$ãåZæ5mFmFu’\‹µTvÏõ  @ó]/€¼SªøC^‹UÓ–ÚRŸ~•ƒÐŽßQ\Í('Ö€?F¾|Uð×ÄÖ––ZŸÿJ²§ûIžJÿ*õ¸ob þ¥F=+òÂþ Õ|7­[jú=ì–—–î$CèAÁõt¯Ð¯€?âO€cÖ·¿·“ìב‘æÃØ‚ã@²ÚªÌ§Ó­ÏêåSך(ó""C7n=k»ðWÅ/øjxU.šòÍp²A;nÊú)<Šã¡Óo䉧ŽÒfˆŽ!Ú¢H£‘J0ê }™áŸÙø‡FƒU±b#I z«zƼÃöñËiúSøjÊSö‹œ5ÉS÷S°ükÍ>øöóÂWjškR^~ÄWâífï\×®µ;©KÉ;näç €  §bÇ&£¥'4” dÒRŠJ|måʯèA¯møW¨Aw¦¤¼Ø¢`Z>ànúWˆ•Ñü>Ö¿±¼C’É²ÙØ,Ùé¶€>Þø…,:Ž‘#+m·’-èÒ¾.øŽ¾^µ „ȰÀcÐŽÕì¾9øÍá¸ü'g¥é7ßÝÆŠ²*¡TÏñž¼c ¯ Ö¼W}¨Eymåť܋$±m K.vǑǦ3ß4Ï394Ú( Š( ¯¯ÿ`™\x[ĈÕ‹èH9ﳟä+ãúú‡ö7ñ]–ƒ¢^éW6·O6¥¨ƒÅ`0€sŽÙïï@X_Hv.z+–Õ|S JÐCk$ÛÕ‡"ŠùGLÒ<5¬ü=°¸:Õõœð[‘*5ºº Äà—{ñ>y=”zƒ ìíæÈqŽK|ߎJÝOxW[ðu´–~3ŽÉá´§·–Îá„l£ ÈÈ9cÚ¯_Ý\^èSÈ3ÛµI<‚àŸÈœ~ϬÑYøv!czó‘m²E¸€D!bÙd »• gÔÐâëK )­­¬5!¨¬pá§Xž5c’FóÓÛƒ]F³áÍ\è)®E ·:|1 žp¿$,ìÁA>øë\½Io“Ï1#I$ŒFKÐ ú§á/†Ûž†Æçi¼™šk€9ˆû¿€ÀüëÆ~øv]SÅ©ª<`ÛiØ“-÷LŸÂ3í×ð¯¤åº1¶"ù»ŽhãÿXÿfø¿V°À¹mÇ¥dk¶øçl`ø60·+ËÆ:¨õS\HVaòŒÐHÁ õ©E¼ä©“þù5« ¨ Q“E ×­© õ¤¥Ç”QEu¼âëÙ¾Ò休0e|…Ž%'«1à ßýŸü)qâOÚMä3Xiî..¥ÇʸÉP}É­}=ã­R{])¯%@S„ ѻƴ´ïi? >Øi¶Då& ¨\–¦žEŸ`ØväßüHÚ„QéöÒ@ò—ï=¨„¼)«xßR»º¶ñÆ9çib~袽á6•¨xÂQÛßIºòéÍÔÈ蟀Ååv¶h¾ ÔÃ2C/·Ì+ŸÕáŠ_ȯfؤ1?wæÏ•P¿žê„^½Šg‚ÙŠÇ$ !ă]áÚAÇÔ×ÑEzÃ?ˆú%•¦ŽºkƻɖH˜+Ôƒø öûg½µW·¹h‘ùŒnüh¢€<_öÒÞÓRÒ/$¸ó¤š‰?+öUÏ|?ñä^³kvðíóù¦E¹.É2ñÊç‘ÃÖŠ(Õ4Ÿh k3Ùjbm9îžÙn !ÁåAÏ#=ÿNÕç~>ø™‰ôI´› éºzÉ"°¸ÒJ¡zx=袀<äc­qE{R5P–дóÇ Ø(ÏLšûÏöpð5Çï\Åý¡ÍÍü«q;$xU (Ï$sßQ@kã¯[Ûx‹P¼´×õQÝ5ÛÁ# 勽»÷¬Qìt)¡¼0<©¹<×8idé“Ð}(¢€:+?ˆÑË Ëo¥ìó3ÏÐ1EPÿÙvlfeat/docsrc/images/using-vs-additional-include.png0000644000175000017500000003436512236612215021512 0ustar dimadima‰PNG  IHDRíôÎdg pHYsÄÄ•+ IDATxœíÝ[¬%YyØñµÉÉšd<<Ü1·13Ó=ÓMlèÆ60Gæê'"G y3˜û0À™ÃehlaP)yAŠ”H¹•Ü€IcbwËôÁç C`À±IìàØlÄãÎCÍY³Îº|õÕªÛZUÿŸºö®½jÕªÚµw}û«Uµ6‡×¯€Ú¼åmï½Ásê̹¹[ÐÁÞÞž1æ†æÉÑÁµYÐÙ öÑKßø÷…ÍÆ³9~Ò<Ú8½©Íã<>®Ã›/^åã‹<žÕûyê6Ð_øÉ×6þlẜœ?Xw¥ã÷Öo“hx¢›Mi]—ãÊâMl]—Mo{sÂu‰5>±.~+o¥_Êm½ÿ,±àäºDÞ‹.ë’n´j]N6ß—’ë"¼ý]>bÁ´n1i·ôÞæØ2Åöß`õÆÞ7¯ýéÕú“—Y—xãã«áM ×Åûߺ.áÇ*Vqr]üö‹o`¸.‘·Ò{*~Ä‚w^ósïm–Ý2¶—vX—X5Ö%RªËºxˆ=•>b‰ù´1ï¿·€p]“Fs×iÕL¼é¶·jæÍð7ÿÚóÓgß9Rý`§Ïž·GºÏK·|ÌßãSƘ›nû5cŒÛÛGöýÃ1O:ýë–eŒù›ë¿eŒ¹åÅš¿ú“cžñ’÷xÓÿ×W>æ>}Ö¹÷umLWþÁýƘ¾ò~Máoü׸Oo{ÕGFhÓi‚˜&|9}öüé³ç[Cw–ÔOÑý|úì;o4+óÌ—Þû¬s÷c¾{í«Ê‹~ùÃ/úåcùý÷ÏݦfƒžæikcÂ|̾ùicÌ·¾Ùóÿã!cÌ?ùÙ·xe~øÈ§š”Ì¿þI;ñ'oì4Óþ;ñ§N½Í>þ»Ãß6Æ<éÎHVæÿ~íöñSμÃ>vó1ßûêoÚéOýgï2ÆüõŸþ†[ÉÓþñÌÿþïMVæ½á²\ß½ú€1æÙçß÷—WxöËî3ÆüÅÔ¾ú3¿ð~cÌÿü£©‘çþÒc‰“ï|ùCvâó_þAcÌ·¿´gŒyÁ+výÒÞ ŽÓ0ßj²2wï}k×sëΞ1æ›Wv1?»ó!ÓÆ hnõcm{øó÷¹eN½öcÌÑå{í”Ó¯¿Ð<ø³ß{| Üõ+o]C±ñ‡&qçj’7^%)9ù˜Ç‚˜G>iŒ¹éö·6Ìÿ;Žin¾ãž›ï¸çæS÷c¾ô ëI§=zjéo¿ö cÌSîzûSμà b\ßûjмë©/~—1æÿüéã1ÍÓ~îÝOû¹w›ã3Jg¼ä=­AŒõ—WËÍ4AÌs^vßs^vŸ9Á<÷?ðÜ_ü€1æÏ¿üasÄ<ïå|^ÁüáãÉ£_Ús+á+ïáÝ÷+[ºíU¹ýÕi"˜¯á>sÄÜñšîxÍã)¥£ÏÝkŒ9ýº~ÝÇŒ1‡¿÷^sÄÜùú wþÊÇ b³èÄ4laÍ\~>æÆ[ßü£o~ºÉʘX2Æã¦dn>&êïþì·íã'ßõöÖ&ZnJ&í%ãöyöù÷ãßhIã;I¨¼à»ÑÚš”L“‰1ÆÜºó¡pyßøâcÉÛ?¦Ó ¦C'%c5Ñ q  îy¥ÖP¦ïu×7ÝþV÷æ~Msó÷˜ùÁQ< iN-w]mwË‹ßåß­°£g¾ôÞMÙ=M2æÄíûi:ǘã["6AÌí¯þˆ1›&#k’1vþ;_ÁžWúÚgßC(˜^×Ë”ºöŽœWj:ÇE2Üz÷c§œš^2¸óõî<î+ÀôÜÎ.šÂ&8¯$ÏžŸ¹é¶·þð‘Ožèê{Ç=7ßqÏþïÔÒO~Û÷Lõó}ò]oÿÛ¯}Âvõv‘¹åÅïüÞWëdWßwG[õôŸÏ_ýÉÇ•ý|=ÏyÙ}ñǵ]}›~¾?ÿoeJš~¾Ïû¥~çËrÏ+=ÿå»^m/xåýþÁý¶Ÿo§–4n{ÕGùý÷ý 'N-Ýñš>üùûþü‰ëÆO½öcGŸ»×=¯ä&c ç•5S/­éœÍáõ«§Îœ;:¸Æ8‘ÑÑ»šÞ¾M'ßèºèÇs/YŠlàëòØ”&š9õÚÂÑÂ’#‘1N$ãDj?bÒné½Í±eŠ+ì¿çá6êeœHwŒ’h|r­Z×%VM‡u‰”Zö8‘ÿâ¥7ëïÌ»¿¿oÇ%Șë®'>ÒûÀœvvv&›Ë"ŽðF¢u.«èq çc¾rñM3¶0Ž­b P+ò1 VÄ1 VÄ1 VÄ1 VÄ1 VÄ1 VÄ1 VÄ1 VÄ1 VÄ1 VÄ1 VÄ1 V7´YŸ‹—.ÏÝhíîî\›»ùØÙ€¡´~œ:sn²Æ §‡¼ )I·¿¿?wÐN¹—Ž èOùmPõÏžõèô8&éÊ•+s7au:}żåmï¯%cg<«ý6@WÄ1(‹2ñ»··7vKÌ‹ohÇ 8$~4ø6@+®Wµ"ŽÉ±Ùlìß¡*°6 jì}Œ}kvúìùÓgÏÏÝŠ5š(Ž©ý ÖLJ¾òív»ÝnÍpG·Ž.å®8×N+ï<Ùïl³› 5´FçáŽíMÙn·ìlX€æ³ßéàôÙó‡×¯^¿jÔß0š:£õ³{5T}tîãnˆæ=ÓÌbKºû£Îþì¡"[ÏÙ'«sÑ\Æ­ßcËÜ©Sî-î¾Ý<§ Þ 1Ô·rY=k£aåͨ[³Î7Øý!+|Y§^u­š“¿wÝÀ9þ9-–:Š„å5u¶¶Äý^¿ê}ye¿ÑE'Ñ-úÆ…û€‰%]4»nØ€pßgVèµÄ€ß²ÔW„]z˜qq¿^lS£ÅÂ_Jîßp)rBKÂ…Ú¿]W':%œÑ>õVsâ˜e¼Áoâè1F˜KSy×:£-)íä~ðÆxׄ*úØÄ>®îKî,f -|SZß#9Sâ@©·>Zƒ ¡äƒûÛ@ÍÔ S¢si*ïZgª%­:­N4«mÌ,¿û^w½¼7¸"îÁcÀŽ5E“Fîå*ºóD?®Þ”‰w¶Tbf¤e™¶8 É,¿õÇæ®ÎýW¢M³ ¼2³¼;Eß?fŒ7¸ëVö:?–ù­=ÔÌ;m1HÛúëÿÁHýŒë³SiZ5ãÎ6ÍÛWæÇ ¶° Æ¥üy?Í‚”)äí¨ãºkÛ|–­¶uÈÅ–q±ÆòŽLÑgÞ*E¹³…sµvÏJ•WžO ë!ˆÁòq`‚¯¸èFK]o5øîYFNoÔU;HºSô_úaH$IBy·MkKÊéä» ƒìlÞ¾³­³u°¢oFó ìLpƒÚy¡LóS'£kNÉA’PÞ=…Ý¿“&VÓ4~ÆKžnç•ÿ‡¢SWpD' 4Ãz¢ýv[ë‘—>дdñ4;UXrÔkê ÒLïÚ85¯fŸT.¨Tø1¿¼ÇÑ®uá©¡y¹áƒTK:Õ&T"Ìž±:B;ûëÜ?¦ö7¸–|©‘¡è?ÌÂKv­2w¶ ®G#¸ IW ¥ØÕ™­Ÿo±[¤«=0tíxÆÞ©V»Ób$µ,ìèVìêÌÇ»E0£·¼í½s7@ø6€RÑ×]Ïè¡/0^üôzðÂÜM˜;Zç·2ÇDìîîÎݬ;ôAÁcL† ˜ÒÅK—çnFX…¹›€áÇV>7‹TǸ!âP+âP+âP+âP+âP+âP«÷á6ˆPÚÝÝm½M-»@ðÆ7¼NS¬Û}ðö÷÷sÚ‚5ÑßiJ¹ÖFÿ[·óý|¯\¹Òu¬Ê½ôŸ¼N@ï+ßtê̹¹[1–ÍfÓ<Øn·îãùZ„úÞ_W_øŸÿ꿼û…—*¶ÙlzÆvöþU‚[žö,M±½½½NÕÇ€)Œ‘°çz%,;ùéÖ)c,eØyÇh3ÆfOÊ´³%7ÇÆl°dƒåc„DÐîînê%÷Ó;}>s쥻IZ¶Ãjó7ÞúæN³Üxë››¿î”ÛÓµIƒ,Ñ]hÆégps¡Ñ|uýfÈ› Xª!Ï+Eã!¾)áÐ>Yœ1ûš"<xTö"¤i„á˨ ˆiÕô“åÃLi”þ1šOrªŒ×[>ìH/Oj0Š`¢i•m›¦ª°LXƒPgt dö°í%WÂb©¹ÌÉÈÃ˦¤RÞ¡yšÙ£™!a-„åÚu ÿ¦®ojSdT¸xÞW ¿µÂbá—ƒ‰}?xó’•eõóžˆqãƒÖéB ¦c€¥©*ZÆè-.,ϯ·A„âxÇÚh<¡™"ð +S5­k¡R¡^´1­¡•[^Sá²ÉDƇ:Œrš3áwŽðݬÖÀqŒÛyÍ8Ÿ´½½½ÝÝÝæï°Kì)Ì…ä«vÉ5„å eª0WÇÛ¼åz‘GŸ„1J4i´ªPÆ#|~›°FŸs~?ôl°lÇ1aB¢Ñ„/¥1fˆß4]kðÊË g„l¢Â>à*ŸÀUÿµ|ûDÓ9=¯ 3¸æä·Ïl×]»7Ž\†®«3ïµZU»ñÖ7Ûs·e:Bü¤?o5h‹â=VÈ»pÚûrãLàùܾøãÿØsxôð·ý¶1æûßÿÁ—¾üGyµÒ?Fùq ?íýïŠ=à}µ£UySäÅ…ÃòtòDÓKCžâM·Ç]·dê`œªÍ »³¤f.W3E8¿ÓÚØ-æMq7H×M‘êö»l]OåUkœ¯Dï7’;‘ï ÔèïºïsŸýÝgþÄOüÇÿôŸŸñŒ§¿ðÏÿÖ£ßþè¿ùŠÏþnFmCÆ1]ï%lÇþèSïAjºPƒüR^ÖY:5©>ª­—U‡%SóºO5eR³¤f×·9:E˜½úZ¿e”/µÖ¿xš/ ¡On§oýD O}ê-ÿè O0ÆÜtÓM7Þx£1æ‰OüÇOyÊ“ój,Ž)°ï (Í?÷_šï~ç=̓3wÝù>óïòjå¼R×% ‚ß@”&ûºà{ Uø7ÿößTó(qÌ"ƒX¤ð¶¢†ðCÛßß©fò1¨ÀW.¾iî&`íÆ§·‡×¯6Ž®¹çkè¡/t*ñÒeeIò1¨À©3çænVíèà;!0%}3Êýc2.\èj”8fì|LxC°BƒWr0BX“qOÛèÐŒ=õ¬sì;óޱÊXÌ–ä~hÖlÈþ1ÑxEˆoúHÆøîξpó`ì£#‡«Æsè:VùxÁñb¢1È3J?_Ô÷oê¶ýæd¬`NÞ13ÜÄ ,¼OjÀ¡L§Ã§¼8a¥Ü2a šUÐ4¯vÕe§ Ž ^³Å1QÑ(”è\šÊ»Ö™j‰f]4UEË÷5Ojr“–­5°‹Æy©-–ôêlÈoŸ­Ä³õD÷XÍ;(„àÑUîOË`^÷óÝœd§7g—潎É;z ÛYØV˜Š<ô5Ø)r aùW§:Í–o¸F#Z@_•Ë Cmår%ÞìB#3VÓmFôU/,ŽÎ«ßh] c8“úvkºÎr_eþ¦“þ_ë]kf5]>S™•°Xë¦Øç£Uå5²ç¡\Íè,–~^e…dþe¶óJ[N…$tÝ,^h Y7hó&FËôŒ­èI¥ÖfïäšÕŒÎ’÷ªf–U…˪0gÿ˜mÐc`›5ºGxð–çBùh@Ðóû:Z•7E^œ¦y+ìµ …»vBHíM&oZkn-–×<¹ }^me%á2€* Çdt‰³SOí!?|5hªMUÕÚ’¼µÈ›¥SóÖÃã[;}`š†ÇõŒeµk ôû¼-C¸  |ƒÅ1óö}áëu=Z#¼èS¹€>( ƒiM Bp¹ÂNºþi^ý0»²®»ÎV××k]­Å¨Á …Ä1@¥_ QÆ‰ÌÆ@Ù@¯¬|L!7˜AiŽ®Íݬ;!P¦²â˜½½=B„N97w°jGר )]¼tYY²¬óJE1Ü!€Â•ÇèûÇl£6 «¬óJÊ|  ÕØ; ÷æ€Ô—n!ï¦g¢ ›°Œ99h žòM“Š“aï®;ì£õ³´eøD(Y•ù˜Ðæä`ÅÞíSÃ1qìcoÔ˜°6h‚wJ?ˆÒHKŸl.¨Z‰ù˜Ô_O*#Ô–q¿úÉÇTÇH™~ókrBnOXýk_’›çjî´—Þ0(M‰ù˜Ô_OÆÀuÊ€ùÊ®ÎF‘kK¨_Yù&ç _êÌ[©ÍÉ}¼†@9JÌÇÈZ‡ÖD!D*ËÓ)Q16ÍðoE5 ÆSb>¦UʸSRßÔr™Öð…«+gPlþ¯Ø†@T}ù˜FøÓ3|ên-ÖY×qq¢'Œ8úÀzT™ÁÊ…yµh²Í›"§ñ¢‹Hu¬IU¢}…ÆÈ+¥7^àµæc°Z©^ ©üœ—™“ÓxÑÚÂÜ^뢽ò©ÑÆDË5GŸŽÔ0( ù¬ZŸ„`väc°j©|   eÅ1äc€^Yç•öööe::¸6w°vì„@™ÊŠc b4Wš §Îœ›» Xµ£ƒkì„À”.^º¬,YÖy%åx×SÞo”›‘P¬*ó16Ñ2AÒ…¤Ū/ãÚŽ0ܱ7Åþê'g@/ú]Ôi®>K¦Ê|Lh3ÐpÇÂà2^m C3#wƒÏž0ó£Ïfg‹ZýŠ~ÛäÍ>™N{&P—ó1©¿2R#+Ñ|rß—¹c—È`åJÌǤþÊf?¤a.áïã0câþHmžIç_w4¢°’p¡az/º š…ÊëV(7QvE“²Â$cÂݯµyY&½»òÎb©JÌÇèE?–üB]¶æë¸5÷f,Â)îQÄ{Õ>•ãê•Ô¬‚e*,¨uJ¸Ö&ñ™‚¬uÿÑм;Êe¥æ©Ä|L«ÔO o¢7%üHk¦¤ð1#ïûº=&þ¦~:wjLXí QB¸Ð¼½q¤æ-Þ6Èm´î?FR_>fëˆNŠ……2ö©9ùå.Ì‹zyû†ý-kOý¸O•2~”çÉ^PêÓ„®äýÀxÊŠc¦” ÌχSôób„Ž) ~£9Ü¥kÇ&=•ÇL?Þuk>¦Ó¼˜ÀÆaû†T:E¨n ÛãÓ4ÂSMcR ª_…ÔKò‚RµFžÖýÇ+Ù<–7{êÝ §‡ï~t^Þe,U•ýc°fÑïâhh"OéóTß}µšUP.4ZstYëI8 .o‡ÑÔÖúî»Ê&è&,ÞÚó10¥í—´æÕHÆ`ÁÈÇ`ô¹bU×`è…²A*ìS¨ùP«EåcÈ.ÕÑÁµ¹›€µc'Ê4#ä`„°fÓvqckTäÔ™ss7«vtp˜ÒÅK—•%çcL"^â›Ö¼KF7r9T§¬þ1­ +Q_,ÀàWÞ¢^]o`(ÌÕg¿Êk0»Râ˜ÍIvzsv©ÿuLnÍšÇ(Öæäo£ójo,É4ßÑïC÷U“îùçÎ%?öîlؽQ¡"úǘô²é:Óÿ¾2©›ssÓî•ãMGÜ0E¾Á7—rΫ(S)qŒ^s7ÌÖqIøX®VøûÒîáUl©éæäÓÖ~åaö%ïg.{æ"Ew-á±[2¤ÙßúìHÂr kPúâÜØ; \RG&,€”xmæÁ&Öõ[™™ób¡=Ѩ%£ ê¥OotJ„tŠ}½<¬<Œ~ˆ­± EÄ1Ý_²ïÃ÷ ÃŽ±ß\o‰ÑèŠn‹Ý ¢±‚rgèÞÇí 3Fý@ æcS š%tÐ8N,žþ-žrg ÷.¯”ë•Ù×%qX7ÕQTw(÷Ç·pŽiÚFa6áÙL¥ÔeJByoÑ%º!>û!cþ|Œ‹Ü zòºFT¯¸%åî“rÔ%Ü”x5%…sRî«ÙûRªþþ=ˆé•Çìííå…2òŒ% ðÆà,ÊvÑm}>vÿzeRç§Âoyù·¯æ)*¢y»…éyû П‘Nõ…+ë¼Rv>†D·9Æ7>J3F¯’1¨TYqLvÿ˜þ7ü<Ûcs7ˆ°;çP»({;*UV³Œ|Ìé³ççn«°Šþ1.7È8¼~5cY˜^ =œ°rì„@™ÊŠcÆÎÇœ>{žØ¥Fô’ƼŽ®±Sºxé²²dYç•Fí“ bNŸ=ßü󞺙›°ŒqR;ay0uåcBnpc{S¢e܉á«`‹ÊǤþzR ¡þ°Œ¯™õF½©EsÏV‹·¨|Lê¯Ç&Tܧ2¡Œ—­éÚrt¥ɼÓ}_”w­<-Ò«¶Ñu4cp„m}›õ­Z'o—àCÀ¼•‘5gˆ„š(„H¥öÎ.cçšCTÄ(g—o£®…|/×Ö90¨Å¢ò1­ÂPÆ’JºÈeZÃ#ŒÇM3ȃŤ^õ ¸ÇïTEˆ<Â:S•ëgV¢Y0a`kˆ¾ªl’}*,BhØ2Dó[‹\S |eÅ1Ü?&ˆ¤ž†=y3žbÑcjôP:É=öÁAT*8èzæÈ Âñž¢ ÒÄ%]¯^U­«Ÿ}2kô¡!€a•Ç,ã~¾˜…|v&ïÜoð3Ç-ͼr¯l6Âèš„O5 [êA}UQP²õÁ²m]_íºãô#É®3{^Ûkgìƒh³ˆf°Ìð©0‹»•Zg€>ÊŠcÈÇ “ÖK¢³ŒÙ¢jèÓ šp¡®dÕh;~Os­Ê:¯4Rÿn(¾0á™ðbSÑW½^”®§¢å£•‡äÅ¥VG^tª†ÖUˆž5¶ajÖÓõµçIFÙÊŠcÈÇ •pœ¦È¯¦ªÕ/K^DëÒ5MV'U¿û×+–JÆd,E¿ ËÚD‹\Y |eW¢ Ð++Ž!Lƒä€e(+Ž™ ³9&—‰>–KR!Ð[Wÿ˜Œ{UµöÍÔ,·ç,8:¸6w°vì„@™ÊŠcF½Ÿox‹Õðón”-ã]ô‘ª!uwv÷b×Ô•†X'Àg˜×ÑÁ5vB`J/]V–,+Ž™«L˜¤I]ˆ!ß0>¾D+ÔßG¤,ªLêï4¼Ð„{˜0¶EåcR'êyC(Àx•‘yY&Ä7Îxg [ó1ÂJì_Õ¿p4§}7¯1kMɘù,wÌS ©$Ê&BL,žpO÷Ø0%,ÙKÞ°ÆC>U:D{Ф.˨6ì)>ÊD[6&šƒ +›m@ê%D…[Ì}ÌÖ&F>˜¿Ú`@+ÊÇlyKúãW; h]ù{ðà,@YqÌÞÞ^^(“7£wk2/ávœ”Ë 5( „O·Ó^5S¬£ƒks7kÇN”©¬8fúþ1]ï+”÷ŽNR ˆiœ:snî&`ÕŽ®±Sºxé²²ä¢úǤþZ¶Lôb Mï™NQEôƲ^¹‚‹ÊǤþZrX0xнtÖÞ¹Ä{:ì¢XƒEåc†2øMÂ=ʈ`P.÷P”EåcúØÆnÇ)Üê#,ïM ÈO£ @Hîf”7»—s'šØþ¨,æMO•Ÿ]ô&Èå4oFÑ®læ²¢|L4ñžz7öî|ª,¯Úº8L,Ú×Û{܉^8"LŒîŠaùÙy f‡P ò1XˆÖ‹Þer¾!ú’71ZCŸ4†œ Ô$‡:•imd˜Ê’k^*ûžz‰ûjj €1¬(Óß>qó"&&™W§ÛI‡«à­£ ²8ѵ–+‘7ÔÆ‘Ѽõ`k3"ƒ…He ôúäN”õ§^ŠþvOE=›¡ßPò²Fj^Â]eÍ[˜ù,ý)æ!ª8–DÛé­B¸ŽÙ dCѼz±5€¹”ÇAÑ#q§IôôJjº7QÓ‡&oéƒ_ÐÔC¥f¬"j[¬JÈ`›IDAT˜XYq ù´²?sÛã~îS·Œw,‰Îe;:Dg 'zg„‰ò©œÍñEàò:vZëTÃ4³í”›·l `Fô‘ð5T¦è)˜Ö)ÊÂö±²Îìb©—R ÈXëp½ô*URß¼e“Wm[˜Ñêò1šßÄ]Qg¸ˆècÖl]ù˜1ò+Óçlø©ÃnƘUåcRG˜JÑLéTg4a–1N®%U^(3AZ€¢¬+Úœì5¹Ý£3,ÓµN»',ãNjÐ/¥ãÆ(×ÑÁµ¹›€µc'ÊTV³··—‘43¦þöoXk†cã\À¢)-ã]ÛÒ­‰:uæÜÜM”èâ¥ËÊ’eÅ1=ó1©¿ýµæ6¼ðE“ ‘¯øõrB ´¢þ1©›ŒuâÕÐZg^bh,*ÓÊ ;ì½ÃíÓ°Œ7%zSNå{Öév é”þ`yV”ilÞ”Ne:ÕÞŽL.#Ô©¬È°eÅ1¥ÝÏ”¬¬8†ñ•€^Yq ù WVC>è•ÇzeÅ1äc€^Yq ù WV3öx×y•€2•ÇzeÅ1÷Ù󞺙o¢÷R´žhUaÐÓºÆWò¸cJ{·üo¦(Çn˛  bQù˜Ôß”¡r$šzÈÇ0¸EåcR£”¹–V]s6`(‹ÊÇT” CYT>¦•!¶ÛmÓ‘E.–é?…Ä CYQ>fëˆNq#Œ°Œ¾y®¼¡uåc2äåQȾ0åcòäåQȾ0²â˜ó1 XeÅ1æc@±ÊŠcÈǽ²âò1@¯¬8fÙùÍðƸKwÞ,UYq̨ù˜èpÖÓÈ^¢7# ®uÝ?f®A§¹€1¬(jÒ6Éfk¼)ÂÓètwŠ·\yAš–·Ö Yyõ(ܺò1!›˜ñ†­nFDró(asœh +?ò‚Â0":%Õ¡Îè\ÑÕ ‹ÊǤþZ6åà„¾š×½N oŠÖ ©3,ãÕÙa(À¢ò1©¿–œr˜,!ÑArŽ'c¹6+3Hó˜Æ¢ò1C™,3ÑAy5¤æ"‚ÔeQù˜>š>%öq8%, JÊ êßÔ°Lj.eƒ(ÖŠò1ÑÂ{êuCñ¦„O…aÉÔ«î”°Iѧš„)aåÑ¥P¸²â˜eßÏ «¬8¦þ1=‘Õ`eÅ1äc€^YqÌ2ò1`eÅ1äc€^Yq ù WV³†| ·ÿ`(eÅ1äc”ãuZz´ü椌j€l]÷óŽù<ù¦v §åc¼ÀÅÞ§ß5Ú>°¯z)¹¼ÜïiƘÕÀZW>FÏ‹xšB ':ÝH¼afh‚ü ³¨|Lêï\R£&5¢ù˜ [@õ•Iý-S´÷Lʘ@cQù™íÓ(ç<Žpú •iå†26bðâwŠ›#±O[Ëçµ$l­(ÓˆvX ;²„½ž¿By;%\´9?ÉK²²â˜r®Wå++Ž)p|%$«¬8†| Ð++Ž)0ŠUVC>è•ÇzeÅ1kËÇ0*$}”ÇŒ=ÞõÄJË‹kn(<ìõPŒÖX•²â˜ îçÛ˜æïÝønb\1X¼²â˜‰ûÇ4ÑŒi¼ô‰üÀ+Ùšæ‰fƒ„Jܶ¹/EkˆÖÙÚZ6€Ú­k|¥p #;Z¤;l¤<„¤÷ª~ưXtÆh“¼)B ^¢5+ @á•IýµÂóJ­GñæHï¥.§c¤74™Àš-*“ú;,wxêy{Àx¹–YÚÀŒ•V“†±‘Šw &»L0¥EåcZ §“ô'›¼bÂŒ¶¿mk¦ө®è\Þ·cMFÍTaEù˜­ÃN‰p§„£Å¢w‚q§‡UÉKO-:ÕoŠÐàÖ¬µ(+ŽYÛý|@eÅ1Eõ…++Ž!ôÊŠcÈǽ²âò1@¯¬8†| Ð++Ž™73Ù]ì¸]ƒ(+Ž™ ÃhD,FYq ýc€^YqÌØù˜fˆïvþÞÑÞK©2á@Ó©2© §u¯Rí–ñîúßLñQòªõ Ê0ˆEåcR;±Ù/òèšJ!ûÀØ•IýmØèÄ>UŽ’˜—JaFƶ¨|L«ptèT1}”ÓŠ” #YT>&ƒ×çw2^WbÛŸ†€€a­(ãåWìÓh’&,ì–‰–ô*‰Ö©É¥²âîôÊŠc_ è•ÇzeÅ1äc€^Yq ù WVC>è•Ǭ!Ã]dJYqÌù˜èPÕ3òšQH«¨Âºîç;àh#)¼yeEù˜Tã¥gܧšéB B¡‘=k`=Ö• ycY»ÃاÊ锌³åHÛ`–IýÛ4™ò1x•IýUF®%9< ÉÇh4ggÆ«2ËX ú[H>FÉ e¶Û­;%/á¡ ä2šôo'˳¢|Lcëð¦Ø§Ñr·7ÎH•IµGSCÿÀ2”ÇTt[^0»²â†IzeÅ1äc€^Yq ù WVC>è•ÇzeÅ1æc¸Y‹7ÿ}ð„L4¬ñFIdÐDVkþ8Æ$âå9&‚V«¬óJ'ƒšY6ŽT^;c¯€ù‘„;ètø¸u"¨N)ù›)ñr*ÍÙ¥¼ë˜Âž4^å1T­”|L*AÒtɻީ#:Ö,C)ù˜‘4¡Œ7‘>1,C)ù˜†2ebMy›•é4(_qL§î/^Ò¦tmXX[´Œçµ¶'5/Å*¥Ÿïf³i²öA£9»¤9ÇTT aslÙ5µ…e¼LO§ö²•’I¥š®3^šòO|ôlXêdPÞ½ŒKŸ†P”Rò1zî™靖=Œ uŠZ{öhj#R¬G)ù˜Æà!E*¥N÷úí†Sô݇ê„2^hp¦¯-ZF¨Ó[¯bó[DÇtºÄÚ=Ö¦:ÌÊiõÓà #úTxjóPÍÐ,±µÎÖ”iþ8†{ø€¦Ï Ûü×] 9˜hX“Bh<òmâÆ¸#ptìFà™?Ž1‰xEˆo&>ÆÏ;–A )EÄ1V^¸à é¥OÜéᯤû4µ,ûØ|QXºýk_ò%m ´¶Vn0 VV£=ê‡#fËQ‘÷ª~ưXtÆh“R•P§P3çž+WJ?_ÛUÖë3Ûœ]òÎ1mé8ô2"vb؆Á{ìj"Œ‘ À²•’ S¦ëÌ×1¹ggäq%ÇæåZfi5*%3·‹IØc7u Òtí¹JÉÇ4”át’þd“WL˜Ñžðjm^§S]ѹ¼)nÇšŒšX¶"â˜N·ñÆ.ú^—[yFav“8%< ­iLªLkV €Å›?Ž©ô¾`veõa|% WVCnè•ÇzeÅ1äc€^Yq ù WV3l>&¼7¸`Iæ¿îZÈÁDÃÍ8ÏÊqûϵÎÒgq`XóÇ1&¯ñMë8Ï, JSÖy¥¼ó>î\v ¯€r4é°ªpöÃ[D×Å€>ŠÈÇtÕi¤!y4éÖª¼Ù½±„)`l¥äclÃËd4g—¼sLÛcýs¶*û4²k~…L Ó(%Ó a2£é:3ï}e:åWìŠttUJ>¦MJ&‚è-D0L ”|LCyø÷:µÈ'˜äW[¯âvgO5Ï–ÑC)"Žét_Í…Ö^ß[!þÐLž†‹ |`2óÇ1Œ©ò”Õ?†ñ•€^Yq ¹ WVC>è•ÇzeÅ1äc€^YqÌò1ÂN`Xó_w-ä`„°¦õþuaù>wvÑ,N¿¯6†– ÏüqŒIÄ+B|3Ë¿uDk}CÔÀ Šˆc,Í1>ZÆžÚ¬ÑÄÆnŒ¾dNŽ0 oFóØkX§ÓIš¶iZÀª”Ç ( w¢ ûØp;œ½ÓÀIÞ"¼f„UiÚmkVJ?ßÍfÓÝíƒFsv)ï:¦a;Ønõ¯V®js¬çRX¼Rò1©,HÓu&ã:¦ð\R-êj-3*%£×)#RuL@JY)ù˜†2ìðB™è9¯ŠÛ7ÚC¥UªBM £õèÛ–ÑZÖ ˆ8&£ûKxDOõêNI¤jK•IÕ ¯ªuÕ@cþ8f÷𳨯ÌÚŒ …8ÔŠ8ÔŠ8ÔŠ8ÔŠ8ÔŠ8ÔjþûÇ`µò†ÿÀ"ŽÁlÞø†×ÍÝ@‰.^º¬,Éy%P+âP+Î+a6ú´!QÄ1˜ ýcQôËGjEjEƒšœ>{þôÙ󚉓-}Ôz&[5¨ý|Q{Ø>¼~5oÞÃëWíoú`­<¹ÄÆõg4à ·â³·© Š8Ë‘:|ŽwX c¦5mhR8Íãé[UÂv°*Ä1(ˆ›P±cäRSiwz˜A‘“ÞDMûõU… ‹6©S{Ü­n»U£µ å­gk– ë×”ˆcPºè¡±õ¨ob‡Io.7T’^ÉV^U]6šõíÔ¯æTm©v¦9Ðì´ÈFÄØÁ¶g“¼bÀL…&Bb‰hÀ ˆcP /[Ð<˜ëh§É÷LoØ­1Á¶õaS2fÖ7À’Ç ,rŸ´*<ÛQZh vÄ1(í¸Ú:1úª{D÷æÒô–•Û¦É. Õ¯Z81ÕûG^/¡¶°ÞfÔo½Ô"èä `p›ÃëWO9wtp­µèÅK—÷÷÷¯\¹2A³P¯£ƒkš=êâ¥ËŒ ˆÒ#š°„ûù€ZÇ€ZÇ€ZÇ€ZÇ€ZÇ€ZÇ`™4wYª¥®xj§aëìOSçàË]Ø›ÞsuR³Oðvg/b⯬%í0Ä1(HóIîóynflîJ·ò[Çf¬¸~–®•Oó.(—Òsï*GiíI)­r{ìwÈà‹&º_Yã)í ÷óE)pG®ymF]ñunÕu®u¥m·Ö[Q½ˆÁ·rÄ1(Wô6öá}ñÝ)6²wÓ÷¦ÈUE§+›!Ìî6#Úf¡fovÍríS;£~#DÈ [’½Uõk!Œ´%ü¬ì´”ŒUH®­$|,¬‹0yëÎ/¬HtR­êúîO½†u­ªµ˜Ü¼Ôì¶V¹“DÉÛ6lLê¥h £Õvú–èôm W%Z2 â”Âûfñ„Ñ@4>pksŸêgŒ~Ñ·6Cž=º¬ðK3Us´y¹Ñ5Òl„Ö𼲩­ÚZsªX¸^šf,¥u‰òÞÕºÖ®Öui}/„)©uïÔ*¹Iš’›±P͇1U‰¼. ¹µB3ä0µšF<œ {ÚPߦm‡ÉÞÚ]¿'‡Eƒ‚hvzùg ú[-û£Õ©=?ÀÞ×Çij§ªJUØó «g 1e:-«kÔoDxˆê_2:o§V b¨·²Ï×Î4ë;ÈÇ|ð=šq *“ý¥ý]âfY§iFO†Dƒv«*æŽmÊ77/q2àÆ ß29£¦))Ì>±¡šWOÏC¶¼e±ƒM³Ö\¯„Z ò›£ÿÇl®ÃmÏåŽúÃk® opÅ&f¯3uö§Oɢ̘˜™ñãPÎûb[2F“ÈÇ Ñ¡—‹> úЄS¢Âb©¹4 e”íÑ·3c¹úʽ)‡Nw¼íÐÚ<¹æp-4S²—’ê‘ÐõŒÎÒu]„svᛥY‘Ö¦¶.Å«6ï£×Ú áÍê´ˆ®›WY[´yš›Io±þYÕžß­{~Ï6èË bsxýê©3玮µ½xéòþþþ•+WÆk àèàšfºxéòßð:¹Ìd§–Ò ²óó B½4Lj&,á¼,A V‚8åâ[«Õççフ ޵"ŽA5Ü>hÑÛ–œÎ˜I®­œ>ÿq ê=ÙïÅ.‡]Z“£·ªNÝøS"ŽAÅ2nÆXîƒ „wC—cÍ­hìùÆ'v"W@ˆc°Ln°â¥mÂ)ÑWå#ŽÁZÐÇ–‡8«PÈ„€aÑÏÔŠ| *àv³ 3+©K²í¼&vít§1Ûè4e"ŽAÅä®õS¢~åã¼ê ¹]öý|åªHÆ@±ÈÇ ò]ï†Í©¡€*µ"޵"޵"޵"޵"޵"޵"޵"޵"޵"޵ê6¾ÒC^8:¸6RS:éÇìîîŽ×¬ÐÅK—çn nâ21`»»»Ê¨£Ûy%`(¤÷ýÇ`¤÷ýq½¨q ¨q ¨q ¨q ¨q ¨q ¨÷€%;}öüÜM×áõ«Þ”SgÎÍÒ’iììì<ôàoâ WÙ"Ž€…Ûn·s7a;;;ûûûÑ—–z§MaXº®rƒ8–oy9šEƒþ1 VÄ1 VÄ1 VÄ1LaÁ׎͸jôóä³0{ýóé³ç£ëâ˜+]…lͺײÖÄ1€LrÈRuSiËWˆ8Ã;Ø^¿º˜LL´å^æ)š°I•©hSØÕwØW…u73¥âˆc«7ˆ„GhoŠ·Öˈê­ë>[ˈcÐÈèÊºàŽ½Q6˜›2¸!Ž lâ#Ù¼äŠr®ê¶@³jv«x¹î£ VìÓhw™9ÚÕ×-¯hS^¿jÿåÍ>qôC>É=䇇®z³2^(ÓÔ[cokȧ.Ñ«ë½)s!Ž䋆/«µ×Ë$VS(­³4©ë·Æô‘+ç•@­ˆc@Rk2FùÒHˆc@­ˆc@­èç ËwñÒå¹›Œ‚8ngggî&Lm…qÛ W¹A ·¿¿?w&µÂ¸m…«lÇÀ’•Ï’Á=ôà…¹›0µ®²E?_P+âP+âP+âP+âP+âP+âP«Œ1{{{s7 ³ÍÝwß=wrü_ÍóááøûIEND®B`‚vlfeat/docsrc/images/using-xcode-edit.png0000644000175000017500000025734612236612215017366 0ustar dimadima‰PNG  IHDRšT„œ¦ ÿiCCPICC Profilex­—y4U]Ç÷]ó5d.™2ÏCæ9cÆRdÃu!¤™•™’¡%¢d(Sæ©D„L‘2FfïQÏZÏzÿxÖûÏ»×:wö>¿ýÛëœï>÷»~P’Ùp€'ÞÏÇD[ gqé2Žh`  X oçàKP52Ò‡Bþ¥mØÉ­a¡“\ÿôoÓ>ІÀ¡Z—?¬rÂöØì„¯ùü ×vpµs„8bA3uˆK!¦pùÃu'lÿ‡ßp€ƒËÉÚQÐÔxG7<Dß!Vrtòu€nŸìëèèëà q2Äžž^P~Šfˆù>ÐZŠEˆ¹NÞ ÔCí2”W¢Ê“ôÏ\”«&ï渡:híCîæ6M~¿+]¿¯³„øït025P“ÇÇ›«~Þ¬œrœfœîý>#>37›6§9·=ÿpÁì+òëóEû%ª¥æo„eÜòÀ÷›?ÄÌ­d®ê¯ÁÖj×ñ¼_6s^Ú¢ßÙÎøuy‡ugf·t°/{?è>L?²;9>þ[KÔ(ÑÌÉ9ÒFrIŠ ,U: 5mä©}z<Ós;ëY¶Ç8ŽXÎ=.gî^y¾B~Œ€§`¿°¸HŠèЏ–D¾ä¶´ŽLŽìÒYiù0…v%e•DÕub uÍëZOµçutuôõK † xMM5ÿz‘ÄBèÒùËxËD«'Wº­mQvöòñNÑÎy.5®ÝnSW7=ˆ<ñü^ò]o g__¿þ±©×r‹ƒ*‚Ÿ]¯ ©m {sãmxËÍ–[-o"›n7D½Œ®Ž©¼Sû0./>#!91&éFr@ŠÇ]‡{—R ÓÔÓe3„29³è²‰³sÖrgî¿Ïkϯ+(S_RìùЪDÿ‘|)S9¦|»bîñГ¦¿Wf?zæ[eó\¯Z¦†óù‹ÝÚÙº¾—u¯ ëã_û7X7j7‰4Ó7½YxÛÛò¼5«-¬Ý¡Cû@'Eçz×pwuOZ¯_Ÿi¿øvàû໡¢á0H}ÑÌÈôÇ£qc6Ÿ$ÆÑã£eŸƒ&u¦è§æ§«¾„ÍèÌÒÎNÎ=š',È,}m]ŒYÒÿ†ý6¸|÷»Éª}+±«š«Gk5ëW7Ø66à ÿü´±Í¿ÝÿË{‡z§rWwwn/x»_x yÐrh|8utõhë8ø·þ¸ BiŽrE‡¥cʈHFH—Éá´”¼X*cj{ÚèSYtô¯ºǘ¾2o³ÂÙHØépìÜœ§…¹D¹ÅxÄx…ùøÏðð³ Ðb÷„–…ÇE:D«ÄrÅoKxHšHIKÓKïÈŒÊÖÉ¥õ‘7TàWD)N*Õ)§¨¸©ª©1©m¨wijk™h󟃟û¤óL7VÏA_Þ€Öà‡aûù£ cS!S´é´ÙKóÔ ø‹ç,8-.\~jkåtEÑšÞzݦ˶È.Äþ‚ƒ°#‘ã”S­s¢‹³«¢­ÛòÕ·î™xO <#~Å«•éíé£âKë»èWïŸ`{M<8Tt]7„9ä{èë°„WÂ…ÃnößÊ DªÞ¦¾=Ucq‡ÿÎaì`\q|`‚~"GâvROraJÐ]£{|© u,­*=>Ã9S5‹%k'ûCγܤûžyzùü$ßô>)J*öyx¡äì#öRTérÙpy}EñãÄ'A9Ušé™ Ùròxò- ŠnJ9Ê2,36‰ IBµMíM½BãI³JëC»}*”M—LÏB_Á ÏÐËhÇø‹)‘™¹…ÅŽ°²i²-³ßÅÉã¾r¤qjpnŸ.ç²åfàæIæ=χå>“Åo' (°+øN([/¢!Ê*º+öQ¼V"[ò†”‹´±Œ¢¬ ÛYjyŒPØWÜUÚQÞS9RC©Sh0jòhIkŸ;g¥ãý«=Ôkðå<ò@Ó|³óý‹B¶—Ò/÷Y_Ñ´Ž´i·#¶?ïá8ã,ìêÚw•ÓýšG?ä~Q„y-ßrl@àµÙ £àæ‰ÐÒìáY·è#Òo3FåÇðÝ©ŽSÿ螌LypO5u>=!S.k)'÷¾Y>¶` 0­ØºDàÑaÙûŠÊ'I•¾Ï®<׫Qª•z)^/Ñp¶IëÍÅ|[\GeçXIŸú@äPß®‘ckW'7¿$ÌÉ.l/u}¾ú|£së×®øÁ­ßú#1 8 Ô €8P :ÀŒ& »‹4Ÿ‡¾x=ø-ø+øBშFì •ÑÈaE@µ Ðt7Q Ñ2Æ󒘛8•MBò“”@ºFæK¶KA¥x@)MÙ‡u£ÂPUPSïÑ”Ð^8E|ª‰.^’~ƒ¡š1I™Ãüž¥ˆÕM›•} 7Àñ˜3þ´'—1·,/ï.ß·3üƒ‚-BMÂM‹¶‰õˆHÌH®K#ddEåtϺÈG+”+ö+í¨œV5Q‹P¯ÕXÑ:£í|®D盞¨~°AûùSF.Æ ¦´f^æ½nI—~ZZYµY‹ÙäÛQÚ‡;ütrsžrµpt×÷èÄk{µ{kùtøéú÷]3  ¶½¾ê¶}‹&¢à¶HTcŒáÉ8B<1-™/åõ=ãÔ…ôë™Ø¬’…ÜÁ<—üÃw‹x‹_—=š+ ¨À<ÎúëLeÝ3­ª¡j«š¹Z÷ºÕWÞõë øÆÅf›7Ã-­ÏÚ™;n¾›éRéÎîYíSíOb¶|Ÿù¡ï#|TlìʧˆñGŸg'¦©¾pΈÍ*ÌiÎë-|5\Ô[Òþ¦²,û]èn…z¶º¾öy½sãùæýŸ‘[îÛF¿¤vXw‘»‹{=û•ɇ^G†Ç<'úÿ©—~×$ê^^>8}ußÃÿß§‡?TGýn'%™ÞÜê©¡‹:u^Àº| 3¨ ÍÿÔj'ñhÈÏr­O¨™§à¤û¯æçÕq¨{‚|Ü\\ýpªP¥ê$ˆÓÁ; âÄEEeÁš2 ¡ÕªKt pHYs  šœ IDATxì]`TUÖþÒR ]BÑÐA¤HAAìî*ûÛû²êºv×µb]ÅÞEQW,((U¥ˆ€ Hè%´@z2IþóÝɼy™73©½^n?÷Ü3·|ïÜòcŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒêŠBj‘ÑÚ,««eŠ2000000¨s(© ŽÃ«¹`Ò_\5³aÈ        TRÕB« þ|å·‡ÙýÖ:û‹³¦3n########ÊIÀp´ÇÙý,ÑWXPœTèÙóYýNnÍ5^‡iÛ_œNcl########g ø†¾â¬aNn–fs.ÝSQ`gO¯ýÚ&ií¶ÛÖ8Í‚N£ý¬€=LÇc›üF~¦ýÓS|§1ýÇôÓ|÷`BMÿ1ýçXî?lŸVcõÓmõ3öÛmMC‡k¿£]‘=šVj·?ÛG&t˜ÝíËÏ0cŒŒŒŒŒŒŒŒ*.;´ú}¹f ÷U¢Ž'žÓn_éCÃá’¥ó⢄‡… m„Øz±ŠOÖM'þM¸‘ÀÑ’ö¹„„e“öCöK‚Íï¾ûNÐøøxµŸsàÀµÄjr6®ÁÆø¡àÎôºb"âÚ2NÐäù@Új„…ž…û®†X‘uqA.ò]ÇeŸÕÍÚ½ k· KŸNˆ³ù>Sûôæ³:e]ŒÝëWbOL;ôLIôÏ„‰50J\aZºt)öíÛ‡.]º eË– 0Ri¦A£¶9~ÓÐæÃmP;vìPŠ;®Rõïß_å Pp„Ä;)Y€Æ…$cuÓ_n€  K‰+À¤›ù5ÐT~]I ÷iˆÆ(¤¶„‚¢F’Kæ4œ&Á ÝÌÓP4‰NFÇ3½¢BšEÈËu_Ep"a¤Éå¿`h¦¥¥)>=4ɧÐÉÍÉS?^qI±š˜9!kšÌãO'þM¸‘ÀÑ€î«ì|, 8éf?¢»}ûöjoÓÙ²]Dç©y~#ÑÿÖÇ1¸¨9ùuç y·•aÖ}­GÛ¨(Ñ7D±Œoî®ò’ËJû} ´>±#b9 TÁxóY²vaÛ«³0{ܵèѦA84YŒ´¨Ûµk†ªÆeâ&«Ñc¸5Œc5ž{á{žyùæ›o”R®S§NÖ¤¾ÜÄuÞ…¸$‡5N7G<šràÒìþëhjpi·Yˆý!S¤åž*‘û/Ya9F¯@¦Fä›4ÃýcŒ«_¿¾:4¤"þp‚$Àã>2jg´Ðù@|Ì ×e±üƒ:Ps“OÒÔ|*šB‡–2 àæ¾{Št žÑô[ ‰48J`ûeßÑ}Žƒ“î/ŒcäC·“Ÿ?x[ŽŠvYËðÊÿxCF;\|ëT4ܵ¾þµÊ>ì¼k1ª'÷{#mÙ§xvöw¥dÛaìå1°=W/òðãëÏbcÛq8»g3ñkÚÃq|Þxñã•ÖLÒ_,é4gùéXöÅg˜ýù é‹î;M«ÒÒW}‚‡×Äãö‹dÀwEVÚ"ÜýÑ!ÜtÕ™¥!nkÏà±Ö",äg̸å´>çœ}RSÙö#Þ~ê=üÎdí†áÚ G¢…Ú·é,ÂôñèÇ›…ðÄm· ¹ïyø¿³{‚Ÿaóg²öüŒÏ缎åª0Iyây¸çÜž¶,vYÃþ‡=?~‚¥„~üûp'ÚŸwÎìYw¶>Øc¼FÇ„¸dÞ¦M¥ÈËËó`'ŽÉïXÕ “cº~8†“i4‰å8R˜i@É @JÚŠS¹iëxº=Æ uFÚVC? ±Æk°©5šÊfýV:::Z JƒB-,æ£ÐHƒ6 Ó2?ºŒ# ´NŽvš¤G:4LËý>†_|þÒ>ß¿ñoÌx­>Ÿ€FgyÄ'¥âÜ“€Y+šáì+'¢mB<"8†ù©AaújÜýØ»;a®ùG_$"û3CU>MYâ±Êšùœyôÿ;$¥öCüˆ-C‡arÏd„Ç'úg5Æ60p–Çhn t+ÏÜ8I§ö7ë1^§% .¿ÛÃu¼ÅÖ¸ŽCŒý!Ò˜PÇé¬ÖÉÁ3<Ù¦N¬mf²fô.F¦H+=ÜÞ´†D9-, €àM8Æóñgø#žN«i2œFÓã²<]¶?šL£Ò±>ÌgåSÓdzcŒêšØ÷¨Á¿ýö/ApyÙe'xü¯¿ågÛf:¶{ÝW}ÕÓ%Wr† ¸ÿžÔ!…rðÀ.X8+ h–¢hàxÌZº²ÍYL4ºœ2!EùÈ•}Dqòþº ò•Ý8QÕÏÆYF¾Z‡t›Œ{/PVP„ú]zᓵ[pDÒ'ØT{ù»×ã[¹‚läW`@»JmÚ5D‘€i½ÖSÆ>Ò÷²…!´^#4±À7¾y(>Xö;úµî‚¢ôßðIz(.¼¤È¦Œ"]õ’ÒX´³Í£µx +)ÂöE+dw7tlÌü´êÝao¯Cz~?´Šò#èx¤tè¬ÈGÛÖ-Ñ$¬X¶òäúå{ßï,ëx\}Éh´ c½P¿oý(òfT|VY»ó9ñèVq8ýõã›â¸öÀ¾Äf²=*YvȘ[lL¹ÒM€‘€‘€? PAF…VU ±ŠÆEèh<ÇÎË!“ Œn>iÀ©q¢cG„Œ4 0µ_Ûdzì@H™{¿ü¬ PC©€(Ô~æñG—Ë~ìÙéjŒçɇnæñGSóÉ –?Œæ‘¶•¦Ä´ñ©2š?FLjtûgûæÍÚðt9´»î¦Ú=ÛɇT4óè|:}™ígÚ·hŒ"îe–ˆBChßÑ…9(€‚2R):yøeáA4îÓ6qŸ5œnŸÆ hjB:“ökÛ,%fˆaNô4µ?“Ogĸi0ÇDl‚ÚÍ´ÜSéÏðÐÓD:ÑÔùIŸi™ÇŸÑ?¬•O 6™Ï 0ù£‘&óc$P%Àë´áalÓìw´¹šý*XSR 5°&Ζ ¯wdîΘ9g.¼í!ôiƒ}ËßÄýïˆzÒ)ÐÈQ†{¯M±û `¡:HdSwÚ3E´ÆE3fà[x‰K.­/w©ñmND—XòåÈ[ŠÓº œ Ó–Ÿ^o£Ñ¬y`UcüóÉsÐH¥g.9š“‹ÌþåQâ*¥Æ‘–Æ/ßE¥eíD¦ r›bÖßç_ÿ<êó~‡÷–{Ÿ%˜@##ŠI %%EÝÀÃC=<Ô\CŒ²s§ì›–žAâ:Ž4t4àÔ¶]“©É1½{@Ó!¥¶¯ÙÃ:6Ò­ýÚM[3 mÍ”(*| ·e¥¶nÝZ]ÖNtΉLƒ7«:—4èg¾S0þèwÜqš^‡w¸$†”ôI“'hÛµkç—&¯à}ŸÜ»F>µ6”¶•&ùÒ4Û´iã—¦Êhþ #°ö)ûc¶óK/}U-¥_{m/Õ®Æ<Ö|ÞUQº1 *KÃá@…2cT~·í’«~B¥;åeÈ´‡ñå[?Ê^ÎöÈÉ“«Îd¿£$¶”§¨Øh3^{*R™û*æôÁß&ô@tÓ.^2óþûâ§Ž’"°oÏ>$× 죞,éçd¹µžÞõñís…4ÁÀáÍñì—ßÊà2“Rd¹Ë =\’'U_kýåónú¡dîkxþdL=¥‹\S”/{G3Ð@ÆÅ¿òEBÓRßyrEÛhÔoRO´µ2öøá»‘*ëu<ùá\uÚIh Ÿ.Þ™^„¶Ç õ¯ô÷ §Yûå1–{Ó™ž)|UGºõï K|õK°kîØÑm8’c¢ÎYÂ##JK€+Nü’â²eËvÑ °`RQÀkxc£FÔê•î»~òÓñáhÉŽ®±Ýl2Ža|´¡Û=8”†Ø‡\¶Îh%B·½@È,c^Gà WQ…KPÈåf â˜I» Þ(X¦ ´/¿iÓ¦8t袩¯h!-M“6i2 Óz+`™LÇ“ä\f×4Aù£iˆ2 ÓâSç5¶‘À±$¶eöÃûï? ÿøÇç0×+ö¸_óúë{+@¡Û{Åù–·oÞ\îeÜoä ­{cDû¯ñÁ³‰Æ3§Ÿ;íg}‚çïÿ7Þ7Æ+‡/OX¸[SéÞÍ"‡ý2·aÞIjà*)ŽÃè{n^}³ž]ïÖ‚†tÁµÿjç‹TÅÂJ\hÑk8ðÕëè:©/Èô¬Ê‡ËªX+9ïú‡&vÿ®›‚7{ /ž%£1·óœˆkîn~å1[tƈæóðΓ ¨é™¸ëÚþ~O‡KYÿ¼zf>ùžZ=O1Òu2þ%@åø,ãÙ±>@£÷ïŽ'É^R)óÞo1úowb°:4UF߸ŒŒ*.~8ƒWmÛ¶M]QDÅY0†J6â:(<d>óhÛÝd²xÆiF¸¼&и‘˜Û­ýv¢’ú!0Õ¾óán!Ú o'BxKl¿†“¿þC Im!?A©'µ<˜ ãà‚@ß øñG`>^5Dšˆ4Vš\Þ&x –&¿þCšÌç‹O.9²<Í M¿‚1‘Fµ(8‹/ƸqãËËÖ‘G‘s¹ßØëw`ý¢Q/´9¢$—ß¾@…c$`$Pu pìÕO°xƒc8ÇzýÃ…¬à•© ž<¥ã»A“ÜO*®âÒeÙ*õd%ý¡W4=Ä«ààXBÙjùjRäáÎÇ+ßtŽ@6·qÛCEò¸i:ñ¨DyCQÛ"Š}mÎ ˜Ù$00ð'`0‘5¿}Œ±ÆùrËvÄó%œ@“ÀRƒLn ×ÓjTZÁf9 IÐèËPÓiÕvj·5œàSk?®ý¾èy…i„M€Æý•™ZŒ#h£Ÿa°µÒLII©Vš¬Ü[Z|z ÂxŒŽ¢"øe«>ú( ìü %óT·)‘~î1†,>OpU¤4&«JAÌËñÍ— $§|¾h¹Ã8–VN/«” Žß•+Ò¹&ÆHÀH@I@㥇ÏiœGm Þ%dÅ„š Ëõ|' iÍhukº` 0u¢8ÐIt6g[§µju˜s.ÿ1:ÿ±NÓ-L¬‘@íH gOûWbü—«û—ÿT&ÖHÀHÀHÀH K@c:+Öcut¸vë*2ÜÑX¦&`Ï ÃIÄZ¨×¶Žs,Ì_DML`u…¦?¹˜8#######Z”q1ÆuÚ¯ñmm»}î¿: }JóhšÖ„¾Üv‚$  ’šÐšwnÒæ¯‘€‘€‘€‘€‘€‘€‘€‘@ K@c:£qžµHÿt¼5®œÛ hZ‰èL:Lª‘®ŽWáhjqÛHÀHÀHÀHÀHÀHÀH ÎIÀŠó4ó £¡Mü§÷k2ŒFÇ+z' ©Ñ¬ÎÈLV·&bŸ:ÜØFFFAK€/¨úà Ý|xÀ‡jâRÐŒUcÂ?C«Q\†”‘€‘ÀÑ•€ói·¶É™PêpÚ|¬qêÊ"fðg4¦Ñnmk@êÉÏÁÔ###`%Ào©ó ^öÕW_aåÊ•êz2ÞåÉÛ&L˜,©c6ÝŸ¡ŽVáë—k˜ÕÍ—ˆ`o±æ3îcO›7oÞͱTÖðë5ÆTMG9nòzH~Qñ¤“NªAwnâ=ù¬¶Õí·'¦=“&Èpí¦­5š:<(”¹oß>È}›êûà˜RtU7´yû?¯‹jܸqPÍ¼ÕU9W†o¯Š×€‡`„—ÃwêÔI}Oý‰'ž@^^FމX^Ö.מú‚W °U­$ÿ u´ ,K~ÓLùz‰çnTIà•ÔTóZ-ùÄo‚|XãX6ŽäcËž<ì?R(v qýp´iƒ¤à?,W¯Ê¼m•ßxÍO?)pÉû¤?þx 4¨Òtù2fLÕ$ ?¸Aо`Á¬Y³'žx"zôèQÂþ°é1^§ñK?X ©‰jbPêB´ð0ÁÍŽ;0xð`4iÒ¤lÒ”]) °§§§cÑ¢EjÙ1Ø4¿C¥Ä¬d[å\ÑöQ9éT,W~~>RRRäÛÝ{1gÎ|óÍ7xàÔWˆ¬”êòË蟡ŽÖß*'3¹@Z‹vºD^~•±Þ*ãT‰|@cÿ–-ȧ[^(Ž%ÃkñÖoË«³°å€|·=:^¾¨” T*®Â<ä@›$`dXtjí~ª ÿk×­C‰\8ZÕ „RC,—òw‘ÏÖ†ùIæÆÕñbø mÞ³KmZe ?¬bLÕ$ÀñF¾›ã*£¥K—©o6¬2Ä5¶Ó6ihü4½`¦°c¡&…íÛ·«¯‹1m ôA×Ä$TšÌþýû«Ï ²ãû3æwð'ÿql»uQÎáÛ¿ª'–ÚÌL&\.?xð Z:§ó4&üêÈÖ@€–Í¥OQ$4w8ÝV€im2¢ÑL ºwÓ&äÉ×ÚbE³y,ìÃÍÈ*Àœe±jg ’[tAûÆÑ(ð“/ŸC% •OšFGEÈJ\^\¸ =[¤c\¿†¨çþÔ±µŠÁº…¬húHÎ)×:ÍúHb ÒJ[pµ{×®]«–Ê»té‚¶mÛ*É?pBOk°µ ¤~L}k" eHÀÎ¥ó–²jÀÏmÿúë¯øù知ý†`È¡Ákm|lŒV h ŠžhZ‰Y Ø [Ó1NûµmÍëåæg6l¨&¯ã© P¶”q c~‡@ò_“r¾öÚkÑ®];\sÍ5þ™¨Dl°|W‚t…²l'¦¥K—‚ÝØ$à£k×®¢u¬&þ3ÔQË>KVS"drÓN‰¼<8‚Lf ÆÉ0:;å÷>(b’Lˆ%ºÜê²Ê2ùKó ?®RÚG!/'™G2Pè*FËÆQ8p6ï ºü0BÂd ½íñØ–“‡¿ú — o€Äø¨J±’››‹_~ùEÄ%J—R a6Çʇ@w0&$4 ®,~-°fÍ®]»@%µ˜:t@¢¼$üöÛoJ¹A-'W+ pÏetÚÇÂKDÍJåØ¢Î±”{5£¥ñ ..N¹ 6×®]‡.]*¬õf#´6DÝTíw /wÈJÌNÄê·§Óþ€_"âæ¾%§ÍâÆË/¿¬T¾ÖÜlì—\rI…&§}«?Å¢œnß¿•"›±y ^~õmù°gÜrÇehe‡ßN…¥ðûî»·Ýv›cé”q ·Ã@¿ƒ#q¿.¬þh6rzEÿVÑ~SÖ…ÈÚ’óŠ+ðñÇcĈè,K_ÜPÏ·R.ѯ“¥5jüø=ò^½zU‹Ø‚iÕR"ì÷œ¬* 0çÏŸÖRˆ IDAT¯–ÛÒÒÒÔÄÄCIIIêüh¬ôg¨£U¹Ü['m¶Çu™!b{f½|nÍ@5ž˜Y-6¸äʲkŒü ¹í*Áè^ èÒ:J=¿î,Äê´\¥éŒ•I<7´>Xò3.ÖáüB_ÅLdD¤ì«w2™9)®}Òï åâ˜Ù²té2b_f?):ÄJ¦@ã~Ÿ+Ÿš/‚)²Ý…ó._Z¹ðwÞQ}Z§æ Ÿï¿ÿçwF­^$u¼±kVl›ø™èó¥fÆ 2Çtªž®lɤñž%H9î+}9 iÏèËo'd÷ûÊãæo/ÆC=$6'Žk‡¢bémB={§ 9{ä»À>ªwèÐ!0Ái°fÛ×çàüüù8ܧ™dÙG»žŠÏoz7¶CVž ®c#ñ»Ô|s|ÿý÷qÖYg[eŸé‡¼Ÿpyò`¼kÉ5hò?póô+1$%Îjwfáë©— oþVôi怴ç<Öüµ"çÒJë²V­ZåÛõÅ_ìñsâëÞ½»Ç_Wï½÷žš|–/_>÷Üsêׯ¯–Î?ýôSu8¨°°PmN=HÖ¥úþêÈ߃ &S¶<”È‹CcùÍJD "ÚJeˆ˜øH»õi6åeJ–_ÐLÆûÝ¢Õ+“ [~jûcñúÃX¿/A–Ãe+‡û@ŠâAØ“{U~ß]€>¢å<œ]„ý™.„I8ëνpq²Çtݶ$¬øõ úu î¦UaR@^^®ÅB¶¡GDd\E! ¸*ðJYYŒö¹A¥0#†|º]–„Õìܽ{·à\m¡&sýúõIíe¿~ýp '( ç²eËðÝwßáí·ßVû8ù’\™¾\™iRQõäE$²â@¾šEPëäüº«7Çоò2RÁÒ5à¤V399;vÄÎ;Õ >·=iìÍJ7?Ýî×á^v 4`%¢Ýº`»_æÊàj:ê'Ô—ý;G¤ãp ‡+³Y™yjÜb! õa4™ÇjŠ#¡s‰Ðå@çÊÀoè‚'o½'FжU´qmÄÉý0ü»¸¸SÍ"TvôçŸ^-µ°Îì¼<íçËTéwp• [ˆÞþá\wrCyÃÞˆ÷ÿq Æö˜ƒ×}ÁMšM"¥ý–„Ë@Y!!úªÁÑ «59—VqèС°‚L_5gšê”i0íÃU ãrÎwÜ¡öuQÓÁ=D4QÙW4ïO¿g qìh;7‚ü¢Œè_ÜWŒ¬1Ôbæ‰2……ªo±mR9‘SRÒvW˜w³4ËÕ\&ó—7iD*ê¯ôÐÔr#À/*r©»f ¥l÷þN¦wÑŠÊ Øô¬+oŠáüÃq…ÛÜh4ÙŸ¹LË8Úô3œ†é‚97 —þÉüu™#.½·O¿Ó.œŠÎ‰î] _Ä]3ÂßI„˜¦}pö¸IhQùsZVvÊÜ"{÷Nؽø~ýÞ²pìÅR™nHSU€ÅÏÝ…çn·ä÷í — Èö ߯^‘8qòÙè×¢žïÌ¥¡÷›¼€/öÒvýæ‚î†$þ³äór:©¦¼ùñh&ü$)ÅFêdØñâb¥ã'®Uÿ5¾-{C ´aç#ø,O³!úI°û¾ÄyïMB´kþ{óûèÿí¿Q¼ˆ¹XòÄ`ìïãù÷ïÄ]+?‰ #°ó«{1öæ$¬Üw7¼…Vþ‰[g ½|q©Ï%/`û rçßÿEÊ©Ï`Ê„—0òÆ÷Ñùµ‰8íý帺OsDIÝœk§¹®œÍŽËå mØñË×[ǶóÊÛ:MqQž fîžZPЄg^[Ž£w ûØ›ñÖšÝø.o5ožô;&·)F„¼v=zÉûxyÁܳ—ôˆv^Œg4ÁÁ_«G•[T€Íë7£°Xäµó ô:ûfÜ5g þ¯<<}!&Í:èÖ.®Fµ§¨59 çÜkËerݦ§L™¢ö4±R^o½õ–ªß­·Þª–«¸oÔn¸ïfÒ¤IžŸñŸ\’¯èo§]Ý~ÖébÑ\²¾ÔüÙ oKà~TjAæÍ›‡Y²ÔÞ®C{Lš8I½ÛÓ‹~§:r¬Ú{h'\¡GpâÀ¶øaÅøîÇÏñúÌwÑæ¸ºUG-wu…‘L¾šv£Ú´Œ‡ H2’Ú,ŽÝ–ñ[ç¡V¯ªWühZ±×mÍAd½ÆÈ/ÀX:­Mêß)=ÚF".ˆ‘½›MâC±¶P4šrð¦Ìpd,íÆáçMÚ®EYT.‚Æeú¶…Ù³YRRäÑê%%Y‘åY, 8}ÈP!A[©$¬pŽæ¸Â Úiºuë¦Æ*†ë•Fö†Ó0Ç|ò¬F³ /GååŠfX¤ÜÒ^ùsÓæã…t;ðÀ]KÐ÷Âë0,j%ž|ûwYºo(ûÙW »h>O¯·_µã;µG|X.¾ørûŽDÄò±hGâZöÅùŒ’ÛÜÅl_þÞ˜÷“¯zuǑߎà´ÿ»)e°ÃÐòÓ§-_%4GIrÓÖb£;…çïµóðÊËáÖÉ&bàä 1<µÒ濎¯ˆQ÷¾„»´ÄÔ[.Cû˜L¬˜û!æ®HsçOˆ[¦ ·4>dbÕ·0oKHƈK§b@+ê7 ¶ü;¸†µC«øl_øÞÛÚCÛ‹¹¥iï¼sš¤“ïE ФF™/tWÀhÆ,¥=ÄonŸi* 4512¡Ýªô`;÷`94ãËözèIïga{¼„4Ë@LˆÎÙWOíåä¡}â:aìÕÀôs°xÿYè¾nÞǸOöál^È·èBQG¢ü‹–KxÃCò°ú³¤”xéÎÛPrd¸×ãHÖ#(Œm„®)[ñùÌg°#c›„‡ 0¿Å’¿µø’â ¬¤™›>Ç]÷Í•¾eäìGÓÓnÅ5£ÛIªªÊZcŒõ† %²oTø¢ kPv**,‡ÚMìãõ9|9× RkÐNÃt䆇‡yäå¶þ¹ñÆ1tèPOPR»RmÄW/=„ßûŽÃøQ=ÔÒqŒ\;5°å÷[`ÌäþhÙ(Eû3e…3M@æ> 3ÇËÜ[th?eï‚l«UÆ•}Ë?xq†âì1™ø`îr,Ý<gÉ’sæ¯sñ’€Ì”¡gãŒÔh,ýðMlÌJM·oCMjJ÷¤ý´kœŠ¾IaXÿÝ"Äuíò(šr»ÐyÌTôn%‡d_¢O—¡ê(4í2)ß¿‹´Ä¾˜<â»EXñÖS˜»±FLÆà”(ìN—}·ªx+ Ö ÈL‘úŽÃæOçà«/Ö ßeTü¡]épå»Û®K®ÝÊJ[„¹ieiu ø›[ñ…†¿aÚ‰µ±»›¦ óé2Jm¦±æQÁšš€.D¬nE4ÐGMšd$Xä~ C7^ñ(îž•ü}1=åd•fóþõ8ôÑA<ñð-¸ñïª0ýÇs"fŒÞüäslúî)\øú÷ˆÈ“¥vFéØŠyÓ’E9(¨' ˆµ}Æž''|s'àœ¿Æ I¸ ‡×½ŽîgÜŸŸqÝšà½ûÖª”KÜ>^ìÊ—7[¹G¬Qüõf•ɺžÐ´JšG]Ÿê¶‡R )/Ö¾ÓñÉí‹0à?wÉÜÂÊDœ>ál$Iý'Œÿ+’ZDKZYV’˜Ø\dçºÁD–_Üw{±ñDhš’VŽ(FÇò°9ùªód ɉO¡]SÚa) ÖŒ£œ…ƒ‹.ºHíK¾þúë?¼¸œ—Ð>ùä×]w4h`ù=ø JWÁÄ›Ø1à#P£¶÷ª«®R_kØ@-ùP6œÔ*øV~Tkt$ë0oAJ»VÈÚß²¿@I®ûe.6&={÷P@å¿Î·ß~«~ÿºRG¶1vq¹n„¶’3ÃJäÅ@™à¼Li¯0ñ1=°üù K¢e¬pɹ†¼si± ¿/ÉÁE#!*"[äj£íûE1!'$©—!ôdÞ"—¿Å\¯,· 4nÜD>»ºmRRD“Zˆz¨]mY_À\¼È¥„2$ì ¼´É³”ðÖ-6ÆJãªËâÜÌ~ÇºÒæª &÷aöéÓGÍÝZ†\mc8 ÓéþªÁ¤lÚA¦ÊŸŠi7\ˆÞ|?-ŸƒG—¯Àäk/Fjƒdß"‹Ò› kj{p–Éݯr`Ä_¯Æ€æîy'÷{ÖÓ°¼‹#®ûÙ¸ñ¬.Ì_¬ÀºM¢VL­‡õ߯å龘4¤‹ÒNŽáoÌqõñ—Ê&©}óS–¯Þ…¾Ã]X ¼°=V ÐÔ¦Õ€1h%ž¢¢\Ùv!Ž wLLr[µ¤¿¯Í HmŸ"@r ÈŒë>“¤ªDÉÍÝi©µRpéí¢•4&;¿~ú^ê4½Mù´Öxý»q ­€±68ÝÀ¬aA‘Ò¿CP‰%‘SšÕQýcGö7ñqóñe~jù6:·m†n£{av¡¾ˆúpÓƒ˜?{R;XA‘΂A—ßkÆ_Ïq6æÏ;&¥cqdT{4Æ”.sϋˆž£.¦~‰CwœÞí£Q˜•¡òl[ÇNs ¦œÖE+Þ='䉪‡¶âÎÈ:"ù¥‘GÔGëv²QÑ#µxR.òÓ±y'кm…C³Ó7ËÎŽd´m¯cÈu6›·‰f¼5šÄúþYØq5 ‘ xì±Ç<û`è×F ôº5ãï 2a#Î8t@4¨‰È9²Ÿ=8Oc¾ÓÍ3‡Iì%ø5ý\ÔGkÈ^Õ#ù²g)¤Ü£ùÉÿâ´i§ !{>{^:àëMD6¢ù™,Y·ã[ÆâíÎŽ’Sª.$´âËU²ÿ³=&4Ûû¦þS”ʨýZGhÖšœK n‡ào¦Í»ï¾«›i8˜û3HxXŒ{˜}i>uÞ`Ú‡N{4m~:šYÞ+úóšŸqðÀAu*˜“Ø©§žz4Y ºljrälC£æ ØŽÈ=œ…œÌl4H’KÊå'ÏâaÄÃKаms Ó o=1¿ÎÔQåR¿"j«ø° ‹M-§rû’’¥ëhN*šÔîÕvÛŒ/A¾¬EEEª*މŠá)!6 =Ú¹•+7eã°ŠÐ)S‡—áy\¹H”¤Ì[Qsàà~´lÕRúl,oré¼Dæ‹"´h–ˆ”fîòÑܰ#GrݼJ[ÙxâR? ݽ{÷V[¹xEÇžáÇ«år~öa|jzöì©Ò3 lú™*•ü‰OÁYÓ¦ãdY‚~I– ß}ñKÜrã(™)Ýë\Þ?W Ü Sg·Ú|8¡{»² OÒÚ'ÁÇ5U Ó@] Û'õŠÃkR×6M"ú¢[‹úXnÉ·wõ<¼1ǽt®Š‹Ó‘¥û»;¹Ë(œ¿w^Z”ŽýÞèÒ’T@–cœ;™«t{„%“8£O=Ïî=ÒOÈ“»ssé¾Jñ8—+ )½OV,exÑ>˜†˜°œR,™DKIÙ`襸qH+ìš?/|ï@¬”ïÝ;dûT¤ò‰ðDù„,×g¨jOÄ ?ù;V 95(k¸ÿù.ݲÀkK`%¢£ìaVâö8ǧ페˜)UôªÃ‰Ÿ S ¥@öU†ä„àí)?bÔ«­1ï¢mèxCú< _­vŸ|¶è*jŠÈ…Àa…Ù8xĽ¿±Ýäwñy(ý² #,ïl9‡Ê)rQÎe¡ÓÔ{‘6åv:Ò eY7OöÏÄöÁ;i› «»ÒéÃdç-¸_HAv>:_ö<6]" ]$’“™å¸ÜÓåÿä« ¢)< ÚOa´óÿm-G6(¾¢ñŒÌÎÀ2âðœyæ™jkßé÷'K$¼‚óŠL^ž°¤.–WÂì¬ýêN3nNŽí>ÛÓ¦ [„‹¼CÈÙœûF.KÝB sqØŽ„¨bdÎQËkN¹i›®”½/Qˆ’cža—^.r?„¼Ü#ˆh?/|1U‡\Xñü Áx„HÇð- c5à¬59—òÎÁ–š/~Ö’×OÜÿýês.sâ’%KÀ4Ôäd:þn5 ‹c$¿4pà@õ=t^fÏxÜÃ?¬®JâI×cÕpa¹$Bf‘dþ“ý(¼ªmùÿ6bõ¢ßÑg\ Zvj(}9 1ÍЮ[clXZö‰¿c½Ž›Õ>MÚÒ_+c8y¨¥së5© ÊäéÝ!Ÿý”!/,M¥–Nc2ŽS»Ú=…óðÛŽ\÷]Ú9ó:,a2¾éÂd VI˜,EflÄ mµrBG¶ ĶlICÓäfjY>,,\ÃÖ“]²/À–û•óe•±2éð2ζV“†[w¸—œ×äD’·‘#Gª‹ÛW®\©ú%÷ˆóS·|Aäš¼+—ý•‡ÿõ¯)E’þ9¦9™½+æcmX[ô9¡…°Ý‹ë„ÅuVš½=Ù騙‘‹µ&íDŸ“E¢s¿NøJ@᫳"Ð1f'¨9‰ZÃRšÔì&wA,¤‘èÛ-Yñ¦²= V^43Ò°`‘ð™‡#’Màƒ„YG ³H®-ŠIÜ^„y+fa~›‹Ð_´è;߃Ďîeô2¢•wq~á*—{ƒŠÒM]cN%ïé¢F“‡ ôæaköˆ’æ¨7b·—Ÿ_¶]ÙýÎ8¿üúe·s˜€]8°—;ÊŒ+#]íqp‡È’õ^ïCY²‘8[Ýk&¸O–!Ý•<‚ô<Ù›"5ÍÊ’‰—-Ñê-¼àà¾Ò’o¢eå”s¹ÂZ”ëà^u_¥NwPêÈðâUN¼´ý(®ÊïÀeü}VF}0åÊ<„\ÜøõŒ’l‘Qi½ `W‘O˜€ÉtʪԸËR<å*µÎÒW´ÿî{>Ð q2žýj"ŽÐ$µ#gw…SSSÁGà<øCÅûèôtì7N}Gç Ö¦}K«¦Óñ¥“÷j¶iÓÏ<óŒºt˜—eóSwÜëuñÅ+yÕ4•¡ÏSÂYE‡Õ TŽëäfÉõm²µAÀCî¬[ºC$†¢Éq("óѨE‚ZfäÅÊu¡ŽQòu˜ÝòRÚ\ú3'ÏDPax¤ËRl=¹8LìÚl›Z%¢uüNQ:d¢^´Ê!€J„ Èëz\Œ:„Ã󌑯½±P¾$H·^Ó]A~ú1;c7ú¶u©Cxå½ ?½Nêu?¯A iÏ.٣ɕ—Èø)ó étËXJ£üÖ±Ó͆D¸‡]½´­÷Dêèê°©âýÍÔ²òv‚M*†N>ùdõâGm'Ç'.«3Ž6ïÏœ9s¦zaæÊÄwÞéÙËé§îüvû"(²%ξ|Ò8¶î1‰‹æàÍ'Bw¹Cò4µå°¼†Wέ@£ý5(6œˆOt=&àÂì|²l5–D4è1½0oîoJŽ0ðµÖ5 §_:[²Б‹òéGdi1-ÐO>nòÕ‚×ðÐÈᡈ”«Úž{<^–ÿ‡£óàXþÕ<x¡´ÎÉr=UÚ€P”—Ð2C™®¬^>ÒJ<Û Û_²dÜL9ö16>ݵµM&Ê&wúÊ ÓxÅY3ÑÍ'Ôòð—ÐëÄk›Õµ?må³r3%ÜÑðŽB6R}àÇš{Ë8À:uÖM[ÃÊÐ9¨n2¶ÊÒF¿¶Ø¾m ¶=w#š_3†Ž·’ûúÙáNŸsr¢Ö‡_ðgüýþòÕH\H¤¼GÈ€-Ú`é5qÉ’}Yù5û†¨.89K…ƒmds4â9.|øá‡j)Oâó  ·”øÓ ~Yfl×Yº÷}ä5Ý'{莈v£ß»M:Ä#uH3Ñf6’—j^g‚Æ-°úÓMh‰>u¦ŽJK"cv‘h­ZŠÖÄ%'e@ú4 ÄÓÒ[%Ox§NHnÑBŸyj0pÕú¸ûÍt´ïÑ®B99.e‘õ‡.i…έcžQ€G?JdzÕÁ 5ƒÊ¥™ ½ïK\;)U4}Í*Ìå+VŠâ »|ë̉²2$G à=œ'ûð"¢ÐVöhæææ©>ö]Λì\FOÛYæh6íÊÅâoçcÔ)½•_¯*O5þa¿cù)))ê¾LòË0*=hSADK¾Gž©Eûïÿ‹mÛ¶)-'¿æS+kã³Hö½æÈ*NQQâÄ+ âI¦ûTµ IDAT"×ãåŠJ22&Ò;Ü“ "9ˆ*eèíZþ^˜—ƒK§Oƒìž¨’)ÈÍ&ãíâ°§Ö¯@ ”õ‹GLS$/Ö1²ZY]†¿ËáÇKïÝ.³åy[a²bô Ú,¿ö‡E‰oµ-og²\ã~8ië‡]Euw+_Fe°¥³‡I´yçhݺ5ø½Tªß©½Tµ4 ;— '•VZbùÛó‘^²+mA»è^¸¤ÏptiÛÓ§Ô‰V]gçµÊo”¼³ŒuWåw°Ó®yžt„¥Í—W™ìéåöAÕ<åKø#ɹ¢í£¼4Ž^{4wî\õe¾˜rX›6mðꫯªƒü4';ë‹'µ`&¶©¡ ‡Y‡åcÑrwIž:àÖýÌæhÛ·©ÜèþrgŽ{÷íA}›£GÔ:P$‰&r»LdÜÖÁã Üo© ¦ž pxLig ®†¤ ÈÌÅC;Y¡!8 4nyèT££Gǘ|ò~ÌþéW4ow¼\*Ÿ'užüdÚ&GáÇM–Ë5Há²±GŽœ«;C…÷ÐÐìZ„Iƒâ‘,WøT†w‚²M›6ÊõESxXíÕŒ‰áõ3Ò&¸|&&&&ZÙ‘‘õ•Í?<¼d5Ü?Ê=®Z“Y^¬ôœÜüØ·vïÞòbÀ9›m€ýËZ&çuúNž®¸â 69÷”j êTÃyf¼<>tÕbŠö.ÃÏ}…ÈÄdÄfïÅ!U-‡Ê)ooWª¬È˜²ó‘6†Y?{ìi*Uhi&ÊŸšLŽ“[·nU[¯¸Rgý*@ß?° @È2¨±þ`4š¨TXó§°>må+~5šl`œÀ¹±Ÿv%+-Åc•;6;=ß4ió-ÆŸ1¿ƒ?é8ÇÕU9W”og ýY5Q§ë,X &1^BÌW¾ÄR[ÂuÆŒju„Kx\pZÞ;œô.\ý 6‡-GHS÷D^‘SBÀRÊ›ð’ä­ Çè.— M«¶ê{ļA .Ô‘ÕÈ•±|‡€ˆpÙþ“,uæ2˜gr‘úiÃñž>Ö}—Ì‚VÐT–òœnÑùjÚæiÞ×?ús~‘«kú!:J•\sÄa”KçnÐGÞ…{Ù“é’=é¡{büÉõ1bhÙIÅWÌpŒ^±rµÜ2Xléx-‚áýÅ™…Ø$ßX¯ïp‰½¤Ì¼ìÞ°#õòh9íiªÓO°#óLS.üÁ$¶e«áïÍzr¹Z5¦áNÎQö´Ö|µë.ÀÞíÛ°ïÀa9#††ríPJ’Ö.GU)2'ÀäØC™o—­-´)÷`lÏ»LÒ¦Éc×fj?5˜Ak4­­‚n>¾€&øl· “¶˜tkÐÙV®6ð 4%­êúMˆ~cªGìÐï@¦.`ÓüZÁÛuUÎå;x‰Ô~Jžž|á…ðÒK/©Â T6yÛ4OÂΚ5K­ðt:ÛúÑ23àË^ǶâŸÑ¨k}uJÛ%‡HD'&éä¯\Þ{pU>†¥LA¿ƒÁòÏrùB´|ù÷JI™‘—Ñhá]«Ö`& ŸB´ÚâåËKB½pôï×Gm)‘ 7SxHˆ/{|©ãAJ»±Ê˜n½Ó.+oØ©0Ð}‘«›¼$]^üB¥q›QEŒ|Õé/’~³<–rÌWÙ–ôk€©m½lN[/›Óf+U-Ø>úª@‰´û˜aM§›=óXÃí4<~6N¾ást%`~‡Ú‘¿‘sÅåìkÒ±†qÿ,¿‹Î;Oy2Ÿì-·ÜâÑ”ðïñ7nÜQ™¬yÃI8E.‹^°*¿/\ƒÈÖ%h 8(Ì+ÂþÕ² æp$º¶Œ.äŽ^ÑDè ¸.Ô‘¿ eÏ6Nw‚l] hû^¶4p¿¦®‹µ„ @á!’8'ÌÇ:³®ú÷õ•Çš¿ºÝäŸ/è¼Õ¡÷‰ÇãøvMðÝÒÕX¹n¾[Œ—èòDY6çõ5‰Q9èÝM¾êÔuââ•#§¢åÞá Nä¬#뜚z‚*»:êÄ,Ò¬-C¹lò…ˆ3mdt2ú÷e¼¯ß˜ò7¦jàoÁ­ |éãË[}y ¨CŒgÅ€N8Ï)Ü+³&æK£Éu­ÉÔ¶ÖhZí¶?ýôS@f5TÜ00øI€à„‘^ò±‚k8ã N4@Ù"Ú3žNmÞ¼9þú׿zJ}ÕÊÑOêêÓº»öm“‹¿ÓåžF:)‘eÙ8Ä„& ic¹QC€µ=´ëJ5x ¿tów Æ0-Á†~´6Ð †^UÒ趦ë@¸·Ð%_{Ë…ˆÚâ%'¿ãâå&ˆx9¤#—»ËDNôœÐÉ?AWE Ë®®:S¦•á¡¢<›ô| ÈmZ£Iô¯5™zÙ\k2µP£iE©ÁM‚N+¸ôZ:7@óßM jCÄØË²†Ó­ýœìUC@¡ùÔ¶•W 6h󱦡[ûÕ:jþ¬uªˆ[׿"yLZ##š‘€hjp©mOn(æC É‡o—lµt.齌UªÝœÚý^ÇHÀHÀH *pNáU)«¦óVTÓT×êX×ø­éßÛÐ7øƒIÀŽ÷ì~¿Õ ¤Р’D¬n_~UPUßlóÇHÀHÀHÀHÀHÀHÀHÀHàhJÀ PÚñ _+¾©Ä›œfÂ;ÔøŒŒŒŒŒŒŒŒê²¬€2¼ç3Me¦&F&´». Óðn$`$`$`$`$`$`$`$P&+¾Ó ÓV–ÒíÒi¼Â-{%.ÀJÌêölZ·g4~########:#+¾ó…ÿ‚ªHE¦µPkšÌ›7ÏnÜFFFFFFFFu[ñŸSõ* 4­t<àR= ôíÛ§œrŠ5q üá$Àïmüñê¾=ý¥ ~ƒ×ÏðáÝzQ¾²à”𨆻phß! ¾1«ôE/V~0 Ù½ÇcPë*:ªÒ0…——@±|)¤²†ýÃ_~ý§²eê|,·Bô]»ðÉ›KÑ}òÙ0MXKÑØGC¾ôTá¶]ÁJ8Ñ÷ÌiÑñò)ÊèŠÍiì_oHÿ:·öû—S}*(–£’Üðî,ö ';ñ´Mœ&A¦ñŠ«*γÊ‚•áçäÊ™¬ßðè5=pÛÛÖ˜3±dß{èg ;ÚîÝxúœ¶¸é7¯ü°“»ø`0o.Mìku†<¼ó.+DïÄ!x|_.Äeá‹sÎGþÂ]èÛÔIy|´ëkʯŒ\.~¡Ìüç?ÿÁm·Ý¦î½÷^Üyçe‘6û‡=¿5‰ÏþcMP7ËõÐwhÃïøOvåހĬÍ8ëÒs°ðÌ\Û„³ÖÎDãÞWãyé;输õ=ΙøžŸw%ªåë»UÉZ÷$@ùí·ßbðàÁhܸ±Ï xµmŸ)ÜÜž²~ýzµ}E'»è¢‹Ð§Oíõi—£/sÚÓ2§ÝdPÁ9ýë2é_cƒï_>™«D`¹úT‚†¯,<ð~ýõWOTjj*¦OŸîñW‡£¦x'o+V¬ÀŒ3pÍ5× W¯^ÕÁ®`xg{_ºt)äK‹j;ÕqÇùZN>ùdÇö¯ †¾N¤íçI^§ðrd+4½j)%{˜òëïÀ–•¶ÿnÜ÷u¾ßn¾=E#/k?~]“†¤°BùnlYÊ£íÊZ÷±™óÒ þs'ã/_ÿ‚ 'ô(ÏV¡ G$ô¶Ù«qm¿†È-mxt ÃòðÊ·?¢‰ªW!Â;Ë·™B\žoã–'dBꢸײ²†ýÃ_þòý§²%•ÏÇr=ôÚp”+I9¢…ÏÂ’ ’.ºƒì§….·l.ï}'ú|m9ÊHYÅûsTÙA’)ϼ ùSJ ???ÿü3Ö®]‹ÄÄD¹/Ún¼Ú¶=²Ô¿mÛ6<üðÞØÓO?£FR~O¿ðÄz;¼éWÓœYáþåÍUå}Þõ©<k·zÈ d2Ž þ¾ûîÃ-·ÜbMZ%wMð®âf®úÐîÖ­›®6;ïû÷ïÇìÙ³±lÙ2O™6lŸíÛ·c„ hÔ¨‘'ÎîDßž>H¿ë™Í¬"@ÓŠ^u¡Ö0RT~Ƥ”•¬õsqŸ¸ß{w::%@iTB#Ðé¤îò•ÌY÷þúèœÓï7\rãïø|ËGèžµN; /"‘xrîS8¯_K o=nù".úß#è&ŠÆ¼oãÜG7ž=qyqû¹Ï¡ï´nøÏù7b½ä¼î¿_ãïgwCxÖF²sîzøï£g#VÒÈB¿D¶aéomØÊVA¡áÏ`ÊC§âÛ›I§:%áªìœ_ãê)ç¸Û»ô¶Gæ>‡‹ú5eg–þû*^ÓÏs5¡žüüE$~s3ÎP‚Ñw⇮FŠìB †+OÆ]w%°gÏ49p¶nÝÍš5+W!¯¶].ÖðÝwßym6lXYpÈ£ƒ­ôÍi9{ðÁƒ7ãŠÇ?SÙ§=9·Ÿ×Ü@em»Gw’v~B¤sÛ¿4?Uµ­õ©*-æä‘GðÛo¿©•×_õü­.¸à4©é¼ñÆ«£(Y²ŒcÕBÑMä‹/¾PÀ˜>­õ9rd5–  À;Ûè’%K”örĈhÞ¼9víÚ…¯¾úJ…S£Æg8òˆ¾cFïñt¨ëÙãtG;X i'ì·Pû›áæ•_ ÷ [’o­H^îa|6ëØÒìü°v:E¥áþ6§aÅí³°iV?Zþ zé„¶cd£paÔérŒ}LJ€9÷P»áÇ{’³ØóëÓéLdï?žŒÕà`¹úm8þP:æ½&|ü[Ú¡¤/‘El“…;Úp{/Î\y9À€ÇñõÍ™vÖx¼4, t:%9J3š[ÒSŸZ…›bå̉8ãæÿaÜ× VõßçðÜ¢Ëñ©ôßÃo])§ŒQ÷ÌÂÚUÓqgÏ30ç§óp剙AñáÅ”ñÔI P›É>Ä¥DÚôÇÇÇîÕôjÛ¶ÚnÞ¼Ï>+oOà ›š#j­¸4ÈXéûŸÓ\øæÎ.¸bÝíXºéy4>´ Wõƒé ?à¡‘áxHæM÷|„´‹»cÇ×Ï`ÐgKJç³àúW >ƒ·Ö'Ø<þÒý"ó$Í«¯¾Š©S§z¶:ÐO !ã=c?BAÄU7ïºH¼.]ºàoû›j/ôW÷-:xçr9åEÅ?ü€E‹aàÀÊ¿xñbµœîü¢¯ëÀ¶c<+´Æ ㎶M+1+;ak:Æi¿²98XMA¶¨õR](’pã:°~¼ý§ŒFƒ‚lI~Þ¸áT$‰ËµùÌ@*><¯7Âó‹Ð¸ÇÜ—z>\²CF( Ki ÷ùÅî Ÿe†ˆ–Qò=%ŽBýÏÄÿá^l>pƒ“;KÀµ¸àêpLŸ6CR%¿V¼H Íïs®ÇY·´ÅüÅâÉãñËÖ#Èï± …koÂèq xà‘§âl™¸³ ‘] {ßÈ“ð@ ›¿|¸D"E’6{óx^ÒŸüùLܳ< ›äºÑ/:íG~~+$wž"¬MÁÕqÿÁ´©c‘*tl¬‘=cŽ! TdÀܲe ¨Ùä`AöÊü\j[WÏÞtxuØ,×Cß© —XúT~Y{ÎÞë܆­¼©>¹øZ¼y f^vþ2ò?èûÓéˆn¦ÊŽNl‹”#«ðÞKaëéE ¤ÿXúï[?ýëÙCÿG.èX9NLíI¾ß¾dåøë¾¨Í\·n׋ý-Z´@Ó¦¢·¯¶m §“Z¡Ž;ªåwjÖh>ýôS|óÍ7ê¹üòËÕuc*ÂᕾžÓØ—ôœæÉæÚй2ØOÿpš…ËHÞ¸7®ºódŒys þžëžÛ&ô@ˆDµ0'‹jƒóE°ýËSNÖúT‘”Ê®r¼ûúë¯1~üx|øá‡ _ÏØ£*iW7ïdcãÆJ › Æ)6je¹e£C‡•ä´|¶@¼S^”eRR’š7233•MeÃïOŽè—ç(`1žj¼gÏè^•˜ˆÕoO§ýÊŽˆˆ°¦Eë^2ÁÊ) uG.Ç"I1ûVâæ»ÞÆ'¬G„ ^ò1§Ü6("&ZüŠT¹!w† áL+qथî3Œ(bœ5_„2BÃ#—:¿¯ì‚9o=‹FõÂÕ/¿l!±e¦ðp::Þ6 ©mºâîOîF·3‡ 5ìn¡y>ºµŒ‘²ËÒBÊÊï¸)bbªEÕ)è7Dþ¹ù‹@¨H„å»9‘Õ¿³&a€l(;·5i«øNø¬ìrÞzú^Œêu3^þ~+FZA­¥Xã<6$À{2ƒ5mÚ´Qo£\ú£aÿð—ßÞ‚-'˜t,×Cß¡ g‡»®1]DqY{ö׆­eG°?‹ ‘ü£ÿ1^ŽiwíAbBUöïï^á7dã©Ù·`dóƒxtIbXViÿ)íÛ11ŠŽâ²×9p_RÌŸ?„8™rOZFF†W¡ŸáMš4ñÒjzµmàŸÝ»w{ÚÏž=ÕR$“Μ9Ó¦MCÛ¶m}ätYéë9í7ËœæÉ(í4O<1Ò~u_‹ “@A–Å.ÆXæ¨Î îù"Øþå)§Šk}ªHJe×/Ì\.:t(>þøcesÙ—€FËCyªð§ºy'+Ÿ}ö™zù×´i³N ïÔ©S¸õΪé{‡–ù¨]§ž{5 j1  üä‡ñþäˆ~YIA¹|GiÌ> Ã}¥/4}æ¶Ú Ùýå„ШÛ(\✿ÍÀ®DG9 „pNF årë„—ˆ[´î œIhD‡>¸Waæ—›ðÌ„Ž²‡QöY.ž{¼"B6H·üi»³Ñ=ñg\;ê>Y¦û;¯LTõ±ß,Ù‚n§u@Ö/Ëð¤Ð{§yy[LCVƒ®8ÿ–‡Q´t6^N;€;"ÚHl™‰oP¿\3+&?Š~}§á+þ‰s¯ú§_ˆ2ùy5) (.)ò®¯„‡Ê? 4YË0ÇñN}*°tcþò×~"x2²\’7;6¦!®ë©¸åñ–X7{Òä#¢{’õ*ÓxŽ ðRö` /uçˆ~Ûg̯fÚڭメ]™4,×3H9´áöG1LGð§Û³söîáªo—ö爮xð³ûpüèÛ¤ŸžŒèˆ|Y.Ÿ \ñÎØ+^}X&`ÑLy€¦Lº2&ˆWl7îqA.Á—aÌ_òæ£2ò1yŽ ””” 99YM¶v®¨íᄯ޹ݚFÕ—õKV¢aÿÁ?¸`æ×8÷™ hõ ÞûçL|îq$·ÊÅh™£Þ’¹íÁ±Í°ô‡ÅW_®û‹ð3GÔL»¶ÖÇA\ ¦Æ˜{4/¼ðB¼ñÆ \îܹSùï¿ÿ~œp ^¿W…ˆÛW7ï²A æUW]¥JäG7¾fÍšj;ˆwž.§Ö’«`ÔbŽ7NíÑœ?¾âñÖvoMPýÀžÇß*íxÏî÷I*Ðli%¢Ýº`»ßS@9!DtÀ½ áµC1¤Ó¿=逋‘@íEŒL(²²­&6Û÷-SúA“iîä7¼º“;Ä‹ç\ù·Î˜2äx\ƒÓq׃ã³OÝZ·FøùíËÑü‚u*ã o­Äi­b°þ­'0àÊ÷ÜÄpæÌìQîÇêtÁ ¼ðËYÛ­uiºA8}ÐAüïæ—±~âcèn½—E&`YÝózkU™$<¡ô •õ©'\—š8Sð÷5s0½ÛX4—9—fЃ ðñí°ô¾¸òî0œó þ}Rcoíii”±Ž p°ÆØ1ÛóóÍ“TÛœXu¼rÔÀ¯AΡ «þ(/ðª?zµg§6,‡ú,&‚ÑÒŸ÷»s¦¿…q‹ØOqÚÝÓqóÄsÑä¿—Ï¿¡óúÛpÝCñæyìSú%MÊ÷¢yü÷%o>,,g”Û_×®]ƒæÜ«m™‹àçÚk¯Å“OR%µ/ïñÇ÷™Û‹¾eNÑ퉲ôoÀò¯NØÇcú”8¾ttëxm²(J$åí¯NÇ€‹†à5™Û]|Ž„d•*&‚ë_e…UÍåUŸª‘R¹o½õVðš·|Pù ÒvìØ¡ü¡7ß|s5”â&QݼðÁ Ä‘z=Ð|ê©§°zõjU ãûõëç.¼ŠñNíezz:–/_®kq¼ÞˆñìN&}§|ÂíxÏî÷›]ƒF&¢›×ÍôC•‚~8³²vÚæ9kûÓVöfÌäg(LVÆ>äÊI—ˆ˜x4ˆͦ_ãBVVžº6(Ú6¯çeɵ\'äž·£“¦ãŸ¡‹+ yáqð*B–-²ä¢è¸8¿ªÜ<á1SxŒOlì¦ÏƒA ¿ÕQ‘î:I¥„·²J¹ò„_W8â¼Lͤ8:àr 'AvxJxì±ÇÔiKvr´¼GÓé”ä˜ùy@“{jøhþþûï~OVµ¶,wôèÑU$ã» W„¨jïrœŽÍÝ%}ÙeïËA«:AcÕ T¥moÚ´ O<ñ&OžìÙKm¯´}sç)™qd\/ë]ï3d¼÷=ÖN»vª½Þõsü³ß£ù÷¿ÿ½¢dü¦¯nÞ/¾øb¿å1ò•W^ ˜&˜ÁðÎCo¼ÞÈ~&Á®Ó=²ºì`èë´¾lî]>çœsþ"q›åádAC²w©ì¡Ÿ{µÍ=aú‘M÷îã+bŒ*@jký\1£Q­W.ûi@kdTrK«7€;J&ñXŸi|–!Ü’Bl’<öœÈy¥$ÔVzŒä«>ã»N¬O9~«¯PC©š%`£´¾­ß~ûí~KãoÍüÔdrÉœ`“û7µFÓgÛöK1øH ŒƒÏá+¥ï6ì+¥S˜µ½W¾¾UçÉ?^÷$P•¶Ý¹sgpéÜŸq¢ïoNslÛ2$;V;íÚ©>ŽláïcA’˜¬ºyûí·–Y] ‚á½eË–˜8q¢z*Zn0ô+@ÓªŒô‰÷l´|¦©,ÐÔÄÈ„v{ÊãzTLl|d1ÂãÔö¨ð` ýSH€ÚÊÊö­íÔ{3µMš5ÙXnMÒ¯¬LL>#ªJ ¦ÛvMÓ¯jý+š¿.×ÇðîükW³l¬øNƒNk˜Ÿ˜°¢@S  d!V·½ÐZ÷GËýjÆ        TIV|ç ÿEÜJ„n>z&m½?“6A©ÓM†s}YíÑÌÎæ½˜Æ  ø“/æ²9/tçÃ¥s^FÍkQŒ10000¨m äææZ÷hZ÷fj·Þ›©mî×äÞLîÓ¬ö=šÝRVÀðâ[f0ÆH ®K€×^ðâè””µN°˜%›ÿsrr”Ÿ×¯pm>\²æ^L¾ˆñ.™[—Í6fÌZ5bx§/¯6ÆHà&šnÛ5M¿¶º\ûÿÖÂp¯¦Þ¯ÉCªœƒhó±nßúö¾>Š"ûÿrMNH á& 7B†$QQ.¹T *¨¹ÜE`‘Õèré‘E`ùï‹AP! *º ä$s&™dþïõLMz:3ÉÌäà°ŠOÓu¾zõMõô·_],I¬à÷/R95ÏSEÛL™´áêLÂïhèÜžpmœZ¸6Mȯ’û?¦bÓ¯m/”ÅEz:Ê®EyʸB ЫC€²«¼Ãæ«D)D"`A@§ÓYõðCÌa>Or`²É$S\üÀóÜõ¢ŸÊ©×ë5ã¿l IDAT•ãÉxu"^Þ9<<ŒV¾—¿©2uʲ‰€D@"ð»B@ð<ÁñÄ]ÄÛC䱦9"šö„Ø‹í¥Y+©¬‡_¦A$1æjŠ~t¬#mK/òB"›gòê`Ê=m•3A¹.I6+‹¸,K#PxùwbùÒ-¸–•– ®"Ø7)ŸâÞ+P¿Q„4é‹°–CèTª:ðô±ÙCá–nšTN" Hn)˜ç Ž'àZe9Mš#¢©-è(¬®ÔQžJÇó !¾¾^´× I™Çæåíc^µË+ièQŸ‡Úµk+™ònúì\!›™ÇvãíзKC¥löùCظéSœG{Œ? kr½1»·þˆvýú¢aU´LþWðw<Ï’ÏÈeË%[0ÅÅC|Z†[.óß8sø_ȹN377h“W}¡ΟóÅüõ¬E—/~[î‡Ø@±ïÝȸªÇKßBŸù=šÜóNùÕÓ±eí>t~|(šÙlmkÄ¡ë‘wÏ`ôаIp(ϘqkwâñÝi÷Àòœ3²-yºRý¶ŠáÊ¡-ø*/ C{E”W‰L“H$wün™1c,X ì¿\sÄóÅ—QÉ¢iÃP-’´qÚp™ 9‚ªÈi·`ñññ¦y¥{ zzÒKœHf-:Lœ‰&/ à¹n|ËÞ½{áïï¯\ÕÃé—÷¿„)…ëpT!šXÙïI|õÜ,<@›¨S†š$š…—ñÒÌ)X×÷("k;vEîºo‘)­RÎü-ïÄ<[×LÀåLÂB=â…ntð÷óÂW©:ü±kW:¸ 5L¾­°øí"䕸ÂXè /Ÿ()¢3¢ýW ‰þWĆÐL¿‘~÷âýz`ç°‘0ìÏtšhê/ìÄè‘@\…DÓÙz¥~ýwT3#záùguÁùqfØ“$šÿ}e‰€Dà¶B€ày–ƒAá5lÀ`~Ãs)yªÔÛo¿×^{­&Ûä·s¤+DSÍ^E¥ê8®C.S/µqãFe[™DK['l“ÌÇÑYƒ®Ï§M® >Ê'Î8dÖWÖümj{"$ä7:³¶…5®\Ï=h-Î *¦¡x´Ák‰ÃéŽE±8 ¢¡ç¦ƒÞÆ 4õúgvþè»å×u+÷´Í0hK,®ˆW¶(™Xi ž?É?Ìû{ rdAÕѳPŒÜëWqåâÿà¡?/þB2»†ÿ,¼öï^>èCÿ§ëˆõ£¾Å©‹¤XoVÁ{›ûÏ£S„†O…±¾eû2] "•M0ʯE¦J$Û ™mÞ¼¹rñ©qÌ›ø]Âþçž{M›6ÅONaqW—-ãoÑ¢…²-L™ŠhÙ²%64Ï•T§óŠsa!"nOC…Þ˜´ô ^î_Ù´8ÈÛ?:ºü‚CP»^„º¨ÅŠè®u0÷ݽÊá Ëã꤭ˆî¬Î€'.%{f,ݾ3D ã›wñdRl?|6=‰™#æ#Máwžè<|.PgØ·n6$­ÂIƒ/îËåç–~ŠU~ œc%‹ñÍÛ±xåÃÆXýå><°3PëÂj#cÿVdÒW û¿yûA$é^ÂaªsÓ“1âµJ[Šò.bÃÜ—8’:ä&$¤,Àçg²áÛô|4žµO÷®B¿–î[FYé*Fà³Ï>Ã_|]»váË/¿[2ùìÙʸ¼ ô¼=™Ù]½|—޾¬_·àFú—(Ì;ßeã³ý8ŸÕÁ! ‚^χH(åì=ßíùyÎæ ̶ZyÇ·#{Î0LÙ|zÆ"yâQxŸŸ&%¢n¿)§š”YÍ‘xúœ-(ÂÎ%ccÉÖ¡'bvÏ¿šiê¹­‹ñAj,º5R¸qq×Zd(ÏômŒÔY#qþO+‘‘qó²g¡Ë”ÍÊ¼å¨ “$‰À-äx“×_ûöíSH%o‰Çû,3Ù¬S§Ž²ÃI 5„ß"ê7‰ÉA½ŽâÅx±µ˜Z˜5ÒŽG›O„ÅÝNÛ¨nݺaóæÍŠIX¤ð1ü#¯./ëxNæåÅJd¸R‚cCðé·ùøïÙBüýñp$mÊ„w-Ú§&Tø™­Z)úæ&âûìxDß‚­˜‚mpá¿¥9BCQ‡þ‡‡ÒJ^îZC‰]±iñB2í|EþSÈÑÏÂÕÊ€½›×ãbæEE­/•oB¡º¡áð%«ânÌ}‹†MëZ† ®¡~ìd$Þï…oIô°O"º!½ÍÉ…34(Þ²ÿ§+ùÑu//L…þ Y*S:›³æ K1wT7E@ â–¹Ê;Ú!¡¤M›P„‡Ë¡ó²¨VyLÿþýÁÞòžšÂúÎHL>ÝuüPeç”Ð óbø×¢g&ŸžƒäÌÎ-¦í”Œ¤ø"Ÿx{™Ùʈúa>îVgSÎFÖùýk04š‡¬#0s0ù—«¢sx§c"VìËÂ;÷ü€‘ɑػ’ƹ/°=ßž;‡Oçóö' BG³]_À¤íË%­0\Dä¼ýxuh´RÙè©“ðJ¿täÐ3UÙµ§™Œ“H$·L4[·nQ£FaÅŠèСV¯^h±'¿cØÚÉï—pöÈ£#žÇñöò—!šÎè­¤ ;#CY%‰üÑš?::Úáþå¾:ˆÌ5 ®…–õ<ÙA‡ëzº6÷ÁÜÇëâ×,#tµêaõîó<ÒVÖ…Þƒ7cõ;vãì7bØ{_ÂLñÊfUL#4ÝŒm‰ˆ}>Ò(xýžðCcïË;µÝ'aü‚Õx¨M²bž4 !ýˆöYoèÝx"‘dXû„ÞuÂ)=CQQWÁ5« Rˆ›{?éŠãƒxtr=ÅbJU¢MX¨%«–vs˜I¨t·5þ~d­÷R†ÍóòJ•SŒã§sá§óDP ›ûcÔ º«›VM*^hç üÝSÛ¿´“–ö­FxreÚ/Z˜X²ØŽ}÷ã‘wûÎX@KÛh¨œÚaÏõ~æc Õ,[w³0ÇhDÙ÷]å¹Ôù[E)akHz$‰Àí‹“HÞ“™×ª0©œ={¶bÕ?~<í—Ž_~ù¥¦§%•Z¾§ ÛÕËþ¯~iVµákÃ¥¥œô1ÑÑ-<‰ìÒjûŠœ_8is*W™+*Î+B«òé&Å&m—ÖLÍßO%Û&š<“‡Ï“’’”Ô}ûöU+Ók¸UZ¾§ —«N?ç6ãò¥o5³Hm¸ÜŠì%òF¼ð‡‡ùÎVKGŽ—öÿt†özÄO±jþç`¼uµ”¡ô”ŸŠÐƒ¬šC{øcö'9h"–ÌÚƒ,ÀÉ)# …Ó¶œ°5– ï9 «§ÍÅ“±],‘±XO‹ÚvNꉈíø!Ú LÀÀ6ÿň—6ãÀŠA4%O>‹Å±o*‹&ì'÷öódïaÃèkCå6­š?}K¿¡½4k) |Ýßæh#ë-’ù­þ¾:4nÑ -Û߇í{£^ƒ6* ¥^—Ïæ‰Ç<HŸƒ¬"o„ñ:ñJ8£ž†þ‹D;Dh¿r-‹E—íÏ¢`óˆ 6{çúôv¢ ¡‹¬,ûò*¡¥,z"àrßv±Õ-ßEu*ývnÏ®;—ïß¿W¯^µr~¿ð†îÝ»ãî»ïvØ*{Öùðáß%á<>Ï&,qñ7?YñÅ3öćÒÔ“Óºø®Uío=Å;åÔ,Wø*h/Sy$Säg€ëÐG/}R„Ú´I»/½´Éä< üMxq}>mâîI–ÑJ«$ªµÞ=}ˆ¨Yƒf§/‘=Kœ'¥«H%Ÿqí¬ó%!Îç&fïb~þ(£»³ÊÉ|`ÒÈû›ñÅd‘/&‘|Î9[ç¹Ïò‡ÒùÎý•Ë8s`ºÒÁOϦSÒ‘vê Žüð%¾ß»ß®…ðf÷â®èôlÛ!vwZPKqÓ/&œÓ”JrLEú  ±'ˆ¶4úsânÌ;ø'H&Kb’ÉÎ<%Mþ'Hn?îºë.Å’™GF(­  ÷¿«Æ<­ Âj2% “ê8­(ÎS&ÝU¢)ˆ ¹µ_[i•„Kh&CY—öÈ4;s•üâf'îuˆ`š(ñQzù‹¼æò‰@U#À’OpÈÌÌTVšófºL.…“W›³%“/ö ‹&¯JwÕÕi„È®| ÂÈq‹\-~ëç×µGrvM€¯ 6{ë7Wj(H!À'6oÞÜQrMÆ«ù Uê8§tq•h:ª@(àT¥®fâI±{×w©XïÞ½]Ê/3K$7^eéêÏÑÍÔWÖ-H~W¸Íÿ*óË®&—6 ”7wÀ? Ë5ò wŠÊ2jC€ÏœˆˆPæZòиvèœ-™<…BX5…E“‡Cxó]é$‰€D@"p # æyj5Õñ6üOIøMµ‘W§®Meä]"pÇ"ÀÄ‘ &_‚Tò A±ˆ‡Ë9WòÅùyhïå9žÈmϽÿþûö¢•:8áù矷›®Žäáý¬¬rŠTg—~‰Àmƒ@u÷íê–_Ó@ßÎ푺×Xoç=4³³³ ¦X‘ÎwvLF+ëXFFF†±Aü‹/¾ˆU«Váž{î±I—‰€D zÈËÎTöwæ#Œ]ÙA¤zµ’Ò%U‚€£—£ø2•ò~™Î:†j)¤Ó†•]}ù2ÿ3»ÅŸDcßšæØ¾¼¾ú4 çÏÇk gðâ£9xq¸/Z6õCìƒÐxáÆ¥oqéðk¶zñI'«6â×2§qhã:|}®L‚myUȘq«Öí·€‘*oWU±lKž²ŠáÊ¡-Øøõ9‰2P50¹D“÷Á<þ¼r1Ñäy˜¼ÕONã¡A8+S;M¶˜ª/–ÿí·ß±O?ý4 ½W¦^YV"p§#pâÄ e+2—ÚYœ†y;¢[Þà¨]:NÀîóyŠˆ¼SkÑqðZåT6ޏôÍBt¤ôÔl—j™%6ð¨Ø‚ e_ÍJq;W,šjö**UÇq;µájn{Åâ·®™€Ë™&ÚèÚa!^èÖI?/|•ªÃ»v¥møZÃäÛ ‹ß.B_i,ô¤“vn ¤è:<ýÛV ÿq£‡á»¡&4ÓïG¤ß½x?Ç„^Ø9l$ û3Ñ+¹íYôvbôH nD÷ ö tF¶^©_ÿÕß̈…A¸AþYÝCp~g†öÃÔ+¶-2Tixþ%?&’|öì?þ¨X¯_¿®LÞæˆwLhÕªºuë†úõë+QSwàú´§Bˆ8þbJ›íbÚ´iHHHp§ 7ÊäcmÇ®È]÷-#å€Ê"7Þrì?ÿÙ>yeüø]Ð&®Þ„ñÑmèÀállžÖ/­ûG_éi–qÊ|3¤mÉâM:-R{ô– µÉ¬¿x:OëãÑ*þ}çwßÙXÁi+W®`U£OT¡ævÚ4‘ÇáÝY¢©\©JjS Ç~.€_€Ò3Lt‚ŠòîÅÐGïü¿"×èAHŠ tZËõ«¸rñðП€ozov ;þYxihô¡ŠÓuÄúƒÇ!N»Ôñ©yÞ~æ4gþ÷6°ðÑJå;o„Çdôåcÿøl&bØñTë[ŽÔÅ R9À©üZdªëðCÏ??üðƒ2ç— g:u”Uè¼8ˆ-›/^Äž={”Uæ<ð:tè`µ‚º^£yøÝÑd‚) ñ. ¼¾æœ?únùÅuÅé5W³¬I"PYøƒqÁ‚w1qq¸&Î3ÑÑâ$¼`DE“ñbGºÙŠÉ¯‘6thÜ1¼4è$¼÷%âåÀ®áû;ÍÍï6NÔ«WÏ:Æ¿û<2öꫯ¢aÆèß¿u¢£åxj¨NsJíйZ˜Z€V°:§‰°¸«ËÞt?ïë^d4ÁHgAçd_CfN®¤ŸDfúøíäJÌ{s þ±t æ,Þ‡±od"ãj!Ξ/ BPŽêú Xýò2\°pR>‡ùú/[19ʼ0$~ÆF\¡´‹â¿è€UPΡeˆŠ_†,kŒñ–‹R¾`¢bÇèÝ|þ p…ÎX÷ˆ}ç¦ÓTÆEÅÓ`Yzì[6)ÌÃø ?5œÀªÉfyñoà+&]¥à¯L²>tèbIlÞ¼9š6mŠPš§ÅÇ„1©0`zöì©ÎíÛ·ƒ‡ç˜ºëÔ«Øù‡G\\ïC=¤\i(¼9í 4ü7fv³c¨lÇŽƒ±95 »—Ž!?…'¬ÀyEe¬˜fŽ£ø1¯¯G†’ßl¨Ø»w/vî܉§žzJyÄÄÄ(Ö÷B…9_Â9bFŽâ•3ÍEa¾«…©ãµ~m>wmþ›Î+0¡@o^ŒÁJ\½|—޾¬_·àFú—(Ì;ßeã³ý8ŸÕÁ! ‚^Ï®.Oí||·çG:ßܜǗ†Cæ [‹?­<‹ŒãÛ‘=g¦l>ƒ=c‘MJDÝ~=RŽè”YÍ‘xúœ-(ÂÎ%ccÉÖ¡'bvÏ¿šiê¹­‹ñAj,º5R¦éìë]k‘A_>ŠómŒÔY#qþO+iX÷8æeÏB—)›•ƒJËQA&9‰À™3g”áŒði<\Îw???k¸+MÑà‹·=âÝØÒé®Ãä‚`òW±)_¹ü¥ËD×%g,ÀÅÿ®ÁK‰'1)e/–ޝƒ™#á“ÀqØ›²SàË“fC:@ÊÁ£8ºo°! _œaYŒŒý[‘iésEy±aîKH I?›@å??S¶Íß¼‹¯,Æ›ë¾ÄÁƒ2½wÓH\j•Ì,°A€?ÒxØQí’““ÁS]Ø=òÈ#.+då¥}Ž±Ï jÞ&Lì),œæT2ržúñ2Efy—T€÷U~—¼þúëØ·oŸ2‹÷^>uê”B6ƒƒƒéøëA²G1#GñeˆfÍW’µkÃÎȨ±<Üòìœ\¸DûÞ(F~^¾B$sr‰]6àÄé<ú×Rþh:ßZˆlUŒúa>4³ü½µ £’ö¯ÁÐ脵{3'©¿\EPôPLG2Vì#r˜³#“#ñúpçväÎáÓ9À¼9 ˆÐy‘¬¾xŒ†åž™ÓWæì¢ÂYX=ìLÚ>´\Ò ÃEDÎÛW‡F“•­FO%ÅÖ¦#ÇQõ2Þixxš-‡¼w&?ôL0ùâasþ‘`È~&lÕdk ¥óå®c¢)}ôY>º<¶Õz‰xÎã’£ï”\´ÁGû^Adx(þл'Ÿ†9£º!4¼-hú-NÎm¢šãò¾mX»å4IƒœQ1i²¯Ôæ K1—ˇ҆öTÞGý-¤ä4à§]k€a 0(²!aEç÷6 …kO]i•Ò'¨-[¶`Íú·ìÚÀ£ ‡§*Å^zi¼Û‹õòhþe·AShþå>üm?,‘…¿Í#xõÃO1,% ½§m¦YœÒI*F€‰fëÖ­1jÔ(ðÇ4V¯^ ž~ÅCæüža#C 8íËDË÷´a»*U¤©Zˆð‹Šµa»ÜìH?:{ÚßK6ÏË+AVN1ŽŸÎ…ŸÎA^oîQƒê"¬n>Z5±óÒt²<²XÛ¿t"eé ¹FxreÚ/Z˜Øí ±yÜKæLy·ïȺ”O)¬³=×û™VK°lÝqÌÂX e£»§Ø5uþÖT‹Ó–÷`’És4y ¯d²ÉÃâ¼â\X™p²Ÿ gçαyófålt.ãŽCç\vÉ?S0rÈ}˜žP—È\"~w8뮬ßV<äguFXû2Í5›FÀùãçaü€î¸6¥iÖü¼O½_ÃB-1ªòª<ì5÷E:^/ƒê@€_ÜL,?üp9† ¬,þázz÷î¶¹åŠÏc1Í¿Äsï!6ÂSy¶á€Ð`Ë&G§è·Ù³þ¶w5Îõ~=Büqð•¾r $·ÀþýâwR |Úèq†Ë9ÿˆPæbûb=ÖqŒ|¾è| ¿¿‡/NK¦˜ÌŒLú_:‰@õ Às¦yU9;^aÎŽïõéÓGñ»õŸ>ÊøÄ‡/¡G—nÊG½'%—Î5ÎÐhücû{h³f ž_qÈ­ªd¡ßüá÷I“&M””„çž{K—.UÖðü~¿ÔsD(µ|°\u*"šå¦D¡DEùnZzž± …¥jñ ¹,FÅ´PèÜE=ö¸/¾-Ä¥ü{Ьë‚2z«bÔ~޾vpBiØÒ#8§§'#éa¶6’ ëÆÒ=f!´³¬ç~"FЗñÑó“ðþ×—)2q 7 惑§ÎÔêÍï­s4)‘\ÏL¢{$¦Tbø?&ºÂ©ý渃xŒHµ‡G(F¦&áøœ‡EVy¯¼ˆ-•bÛ"qúa³Ÿ/NÃçuJ ÛDUåyÈÑ%!é_G•© á='á£)m0epoZEC‹;ÍSDJEIŸD Êàí¿ÇÙÈ7n¬Ûó2A°ˆmð ëµb¸²( Í(Ý4ʼ0ˆ2û6Á&Ê·bL´2 Ð"À¿ãbÞ=o7aÂeÔŒ‰',¹û;¯­Ç‰°š,•)ÇíæQ a?_L>ÅÅ£ZâbÛÓ#¾óÅcüâ8á¿+%%e9¯ˆºUܦU3p⧯qé×#´—&ï{ º¿!róŠiÎ&ÍÓü­y·è†–íïC‹ö½Q¯ê-ëlCÈú¨Œ]ÒnV‘7B‚„ ÒYš|F= ó!($ÈlU%Z‹.ÛŸEÁæVK§*Yã5’щV'Ó+<+˾ëj:M±,Rsº”Ì(¸õ¨î¾]ÝòkáÛ¹=R÷ò{Ë¥sÇÊÏà|ªày‚㉻ˆ·'I䱦9"šö„Ø‹í¥Y+‘‰ÀŒGŽãas­e³"Ri—ÐÀê{œôÙ¨NùöÚ#ã$5@u÷íê–_©ë¸Û#uWÿ%Ëú/•ªL ó<ñRw–'øŸV6ç±IsD4µ…Õ•:ÊsÓãüW.|f£GX“þˆêò Mœ HÜA@M.ÅMwäÈ2‰€D@" ¸ÅpÄóÅ—QߢiÃP-’´qÚp™ oF“ÌŽmÃÍU›hå½G-=IÄSÍ›ñç¸#ëT/âºcÉt Ùƒ"çF.u]ó³M]¸\ÇÃø|4f—.]¬ ”Ê- %‰€D@"`Jq;Wˆ¦š½ŠJÕq¬ž6l_å*ˆå©3/ó¯vÌE~n&2¯óY8âíLgžç\Ç–µ£™s*ÎdÒ¼ÀI~pHÜ×׸œ+WhWJZ”CûYÑqäÒIlú¢3ýÒÈøHËE‹«ž %Fê÷´£!£%Eâ1,+‰//Hâ}7Ý=^/ãÐìÍ댡½š)dù~´–NŠÆŒ¤qˆ¨É¾Ï§g­Ý‡ÎE3¹áBÙ?¸Œ‘H$U‡€ö墿vÚ´ kuöU¡\©J+Ôª‚ |¾ô[o½…G}m¸{=3 qCž´N0<è ´ëÜF}!L%¼ M!J hÃlOz‘ó¾jµJ  (Á–ä¯m5ÑŸÁüÇ[á•dƒƒÙ)ˆ¶ö#båý÷‡€úÃG, ª*ÂÉÍ€?˜‚ t¶z‰™h^-¦¾K¥êIäúÄÅD“·È¨ÌPþ…q¦ÿ&…h¦ã­V½±múR¼Ò&¼M¯³¿UÑô¿"nô0|7Ô„fÈÅB Üø.³ºËÃT«^)C" ¨P½Yú¤æ€ê4UÇ^í«B-L]J+XÓDXÜÕe«ÅíÚ5,_¾:uB\\œrf­£Šr®_C‘åLæb#M/)L;áë‹`¢¡HO/#Lt:‹ÉƒâMä/)F!íy_‹Âj—¾ï#"™“ðsÁ;h镃©gQßOCú¨ ¥˜¯ÉdSÎÊbÂòõùEÈ:˜M‹ŽŒ´àˆúe-sßuøÎäRœ!âÝÒÁ·’j9€Ò˜ctì鳯¡›;Eã Ä{·G¿ÔŒëä†:ײý3»@ ;ž c}÷¿ðN¬ŠGûÕñ(HyÚɃÜBP’H$·;ÌñÔЖ•¶ÎQ¼u,YdU qöîÚ|",îöÊTKÜ‘#G0þ|ìÙ³Çî¼%d±„G&J 7P\”C%ÑËÚ}6 ›çÂÓã:Š rˆ\Àd¤]øKhODb™È'¢ †Úͪd^#ÏU\Íäã&ƒÐ.ºBª®Ç:ê’_ê|ÅN^…szs™«Æ!aÙKÛs°.!ËŽäN¬›Œq‹6bÙ8*µY—~`â-r<<pˆ³ÏQž(³ü¨É8pÅšYˆt7&{‚Ði-ˆ‚VFIѯ<½kÁÛ×¾~>àcÅøÇ\Š0Ÿ«Î$S8¡——½_Á¢ø(,:pÅšthYõÙCÖ0ƒU£é ¤¢»Ÿ‡¥?ëñõ²q–>…U¢<õÕù –¾Jýxܲ¯éŒ2=6¾ÈåéœôH?D[GËq4L¾nF¼E¶âmtárzì[6),™ƒçÃü|mÁÆ7,²âçãU¬?³íG“6»GÃσt·<åh$“$‰Àï{äÑÏs_†h:¤¶bmØUš‡ÏŠÞºu+Þy礥¥ÙÈö`«¤¡%LÎÈLIÃäžtd§ùMOɵȚ©ÛIqt¯åID³„óÛ6­åÀ©HŠY‹î½‰ nAº…ï¥ï˜Žî£÷c×ÙlœEüáÑh>q‹rh~öi¤Þ`¹fw5u7nXÌ«E9iø`â0œ{p?2öŒFHú4î>õWîG&=•qqZû±ã/Í‘èÿŠˆÐ¤NNC÷çÖÓ«Vº[A檂T:jƒó™éÎ^Êй#y¥ñaè[§o3÷)²<¾“¸={´.Í‚ ys;Ù3#±ýç ,ÑÜç{'ÖÅÏ4O4;u2FwŸ‚Êóà{Ç®E6õÕÌý ñAâÿ!U¯ÃÀ\˜¾ý8ö¼=˜$:rÜßcäœØ{6ÙX2X­ —3â⮵ȠsÛÙïèù0?_qH®=©˜”ü 6Ë‚®å`ìJbm’p6Eð®Û˜Ò/*ýÝß25ÔZÀ¡Çñó¡<_ Ã-%‹`PË`*D@" ”‡€#Bi9”SÑtXÐ’ ”¨(_µ¦ó¼´¾}û¢W¯^Ê–.êÊÈÖ=͹,.bºÆ$S¨LKö{ÅÓÅÖO1/“_x*Ãí¥Ò®œ8„kÁ­ÑN1±0•ÚÐGŠ‹ÔaËpdô2t ÊÁÖʼnÀ¨ hO/dæ•©)©Èz¡5Ž.IÀD /,iãkÙc…ã°lã$ í„‚+é@H+<: è—rK^xíè/–“Uî 7™2P30ÁdB(ˆ 3–DW4c‹&Z5©-¯<ëÃeœÓC‡/ÏÃèÞ4ÌŒQHýWDy¢)M‡J§Ü޼%O¡W;"Á9YÊT‘Ó·Sút<3´¼,Sú¿"̯6xüF÷]2Q’å³S4YìË8KuÆôšEÏSÒiò²å‘+“^î=þH›ÔÊ3,ÎËÂ*c$‰! &”‚<•ŒÝ<¶«]Ê+n›&„±Âo›£†B¼ê|êÔ©èÓ§O’É*”iþ¥üð cÍ\zYÓEwòÈŸO‹h1Ÿ†?õŸc- *. 8ÅncmÉ寒оq°y‘Y3³§oÀønaˆ:ÉÓO#2˜cØééH]4T±Lvð"“G#Ô;»‹I<5Ìâ¼Ùð©vÁÙ] 1gX$¼‰´‡¿€c^xxÎY, JDcoób£à!딡suQ鿹¨ Ú_Z1iôööVvV¨]»6œ¹ê¥œËð¾3.ìÞG@ß3ˆ™7bQx™þ©Ôèá9Ø»°>z76“YïàÑÔWö1‰4 >©ÿ>°øFEîF÷¸UÈñŠÀ¨yq˜Õ»1<â)¬’eëåþþ3¶˜ƒÈP’MÏͨÿwZɬÊè[W?ZýÕ[DÇè“îEO±8OH”w‰€D@" PPó;A:ÕqZ˜D›xW-š¢µ0µßFxuêÖ­ëÔ>š¼ÈÓ—Èc¶‘ˆ(Y/‰^*{gúðœLRÆ×¸Q¦Z4?ÓìãñOÚòÈ`ÝÌ]´£Ó¸Í(z*994aL¤Ì53§…à‘Ù)(š•ƒ‚"oÑ4át-‡â0×z +ñ³'ˆ$t—"­q±hÒXÊ_¿  Ë0zÆ­1á©%<o+ßZPzn*æ©æG¡ª­šlżûî»Á[z¹âøqÚyµÃ;´€Gí:%î.µHꢑbRMÚ$«f¯ ËP4ömêó(í«A#EÝßIXbô#¦zMÝŒ‚ ôìxéÊŸIs¡'l6alõwo*k9!Ù´Û¢^ w«tÕÙ>lŸ¯ Œ;\ZÆ«Q,6›è¹$u‚œb Gú%‰À€šß‰PuœS¸J4U pªÒÊfâí[¦M›æÔ°` mQ”›Sˆ<ƒ7-²M¢”t mJÃÓ4Íä“,0fÇM!rJÄ“ËjLºì9NSqÌÒ,ôb%Îè¼Sò—’UQPGBÊÆŠTy¿Y¨-˜bh›É¦ œ•Õ‹W8°²bª¥¼Ý>¯îï´ XêWÆéy£¤­«ýÝÕü<ÀîóZ-HI¡‰€Dà¶F@$m#*äªW€¶l…aµpG T(ÄÝ ê—{y2JL^Ø»ÿe!“¢‹ÎGç‚EÈEÙ2ûƒ€Úš©] TUdóÎAK¶D" HnÔÃéîÊsTîÕ±IâúØšÊS=6lüñCGڤˀD@" H*‰@¥¸+DSÍ^E¥ê8n‡6\ɶUMq&™ÛZN¡MÙyߢ£'‰xJ¢Y5K)6; TÉd˜YvFF† â|bO9æéQø×úÿ oÿÁ6é2 H$OQs;mšÈãðî,ÑÔ ®T¥µq!-9μпÚ1ù¹™È¼Îç&‹íŠŠ‘Ÿs[ÖŽ¶î•©ì©I9ˆƒšÉiƒûúM·DÈ›DÀ1êþXVMîól½T;5ù||ø$úzÅôSgqËõÇ-Ø—ßôh¦”¿þË7X³z-ÒðL™9Mœýõp«vM!c:vük:Š&5¹Ç—QOǬӾŸ5ÙVMÓeP" xë×f`É{ q61®§åxj¨NsªvíϧZ˜Z€V°:§‰°¸«ËV¹Ÿ-8o½õ–S¶_ÏLCÜ'­  ü¢ÚuN ¢óÌ=< QR`€É“V¡ÓµJ  (Á–ä¯mu×B‚_¬UÅÆŒJÂÌ×&!¶¥+eªÜfÞÜCóÔÈ4MUÎþÍÔ¯uÕ/AäbYP0rR®áÏ÷ðdÕ;ã¥üíÙ)Xº7¯Q=/US=U¯¹”(Üîürægœ:ñ …tpŒeJ–r§]rΞMÃâ…o㕯ÕT3™ã©9 #žç(¾Ì«B-¬¼Fhó‰°¸—W¶JÒø””åË—ƒ Œ‹‹SŽçs$8çú5ñ‹‘\±‘ˆ¦oÖ^‚b}Äa#L…D:é!“‰ü%Å ãÑiƒ÷²¸åŒ¤í?ã/ Åo§ðï—»ãþV±ëâAÄ6ªÉ7¯Ò·ÿ;±*íWÇ£ åér77žXïö›‘Z°Y9š0° …jäÓª¥³ ÀDOM±0G€SÕdÓÑd‚ÉäsñâÅŠíÛ·G!õçJ;ß>è³c6N"ïL‡.îX'Ò÷ïÏÇÓw»!ÀËBK“wð0Œáî÷ÂÓkE÷ÿ‡‹Ûì÷£1½&Ïö’eØ»ÒHJ‰€DÀi¾ûö+thÛõêµP¦E±ƒãyŠÔÄñcѤIS ö„Óò*‘±, ²%jÑÌÿìå·Ž%«3Wä× Ò†+*_¥éGŽÁüùó±gÏeQ„Vx Y,ᑉà M,¦sÍùÜs}6 “çÂÓƒÎA/È!rIç›iS÷}^Dô=ŸH§G/•šMÞÚáátjI"ZvÃÔÍ?ÓÑ©xscª’)ýÀ*ÄÒØÉø:θSœÖ½aŽç4ËyÏ'VC²#–<9X— óÙËäE[¶`F¬YÞäupd‹g˜ö’3žÃ²qQfÙQ“qàŠ™UëO¬C|Â2¤l,-³…ÊèϬCûÑÉÀîÑðóˆÂª#9$b¢,z{_§“Üx±ýhª ‘~·êô—÷`æâoh8Ñìµ×QÝ–bwÔM̪&•ö@b"Ë?8êËÇÇM›6ÅC=„|;vth^ÁOtÆß_±VwxEW²†A'“¯Kì€Ï¨Ÿ÷ «EiÜ_õØ¿"uƒjÑÕëDyê‹ï=ÛÙ_ SV|#åÝò2—^îîÞבM²GÃä_{Ô*#ÁF.§ÇWÌÇ×-½ê\5ÑRç½Spðª¹ÿŸ^?Sþñ)¶ÌµÈzâ-œ¦Šõ¿¬C÷ç©ÿïƒÆ¬ûO–çH¥’®i7<üÀ}hÝQ)½‰€D H¿xGÅöíÛn³wï^ìܹO=õ |¨BCëÖ€&6–L®OË÷´a»:•eR¶ÙÔB„_X-µaÛ’5bëÍÖ­[ñÎ;ï --ͦf>ë†"”xðˇ̔4LîáIÖò›(ž’=j‘5“Ó,W-O"š%œ_4ÑF$Ì/2slK$,ŒÁî¾AVú4î>ïúE¦lìOCïÆÓqŽ2¦ï˜Žî#gaåþ³((ÈÆÅ…àGñùÙ§‘zƒë6»«©»qÃb~Íù-ã^E›·/âçíIxwdwD®¨Ÿ3Îbå¨d¼òŸcTȈiŽDÿ7¨NR'§¡ûsë"XDÄ:ym"î_Ëe.bÃØdÄ­;]ËÁØ•Ie“p®÷õ×_Ǿ}ûP·n]œ'шنY3ö£àYj’{(nzÁ@ Óqqóð¶õùwÇ ’ËÐ`yXx âáhb:oÔ  `ݲ8Cõ‚>–˜7Ô WMš‡)çBçrq‹;ç°½s0ÈaÝ¢ôsW“KíÐyU·’‰¦v1¶ŽŠÒµù£†M¦ö÷ןF—Ãk°úðÜ»ƒðëÞÒœaa4'·.ê4 C;>U:>~ó¯@Ö6ʘŠlý °þØ¡;×.ïWÏ*hJ5tT>‚Báõ£N Ž¬ŠŸbÆ_×SD€’y¿¡áÀ9øË@o¤¼<µf"º7 QÒ0+µ>æìÖÿ©ÿs~ôÞ†¹¯Qÿ?Iýksv¹À‹Û±ôùXE['s”þ«C=îÿÃѰž¥ÿ[JD@" ¸¹ð{¤uëÖ5jV¬X:`õêÕxàпüáˆbp¨-‰)Ξ¬5jÃÖ{žŠˆ¦½2ê8¡„:î¦ù4h€!C† E z‰XH®iô‡±Ø„Z´ˆ¦`k¨ÑN4 IDATfÕÍÇQz5ϳ£= -ÆEÏZó°»]§††ù&îFÌÒ…ðÍÝE¹ue&¾ò|O³eħLš"^5eÍ`W¢™&Ö °ÔEV+ÅPÎúQ~‹š(¢A~ .þQ<Žü¢¡3·2‡R9Ý=Òì§,ª2à—°ÊY•€ÈÑ9øxïÐð2f¥]‹ÂH-õªŠÀ˜Ë5Ûo¯’ÏQÝj!wˆŸ˜Šáóª¶d ˜¸¶b–ç\&»õîÃ{U›>Å™/çà©§¡Uð«½J,Æ|¥?ŽA#zÐÌ ëfÔ/sZ†ˆîÏcÚš½ˆïX¬˜‡ÍR¨œºÇé»àÙWš«æ?Á;´1彨|$ùY¦†ÚSÁ6®HÉßà£x¬wõÿ!ùzÅbÊ]öîô‘¦8uRÓÿ-™ÊÜX ~¥“H$5…ÿÆ‘ÅrðàÁÊúìÙ³«æøñãNS÷üýÏÔ”*jä ß³›§–›Ú a¬„ð»)ªòÅxŽÚÀ1yòd’É’ù¼r=1½â¢|Ö,€±îÅù4Ô™GþòóEó1)­ÄÈw½réó iþ¦å­ªR1˜ü7®gÂHÛžd]9‚e 1qx{D'Dü)ŽR'âÓ#YJ‰[—‘ rº·ªƒN>xð°³WÒ¯(CΘš’Š,c¾^”@¥ÉÑÎ9¯V`ÑÉ)çÜ>ÑÑÑh^ßb-å7­Š¸ªú7jMi7hö»ì{g-0)#zµGÑ¥cJ,·ÞÏ¿ý ×É"¬8–iqŽÛkaÂêå碌šXªýUÝF–ÍËò.×ë§¡í—æá³‰q˜¾u$ž¨@mº¢N·u ‚Z#ªs4ÚDÔW>L~ýa•Ž„øž)ºŠŸ„$]m´$ÿ|scËg‡ÎÐánqE£uCê·ÔŸ¼,}ã»NfLz.._µ”²ÔwKþÏöžEPÛhE—fN,òkHýÿh¶u®(oå´ì£-¸l}äÉCÏ8j}>²YÔµK¿D@" ¨r˜hòpy“&M””„çž{K—.Uæâ‡ÑèO—ª!§æw‚tªã´jˆ<6ñ®MQZ˜Úo#¼&¼ê|êÔ©èÓ§Ý!Å#Í¿4Ђ^D/­’â\"œtÑÝ„<òñ,¤BD2‹‹õ é4Ñ " ÅTVë˜Âͺ¿9ý¡ý‰íõ–âxæfDó;2b(ŽoHÂÈÈPźÕ~ØilH]„vd€jôð욉a4\íááðQ›KL‡/ 2y4B½ƒñ·Ë±˜ÄSÇ,ÎW1aŠù.º—¸ó3Ï9‹¥A‰hìm^ÌX—ŠûýÏYH'³.åµ·¼ºÍ¥ï¬ÿ…%“[%ü®>ç0a‹ey—sRlsÕë:‰Õóñè@ß ìh¡·C×àÙØ6¿>´ñWíÔo8'‰¶¹/=éÓënZ$4xÙI ë¸}[…\¯ #sj‚ºOPØ¡d/ÜÿÚiÌi>½š’ìÚ·á´’›Ÿ=á|C…ó§áÿžÇÝ!¼0©"F®S†Î½yŠÊ©›Ó´Ûpô§þÏz®¢Å@?ÂŒI!Ã2DŸûÓGTw}L? ³ÎA£qØ’¦)½‰€D Êð´X4yÞ}«V­0aÂDEE)ijvíÚ´SNù£ZU¨šßÙãNU¥Â~¾˜|Š‹š!.nÓ qçßmqq<ÿ¬ß•’’²<&&†¼Õç\ÙGsÓÊèÓÓƒ¬>DDi¾&ÑKeïLž“I͵XèLµ¼,ÃéO/òà ö|W‚!£×¹Þ²„äÁLßÚî`Ôç  È›Ìâ–·9KWòÃ6ÎõZ¡ÏÉ¡æhd—+‡ô¤—gM:f§èFƒî¬š‘dý‚¬Uë)£%hÛc)è°½Júú߯qîÜ9 >\ùúdbÉ‹‚ÒÓÓ•ažÌíçç§Lê$$$(Ûqñ×*Oñ`RÊ‹Ùx%!ûy²÷ýý†Šì6÷y³_üٯÛÄ9 ¼2ãov÷Y˺šŽzs9žû »uª¾Ný9—úU ÍÅd‹d®Ñ–ÏõzJðrnt}.õA¯Ò²)§ä§þ¯Ô[Qf%Ý¢§¥ÿ;UDfºe¨ê¾­mhuË×ÖWÝáÛ¹=wºîÇÅÁï÷#3“¦ýÑ{/~¿ðU·nºÜÓíÚßí°‹\:wL±z²åÓ××W™nÅ#¿l)å‹GÄØX!Œ!¼Î€ß]|mÛ¶ßiÏ’ð_èbk›öbÖÄC<âÎ~^ÐÂ+bù..&¦ 9µË(Ñ'Ø-çe‚ZcŽš6mš¤ò*.¡-Šrs ‘gð¦Å@¢IêzéÇj[ækšèhvflNaqW—­¿úÅ^^_혋üÜLd^çs“y{PvÅÈϹŽ-kG3çTœ²§&ùD˜Æ@Ò÷õ›nÎP]ÿÓI}ˆz|("äV+Õ…rµÊ“+ó5¹ ÂY­•KቀD@" ¨>˜ã©9 #žç(¾ÌþÛjaå©­Í'Ââ^^ÙJ§¹²aûõÌ4Ä yÒÊ„>Âh×¹;mPN§Ñyæ…()  ³=i:­F­èJ°%ùk[]õ‡à×kElä(lX¹C£ÅyÊ"Á…{ÁyĆýCL’hºÛ­”UýÑ£] $Éæ­ô—’ºH$‰€ Ø#ŽxÇÛË_†h:S¿V6쌌Jç¹ví–/_>‚2..uêÔq(3çú5ñÞõäŠD4½x³vÚ __D§qØÎbò`+ùKŠAÇ£Óïe›–C2’výŒIŠðŸ™í1¬K'd˜¦Âmªéçúç®;±*íWÇ£ åi7kw·FYN‹€°hJR©EF†%‰€Dà6F@K*µ¤H¶ÛT1–l7‘"ÕB„_T¬ ;’Q­ñGŽÁüùó±gÏe/Cme%d±„G&J 7P\D4±˜Î5çsÏõÙ4Lž O:½ ‡È%on¤MÝK töyÙ‰ó‰t–…'›*¨M»ò…µÃ€G'Qè ®]?ɱã°qã"ežÞüCYt@S:Ö͈WÂLD&¯úZ9™õÓ§qQæ½;c‡ŽÂn+g{9X—Kg3åŒG(ß8²Ó¬C<Éby øîð:´ ì ?(¬âr9'0?!ÊšG”5 ”ÿWü÷à}4Ù‰¡sQ ¡",D@" ¸ÍÐò=m¸Üæ”eR¶Ù©äXµß^ضd †ø¬è­[·âwÞAZZšMÍl•4¡ÄÃr4' “{xÒÑd²4Q<%{Ô"k¦rl'ÝY„ZžD4K8¿À²Td0yo\ÏDι¯1»ß»ÀØhå™´Ý`Ø—qðìE<ß!;þÒ#÷÷ÀÏÙEÈ>» i£{câ–sT:I{ãô3{éÌó,ÃçZg+µs-WSwã†0¿RìéÔÓæ´ô-hÜ}$ꯤóO qq:Þ=»’"©TŽgìÁãíƒþí2¼²vΙP¹­ýXªtÕ‰€š\j‡Î«³^)[" H$Õˆ€ A•âÍŠôJT”¯FÒ/_¾Œ%K–àøñãÖúL´ÊÜÇ¥Q¯X,MÅz”Á+).@q!ù ¹ä§9šÆBV§p1ÍÕ,á¹›<„n{Ê åÓ—gõnŽà潑?o.¾ÿ¼¼™*»vÎFtD#yÃ'ÄAçÍy-ƒ¼‹Y cðÁŠo‘›þ?ÌA$æŒî Ý®¼Sçgöm£ÆbêÓÝBçE‡5âzèÞˆ Gã°’„6¿‡òÍÁ#£ßÀž ¤¯v¹¥JWõˆ}4…diÉHÈ»D@" ܦ¨ ¦3|ÏnwiˆÆJÿMDZAƒ2dZ´ òeq&6Y®iô‡±ØDÖJÞ¤QNÚZ›r˜£ô yšæ&^7ô¬e@1»kbÏÛŸ‰©Ýx»Å)ó?c`]5^Dï€Î»^â¢ä QPK÷ºð6G(±ÚÿtÖ©³E¸f“èoM±FÓ4µÓµ‚‹ð¯æ£ÐéÉg1û‘ué¯ÔÄRí¯†ª¤H‰€D@" Ôj~'‘:N«ƒ]NèªEST *äJÔ~m¥5öññÁÀ1yòd’iV®zšsY\”Oóç `,¤{q>Í©Ë#¿Ù²Éaž£Ybä;Y>éÒçÒüMË "U+˜ÖéÊ!‰JV¯V6 ˜øÎ§ Ùš4oòVLÜQÃ{!¬1-^¢Y™Ë6ј…”%¯ªæh*¥‘’z–Vğâǻ#Õ2³e”ø.–m¤r,òJ:rÈãߨ5zƒfwš]Ö¹ø-¨ž~u –ÆÛN\¶¤È[u" ^$ü’pV'âR¶D@" T3j~gÿ9U½«DS]©º¡€:®Fü¼ê|êÔ©èÓ§m[DæJã!q“üð c‘L*/ááò\²i摟ˆg!-"’YÌÃêD:4´nâ¡u*«u´ÍS*Búª&”‚lj¹C67lØP ZJ‘‰€D@" p ;„G)¯Ž¯ÿ9"šj!B+mœZ¸6M”©–»——¦M›f}¹—WI mQ”›Sˆ<ƒ7í‹i!šD)=ŒD4yÔß2_ÓDA³ã¦9%âÉe+ëtD‰þ•uº ZÔS6šc¼(Mmç´ÉE €‚˜œÚ8ŠSGÙÍcS@ªA2Ý!•Z5š7o®’ᛌ€öï*þÞ¬–6í&«êtõŽÚ ŽwZØ-±¨¨.\ÀÑ£Gm:vìˆ&MšÐ¨QEóœnå¥ [51b-×ñö4y¬iŽˆ¦=!öâ„@{iÖJªÃãìb‰É {÷ß hœÙE磫ëb ™ý÷ˆ÷EÞG“­™bè\ààl?ùå]"P8"ÈŽâkB§ÊÔÁÛÚ8pðóóÃùóçÁ &›·£Sÿnhÿ&ê´Û±mRçÛæy‚ã‰;7Bð?mƒ8Mš#¢©-è(¬®ÔQž›ßgÐl²:x*D€É_Løâ˜ïüàòÅD/žëÉч›ª»¬üö@@M.µCç®¶@lüîj9™ß9ªâ%­þ{;W«m®ªÐÁV¢ >¾hÕª¥B4ùc€)æÃ<¤“H*@¥¸+DSÍ^E¥ê8n‰6\éÖiN‚6d/¤¡#mÐÎ?’Þ´y¹Oóæðmß¾mÚh‹È°D ÚP¿lÕþj¯XVà·ÂßæVÐA Ú­¦Z7gý¼‡² ÌtrZ-Âd’y'´ÍY d>÷ýÆ½ÒæR•ígU¡Ceô·SVp<‘¤ævÚ4‘ÇáÝY¢©\©JjSNBqVòöîEî×_Óžb˜hh[ Sh>NáÙ³JZ`¯^èÝž!ª ÕË‘+“$UÿPˆñ£!®Èÿõ×_•9f®”©ê¼W®\Qž-ÖŸ‡òE{”é$–8aÁµ—.ôá4u>±ý˜6¾ªå‡†† äýw†@½'¤sñœ«s‹g^ýÜjŸO«۴ϳö9¯nùBg­žZ½´éB/m>­þ·«|ñwâö©ÛÎaÑF{mã}Èi9žšªÓŒåÞµDS-L]P+XÓDXÜÕe+íg’y#9ùÿûŸb½ô£…¾mÛ»iSEvMÃÉ“( ‡Ù_~ Î'Éf¥‘—œA@ý£+æïñƒ-ngd¨óðáwªã¹t]ºt©¶æU·üjS\ –ÜØúË¿Y¾¾¾æu ô!©vœÆ¿c¼ª_ÇÛç9éªû9TËç‹*6,©å;Ùd—²ÝÊò·nݪm w uÇpÄóÅ—9ÑP-L[™:¬Í'Ââ®Îk×ÏWý‚¶›É™³s'ò÷f mÌn¢NŸÿý÷(´ì7ÈÃæº»ï†OË–Èݽ¹ûöÁ# u† +O¬L“T ê¾,¬ìB°»dS”¿÷êœ×Æ/¬ê–30“uJn7ø9­ µ[‰¦®=ÖÐô³ ¯ìï×|2¦žÝƒ?ÑÙ‘F:…§ºIæ‰Uñh¿:)Oר‘]@ed•#À¨˜ç£%9œæª+çëÒUQnåç6R)ˆ!«ýöÒʼnrÕ-ß~—.]R†ìE¿Dóòòp•>JùÞ¬Y3¡vÝsñ¾_²¿JÇô®Uÿërýè'xðž0oOtüû>|?åÝõødjF¼Wý÷?aÊ€»J#ªÈ·ŸFœ „mÛ¶AMªH¼SbŽ.ƒ{^ö]Y?š‹äþ°c¶÷ÄúÎ[㜪L•)7í Œ<<ä¨ü*ÁåxsùÏPý+Q§ø­âß.ÞØž-™üÑÅÏ)Çñ>¤ì8ž8¿x†ÕªiãDØÞs®.WžŸ‰ioZkÁNÈùEØž|¶ÀþôÓO YæüþþþhÞ¼¹B–¹=¢¬ÅwmœÛ“/ÒÎ;¾þ?{W_Uq½¿H" `  ÈÒDY H‚‚ü• ¢Å"TqK´ÊÒ[¨…*ˆ­,UjÀV,H©UA ±V¨‚*F e‘E$@Ìÿ|÷½“Lnî{y/ x'¿—™9sæÌ¹çnß=³õèÑo¼ñîºë.K¤–WU¾¿Ýáî°õÔÚÛÔ<õ×ÀóÇmÚ†:3psÒ‡^æÜ•T­/±ïÙókùdE÷…ù–4Ó”dÏ——eëÖ­˜9s&xañⶇ“ÒE"7A}ñLæ‹×R˜Ð°W/„6k†cÒu~ìo³Ò zö´ÊÈCÞ ¤ÎÉÿüÇŠHÇ-»î4#¨mŠè&Ñ^Z8Šv¯ÂÈ.žõ4CB’öþ~OÝüLŒKJÁÒ¥s­ ræflž¿i)]¬|—¤d$ ÿBÙgœ!ÿûHñÊé’²‡IÛ¹G-ÖŽBDH‹77sEi{É á©m‰pÿc0oh{×ye…_—µùÓ•ê·‘ÒÌ´Yþ‘ܧãÇ·\äqâS›õ•Æzÿ”qÖì¶Ó`ÊRÙ&MùT†“íx^øã‹G_¨™6[Ë8o~ôr–S½ÊÓêãÖ?İK«Y®\¹á™7ýåSäää çÐÿð÷Æ;¶sÉÀUøbÿQ‹oýï‡áçCÿˆÿUóõE žššj½¬~üã[mUÞnÁ^ûÙrî²­c/:ÃëŸqÕ/—#O±è Ž}ëñÜÕ˜NVÇ €2m3ˆ8ï³…r=ŧ¹Áw½ ÙMj #«ìqñ~aÐXŸcdɘ^O¾—õÞÒ8ûÐäµ òßz™üëï>Wù*–Ä W‰#Š¿ØØX+ÏêÁ5uF¾É›%“[¶lim ÐL°ƒYn¶a×Só[•ê·—tÚ¶m‹víÚY?¦µN òÉ£é>øÀ’sùå—ƒ?Ê%Me©lS!v¼gÏkSŽqE@Ó±’AT% RðIz8uÖ¬Yàf8ùÉ'r?…âBé://e±\øáâÉ<)T¾t«çÓ3!iz7‹å† yYǪk ó“. k‰‡ﳌ¾aúè?<à¯ðv­;¦À¦¬}x¸S$VMŠGê—w#Kö_· U¤®ENa‘Ä»1©åµh0m‡È9ŠqGáÁ%™o3k¦&JùT|~hîêÒaqÒJÊptÁ ñ©ºá\¶A oT fZiƼjóÇ>|46ifú?ò17aÂ<õÔSرƒ×½d26ù̼n–1Í_2ï¾û®8íåÌ;ÑT®“íXÆ—'»³½½Çvt Œ6cÆ ÐCÌðÕW_áé§ŸöèR£×q>]µ@ÎM þ{¦Õ^á™KÌ» 3×üÏ£ƒÍâ3E^}͝L)±íÍ^ÁWÖ9´§t1çtÁ§G=õO}…õôÔï9î?åi·’3(ôïÿÖ/@O뚉Âc¯|èmû4þ÷áŸ1ÌKŠºú ã®|Xê¾…^±äýTxs°~Ác^yÍí/©ÿU‰Üž¸{ìXàšÐ’2óšÿlÅoKÚ¶ÀsÍ˜åšæ=ÁŸù¬â}ÅnrÎJfšàŒÏ6õîé=¦÷ ¿ûÐäõœ˜àþ³k7PùÔ“ ‰žÙ«¯¾Ú‚Ý»w/éúçqèq«¿òo—åéÁÌÈÈÀÇÒÛºVæ„гÉîh']hjU¶ÉKK©ÍÍrÒèíäOév9ö<ùh®Èݲø#;h16ÛfÞ¥/µR¯¦Q\.éˆ +ê:/'ÅKPaTBÓ¾x¦s|ȼyópßé¿q IDAT}÷¡£¬‰ÉpFfÅË…/–°ºÐ9ÈJÓ8^ƒ0¦ìbçÏ*—ñ&¬ho‘€Îy±$m)vî’ZMÙ¥.A¶ÊåãkÍê§Ñ5FE™xc6ð̆.æks=† †<΢ÝAŠÐç­çñĆl'æòn, GLì%24-c¢­®óøîwÀ¨&/cBê]H.7œ»0Öfº2GDEmz2øà1Cj¤1MæÒ¥K-péKW³y˜×˜iòÉÇ1EïËrfœQÊqbÚ­g ‘¾ä;ÙOz2ù"â².ô^wÝuàó÷¿ÿ½åSÙÈÏEÖ¿^Ä‹ÿzo}ò__’‚á7õBÿi¯á¿ŸLÂ/¯ˆå[~ˆw­ÆWÜ‹OvÍEó‚ÍÚa Þ¸gÇ×¾÷^CÁ©"÷BäÏÂ+O¼ˆ¬ÿßñ˜Û9 ¯öCü¤kã’&™8°v*nJ™ÙoÉðžNÑ8öM>êÉõý©[céxôðAÁ‹¯ þ{O”Ô¹ìŒìÑ\ŒƒÔ%©ˆ¹€²’bJÆœû~ Œ^‚võíe&_ðéŸþô§àÏ NçÀ,¯|ú$¶¾»cîù5>¿ú!,Iÿ}:6·ì’*ýg¾…Ô‚§‘<øgHÚõ2:z&õ±lûØgxí£èù½l,Ñ—OŠÂž™ýÊNV8ðîüÕkXòÉô¹è$Žœ©'òó°ö——ã§õ_Áž¯ûáË¿ŽBÒØ×±ëåÁ8#m0°Âï¢ó-?Å+íB¿è/ñhÛ~X|å. _Î7¥`äì·9¨Ф‹7¼~s<úÚx¼rÇ›xåý×pu«ÆØóîTÜòÓÆøpÏ׈ùò¯h›ôs\¾çy´=¾—‹Ü_,ûït‹@úܬü÷±Í2ÆÜ‹—Gü Ý^ùkú}O¼õ€Ë^%ܼÏY¦÷‘ÞŸ3d\›”÷^ãÆ­VT^_÷®òhL~“—ô@A¦{›ª§Ig—9'4ÑKç8«žÁ¬£|vš“|åm!kvs›Séׯþþ÷¿ƒ«„ðÙÂ`—åDó'_ë;Õ#áöÛo·ÚõäÊ·iÊWÛóœ€2f nÏJºÒH·MÏCÛâ(éÅ6iž’ÒÿŽ˜0X © P˜3­´Jż°iÄK.Pæ \€½Hîˆ×žÊ“²<Ê)ÙÓ¶¡¼$,Ð)|L“F@z!. /od.hغp$GåâÕõÓ0ð☒^`<|ú ¡®ìA *TMWÁVðâ^$)(yð Šͽ~÷kÛËÛaxö% ÆfNü9 ˳ q[œÊô2¹Ñ9cÞ zSë®y_AÏ¿ù%Þµk×’ëž…Ú Ô›_ÿæqðE{-Zä¨"IƒÖQ9ŒYÎIþäóåg–ÒãÈîv'ið%ßÉ~|xd2Lyù$V¯ÝŒßëŒ÷_hjy¸ÌK™zgNËÇc,Ùò.,xò:/öì øíÈîh(w|×À‰â©ŽK;·Â'kþ†e{H™|pž:)tév”§å9^Ê=}R>8ïŪ©WRß<רôæ|`øïqËe1ÖS=:¦ÎHýÈï_Žî"Û’UÈ—E?¼¶i>ºËÃ(óµ±èŸü7Ü”•‚ƈÄåW]. ‹n:éäN̼¬/æ Ÿƒ-?¹Ê’§E"èœ ÿ]>·ŒyNô½olüW4ó€=o§‹¾EÖ©z¸n8ç, *Λž7»ÞøÁáÇùdFFFZ]Ä|È3ø{X:ˆ©v’~ýëqÙcðàÁÖØF'¦“*’o—ÁY‘|ÉÑ›àìòíõYÇ|®üãïÄÞSˈâ1–©wF&  "#„.çÄë± ONãŒ< /•ôéL<Ö¾?NþìyL|Žþj:ŠH—Ñ ”‡ê… cófÞ6Œú^ðëQF<–GDzUVï„ BŠ®Í© Ðñºäÿüïô£èj_áEƘOyê¹UØ7ìÜî7éØgæOÍÅCS`Ñk—¡É¡mSõÈh)±qˆØ/,,×<‡?ô½O\…öÝ„ÆYÕ2ÑëÕ¦EÏ„Ñ %½^Öù"ÅÂ:àÙ›1pùüúžþÿØ«Øý³V–Cá¦1ìê¦2ô6 ÿy,.’óTj4ë܆Öã‡Ã ‡ISyaßvÛýˆ½ô"ä&O„u^yÎ4œ#äÉkÆ{þo„Û†ÉgEÞm¸ýþ´n$^xY9ãJꇄ֓zõ¬6Myrô¸íÙh?p9^øõptÿ˜<[׿ÊļÙ½LàÄå‹Zyð¦]Ì¼Þ :éõ*s”‘äÉØïC½ÏXËÌze l“Ïþ!HfàŒyö~8…Êêo¶»fÍkf>ŸÙüভ8¦üÆoô9¡Yu1åØõ'ùœ¥ýU_{=ÒÍr_òɧu•Ç)>~üxI[,7Ÿ•6þJã¿`¦Ù® .})`ò;¦+šu)3Ïö¥¥!G–4Š‘—ÍEÉÉ8*㪎üéO8¢^Aúr–ÐDf~…È‹Œ¼§Å嵿Øpb$ú?30!Ò÷=BÆ¿$fŒÁ¨´>Xv¿ÍŽ¡óvàÅ)?EßÄnû⫘š¸V¼ìhÔ¬5-ÂÆxêô™³ 飻"îªa„¾h2/fìGýÉÁùAV1sº¹ Óks.âBohû×¾ùð°Çù\,à©uëVhØ ¡\ª;ÿÙÊëKFÛã±ñ§ÇÂ4=ü± ã…8>“Á<~³Ž–ñ[‘|õf`ò¥A€i—EyvëQ¾“ýL½X×Ê=¸- )À BB­;1 ÁƒôCq[ëXµ\éþb•ÉöX×&Î3Èe†LVˆÿÊH4¤8 ·ÓLáö2C”s’kwÑ3ÒA×¹tf³&ù\,c6¿^°aâÙ¼H¦âÇŒS2ø6_ö<'Àäbí dðò…vLx²e ÿÅ<àYþÈInxW¤³[¢4ÄõŸŒÂ¼±ò}+³Òå#¹hêTEDÊ›XfãEX, )³¤~öF$¥ÃăÁ'3Ö‹ ñ›\ùR–/æHŽã”Ú"Iäȼùš4°¬#dX^a˜x´$ï†sÖ¼Ñì…Šˆ77'¥pìaDxŽ?&csKêÕ¯©rÛЙÒyœZÎ¥2zJ¯'ýMV€àËEƒÉ§4Æ*Givù 0émQ~•¥í’®4‹Éø§/EƒTF¯É£ÐnÀ_¼]çß·ºÎ©w™z4Ëb5°—Q¦8JÈÿ9åô\F_v+~Õû縫“†ËîÄÃw^†©Æ"éëùh ÝÚï&—Ž‘—C‘ÍÒúôbe,ñxw é†Ö7=‰å¿ƒA×uò¨ßû9ìY1 »_¿ןþ'²Ç_‰°K†`ã+²LÉÕú‚»o>Ñ¢NîÀÕ×߈·÷f£WX9¸ºý¯9nƺ=¯¢‹wù/±JÑ´iÓðŽ|ܳ{• „“ÊØ²JÒ*G·ÆMÌ@ö}?Ãú??…ùo!«€\‰ˆzbã0/ÝË<‡IKVâ_^Ú%C~…%Ÿý×]Jp'¡÷OðÁŸ†ˆ—ГÕÿg²?ÄÕ=~¬YÌXþbäY~Ó“xnL"[Œ÷”yÏMX„\rº¬k£õ-ÈX>‰·%âç^ 3Öí‘•H¼ôA×ÉÙ`¸ÿ”ópe»ë0ãæTÜÞ©n~î¼:êI¼=cnNü¾·¶÷|%Å+?Y{äº× î¼·· ]æ™Ã˜#ï¿ykß9ãmŸçBïCÆ\^¿x‡›é=écE¤ÅÇÇ[Þ;Žæjޫ쉼D@©=˜òµLïY•ÏXCeå³>=®œ´N&óã—Ëø|dò¸èq¬Š|¶ÁúìÎæ1PöÞ½{Á±¤ èªC¾Ú‡kLó™Ê®mmŸ4¶©ÏZ­cÿT/ƒä3©<ÐÔ¤Oc¥;ÉTž’2“™iþèãןÜAâŸ÷üˆ˜xKj|¡7__b¦ù»TÆR½Ô§OIú¾ŒãT«Hƈì—%¿þ:¢e÷v›s‰£úò%ÆP €ó$»Ïe1ÒlŸ3dZÈWv¨gÏN'‘U¢í\š‚¶wÈ€™é6Oœ´ÿzú6¨nø.Y€]Çœq8lØ0ëaÆ›])ô°k…]N$ÎXÃHîÁucù¡ÅšÏN:Z0>¸?—kyàÀÊ^+±>t´q>|Ì{Vx¤;•“Î`çÛ¼y³5ÕNW^S–%@þ™4Mk™]åwáúº¶ðç?ÿ÷ß •“è‰Ñ0eÊ<þ¸x‰*Фë1ßß&ÐRÒE’.=ç•Y”ùLýÉ):qXºTè‹cj}m^NŽà q±|èÓP—C ¶õœÇ|Y ¿¼¾‚’CÊ—nfz†ýåãD>Ó·Õ÷ÒÃe˜ŒÇá›/×O¨\3Jóè(Ž‹r|âá m„Fv¥J´Sy¢ch¸_>½Ïî)¥Ùï/J'÷»‘ûöík­Okç3ïs•¥*’Wiöz•‘¯r9ΚAw4bZ=ü 7Û FÊa0ë›iOiÙòê’ÏU14˜m2Í÷Ž»Ùþ2ŒPƒ}íM¥3f×9»ÿ(‡÷²xlìWò;-?ŽáÀM¦ùcš]¸Lsì‡ùc·œþ8-Щ׵ä+èv™¾t¬_¿™)ÍgÚ.ωQïÞLš¦56ïCödØ1Örí÷yMË×vùáÈHö„ðÇq› ¦y|•Õ_å›õyLJר,Æ>NõU>'ñø*·Ÿ3åSû{¥ÎEJ§@/­ÉëÐQz”à‹^–KrÁÍRKÅØiö|)gS¡ìb°Ùø†-ëëí}ï=lڶ͒ʉ­dæy´L(j` ø*6駺,þ.ãA\xéÇDß±">dôáÀCgº¢Àš78›”Á @¬¢ú5UΖ©?Á˜Ÿ™ÖöMÓ´Žæ)—ÇÌã«iùÚ¦ÆÜ 5k|°fp¥W«ô>wºgÍ{Z5iLkÏeE÷yMË7õc79Ÿ-l“±¿çL ú›òõXM[ø*¯iùÚ®ê¤y}ÎòÝ¢aùòå%öÐó®eŒÍã¡<‡P%lWª‰ƒdÉ|sj£&ìö¼MDÕ³’üµœ8=ª.ΕàZ Z,`>ÐÌte„ûÛ~¬2òêZr¯ÉPÓòkRwW¶kóÅ5}ºòý_)U´búhÀÍ?ÿüóAñ,Øet-àZÀµ€kJY€K/qøÀ%2I‹Jvs +.jÏ<—”äð Æü±—‰ª¸n*—Ü“`Çx&4ËÒÏ4Ma¦»`“eš×ج[ci.6K£qæ›\ Ô–L@©ÝD› 8kK/·]×®\ ¸øîY€Pu˜$óœ Êe¬6 2õG>â(Mï,b<úÂy¾èÖìró,˜ÂLº=mçÓ¼ÆvþjÏsùÎÒå›d· 5ÐÛZ„WŸ›m­Úuºp°¯=›¼aÍ ×¥Iû®¥Çöla²Æzüö¼Òƒ++§²õ‚ÕOù¿®`ÜnEå*§¦ãªêQÕú5}|®|×®¶€xô…ó|Ñƒš ¤šÙ¶ç•Ïol¾œý2:rê>QºnG÷É'ŸXÛhíÎÚ‹øSñxeÉïqטÇjž ¤"l^ú7œì>½ãìK¤xËþOʾo/;ŽíüÔQAf]•gr²°zÕZlÞvƒ'<Š j÷|ÌÞ°¿vp[w´ÀÅÞ¡Ž….ѵ€ksÎ÷ÜsåŒã¤Sz.éѻ͹,™`v¼gÏ;Š)ë~)Ïb Ñ´6lÏ—¯íƒÂƒ1c233}p8“ù"羬ìžìܹs ׋úßÿ¾BÜÅM1mÙ4<ý×EÎ3wó7c¤w&ÁIs7—È©‰<¬¾ãn¬;ç N¾U¶v¿S™»K:+àuÄ›—A»Îµa¡š¯Õ¸@v2ù^"}c-‚VÓºÐc¨^C§Xiª‡ækÚ,s¢k¹;ÕÕr•áÄ£eÊll÷äÙóþä‘×xÌ›?­ë‹Ær-S^“Æ2 &Ÿ™6ù•Wcå3åh™¯Xëø*wé®\ œ3°ã={ÞïØÇhÚ™KŸNeûèÉg–ÙëU˜?"‹°¿ôÒK¨h JDùá‡Zà°—,Ön†_lÃe1¯"üóͲ-Þˆ2[B™|LËúƘºrÆ_Ýy²äh(wÿ9+! “#ð§HOIðÛb8‚·öá-ÏVŸU¹4¾êŒLpiï:¯3JŠ"õb:#)©ß¼»þ¬MõXÀ1­1m¢y»}LMk¬¼ö¼Ò+Šíõ˜gp¢«îÉdy0à+PyvЩíØéš§ö´I3ë“OA ÖQ½´Lóf=¥Ùå*ÝŒMM3f°·iÖsÓ®\ ÔŒ¸H~~¾µv³.­Ç%¸«—Ÿà P…ÿ*òhúiß*R%*âóY¾uëVp»uëÖ•x…ìÌ™ëׯ·Êí ³HMo: íNŽ×>í…˜V—â7Þ(³i—•#„Øø8„GF#::ÚÚ"rãÜ‘Iž‹Ý\ë^ÂÖ%)è’²²[¤¬¿[¶7ëbÜ.ã°ñ°—IJ7.™æ¡Ë4$y¡€Ø\,)[Pn%œ•¿U¶KÁfÉî\*{§/Ö¦&Jl•ž>SÚe]ù%¥¤a¿Wt}Y„ùØWob\OYòKQÒ¬G²ç¿Ýr3W`¤·®G/³’›® `šÞK3]íU^&7y¨»!€O°GH°©¿@ë8)ˆ"x2AšÒ‘,¯¶kÊöÞ”—±=øªcç³ç©çÄCª“]®›w-àZ æ,@Ѧ5ï§UóÁÞsä©È£é«}F%4í‹·B:§Þs:>»Åo¿ýv\"SòÍÀ-‘¸Êÿu²(»=¬{íg¸¡óFÜ7¯5’ïõ7òpg·nÝììà¦sóžCíÅ£™‹û§¤ Ç#ObÒ˜¶ˆŸÒû~t‰wÏÇÊ}/ȶnEX5>© –£°ø6|¾0‰þ yˆãèªIèy÷l¼¼! wui‚£ó!ûᛌµÈ/T0Zˆ/3¾´ökj“ü¦&ÎÇÒ+±zÒÕˆæË^b_Þ"´È“ýÒ›ôÄÒG‡c´x,ë‹’ÓïXŒ×6e቟cXÇøI×X4´™q<¾t»¤ Â⤕(ÜÒ¹‡³-½ŒŠn²,`K3]M3"ÕcH…5͸&€bUŒN ÚœÀT°zPV0r‚á¥.Áò«eøU§ê´ceôpë¸ø.Yàí·ß¶6q£éÇ&¾SÐiÒìU1a°@SÐÙˆ™¶7TþÀ˜7oî»ï>tôîcN;eÿòîÝ»—“õɦ¸¡Ó;;åBÜ<â1k¯áÄÄD dfdd8M Iì~5®ïÜ'O7DZ ´ ž>ºÛš\‹–Ó¥k}Í>ôo!E;ñÎl)ïó¦<±yÛÄ%¹ü*ä‰7óã7¤à¡×0¢Gœ5£ªE»à½žLI• ¡MÐZ<•M›Ç"F–`HèÕß^‚¥2‰‰@ EÁ.ÑaÃ" íJ¾8üb,0î«o$mMñf:ëŠøîwÀ¨&/cBê]ìꆶ¿ `êW¢æk¸é Å{nùÐzAV«;Á›K+!¦\•`d‘×)ø¢“·"ùþ€Ë‚Nú)MÁ˜æÍ8Øv‚å7Û2Óv9ª£ÚÅäuJËï$Ã¥¹p-œn¾ùfkÛPÝr’ÝæìBWvZôL|ç„ÿüT-- hš–J©¯&…qïg'f›6mðŸÿüÇÚ Z½šœP´ñ—ceÃ3h{ÃÄÅÅY›È§§§c÷îÝhÕª•©_Iš]çúÜ‚Þ ¶YÛE…`CìEôM2â”ü”<?ê‹S…CqߌæÖÖ“§­ò §í‡—P qÄâóü+Ói™+“¢º!w꫘6ü#=í^^ò5nVRÓÓVIÖ›ð­[ôð4ìKŒ?ÌœˆÄØQXžUˆÛâ‚=Õööܼ/ ˜€RÇkjׄ¯:µA/سÓû:ŽÉÅkF?Ž[ÇOÁ-mkwêyE ŽvRÀª6sò>šrLþ`ÓÚž¶å/V` p2Aš™6ÛQ°J𝴖™õìi³®É¯úújŸ¼f™/9öö*Êk»”ç×®Î9 TÿU}˜O _ dI.UÔOö)ïÝ»·ãlñ¾}ûZÞ¢O?ýÔÌzÓM7áСCXôU>îJ} Dêìn_µjöìÙƒÖ­[ã?øcÛô:|EùÍ'ã;9é&2|žˆí‹–¯f ãÂç‘Øív´;”ޤ˜¶,ÞÄé»1ï‘þè ÖÊͦ×2WY“¥»»†&DãðþlD·ð€×ôŒ,<Ò) óîê‰ ‚2†¡iK£yü¤¥Wî—ÿÂbI­L.Ç÷1YÒW‰: £ù×eïbdÂmˆÎÝ :O“V¶öêÿP_ºawæD%ôÇä-±iq"2ä Ќ֚n\Í0½™öÉ@êÝ ¤É`x‘gç©ßúZ<9ûZ;¹Fó 56³Óüåíeþä°Ìä6mÊ$mNö¼ÊðE×r3öÅëD·Ó̼™VùN4-cìTîDÓ:ö2_y;]ë»±k×5ojè:7• ÿùš¦n§™àÒ^¦u*Œ™uN¢çhûöíÖ8Πú`Û¶ù4"»ØÛ¶mkÌK/½´¤ÌL°3zJßxLQbŸñzÏTL—nð¼á !ç`ùØè; ûŠ'£ÿô,¼ø`ÞÑšxdU1sº¹ Ó²E ýSfMÅRß[Kð¼ÔûGÕüñÕ’ên³®\ œCxå•W¬ @¾vòs(Šóãi¬t§ªÊSRæ h: q¢©@§²’FœM›6ÅàÁƒÑ¡C§âr4n3Éqš|©gee„6Ö¬YƒÏ?ÿÜ×Ù©S'«½œ»b‘tÛx œÉ‘bÌh Çm³¶ x–·<<)‹Šqϼ\Œa²“v¹‡#iÂ"Žž'žÑRzäЧQ˜7IÆqÒS*æ]ÚN‹¤ (Î-]䡲%T(º¦âáÜû¾úÇKÈÐ L…Ý´k×®\ œÓ TðH©?Òt|&‡r̦éÙdÚœÀ£/œç‹^ΣikÃ1koØžw¬T]Ä]›žC›˜uâB=ƒ¯™‰ÐßAÔ®íøVwˆÌ°*”ÙáŸ|Mãã««IWŽk¿Pf]•N Ç”,%Ö1âÖÌ+à CÇ/X§ê.͵€k׮Πèûˆ1{Ú¸†fNNŽåÁÔéÚ§ï0‡C³ƒG;Þ³çD œGÓÎd Ñ´6lÏÛëúÍ«ü2…äÏ;¾ 'eÇžˆ‚zh†#ûþ‰°÷ÞD“oŽ íÉSèœŸŽ²cÐÇãÆáˆ,t¾‡¢Ã›±pÉÆ’­+Ï÷ã­«ÇÇ›TWBÐWuõs+ËYw¼¹Ûã‡àÊdžuã» ºp-àZ †-@¼¤‹kcrÇDþ49“Ýçž,ãŒtû{ËA=;޳窔’Êöó•Ò5¥ ’y3í”×:Æœ->cÆ dffVÈ« ò.ÇîÍ¿CëÆ‘)ìŒzgº¢[\}d'Åà aÚ/ÆÚ'ñ§ qéWàã±cq\@g™/û‹nd‚€¤¹›Ë°œK™¼=«1êî÷8ä®LÈ\2!Iiàf™ »WŒ×y 2½£ Šv.‘ü4öWñÿ Ì;NÝ]E9çnuó&µw×­£*À‡óÇâù¬˜5é&Ôî.çuË2®6®\ ¸8_,À÷ñ ä_|uëÖaåÊ•X²d ~÷»ßá…^ÀŸþô'¼óÎ;øú믭­½é,QpjØÁ ´ãA£JùdE@³|²U¢,5€Ü‘#GðÒK/[#;vÌo |aþqìÍX€&ÅßâÂ~ëzý?Ð2¼v|ó>âôÅq ï¯f—Ç'âàG¡Í—_âßÏ?_N.Á×Ô•;—sÔZcjùC‰åxÎBDƒÆ¢jx¹ññ=ȦêÅ6 iaËÚtá›Í»ó­Cû|õ߀IWK÷iu„F¸ãó ÜûŸKÔWG#u^†Þتh]ôdf½óî¿Ï<šä‚L=QnìZÀµ€kóÌt~С÷É'Ÿ`õêÕØ·o6lˆ+Ä Çå ¹õ7q('ùNÉ<Óiâ5‰ (Á{Ž<•š*ŒJhºR§jëÖ­˜9s¦uÀÚýè$hÿg +ke|ë)þ¶ä˾æÀº.@—»†áê'&á£ßÿ Å=Ü@fR.ï³ãü‡Øø8Ùt'ÑÑÑÖ6‘ù™KÒ ž¤”4ì·<޹X"mÏ]µ Ó’=õ“§­*õN¾Ÿ†.–Ü.úH*ЧÜà]Ù™²ÂZ¼g!Í}X;;Ãjø£OèóÍÅÚyË1uвëånÌÙ¥DÏ”´÷e#L ù™—”‚¥KçZe37g{q–NKöð'ÏD¦uXùøwÚL¤ïõ€X-œøDìît¤tñSRr2ºt5M抙Þã ArÚ¹çe6¥™¶ _'þÂ'k³€¯WcbJ RR¦#óTPÌUµ€k×®ªÑ‘wMä øøx´nÝÜÔFwXäÞ×\sÕNo'{˜¶ 4ñ‚N“f×ZyÊЃšÚ€)ÌL—h†k<½ù曘5kvíÚU®Zqñìúø9ĵ*@~ž@!ñjçç ðD.˜ƒÈ-ÈÇÙ%¨@¼£ˆ–y…E(–™Wö%„yOÇ´iÓðÄiØ)ø¨°0ËÁ´Ý7"ëÐßÑEœsG.ÇÄ;¦áºM;°îáNØ¿jzŽÚ€5YÒn^’·ŒBü˜0+ÌÝ…ùcîÀî7àкQˆÞ¿&.ÆÊ}…²·ùQ ‰w^L>¦×£Ø'`¹øèq8¦béç@š+m0GïÀ¾ŒW±|ÊDwòð*Ä_›Š»×g‰Î«q_Ÿ>öÃóäCã0ð!àÕ÷¾DÑá-˜8¯>Ó³ÿ)ùümøCF ì-¼aèõÐbäÈEytÃQá·È ^,<…]kçãŽi°)k^Ï1ÂòÆ£qèPÆ.Ÿˆ×¶±»¼ûÖ,Æ!ºÀà›o7&Å÷Å—w¯AŽð.H½ [àÁ:»‘6h"z.Ï’¯¬<,ÒÎ’u.ý3»4]·g ž‘†´´Ù˜Æx:¸}ççÒ%æêêZÀµ€k€-°sçNËCI‡Zƒ ¬æŒ9Û\óÿ÷ÿþ¸ÃâGÒÌ1œ¶`â;'ügcwÎÚ×Ñtæ*¥š–R«èÕTAÀ¼yópß}÷¡cÇŽJÆ7»Þ’)ù'Ñ i!ND‹!xŠcgg£q£†h×) ÿy; á‡`àÔ_á“ß=ƒP(ãœBb÷«q}ç&8yº!šX ßT¬~z¨·;YŸàÝIkVcxWv0áý7f#ñ™ HŠcq$š3c_ÃŽ9·‰—Utš´Oíái.¢½xFáåg&à®þ z™ÿáHèÕß^‚¥Y{A ÇÖÒ¦ÒöØ•û0:©…¸£šZ5÷ozGâgð`ï8«»¼ßÀ)NÇŠ.Ç"cò¿ð᥻8ô.Ü8@ºÙ?‡ƒŒ>?B'«§»zuÎÃÛ Ó`K£,¼(øœ—ÛšÕOÃ:|ðǮĢÑI’ÉG‡Dàxyï“/ç bÃÃIà–î‘7 ãZEÉšáj1؃nC«—g!uÛ8w‚ (µë`Sç¹s$®¦®\ ¸p-p®[€Î»|™͵3ÙeN`É×ÔÔ%èéärFôjîÝ»×ê^g»ŸPiü¬GÓÔAÑ-i¾0ù+L7oÞ<òHÉJ»6ÍAËxYÀ¨@fG H9“Ÿ¢ã{ÅcÉÅY жãQ«ÿ%ê:ˆ Ï>‹¸äA8.ã.ˆ)? ‘êš>· wRú÷ïh…Ú‰e´ci |»è"¥á]oá&²b—u.èÇã/ñ¢‹ä¿7„w@ZÞ>¬×³$"â‰U–çS‹­8W&&…5Áô-Òû=ðt"‰ lûâX Zyý—wôi¨tL¦ª®åfwåMH̃k׷GLüì¦àÚSðÐ#½­cÍÝš†°&m±¥Q'ô»áj´Ž†>h¨‡/$ë/ŽõZ:*§ûâ h$l˜Õ„E…8RR1CÓò±r¶Ïê‹Ø°'°ÛêÃ/a¨Ó J›öÉ@.جӧÎUε€k×ç29F3**J†¨uAçÎÑ¢E hê"íôlx€^~ùåÖMîn &Î3‹Lz…øÏÐ4…¨p;Ín/Ó:Å<Ø[n¹ãdY¢K.¹¤LG¶áä‘hžBÁÑ"ÉÒ_Íi‰½ìkŸ"é>O¼ˆhSˆˆp¿tÁÑIÀÓO~RF3ô:|Pºó­éý¹ù‚hˆŽ2XjŠvÂqõ ‡1&Í;¦0o>Ÿ ŒŽÓÚEÙ»‘y0ýïŒÅ/¦o/c©<¹_þ ‹%“š: Q'±Ô£$hÛ%´L¸Fôƒl=Œ¢Ü˜÷¸èà0FÓªÑ"CÅë(ÈWw–nòÈèoåWÅY,Y›VJ< ÷í¦…GœM`qVý_hl{Œq£MZˆÍ[ßÇ´›»I{QÜY$c@3"¡ÿ½X°øEiì-°O¥¯º 5&AA¦ *kÌÄ®`×®\ ¸ÐÚ³ö™ÄÂñ™M›6E³fͬ54¹`;=™ŒéÝ$àìÚµ«4¹Ô‘-(ÎSŒ§±ÒmìVVyJÊ|M'!N4èTVÒˆ¿g?M˜0×_½ãöG_ýg&bZ|‹ N¶ºuOÚM’%Œž8ŒÓ‡.À™Ó²è±B´¿¢ŸÅÁ¿Åg‚܇ÉLª(øjôNé01.Ñ~ÔÍÀ zÙ¼ Lùë{z«5‹¸¡3°|Ò—HŒâd–(Üñå$dÌjua‡Ùæã\‹ŽñQ–—+1u9æ¬ Žˆ4Cdâ ȰI ˆy7ÌÇ%#1±ç(l·¦½m­žp'^›Ôw'Æ",ª->j&|†¸þn)O¼ Vã1èeåŸA¯_hÇ>©â圎–!!¸áùLŒH\‹žƒZ ˜€Ü öc4ÙÔ×'_hÌÛ±I»f¡[â/Ñø‘—¥mïÊFŠö⩎--{E$¦bÄœçÑ­¼C×T§N¥ 4u"›Þઠ‚PÍŸ+1¿l+ú+ÇâêéZÀµ€kï’èô àRwbo›¦uw òhr’»Û}â<Åx“UñŸ½šÉc•ùë}µWvÊ—èÄäD#©kKÓþøÂb»cÖ²-˜%"³7ÏÅñh6 ÈO°ÎË™í_æi¿T뺟2Á¥½ë¼îkïjXU ðcÂõfWÕŠnýÚ´€{ צõ«¿mJ¾‹(õÜ’¦ûš+è$ÐÔÀg˜÷—/œç‹®"Kb'TRhK”¢‰Ò;Íž/å4R<ØÇÜ2€AvL†4‚Õ}§£èt1 N#ÿýKp†4™-ò—í'€óô…q¸ý‡2A¦Ch8^ „z¤?^“‡éÀN—f HMkYh¸´ë̈́ʱ¦‚Ö".›ˆ'x±ÇyÌ‘ “^û Æ„‹"F6ÙµÏÊTohjô<Øò"z§dŽ`xèÀdž'‡â HN²‚9†`xƒRìË+£¿ÊSù5u,®Üà- `’5õ<é{Ê*Yy4o‹Âv¶:%Ù``…ùæÔFM…Úó% ÙT û w¿j¥=7‚ÜßžAˆ,oÄP"/÷ êÉMRjH«ÀýW-Š¡/çáèsGÅ#\ˆ°È–ˆ©9T{Öß¼žÍôYWÄOƒ{Òçã×Ý.¶ÕiH*î¿©ÃYÙéÕØ°>¤)Òßü› ZTÓ„[1CÖ‘Š:õ!y|!®í=£Æ×Ò¤7‰Á_êa²—i^c³ŽÓÁê3Am¯v'¯–i=-Sºæ•We0o–iý@c'ÝIã±ØË4¯qEÇKTÕÇ®·–ë1hÞä·ËQ^å &VÝYÇÔ߉Nš“X׿YfÊ'Ý)8ÉQ>-3å(Myìúi¹YGy56Ïíˆ=΋ÒLy*KËìmj9é¶­2Üøü¶_çÏÚÅ#¦7“׊þL+×™Â+ÿ™Ð,3«ûL—¢6‹)̬dlò±Ló›uÝ´kóÚÆÍYrSó`¾ê‚Ä\lm=y&GVi@+44gtÕ‚æ‹Ûl‚/p}ykZy•nòûJÓÆ´¿S¬uÌó£|Z¦±Ê`ÞLk¹=öÅ£Ç`ç×c$]ÓÊèñÚÛdžAÉ©œe”¿">å¯(ÖãP>Íkl§3o–iZc;°öñ%'˜vÉ«íÚå©~UìO™ÁžÇªêáT_u0¯'>—vnX@ïù@ϧýÚô%4&,}¨”5ƒ/z¹m²MaeE”ÍÙù4¯qYn7çZà<¶€>œyˆÚ=¡‡è ®ü5dáåé³±áë<\<äh]¯F[ó+Èõƒˆ7q€7rM¨äÊ<‹pÏóY4¶ÛTÀÐgy}:Ñ(Ðä ¸o½ÊÖ ¦—·rÐwS5£Jã¿`¦y´&¸ô¥€É_&͉=æ8LFDDà–[n)ÃÇL‡ðñÇ—£“°iÓ&ÌŸ?ßšäÈàDÌâiȪùÞB³÷[Ò„qË÷-BR›´ûÁe’ —u ŠñéH|f’ZÈžÜÑ ¸mX±Ü ^9FTŸˆvö3Ñm¦/Ÿ„¬Eí®ù¢Ýa¶myëy<ñijX&nÈå;9Œ dÓÌt¦-ü·ÌØðÑ‘oêj´Þ,—H¾ylK©* »I{ˆ8 0 ×í xuC¤› м‰õ†®äWc€-¹l®\ ¸p-àZ 0 𽤽½êÑšúÎÒ¼ØÄy&‹I¯ÿùš¦n§™ÂíeZÇgü½ï}IIIeÊ  €¨<ÀêÞ½;7nŒY³fá½÷ÞÃ7ß|ƒÃ‡ãŸÿü',X`y@ù‚礡ŠAä°ûÂð{ïEJÊmhá8JµZyÕPO¢ø=qâHWyƒŠš°Ê ¤¡>/þ[ò6 ¦ã ·Zt•­(ZÆÏÞiyû°r\{̈ˆ'Vɸ¡&, 7l5}5Ö„Š®Ì:d½^êJßYUÜsñ=õ߉7Á¥Ý  ç)ÆÓXéNb”§¤ÌÐtâDSNe%øJhp2´nÝ={ötdåÃàÎ;ïDBBÞÿ}Œ7cÆŒÁŸÿügk-Í`ôèј1cF@`³ .M#”¢ÉbyR8~pM¬óGlÍÎGîÎt<^ÁÍ#§?öÀâ5S±xT"Ê8Éð6Ý1IZIÿïItìÚ]»&¢Y¤¸)‹²‘™y ýïÅ‚Å/ Ç[8@5-E2ðyV6ò÷§cd7é†ïã1l*Ñí„ýøIÏXÌ¢ìÝÈ<‰þ÷NÆâeLìôí2jÓ 5a^ŸUüj¬ µÎ9™ö—¾æ5ô€Èoþ´žI³Ë4ËL~M3Ö:&¯¦M>iò›$_KžAc{Ú)OšS0e˜å¾è&Ou¦ííÙóÁ¶UQ}{¹=Ïö”¦±ê`öF(Í] œO ¬}' IDATÀÔgËLxœÄyŠñ4fUÅv1&Uæ hÚ+úÊ—è‹Ñ‰Î®sNüáß~ûí嫚uÈÃu2ñ‹_`Ñ¢E2Ær þøÇ?â±Ç³ooÚ´)þûßÿbæÌ™~Á&{´ë‡ÙܘìŽN(mSûÌFb“Dµý5"ûxèNÿ /©ïéçn‘4Ë'%bTâdÅaJÖ4s-Âä˜BBÂpûËÛhîÅS[Z¶ˆHLň9Ï£½ª‘í0v,ë6AD˹¸j;ĽÁÔ;4#ž„)׊Œä…È>¸ã£,y‰©Ë1gÍР–nÒ&ܸb TÃWcÅT#GN曘>=täH5Š®3¢ ôg>X•fÌ3h¬bÖUšÊP~{å³Ç”(¯½®›¯9 ðœ8çškÑ•ìZàìYÀ¼¶ÍtøÂy¾èåDÛW¹r“à„^í4{Þ¬ï˜æ’£FB«V­Ë!^sÍ5X¶l™µ {½zõðì³ÏZË#q¡2!¼+–y_(&½QÂgx)OzIqdÂhoñf#09½c³s&³ÖÃ}Z/÷¦ãÞ)á¸íé-(~ÚKˆKBZq!~“+.˰kæ;K‰n rsQhÐiâ¶Y[7Uü‘²Ûœ0Ú+ÇÔ[F‘öž° y£¥k=4Üâ+.\i#Ì[Ï[˪Ñõë×GXX˜õ£Xõl*1Ah56[yQ§2ñܬà눾8Sy)nÍZ²€é‘»ØáY¨ZNrH3eÚóÊV>§ú¾Úe¶­å¦*ÏŒ•Ϥ­´¾¬Ý†³eq·ªXÀüÒkV¯á äíLÙÁx4Môªš4ʵçͶ|¦¹fUƒ‚MnSÉm) 6wïÞ]U±õC)Ë"ù™UI"GÆ£FÚ…;ÐXt«£Tξ/åó´Qšw¬â«`”a‚J¦YÆXÁgš©¦ª§ðÆÔYˆv+â/â¨c7Tdó!]¯¿r>Øõ!oò) ÒXˤôgÒȧ¿Ê‚-ÖSŒ++Gõ 4öÕ.u`0ËýÉ4ù´®?~–)ŸÆvþê:Ïv¹nÞµ@mY@ t¾™ã3ùNÒŸÝã)‹‰íìeÊã3hÚW©QŸÚT±@ÁæöíÛqâÄ 4lذŠÝê®ü[€7,ƒ‚½Í¸°ÐL[©12þ•°4ë9ؘ0£’:£@ßÞ‘¾Ö®y6óeï ˜ªëëOÏ ë*­ªòÕ£²|Dú3edéϤWgšòk#øµ¡‹¿6y=™×”?^·Ìµ@mYÀ¼Nõ=E]˜fc?Nó!@ügb@³, Ã³wþšÂLvÁ&Ë4¯±Y÷¬¦ 6W¯^ ®½é4ƒý¬*ã6vÞ[€7ë©S§pÑEâ"”ÀÍxóòÇ›™1yøãW%Ç%›_—gÍ@™˜ýzòâßÂóÓsñuö×Xþx4)þ¬©p6òHdj³©¿¯¶Î0FÕ먱¯ãqé®\ ÔŒøÎaÐg¡¾‡Ì˜Nz<+Äx&ô…ó|Ñe`_Ù` +[R6gçÓ¼Æe¹ÏrîòË/?Ë-ºÍ}-@ÀÈ•«põÍ\pž>}ºd’ËH¹V,ÇtžõPÿL•U¬q™'¶â™_gâ–ž­Ïº5¨ NŽñW¦ül´Q½‚­SÝ ®"€¨žÎºvU'Óv5­?Tjò5ÇM»¨Œ(ƒu‚8|„;G_8t'þr@3ã± ²ç‘O~A!½3¸ƒªè2»¨A ð¦äë·6jÔȪ‘——gO‚IMLÞðüjäz> 6Ï~¨¨hogyƒ&²áÀEˆmPá—ìÙWÓG‹úr×⪾äí`Så3v’­üÚ~°±Öw’¨,‚Êï¨|O“ˆm£:c_í*X4u´·k–™rÌ´Ö1y•VQìë¼WTÏ-w-P-À÷ß?Á8A8¦“ï)¾¯Œ`•v¼gÏUK“vfi‰'e Ñ´6lÏÛëVKþ­óóõ´ofy¸p»vSÚ(Èþ_m<ŒÆ‰g°þ£ˆlÙ¯¬—º]37>Z€Ýà 4Á%—ÖâµÉ<ÚEΛö /´?##-Z´@TT”5†¸ÖlR¿3žœÑ¹Öš¯¨a;³çµ¾‚CÍ3&¯/~;ÝÌ›i•g§U”×zU žÌ`æÍ´Éô¯2'ºÍ”áTNš‚B{Ûö¼Ö×XËíy³Må±ÇÕ±—ÛóvyUÍó:pºöª*×­ïZ º,Àë“`3'ß_›ö9^ô¡T)üWÐT¡lËL;å½úTo4ó­Ì»7ßor‡ÂgŸ}f½¤ 6{ôèa5Æ™æK‡~…ö »aï±=h3ó ¾ÉkŽßKÝWV¯>®4×jÞÈ111Ø»w¯ÕEA/&¿d’i‚ÍÍ›7#;;ÛÚ`€74'«¹¡j°¿ªI«ùÚ PÎ5½Õ2•ñjݺëÍ –¿.»«Ûùi^£:A>ýôSÄÆÆZNÛ»É0Õ`v<¨tÇ8ÐY玕…¨Jø*÷Iöaˉ=ßÿþ÷Ñ­[7\qÅ8zô(~þóŸcÕªUxã7ðýÆíÑü’&–×sàÀhÖ"ÞgÛÕUPtx3.Ù™À[ó¡h?V,\ŠÝg¥±š?œó¡M‚FÞ Øä˜þxƒ3ÎÏÏob.µÕ¶m[ÄÇÇ[ÝìçÃñ»Ç¼l_³ökÔ´§°6ް2 1ØwWm—ÛæwÛ¼®éŒãûGßI|G±;4þ˜güïÿ´zÛ†u™€2¼çÈSY ©Â¨„¦>³œ(Áí"333®c2²kòª«®²gÇŽ­½Yî3¿#åð$ð—4r6®üj‚y{VcÔÝï;EÖxÈÛƒA£îÀ²+åÔx³n¾-@ I/&»Ããââ¬æü:~ü¸õ!´k×.Ë“™““^§—]v™õ!Ä/M7|w-à•ºsîÝsQwÎ…«IõY€=ktÎEËšß'Ož,›v'ȦM›¬îu¾ÃØ;§Ã¼ ML|§ Ó¤¬VRyÊÐ+ê:/Ã,mÀf¦íü>óGŽÁK/½dí_>hÐ Ÿã.} N”޾ d<\„—÷ûžºfRã¾ÄOÚÀϺDúè®| ·êkÄà’húÈŸê–6ysò¤g“_ŒüRäÇi—\r‰5&“7<¯WòsVº\ ¸p-àZÀµ@MX€ï$¾‡èÕ¤3„Îö²ñ=¤Nå¢G³yóæhÖ¬™5Ä‹“ZmÁÄwNøÏÆîœ Ö£i6jJTLZ@é­[·Zû“¯[·.è0_ê 4ND£“¨wáWò"/3cªœ9B‰m‡˜6×£»¤x9ŠöoÄIêíLÂÂ÷w—ÔÝ¿q!’Ôš4ïïw³Ù›‘"<3ßß/õr±$%sW¬(‘9NºØ·®˜æõ¦&cÕNB^`÷ª™è¢²»¤ˆl‡5sÉ8¤Ì]Š´Ñ©Ë\d[Üú/ Sº yæûÖî.¹™+0²‹WwÙçÜ#Yyݸ&-@Ï8¿é¥d7zË–-Ñ®];ë*11Ü•ÞÎ&Md¦·ìÚD^Öqƒk×®\ ¸¨ pn€:<8ù´uëÖÈ$f"À¤#¤iÓ¦ààtpßO¢~‚¯W…ø/X iê` ÷¥€Éï3̓óÍ71kÖ,°»Ñ E…0iÒ4­@“ã òN4ÄŸ-’íNãÛ"jNu£¤ò_Ӟô‘=0“ðú#ôfîÆ”–=±¡ÿäÈäYë“1êÚx¬Ø- oÿ*´ì9 ýÅ ZXœƒõÉ»pmËIRãV´ãšt×ϬDŽÞ-¬‚܃Ë1fÐd´ÿÍ>ìX9³ïî‰Ä?6ÆŽCYxyÄrLüû6‹/¬e/,Þ—#3eaNÓùøå?>·è…¹»0ÌØ}ãZ7 žÓ…aùX1® Fm¸ &ô–õ©ŠðAÚ ,NZ)úãè‚ApçÙ{ÏÍYŒ´€“;RñãG¤ñ«’=€–ò$ÊøŠ²!Q.–K¤±MøÜ˜~Þaxöe¬Dûí³áñÄ–­èæ\ àÌÉ=Ø^¿îO¹©©·¢E™ôNª‡ÒLóÔi^Ë•¦±e Z¦2”fÒí4æ ™öP—>.캹y׮Π¨£ƒ“P{öìiu“ÓkyøðaìÙ³œ#Ã^6ïê'Ø£U«VþŒBœ§Ocò+þ³×5y¬2_M{E_ùr}1ú£uó`{÷î]Îu{:ŸÛ‚iåDp ‘{‹‘ž·ft»R¦§nÙjì:?tø Šrð5s­äú#²M<„»1ëõ­X4<¹™ÿ@ª½º âB ÏøÇÖ‘žÌ7ÓÄ79óÚŠk2CНÁôeÏáâ.±hÛ­Y›&K¡ò÷bÙr`ìÊûÑ»¶-G®*…¡v9b‡ûž]Š!÷õñ=°2kúÇIÇæD%ôÇä-±iq"2äâ¶8¿c-ì¢ÝüwÄ‘Qˆ½¸µ>‚Ú5BâÔ@É´B§¼ò›eZÇ)V~»<òš43í$GiêÉt›ÊãÆ®\ ¸8Û`×9«ïYRÞJb-ŽÅdl¦+ÐÏÎóE/'.PHÄŠNèÕN³çË5h'$$$À߬óüì,|¼ù8>xg‹5Yˆ(œã 8é‚MŽ=8rôŽ;nGàŒ^¢öìß"?»¥4'ÎìŸÒ7SHKW7Œ.èøÍç¯aPÇD„ÜíažôZ†³ŸCñùkSÑ1±‰@Q†>x-ãïè –¬*¡@•1˜°i ºÉ:‰CcqhÙpÔlìuN’É ê0Õáí:u h‰ÙÒ¹>vìdL쉴9¸Š¸Ù&€ ùT^(zOx+ nÆ€øQØpt>¼#F `µÂˆ9˜ÓÍ™^k¸‘az /EÛÜw0:e!†ŒÃ£7•½7 ÖZM:G‚¿ê NòhþÚSéÄ£]SNe.͵€k×5m³W…˜‰½Å«É¥öÌòu Û™rƒš&zÕFMš¥¿)Ü_š3žŒü¿ìúv(À“¿û7ê]pq±Åˆmx1²”‘̪Ê?…W_}U<”GpAˆL„)ŒÁ!™´ëëoQôm=ôíõ½²*„wÅ"» S†Ê…ÈC‘.rsó‰pÃ2†NFqáxäæ"B–¬Ñ¢È„Ñ(ÞâÚ“·c²7›’®&‚´›^œ^ÒfÂèthµþ“—!ol.×h’zYziêXJÈ/=Å®k`ó¶¯ñöºíXÿñnüsã^ÄÖß'YóÄËù6ŠÂáÓ­Ñí²V¸¶Wf\ß];]\"#ðD¨µö¡#hx¸p™¸öbeBhx$\ŒYËU­oPþ´«ÂŒµŒ-hZy«ÖjkË€p:Ì!ÅUxv«ûêÚv¢W§'4УôóðT„ËçZÀµ€k*Y€Ï!}QÁ&Wè!ÐÔ÷c“Ï"”ŽÉd–L&Î3ñŸ—Ýdš¦0³¦]°ÉÇ2ÍklÖuL;˜#Ÿ <ËÉǺ _â“­™Vñ p}Ïv¸(Êõæ©½ÜøìYÀ‘fZA'×ÎdZojÏž†ž–²Þy³?ÌEø×Yïy/:Ö1o¦‚B;`¤7SËx$¦wÓ,Sº¦uÍXy=– î?½™æ¸L×»œý\n×®jÖ|Çp¡¾oqÖ9·CæZÏ Z®±­ˆñL è çù¢—ô«|S˜Òœb;Ÿæ5vªSm4Êä~ Ö¯Ú„º‚\ T¼A+°ä ®iƘÖ2¥Í8þ¦‡ñt¯…F!ªA½³Ùt@mùÁ–™üšÖØ®ŒnÏÛù™÷.y-èƒÝ©®Ks-àZÀµÀÙ²€ù,:tè>øàƒ’ÍEÌ%øL>C7'ðè ç‘îÄ_Ëí”KÚÙóå*¸×ç« ,@2öõãÄ5 µczh]'AfíØ£fZå[?@j¦Wªk×®ü[Àéôá‡ZϦ?þØŠ•Gc‰vPiÇ{ö¼ƒ®öí?˜B4­ Ûóþ%U±”ûtîܹdzÈ"îœaž'/í3–Ô .à€ dýÌÆhÓÒZážS÷ÝàZ &-@@©Ýâê­$˜$k–é¢~5²ŒtþÜpþZÀÏCûü=h÷È\ ¸¨3à;‡?3lß¾ôhò½tôèQÁS;ѹsg‹EßU&¿-mÇ{ö¼½l¶" © ’µÌ´S¾¬äjÌ­x}Z4؈Èèvh÷ý+qaD[œ) y¦t{Jæór³{ðlÙuÇC“qC¿äjÔÂåZ ¬(ÔKiz4IãËyô&& 4ËÚÐ͹p-àZÀµ@õZ€ïóƒ—KAnÚ´© móæÍhÛ¶­µ®¦ŸÖ}J;ô#B&"ù-­¸P•¨˜³ 1 w£e»Áⱌ¶–5 ©‡3…2ãÜûcþÛ3\¼=¡a‘¸¸Í@än¯B‹nU×[@¤z*y3+dZÜ*•› Ð+Ï®G³bÛº®\ ¸p-Py ¨ƒƒ¶nÝjm/i‚O¾—>ýôÓ2àÓ¡5P‚÷y*òh:´k‘T•д/^Gºééqd0ˆõ.u êyºÂ/ o‚FÑmÑ8¦tGï3E§{ô œ:,Ýé§ÅƒT¯Ä‹dˆ)IæÊ‚îù2j R¶®4×Ëä‚/Ù‡³­e_¹\»^P‰ÍÜDy p™.sM2.Œ«ÞLr³;]=ž¼Þ <?nm6P^šKq-àZÀµ€k×Õg›ÜËüÊ+¯´ÞGÜІ³Ïù¾b¬<>Z5ñ‚N“f¯æˆ ƒõhjÚ 1ÓöFó|ùΘ1™™žå‰™ â7'¿Ãÿ['ûž’ñ™ÇPüm‘ pŽÏ¤:2ÛWºÐÏ ¨P¼E2~óÐît„5lkHð&ówbfr¢dóøØØ&ˆKÂfY+!7sF†„¡‰U+‹›F $) ,Þš6Ò:s7f[¼žEXõD¡,‘aºÉï€4é¥äÖ^ôXH2æO½˜,#=vìÿÛûøªª+ï !!$‰¼kAK"%LADR0*„ Ö‹cQGÔiññóÑÏúYÐ~­t,ëƒ~>>GéO°Ì¨S…1Š¢ª€‚4ä™$äo¯sï:wÝ}î½ ï°¶ž»×^û¿öÞçÏÉý³Ï9ûì÷ï9í´ÓNv̆ðí§ÄÎêN*Ê€2ÐþúÎ¥ÿÚãÖÎhÊNe<é‹iÓKÝŸzê)Ä{%5’;´;Þ+l^)ù†í_‚.ÝšKèÌYH'7Ö4³;¾Ù¥§£Ï™aäwZuçûOãÎå·aKͯ10¹›×£WgÓÁΕøû¡»_ÁÞ§¢Gr#*÷mÃ'›«z]dHÎ}æ]Ü4jRè ªÊ"<ñ zÙù™4DM§ 4cI¯C¥uÉHd’¸ìÒ¥‹÷~Yú×"Ïbr=$Do²oÒ>vÔUãƒbIáÓe~p÷ý¸lÀÑ[L“/ÓàdûØí«ö¤ (Ê€2ph)ªBÇÕ­šr̲ñ H¼Ó¦{¾øâ \zé¥;v¬÷Ä® üèã¿`Xÿ$4õMGz×s<‘YW]¾/è˜ÜÙܿ٠ýûwFïžfZ¸óZ¼ÿq/L ­Iê7WcÞ‰nÞŽ’²F ì›!#B—ß7üé!¬ÇÝøæa#2=´¹¬Þc Ɔ ~<ž|Eó'a”y•ø¶U/a¹yï9%}†8BÑ©d‘xÊÊÊ­pðÙgŸy—ÅIhÒåN4»I3š=ÍLùw¿û]/§YÎ㑊W‘Y>¿Y|!P±É‘qñhŸÊ€2  ('4RçÉJ\ý$4e#ܸí“Ûu“PN3>+V¬­ítÕUWáÌ3ÏŒŠë•„Ì^y¨­Ú¬>ß3kö÷êC—ÏÍÅs³ÌQuÅ6T”n6³œ‘‘}6ÒöÒ¬MtxÅ<<8~F÷{³.Ç7MB_3³Yôú*ä.ü%úFÃýRƒyÎhü‚g1ú…™xæím55 ÿ1ù1,x}96L|ÌÇ©qj1ÀKH :Ô{ué¦M›PQQá Nº¤žžžî Qšµ?ï¼ó¼ÙNºmäø¤j|ôV1&̹ÅÅ@Ïèqô&3Ï.j¯Ê€2  (G’Öy¬ñ8g¿«/ÆøuABÓÕˆËÇ ºêüN5vïÞE‹á†nýxsJIî€ÔôžÞåñäNÞìe‡Ž‘Ùzâ¼¾¶Ì»”ÞÁÌÒ¤vîa.O¶šHˆûVVàò¥¿CÞ´Éxrî,•ýæª;²¹3gn§åâÜE«ðÐY¸“f@Çœ‰›œxuž ðâët¯æ€еkWï~MšáLKKóf:¥}|9©BU °fÉÿEõˆ ¾]„+ïþ5®8Š—ÎïþjïÊ€2  œš Е4ºrFÏЭKô[EWàh¢ƒn[¤«nôÛDï>§«pdS=M8é<ÖxœŒõŸB˜¨º ¡i•e§A˜„ý½{÷vÎhv=ý{xÿÝ7ñ­ìÓ–!ËÜ“™Ü©‹7{I76T¡¢dìÛ€Rsyü³­@ÞÈóúÍÀˆ©óÐ\6×eÆsÞƒë ÆcÎÜÿÄÎ[GÎj–Ö¥ çê9Àô‰¸x"0ù‰Mè›Ñ#A5¢ ȇ]èžL:~<èÍj%²þøS” Z·ásÿ —õòOÿ?X°ê+\13´`ïÑý#.(‘­IP”eàè1@B’d÷îݽ§Ëù·ˆ„&MŒP=?uN“"tuŽêþ>é¼ ‹kÐtýBØ>»Ü¢C—ƒÔt¬{4·ílÄž_ 3höpp¿Q’&Ñ%sJ´X{SS êªö¡¼¬û«ê±«ì"œåÕF>öm^‡Ònƒ1ÄÜŸI‰ñ9;3¹“oæNÆÄ{†âõû Ð׬yT[¾ïX‚ &Œò°¨5wbf^„'ÆsV ~0¨]ªÓÏS–P”ÓÉÚ­[7OTÉep#îÒqº˜Ûö˜•úd¢î@%Òº§“¾iÿモÝÔN”e@h¯ ´IÛ1­šR½r§ÒGmÚeî'0Oä©óîÉEøî”™¨®ÜŒ¬ÁfQö®¨9¸Ó3½z²±¾Ò\>/G÷^;Ñ-{(>ÝøéslT¿»ßy¹s–û¾ñæ)ó[Fõ0O‘OÂÞ¢Wðã¼iè÷ ¿¹·-LJ~òœüi¸zQ!úì쎋éA¡Ú6ôdzÈÖÏS‹Q,$iÏIlÒåš$®ø’ÕI•mJÅÅ7߈Ÿß{î2B³|ÿYøéÃŽí´7e@P”“Öx7üêªË IDATz3Pr§®Q*§¥÷BU§¯ÍÒG)Ø¿çl-Ž‚ø…d˜fs§ddö°×4r#Õ« HXd’oïÞ½X½z5haö~ýúy³œTÏ›Œ;æ¶yˆ.33ò Ý1ï_;T”e@8™ '5`Î ò‡Ö{,î¦ã2ç-l‡üa¶ëìò¤Þ?þÛŠ¿0—±ŸEFçz¤§šeb½ÕÖ'™'j“PY“ŠŽ²qÎïàÚëGØÍhY8â Ð,¥>øào†“–ëêÛ·¯gÆ…µcÛS™ÏñSm¿ÛÓw¨û¢ ('/ü··¨¨È{¯9ÝÊUYYé=D/ÉÍÍŸqãbí`Ë8_yµ#EæÂ·š-"»!»ì9<=Í{å•WšFhÓ¤ œ ð:šr4ýë_ýWM–••aëÖ­6,ôd7 /‰oÏ6ÿ‘kÏû¨û¦ (ÊÀ‰È€üûKÏÂ|ùå—Þª(ìÛ´heŸ¼¼<ú;3bÄïwIþ^ù•- [ïÙå–ÂzY¸pX&‹JrKÛU¶Bµ¨ ´ä,%½N•É•'.½ÿü“O>‰òµVt•e@PŽü2ÙÿÙgŸí½™~Ÿh"aàÀþl¦üÍ’1Æ”¶´Â¢‹ñf4£Ñ-K<ˆ–5GÑóMI#¾Þ}›·7bcqF é„¿Ö gôÐçh"íÚt,6é_Œ#GŽô¾Ý·o_Ô¢¸Œ hBÝÊ€2  (ÊÀcÀõ›sþùç{—ÐéwŠêù£s)(Ñ{NL[…&7Fƒ`Û1Æ#ã*­hBiÅ!¬ýkHX~þMöÔ5Ã<„îõѪüîõƒÈ;³† HÁy“Ñ¿gGôè®ÂóÈ|ÚJ{` øÍ'ñĪær B¯ ë=·Ì¼ú z{øvu”e@hÉÍV²ìÙ³'ÆŒãÍl’×y&LÀ¬¦Ôw,:¥ÏîЩ [+4¹î:‘¶Ýé)Ï{ʬ}Ùx{ë¡cg cfdvêà+Ü´nÀ¡Æfl¬nÀ'E xåã$d›úîÊ<"ýëF*ÍlX­yN+#3æ%E‡÷­ÃónÀ5׎2KÎ'žö®{ …UÃ1uì·Rä Ë@ÏÜK1£­šÉذäQ¼Ñi¢ŠÌöÛÒ)Ê€2pø °È¤–HLžqÆ^Η×YdRN>+I}çÒÜ]Œw¦%;•u<é;bö¦í 8ØÐŒÓ3“Ð33=3: G×$t1/oî’Ҍӌø<Ý”{d%£_ŸdtÍî0ËÙɼ2ò:±žaÒy×aéº}6*nyÝ#fÊùçÆÅµP»$¡›ùWGÏžY蜒uôžÌÃL5ÛßÂÌéï ¦•íìxk2¦™0Míƒô>0lÈ êY‹O÷ÆüéÃÛÇŽé^(Ê€2  ø ȉșʆ†OLÚ3™,:BÓoÓmÖ­š²S).ƒ ñm¶K4ão[›°åÓ&¯o@Åö&t¬>„ŒÔHëЄÓ;%¡cC’y3PvïmÂö]M8X-‡éštÛƒooAÅÞMxvôó˜–÷,Z+5ÿp=ÖÿÓÙ‘F¶j±ÄÉüÅœ;ßw.¿ [jÌ4vC6-Ä™FDvJ¡yÌ4ó®øV¦Ô‹“fÔ¼¦vÄ@ þ;úßxNÎùþvôUè®(Ê€2pâ’š§2‰OZC“g.=ç$2 c%·Š¾e2®þ š®ÆmŸlÜ®³ÆzxÅFsYœv¿¦()kƦ/›°tC=:™‹ç;÷'á½Ï°ù›&ì,ª 0¹sê[ðC…ÉNëÑ=†àò)·™ÒV”îߌÛógcéÒßx÷2<²Î4Ô¸/ÞSà•iêùö%ïò«ÍñÍêgðøª¡·añìóB¸ónLJûx&µ¾øs?>©` >]:3Í«ÖWÍÉ5þÙØ~Wz¨!³e¥Æ,1ûhÚHÎÀ9È,Ixc'·[‰gçãç+wbó‹·cöo^3ãÌ÷ú9ïö±yÃkÈÏÚ>òÆVnÈ=€Kn§/ú3¹fœKîñÇ™ûl³Æå5R¹\ÞϤëŽÈLkdp'§UWWç=e¾ÿ~”””`Ïž=صk—·‘M½%ˆêÊË˽“œÞ^SÓÚ¹å#ÇOõæ?â…â qÕ0s¿‰&e@P”vÇ Fž¥¤e÷H`îÞ½¥¥¥ YMžÙ$‘)7‡ÐdÇsö»¸cŒ_t «—tÕù®Ñdzé`$1m”Œ8Gßý°³ÌÌ`î«2—Ô3бC3Ìÿ†\SoDfã!Z(†?éçõÀþ2TnûO| ˜µƒ:VãëUOâ±Ò»QTü ÷ÊÀ?ÍÂôO`KÅRô,+Äu.Äܬb,žÔÕ%ŸbMmƒi©Ñà`Núr44O¦%Èýñ˨Yv-ÊÞ¸£§?†g×ãšó²P¶§=ûǃ¹Obéå¯ã­»Ç˜Waò¨BùÀ+æáÁñƒ0ºßó˜µp9¸iúöމã—ãÎç‹0aÞ(4n{ÓŸÖü²/^üOÎ} é/aï–½øá ‰úØ ¼mì_¾{ò&þ'~Ü|«¹ÛÓ<î±þ~,Úþ ŠË~ŠM¿Ÿ‰y÷bTÃbt~ËŒsæ§x»¸ö*â€s³Ð°xRÔàv®^lÆp9Š>E¯Ê}hhõôhTsí¢@ï4ïÒ¥‹y=jw¤¤¤øbN\zÍ*Õ“ŸrZ—x§:ù¯M²eùèSO¼³§ÿ *3.ÓÚº2  (Ç‹úÙ²e è¥!4±AÂ’&ÌèwˆÖÔ¤ß%ÊÙ¦·‘È ˜!1ÅsÚ5·È a£ê‚„f¢üÈNi5®±ÑtCÆš¡“ˆ¤<™(7Â3¥©#™ëáIéIhN3¤ÿL]S³{hô–óû/€ûM>kÁ+øæŽIHn\šé|û­‡1‚^uÞ¸¯ º`Í10ÃP”‘ûŽGÞ3«±ÐM?™ÙÌ7 ãÿ÷ß³5Ÿ›éÊå˜{!k±–˜õ fŒêï½~©oê¹gdÙ½{¢G•­”6÷­¬ÀåK‡¼i“ˆœ…¢²ÅøÁ½bÎ÷ÇV#4KOn{£Lø†:3ê» ñëkG˜†*Q Lxvòf ¶úï¼ÆC_p±`ù}SA½öŸ9¸ó”Ô4bgî‚5È÷Æ—aîBÌÍ}[F ͬÔÞtLšÙ æÍÁ„¯yý8 Xd3¡Yý7¬«ÉÄŒ‘}cÔ-C?ûì³–Nõ(Ê€2   ÚÜoqq±ëSñiã[”[#4Šk‘lŸ]np¼tæ‚5e˜7JÜ¡æ]•.þ cª .-%BOŠ7ðzOÇFö!„›\0ÿ4¾'ª¦â†ù½=1g®ò›ÔÉ™<@’/vÊÀˆ©óÐ\6×eÆsÞƒ__< ³0O/ù>>ÿð– ¼&HSçvïâ7GZ¼Ö̲R¢º¨”{šyO|8y•¥¦Ðhîe5Yš_c ÔJe‹ø´!ע曼ôô#˜˜Ûw//ÆÃRt›(M'8éÃ0ñü#>Hú×±&e@P”vËÀai»ˆ’ŠÏTµÜ©ôQ v9~« :k&H—ÏÓÍ“ææÌnÝn]: K·ŽÈìÖŒsɼ¼Ô\†4#8dp fk4×Ü“;F‰f.£t•«ÿäA˜6˜üë?áºç®Efå<3wf¼ð{ODú!G·yN\¹ ‹nš€!†ÍÊr’²i¸À«¸Ko9Ss2±ÏÜ@šÙ7ÙýÌ=šªü&¤±oó:”vŒ!G‰Z:;ÓìprÌ^8y3gšÙÓ'ðì@_{8þ±F<®ÿü÷æ«1iH&6üÏ &ärœ‘‘†Þ“gaý´ÅØ0s1r2*±âñ9ÀŒW0Ôt±ž6yù¶Í¨ÈÊÁî[„ºUÏcÑæÝ*4?m1yF“b¥Ý–¶ŽgŒ Íãɾö­ (ÊÀg€57,…”]ǘÀoÕÃ+øÇ[‘;w9.Ÿw¥ÿ´pJh “áÞ\¤Q¥~æRz$•â™fa²§Çcù–EèK•SçcùÝW!·[ø+7Öÿqª×Š×~X½îXõ¿‘;óùpsæ>ÐçÏ‹4­V›à¶9³´D›ú8Atª&e@P”vÀ­ñ¤”u í°P%^6&°–8ªã2ç2ö°í~”¿(EáÆ2¤›‡/ºd¤"ÙˆÅsÙ·ƒù¯Þ\ ®8Ѐ¥U¨­ªÅàìLŸ–ee´ÈDÚ,£'‰ìäùWF{3rÌý’Íø©yZ«Á, ”aîÕ¤lÍSØ`•Q«Þõg3yifŸkÆõ‹—bp<Û˜†üyÏ¡áÖE¨iˆø3òÍeñš[Í%îdï -²ÓœÙËÐp½Yœ¾Òå´ dúm™ÙÍíÍ ã üÇÅž<ôÂrf¯Ä§~˜ýidß2rnE3WæÌ67Ï6Coôf\Sh!x?.“^‰†û+£ÆIÕ9sVù³š9?zÍ3~Êƹ¿Ô>püæNAƒï±,**òÞkN‚‘žò£‚è&ëÜÜ\Œ7®3'ó,¦ÜÚOMÊ€2  (í’ÒxRF„Fôîù[èÙXtÑ%ÇeΣчYúçË3qq^Lù[ ^{¯ŸWbÇF¤ddãÀó@KñAœžšŒ1ƒÓpÙ¨o!ç¬ttÏèˆG`4iFT±([¿èRä™Kè”^ØtnÔ^Iœ¬H6‚QèÅP•yò‹Û”X² Ÿi¶èT‹?þd®÷Ð]žoK iÐÛ†\ñÎqÚÀä4!¤íÊS³Ì"“ö>''Ç{ìÁƒ}2è)¿áÇ{OüùΰA3™O9Û6æd(Ó“‹š”e@PÚ.ñ¤¬Èï·š‰°d7d—i£U˜.ipî€4oûÁ…™ødK5ÞßP×Ö”ãôôfüÃ¥=0rH¾;øè®¹3â¦åøfrR²ú™§ÆÛ¨øZµç NÃ5Ë+0Ãõ¤:C4?æ Ðròõ^$¸òòòPXXèeĈÞ’Rr%ÏhÊœëN¦\g4O¦oKǪ (Ê@ آÒÖ{vÙÙp<µ$a›;¶ËÎކsø tÐvÓ”ÞG£ùà6Í"ê¡eŠ‚!G«†fL5X ð‚¸rTgŸ}66oÞ ZÄ=++ ôŨKlÊØ“ÕV¡y²~s:ne@PbÀÖ{v9f#ñ„&‹JjDÚ®rÌŽ´Rh ÈMÞ¿óÏ?ß»„>räHOd2†sÆì3™¼tª&e@P”vÇ@ ´õ`Ì'4c›JD<œÖ+íš,${öì‰1cÆ€ròÑÌgôƒÝØhÞdlúÝo2ùŽ)ðòÿ{ÛóŒÚu˜Ü9×WbNN×èº6•jñÖ´é¨ý ìäšµkÛù|ü¶²cæ…™K®ë†™Ï "Ç/4oIºÏ$eà€áèþÑ™ØñÖdL«ýÍí@h’`äÊúúzs ÖƒÖЬ®®6ÿ(êàýCŠr:Þ)§ã’bÚ›Ðloû#Ž`5•e@8é8‚+H'yþ¸ú/HhÊF¸qÛ'·ë8&0/--ÅSO=å-r=yòdtïn^^JKjÑXš5¡몃5æ AixçuÞ¢ì£FGyy5º_“¢´¥¡é)O«Mz×y¹´y¤RjŽié8®Wݸy R†.Ãúšeȉ5©Ú¸)CÈ®Ál¦ ÃËE›Ð+VL+IªûÆ<ø:Ê~:¨1oQ¢7*™¥é§mZÆ^áå™R/BÎñ$¬•û NrË–-(++CMMyûRƒ'.i‘vZS“ÞN9Û4£I¢Œ°í)©ÐlOߦî‹2  (>¬óXãqÎ~( Æø. &›6ºÍ­[‰RzÍ7ç$¯¨L/:&›¶³V®\ù”É5)Ê@è©tú‡ TÚÈþÛßþ'J«•e@P”£ÇÀÕW_}£iý+³Õ›­Îl4;G6mdÓLÙtYYn4#È NOtÍhšú„’ª^@×®Gä:lB+H8™ KìœèÞbÚ À.Í•e@P”ãÍ@ P¿Åxiæ2ÑÔb:ÔÚ>»œhÛŠS”e@P”e@8ñ8,mס)Õ+w*}D]>ñèÒ)Ê€2  (Ê€2  1À륶³ë˜'*4톫ÓÀÑh…2  (Ê€2  (ÊÀñdÀÖxRʺ„Æh MÙ˜lÀnX⨎˜ËXµ•e@P”e@PN>HãI ¤ó‚üÞär·ecÒoÛ6ŽËœÛø#PnÂæ·ßBíw.ÂðÞô »L¦n¥©;×U'q'ž]¾ù]ü¥v0ò‡÷Nxpm‰I¸q*Ê€2  ('›6mÂgŸ}†]»v¡ªªÊ,uØ}úôÁw¾ó :Ô¹'u•å¨nLFjz:ÒSiq%µEÏ´%&¡ýu‰Ç G~¾…ÐL¤g»¡¨rà[Bê¾ÀÏÆ]7Â=äM˜…[ç^s2c|Áu1cÜøÉÊ5ž^ƒï¾ Oý7r{ÒªJ2ÕࣻîCýÓvÔI܉gïþèßpWýÓX“Û3áÁµ%&áÆ¨ (Ê€2  œ$ ¬^½EEEÞ‹2xÈôv6ÚvìØ’’ŒcÖvöSÖ<n{¼Ð÷Üñ‡•¸úœt¿||¶è™¶Ä$´—¶¨ŒÒ{¦»ìl4ÞòF²¶¹c»ìì@:i1—Y/Å”Þ;°pêmøÍ¹cðÛ«Ï‘h;õ,<ô‡—^½Ó SmkL/¢#ºçûãíMtë'D)µKµRï·%æ„ØY„2  (Ê€2p„ؼys”Èìׯì½¥D&­KL"4;;;òÂò¿x"óá¥+‘ÿ­T”£6Û¾Jz„ئfÚ¢gÚÓªÁÙzÏ.Çl̾GÓ³¨$¿´]e/–Úª "óôÞèÞo8h2û€‡­Â›ÜŒW·T…âj·`þŒùØ\eک݃ÿZø*öšWLR›žvæöwáÕù30zôh̸ù>xuKx¬ÑchÜ·OÏã˜Ñá±Õbã›O{ýQŸ£ç­@õ#Æ1zÆcØXÖj3Èß\‹O^jgÆÍxtANKaÎDÝèX±±,<>áoñšwê×cC=ôhÇÀƽKåôÝ`ÆŒH7—Â?øàlÛ¶Íûý¤Ké„ãï¿ñ`hýâûIst@vÿ³Ð¯+½"8Z4K-bÚß·ñMÌ£ß~oc-áÖµû>1:&„1ÊH+$¨Zè™ -!ü-b¸¿VæÛ·o÷Æé‰¹ÐG ´õ iiî Âo™v&ãïb*ÞZöÊ÷¿'q=–Nb©®Æ­E¨o:ä-X¤&lß²MŸ”Të¾Ä…‡B‹Y{R×ó'aíï§`Áö;°ì«ºë}Ü{M¡o÷_²a~ûæ,[ý<2«ËÑ”Fm™¥î«·c«y?zŸ$ư¿¿òFü¡à^,[y ºÕU¢.5 ¥þ;n|à%Üûô2\2¨*Ëë–t>nÆ‘ö(V¯kÄëŽ?]° ÿè\¿ìW¸wÉãòs:j‘íëé÷¸Ó/?޻ͥx kº i×*„dÁRünc*.–Š>iMX#Æ‹×e@P”eàc€ž.ÿ裼½þê+z57@3š—\r RRR°fÍÏG8ÖžÃ|ô’ÿµæu Ÿ7½ñ9®’¬E¼ 4¤Ðo57  šèÍß&»x"ò2Ì|T~>nÊ>Ãô¿×­ …ô‚[ÏhŒ˜1‘†FûSŠÌúúz›'Ù˜KÿÅn<\ïM»Ù©¬ãH_ ›.——›Ë×Õ%غÍÜT‰NÞì ×~¹ Mu»ñò}ÿlæñºÄVÀ{b˜yøçW¯¼‡ró­îX» ŒP ?3DÍù©rw1ÊÓâŠæáN³z[©_·eí—¨lªÆ'/ÿ ¿2^ŠOýÖ¹æ¢>°ø•wLÛæmñær{yu2r/ºX¶+·–›Ú&”—˜ýèxÈ]¸vº8çœsúd›'ׂüHEÿóòPô«?akeªw¬Å"ºGÓxj¨ÂPÓõ[^[úd~bŘ¡hR”e@PNAz÷îíí5‹M*|üñǞؼ袋¼ÙNò1Žì¦òb|V\b~ÅEê–æ\Zä[¹ôÔúKxuåV/®º¼ÕMáßlK$‡5ÄÚ¯j0Àh‚s΄ìtsu4HÄÒ3m‰ñ÷$¾AKÑåršÉ$‘I—Ïc¤6ë¿Ö M9).ƒ ñ Åž¼¥cò¯Àýk'àÁ§' Óx/¸áz>4cÆ`çÈ[ÌSØæ_áH§œ:uc+ãîxyËîÇD³lÁÔg?7œÝiïÚ%(ȧ›ró± hn›@­.¸ ƒ Â%còñûÒ‘¸&ä65½qòÇ0è÷˜¶G›±NÄŸ·×áôÑÿ‚Ço„{¦O4mÁÄþÇ\PïˆÑÿ² w¦/ÀK7 çßõf ?0ð²;0+ï%L¿dò§>‹t1pêã‰;²0çŠq^[còŽb3‹+ÆÛýP”e@PN1† æ=ücï6 OšÙ¬­­õê Ç©®ì/øçk®À‰XP5 /Lnªch‘ÓÇbÙãwà÷B¿óÁ׿·Ù­ HC<ެ_Í ÷1w­(6íé…Xz¦-1¼§±óbó´½-2ßyç;Hê,(¿ ûø! ™”K¼lCöÁ}z‚ÑÄø‰w’vâ YÇ>Æî0 O¤”óÓëRd’MýqŸÆôµË~iû€8†Œ‘vœ0¿ZÆHÛÄ1dŒ´ã„ùÕ2FÚ> Ž!c¤'̯–1Òöq #í8a~µŒ‘¶ˆcÈiÇ ó«eŒ´}@CÆH;N˜_-c¤íâ2FÚqÂüj#mÇ1ÒŽæWËiû€8†Œ‘vœ0¿ZÆHÛÄ1dŒ´ã„ùÕ2FÚ> Ž!c¤'̯–1Òöq #í8a~µŒ‘¶ˆcÈiÇ ó«eŒ´}@CÆH;N˜_-c¤íâ2FÚqÂüj#mÇ1ÒŽæWËiû€8†Œ‘vœ0¿ZÆHÛÄ1dŒ´ã„ùÕ2FÚ> Ž!cئœ6)4¥Øä%‹x¦’Ä$%Âp,•ɦ$}!OH³¾E"”¸A»^vL*ó&ËÒfÑHmÉvÙÏ9Õs’8Û–xª“e1`s&y‘|)züÈãA'A¶Äëñ£Ç<‚Žé—x=~ôø‘ǃ(C6ÍdRaxVÓ˜~b9‚l»ÎŽ#ÛÒøhn•¿ò8 ²õøÑãG‘£'š‰‘¶?Ñ<)äqdëñ£Ç<6"GO4/Cz‹k4Ö`¬ÕdNq\&›Ë”s ²¹>*—B“)gqGE²i@r£ I>j‡rNTÇí†mª—6•[›4>ö÷OåOù‹uÞëñ›=ôüÑó'ö9«VÏŸ£{þ¿´‘ãœô NΩžmcFÙGÉÎ¥mÂ0®Å=šr%à`9Xé#?”N:ÚhÐoL¯žE&•í““°¶p‰&WþôøIôli‰ÓóGÏ=Zž‰zôüÑóçD<踤ÄʤÍXT²n£{4Cu”Ë>Ê©Ìíqn\^²ËžSÎh†q>˜dN6mÜ)Ù4Ž´±MDófL`„g?= D)Þ—Â1!tèÓå“õÒva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òf,å”H»±€¤œµÙ\–6 OŠç-Hlr‚„&£8Pv@‚’êxð,8YLŽêÉOÂ’pŒá¶ã Mâ'Ši Þ ¯üéñcŸ‰—õüÑóGÏŸÄÏ©çž?Çëü¡c7ЬÛ8gɹÄ1†Ú ÄmÉr¨ÆñOh5è Hò“f2y0TG6c('ŒÄ±mÜ~¢—ß„ \_ã£â)Èún]ß“Æëñë:.ôø‰f è< òGGëùÄS_ù‹f ˆ§ t´A<ù4Ú¤~³g1¥ÈäÙLÂÓF‰c¹-ÎCµŸ±„&5@IædSG$i@œÓ •)§ȃ°¦š‰ü™&5)Ê€2  (Ê€2  ´’Öb¬á8gÉ“sÖp”“qÇíÑ0ȦÄy¨$>]B“Á$Éæœ;¢2‹MöÑ`ÈÏù¹mÆ’¸dɹqy1”ËÄýJ_klwóš(‡ÊŸòGçr[“?züèñÓÖ³'ò»ÛÖôüÓóÏ>ÿ蘠D9i2ÎYÃQ.E&Û\Ÿ¨Ø4Í´œ,©ÒN4¹ÑÀypdÓX`Ó$å„¡vË¢’îÑd›ây3¦&e@P”e@P”£Ä€Ôsd“xd&…&k;›Rd²ðä8»M*·H±„&ƒ] qg$i”Ç6 KªcI6 MÂM‰Ú Dñl{ŽÕ%Šuá4^ùs‰úôøÑã'ÑcÅ…ÓãG×q‘¨O=~=V$Žl>vH¿Q¢œü”“>#›r*Ó$"m\G9o„“í±mÜîOhrÜ0uĉĉê©-z;Ùò s˜ÆíùYLr΂“ê)–ýT–ÉUgûì²ÆGpqcûìr$ÚýÝØx»¬ñ\ÜØ>»‰Vþ]ÜØ>»¬üEpqcûìr$Z?7¶Ï.+\ÜØ>»‰ÖãÏÅí³Ë’?Ön„¡D9k8ªã2çRpR=‹N²y#¬ÜLÑl¡IAv"áG~jœlÊ©,!DZhd, NÂÑFu4xŽc,—M•Ÿ¸=WìþýÀ°¡ñ!"”?ûÈ•õø‰œ‡.†ôüÑó‡п®³Côïgð¹AG̉ø÷“ÇD9é3JlSÎ6ÕÑFÂ’|,8ÙÏ9ã)§D¹½yôa M¿BÜýÑ¡NX ’M‰êIPÊœ0Œç?VäãXò±ŸâØ6¦3É1ØWþôø±ÏŠè²ž?!>\ljþýп®ãBžAzþèùC ¸Ž““íï—g´oä£2çd³È¤\úÙ6nÏOå˜)–дƒ©cŠ2§Æ™|îœïÉ$?m,:y6“ñ,:© NÔ׳ϕá‚üvA¸ ¿ÆG3ÄS?::tpº¾g×ãßu\èñÍ@ÐyäŽÖó/ˆ§ ¿òÍ@OAþèh=þ‚x òIþ¨Òp”ȦÄ>öSnoŒqåäc¿óïwФ @eJœó€¨Ì‚‘mÊ)–&Ùr3E¿L¶+qT'mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Òva]>#mÖå“1Ò&,•i£Ä¶“¾#ŸÌ¥mã©-J¤ó¨®E¢ ;±Oæl³¨d)Ëì#,ûÉ–÷Å>*ÓÀ¨œh²ñv9^;6Þ.k|ll¾ìrìè–ß·Æëñ¯ç¼³&RoŸ/v9‚t[6Þ.»£"^o—#H·eãí²;*âµñv9‚t[6Þ.»£"^o—#H·eãí²;*âµñv9‚t[6Þ.»£"^o—#H·eãí²;*âµñv9‚t[6Þ.»£"^o—#H·eãí²;*âµñv9‚t[$éï-ÅQ¢2%*K—Y`R™l‰—6ÇÚ¹ qߣI@ÿHÅqcÔa(g ‰L®7¦?³ÉõÜ&ç„ JCõÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~#mT–1ÒÂÛ~Ã6å”8g›Ê죜4-$¹žýK9%®ç<ä5ŸA—ÎÐ" \A‘PtmÃu²ÌíRn MÂÙ>‰gk¼ò§ÇO¼³$¸^Ï=ôü >?âÕèù£çÏÉpþÐq*—)çêÙÊ%†mÊ)1²ŽmÊãÙÔ_F'›ñ¶í*“vLƯ5Iã•?=~ZsÆDcõüÑóGÏŸès¢5%=ôü9QÏ:6e’e¶y¶’Ë”'bs»Œå²—Ç#DÖ³+·ë¨—Oú½è‡2  (Ê€2  (ÊÀQcÀ‚\æœ:f›riÛu²lÛTö‹@ßá0l —íœBcù¸iÆp¹59í´Æ·†±h¬ò§Çž?ÑçDkJzþèù£çOkΘh¬ž?'ÖùCß'—mûd™âdYÚܦŸ·æ¤‘ØDlîDbÙÇy¬:Æh® (Ê€2  (Ê€2Ðvb‰AWô%bެµBÏ…·}vYv«NâÔV”e@P”e@8: Hñh÷`×Ùe»|v;^ùp…_¬øXuÎÁ¨SP”e@P”eà¸0K<ƪ‹9Xz]¤&e@P”e@P”S›6‹ÉS›6Ý{e@P”e@P”e@P”e@P”e@h? ü0ÐQ3œ ˆpIEND®B`‚vlfeat/docsrc/images/using-vs-all-configurations.png0000644000175000017500000003577612236612215021570 0ustar dimadima‰PNG  IHDRíôÎdg pHYsÄÄ•+ IDATxœíÝß»'I]ØñúæÙÇ‹ þŸˆVvwfˆÊŒJtçqñj/ö&¹Èe.*ë‚g,ËjŒ®ºøäú\œ«äˆš ‰s||dÎ%@ŒÑÄ£o¿¹è™Ú:õãÓŸê®î®ê~¿žÝy¾§¿ÕUÕÝõíþtuu÷îîÛ 5ïzï0Æ\ºrméšd8<<4Æ<Ðýq~vºhe²=`?½ù‰ç~±Ûcv÷ÿè>íœÏáŸÆìvÎçûyÈó½ôÏÅäîÿñIfw¡ìdá‰e‰d³,±¤eñsˆT*QM¤×©Sc¿þÉl†HíbÛB\–‹+?²6¼e‰¬€œe‘—Ê«]¸h^jym¥[g¢¹Ë’¬fâWÙý¿²Ø¶èù•Å 7Œÿ‹ ëO”þ•ÅÚcl[ôüÊåËâ}Ï8½,NBïËø²ˆ¿›Ø¶¸˜:(!Ñæ´¿²‹ 3ø•]¨zꇒ^oR߯Ì_–ÈrˆËâmÚį,Ù¸Ò¿²x‹¸0³Ÿ\ت©µ/üYo©‚å×ìâ2–%²X²xÍjRoüº»ÿ`¶"Êz ? @Ÿþ_¯O|ãÆõKǃ粈c@Êá¶GÇ'ãçê¨â˜¿ûÜ Æ˜üúŸ4Æüí‹¿ÑM|ùCïÖÌ;À_ý[cÌ·\}ßDù€\¾zÝ~žè9/yý1û¹ß0Ƽü¡Ÿ4Ƹã|d_¾û¼1æ/ÿTVYƘ¿ºóËÆ˜Wæ4ùG¿hŒùŽïÿ€7ýþáÇÜ?¿ëÚ“¹•ÉõÅß{Úóº}Z“øsÿñÃõ™ jÀ|º ¦ _._½~ùêõÞPÆ%5ÅSõ8ßo¹ú¾¬ ¦×w¾ùÉï¼ö¤1æ/N?Ö›x~¯ëG^ÿÖc^üÝ-]æfƒžîÏÞ Æ„ý1_ûüÇ1/{ðÆ˜¿û¯/cþÑ÷¾ËKóÕ£ë’ùê‹¿n'~ýÃ÷.3}å3¿f'~Ã¥÷ÚÏs÷WM¢Wæÿ~úWìço¾ò3ö³Ûó¥Oý;ý[ÿéû1ÿûÉÍäÛ>˜ÿÕõÊüÀò\qûYcÌ«®ÿÜŸß~öUן2Æü?ø¨ýöÕ?ô!cÌŸý— ]#ßó–{'úÉ_°ÿÉ?ûycÌûýCcÌkäà‹¿øÚûÝ0_èze}ú ·Œ1>zhŒùüÍcÌ÷ÞøÓçÅßy) yøÇîÕí3ŸxÊMséÇŸ5ÆœÿÖK=L—»¥ýÉxi ¼ñ'~±·8J±ñ‡&qçê:o¼LR†ôǸAÌË~wÁü¿ÏÞ‹i^ñÈ{^ñÈ{^qé=Ƙ/Ÿ?oçúÆË? bþúÓ¿bŒùæ7þô7_ù7ˆq}éS¿lŒyå›Þÿ­oz¿1æÿüñK1Í·}ßÏ~Û÷ý¬¹E©óßÿÞ ÆúóÛÏÞûð5Æ|÷>õÝ?ø”¹Á¼ú‡?ü=?üacÌÿäGŒ1úÉc^ó–ŸMÁü§—"’/þþ¡›ùë~ôé×=ú´²&¡‡ÞöÌÃo{æá{ÆóÙß~ÊÜbyû³¼ýY›¬ b.?ö±.‚¹{ò¤¹ļáϽá'ž#ˆ,"+ˆéØÄš¹üþ˜—=øÎ¯}þã]¯Œ‰uÆx¾úÙ_÷¦¸ý1Qó'¿j?Óº·Š–Û%3Œ%ó]מ´ã{^uýçŒ1úá>–Û%c½öGŒ¹ðÀ¦Îë=ü­ƒÏß:èþ|ðÆ/„å}îwïuö<ôÖgºê¸ý1½ºðÅÓE3Ä1€V¸×•zC™±÷]¿üáw»õ나W<ò³3_94ßø†Ÿ2Á5^ù¦÷_|Œ`¶ï|ó“Ÿû8ÊkÞòóá;Çèǘû+§ b~Û3fg>ûÛý½œdŒ1»ÝÞñœ½®ôéÿBÀüroSʹ®Ô Ž1ŠÎdéÇc¼q(§,å ïxî ïxnž²¹ƒ]4‰Mp]Iž}xÌËz÷W_üu÷ºÒ×?òžW<òž¯|æ×¼KKßpù½_¾û|jœï7½ñ§ÿúÓ¿b‡úF‡È¼òMïûÒ§~9êúöïÿÀ_þÑ/*Çùz^õƒOýù|ÔõíÆùvþì?ßë)éÆù¾æ-þÓO~äâPß/·×þèÓ_ü½§í8߬štzÛ3/þ·>{ñÒÒ#oÿèg>ñÔg>ñsîÄK?þ±óßzÒ½®tÙéŒ1\W´ ìzéíÎÙݽsûÒ•kçg§¼'2º,ÝhßWÿð‡#ï óþ‘–ų»wËҽΘï‰ì¢™K?þl°Äþêà=‘ñÖÙròÚJ·ÎDs –%YÍį,²-úe±mÑó+‹ nÞÉ{"“ËâMêû•ñžÈÔ_­½'ò_¼ùú'óÞºu˾—`À\oüº»?y/A{Üû®»›®¨AôÕÍÕ!ŽéñêúHvo|ÌèœyûG#ç,êÆ³ÍeÇ€¼7QO:—Uõ{ /õÇüáÑ¿\°€)íÅ?VÑZEZEZEZEZEZEZEZEZEZEZEZõ@’í9:>Yº Ð:888?;]ºÃÑØ€Rz÷—®\›­2éÆ/<ÿœ&%qLÜ­[·–®ú)[yåhlÀxʽAÓ§=Û‘u‚G“tóæÍ¥«°9Y»˜w½÷ƒÓÕdf46À³Ù½rÇ .ÊŽßÃÃék`Yì  AƒêÐñ  ÃÞ½¸_ ´Š8fa»Ýn¢Ä#çÂúLÝhiزËW¯_¾z}éZlÑLqLëx·Û ûh÷«Ü¸d¿ßÛüåRÛï÷`\ʦ¸T£¡± ¹ÉE{uó¦ÐÒ°Ýo?kpùêõ»wnß½sÛ¨÷0š<£Ÿõ³{94}dqWD·Í4³Ø”îç1¦È³ˆîP1fF{¼Ù¸èOnÀ†Ö·ØjUÊí$•§Û,»Ïá”â•:¥öʲFæœ%ºëwg÷f‘3‰žpwS¼*5áîÛÞÎkð†n(:™¹±¥*mB^ÊÞÖ ”Rpo Kí"léa‹»{±U& Ï”ÜÃRä<…š„…Ús':%œÑþé-æ<2â˜ulà"«8ÜS÷¼FgéÍ$zük”ûÛâ‡!4ªègû¹º_¹³˜Z›…ÁWJØ¢¼”.˜ÁÔ{A´§V˜K“ynž©šôÊZœ0:é'Z™EÎÇÞw½¾ \Dê\97ŸÖ‘ñ&îåFm<ÑŸ«7¥ÑƦ,Ë Êñ9ןš»8SŒ_‰®4MAÃÒ,²uª~~Ì8w-{ƒÇìµÌÈ”øa¤NãÆ4*M­ÚjlÄ`f+ b\ÊÓûy RV¦’ÍÑÆ}×v(ø"kmïÈšK¸ô#Ì‹Ž™1¢gÙF•2OcsÓ+G´„ùÄ`}îqV`†]\t¥¥î·*¾†3úcÖѧWdÜÝ!':n@˜ÅÇpHo8K˜,¼Ó5zï+‡œETÛØÆW£û¦¥¡u^(Óê š†Dr$¤w/a$¤‰Õ4•_pÄ’'ïºÒê7p(5øQ3]?<3õ•&áFzqšF¦œôç:Oc“ç ïNê­°2áÏ<Ü'xŸ£CëÂK3B>r¹á‡TM²r2f°8B=ÇËÓú®ª?i¢›Tßs»Jú³ðUVÓÚTcsm¼¥žJº+J©vqç[í™Ùûý¦Ï›yuít¦n mµ4Ô¯õ½ÁÊŽnÕ.ÎbqLµk z×{?¸tT½”ª¾ïzA/<ÿï‹Ÿß Ï?·t@cBÛÜ`☈ƒƒƒ¥«€­ ±ÀÄ1ÜæÓ–¦¯QÒÌéèødé* 0â˜8F,¶‚ €Ò7–®Ê#ŽlcnV©÷¬UV_°Žº++FÓo·Û Ñ€ûUn\bŸSg©gTô5¬וJÿvbžˆ €ý1=ºÀÂëÕðºOìg÷_ûUj–ÔË’R³D3 rßN@— `•èɆ ½=(Þ{­5=.ÑYz3‰¾@€µ"Ž)ϾodTA €Œ8Fâ]'3xeÀŒ ”@–Çló1ˆn0¡ï ñ:c\r0ý–Á¿²m¶LX·'L“,¯?æÖ­[Cê².î°Yw°jx³˜ Ðñ¾Î& ðF‡ô®> R¶u@+ô'¨ÙוnÞ¼™;KsÂÂûS3]?8õ•&‡p"ã|ÛÁø˜ÅמÆð‚°ÕwƶŒ8fISD¹÷„Ð.žƒhŸ0¦ªR¬?æðð0õÕÁÁAê+w Çü=¥JçÚÍ²ŽŽOê ÛTòºR4^â›ÿòr— ³ D›5ÉøM€"<^¥û`‡©Ú?ÝÛ›SÓ…Œ"Þ9PCÔ™{ѧ n¼Ë@6âI¥|âñÇlïN˜P›ºÆÇØ—2FŸÑ¢™.ä |]b*ÍopDA6‰F!îD!e8W4T¢pŒw ·‡‡‡Ý¿eKI~]jÞàXw|Œ>àˆ¦tû]ˆ] ~…ã˜Ô3Kºð¥¶ Æ õB R-ý 9¥í³14P±Åž3ÑSàæÑhµX™IâåaÞ»‚jVôÈRxƒcåº!ºšÁ¹š”a@…JÆ1Â-Ö)Âë¼?½©éBòW©)“¾ÁEØ($Žô~3°¬bqL…c_Æã ŽÔl’û®tÌl½éšKQ1Éø˜UöÍŒGø@YôÇ€VÑS—Š€Õ»tåÚÒU6D»(ý1Þ$@Íšìñ^z0)Þ @µŠÅ1BŒÖd½ŒÚÎR<¶È}ùQêQ{½Ï• §LôÔ>S ÷?N±æ<+ÓHÕ§ÈÂÊ…–Ê­Eµ5ƒ¶”ì‰Æ+B|3> ™b«{Odê³7Å[ä)b2X—¯^¿{çöÈô—¯^·Ÿí·¹9›mñEá“0Kå9 N «‘ʪÛMõîŽ .¬›ÕD‡óR«qºÝµrµ#j±÷+ ï…î>xÝ&Ö m&^²0>ðˆT7IÄDORN8=:E“ê†/D$g¶ò~¬ø1ip†v¿žbõšsag-‹8£N“Œó¬k%á‹–¢S¢sõf®ÌÓŠNß;„éaÅl¡áÒñó¬ë2q;NìçËW¯Ûoí^šhú¨»wn»eyåzù‡SÂÏ^e„A=Üö݇(å­îD/ý3L“š=ArÏâÂ<£çeV¨¡¼€©o£õŠ¿£yjª½ 6¨71<'‡Ráþo؆~xxxppÐý[¶D½1½ ûÄÛ¹£…énnY³`·ãDsUhðÕ"7ÏîsXJ´ÑÐág»‹Ea×È€"„¬äoÔ»ÄÜ õ5ôröfϪ¿ÍJ."·’^§)Ëh?nH)Ǥ¶G¾Tò\™ÝÅ«Nʹl(³O¼R;œÆ+Bšr‹ÜÈcd߉ÍÊÆ@D6ur»TS!ï·_ÿ±*U=ÍÂÖ`ÌijV)©]z.ú] Zl|Lª‡£*áe£¬éBJa E̱{gÈÊtZ?bi¶¹9¹ÜPfLY•¯Æ¶,9>Æþ0l¼ïNÑofw®Ôeú‹…¹Í@(;HÆj¡3¦fíî(ÜãnÖ,p‚Ô¦dÌ€Çøfu`Øk1á·á©Ü"”ÛÅ4/{ð‹ ØA¸á;ÅNפ·¼{Kó¿{ç¶›y˜ ‰wõº+¼Ã¿—ÆèeÎèžæ¥k†Ü*SF—K^ذæöúûàëæ½kcðŒcV£¦¬s…ç¥X³ìØ—Á kÆÑq¾#§'RÉšW¨L9ßÔ¬÷²¸0ÜD˜"_ŸêM,Ÿã¥÷î35czk®¬aôsxÈ×—"ç<¬’ÂteA§Êªë¾ëÁö÷ÍPÖ×>ÿqûo© æ`Óɘ“²W`†…õ†LWP 6²˜YlœoCº Cs¥É G”W¦¾öùÛ”îç1¦È³umuo´UÛmRö@4G¿\S/ì V¦Þ¦¶¸ºâù3çg§sV&×øˆaŠ€ƒ °buÅ1•<`Æe£9LI}k{hl&ö+·Ë¤ûÓ-ËMö¯¸ÿ†¥ÈyöÖÄýÊÏ£€Íª+ŽYö¿ÅE¯ïS¢si2ÏÍ3Z“v¯@]ºrmé*`åÎÏNifÀœŽŽO”)ëŠcÖÄLÍ9J n7”lS]qŒ¾?Æ}òÇtƒ"½[“ê<ÌËý7»Ýî¾î_kòq¯7U¸˜„êŠcôAÌl7t(»=j¾.ó÷_øMc´6Ý‚LZŸ¦e=ië6†‚wÏòL,nE†R]qŒ¦?&ÄxHvØ„iÜÀ|œ¼¼ìÁwºSô!NIȱ…¾+Ô{ŒUª&ëä;Oœ‘*EYzô¹^jNPUï¸}¤ï€¬&:œGk;¸’f‚Ö¸oäNX\]qÌàñ1npc?{S¢i܉a¸ãÑÝá±Ñƒ}81šC˜›÷mï DòŸá”nà^`’kÙøk¸÷ggÝ£­)´MçiƒK!ÎÀâêzžo÷†¦Ô¿žËW¯wÿEÿŒ Ó¸];šæÑ=á·ì…ªý~ÿ÷_øÍR¹UÅ{Y‰û§ûHPsÿèbÿµ_Es¦¤ò—KòÞ_ãþ«¬‰raÝ„ú —£D_?$Ï݂Ѧ6Î0q´1¸Rå¦fÉ­¤ Z”fö0«hþëxD2¦VcLê_Oôå2!×[³ì!·›¤ô½óÆù5±;;¯ccçœ)îœøyïFñ¾ çò¦„EëK׈V5¬Iª©0‘¬-kœVmŠáÄÔìÊ⼬ä"r+é…qš²Ü‰ö³P(Ы®8F3>Æ»BÒŒîM“*¥¹gH„ÇÝ©÷Ý“6zvt|òÄã)óôV»þ8îîsǯŒI9,jtk82ît!©H¹öÎûŠk^Ÿ’\JØ3,«UžeauÅ1Êñ1]‘š’ Pä4ažkµ©ƒÙ°ÅTÎ%ôÓŒ)½l˜‚ÖÿkÊíÈÉå†2cʪ|5¢ZuÅ1úçÇD‘ÔŸáHޮɦB™Î°å-µ–„|”EŒ¯É7úDX¡µ^³FêŠcxžïlÚ=ªÉýùîµvwߪ_Òp®Ô>:œ®/]S1¹&nƒDÇöz}3îµ';—71w3…y¦&æÎèÖdŠJ˜ËíÑ¡=CVãýJ˜G£§PûûL°ÿu„‰…ôѼÄÑr½éré©ÜÜÒ½ÄBM²ÖЋP”ÝXÂ*Ý_Nt§xŸ³ZTX&—Û°J†ë¤·>½‹VѳEnøÂá (b?ýp™èmAkEg ”êŠcäñ1ÍÝ+T›ðHl[¼¬èúœz%oj#nja1F]וè™N‹—µÔƒÁ¼®ì[äÛû4`j4B NuÅ1ƒ˜¶ŽÓ“ZÁªà’"–Õ=ÝqéZrt|¢LY×u%ÍýJ;Ç UZÁå7ˆÙ;wê®`Ñ×dŒ=0ÏÐÓÐzOFëõ@Ð^ŒkñyØ^'7ÅûÊK“šbÿòo«cƒ.™æ,¾™¯@…ôë$kíɉÝÒÈ•YI3}Ƙ(ÿI«]*óT>óï²J¬+Ž<>Æ_Ý<ŽÖî\©)–—›“Ú]”J3²ˆ1³ës O·si4FŸGôŒhL&šlõ-j|&ƒs›h¡&Ê-7ÿÚ²!ó‚ùOº'©+ŽéúcRÿÊØíêÍðÀ®IMýÜÏ9WKo´=?7Fo´…LÊ;™œIV¶Ê‚ŠÔmpn¹ 5u}*ÉÒj7ºNd¹;ÃÇǤþ•±ÃͲ¦ÕåþÀvÎæ&xï®÷§¹8ÖÊNñ2ÑÏèÕ*U(¡\/ϰôÞR4 bS •LU@“ójìî¿ézŸx~r-ÙÏî‡T¶©‚²2ñŠj;,·zêãýœMßOX¿ ¢?Ò‘ÙFçõ&†MhŠÌ½…Õçï­ç°Âæâ¶Öle£VcŒž¼ÁZíîëþŒž1ؾ·wÁÅâ¦qK6£¦òÒEÓ õ‘KÑ,ˆ†2Ÿ9·ÅÝÖÑýOï: çêÍ6Ýûõf¶Ua{ È­žúØLôí³7ïX7¦Úûô^EÞÏL—¹>o=Ë;«°V#ÕØÓ+ 引M®2Í””RDÌÑÝzG= ¨Ìàå<³¦k¾-"zÞ6u¡u*µÑ÷ÁQ\3—×ê†eR¶Jes˜.·1ù»_õþð'­v=ë$%wg=š+µ×³wD§ ɉBû§¹¸…yQ§T›ñ¸}f¼Þþ˜¬y1Ã8ÀÞ`¿µŸå Oa‚Á3fU ü*•>œ®,E³ ©ôîÎE¨ÀøýæjD×vÖúÏ-k@Ý܉ƒë6¾C¢l—†2·"Û¢ì&îýYù¡MšyŠ~g•ªpVqMŽÁ–…» ï`/LL}•J;co­„4ÂôT}”¥¦æV}}ÖGÙÞgë¶·Ü•,ü@Ôm|nÊÆç&PÒìRÆd+çæF•dn†®ç¬UV(³õþ˜™=I-ÒCS¶›g|nµÕg‘ü‹÷÷Ì–ùøü‡UiL‰uÅ1ôÇX½Á}rnEŒÏ­¶úȹM´ ôÙ¦:D;úYJež•)#·K]q ý1@oµãcæïÃtÎÏN—®¶ŽFÔiù8F胉†5^€B¼²—®\[º Ø´ó³S!0§£ãeÊå㓈W”טbجºÆÇ »9Þ‰æé%°3Žª1XN]qÌv ¶šx÷7z ¸&µnBP;g¡X¥ÙZ—·C™Ã˜|¦È¯–8Æö”x}*ÝÕ¥a÷1…#i¼Ì bZ$ô½¹i”Y©}{pO™„Æé%aâpÆ}⡽ãÅ[,?,¢Šñ1Æy„Ÿ[tCg†ÝÇ´¿ød¢–ÕpŸG©yíÔÕ˜³PÔÀ\Ãf ïè [ò°Ç¶.ûC–UKÌD¢§2œ4¬Lx:ëmâÞÓV!¥æ¬7¬FV¡h‹sÈåMõ¸.á¿î·©¾›³÷9·Mæ¶aéܯø!`RµôÇt”gîÏ[“çîâË9Gi]Ö¦t1½ÝìÞ ®<¯;Å«I˜Uo=±Jƒ{\4ͦì!·ý›¾¥ó‚<~˜HqLÖð—hg~øã‘§„¢!•„rÑœ€®•Ûw2]óSž¤u°eËÇ1¼S «ÄqeÅÜ^^64°¬ºÆÇð~%¬3èÕPü»lþ(¢ìÇÆç“{õpd‰5\¬$þPºâ˜1;Ça‘Ç>x¥Hê #rÝÂ|Â)(.Ú+ ¸½ÞW¬ú­©R˜­‰õó`®)N¿6ÜBsxiƹ§¦¤Vôª"ŽÉºÅZxº¥0>×ö+ãÕ?=3wFöÎSèÜ= £¹{‡l÷V)ZJ÷ÙF·¥˜ËÅ XÊ.¥0æè-HS=Íò€kù8†w*ajaðÑÛÉ1 ó¬P ·”ñÅ åFs»¬¢³ñGX¼È„2¨å~¥ïWÂöŽâé³rS«‘Å,·HABѶ³Šqi²ÔÇÐ7ƒI ¸'¢šÌ_Ê€rS1ã JM €\uÅ1ôÇ —_¢LoÏò…C²Û¦w§dUU(º·”Ñâ„R¢"šBwŽÞU*í×›!D-?>ÆE z¹Ç¹ðsôÛ0†ÓÃAz§ eŸw†YÜ?SQ…œgjµËS_ C 0ú ¬ºâúc°n31#‹#äP¿å¯+ }0Ѱf{.…‰=Y+uîë^þ_jO-œ—ÏP=zë°|cñʤט¼Hhº‚rÕVŸJœŸ.]l¨SqŒ¥9Šïcçò&êïòpóÙOs§¤úì·©M¢‹Å›EX|}nnÍ¢E¿ Wïâ.]¹¶t°içg§4B`NGÇ'Ê”uÅ1#ћäIDATJSe£aŠ&¨rç gto1MMÉ­X˜[4çõÖ'5/Õªeœ¯÷ ;½»º¤¹ÆTU‚}F‘Ù5¹…i¼žž¬úT²ÕÒ“êè†Îxh*¼ðá)rŸHx1hX‰^Ë˜Šµ+l-5·S}õ¢×¹¹­ µôÇèyu¿°ã›zw™7ôŽìÑä¶úHewÑÔ¥þœÙ Ë«¬FVâÞj/¾Dx­bÁš0õôÇtЇ©.pº7n7œ¢>f%¤ Ÿ¦gúÜ¢i„<½åjå ¸•zTydJïÍ-€ÚTÇdÝbíîøRfå´úéaýSøªs©jhJìͳ7q墣‚ÂàLÔº¹¹1ÝKî,¹g̺ð×[œwá5UÛ0˜Ö/×€KŸF1š¾‰îp ›œö ¬åãžá‹\Ñî4ûUê†,ù-“î3 (.<æÉuùˆ.GnæÑô¾Š–Þ»\Ño=YÇrýâצ7>0ºÆÇð~%hìïÒè”È)SQBoæ¥Ò ãurYÒÛ-ÕV\Ò+Ú“ä­Š•-2P­åûc\ôÍ ˆ¬3ûÜófMæÊ ÌsÊ®/%«>ívŸL!zqÖ»l` ôÇ÷]2K½T)Ä%ƒE˜ý1hOï¡"z!#:VcŸ»–æ*I˜Fžb‡žüLqƒeôX´ŽíÅ-ǘD¼"Ä73ã÷‹> ‚ƒ)UÄ1Ö°pÁ{ðT8àNøà¥tÿL•e?»áT*·nîWÞ¥¨°h› ·¶r…×áüìté*`ëh„@êŠc”¢G}/F1}QQø+åŒa²èŒÑ*¥"*!O!g®=6®–û•ì£0½gbvW—¼kLö^ýÀI¯GÄN ëPüÎOM„1QѬ[-ý1a×E§:3Å}LîÕ™hÈlx.*ÃÔÇLÇbŽØ ;i —iæuùêõÔWwïÜž³&Ó9:>é><ñøcY³èÓÀ6ÕÇ(£ár’þb“ð¤ÑplŠÑ7Y—º¢sySÜ5+~úH4^IÅ76&èdésƒƒTú¬:ŒŒHh@PE“õßhì¢Oà ¹•gf7‰«QŸaњʤҤjµÝqýèøäèøDŒ/ «  åã˜FŸá‹ªØN R¸]&Þ”Tyb*Ré ʵ™È ?GP(6hù8ÆuxxHX³MÞU¤a#cìÞ;êw1Dp R1İëP^?Mø!«#GTÀÖÔÇÄlVnà9›{t÷†¹”"g[¤P¢èÔÇÐ¥"‡ð‰â!ÛÔ塬ÌÝ^%BWËsð:1hÎü]#Ý5²ÙŠ€šÑƒå ÆŽ½µÊ ÌýàÀ›Ë"Ü}íŽ} ³•ËMMŒ~ëvÆD«[³»{çö¥+×4¯@;:>¹uëÖÍ›7g¨Vá_xÀÝ ÎÏN5-j‘k" +€&hŽ]X²|Œðð˜hߌæ=ÏÊx%|ú\ï,cŠÃ²b`}–cL"^â›Þ÷ŽáEÈU||wòL Ê n'¢ê“Õ1ƒmF/éó“J–z‘ðp !O¡&ÂÒ…Hš{'Jé¡{9ÜL©íÞÛNÜ”ƒ›Ö.‡™ôÖÍô] ´|Œ‹¾ ³Ë|ÌOt.Mæ¹yy¼7{´,.k»‡SæiZa&áÃ&h`h ý1@w?>uGˆ=ë•ôǬÏlÛ4Õ×2g; ¢?ÐRößÌ€Sä…×zÆoŽ9›–¦¶404„þ4fõ×é³î Y÷ª¨ÖÞ±t]T¢íÄ Åä4@µè)Ls!#yû\oÄ¥~m‡ûîÜg¹ Ó”Úî^†<¦¨NáF6“·‹7­T4fâµqGÌ„ËBcC–c„>!¬ñc½¥ŒüjŠv̓†‰î S†£&£ãv{ó‘Ë ?¤j"×\*çƒy¤¶Ž²MjÚI*çܦ¥I)ÿ.€ú-ǘD¼"Ä7‹ø{ÏKôA ûˆzбµ*xŽÄ^ 5«"ޱ4¿–hšè‚a÷©÷9ú§×—«©Fx7¬É¼®¬©›¦VÈUá*í=MG…êì3+U‡–H©+Ž)HóxsñÚ°¹…½ý^>ÊÒ…Ñ«©ºEkÀ–ÕǸ#çsä><<<88èþgÁ£~Á`BΊBçg§KW[G#êTK“êé—ALx-©mÕv—®\[º Ø´ó³S!0§£ãeʺž£Þ ('ž´2“¢cY-ý1eرÒI=r#õt„^Â3rO'Œ¶öºÄÂn¶è]iìy×m| ¬çI˜Ñ$íç9+6Ïï«´|?ÅÚÈ/d µ–ë9¾èVV2Æ#ŽÁJÏ6”SšÄu%{>*¼EÏ4uX¤ô-05¯þI˜akŒ¾5)|(hî…ƒ³*úàå–*Z¿\á·BqŒ8\â¬Ð)­ù*w„ýÌ~} ŒŽåŽK= 3ú˜Íp®èS=£åŒþë%“+ ,¯¼¢z ËÕûm´bœx¬q V"ÜÏSÞ§.} ”ùƒûNR¥,(:ŒŒ$䕬YŸ„2+Cƒ5p;t±#•jBßIñ¹®¨Á”K=áÅ5iï9x@Jt¯4r·Þ»§†Î`k¦hSsûK ^v‘³]$€àŠðZуÆDz£¢CÂÙKíËRc!±J#[`8¯M¼ßï5aq˜Fž«x¨-W@nÿYðåô¹ëJ?Êm!ŽA{¢{´Þ)©¯¢)S¦²eŸ¸)cZ`o{Úgt\pï\BeäÒÃ6¯¯€~F¡Âc3U"?Õõáºhq hq hãcЀó³Ó¥«€­£u"ŽA.]¹¶t°içg§4B`NGÇ'Ê”\W­"Ž­"ŽÌn·«ü¡«€(â4Æ 8ÆÇÝÓSO”wóß]T¤t4'l©d½5iÆTŒæŠ-`œ/ eŸkÎ#A1‚¯Ë04Wlq VBÿ•ð«èËoí€#<Ñ÷)*ÛU”;o—sô]Âk¼h®Ø,⬷ïvÿÔ|Å~#iW©ÈÃËÐ+¢@¥U`| V"yÀè]L§ìK¤i¨À`ôÇ` ÜkIEºX¼q‘ôÕc:aëÍEsÅ–Ç`=¢§Èƒ÷éÞÕ¨Q5Õ풙͛EƒÆD‡@zC,Ý4^#|5LÙÜШ°]Ù)nÃд^MƒÑ\±>Ä1hO¸ ÖLI}%± ÿL}ÆF胦i…S £ösjœ/Í[Fm 7Ç@_€÷]€VуœŸ.]l¨q péʵ¥«€M;?;¥s::>Q¦äºhq hq Ö€˜b}jhÕ5Ô1>M ŠZ<ÿÙöÖŠ߬€ðuåì&x¢ƒðòv£û!dÕ_šCƒöԹϪ³VXùÁã[`m¸ÎZ¡\WBcR;µÝ}©)á;{Ó§{Yɵ–¢]Z´#Ú~¢ÛÚ¾)Éëkq³ s§§ª~ÖTŒ_E V"<+ §¸{jïÛp'=ÍfeÓÛÝh˜&¬Öd—¾Ø”ŠôäÙ½V'ç0 bü²P9â¬VxræiJeNtwÊúRд0”Gðú‚l&&hu6g¡e@¡rü²° â¬SªÇ^ómhð©çˆá\§î˜´w§¿,Ô†ñ1hŒÛÉ<¿ÁEsú¸Yý“:šÎ¯bü²Ð(úcÐo‡›êˆvpá·Þ5xû§û9UV'¬R8£›­¼Œ¨V´ù¥6´QoëT‹ím3½é3¿,´ˆ8MJt? iÂ?•y¦æÕOd?»šÍ*D©)©f–J*EZ+TL®ƒ¦žÊJòËBY\W­"Ž€U¡g›BZÅø4àüìté*`ëh„@ˆcЀKW®-]lÚùÙ)˜ÓÑñ‰2%ו@«ˆc@«ˆc@«ˆcФc‘Òç/´×àu⦯sÑ:•ÔÍ[ÃÊZÑbC´XÁ8_´gð‹‚W/|-ðàP-6…‹ñˆcИÔþÎ{ߊû§ûâ•Ôt!£ØWjæõ&zo޾¦'šUÖ‹{ÂR„ºÙZé×Rj%hʕגMãæVÉ;t¼ì¤Ö -–»x‹]7â¬AtëîVz§ 9˜ô¡Èê×Ë_™O8W´ž¹„Úzi4kI_™ÜµäÕ!ZÏJänZlZ,Ä1@ÂŽ¾x>Bš¬ßaäÒ§(·Î#A´K¦!´X³±»bÄ1ÀXÊ3×Rù{ɰ÷»¸Téô¢7„kh±+ÂýJhŒwÝzËRëažU-bSÇåz¦ÅZ´XLþ´'‚ç ô™§&7±f/¦?E>ÍíΕ³ê¦.*Ý›-7œW˜+:¢Ú³geÍퟴØhq´X @ƒ&¥Fù…zRÓ…ä¯ôó¦v…Êœ{½k@S·Üµ¤©ù˜)½k~~©†!עŢâ`&Ãοg DÑbÑâ`&ƒ/¯É"4§¶¨ -¶w jÀ8_Ð*úcЀó³Ó¥«€­£u"ŽA.]¹¶t°içg§4B`NGÇ'Ê”\W­"Ž­"ŽÁªŒ|Û 03Z,0q ãîÓSŸÇa•ÊsL5ä4ÑÏrÊ"n–·Qz×-ÖKý,§,’!ÖŠq¾@„ûLÒEá½OS‡ÜçÉŽÌU¡Å›+@ƒµé}%ŠRÈÓ¾ÿE.Â8oŠI¥wÿŒ¾~Å; ¸ºÝ¢Ã4^æ©RË¢©¿fÕ­’»r¬Áϱ¥ÅF3§ÅB‰8ñö¹Þþ×'¦©ÓÄÜÓGw)æäe¥?‡Ne¦‰f.)SFWÔâgÿµš-6šU˜†‹aˆc°]ÂÕôp§™»ïsÓ×vÙ>zC–h—ÌÔh±¦¾ºaqÄ1Ø.aG_ðøTÛ.X8Å_®RP¡ÅÖV7Ô€û•Ð÷T¸Èiqm;DoX@Áó~:Õ ò6SoJZì´Xô¢?+ç $ì> Cùx¦?Úiª*Z¿naÝ ¯¨M)¸–h±Z,dÄ1h’·—?{û²Þ©qˆšÑ}to¢5QNô2Ie.±Ìª^j…o„¦í ›‹N§Å¢q Pçh -«A0ÏÁ€CJ¡Åb5ç ZE p~vºt°u4B NÄ1XÌ¥+×–® FGÇ'Ê”\W­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­z`é `»—® mÄ1XÌ?¶t5::>Q¦äºhq hו°}·!QÄ1X ãcQŒëGZEZEZÅ8_TäòÕëîŸwïÜ–S rgL=¸ "³dôÇ ößýg‚ØbaÑv  BôÇ vn—†×½aÿŒö¦hfŒ–Øexùêu›³÷! ³¼œ£Ssy9 ÕxˆcÐ0ïoý6ÔPΨg£/ÚChqѹ¼œzÄ1@/F)|ØœmoP´D€‹8Ž –Å8_À·ø¨·of©:@èA-¼ë)æþQ<œîM ‡˜äÎh靿Dk^òŠãš”EƒŠ7i&j¦dM4b×ȰZiòY¼CZÁu%Ð*úc°+ëºXÙâÀtè­"Ž­"Ž­"Ž­"ŽÁ:…OŽ™¡Ä9‹K)[J*äm߬zV»PSÐ,ì¦VÈ`áZb½U‚8éNcBnÆîý‹áû¥1øp;¬ˆÙ’ “›y4}‘í;`ÆÅÛ’«ªÊDÍ_Ã"%Ö¿báá¾kÔ¢÷%ÕʧÕ-¥ªÊ¬ÃàUÚú¶¨¿þõ×0ªÑjoq ê¾£Àbƒ!ûH\oŠœUït9C¹†v^7bÓç¦Y rV¥’õÎèΛZÒn=x‹&§ÖÐ 5usóïݦá¥ÖL4CoA4k,úgt D×aj)„&—ªŒ¦ž&½í4k8šýS~ñˆ°ì^“èý¹ k ÂzãÝ#s"ŽA-Ürø6€Ôá!Õ‹Ýékf æÝ9¦fïÝ— ¹ÉF‹ÈÊJNÎ"Ì(ç©É¼7½¹uëÖÍ›7g¨Úu~vªiQGÇ'O<þ˜œ†kÌfÕ+aÅ‹fÄAâziŽ]XÂu%˜A 0âÔ‹ý¾YõJXñ¢™ÄØOÅÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€V=•ú…çŸ;?;¨*Y2☃ƒƒéê ::>Yº €¶eÄ1ôÄ€(£Ž¼ëJ@)tïÆ#ŽÁ2èÞŒÇýJ UÄ1 UÄ1 UÄ1 UÄ1 UÄ1 UÄ1 UÖoÁד"Ž€•»qãÆÒU˜Ûã¶ .r‡8VîÖ­[KWaVŒÛ6¸Èq ¬YýÏ,)î…çŸ[º sÛà"[Œó­"Ž­"Ž­"Ž­"Ž­"Ž­"Ž­zÀsxx¸t5²í}ôÑ¥ë0ÄÿÃtòŽ4ÆÕ^IEND®B`‚vlfeat/docsrc/images/perdoch.jpg0000644000175000017500000003346212237004736015631 0ustar dimadimaÿØÿàJFIF``ÿáÊExifII*1 &i‡2Picasa 3.00210h ž ¤!|2005:08:17 15:02:2064f1fea66c334896994dc5030d7793ff¼0100 ÿíPhotoshop 3.08BIMÿÛC  !"$"$ÿÛCÿÀ,áÿÄ ÿÄH!1AQa"q2‘¡BR±ÁÑá#3brð$S‚’“¢ñCU”TV²ÒÓÿÄÿÄÿÚ ?ö‰P½Ç¬ß†›ÀpÒÐ/?t~Gï€áÒÇM ƒ}¼ 8ú_­àXãÈÀqê=-xÛ}:ç½þFEíÇHµÏ#åÃkÞãÊ@øÛ”(Ü(˜ú@kÞF|µ€ú@pò€-×€ãéÐ ô¹±ùÀv¼Á€áÓAõ0ßëÇžÐËXäuë<7´[Kp€í- òÓX~p¥úùÀVS©´ƒ}B‡˜0m½þ&¹ÖÐHðß[yÀÜxÞ<ºÀӟµ·ÊAÒÐ?½ ŒzÚ¯>·þ< :ÖòéÂtã׿| (ÀpÓ‰ø@p;À½`;¯Ç/‰€AÙ¶YASÎ!(©F©Œ°í5•;5Z§6”îU2>fÇ¿J;Oqé<3,ª“éº{õ ŒƒÍ$ܯáh …7é2—…U‘8ò‰ñ"ZaÉsém>"Á;ô”¥Ë˵û1ʃΕRóHmKCàLj>IúG710–æ¤'̰úß=Û[ ­7à<à5Jh]ú˜\Òe”ø²³=ëjæ“bƒnW€ÐefwÄœÂâúçã5”›X˜f¿ £h¾:@ϤÆÐxç¼çn¯3ò€k›¦°p¡½¹@ vÞçûÞIçxÈ@-.°¿?”©VMÈ´qÛl8k³zviå ÊŠÁî$p%ÅõUýÔŽdyälyô‹í+¾¦äêMФI6bœ2¨ŽK7RÃÊ>©b,OP%søŽ£2lEŸšqBÇ}3ºié‡@ï¦ „ý¢Oß›WfQYû)ü`~`ËŒÊX µì-æw€hšÂ–¿ ‘¯1oÔÀ9DüÐ÷\ óU‡ÂуñTí8ej}ép•¦”.…第û í]úãLÑçÜa¹æµÖ¼¥Ä AH: 8tÓ”ÖÜò  €°­4PUAöZe€´­&û” »¤¨nG8a|ÂÜÌÜ_{@?Ù€4qáÖ`8ï×OHF÷ÐÀVÜX½øÓ'(á°ô€›[OµBzZŸ&ôäãÈa†RVâÖ ”¤ É&ÅÝ¿ý#ë©éš. œ˜§Ó¢ßµ²¬Ž?Àw•­çy‰çZß™_}0µf[®’µ(õ$’}`L·*€ò@ræ•–ët%>v€E·šY÷‚üÌŽN³*ÞV¼NqÓñ€j]ïy2â?WŒԫC÷hMí¿îL)W9Ón\ /4¦ I ƒ®°ê$rUÖÝïjÙT“b-¶¼ 7ÌÚÕ1ha·ç«4ÇE€&l-’®¥@Øyé¶àÌ‘lLϼÓôÕ%$Î4 {ÿ(¸†qkqÖ^˜ja°¦\Ì.-®»^íõ:íÃh ÉÚÀ{ÀvÚ^ð?½`;‡õ ®8ÀdžDÀé÷@m}`º}ð Ì<Ü»+y÷ÛhIR”£`É=-â/¥oJÅ“oá|*ê¿a°«>÷ºfÈ<9#ÏSæ¹—ÕÞæVªßkÚ³ï@U¯ÎZ YÑ$y@ ò÷ÕJ±å{˜2èJ5X@;©_€€3®H0HmJYçÉç™Q=Û)¹ãr`¹½ô¿CX_@zZyE(.÷ÒÉKžJB•ep€·àìcV TRõ6a)I#;›´è䡸è`=›ôdÇt¼Y…SOKŠLô‚ÔÙ—uÀ§Þé=@-ÿ–fÙ"×øÀwËÎÀë}Çœ…ºï!WÓC¦ºÀœHò€ˆÌÝDf㼃ëë9ŽéÊ 3Ó¬IK958ài–ÒTµ¨Ù)à<}ô‘úA³]DÆÁÕ ªZÒQ74„‘Þëî¼í¼–gç^9€_Lº@7nagÝl%0—@Uí{íÂL­áI*é°€V]*'¼Ì'ó€é¥©ÄêJSmßáÍ-©J²R`·NyÍR…mÀ@réï$P@€DÊ:7IŠaÄt›s€U¦”›cÐéx YVRãzh®P[Wùsâýât½¸s€Ö¾‰˜êWl”fÔéJ'\T›Éµó%cOû‚`>ƒ ªÜ:Þ܆£Îó»ÀyƒÖÇ1ÈÛk0ùˆÿ›â`"3w€¡Î‚à9o%(ÌUaçÆÅ?KîÒkÓžk ÊUÙ•Ô©v¹?ʲ:ëh7Lfï2¸òrïáÒ;” ©¤ûÛ“‚Üð¤l` ¥¦ü/ÎÉRw½‡!vó­@%0ê;³êA>p  KÅ SjUíaz¥`4ºÚeÕb,£È~pnö[O*ÒÖ_å¶ ª=šËË$²àN¶€§bÏËY–ÊԀĥAT¹ZKe N¶€‰m•¶á¥@\@)0è~Ê@³€|`-=’Ö¡ö…‡êO/+MO²V«_*J²«à ý >ž4»¶•%@‹ÜlG8ÆAçh‹žP¹œ“¦úyÀ¨€…'[Ú‚¹ZðrF„\@yßé±E Háù9ŵP¨¸]Xie% #‰#]NÞFÄ‹˜ï–Uœ—/rnuêI€fòÕî3o¡€M”åQÓ”«îÐÞ©¹þô€RJAÙ•‹6Møù4Õ“àfémÌÕŒµÌ¶€Ù<Í 5ìƒ{öPóÍX-ÂL£a¹VY@SgkÀYd©²é ¶HJ6Ñ (&¤Yq³ «Œn·‡’ãEm"Äkc¨€Ë;@ÂK™ÆY)q¯²Ç( B­ûµ•[*›p´ xÁü #›Ana9‚¬¤ùÀ;¤Ì%©e:‘ÝÓœ LÔü-5+7‡)ó%Éu°•6±öm§ÊP;zés¶Ð-oÒÀÚÇ¥ÇH6€À@AiøÀô×QÊQþúSÖ§j}®×0Ÿ £‰a°6BR,}I&œXS…Ið€I V[(\‹•Üâõ&QÉÙ°ÚA"ð}7 ™y¤¼@q7²uÈÀ<“¢¼ã`´ß¸—²Rw·>P1E—)JN`tZÆÃÈñ6ûà5:Tš[`åFQacò€ž—i´¢Á&Ü`6¬ÇÂSÌÚÝrÜY@t€"ÛIL9Š{O ¥m‚÷‡iý—SªÒOLÉI¶™Ô¶¤ ¤Z÷@` X”¢?17*ãOË<R“µ·ò¼vG÷3(˜q(% Ê´Ü{Ä@}(ìCIâ®ÏiµiS,…·•RèN-:(—Òд붜àÒÉ'˜´ÁÚö05M‰½µùÀf#ch¿óœlxZ ¹úÀ>p)úoÑÓ#Ú|Q´”‰úr³m ¥#î´ÖœŒÜ×*¸ð€.•zÀhÒ™„'B/kZð¥ é–J”-ËH Y{›Þÿ/X yat¦ÚÚ^Y#H )`«ê¤ú#. §Öé Uô·[ÀVK¥W"ús€P¥{«)'€Q æM–£§w€Um‚Œµ•P×ÒuœÔ:KÛi[w=QÂsú+É»OìZÓ‰·zãÏ [t-g/È@jiþí¤Á[ܪé*êoËX ¼:r?„“æo¶âûK€­—€&m6´_]EþpeúwÓÚU Ôþº^~]Z}R„¬|Á€òËyŽ¢Ð Ô¼ÊÀt&Û@TXjáN( ¼ ,ÄRÉ#@à¿¡€ô¸k#(˶QÂ"´ãa¢…&àïSžq†Ýίx à+5Ü_ìêS2ƒ½phOyu=V­R­<áö‡û±lË@›ì4ãÒz5³Tk¾•qeJaS,eY⼊¶»ƒÀÀ .±Q”y,̺¥$›‘c~Ds€Ó°#îÔ&Þuu€Ý(Ø|*E+R`2Þ×çHJ¥¥wÔ ßAÔÀ`uuÎL䘘˜uà°¥9pHØ@X;-¡Èb*¤¼›¯N…>ÓÝòBŠK%Ê x߈¶ò2U*.zš—´´ñF|¹R±À6êlü )4¬‹s"ŽÝI3î3t—R’¡}âDâFY¶îMî8À?Iνö6€tÓ)QI ãÃHH¶ú†dØ_CÊ¡…Ù˜h›Øk{iæNc–`Û–A´Ò¸&]+̼ΨlNÃÒe4IYFSà€JVÈJÒ2tò€Ô©*Ï(‚I¶Q¬MQ„®x©ZƒÆ:j*ð!! ;é¡€F^&•YR­æB`&e%Ñ)HHÞÍbœÌåjAë¾€Ù¿;‹|À€½Ê¡,Ë6ÒS•(HM€÷E­¤æW¦†öü ´¢Ù;k €t…u[VÚ›^ÞP ¥\I>W´™Ï#TQ#k[ΊQëšÕÖ‘ÚÕ%ºZeH¹”˜BŽ—ð’?|`<ïÚEQÎòfM9‚EîD[±Šsذ.m î¥åܘèUp”ƒÓÄO¤²ëa¹µ%:‹ÚFÔ.~PGm®-h D):ÜíÇœžòèÊm°Ò%2/­ˆ€€9B[Mô·ßX˜FP›„˜©uæxëÊGÃoÞD ÚÊ*£ ¯k@u<¥Ö†£ÊuK‚s&ߤ ¥¢wߌjS ö1c»¨ÿ¸@_XQÈõHОœà2U›oÁ€x´й@:lémÇH-ªÐ ¡V [ÐÀ,Ú®v´å<ÕVRºˆÔ}`Y6€‡Å.c Ô@̲”‘Ôj>è £K§âËÌ>¾WYuYH<`Õ©£ ™K! ¼+u†ô"ÄúÚJ¼GÞ…¢¯°–}K@ïRPt$fÚV]ò~¶¼`K:½.`$ãw2 T^BspåFÄsË+¸$x¬âNÂÍ9‡a*q˨êDë ÎK¶ÑS‹ah *¿³ÍI¸”ºEÒAÔkFœq— .„çI±ÖÈÛè-…O–иâU´R­¢fr^YyˆSÉÐk¶¦@mëì= 6y qµ­¬†”wUκ†Ëj¿2oÏX-®ö½íÊÃjPN†ÖÐÛhP­l¯€ÚoÕ?( Ê­ÿ˜ÔG DKçb *7½õóÖ&ǘXUMBY•2—t<ÑÊ[WÙW4òø@"²ú$.§ÊÖcsqU”R’묯Þê÷†æ­¬‚okæ<8@.ÃÝÝõ'2‰µï퉕 õ¸ãý™ß Ô@3¨Í8ëe)'1Ò½&ë4ôÎå$´â\R@ÖÂ>Å8Ú°m4Y6&XúË+7¥¶€–ÂØŠ«6Ú›ë.$]HV©W‘€±MV««›’“’î›YVwÖ³˜Û<þö¥–¤6öbWaœí¬¢f2¶¢¶° %ÂSׄ–ñTB»’½üYn¦÷€·²«+Qá<´±€pÙÓO¾ÐUÅÓâòÞÓJÓ–º-Àn:@.ÚµÜËŒÈ÷­k@1çÿh€¬(øÀ$¢O–ð_—ÏXV¯‡(Kn6¦Ö¤(X¤ìD»ƒêˆunQæ™qµj}E*Oû¬Aõ€£T¨8‚“UCÕvXm¹„(6¦ž §[m¡€!IͽÏHïzò€*¶6€Q§” Ííu<¥¨wz¿”œƒ(I=©ê M<Ó-µ&é¶¶Þžþ¦»>g%Ø-¬›©#cæ zˆÅ5Ô-¶B¾ºn -4¶Ôè˜K`©H &qJ§:VV.)7Iûºq€Vh%6Z¡€Q‚s'—hÂà‰E«lÎz<ÄXhWQЈ…ïqn. †Ômó×ï€tÚ…õ¸ê „+N6¸'oŒéQ¿ék@V”£½ïç‘U¿0`Z‡ÕLf÷ØÀ&½° ÊÞF‘Úïî©”ù’/’dƒäS¬d%Gð€n Jô:^’Œ×ÖÌë|Æg)!iðî`!gñl…4©3O„eâv€æñõ¹`óÓiÔdLF{S”r`·&eÛ¶Êq@“é ŽÒ%V‹Í7*û­‹ÜéhùÎÕ%äÖ•²ùyJ?ÂCEA#Ì £´ƒR-*F‘>¿õV–HB}LÚ…PTô½ò‘˜ ‚6€›“½“{éx n°§¶A)**"Þp-7ó¹¾ÐÛlzÀ.“kiñ€Uµ ¾ À9iZXƒ§ @8EÁâH¶ÆvÕËN çéZRôõÒ5:ô€Ej×ð€"¶<9À$­4ùZ>'QåÊ›Û%Ì(…îL£Kó@eÌÌ2µPL¡Ñµíh® s@&\_( T‡×€´\ý*œû„LI°òN¤)7¼/`z|f%iŒ¥W÷@!7òÚŒ­¶¢Ôæ—Å!a$kÎðr˜O–Ñ0Í<% x‚œ$°”š,‹¶D¬«,´®¯w¦Óä¤d 4€ª#‰€ ½vÒoaÒbL­Â–ÒscçPJ“›`o±å 4 UtèoVgÔÚÀsO( i:Õ­~ .´œ£Ä5€œn¤ÙiD$¨î ÊTWdå;õ€–f¦²Õ”¡~ð€æªJdŸ­®÷Òê­¤©kF° >¹ÇÔòøêà8@d}´Uªx_´Ê>"¤Í9.ù’E”Ú­r…©$`‹iéî̱Sx» ËUr&^eI ˜e*¸Bí{ƒÅ'qê8@[Ò|òÞË*l6å±€tÚ†‰Ín° ‚¡m>dA´Û?`MöÿÇÂLÊç^P¹÷¿H®G_H×¼ æ4€MG½` 1ÕtPh}û*O¶Ì¼‰Y0­‹«6Íä‘u‚Ëõná8®žûÁÇÝ ²ëJ#øi/Ø(õ7$ÿTÝTEøð€Œ¨›fßç5pUkv$íÉfþòuBS¸€Y·ÖÑÌ•_¡€-\[zçýœDâPP¿?ºF_hÜJm×s³Uç&ILµÔßꈒÊyåâ®9 ‡¿C´Eô•d9-FœI±mn²GE¨|Á€ºý+"2û ™xʸLËN‹wejÊ—x¦êH<® =0Í­ÂöÓ„¦Ž·åå¶óùˆQðêDÍ’7t¨Ûí¹  ¾ÝA¼f_Ùù@WœQk‘6ãb`'M­B­ öò€®â¼e†°ºSûj¯-*êÁR'3Š5õ6€É{FÅ bŠÓr²É[RtùÉTºµhB —§+Â9Ø[œu‰éêê%dÝ )ù—m”—ʃ~@ %ef‘5,—Ño¾û#ãxs*ºÈ0sh°)WŒ²ÏžÆ4•óÒåˆëiYµ  "UJ?Ã'M`$)ÔÀ〭6D¢J]-£*-ÊVE&êË­Ž½< &%œÊͯ¥¯®ðWlÁêõR“‡¤ìäÌÄÒBG"| üÌî }]íi·e‰™rÒe³èÛá.ÿ ë²’ž|ˆÚÑØ¬™ù9‰5gïdÜ ï¾EÓ›ù†©'ãifâÇNË}HçªF·6¼¨ýt€]ößÖVÒu·¬ì¾8 Â͵¸üàNÔd¤”Ôô´¹V€8êPO¡7€¬U±õ Rer¬-ÉÇnñM¦Í¢û]gK@gøÏ´Šão%É¥e¥@QRûeFÛæP$EÊ·¸› ­Ú¬åk´vê3OSW(¤…YPA¸ê¥=`'hËöº¬Á“—(–Uy¤¶÷žSm¬‚y¥6ÌzÚtǰç³Ìw!/KLÌŸ®¢â¯çr¡çð€h‰ù*MPÈI­åɼ’´w¢Ç6cšÃ–ÇÖa§úF]¸~b³-’‹™<øˆ·ÛÊn’·Ú£‰)Uí¶¶éá†óÚß( ZqW„énp,ÓÒ„ù@.ÛA+ÊÂÛi ·ˆ„ñ±ÔÀ°Ý¦k5–!ž™ ºÂìh¸¹^‰Çq™IÛ‘€°P¤žr‰OÂÓŠJ*¡1+0I!:$öM®CÆJÃx–fGTf\ILĤ¬²j,mÞ#9Ë}¤…¦ý( 'ãŠ> +m°ü«è÷š˜E¾ Øò<¸ÚäÙÌ-¸;ixSµío(S­p "þ~P 7k[1µö;ƒk#¯Âͽ¡öŸZ“q‡däÛ–¥:‚°ó³¥¬Zû{÷¶ /Ëx N"SZlµUé٩ɉ”æ2²~_Aúî+p‘övJTÕ0x¼ÂèrÓ Œ­ ,6‹ga°$¤Y;ªÄ'Qsx¥T©ïáÆ˜vµ^*q>¤†ÍrÙ-¦¶ûÌ.¤·-Žeeåb}æ›-eºXMÉ$ÛLÐ<<\3EsÓ·[ósÍ:ü4$% ꢣ·jƒs8&•Qx i ×Ó!Ym®lÄõ#}Ï onÑž‘˜¦J ,šòËÍX8”‚•¦ãK^×Fæp­‘©sü '­ Åü Î7šêBˆß€0.BÀò€s(»,â*kïˆ[††ÄÓýÚH6Iã¬F\S‹%D¤yj`$åÍÅ”lžCX–â[AQU“možbÚ«ÕzƒT¹,Ç:‚|:Üñ0R¤çdixjŸ*ì]kO…K?¼#[쫨ŸöÀZ)̱\UN®öVWFoÙXú¹Râ=·¢•ÓP’¨MT0ÝN«4¥1ˆ¦&,f/!'Ä’9ºÛ¬ŸÔg‘%iyY‡Þ)—&éqÐ.ãeZÜM‰  AÔ,1Á²Œ?97Q”˜šWŠQζR7* ÷€#[ë¸ó€ÛðÎ9¦ÕdÛ~m£ORÀ)ZœJÚX6± ^ãEneÆÜIp( ƒ"  ÜÀ.…rç7óÿ–ÄÔJ”°3ØvŸ†&gfH9f^B”¶Õ}To¯ðÜŽ0XbJ½Wª²À[*[]ÛŽËIN` 2‚sA¿äMÂ9úE%ü0W¶I¾36ãÉIü­§¼®< ªt¥áŠ=,Üxã‰@±ð$ÎçXxEŠs]£÷tÉæÚ¼µÔò”Ovss7†Ä´¹¡½4¯òkDãà¨k0êœ#1}ËÍÖ¿iPq"gÖ©y Ä̲ÚMË€ªÚp&Ü~à™Ê•c³Ì”y$I˲·H%4@UÔxØ,Ø\ÀT–š¥¸Êæm~ÓY’t Ä;ƒëb}.$&R›€€‰š<ªÔá„ÞB›98Ú»°¤‘ÎСED)d©[ÜÀ… ºëõÐx q0£„ùt¤joº^B|#8÷¡5(h8 !1yM2Z`Û0‚µMÎ9u%>' 67ù’¬­†©“x[/Sç.뙟R ¬«œ¨µ´Rt&Û‹éÆÀobö?Ø^Æ•ºÛÿçªÍ ®AëkXó7ã4\[ØækR€\&X­h ÑjÖæßÔWq¸)¸€G‰i©Jž-“šL¤ûÊRÞ—QµÐ›©Ì§b›“¦ÞUÊ­½ŒiÔ ¬©°•®È7JŽe‘pkY#QðÚž•Âoöƒ8—¦& hïr¬…`‘{'¯( ÕQê”ÌKX¬àùÆPܬ¢RqI$ø|D¯cê(;?r¡Cy5Ì1Ps½ ¿,Èp$X(âºI¸¹ÔamàÃJ•š©ÎÕÑ^rU†¬Q%=™L:?Ó!BÄ[ž¤x˜Té‡+5UV§(É•”fåQK`[…‰µ´×áäâì-þµOÿ†ßÿΡFÄs”¬aTmê+²íù%%EÏé´>©á÷ä'_œe´¸Jÿ|ÕÅ‚Öò< "èt1ƒ+so¸ÂVBR€‰ƒªŠG£Î¸ž¹|+G’“’RÐÒ7±ûꀾ ¦+RîcºržeÆ‚i/bH:ïÆØì™©cuÓlÉQêl÷yF·]¬Sq雜t<ü͉vSoðôÖgÕÀ!Ö¿,· Ó¦&f±´õ>šêdihïPMÂrŸaïé}÷ê Q_¥á\W4(ì&¡2…¨=í Wv•âI)¹ ¾€ÛMΰ2Sk˜q-¡»ÿ-讆Üés¢Î©I)¿TÞëéqM_À¯-à6µ¨çp⇻¹åd½ÝÜ®Þ{À0¨THAJuê`*u9—YMïs ¸rA…ÎKSgåæB¦ÖSq–þê­õ­r­ 5J¬º)µÚ-Z`½BšRf°4 $Y%]BA¿1Ô@)NœM.v»Š•.£Î©L¥½ÂPá×%¹‹ŽA3xSªzYÑ;#[˜ÌH>"„ú7Øß^³^Å/†éÏQƒTïS¬¶&ä©y’M¾Þ£ +t•Tª :âè×aE¤t¥(ÚüÉ€_L¥Uº‹•¬>ÂXZ²…´Œ…ܾ‡É<Äœ:Êœ¡âÙº y iÆÔTÃëÈ UÀ‚ý "©'‡¦ž^ ¦Ë ©ò¤)hÔ¥#†]}ؤÊbÙÕqr“ÔÉ„,¥$´¶ïl©såÎ@ÏHàGR¼‰t©/€†ÀZ®\ è-νíTÿþåšÿáŸÎIúµz“Š14ÃË/Ê >•©G¼@$Ÿ­ÀéÆÐ¸vr„æ™rvšã”º¾õƒ¹Ê6êV“ìúeIn òÜš/*t·—#ëNVÿaÒ٧ɉId&É l$Ý£Š­såˆfk˦j”•ÌìÜí¶ìW;3V¦R* ªY¹d³Þd«©ôÒ&}JÊ¢£åË ,ÌO¼°–¥ÓšÇužãaë¥vEˆ©Ø¢®º}i¹iIÞà¦[_Ý•’-}SáºwúÃÊE¹±#+ˆ§'ÂýŠ}~Å áÑM*@ýO#ê®§°æ§àºš¤Me pû¤˜ÿ´­Iþ›z€R»M›¤âé*uFr™ È/0¿¬œÆãŽÈ‡1~ júبWd‘Cr^œ¶XdL­%KÜÂAÒÛõ€‰Â28‘¹Úåf^v^`!(–Šmï(ñM¾¨ã볊õj“N™]ZœÊÝH*qµ ”ë¨ðŸ{”,'VÃóXG»?Oi‚ãiJBBˆZ[b ·U,.   ­c¯%À%íô¶;;emn%É•,­KQU®³{åÿLQÚÀHiœ=0_2¬#Äê”QJŽ–ê`3ÿóßû é@LÔjÊ—Á4ùZµ!—ãËs2Ñ‘z…#ÊGÔ¨øB^TP‚TRÂT ààOÿŒ:¤ò¥a‰ U´­IJËÉ%ICsÆý U1U§––ÉRŠQÞ6-w¥éƬ똩XÙ¤eRžHIî÷ “ÎÐØVb¨íJ«IœxK ¤ºû…[ßÃk Á à(8º«ûJJD§¨¥™9e%ѯyгgîTºI˜›™–S*KeBɽþ&í+ ÌOI<¹YÞ$”¤Y@‹ï~œ "–©¶iëeÆ´mËÞÛ8¤¦%j`²³Þ§ÄvW0oÏcO\2©ÙÐ䟊VÏß1¾¼yÞæU”uºÕ&Z£& na°«_Pv ù`Õ)fþ—€-I²¥ÜÛù`*¸õ(‘–K!Ä!×\ÁVQùÛkž°ýaîþ òûÎðf°PØÚ cWUu슽O§â y ã‹M6ae9ƾÎâ†T¸:\ëéÊf§ÔS-%ŠÛ¯¼]ÊÌ´ÙÕ+ QJU›†„Y],yËÕp^ DÍ=Îþ]æÜp²¤Ü¥ÇTÝ< Ç-D]ª\‹Ø"fzB Ì¼Ëé·³ªÞ ëʶ»v0«Éâš~¤2•w­¸²øñ¥wÑGŽ¿X@OUæ1l® f]ê[KIi„£_¨x+ù |Eˆf¤ð R©Eq”¸K¡M’ÑGe>·8qUm‰<"Ã,S&P¤û;dåJnR›@þXúÝZ²¬7BbZŒîBÂÊJ³“®P5Ó™á=ÚuK~×–ýŒ¦’§ò¦ùöBTçÊü5Š¿öÖÿäþР'Ù𵔨”{6;_»GçnÓž Ðe‘ûôw“n~B7Í.V£„û´ ¤K°BT ‡Œ~P,sˆçݬR•’]6D ÛW^›Ä“ßãô,5,@}Òô3³3³xžœ…¨ L!Îð¶.s¬_à 3t8¤âP ìÛM É>ûxˆ”<âIl‚R«pé+‚¦¦›L×w50›-²,ê‡ÛëRÜ~ªÓ‹RРȾ÷s€AéfM¼¤Ýl¬ä¿õØÖY™ œ’åÐVÊV¡”Zü¬4¶°/dA=ÕRG(îe榓ow87( í|¼ +=¥Ô¦¨x]ÉšjƒO­Ô´"å![‘Âð yçÛ£,ÜuNH‡·™WSÃ5 îyÀWä%U÷Ê.æk_¥Ä—,ÒiàHÍ‘G䵡P+(Í›x —³§×Vì¾b›;gm© úí›øO-¶×œATœeúHXT©S¹R¡r€†¼ té°áh ßjt©z][ÙVé<Ò”A·îÔ­4¾ðÌXóíR¨í¶ûÉO³h‡O?8 Ük;8Šc*LÜÂOagU¥ƒ–ããâÃz¨œS{1°q!Vð onP{AÅÕÁHB=¡¼ª›]Ái6Ñ ·¦;ÕªoU¨¨TûÁ%¶E’@;y@9í*©SuªknTf–•ºêÔ ‡{£ó0ìËÿUïúÊüà?ÿÙvlfeat/docsrc/images/liop-neighbours-sampling.png0000644000175000017500000001014612237004745021121 0ustar dimadima‰PNG  IHDRúöK=‡ pHYs.#.#x¥?vIDATxœíMŽ-©…ÜEX²dõÄÞ‰÷?·'O–,y=ñ¤|ËYMQ@’Dp>Yòë[U@ž<7’ßÈ×ÇÇGä%WôoþÓ¯ÿ§£‚þí/ýÇ¿ee^ŸtTð÷ßÿûëæGWYÕj8%z—þ®ãúG¼ÜŽ ÊÖQ`¾É±ñn‰¸(½ƒTïg$ýÑ`ôû1%Qû:f+ ”>^±ôñ ˜ï½½#¼¿ôÃ¥“*¸¾“1È´¹¼Vê= \ÄÕˆŒî›Ü¸ÕÏ»+轂LÕ fŒOª€«ôÛ Ù ÆûY¯àêÌÈÕñ)‘ìV×W*í¾ËZˆ§ã>[ú׃¬«lve.t÷×»|Åß—¾Z=ø|§]~ÎSúnfüž!Û;욇¤VV/kJ÷Ǿ›ª2‘«£ôX4Å!ƒ}ñëÏ* •~ýÁcѲ“&åMâ,½¼ÿVã J7\:qÄ=XºD¡ß¥‹w²K—èa¿N¨vD´i´;3é€g&e)EWÉ~:àZ†ßFѾԙÙCß9ŒAà¢q?9[Ï>€/Kì}HX¥ì°÷wB§²#ÌÞßi3>»ÎHlDï÷D¶OOoDua€Õ­¯N¿týmúɺoíEÕ3Ã_èußÚÆï—¬Lø~Á9¹´ïÁÛɉèÌù “¥† ­Oû\’Ç £vlµ¢}élÊ´”•֛ز³˜¾ÖK/TöÒ×zSMg9ǵÞÚ—ò‘¯Åüðÿo¤¯¦‡{Dñï{wvÈî1…Á6å}›\Ò%ÂÐôrÙöÝߵ{~Å!…?Î\K=Ù·:¼˜ üM/õv³ú(ºXšÂ¿DÿÁ5?,»—*Â8“ºty§];RGeÂôehN×Ìïôm¯AÈöYÌãl‚’Âê5Ft0±8†ÈBȤ[†ÿ\YuÙCeôÖ®ÈWc‡¥ÝAk©ž¥¯³S…#{æ­ ­(7¤’ã›Þ°»\ÏL¶ûÅÕnÙÍeéí¾û‘QRœå*KÛK+~´ÿŽù'<ýÖÍ6=Ôeœ?¢,u±&…+¤´%`P=þ{ñcÕè#‰ò}µÕô´¹¿’ó·U5}` äµÄÐ@<5LÙ&"WìjT$žt†…ªõeÏNÒ_¶¾¦] é é é´šn|—ÏmÓ·;,H)%‡x²*96ýšçŵ<²ñœ]r|«î®õ_^w×î BÏæú?Ç^÷ˆ‰Ôïù$&,óxH>~\³Ç\Áü-34Ô÷.z™ÀîmË?Š>Ó–èDße^0§ûí NéšÈpåßÎ?x¼n‘½»r.­Û¤gcxk±®{uGûúÛ” aI®}†\d§ÃÒÏËSfá>ã­òg$J,Pb”àf·µtX¨f‘•—yŠ3ÒTç×TZÎÑ=›çQï­¡{–—øýŸêû³¬è.×ó»ËÌ«‹Ý%È›+;õG÷gT:ïĪ­è Ì늞Ï0¤»ôÆXʄ⚊‚)ÝÃЕ;ÝãgK÷.¤WEï¨QÝÛ×¼fÝUtjSY÷¸ß1Ûø˜ÆzÝ8Eý{£¬{{¿cšÂ#¨ŽwÚU4ÌŠß)¨?BgÖ¬øýQ}›¯9!«´›ê®Oñê÷*Ä`º~ç cuu'’­V]÷yO¾ÚqîٔꑻQ~­ýWWwà1yR5Ý¥Ç>Ä’_‡jý1»û–íò­ÒŽ-ÄQ®N¶åõ•.ÆÓ<ðQÈênª¯m )ݽqiDÞÃÅá׊SÀsU‡EùhAÆ îâ“tëÅYèÖг€çªŽ3Óº¦¢;åí`’¯÷ª§Aî|êþ‹ïu¿€È«\èRß$t•µP|ßÏUØ|%޳»ÆqoטÈË|ïè‚y‚Õ\!݇îéÎ,y™#ñ9êC÷ð‡Ü3[ã,Ÿ£>twíñ*>t¿pšü½Š9ÝïF¢··7 aN÷ê©mºè騻ë0Øâáº9Ýýô×?ª7`~Í Ì‚5V±‹º‡BúÇ—HdÓ˜Qßâ>l"×¼æä€úÎòqÐY¹—¤W}»ç=z±˜£Åq^æ ¢Ó륷ͺî%êK1ççõŸwi÷}ýé®N¶ `ÌþtW_¢¡¼TåqþΟî.xæM.‡Ø’Ëé“Òëë.E‚[Þ˜¿sæwwD§ÏÌ¡B÷>¢Ð“×Ð}ÉÕ‚¥º›]¨cÇP~‚sDvÎÙ%:…ºCôqÝ!zqÝ!zô#u€î:@w »œº£ëB‡MwˆÞî½Ý!ú³ºCô1¦t‡èÃLéчAÿ]è®tסCw|H¿€×¯?òÿÇ ú>ýžžD†èkÀüŒ_ñ=$/ p½<¯ò]/ÚM:‚Wfm8} ˆï:@w¾tG?r1?Æ«ƒÕU|›âCô5üˆï0û2~è>ÿ–@$ïÏ@ô5¼>>>´Û`|Ñ÷溿6}ÁõhËÒ0YÎñ}i²8Øý›ÉÄ|å3îrNƒTsôÁî9æ/=}f^{u¹?a÷:,)XÚó˜ävo1Ü¡W1:qY|Ë9%›s€Ýé órFÜÍ7ãc¿[‰F¿€ÝIPLŸvÓççgÊc¢.¼+ÜìŠ;=[| ìÞAÛô“=ó·{eͰàþ®pž»wÃõ"‘±—,èRuÿ²–Ïývdx;ö¶IºÉ-Hú~Þè°û8Y˜o¿ 7þÚ./‘;Êeô Ø»À´»²¥Ë«°ìkzÂîS§ºÏÜ–>ôè—ÏÎ3`w KìïD QŒ>¼¸»¯àÀÐ^¥ñ0¤<'ç7 ÁîSàD;•Ò­¦c%Àî ´gfð} #=ÈÝÇÉúšw÷‰kYê¤%‚ÝG˜=8ü 0¥×·@ؽ›a׿ËèPnÀ\ÓåƒÝ;`™>ÊôwŠÝ}B”ex7ìN…× Û›~,4Hwù`wB÷`?ÓÏo u<ìþŒ´÷Å2.þË »?°Æˆ®Ã¼Ä.!ÇÃî-ûÏéE·sI8v¿EËv.L/jô»ãa÷:ên³iúõ‡Tx»›ÆÎ(vM8¯Â(ì^ÁˆÃ.Ôü¢ÑÙÝsLy=¢bz;Fç ð°»'–™ÞŽÑyÝ`3´gÈuè-§K`¹jØÝ%ìa~×pž»;†Åô‡ývwϰéÝ}¾?»ã¢ã~G<.tw iŽ'wFçvß„èæ2Io;›ßQÀî›Pš./Ýw£zôF¿€Ýw£zÆyq"v³ÀîûpÑÝúÓ€Ý7$ssæûc½`÷= N,ªo®TvÿÆÎær:cùÌ‚OÓcÏ̹4Œ^­V{8M?ìîJD¿û”¦?Êñ°û,ß~¡×y ó8Þq ôê’j£/¦ŸvÏ1à‡÷rµß¬éq4[ Ž×=ùLš~ØÝóFg±©…ïüò̈£r³­mC·æ‘ElËoù@tP5=rD.EÚñÖÂyƒõ¦G`„ïÈè)‹ݰ »?Ãëx§FOYðÐ*v'Árƒ70zD.ÌãÝL‚¤¯o¿ÏmØñÆG¢3°›^º›t®Ý£Ñ£Ë¯O¦ïuüNá¼—é εûØ»9Ó[ÛØg{ˆÑSfú{Ëä:×î‘´?CárùÝpêärca~åä&ìþ#Ì¿­ÿþ_#ð' Œ,¿«Pš¾qf|ñ3ð\»?öÔÁ w½ ¶qŸÂ¹výŠååç¿jÜEò¨’J¯ï\»‡‰Ñjû^Û‰˜GÛ}€´»ÙHÂxrß=~ÂîTÊqÕãY¸p¼ïÛ ïnŽÉ5Ñô9pˆïÓ‹½‹ñZáv¿…qš,›’ÛÒ÷Õùk‡Áa÷ róÁi™X?ͱ:üôÃ2“+>œZ?mêXƒ³•avÿBw—KV¯)÷gi²gZÕØ¯±Æô§Û]q…¯AÕýÕñR­ˆ«ÆÔM®ÝmZl7rxŠ£,VHÞýrúíîÈèŒ_HŒåYPo„ÂüYvßÌè.( Möì¦?Åî0º_M¿¹ÝmŽDgþÙpÕÛÚá|K&G±ÚFßD÷/`tÐf»Ã耂o»c$ ºðjw„s0€?»Ãè`Ov‡ÑÁ$>ì£LÛ#QÀ‹Q»#œ ÌÙFr²;Œ¤1aw¬AÙî0:X‰ŽÝ7~]°Ìj»#œEÖÙFꬰ;ŒŒ kw˜BÄ0ÛáX†Íî0:°ƒÝatà…)»ÃèÀ#vÇH8¥ÏîçÀ5¯vªüì§0:pÍ+}å_ã0:Ø€ÏÎLæoìÊwßAlÏ·Ý«¯øÉÞº€k>íÞˆèÕn=Nù1y÷*6xìÁ÷PµŒöÀD&Ö»ƒƒøa÷ò%OÒï¨`%?&"—½5n—™`t°yß½ºK Ö{ðЙ`'ž÷Ìà;¶ááÌE ÿG?IEND®B`‚vlfeat/docsrc/images/using-xcode-info.png0000644000175000017500000044645512236612215017375 0ustar dimadima‰PNG  IHDRy>|C· ÿiCCPICC Profilex­—y4U]Ç÷]ó5d.™2ÏCæ9cÆRdÃu!¤™•™’¡%¢d(Sæ©D„L‘2FfïQÏZÏzÿxÖûÏ»×:wö>¿ýÛëœï>÷»~P’Ùp€'ÞÏÇD[ gqé2Žh`  X oçàKP52Ò‡Bþ¥mØÉ­a¡“\ÿôoÓ>ІÀ¡Z—?¬rÂöØì„¯ùü ×vpµs„8bA3uˆK!¦pùÃu'lÿ‡ßp€ƒËÉÚQÐÔxG7<Dß!Vrtòu€nŸìëèèëà q2Äžž^P~Šfˆù>ÐZŠEˆ¹NÞ ÔCí2”W¢Ê“ôÏ\”«&ï渡:híCîæ6M~¿+]¿¯³„øït025P“ÇÇ›«~Þ¬œrœfœîý>#>37›6§9·=ÿpÁì+òëóEû%ª¥æo„eÜòÀ÷›?ÄÌ­d®ê¯ÁÖj×ñ¼_6s^Ú¢ßÙÎøuy‡ugf·t°/{?è>L?²;9>þ[KÔ(ÑÌÉ9ÒFrIŠ ,U: 5mä©}z<Ós;ëY¶Ç8ŽXÎ=.gî^y¾B~Œ€§`¿°¸HŠèЏ–D¾ä¶´ŽLŽìÒYiù0…v%e•DÕub uÍëZOµçutuôõK † xMM5ÿz‘ÄBèÒùËxËD«'Wº­mQvöòñNÑÎy.5®ÝnSW7=ˆ<ñü^ò]o g__¿þ±©×r‹ƒ*‚Ÿ]¯ ©m {sãmxËÍ–[-o"›n7D½Œ®Ž©¼Sû0./>#!91&éFr@ŠÇ]‡{—R ÓÔÓe3„29³è²‰³sÖrgî¿Ïkϯ+(S_RìùЪDÿ‘|)S9¦|»bîñГ¦¿Wf?zæ[eó\¯Z¦†óù‹ÝÚÙº¾—u¯ ëã_û7X7j7‰4Ó7½YxÛÛò¼5«-¬Ý¡Cû@'Eçz×pwuOZ¯_Ÿi¿øvàû໡¢á0H}ÑÌÈôÇ£qc6Ÿ$ÆÑã£eŸƒ&u¦è§æ§«¾„ÍèÌÒÎNÎ=š',È,}m]ŒYÒÿ†ý6¸|÷»Éª}+±«š«Gk5ëW7Ø66à ÿü´±Í¿ÝÿË{‡z§rWwwn/x»_x yÐrh|8utõhë8ø·þ¸ BiŽrE‡¥cʈHFH—Éá´”¼X*cj{ÚèSYtô¯ºǘ¾2o³ÂÙHØépìÜœ§…¹D¹ÅxÄx…ùøÏðð³ Ðb÷„–…ÇE:D«ÄrÅoKxHšHIKÓKïÈŒÊÖÉ¥õ‘7TàWD)N*Õ)§¨¸©ª©1©m¨wijk™h󟃟û¤óL7VÏA_Þ€Öà‡aûù£ cS!S´é´ÙKóÔ ø‹ç,8-.\~jkåtEÑšÞzݦ˶È.Äþ‚ƒ°#‘ã”S­s¢‹³«¢­ÛòÕ·î™xO <#~Å«•éíé£âKë»èWïŸ`{M<8Tt]7„9ä{èë°„WÂ…ÃnößÊ DªÞ¦¾=Ucq‡ÿÎaì`\q|`‚~"GâvROraJÐ]£{|© u,­*=>Ã9S5‹%k'ûCγܤûžyzùü$ßô>)J*öyx¡äì#öRTérÙpy}EñãÄ'A9Ušé™ Ùròxò- ŠnJ9Ê2,36‰ IBµMíM½BãI³JëC»}*”M—LÏB_Á ÏÐËhÇø‹)‘™¹…ÅŽ°²i²-³ßÅÉã¾r¤qjpnŸ.ç²åfàæIæ=χå>“Åo' (°+øN([/¢!Ê*º+öQ¼V"[ò†”‹´±Œ¢¬ ÛYjyŒPØWÜUÚQÞS9RC©Sh0jòhIkŸ;g¥ãý«=Ôkðå<ò@Ó|³óý‹B¶—Ò/÷Y_Ñ´Ž´i·#¶?ïá8ã,ìêÚw•ÓýšG?ä~Q„y-ßrl@àµÙ £àæ‰ÐÒìáY·è#Òo3FåÇðÝ©ŽSÿ螌LypO5u>=!S.k)'÷¾Y>¶` 0­ØºDàÑaÙûŠÊ'I•¾Ï®<׫Qª•z)^/Ñp¶IëÍÅ|[\GeçXIŸú@äPß®‘ckW'7¿$ÌÉ.l/u}¾ú|£së×®øÁ­ßú#1 8 Ô €8P :ÀŒ& »‹4Ÿ‡¾x=ø-ø+øBშFì •ÑÈaE@µ Ðt7Q Ñ2Æ󒘛8•MBò“”@ºFæK¶KA¥x@)MÙ‡u£ÂPUPSïÑ”Ð^8E|ª‰.^’~ƒ¡š1I™Ãüž¥ˆÕM›•} 7Àñ˜3þ´'—1·,/ï.ß·3üƒ‚-BMÂM‹¶‰õˆHÌH®K#ddEåtϺÈG+”+ö+í¨œV5Q‹P¯ÕXÑ:£í|®D盞¨~°AûùSF.Æ ¦´f^æ½nI—~ZZYµY‹ÙäÛQÚ‡;ütrsžrµpt×÷èÄk{µ{kùtøéú÷]3  ¶½¾ê¶}‹&¢à¶HTcŒáÉ8B<1-™/åõ=ãÔ…ôë™Ø¬’…ÜÁ<—üÃw‹x‹_—=š+ ¨À<ÎúëLeÝ3­ª¡j«š¹Z÷ºÕWÞõë øÆÅf›7Ã-­ÏÚ™;n¾›éRéÎîYíSíOb¶|Ÿù¡ï#|TlìʧˆñGŸg'¦©¾pΈÍ*ÌiÎë-|5\Ô[Òþ¦²,û]èn…z¶º¾öy½sãùæýŸ‘[îÛF¿¤vXw‘»‹{=û•ɇ^G†Ç<'úÿ©—~×$ê^^>8}ußÃÿß§‡?TGýn'%™ÞÜê©¡‹:u^Àº| 3¨ ÍÿÔj'ñhÈÏr­O¨™§à¤û¯æçÕq¨{‚|Ü\\ýpªP¥ê$ˆÓÁ; âÄEEeÁš2 ¡ÕªKt pHYs  šœ IDATxì] `LW÷ÿ%3Ù‰*öXCíJµh-¥”V•ji«ªè§ýè§ýZÿjëóÑMWZK•¢ºXj)jß·Jìj ‚D&ë$ùŸsgîxy™7™‰ÄÖ{y¹Û¹çœû{÷½sÞ½÷½TP( …€B@! P( …€B@! 𒉛ßLY7¡;J„B@! P(n97C’¹…¸2ü®ê Y ÅN! P( Ía¸QCí¬½¾LŸ×ž%WuZ:•V( …ÀßWF^_§Ï3FÎÊÜ® FYßN›7JK…´õ²LÆ®ê$Š …€B@!p7!àʈ;«Ó–¥m[xyj„õô2¯Y¸«2V”ë% Ó{d{OÚhiUû‚cÏ8*ü~½vÕøQ׺äÿ`Œ´A›Ï¦ ¾þ´e2­%Y.ó†±'{ ´7™vëëX Y¦O;Ës™ …€B@! ø;  7ÜÚ¼6-í(—iËa$ë¹L;£s”¹ëH%\Å\ç¬^–³BÞÉ×ie‘l+óL¯-Óç%Q¬§×çÚÉr=½>/éŒb=½>oÔN–ëéõyIgëéõy£v²\O¯ÏK:£XO¯Ïµ“åzz}^ÒÅzz}Þ¨,×Óëó’Î(ÖÓëóFíd¹ž^Ÿ—tF±ž^Ÿ7j'Ëõôú¼¤3Šõôú¼Q;Y®§×ç%Q¬§×çÚÉr=½>/éŒb=½>oÔN–ëéõyIgëéõy£v²\O¯ÏK:£XO¯Ïµ“åzz}^ÒÅzz}Þ¨,×Óëó’Î(ÖÓëóÎÚ1 Ú4—igdÇÎÒLÏåÎ짤g§AÛÈ)Jm¬Os^–ùQ:€Ž :|èà ë% Çz¥e¾\Ÿ uíµ4Ú4Óêóª½ -.Fi…Ÿ?Ú±!¯ý¸ÐÒhÓz:Õþ:ZœŒÒ ¿¿ßõ'¿)2Ïc„§Ó‘FGŠ=M‘(—tZZmZÒqì4ä7S µ6Ö§9/J—üßÿþW¿mÛ¶–-[ö~__ßJN%«B…€B@! P(8hûøø4jݺõƒÄñ×ìœÙ!`g€Ûj™—†˜ó.C~N3’3ræp™,÷ ë••%<n ;Ài …€B@! (ØÞ§©tH¬B¸ŽË¥cÀåìp>“`äh3Ò9±t¤2&¢1y{{WdGÀ•3Àuì8\½z{öìÁÅ‹Á3 Ìf3¨£ˆ‰‰AÉ’%a2™† 0øãœg¦ 6›} gVÏ€PGÍ&„‡…{¬§úªX! P(!@öñjÀ6˜í¯œ!`œÖæ:L¨FÆŸé¤ñׯÒ+ÂõsYÅÓ§Oo¥Ø0°ñÎÌÌÄÁƒ±{÷nÐÞ+VLÄ\—’’‚ääd¤¦¦¢~ýú¨Y³&hšÄ¥c—g‚O~  ©‚§Eð.(Ï   Ò3Hè™ÍzZ,¤§Å#= AQkRÉ9ö&Ø/=IÙ(À—’QÈF™¿æ_‘¡<¾9Xq&î Î]KG`è=ˆ®..F[Ý­úëLÏ¢Ó%éÂ_HÈ, ¥S§“Zþ”à÷  !$_8Ž#%~ÅQ¡j5„º^´™¦Lü~È„– Ê‹‹ÑùEG£ÓÓz«¾ý iå£QºÐj*¶þç}Ì»\M"Ïaê§³P¼f ÜSB?JãdÙ|lO GÕp~c:ÿ~~Þœ2 fšpyí øÖk‰òÅô|óç£(E…Àÿû߯ˆ·vO´áÎD²Sà2n­CÀifÄ·FYÎi>¤C c3¿qà*$&&âÈ‘#(W®ÂÃÃÅ“7/ðr?ñsšp@@èµ A!Œ½_É“^D™2eZ†È"]Xa^>°ñ D||¼Û<=š[Oo3¬´|•³ÉŒÒ¡¥$ôdÚüô4Ò_•ß(9°œÜ½^ÍÑ©j NïY…Û7`é‡1®SñÑ O%X­‰Øw-­ÙȾ§Àrþ(öŸÌ@Æ5ä„O:Íb™b*ÀÛr{N˜P'3Ù.æÀ·º7ªû™‰Ž¯µt\¥w˧N™é õz Ùè~Øûc:üÊÔDKï_ìgÇGÛ”ÆÉ‘}8R²“:-ÝõôÅã{èžô0Þ|¾-ŠÑ¦ikZ ÒhL¨ ¸`;Î6X9[ÀyéH;α6ÈzG™‘Sà  „t8æÛšÌk™6³awŽ?~òg.—xöÀBÓñäÞAÃe² §YÏŽ†àI*ffZiÙ UgZyo˜'ÓpmDÆÉŸ'N=<é†À|R,©ÂyÉÊγì¼Hž²vª¨HÈ¡å% jƒ–hß$ÞÛaÛì×ñÝŽcHHk‚ÈL#ûF´ÆäÉm‘nIF¦ë!í²gÉ'Öâ§Ÿ½PáÞhò•£ä¼æì›‹m žD8]¿[Ž\BÃðH=•&ÏÊÐAíZKÆ¥£@`«XvÓ ™…Ó³aÑÃÏ#¦bpÚk›èôô-‡ç'O&£j!£z€ z=³~õ<Î"¦¬t$åTAñ@ÞפՇÓ4Nh‚ ˆâüîS²¥¿orÊú ‹–4壘¬S±Bà6A@ï°Zö б’ÈŽ‚¼å¹2´ýpåHã¯Ù#a'@{0qä7SÀûx!/ð’€\`Ç@¹¹_gäåÞèŠ/ódGƒÙ–yeddÐ_RŸ `9òõÈàà`\¹r%_ž¼!õm‰;âæB|%O®ã>]¾|Ù%OÖI…¢@€ $282â<4#¢ê;|aÊIÅÞŸfáHM'_\‰6Ïü¬8±s5>ÿa­]¡úèûüC¨SÎ6­l=³S¦œF¯ñ!œŠtݸ_ý²MÐ×ì4½ZU‡ô7,ç÷ã·_ȸ“ìzãµdaÊOÇa¦+åÃqcÞ¸7†t‹q´aJ/ŸP´oÝ5ÂKãr§öˆ¤%ø]?aʾxµ+Øˉxç§+1´ƒ­¯Ô6;;;g½õtéy-úc”AïC懤S;1ÿÓ Ô©ÜÏ?~?Êñ´}öUlüáü²Û®hÍ6xîáûQ¡„7Îïü ‹¼i\/™ÿ-:‹Ê½G sL˜½CF‘§ö¬ÃâïWá¼ä‘Ç£I„—FOz²¶žÂÜÿþ„ò}Ÿú1©¡ŽÖóøå“•{  ’·ÎĪƒDL}x®éIÓ-ÎôlU:ï¯ä#ˆy¦ÊÑ\I&‰Íìã„ Åý$_9‹ñáâýtþöbÚØy¨ÐóEt»7–³ûñëGs±ÛμEÏgðÀ½Q·Á’MîÞªÜßi¹Ã<ê¥m–ÆŸciÇ™†Ód½-gÿ«w dCÙHsžÉz)TÆrùÀ”ŸÎõütÍÆ[pi\Y§™†/Z^R`Z6à®ø2-Ïð› Ü^Ò à<ÓðÁeLËiWÏÀÙMó1cY€ Ydà>ø KCFâ‘Ú%a½¸ï|¸æðâØ&—®y!°´?ú4^‚;ʢ簈*^ >pûuǘê˜EÓô ‡ñó·q¨óð`¼ò€«?š…•{IÏfÎõ,Y¬<¼³R‘\ uB³‘–n{›I5%%öŒ锟œ:íÐçj<¬«†î¯Ô§‹Å¶ï|¼ў¿î£óvj&ñ%Χ=‡§›Ûf!sËT9…@‘# í/_h|ðàgÛÌ‚ÖfËz*Akç¹N½S Ëe,ÊÆÒ àX*Â<8-b6®‚4ØìpZÆZc+7ó‘ô®ør[ɇc™æ¶¸-ìdpàzn㊧ä£å%uaZ‡€ùJzW<¹ E@6Lþ98²ð;|±í,- yÃ샧G·D`V MYÓxoþÞéQ—¦2‘™z›È!ˆìú<þQ%i´>P»C4_¹»^BÝвÈÎaÃFN ŒxAïÝð1„Ò§ÆShºœ—7Öî;ŽŽ5cpùènÚcR Ïè@O¨é´ªˆŠ%sh¦**7@Îö TŒ¤}1ÞY°ffå^ïÏNÃ59I&f¶è*.Y ”õ¢­ÇÐ0²&²/ÂÒ ^èÿdöå«1¦Éiެˆdà2""V Y4ãvšô1™ê":—¯e£\Ãf0Í‹E|j#”÷@ËvåaM¥~x‡ãž²@½^ËãÖ+ å«äàBpñ oNaEò.ÆÓL]®ÓFKg¡ ¸*p1Õ탞-«Ãšž‰ ˆŠdl3¨]¦¸FlzRël:lˆé`Yñ®t$Ç']œ²ÑèY7éÖ T¦üzÒZ¿-¤!Eâ™KgÎØ:yå#Ç·$*„–BND(ÊÓkÒÞÙVüµ—ÏusôêPiªÒûÄÔŸv ¾aÂò»£æÑI(nu|ðeʶ˜®ÇAI‘æ:­=g§!¿!¬eÂVæ™§¥“àpò{Ræ)~¾)H#*c#Î´ÜÆ_žâgÃÌOõ’ŸŒYQæÁõìðÁiù†×; RO9SÀüXGŽ9HžK#?=ÉQe…ƒ@&oiÞbÂáPšöy„Ð×ÀiýÚn ª– EÆ5‹Í¸‘Á7Óè-eÎFr*/1‘kìƒ{hÅaóÉ‹Ho²l×mµíØ1ïn¡'`rÌdHËд}mô;wœh[Á'#Ùñri—ÒÒùwKH•”tdЬ…;!'Ó5:µ†×Wkqê¡êÀ¾àU¶*— ‡‚y5ó5aMM³ý2JÅ4Û@^]Ÿ|ò»…ö2•§ˆDÁ:•C³&Ë¿_€å{ãáQfzÓ®1d^9ÖTaŒs²Ó‰—MoX/cýGŸ8¦Êmú{¡ÖÃÏá±ú6ëT/CP“³Â•öï0vZ=.w`f #5ä¹W õGñ¥E;xUe]èɲó yur-'i´DÃ÷ÚÂ×±=yœkLË)¤êo–™y¼Òh2ñ·ÝòÕD( ‡ý%ž|Ùimµ´Ù\ÆuœwŒœÉH6–yK%8Ïi©„‰¤«À{ø[¼^/ ·4¼ÜN[¾I±±eZnãŠ/çÀOæÃüX;LËm\ñ,^¼¸Øü¨ÕS:¬'ó”1óažÜÆOÑ@ý)l7û*é‰<ŒÎµiI‰âᔯ‘9itÓÎ.n“MO­â'ÆèIþúùJÄ)Zq(ûP|é|f䨯q6ÅÙvú²í‡bäƒdì!';×’ÒQ® °ç ’Ò³$ÔNcµïRÌñf>²e~1-‡EÆ ¶×ZlZµ i[½Ñî™hzÑ€gبR„^Ätã+ m}ñµë†×ÿÛ“f6D%ý¡1J˜ì[úVýÙ¯¿G{è‰|×ô1ØLW°ÄyYHg™9Oü÷¿ ø\ÿ“‘‚¤k¶]ûŽœBçšÅukêz=YsR“@ÈÎp¡ã5šÌ±••–Žìâ¼kƒô±5vè•GÏ몹HåÕ‰‰]ÊaUx,°ÞäDDѹþõ®=Rͱß#3ƒ&˜öxrŽY² BA€m0$¶ÃœæQ+cNK»m3Z×óTe»}pBf¢²!_w’™¤á<·q8ö4+À†ØS ž:è&å,¦-ˆñljøÉÛÙÓ½t˜†7 rg¼dë€7JžÒx3yÈ2¦aZn#Û;‹ù¦cc/yèc=On㌗*s> 9©HMK¥õäLzõºLQGƒÓ!ÏŽ–#pô§Ø{ö ±dœØ¶èúh\±$²ÄØÍMßêáÚ8»ò#,Þð'ÎÒk­§Æž½'éÍ„,”ŠnL¼â³ŸþÀÙ+ÉH¾r‡Ÿ¥ºÓ´~NÎ\8Ÿ„tË ®YŸIæ¼EÛ²ˆÛº'½š"¦퀷·!&×ùÐÓi®<é&ôÙ„Ïæ®ÆÑÓñˆ?{ îþ—ÙØzÑìÝ3ΟÆá]Ëðí‘=s)‚§üJäàÜÒ]8›œNK$‡f iOïëщ–tz*GsÂ{àWÚa™”’Œ„³Çpøl’Ð/·^]ꨡ£ó!ñÈÍˉžZL\¤só±ó7”Cõ⟠Y(Y¹•lÀ¦'h™"WÎîÅ?ENÛ†÷¾®¯Ô[Å “¢lw¥ý¥XÚgJ:ÒÒ¦s™3›ÎåŽ`4SÀÒaLœÅR®idžCDîRþ–ïÔç)|žpøE¾ 1-·qÅ—§íK—¦ÝÛ.xò‰ažLôryÀ™l.c™ü¹å„„A+õd>2pšß|`¦ÍOOÙNÅ…€í)”nÝNƉ¬ã§8vš9¤#²Í`ôÍœƒYŸMÁr ¼é[?=MÊx#™žøù«•¸M6½æÒ¤†äáÓŸauWÚ¥_¿þY¡üŠÕÂØ¡=0ããølÏ 2¹äŒÖîŽV.ÿ2ÑhWvæö²Â:aìsMèyÓ@{ ÊÄüX=µ{4B1rtl“¤hnïéDùÓõ=29¤Ï¿^è¹Ó¾ÃÔM‹ ~S¦>†¼öªÝ×ewÍÃô÷×Ыvmгã½X²|¾„çZ–Cåf=€?à³IëÑ~𴈔_Mt¦s:šôÄS™¾øúço°ã'ÒŒñ݇¡rßÜzŽþĂԘëX޾+‘-ÞÐ0QßlçŒå`ï3õÇ3=Ec[{‘´ó!xÂX;DA¯7Šq@´Þ¡÷bÔSixï«ذ˜–½MˆîØÃhŸF:}B…À-@ÀaI¶LË™ÎëV‘Ë®3.±®ÐÎóõ'cN3syˆÙÊó$©<øÇi®«B_*œC±ËÀÆóÒ¥KHJJ¯òñT>iž’ç§s6´ü"b6à<åŸ_`žü±#æÉ¯'2Ov:8hyò?4É]žlð™'¿ÆèLOþpëÉGr‡g~ýPõAÀA%ƒácµàj²mÀu.Fu´O DqxÓnþÙ/^´'àZªm7@öÞ‡§Gõ¦ivææ ÿbÅÉ`e"•x›ýàg²"1ѶOÁì„â~ôImÚõ.êÌTw•ê¼Éñ @Fj:•{#Ö¢mFýº†F)/Ÿ@”,æG3 Ô/‹ì—7ŠQ_Ͳ¯^¾.Dºki¸?ôYî@3ÒX.}tËÏÏËÕDX}‚CzòÛ5fúöíôÏL§Ís´¿‚d˜¨] z;#•ö/›rÒ`!ÉuðF]S¾´±IÍ~~0‘n‰k=K’žVK"’iÙ†ƒ‘Žô~Ý‚I´A›÷z®'KÌ‹]~r|ƒJÒ’P¦í\2 >Åé­ÆÎµ·|Í™¸v-…frlõê¯Bàf"P§NÇI}­D¼uÀ70¾YpÌ¿‰ 6¤òà‹µ2¦¤Íø‹„ýtd,vøÖ¨?ØÑf‡@:•÷íÛ7‹òù^6`#Ê_äqž—qš 7zù1£|äyöìYÑŽ ¼Áu<½_žü”Àz2nÏõdþ<“ÁË žè)¨?·^tîx°ó}NNvÌûоxW ض'*tÁ+ëö#^´É^åçŽÙG%ÏБ·ŽŸÔ•;ZQÂ.WÌ h,–½¶§p2•„­ÿv5ìõ¼þ¯iåRÇÜ8º$ÕU訣rš-€žNù¤Pžk=¶á¥Ú(nºuëö§æÇè‘SÀÎßÍØ1à4_Þn;ìÈC:˶àìp,®«²wïÞo(v+ð͈¬4Þ²_6ºò¦%Ë݉ïžîôEÑÜlè{×Îbß¡3°†áÞ†µaN¹&® ›­‰’§P(ÜA ^½zOÏÈÙéð~jépœ%à˜íáðÿmçT« ’€Ÿ‰dЧ9ÏŽÇŽ´vÍ]64ŠÙðóÁÓûr7¿'íñ½Sx:Ó]•Ýjhö§t%´,W^5ÌBª%é†>q|«{£ä+ ö—zËi²Œ²\Ÿ•Ú?Z§€iI'ËœåeÇÂA(¨Q/h;©”³øNáéLwUvkÈLµÐÇnl%U! P9³ï°ÅÄGkŸ%[.ÓIÃeb2@ëh ¥µ¹^æ9f…8x/]ºÔ–R …€B@! (jlÝrÛd)S;ë϶:ß %’F^. ° NË=ì@È=ËÍ…Ë}UΟ?ÿ%åUP( …€B ˆˆˆˆD"ŽÒÁûø½XÞDÈû äÎsšc^Nàƒ÷pž§Ùy„|Âç m΂Œ¥·¡¥á´t$dZ_¯ò …€B@! P-l‹ÙNK›.m7KÕÛoY'i™Æœ:jm ½ág’©ŒõBu,TV! P( "@@Ú_iõ±;vÞ¡–»Ä,D â6zÇ@[ï`® …€B@! P)Î쯴×ÚØ]ÅÜu ô ¥ vô‚žVå …€B@! (¤=Ö}9ƒà‘TOœg E 4VÄ …€B@! Pèé²\: œwf¿%]®Ø§À•)PK“KÊ( …€B@!Pd¸zH×Úfi¯*â‰S e Hæ2¯¥Qi…€B@! P(n FvÙ¨\héÊ)_vGŸçr—ÌeC+ …€B@!P¤hm´6ÍBõyCE\9zƒ¯Ïk…hÓ†ÂT…B@! P(…Š€´¿l£µi¢Ïç+Ø•S`ÔØ™½Ã`ÔV•+ …€B@!Pxhí¯6Íôù|¥Ä)B¤s¯E P( …ÀMAÀÛlHãÉ"é{ÃÎ!c=±Êߎ;†;w">>V«ü´õÍ‘}+¤\¾|·Bô ËLMME©R¥n˜bp㤤¤ 00ðÆýM8˜L&”-[ 4@åÊ•ÿ&½¾cºé΃»¡ý6r Ü5öRøƒÖݬè¡C‡ðã?⡇B¿~ýàçÇ¿Suw‡ƒ",,ìŽìäÅ‹Q³fÍ;R÷»MésçÎ #w·õ«¨ú“žžŽ;vàûï¿GÏž=Q­Zµ¢¥øz†Ûni¿ dŸœ#fR«i”ö¬ ŠºPÈÎÎÆòåËѶm[4lØP8^^F§±PDÞL¸wj?YooàÝÐßUJ¨sáÙéô÷óǽ÷Þ‹äädqß©R¥ŠËžAX˜ÔZ[Ì7}£¿–ÎP¾‘S`Ô@+L¦YLµSåEŒ;W¯^ETT222è5Ádºû NVVø¸ìûˆ·+ùú¹SÇ‘«~UcÅ÷™JQ•°råJ0~ÊÁ-*´óåëÊþjWt!ž:ކö„rôˆÜ¢¼ÅbAPPÒÒÒìN7Ìf÷NoÚÕK¸BÛÌþ(V²ÜkU4½´g)6¤ÔÁ#Í+¸% ;'Gô×-â&²âÀ²¥H­×Êé—f¨n9ÕÕuVç\0ëž™É?sîYpœ/ÿb(VÌÿ†Î—5ù8}ù-6z¼2­+ø{¦Ì]BEFíVŸ‹; JÞ¯ÄxeZ3Å^ ¾ÿßI]¸[u•N€Œ]9’Ö‘|— IDAT&îÞÿ6&N®æ¤2E‡@ŽÝ¸È=œwë©'ù0¦nŽ óµº=ˆÕ'¾E½bÚ²›—þku_ H_†K˺%4›žXÜÞP™þ'^mð(~²snÒõEŒyuj•2ËJ߃n úbܶ?Ñ0È‚?†¿‚Œ¹›P?\߆ê^¤ºï6;©sÎÞ#Ý™¯Ïè|½Vˆçkýà™u#ðõèd]\‡.u{ãŸ'.¡Ù-8ÿ{§•F;>÷£9¬Ko‡sQ„Ý+tÖ|áÙ^Dæû;|ß¹S—ò  [Ãí´´É2fM\Ùïü¦í¾Œ¿VMC[{ûˆ¶£°ñ¬]çlZÙ®u×÷‹ «{G®QŸK– G‰²õÁ®ÀU1Ó„ŸÇ¼Ø$K,&<:û“ˆ¯å,~|ï{œM·É g#RÏ./ýæMx111xtÐŒßFƒ¬sC'}?\åó=_ég±àíöóqs6Â"Æ@Œ€ÏV­Âûø\F`Àû«Duæü cþÞzéA±AµmÛÇñê¿àtº Ë_ë0ª­­Mˆf$Qå•ÂnNKÜô6Gð´ÄѸö–ˆ±ÓÛ’,X7m˜C¯£f–Ôæè´± Ø0Q<¾$áüÖ™ørýÇXÚ6çíëíÆÍÁ_›¼¸ã0ê³¥Xò¾½¿¦!ήKÜÒëãjÀŒÝv^¶v®ðõ¤î†ÏÅÒ¥x»‡ ×q ¶áÀÒ÷íý€UG“„β Þî!êÚŽ[€¸KÑC^s«Ž:pòè:MÃ?[ Q¼ m£"0jÎd%ÅaÚ°¶v†9Îk~˜Øö.y+§€Ð¼ÅAkõ¶Y¯š–V_'òîÎèKƬ@.%~ÿýw=­Ê1<#píÚ5øûû‹™Îó{׮¡­¿Qõ먔L;ˆóR^Xÿzü3¿ˆCè±…¸·ë¿PóÀ{¨œž€c?ÇçÆÌß6á…ƒSÐuàbt‹Œ4—mfáó„g±pÍzD…š`ɬ…Iëw¢zx:¾y²9Þýé1|Ó§:R2èž‘"v5çÕ*o ÷“ ·BF"|‰ð×ÙŸãLâ*ÌD_̼?—/_Á™ØíÈL¸„Ë¥hÞ<ƒúxø®\ÆeS<½zµ .]F©€T¤ÐžÆÌÄ+ÔÆŠÝ_uÁ;džaö/Óà¿o?ý;R¯Š:wôá›.ïÞv'¸>_V¬ç^¼;¿íœŒÐÄíݶ^ Xƒ7Û#áÜr¼Ño9^ŸùÖ¿°­º¾‰Ý7BÌý0³þÊd Ž) ëÕ=xªÃçHH|ÉÖ³x§Io=;4B¦è0xHßds"<Œ$NÓÕoIHÀÆ…´º1‘ú’”€å ßÀ‰°©X³é%„æXp²V¬ß;á´ódãÞøá±Žx²zkÌ^¦>€¥›ž@d‰Y½[3˜ðøë:23×ìD£ÐDÌy¦-š¼€o¶#Ç0ëÏ‘ôúLlÚô>mÞ?ìî†çc’ñÕÀ·Qï“5XÜ.Tœwñå½8îÒÞð¹x®Ço—ç¦]ñyû×ñÛ¦5Ø>±-Þ\¼Ç8úhú`!6ýv#: F›Ïm×ܨíѣ߯tÍ=™Ï5çü:4“Îú€åødé 4,cë&áí…­±æÍˆ¥\†5Óù=A?Nyürà‡‘7¢xñâjù@ÒÍÏKÛÌ’sÙfwUñÄ)p&€È¥D™2eÜ•­è vØ!¸pá‚ã¢Ìï+o+¶hoøÒ2ƒ\·&À?ŸBó>mqpåLÒ®~8…æÄ×P:ëd˜üÈ SnúÆÉh¤gT½ð5Y±3Ÿ6ß~3õB9JÔlˆÌÝkñýŠÓ8KªxY³Å’‡É›_1ä7'¤V6z£¿¼ãÙÇÇǨ:wyŽ<5YÂj«¶`ÏŸÝPñÞƒ,Ú˜)xi3ñõ1qÚ´ÉiZ> ]³Ìœ¾Œ-sg?~‘A4[¹ÚU&)yä–ì4ÇçÍí~ÚÏ—·æ|9˜ZÏ€¡uAT*A K´ÄðqÍðÈ»0¾C{xŸ~µÅ K¡³Á'0aÑdÌÃÊ!$$ £zM’dXÏì"§) ú·„`yß?¨Ýz[;ªg|:M&?F•b>gÞ¼î4ߌ~öSš «`÷Ú_°ât<ŠS­7Í™L(F›I£ÃP.,üÙ “7Iç>R‡¢_]€–JPM <>~Þî¼ §Çw 4~…É[R]:ªrH“)û/ Š²ï¾Ž¾4§2"q#ð8ºYçbèwß _–Ö„ðVügê@T¢Ó–Ó ^~BÑÇ¡ßaÜ#õH{ :Rÿñî[hY)ˆ®¹Ñ#w®¹¼×© á¥ù»!(wO˜8·~˜ßH %§k̾h]#Ðxù€1ãû ß{ø[!¼ÑPí)§æVýa­µÓt·rm¹£ÐY§À•)Ð+<œ,… 76.lÌÅEÉ+¿yÀ±Q(߀n¨ãæá@â ´°ß½Ó/îÄ«oÍâ>ÍM;vEçG©ñÈS¨d†9‹ BsDSšFOºýµG–—_›bÅlm€D̃Ñt#šÿjg”M˜X«Iè,œº“»ûæ÷‘÷R¸r|Àó'-š´ÇCUBàðÄÈ•øÇÆÇÈ ÑÛ>6^9^´ÌàE˜ú’Óä#œ‘öµ9fQž 6ÅímèZ4Qç¦>¼äán?åùŠÓœ¯ë}ΡÝ7gÉÏœ+xÓ“Ö3"<Ø&Kœ?/˜¨œi¹ŽÞ^ÍSçÄÆ8&û9ËÊÁUÂÄÖŽÇÀU{šÚæ0_2:Ř?•²#jwAÊÈÿaä#­ðÖ»°’£Å²MlÜÙá²Ó^?÷^ô U‘±‘ýÉ2‘ã…Tämõ-:"Ü^—nïó B—ÿ‹CÕ—àÓ‰O é«Ã°áÈDºq—“× É7Üè¹(ÉoŒP?¸ì„Ñh§<ÝÍÅ9³}ÑG~ˆ+¨ž{O—ˆÈ{rÍ9»N xâv]®¹FÄm©…%ó>ÅÓ›bØ0æþH—8°S ž)(]º49–ìÔiÍ„Kª²ð`ðµ'@Úe–dTžG 7.—5Cý‘êÃá||‹£Yçg€~ë‘ùn_4-ãOk뉰’±óµúÐè¢ÓÍi²Å™¢ góoãcoƒ´KXµxföhI ûß‹ÅÕFÌמ̉;bw =÷Õ홂l³xRM¼– ïÌTœ8µ“úÛþäPñ³ÑöãѧZ1Ìÿ÷38‚6¢œg ¸¿&1S@tÔu1£à_õHç7mÂCc:À²ógL:¼B7qwõñÄ¡qœ¯þ`ùœ—Q—ÏIZ"nÚ‰æ­Ð­'ðÔ׿£Ï´î¶Ä6¡çG „05³Î>vç)Ûvþlç"Ó^Çç’N¦¦.°luôÄ&¼öþ"Lé…•ãºÓ\Q'ò9óˆÅ‰ó©ˆ)µ¯t™HžÖ»6^4†bmç’]5KÜ.,¦xöÀ^¨‡- y'4",¯Dù*D›Š J‡Pùõs_Í;÷ÇKÏ|‡£ý'¡&½õñ۬מŸ£Vq_¤yeÉ1¢éƒw*ŽœHC½ý0¹|6·Ÿ+9ÿB%V$ŸpsÏE^¼~M¿´iºÊMçÐÄÎ(zrÍQþ¯iã ¿üàv)äÅûúš‘xú®•ª‡~£ÞCöæÅ˜qâ þå[É%brñ}‡?5Î÷~帄ífWÒ¨qŒÊ±+§@|ÉUŸçò<ÌÕ pÝܘq×;. «ou¼»¡/·Cûºïi”€¾¨ðÀøù×Ñ¥Ae{ýUE_ÓÓíÉ™¦<}Ȝ֢ÝyÜmßxúŸ¢w¿ Û<ž{®þ§ æv<Æô¤é¸ákÔ2HòÍœûí^ð¿i7}XWLçÕ;ãÿfuC„_Ú Œ^é‹foý_}Õ×î†ñõ3ù’#áE7OJûYP’l'õÕÏ/Ç~€¥=_AÇ…ã€ÆÑ˜Xš{úð»Ý.Ïë(ƒæ|=Ð`š,%ìG`ÓŠÐåƒuøgÿÖ¨YîyQw߈¯1ã±êd~“H3AVrj„,2ü¼b;¤+Øi]`-|°mþoüëx })¼óõ4Ü·qŸhø«aÏÕBÿö5ñ2Äï À²_Ébëp}<°-öéŠ7î‡~uË‘®½ð\¯ZøO—‘hwú[ÔjÞ“ZwGƒrÿÁërŸûÊÝÿYžBûjÔŽÃ}#°nFwrJH/rNmØiúà}ÓZ·Æ|[ ôzçg4 !§ÈžwñÒÁ­:ÂØ3tÔ/»Cì¬&ûLVA®9m›Àêmð΃ϣwÝ{ð ›±¾ÓÐúEjXôY}·°àkO{ßá´ºÿ»eE^§µÑÚ4 Öç •ÑuNóAweÇÁPòàk‹oeÌi¾ûñµ/Ó•Oœ8ñåU¸‰ðLÿ0ÐÙ³gÅ“ð†Ÿ%hÜÍÕdúxQÍ(šéc8<µ© Ö´dQç_Ìý¹Û&7Ù_–È›¼<‘!uܳg kÉÊšn¡j?ù¹cFìXÓ‘h±"(8È-ã#õæ˜÷€ð› žWç‹1µ¢¼Ts£yñ9ápu÷'¨Ðj6_œ‹Úö!"ÎZaÈ'Ы Éi¤óâ´U|tÉÖˆ6øÑRA1šJwlcɬ¡wF•»L`ÀâÊ_1GÃÓ§O£|ùò޼»‰›u.òÓÇÝkNË'€7Ë_Yù<ÐÈqó:çM†IIIâºåaãGâ÷RNá›“ŽŠŠD’ŽÓ‘AïºÎ´§9Ïïå2ºË‹4çù/SÙcv„ãïåL„ú =½C¡§Sù›„_ˆ¼TpéÒ%ñÃ$<ÇOÏìÉ»J…ÛŸÆœûú–›ÀœT¹ÛÆWó ýµ@žð 5¶Uð“¢Ç¿“GmÂWÚ]§@Ûˆèk…jiUZ! P( ¢C@kõ¶Y/UK«¯ù‚8ÜP2fòSBR …€B@! (R¤mf!²Íž8ΰ7¬D‘B¤˜+ …€BàîG@ÿ^ Ûì‰SàJ€t´4wÿ)P=T( …ÀíÛ_­ –v™µ3*Ï£¹'N¶± …ʼ–F¥ …€B@! ¸5Ùe£r¡¥+§@|Ù}žË]2— U¬P( …@‘" µÑÚ4 Õç qåè ¾>¯¢M S …€B@! P*Òþ²Ö¦Yˆ>Ÿ¯`WNQcgBôƒQ[U®P( …@á! µ¿Ú4KÐçó•Z§@ ‘ÎA¾BB@! P(7wl³!MAœÙ+v K"+ …€B@!pÓpçÁ]ÒäQÊè‘Ü5ö†ŒóHREŽÀ/¿ü‚ÔÔTq¹0%à®Aàܹs(^¼¸Çý BHHºvíêqÛóçÏcÇŽ8yò$._¾ þ™oõ#^èÜää䈟˜.Uª*V¬ˆ† """¢¨4gÛ-íw쳑S`ÄL 㥋ª³Š¯<èfΜ‰èÑhÒ´‰úÙdœT±sNýu å+”w^é¢ôBü¬ÿc=¾üòK<ýôÓnõ%K– 66•+WF£F ðÏ~« ¸ÛÈÎÎFZZð×_á›o¾Att4~øáÂêªÖ³ívÇ~ÊÖ6–ÌøÊ”‡‰Òò`‡ûRš.ó³§+Ÿ8qâ J«pX¶l|||Э[7øùù©›ëMÄþnÅ7ª{î¹Çã®dee!%5ßÏû&“ =ôK‰‰‰X°`‚ƒƒÑ¤I”)SFÌPøúúŠ')5Sà>Uy‡"Àm<–‘‘k×®!>>[·n_>ú¨¸n¤kQQQƒ©ý1:2 Ž,*ϤÃJ§å‘Miy°c!œ £™ªw+0­cáV#ETxdffЧ®îÝ»ƒÓ^t6ÌföÓTP¸‡¾i…Ù³f£_ÿ~yª¹]fF&jÕª…… ¢C‡Â9ÍCh/øñÇA704kÖ ááá ôY˜]”³2veŸ%M.ùî:N'Ws 2ʤ'&à*Ýüý‹!(ÈOLCÑæ_žˆm?~‡E[N¢v—çѯEdþMîp ¾™óM•ŸÚ, ¼øú.ç½´w6¦ÔÁÃÍÊÃzi/æ¯Í@÷žàïœÖ´«¸j;i(V¬üÝENùYq|ó˜=#P¯F he(×isUxðqç§gaåÊ•óê” ))Œ¾–&#=ݱ…Ç Ež±rV¬X!fZµj% ñ¤ÄOLû÷ï{ x½µnݺboš*(îT®^½Š .ˆý2ÉÉÉâ>Y²dIá ³cÀ³c|-¬Y³|mtìØ±0ºÊ7~i“eÌ| Óä©sw/?y³&.ƒå(¾…1 Ñ”6^ÄÔ®ªQC°ßⲕËÊøµÓÑë¥ßÑ US”ñ¹€¯;Eaê®D—mŠªÒ²:=MGQJgï“§£ä˜—‡%#K—FëIsÑ^ÓO¯;+ÊRN¯Á‹Ïn€Å)¯ü6õ9D”¯Šè:ш®…ò¥ñõþÄ\ü\ê ç{f wy9÷6CÝ0¶LmÒ“¶œŸž¿'ù”­hEølHÊGOxÞ´l̳kÉ×0~üxq‰¼ñÆHº–”›Žž|øé‡ßäx,ò˜Ô‡‹/Š)ÓæÍ› ‡€gø¦É{ /^Œ#GŽˆY.Ž-Z$Ê.]º¤gSäù ;—`Áú¿<”cÅÎs°þdš‡íùÝŠoÜýóÏ?…£+¯ ŽO:%fuùzàk€—Ïøšàå.» /:­Ö²Ó–KZm}®tAžñœyZ¡¹8ÏÄcjíö˜= ?ïx uBýnIÀá?ÿBïN(`¸rl50ö}ôz°Žà?ågXË›g͎΂ö ; nn/±Á"¨R7,_nÅÍÎNO¿òfÞS`4ÿÇ<|ÃÝš4»žmˆºö©«¹9jfÛžô¬^¶!áE†"÷„²þÛ }ßÁg«ö¢st(ÍXpúð~¤• Å*¢/HH»t˜š½‰á>,fÒê|‚UÖ°óóDë‘y¨Øf9Vý ÑŒ…©*>]¶a&ê{Áºã‰øÛ†–ϳó÷á´ÅÍÊl6‹xÚÔi5j”Cov$Òi¶€ÇžtL•šÄ¡C‡Äï¸æžUàž>­T©’Ø]¥J=zÛ·oÇ–-[ÄîìÎ;k¸¸‘LÛŒzÍñѵ´*潎äôÊGÐ+mrZÝ£«q•MÅÊ^ý¾ù2ZU4š[sÕ^ÕÝMð>ãÇ‹Y[gýâY®çë€gYùšàå7¾Fœ5q§Lkó3úZZ§¼Ý)Ð7–ŒYü”з…%v%&SéÌ™c„CÀ~A¡¨Ó¸ʰM²ÆãÇICèI;JoÍ߆t&‚?¾6_¯]‹©CluC¦®¥Rª‰Nb‰£Ð©S'qŒ˜ð¶_²µL?³¯ÑÌóì;dÕ¿…Xn˜Kå¯9f(ÒÎGßóO¤Å[}_ÃÒ¥_‹vÓ鉸 ÍFt²ëEí¶Å[‘~òG´½Ø45¢:a>1N¿´ïÍÜn×;»æO<„ü·æãŒM-ýñ-¼öõJ,jïïé8jŸ-±ÄÍFTŸÙ6]¸ûŸÒ8°SÀ‡¼É现ä­iè8r$:b!æ¯9é Ë¢§»œì,{ÞvJs·%£aÙÿ¾Ï3T ¶³Ê×lˆª¡f‘?³m.ŒD$ŽÇÆ3Qn‰û_˜‰uK>°ÕEÄÒ£‰‚ç¸öü$:Û·G{:ú?ÿO,Ü|Þ¦‹å$fŽn/Ú´t ñ~sé°nqsGã…™ûmtÖDüð£˜)ê±dô@|HO¡£IöîFÚÉUx¡½]/â1sãrhâ0¶ÍH’½í«Dbô\âe9yÿþ§ÒmF2íÌ6¼óèõvs7Ú1³Äa<õoé:ê—½¿.=jÓ%1¾`Ó92òìN´ñʃ§ÝßÎåÇÇîÝ»Lj#ìxÛúÄAjZªp ääq¨IIIbìó+Œ¼!‘þ}ûDܸqc±Ç€Ç ï5hÚ´©£^ÎBˆwþø×Á÷;¢NAm³ß?ÈQ¶]Kîˆ³Ñø ¼-Ý¿œ¯š¸ÏFQÞðS?~¼Ç†ß°áÀ1çÙNIIN6_ |MD‘=ák¤‚—†Ç¶™Ûzâ8À x¬Ä©}k©Ù¨_†UÐ+ÖNlŠ—v5ÄÚGp`ÃœÝ Vž„É—V`€(þÔZlYö?¬˜<‡ÈˆE?„9#iJ{ØXÌž7óæMGóM‹q>•ùÎ`RËÇq¼û )ÊÿëצqþDªàHkÚ±ÇÅÖLÎZS“±i±í¤R§6ÍÁÐÿ]Ä϶ µ`˜ËÜ‹)[àĉx#d&¯<¿Š„l`$V혇‡«Ází2Vι,$į„î£waΆ8·ÿ–VŠ'ñÌäS˜3a0–ŠÞÛ^†A+&â—C¶E¿Ò0sx31ó ü‘3\Íû ø½oýqnÇ"ü;¶1?þú ­†/ß]ŒvºD ÝäSE›+‰ÂÅÂs»·c£eŸ<¼…¬¸ŸÑ¤Û(4¾ÛwmÀW­Ž¢W“ 8@|.^ŠÇŠE¯¡ï<3–¬^÷z®Àà¹ÛqÙŽþ %­‡bÒôé˜>ýc¨DêµÀð7š£Ë÷ÛñÆý÷ƒfnÁÀäQ¤_Cs„Ø¡TqJû…"”6rp×BI›÷ô“Ûñ% \Ô¿Ë–m¨ÝïövºH‹¥ù¦0g6ÏhØè‚¢ m×ï˜ýë)œæ¢ ¾èýP*”¦iJ="4Xq«ãÉÁŠ}ԡ豋Ð"’‚ð8­ÏNèô3N¾AýÉ ƒfbÊÀT—ŽÊ¬³½­9´Úpq>ߘåÁÓ½ú°sé@»ñ(í•âèc3ŸLÂæÓ¡s%ÚÜi¢›¦É,nÚ>>¶'9æéè1Ë0ó[,^âͪÊÎÅýNe#Ñ»eeqƒlòØ04™ÔûÎÄ?DÛg°úÃ'NTÖjMP=Ã_È+S–ÏP†6–1:aÁ!ðÊ ]¼Ïá÷ÙÄqNoÜSŒn¹ÅšáÁê„ ½YÁº™½Igo›Î|®ýiäYE ¦³À3ôîüÃõJ Þ®…謽䘬ƩsDb‚ñ(#¦ëBP®b8‚Ù¦¥›…‘3S÷¥X|…ê˜Ó·%‚©¿ÁMzb|õIX¹ïî¿ßŒ"Ÿ¶zZR‡Ò­Õ„jWì6j¯bÄ¿1òéÞ¸/Ô X‚úöù#Î5éîiàYs|dFgä²Ó²±/_¾¼˜F‹‹Ã}÷Ý'šò¸å<®çåÞ½{ñÕW_‰2íŸAƒ‰M‰Ú2ÐYÙôûn<Ì—dN ޝ™‚)´_fÕ‘ xk׿Pï‘ðL΄œ]‚Èfý0äë͸Ü'Vº‘û¼%CfJÖ̢ܷ¶’”¤ÃØ›–)2«ÇGá¹ÃÿÉÔa<ñ+«ù£½™ËFS]àÈÌygtC½g¾Gêâǯ; vJÝÈYîݱcÇD'¥C ó\(jºøúákÃÕL›`âÞ¶¿Z,í2·6*ÏÃ9¯õÈCâ´@ BeÞ)±¾°lLsàõy80-ìÆö:UÜp}}®«fKeˆ'kö'ÂC/ê}r¦å`ògsCƒd™eÅQ#ÿhrVn¥Bl޲I¶ˆùCb0šŒßüW;£ÌÅhü)…°qwè­¶ ¾Ú›&óOq¼8.A wYòp]ÈŠo¶<ÀøÆšg€Yö`îçÌcÚ5|5jÔ@ Ê}õË~tÙ>&º±›|D»L³Ý) žZ|+ÕESZû_{õ›³iϼ2x=$²]ís ’/âÃç²F„Øë¼Ìdгìòìç™ufyŽº€â`TLŽ &ÙÄÐDƇi}˜9¶¾RÝ!Ygt%Kwà·pºþ3Ìy íË]Ň[³…žðÉf‰ä€lN:“k³/¼½xh‡ Ð^GgËLC(Š}é\zåClu™š>ÕèŽ}ÔÂ/ó?Çs=Zã¹OÇÈvåˆ×휎R÷Ûo¿¥}1Ëгñ~î¹çyN°çq—gÌi¨x@x¬òÇ[xmuÆ bI¡~ýúb™‚óøéŠéxæ`9ü$øCIü–‚Ë@—OÈþxæ[0üi)µ9ߎnü…þÁ˜§šÚ)Ê99?ÚË•¨¯gO⧉À»›Ÿ@E~í&º##?0‘¹Ó,Áò)·ýã_ÛŒÔ?ÉYø±…˜‘Ì«p7"ÀûxS!í ;xö€Ç5/hƒþÑÖÝ@ÚÈ.• Q®–¤Á—:éó\î’¹l¨ƒ£Ûabñx¿IØÏÆ„®§ôDì§½g²*¢K7`Â+m혟?aºun¢Ù´§7ÿz ¹óæÐJèFSÏc'ÍÇþØm˜úT’^Üv¡ V±8r*éññrºâ›kÍ¡†Wú9ü¶‚ìû=†ÆUŠ!þH,9¶§‡€ˆJ@l²˜™-lÅ”ôC£Gì„9¶= ´C`õ7¯ݺ£*?ºVK<âŽÆë6üåmÀOi<Ðø7xadÙÐÒqnÝl¬¤åš='–Ó²Ç q£ÿfæ0Ä}:‡2mÖÛn`}ÅFC›c¡åáRÏ >0«]|}½spîÀ&¸˜ƒ¨f’bÿÁºc©¢îÔó±…Po\•Œ³9q&[6èì„HybfÂY]YÄÐ8xoìçØ~ìV}: ÿ‰Jú >Ì#në¤zgbÏìWI2¹$dÌYgšø Ãn3T¾¾™Ø;c ´'гEM ¼wÒǛ芗£V‰H¥M–¶¾²±''ëª6ÂãÔƒ™«‰ºÌSë0~ еyuÊÛœJØÚiúzñ’Bê¢ÏËñvsà÷“v¬$ímóøÉu®í:öèÑgΜ;©Ù€÷êÕ+5s¸½Qàeþü¶œ"e'¢Aƒ¸÷Þ{ÅMò믿ÆK/½Žù¦É÷ðÓvØàÀ±\b.ÿ´Eyû×›—£ƒ>ÐñŒà(Ò'ê]¿@3Ólµ´¤È>¾ »ú)ê¡kûɾâ‰ñ;°÷`ºÓ¨ðwA€?û-ƒv†@.%Èë…¿UÀ¯ ¾6ø)„ µÑÚ´å.WNÞàëóZ¡Útþ²Í1vÇÏyÏÇèÒ´¢¢¢PµF ºLÜ‚4ºTï{FÆ¿„*ªÝ û©(øú^Ç<ýeê¸M™«àíµsÐòÔ—èÒi2Š?ù-\³™ó Jô$ÑbP£é 4|ãñ\|s]Ð~•ÐodG|9 )é<Ç*tCìÄî˜M #ïíBø&¢)éÌyáqDÛXE>ø*¾vjS¢jcèñaX6áAqS2;”´Ñj³éÇãö‹ÝÚhȃo¶¼y…×w¯Éøí¥Å2§Â5å÷´î‹'°ó6ž£É3¾¶6|³«iÖ´—¼J óöãóÑÁÚ…ûO}©JËÝÿ—èI;¨r7¬ÿ|4^"¹®ýГø|õÿ¡}{ÂOÇ3Ь‘ç›[Þõºèöþ&Lj} wê‚]O`4ÙôT_[ÿjwz5WŒFLÕÚ˜r¥†PÙצ+íY…Éžöó+…ŽãGƒNéU³NF¡fì¼úý1Uo·:‘sÚ°*ž£¼ŸŸ/‚i¦ÀWàTo®ÿ_ê$úS»ýKþùjô®^~d¯Ó‘LM¶}Œ–öóüú¦žx«w}'XJLo˜‚ëãåºN¼3z̘1b`²Ñæóª¥ã±ÆcŽÇž+§€W_AäY¾ r›²eËŠW<ð€àË:0ÿvíÚ‰5V~Ç{òäÉâ[¬;ž9Bm»ËnKË¿UZt¦äL_°O8Ü×.žÅ5ýs{{ÿÀá+Vœ\= _Ý‹Jü¸oŽDó¶ÀKþ„‹´|rtõgxn¯}O¹*º ÉÕ'Q¢æ½Âé‰*“ë"UPñ]Š¿f(g~ûí7Ç/pž;LÇ×_|mä·G4JûëEeÚ4“èóšfΓÌDNóÁŽ‚<è/Ïg޹Œm—³ÃãÏ[èãEitAšéãEÁd@´!ž¬ô¤Än00/?û”Mâþ¯Óe–Å}†h»H®'ø¹!JÐ/nÊO3Ì×Ö,šø"£â,XÓé­«™úã¼ÞYWe<¨øýVþøKíÚµÅW²ÄÇ„tÓµ®x¤ÎšL/¢“f6û£dIÝRŽ5 ÉTçOÓhn@éZ|Z2Òh\ˆ©×«ÛÑ5ê~ôØxkÙe Y´Ý€÷ä¬Ì ÅÀ¤VÚle¾vÓ’É¥ çúZi71ÕkèóE ƒ|…Ý8ÿ(8ÈYà1Æß*ø÷¿ÿ-N- ¿}ÀS¥¼iêÀb ò¦)ù4$iyg5yþ´1ß0Ù)`¾üÁ$~Jb>¼?gØÑà׺ø·<øG“ÊÑÔþË/¿ìÞ§`Óvâ‘€W0öÚ43ïD·€Q›´MÉ._Û7%úӒžáâÉ }9z¶ð6'-Fàì¶è—ôö޹WlT|­iML$ƒ¶cñnÌ/XVék¬~/®ì[€žõza 7nÛmióA·—1ü^zbI£MˆÏо‚Y6Îhû)’V?«f ìpü"·ìÈ™.mŸyüWªTI8Åì0 ¿žË_ø,Q¢„–Ôí49Óƒ‰˜70d89ؽe—WƼ9L¼~*v„Q§ÀLy‰¶nZçÀc§€Úß„`ÅÒU1t±m#½¸ˆaŸ¬Â˜«ÜÙE+‚o¸üÛmÚ´A… ÄÀâ›ëÝŽ-zµú~AóÇÔ›}ùkÞìL¦]…ÂD€—øFåißr?}ú4Ö¯_/¾ÊftcãßWà§#–#—Ø1ÐÒ™`¾çÎË üµEv ¸m¡rÞ®¥f"€f2œ_1V\»’Š€'õÔöʵLwVGЦ‘³”I·ÈâÅówX ½_Šá-GÀÙ yÉ€?ÙÇ=;Â|íñkŒùíÙI'N¯É³ÀN‚td,vØ Èã8¿ˆÒÀ…ð,Ü ½Å$f<ø~öŒ»J³ôDR¬ B aöáwJˆç *<¸Îž=+Þç箫©ÜÛAgwuˆ~ìc$¶{×È0À§8Ê…©©Xw±ó„Nî)ð¤ ÓÊå~2bCîj³ßôØyà©S^–àv¤# •Í|xyaàÀâ Š¼NË7Qg´Úv§i¦ËµÑ6 £ï”/µ 16øþäh×:å¨ ï"Øðóá,ðXæÉ/ÞˆCàŒ?•ɇ}WöÙÐ~9®˜iõµe·gš>´Z†Ö‚ï®ÀN*s}›§ryÆ Hžªnl~ôz©\laãBá#ÀN%Oá{xIà?þÇc=&f\ñà¥v^ù¦ÈOLìŒ8s ¸ŒžùbZI犷ªSÜîðXæƒg¿øÚáÙ0¾& 9°í–ö»@öÙÈ)0b&…q?ŒÒ…ÜGÅμ>Ë7Ïž={Š)ÜÕ«W‹'8WmTB 0à±ÇO9<öx rÞUàMŠì°òïðZ*O§ò+Ïlq[ýLÏ&È)Ç*(îDxìò¬?Ôð¸ç=8¼—¦Þ´Ûnwì·!”FNQ­0™f…dÚ¨*/Bx¶€_á38í4ŠP¬bý7G€7µ²a—FÝ]8¸ Ž›§OÙðóøuµœà._E§¸ÝN-/ðŒÇ|½ð5PˆÁ•ýÕ; ùŠõÔ)Ð3T‘[”ç'-¹«žªnÑIø›‰u6õï.†j¨Š[„w£›Z¹r%Ƽ:%CJ £¯U1ƒ~DIî_á1Èc‘¼H…€Bà¦" µ¿Ú4+¡Ï竘'oHfRˆg–G¶¾ƒã“k§#ªFm4lØ1µk ï×û©7éØ0ô%lºvÓ{Æ{ ø—嘗‡%#i¿AëIsÑ^ÓO¯;+ÊRN¯Á‹Ïn€%/ ~›Úå«F#:º*¢ÊGàÓ]‰¹ø¸”‡_vÿ¯4JOÚzC<<•©èóŽùMv=6×’¯aüøñb\¿ñÆHº–”û\Ѽð½pàï¹óXTŸØp¨? [‰€;¶ÙæFõØ90d|+)Ùñ˜7`"}±ãî¯KüQœJ³mèó&‰>·î;îò§eùGføûÚFSÁñÌÃ7 ΤØõlCÔµ«l57GÍlÛ“žÕË6$¼è©/ׄrÂèûæ2|¶á:Gù!þȤ†™ ei˜÷t,h» óŸ`€€#óžF›àèüÇÄ,Ä=Ý×b•5ÌÑLý)bx¼83Nû/^?XÄñ´©Ó0jÔ(‡6ìDðO.óCé˜:*UB! ¸U¸óành¿f Ü5öRø­êüÍ“kMÃU’–YË 2U]1XÈ÷¥¿éç7cú(DEEaÈÔµ°Ø5³Æï¤¾¶ò¨¨¾˜¿í ÕœÁÔ¾0ÿ¨*aÛ׈ê4 'ÅOÚ[±qÒLß–KÜlDõ™íàeg™'â§4ìð!oò¹ã,yk:މŽXˆùkN:è²hÆ!'Ûö+^V+ŸúGä‘v5Iȸtñ*Õ¡QUQ>ˆO(c9³£ÛG"22íGÏE<•]2#—ÿÙžÊGcçÁÐFŒD•Èö˜»?ç¶|ƒ/ײñˆû_˜‰uK>|"#béÑD›–“˜9šùÿGâÑÈGE{–·/ØeGœ‹D*“:«øÆ°>|8vïÞí8FŒ‘ [vRÓR…S Ç $êB@!p«°ÝÀmÒ dŸf Œ˜i£ô­£håš+âÙ™#Ñf@w,þöq|ñþK¸¿N!Ó÷`òàxcÎZl¹M;MÄ¡AmÐ è &7íŽ]cçàÀÜ&¸ºí[´ìÕ!bQ«R,Þ_y½ªÔÅÖÙ€X`ë鑨Xñ¦}¼/ú ~h„™Ãé×µò陜)`2ÞW’’’§Eúñ%øwlc|?ë $§þ„§ß]Œ'öE ¢L´ñÈH?»œ’hsT®ÐO0 Er*^ mŒç»5Á×=Ç`Âó=P3„5;‡÷›ô‚×”%ØÕ&K^nƒ‘³+ã¿ûchµ9XÙê#LT%M˜>´žýä~,\ÝåJ¤ãØÊµØšÑÞ&÷R´dsO½^À«Ïãß!ÿÁÓ½D(é­‚gˆs]Üx&†ÇœZ>ð oE­(d\Ù_½Ã¯è¼Ö#ß&¹þ6ìµ_™:xvÊ2´l<]FÿŠç{= ª -&Iq–•kBà£E™ e ½ÆZ«9c1{ÖIÄz³{uDÃ? Î¶ñø  ùÎ8„P‚§nùÆÌ7hvòLåZö`îçÜbÚ5|5jÔ wøê—ýè>²9|Ltc7ùˆv™ôÎ:âi[”YÇŸòõ»`ò¡h2¬þõëA<Òßf„;vé¦4í`¥wÕÇ„ý?{_XUqõÿ É# $Â& „MY$A5AýÄ… –Oãh¤‹µö+´Ué¢XÿV¨Õ´"UÁÐB-‹Š²( —(‹‰¬†%dI^’ÿ9÷¾ó2™¼û6‚ÎÀËœ™9sΙ3sï9wîÜ™T¢ÔÑP"ã-ò¸êh‚Ö,pši7âËJ:§’½eQ1ä¨ÔRÝøD„èxþª‚kÕXt£Éˆqúœë‡wûÓ«˜¿ÍøKÀSo}†Ì.ªÂ}¢ÀA~Ç á>÷Üsà=0$\|ñŘ>}º$­˜ò¸“>nThFF'[âHªÃà“3Ô»§0ðUô긧wÚsn?†³öB«Y‚× ®€ä543¶û LÄ <½*eõEù®Õ¸#0ÿá4màÁMcó0ã¡<Ì^r?Rz·Ã•yWáÏyÃñêïºZD<åß`×A W¯N4kàäõ;þnð+ŸÇjüçgÃ~f¾y{.¼åy|ùãKÉi!‡¢ÎëxŠá®ž#»°ýXk ´dqü ]ék„» |··f%9é=y-  ÃÀæ Ï`$uí|Q‰j*ä¹”Æ|ÉùÂvp|ƒåPœô±À]³ÿ†ó»Åoþ¿%¼ß¹ˆn ìÛU€Ä£0ó]ñùò«PPTƒ–© "¶‰CÐF}ܸqxæ™gP\\ŒxrÊæÏŸßþœ‘ƒ¿ú!°6(FFͧõ!]µÍìw“²@¶F5ƒ&„ÕÊß ¸öþzýµxÓטáøëª›,#Û’,Ï 4 Ýqÿš¿âŽQW!u†]z÷_W!«;¿‹Å ÿ¹xí.M£— 1=p ¿7þýù]…ª¯^Ãÿ\ 2æÓ|ÆÜ.iü—oÈ2S­½ß=‚ÿÎx SÿéË g]r3¦`$^ÜpÙ 4SPÛÒþr!†D?’Žp°i x+®u¯TFük§^LxÀ/>X‚‡N@ïߨÅ#澉¥w İI& õÏ?À›;Ÿ@¿a×ã*LÀ…©aÞÚ8?ß„‘) cÿ¸¥ó~ƒ‰W]‹©óžÄ/úmDeKn'ðÁFážU^±~0¿;¿#bCÕ ­ù^Cìø[йsgÜ{クÿþû1cÆ ¤¦¦6Ò;òúÀ8TcF'SbU;­òWóW-o«È óŸåÇsÉòã[-ÏsÌ?¶üP§þzæçç?MyßÑ@+íi!ž›&Z§´id47˜ê•W!&¶U³,^èÅŸŠ}òÉ'0`RRRК6Š‹£wï'"ðee4‡ömæHlV”ѦN´«SãMø‹.q¾ŽÜ`´ÖáÈè.ƒ›6‹²Zul ®K½ã6ìEv[—Ó†J­yÍ ak   €¸v÷[ÇïUðÿ÷`‡S üõïMp”w~úé§ÖìСƒå ªx608q gý¢¾›~ülZE?ž¾c˜ ó4¶Ä¼xK~¼ÉˆüØY°6î‘q&|„"!rúÕ‰A+Z4ç}C|ª×*RU;³áÙv>l!%$$XN¿…†ÎTÂ)‰CçÖm+Ä‘ánH¾Æ¦šÒ3šTÑ3v¯ü9úßL¾æ@*ÙNѽ/cÊàö t‰ Î:“vÐ?år$ÿð‡?ø­É³¼Ø‡#GŽX4xLš`4`4ð­i@½-#®$áX* X€ã"\¡ ~ƒøfÎ7æýû÷[ßñû[SЀ}zB}o|Å™¿C)¿¿v%¢K‡ÄÓ³!§¨ÔNk ‚‰Ëk Ø!8xð µMr Ç"-Sn4`4pÜÐÒ#²Íá8ˆÃ âw à`'`øðáxñÅ­©ÜK/½:Ùû'¯}ú`ÄÒ ¬qpÚ§ÿôiÍ©%);•ü* ÜPXXˆwß}×úÝxãÖ"×pi|££fÓÛ_Õ‹]fNùM˜‡ã¨•…0•´Šcà“ žÂ=óÌ3ñƒüëׯÇÚµk}ûÑŸö†Å÷X<öÎ:ë,kìñä´ FF§Œœì²S¾%x §@ ¾´POs~@âRÑÄ'V<[ЫW/Ë9àE_e´Ð£­^ÔÚ®];ësDãœhmúFA5 ÚhæŠzÚ‘X §@7øzZe¢ÂŽÌLÁ‰Óß”ùîgœaNª;qj6” ð¢B³°PQˆ¾ ˆýe­Â,ž*a §À©²?&ºÃàT×äŸ` ˜õ V°!o4`4`4pji@µ¿*ÌRêé ’G†ã+E IDATòP˜ˆs”‰A0000008)Å6;âDâH«Ø9p$,H&6000008iåÁ]pšåä„jì 7ád2ŒŒŒŒŒŒN¤Øv‹ýŽÈ>;9NÄ„7Ê >‘ 6´ŒŒŒŒŒ4 Úb¶Ý¡Øï†ÚîBC•™À,Àyçä+¯¼‚>}ú8#˜£££££ï©ä}ÝC ì¯î0%®S ŒÈ!`"ƒ BFF†NϤŒŒÂÖÀ믿Žk¯½6ìz¦‚ÑÀÉÐ@¸ã“ñ# âHªÃàcçôúÀ‡à„žˆ¡ŽkÒFFFFFF'FêCºj›Ã²ß¡ÎcàÄ4`Óù@¡”Žæãv““á;q×¢É300 ÔÕÕ7ÓöÞl{y ʇ^‘g…yœ§é £ „;>?Œ ȪV««ù‚«–7‚Cu ÔJÌ@'¬2UqÂM¶qïÆŸÿwî_!Õ.ņC«p^Äçâ–áÿÅw@ÉÛû1û‚d!jb££ï˜<žë¤Æ†f•á¹:àùK߯ª^ d¿¡~ˆÇ|€~O/Û7LFÝ3.ìêDjy øÓ@Óñé«!ñêýÕm³NFÅÕˬt$NWÂ,@0!,FþþÔðQ¸J8ðî3äÜ FϘ2|ùI:F×@Ck¨áù7·;Wl,ÄmÈ«×Ót®Þu[6ÂÓ1Žh4æÕ@Ä@FF§»jkkµk<—fÿ SÇåà‹ÛΣû‰ÝÂÝ«žÄ'#ˆþ­œî+5ˆÔFy4z§»†ŒüߦšŽÏÀÒ0~„Al3WÈ6‡ãøcÀD,„>SPrø0‘«À7…èÖ¹%RûÓ× uÕôàÆ¦Ükö*ï¿üçÜ<¤5Vüì|¼A9o ·<ãGJzþý§kðÞÓFùÄ?âæþõxùgwáÈ5Ù(yö<¼ýË—ðןg‚'"Ü{×ãþ‰×㟣ÝñÔ¿‹þÏRQŒŒNŠøøgý~’rAFã¼°a~>¬=Éq ¯NyÓ_úZVìÆŸ~<¿YB<…[þô:¹e½´¬A-½Õ¬õð}ç(^¾k2Ê~¼·ðÀý~våßqË¿ÿ„4NÜ„ûo¸Öºgô¿å/xåO7ƒ¹˜`4 kÀßøÔqÔ4ãGô‡ôˆls8NA â0¨8AÛ¤?½w»l:~1b8þçÜ%˜2÷øé­W¢3IxpÝrÚ`ãžè°ãEôμƒö<Ë~´ýþ1W,^»/è†Ø¢vÓ5nì{{ ªÆÍ!¯ß…âoVâ¾Vbî’øðâ¼Ì_ãÓ;Fbp«½˜3èzì|` vþg­_€áס”¦pÌCÐn4Fߺø&ªßOÝÓ~Œ}b-¦ ¹1ùoâ7¸ k‡¦îAœ7é ì|¼<ÛžFßkžÀ¤qC00ŽœjM­÷Ú/üä]T¹Ý„ Ðýdçg;Qi•Ñ=ãÜkû8pe2^Ìî‹{^„g¯ïý­ëÂpêiÀïø f„NÛ_Õ‹]fNNùM¤Ç)P+ a*i'(\UUÕ'ê üðùOqéÊE¸ö®[ðܯ&âõƒ¯/$¼áxäì¯%8‡Kþ„3“’p&¥’“ÚÑ‚DAK3}IX[]ªª:Ôä·ÿc3¦ íT!ŠmQM8%û6`!úâÕ›‡"†¦mθàb*[c•UEª!’Ë££“£všÜOˆõ¹×Îþp7¶½ñ˧ÀƒèU…ªÚdœÛ£o-z{ŽæfÊ+(ŸÊÔ{† S>ß«è>RGÿøžQþͺgÐ]é?OcîæXì\¼Ùÿ0áñÉ£ÆpŸ±RM܆¢p '»ì”oÑdòÄà‹zšó—ŠN±ËåòSÔçùö]z~Üÿ:,ûä. åõ>ÿ“…17*Çà·ÇãÌÖ.¸Èb—QQt ÁL«ZKÃ…$a «<†Þ;%Û¸µ1$|b¨^\bQi‡˜8¦C =*ó–ù‘PL008u4m_ךH®ÞW`N?àéÅ/ ÃCyxxÍù^yÞs8{Ô/ñó…¯àºðÒCŸ[÷¾¨÷ŒhºgÄÇÄ{ïõ¾ûB¢-N£ÇNÀº}ÔŒƒû;öô+ƒ&’I~5à4>TÁøÕF«0“ÒÓŽä9ºÁ×Ó*vd¦èNÁá¹(Jì‰>é…]L *©B»v)ví4ষQý‡‰Ö/ž²cðÐÅërµCoÂ)§5.-%n­¥É)`ÕF-—+|GS‹-¾âÃßùlŒÇÌš÷2Ÿ˜ŠÿÞ7ŸÓÛÈx˙Х6i££SM1Ö5îï!£=®½oœòKyr¶¥»pàÓ·éï üïØ‹³õt½Ó‚÷áB¿g¼ûåÜÑ?Ïþè:ß}!±ÏùTظ£wÜÉk<8Væ±ï-”o‚Ñ€ªçñ©b5ÀŒFûË6Z…™„žJ6,Î^jþ˜èCPÆŒ ;E›ÿŒ?ý·¯îÈŸþÓ‡A“üÿ‡?<W§å-»oíyé­{à¦ß\«Ç¤á‘«ÿö<ƒ–ÎBB }”à)ˆ÷Át[ § ýã™W|<ºm~ÿÀ}¸üÒvxøÿ#ß{õ–ãáÇFF§¨Ýt{\v3nÀàoãp&]Óú_v;FÒ£@ZÇùpÃ]¸aÀ{}ËìY®Þ3Úbô¬Ÿâþ[.E—Ÿw=ü X¹Ù{_è_æ.Ãì´1èr¿­”‘¿…åÓÒí„ùk4 h ÐøTÐ|`˜NjU˜ééi'@­À0ÿx²^~–ÓLiŽÙà+Jb†iõ Z*¿žùùùOS:hؽ{7.¼ðÂ&xwÊJiŽ >m[7Þ<„ËÜ´(3®ukK©ì¦…@4÷ïÛèHO ^ Ø]VfÑeœc=‰®#ÞÆûG^éh‚Ñ€ÑÀ©­•+Wb4}5Vð¸QF·ŽÖ|ŸñÐ}LJÖ~vK³î;ð_FQÆDèþã¯nXòäï¬ÂŸŒþù燤ÔÔÔ;q7ýª½?^¬Çßàsšcþ”Abk­7ðé[ëǰõÀÏ>ÒÀ„ÌDD#6–}ŠÆóZµiœ')«LJ¬ÓÑÓ ªèÁëS;áÆç>‚b;ý~ùâ'ܦ©|L¶Ñ€ÑÀ·¨žu ûº§{Ml+¯Ð ;Èït߱ѩžˆ“ý½×@¸ãSŸESò°È>;Úo'§ 1U>a®æ… G¸˜"dú¡#F㆜J\ñèQTÒ*fWbWtHtRMèT ¦Ñ€ÑÀÉÑ@‹-pêÜONN› —ÓGáŽOÆ0°íû‘}v²|NÄ„ËëGØ–o¹Mÿ%wè³ò·Ü†½Ñ€Ñ€Ñ€Ñ@8Pm1ÛîPì·#}'§À©‚ÊL`H`§z~óãxH¿ôL¦Ñ€ÑÀ÷Wæ~òýíûÓ¡å'p|²¿ºÃTUá::Áˆ&dÎ?×ÕiÒFFFFßE ,_¾)))Öiž¼ž_ÄÅÑyï×®DEE¡²²‡è¤àƒ8‡ê0øØ…ê_E/ˆ¡ŽÛ$½ÿ~ú68õõNä›T +ƒÌ´9æ ð‰âL¸“-ÏÉægÚX'»?N6¿À­§éÄ“|=žl~¦ý5p²ûãdó Ôz>à(99ýû÷G«V­¬2‹ŠŠ¬ó:âãã}ŽË\QQ©SÀ†Tl²Ä,–“eœ&e¡:Á4!Ì’„¥wªN¯¹¼Î¯¹éëòKëòèøÍ-ŸÎ¯¹éëòKëòèøÍ-ŸÎ¯¹éëòKëòèøÍ-ŸÎ¯¹éëòKëòèøÍ-ŸÎ¯¹éëòKëòèøÍ-ŸÎ¯¹éëòKëòèøÍ-ŸÎïDЯ««³œã„„k¦àèÑ£VÌ‹dù™eˆ`‘¡Ø_ÕN«êRóW-o‡ê¨•üy*S7(,JbD½8(°9H¬××;Y§U__#…E¨KFû$Šv~ˆÜ}À€‹ÎC{Ú…ëûä«-¶õ£®[:†ô²bNßž¥pj‡^_—_—WOsýc…àŽJ@ûöIhá~:}½~0~\ß×~ª¬ã7}¡É² Ìq(ádÈgÚoßÄüõéÿÆ3‘ú˜ 6žuýÃ×é›ñâïOÍuýs_±±z|–FII‰õŌ̰SÀ88ªý vóTqõ!e¥#q ¸¢f‚ a1rú#J’rÕ lÚ´ »ví²Œ—ëQjj*FŒºªÝXüÔ "H@·ô‹põ¥ýàõATUý‹_îs ~2ºŠ¿Þ‚h“‚n¤£oפ÷1lýè#šîé†Á=íDvÿ”!¸sâEˆ§ Am~Ñëíá:áà×Õ•bÓó/ÐÖ«}pÛ¯‚|r-¼uúþøK„·ÔjÌe*¾ÀsºK§=\'|¿ð”X—Ç´¿±“ª÷§®Ñ£Ä:¾®]ß\/œþ _ç/rJ¬Ë£·Oo^.t$Öñuþ:?®gÚß`tý¯¾týK?I¬Ó÷Ç_hH_I¡¡Æ\¦â Ì1©Ë±éÉãýÊh£¼‚‚È,ÏtìØ:u²vùÀ)v70§á§„ ‡ãøcÀ—¬4'¥<{÷î…#©v*{UC† ¿~àÃIx›¦–݇âŠ~1xíFìýømì8·$Gû.Lµ>+(*¦+nº~ ¢Út¶dà-9ÄLMV]±äjP 3D^NÚmm w=j©b­wp¹jËQx 5Q±hÛ±Z·´UΠb:UûÞÃÂW¶!a@²/ëFƒ0Ü4ý¢’Ï2ÛÜ|mÙDF;–ËHË€å<©Ã°¤Lb.Wa½=z}æ#8\&0Ç‚Éã_ò,Ú‘M…G(ü4r¾¶ =.Wa‘EÚ£×7í7ý/c„džÀ2^dlr,!ÐøÒǓԑXꪱð`ø ‰U:z§õöŽÄº¼:~0yüáKžðPc]^N Ƙc RGÒj,es™ ‹,ë =¿"à„6l°f Ú·ooÍ °sP\\Œ¡C‡Z6M¯FšM€jÖ8? Épœ‚@ D' c)T¨+••8`À|DOè¤úõëç[¤XWkwBB§³Ñ»oGÔìØŠ7wU“³PK†t r^ýé×MÆgÆcßæWñÚÇQskºÑܦÿ¬¤óUÇàêó;‘A·¹Ô‘£AÿQq0+^GiƒÈ¤N)(¡â¶4°Df–ÅX^þ¼ tU¬W™ûÀ6¼ðê&THi蘉ÚžëkŽó_|°ë¨]Úî|ÜvÓyعòE¼³›¹QˆïˆWFúÑØ²f›•Uñé2ü¿ÃC‘=î\ìØ´Ÿ¢?ÆdÍPþr#V½ý!JxSKWÒF^‰çt ^{±ü«Pß÷t*ùTÀÕŽêM¸ )Ñõ8²c#þûÖ‡V[™Éy×ec8éKÚh1ÖþH™ô ëBúPCµ’‚'1gª°Ôý»hƒá3m¡Á¼tù„·ëøBƒëëAʤ¾Nß>ç ¾kO¸øÁä9ÔØ´ß~%Àº]pì/Ó¯^GÕ³”I§MÿÛ¯ª¾«×?/ üàƒ¬Ù€.]º mÛ¶Ö¢ÃsÎ9om|ìØ1 >\†G¸1Tu°Š]f:NùMx„㨕…0•´Š,@Õ‹„gz÷î;vXS.‚Ãï`X‘¾ºtóçpì‹ÕX’_‚ý…Õè5j¶m’rmúLg­“ƒ`á×’y&ƒéñÐÉèÑÕ(ª Ò :']ñîX†úê}Xñ*9tÓ¥ã¯AÂŽµXù 1©§z.Ýå-þìŒÕÌ?;ÁjË!h‹«ï¸ý¢¿Ä?¬ÀËWãÌ;3±ãűlÿYç_‰‘ç´ÂÁ5hQçA«NƒpSæ¹hSù=¿ソý¯KCŸô³°í¯Ñ²Ëù“9.âSy¬Å5nk†¢´à]¼´šÞt„I×Àÿy [Ö.Ek.=“N“¤ÝmÇzÁ ³òðÑןá£ü!ÈèQƒMÿ%‡]pýcÑöØ”ÆEûÚ©ö‰·a¾H-XbR€ZW`‰ý‘QË–˜ñýÁjžNS-Xb7úþh¨y*/%VñVË–˜qüÁjžÐ‘X-XbÁQcµL`‰U¼Paµ®Àû£¡– ,1ãûƒÕ<¦Z&°Ä:n$ôýÑPóT^K¬â ¬– ,1ãøƒÕ<¡#±Z&°Ä‚£Æj™À«x¡Âj]%öGC-XbÆ÷«y:MµL`‰uÜpéõÕWÖ=•¿BhÓ¦åð—ü)"Û3^cðÎ;ïX¯üñŠ ÏÉ.;å[,9bÙD=Íù‰KÅ@±j`ðÒÓÓñÞ{ïùŠ d½6ðeÔyE‹j‰¶­Zc?º|à‹íøú¬aH©ÙX“1—d4ÁuQ’ò–y“õTVqp7IšHÏDz§6¨?c:|¼”žøm\oˆ¿P²xxŸ,ê+ËQÌåmÏÆY.:p¥¾ zÐÅCÇÊPQZˆ¯y2 Õ\{ñ9ttE=}ÃJ¯Ü58‹f;r7¯Æ¾£%Ö‰(*†»®I;Q…¯‘й;:%µ$ǦÒ{ª;`E2Ù{€¹aÈe¡ ñrÁ%çaË ï£`ïaÔuµ_¸zfâî¬4Tˆ&§à}´¤ã¬êêZ¢M\”ïÇ민†ôó†ãü³É)‹jð?ú“_L’¼öé!m•'KÓ~Óÿ2&NÿѼÒV3þm³¨_ÿlôyÝ¿&`G€_ð~ÈmI7b> ðÝwßxæ™ô~3Ä5UØ_Ú‘z §@7øzZeªÂŽÌü¨NÓ êܹ3­®oo½áÍÎ8ã ßS¬EÓk”ÛöŽ+.éŠaŸ,Ã3«sñö¶î¸ö,[´èh—U§´ŒŽ"Øzâ±; ä^"*ÚÛ±Qµ¨¨¢:ž Ë@ózUfáoÅõ´r”Œ3¯oàåÝ¿š¾r¨¢™‰èúß+ û°IBª¯¥YJë¨Éšš(xŽ|„g_ùhÓ™ @̱ƒØ]OŸª]7Íjp¨¯#zÕ|ð•wíƒÈÔÂ.¯u“¬51¨­²%‰Šrq“¬QÒªM++-CU9ëiq{â1rÚttÝ´ï~ð)½¦x[¾ìÿ¡W4äàò”-"¸?YW¡Þ$œúÿxøË…iµ•û5@{¤,TyšíËf:¦ý¦ÿCO'bü™ño_ó§ÂõÏ3ß©©©èÖ­›u_à Œ¸ÏÙAà Œ’’’¬Ù^ˆfCÆFK…­f{iéöÛ‘E §À©’ΔñBf¨mb`uJ³2yvàÍ7ß´bN7 lñ(”îÂçŸÀ×ÛZé±dü=¶¡ÜóY.\ذƒßîÓ“?«zš)°k²q%ãè¥SGOå.Z|èÂ'(þt#¶·ë‡Ã¼m=õ·!1RrÁ±aµBñA|A«J[‘x´*mÎ脳huâöâOñþîèïÚƒÏyêÀÕ…>l‹.ôð^\ñÖ}ØÃú$£ôH5ÚDÛ«z <c`S9á'¸QIò¶ŠçSªi­Ãá8RÞíDí¶L‰ºPi1>Ýú1zeôÆOvXø]:·&Úkª«í×( m =ÔÅ–÷Ž¢ûÀËpsvxúùõ¨)©@ t‹‚ý'Ü›V¸ø +¿ NOGòõ‡·õr=­Óî4&uü`üÂÅ×åÓÓ:=½<˜<:¾NÏ´¿ñ;í`ú ¦o]¿Áðu~zZ§§—‡K_§gúÿÄö?÷¿.àE‡¬kÙ—€cž)`Ç€×Ñq?†ݦµºj™Vä?‰S L–ܟ2¹LÔê ee^|ñÅHLLô½:ð•“QæÉñš½´Àp¯Í¥Í™çáòôÄV÷Á™®O±gÇlHꃡ}ªñÙJvê¼õè«“êë-*ì‰ï¬á_`éÆ=ؼ¶)}ú ¡”*ÆØ¸äeÃb»þ»Ï€þö¾b"®š4î—^çk^¥zປ.#¹ªqyöXx^| ;¶®Åž­Tæê‹ÉûZò~õî«øÊÕ =hįçáÃütŒìÕçµ§E‚{·àÕáÆìá6_›œ„;܃×6~ˆ—Ÿÿ¹¡ÇÐëpEïÖ¨(;fé1$«2謙:W~çæµØ@?;´ÁÅ£Ò­Ï9ùk Ö3©§ÆÒ\.°àKßrì/èøúŸëëôôúŒ#² ,8œ˜c)×cÁá|#Å×åešjðG_òO`á¯ÓÓ˹ŽiÃm)Øx]©±èÔŸþU<Ñu |½¿¸Ž¤.ǂɫÓÓë ‹XôÂmO¸øº¼"—ĺüßõö³Ág‡€Û-1;œÏ1ÖÁq›l‘±ˆþÓp¡hxbà9›aþñœ·üøk}ù±Ôl5%æÇVNó1ä ó¯g~~þÓ üÞ„WðV2Ø‚ VžÈx|ƒˆX·Inå{¿Îeužj2„å4åïB›¶ñ¨)§#‘hJ½6-©åÅÇPUçBÛäÖô>¿ ÇèµBl"­¥•Óç!ÕdÇZ&$!.ª†Þç·@| u&w\u9ŠÊª˜EÃM»E,ñ ÐÊmøã)/F©'‰I­h/7ê#.6šÖ”¢Š>u¨§5I4/e®¸(”«B"ËKk âh¦ƒ¿ˆpWÖPÛh¶ :­’HÞâß‚¶Ã¤× ÉmÑ’^O£u ü\Kk*Z‘ãâ®!n®8´ð”£ŒR2/–1Šä?F¯Z´l…6­ZRsŠQVÝ‚ôGÎV5ÉHívÅÅÂS^‚ V‚|úö:z)¨!Áè…[®3 &_0ú:½pñõúz:½pËuú¦ýám.ÔÜúÒûCO‡Û¿º|z}¾Ž¯—ëõ›_ç§§ƒñ·\§ßÜí &Î_Móâ—_~™™™ÖVÇ<ÛÍ_Èš~èeçà@jj*zõê…ž={ª$a¿ƒ wÓß «?6Tüž™yšq¢¯‘ôµÙ>óÑéKžNGÒ"›?zjž û«#ôÔXðÔX—Ï´ßž2vÒ¯ªOG…é—ËXçNAêú£§æ©°¿:þè ž›þWïÿM×ü¨z¤S/~¹Ì©ÿ%Ÿc™.;ÇøÖ-·o瀓SàDL˜1I'8»¦Eì1© iŠáœ# —Na:’§×òù VÒwƒ—úz;ݰpÐyã\•–ÀVLp,2r-y¡Ô,¶ð¼ŽôHM)ÚD&N ,±í4Úx‘þm Õ”>—I›™¾ÀG"¡H¾HdÐ뢉¼:}5 ½@ò©´#…ÑDÞ@rDB/|x…Zˆ~$òâ ½@òâjY ú‘Ȉo$ôɈW¨eÁèK9ßóä¾'±ðÐÓ’ Vm1ßLn¨*ž#9'§À©‚ÊL`f$°S=¿ù¼³“ FFFFFße ð^;TƒÏ‚ê$GûÙ_Õ„çc®Sà«è"v¸þøñãuz&m4`4`4¶¶nÝz¼[ĆÍÓT0GùË_|N;ì ˆ“ épè9àŠ q G@p‘Òׯ5*T~+Sy †Ju     |¿5 NÇ2KÐŒa;-6Yb&–ýÕ)ÆÀ‰i3¶×200008ý5À8êbû[&öWµÓ*)5_pÕòFp¨NZ‰è„U¦*®O <‡¶!gñæF_Lœ@vÇAÚƒmKcý×ê·BÎ[Và¯LpÄžýXž³~I¨v"Šm[Ž¥ë NiC3\ xÇE¤ÃŠÙy ùúÚä÷ú:}®½pgðO†x¦@¾2Ùƒãà«Ú_Ý6ëdU\½ÌJGâpE!ÌÂbtÊÿqoCuÔSÛÃÞbò[kZåžÕÈžô6ô@Á½ i$ÿú!>éf ÑæÁË¿Ì)s±íò 4’ÇÕ&aÝ~KR­R¥UöÖÁ¦e¥Ûs|<…÷ãÛŠP¶måÏCSr¬ì ØD©Ÿd)r¦4´1**s—n³>ìõƒì7kÏê,LxËÞMÓ/‚É{2rsoB"ãÇ´Äeô¯9BÕ>¢2g ŽV⧆áÁ ÙØhyþ©çåŒETfNÓd\Òü7Ä?“{â4@ÍdÐ?ŠÂ Æ–‹÷e‹µwÕ¨4ºö´2“4Eò #¯B©GHÈ6‡ãb ƒŠDþS¸Ø‡™™3±|íbŒõ>Ï[¾‹æóðÃ~Ù$ø2¤ÅGaZŽm\÷¯_€t/Þ´œÍvÃ,Ó°téã–'8žpóÏÄ´Ç—cñ}™V^úÌÅÈÛ¾™Âcñð¿4©¬ÀÇ+ãïždð‹‚{/þù³ØËƠ̞’nñà7mÁzë‰w×ÒÈ^¬›žFeÓ,ÇÆ½=¦¥ÛOÈéÓrpÈ"Öô;L»tG‡^—a(Áö–I¥X<% ¶³Ë@Á½hMÃ6NªòX…Ê’oÁ4[¾ôÌ›½Ž]§Ð]»&#‘vã]Áâè{÷Á·ðÀï6c¥ª“Þò–ÏóõÑØÛ”ÁŒ6m‘×#Ç]O¹Øó«êFQûÖÓ´„{×bô³”™xšUÈ!Xö§j7–Î%gûtì<äyUÓ˜‹I, ä½ÙpmÞ·Øžùq“cŸ9%Ò5y9Ó0Åë([Ž×ÞÉjŒásÚk@q¸A 7S`B*1±ËLÞ)¿ ëpœµ²0¦’VqN_¸¦_­{ Y£Vâ'; ‘»d*fe½Œ¢˜¾¸oÍjW–}^ˆ?ÞÔØ¿]/™Ž¹ù•¨/ÙŠŠìaÈÙEÓ…˜0÷ ¶æïÃ]ý“QSúÎÈÂçþÑzâNylú¥-ÁÄc볓1kôö”¸ÍC«J¼&½“ššÕ¸-#CÑq6¾õÊ­it†O]„šš:ºi>NÿrI¤^cïÜ4’~öJ–üýâ 0»ë%H˜»“¦±Žbæ7Ù¸sqžB³L"ðÅÆÜ)bfã•»[…‡sס¸Fæîk°#w‡µŸ&틨ÈÓ@‡¡µ¦búŽÛ‘OÛ7¯~ò6zž –á_ÏÁâœä,·oêž’CX¾Ðûâ¤7’5 ÖåS;+ñ·q}).Giir~?špîÁ…½ãàê:‹ö•PÝBÌOYˆ_¯øq½Æa +sðyá[¸©Í[ÄvE¬ÍOPX˜‹{–ÍÂ’ÏL58Ja šCIX‡IâÙ}…ø|å#xhÒ¼F×fME Ö-b7×%;[l¿gp[¯=¡db£ÀPvT'!p͈Jì²S¾Å$Ð>bðE=Íù‰KÅÓ.¦G>¾e,Û÷2éàAwÅ« ¬¬N:ÒßtKí€Dz¼ÝµaUöÆ‚9ØDÏÏ‹(u6m'Œ®65«Á,z7ATg¿ƒG'²A-ÅX²)W=û$2{%~þ¶–p¢¹ÇãÜ9²»õÊàÊ 7ò»bº`ø¹•øwÎä~eZoEâÚáÌ’¾sGt ƒ¥<ÿÁcTšñƸoS<>£Y„eCøGÿ¡knèuÆ0*|«ß™†^™íü#Ì-ÀЇ¨›¦ ;?ö÷½7’œ¹•ÔÄêXþcoÞíw>—x:é ½:aÄT`BÖt{öQLŸœéWÂXò|r¼I’N¦>‚­û~‚^Ü釣ró¿±`i>,mV±‰C‡Ž=ÈÃꈮhƒ)òû‡{V⹟0}7úr»h,™ðíh „œ÷MË~…Áüž©Ëdregaw1]›ZŸ4J6J4Ƚkˆ×^C 4Ñ€8«³’nR!¼ ÕF«0SÑÓŽ”ù–çtƒ¯§U&*ìDï4ËÏ@7륵}’„_¯¶íeóQÇ“qýÍ7£#YÞñã„Î}¼é¸•2/ÎUÒèP" <ñïö.e㲆àŸfåŠÃD ‡½†€:¯tû$¥MÇœ%ï`BZ Ý?ö‘öJo¥él)+Œ½q 2ÚR;i3©‡;÷ñáª;I£3ÆaâÀ‰Ø&i£þ‰ëêï±P¼«®ñ¾VPkj°§ÒÒXNZÈÂmwߊ ºóZJÿzcM_P‰Üë_À¼Y£Ð1{6òk~î M–…}¶´G6áã{/TD+¢uíM3ï<<g$mÒ¬‹¸‚¬þ=ƒF¾‘b'ÍßoA)Êš‚ÆW-þðÉSã>⃀ʣ¡]{NõM¾Ñk@f 8¡4#ö—m´ 3i=”]$¯ü1ц ŒOí6b‰ŸÐžâ#8æ¶-j¯‹®¡ô"|y,ƒÆà´T$:蔡P™c;ô˘Ns¡+y£—?‘‡Éië0,‹VÅá¢ìGè•Ã%$ëZØæ¯A§—ÀÅ ã¢\øÁ³Ÿ5¢) žûxpT*ñíŠIk'ãùM“A/PpͯfcYv\ñ©ø*ó« r/y˜F,½¶°C"²æ/AÆÂIèHºîýÛ‚¬)ðãd°Ý(ôÚí¤7xöâwýìþ‰§”ÉóŸÀn¸?’ô¯âú`úœ,<6šëF^úòaÖ0kqe÷‹nDMI³žy±¥¿þÕX˜äIÖÀÖgn´Æv»´lÌ^¶Wu¡£Ìû_‰Ùi‹0¤ ©¿=ˆGîI³^Z¢©cKƒ]{'¹Y†Ýi®ž)hÆ} tm„b›qÄÀ3Q†ùÇŽ‚üø Gùñd+_&ófœæ{)Ãü뙟Ÿÿ4ÅAÃîÝ»‘Ñh¡\Ð*§‚»ÔZTà›ö¸QJ ç\ñ‰Ö ùfÖ¦»´5®DZÓàãÞ”UHä…žR”zâðÝnzmƒ8_}-®#GÆ¥à4¥è˜ãq—Ò·ÜaÖ%ùŠJkè«‚Ä:r³ÀQo¥¤·0åô²v—Ò|­ÃàÊR‚ã ¶µOýN¯ãäQ3LY z³hÀßÙš‰Š‰‰}½Ð,ºˆÆ|Ú0Ç_H×^³´Èù®i€Ï>ÈÌÌDÿþý­= Ũ¶˜‰†b¿Ù©ÏŽHJÊL`H`58ÈS~&   4‡Ìý¤9´hhœH ¨€ºØPÍ€ û«; Aɇëè#v˜Ð!Ctz&m4`4`4`4`4ðÓÀ† |_°CÀŽ€8’n†F‹ q¨ƒu¨N0ðUôê¸MÒû÷ï·ZÈ”J„ãÌ`…«ÊøDñ &îÉ–çdó3í¬“Ý'›_àÖÛÓ¤r 2®À'êz4í7÷?c'c¼ÿ|ø“Ÿ€q¯>¤«¶9ýnRªSŒAÂVËCø#Êò‡ª_Ô:Žtxs)Wç×Üôuùƒ¥uytüæ–Oç×Üôuùƒ¥uytüæ–Oç×Üôuùƒ¥uytüæ–Oç×Üôuùƒ¥uytüæ–Oç×Üôuùƒ¥uytüæ–Oç×Üôuùƒ¥uytüæ–Oç×ÜôUù™6ÿ84Ã>bU;­²SóW-o‡ê¨•˜NXeªâ…Y!ÜôN¥9‘zëõõNÖéÔ×WãHaêã’Ñ>É…¢"w0à¢óО>¶äú>ùj‹°mýǨ떎!½hû? þèW—— œ> ‰nI«Ò\>·¿úå¯ÁáoŽñí,Ùœêûä#„Æõý˧ÒÑñÕ2†µŸÒ:¾¿ö«4t|µŒa½~0|õMû¯]¿ºþ‚éÛô¿rý“òt}5‡~…&÷À‡NFÿœèëKÚü]o?÷•8ÝŒû¨Äƒ WÉGâpe!ÌÂÇÌ :.W/ˆM›6a×®]¾<ý"LMMň#PG'Ó-~j…²Ånº¥_„«/íXﻡ-48UU€Eÿzès ~2ºŠ¿Þ‚h?¢n¤£ïΠ÷1lýè#TWwÃàž|d±íá1=nÜ…X¿r>ÚË[íÚÁ•Ò׎½gzw6– @Ú(²p,AÊ@;>ÿ‚-Û¯²¿WÕñEw! Ä:¾?þBƒ«éå ) dz*¾ÀÂ_ç'4…ŽNÿxñuþÂGb¾?þBCd•:BC¹LŘcR—c ÌS‚?þ’§â¨°Ðä<…¾Î_êI¬ã /‘‰Ë…×ÑË…ŽÄ:¾Ô5í7ýÏcDoœ'cM`Áá´ÀK_BCb¾>¾¹\hp½\èH¬ãKÝPÆ¿ÚFáų䜯— ¿ãeR“"¡ŽSà p\BpG8)•· Þ»w/xj§ñ7ȼPÑR,í¯ÄolZvŠ+úÅàýµ±÷ã·±ãÜ>í˜j}¦E[îÞtýDµélÉãÝÍ0†dRîåŒJûÄ"ÁŠc|òr’i‚Î6üo΋ø‚¶‡èpÞU¸îÂ3ñÍ–7ñÆ–<¼ú÷RL˜>ÉÉ4¨l\ŠW¶}ƒYS‘q&íE²Ý<.‹¶Øëä“¿®¦‡CU½ É:¢uËÆƒšåQƒ-Éè)£SûЬz­Û´AÛÞo*øE©ÒbØGOQŽäq¹~‘pžµŸñ¸œé©I ú:=•ÃRW…— ìÄqÔ Ò‘|Éã´i¿=k!׳èHb½¿t}ëø’'<ÔXúF…ã ̱Á•´K™Ä\¦Â" Çþó.XðƒÉã_òüñÙÔXx0¾ÀK\I«±”IÌe*,²H{Ôº 3Áá´À‚Lø’Çôô ²©±ð`\9– ¸’Vc)“˜ËTXd‘ö¨uyc"=0_‘A/‹0ÍÆHµÓ kœ|8NA "ˆŠ±ª Ô•ÊÓ+ ÀGô„.A:¡_¿~¾EŠuµöE˜ÐélôîÛ5;¶âÍ]Õä­ÔÒÁu[óêGH¿n2.83û6¿Š×>ŽÂ˜[³Ðæ6ý‡Î 8w ®>¿j½­¨#Ž×…TÌÅŠ×ßÃQ2öIR¬­PÛ’Ñ™YîÔ’/·X: ÃÄŒ¾¨«®EŸK&`Œû¯XþÉ>¼óÑ7øÁà$l}í: imˆïgߣÑ#®‹ôößàmr8|ºl!w~0Ä…«þús¯Ã5çw†ûÀ6¼ðê&ë0![.œÝÍÔ¦Öv›>†]Ð ¿ý!í.èBÿÌq¸ôœvˆ*ûÏ>·–ò$œ[¥ÆÒfæ%°i¿éz6¾üásžŒ7þ®µ½|MÉu%1—gàªV±ËLÖ)¿ Ëpœµ²0¦’VqB‚Ų:`x€·|ܱcÊÊÎÆ‹Ç9çœã3Î4ʬêǾX%ù%Ø_X^£&a`Û()÷ÐþŽ|b]­_KÓûdä=ž:ÔEW£¨‚J+ªh%–¡¾zV¼JÚâÒñ× aÇZ¬d»]Oõ”'Æ-¢í*9œsþTW¸-W­ÆSC§%ö>ùUåUT§žâ Tû ›ªàÒam±qÓxïÕ·Ðå®QpVK¼óu5ºœ%2Ó;ƒ^Ùj¨î!¬¶‚¶¸úŽÛÑ/úKüsÁ lY±gÝym\I‹*cÓÛå2lò6}„ÏÖ‚!g„{÷—–CÐáü›y*IÕ$¿ÿgÿ¬Ú'VC•?j™À+h!ƒj]%öGD-XbÆ÷«y:MµL`‰uÜHèû£¡æ©¼–XÅX-XbÆñ«yBGbµL`‰GÕ2%VñB…ÕºKì†Z&°ÄŒïVótšj™À븑Ð÷GCÍSy ,±Š'°Z&°ÄŒãVó„ŽÄj™À Ž«eK¬â… «u–Ø µL`‰ß¬æé4Õ2%Öq#¡¯:LWh«ùþøD˜çd—ò-6œ1ø"žæü€Ä¥b X5°Nxéééxï½÷|Ń ²^ø2ÈàZ!ª%Ú¶jýd|±_Ÿ5 I"5uó’d4Æ(Iy˼Éz*«8¸› mz&Ò;µAý#Ðáã¥ô¤Þ0S ü¥C£ëÉõ¨‹öy€:`Èvk™‚kî¼å Ä“ÓP™÷Þ?v„—èH<ðõ!tîÞI®zxªÙ*ÊQ̄ڞ³\e(«ï‚´Öñб2TT×ÑáüzÅ…Ì[î £™«÷Þ¯i nc›n=¨l/m¡cƒ?íˆ è¼‰óºµqt ˜M¤õÀƒ\ô!° üHéž.õLûMÿ˘ç1+°ÿr/;]®äÈä åú—± cC¿WFÆÙWKU´ 3‚žöUÒ@Nnðõ´ÊD…uÓªSà¤ÔÎ;£}ûö8tèRRRpÆg4zZ9,@ÛžÃqV8ì“exfu.MÉwǵgÙ¢EG»¬:¥e|fÁÖ¿ˆÝØa «QÑvsë£jQQEu<ÖI¼Þ@•™—Ô!™þCþޏÈ2œ ìÉÛaÅ1±¼®o”lÚb2ædÈåu…õš£†å¢)äêrÔÔÒfú"ç‰ïE_K¸kj餂†ºÖÌ…M­¢ŠQF³]ʳ^ò üü®nØðÎ{øàÓ¯ñþ¿_DMÖ-ÒA‹­õÇIÿ20Cƒ˜ëJøNôN¹øXbO&Ó~Óÿfü{ï¥tO’kÜßDÊBÕ—?j^¸ôÂÅWyùƒ™žzý3Ž´Mxù«AžX V´ 3)=”| §À©²?&ºÃàT·I¾n`› P¿FàÙ7ß|ÓŠ9Ý(XF(/Ü…Ï?;€¯·ÛÓù-èÜ:z"ç°ç³\$¸ °a@Oþd¬êi¦ÀnŒm@ë¼têêjá¢Å‡.|‚âO7b{»~8üÁÛÖÓz¯±ešbdZõ½=Ö~…¯v­Áª¶™Þ'¥_mÃ?ãçû3pÙùäÄÔ”Û¼èõÁ‡ÝÐøœ‹]]о%ÍL$ÄS¢‡÷@iR7$D{g5Øyi™Œ³h•ãöâOñþîTœ»¯¡nl=Š­FÔ£–^‰ÔÓt„´‰õtèË ÈuuÇ Q£Ñ²ä¼µ§Qõü*ÅžÑ6sßvêÈ2°¥îÉ4²Â“åÕƒ”9É£ãëí‘ Ø´ßÿË%]_Áô.¾Þ?zZ§§—“GÇ×é™þ¾PTt̺˜cA×o0|4Ô<žZÆp¸ôuz'ºÿUyYVÑ›ÓýFÅ«öW…¹šžBÊ>9(’† Lü 9XR:‚ñôNU;­U«V¸øâ‹­ÓüÄ)ð•ÓL?÷Ö쥆{mŽmÎ<—§§ ¶ºÎt}Š=;¶`CR íSèžÝ~Ïo=/·ðÎЪ~^pÀ2yâ{#køXºq6¯-DJŸ>H(¥Š1 3"omE<®½ëF¼õê lߺK¼G:¸Ú÷Ã5Y£Ð®ŠÞã“q·C ¾øïkøÐJ´Ç¨ñ— ŽÖ$ô¢½6¬ÄÞ­«ñ±LÜ:¼¥-;µñ¸tÒX¸_z Ÿ­¥×MèënÎ@l ¿Ð°å–6Y¤)‹”ïÅæ-[±yµ•‹6=.FZçXÔ×]ïŬƢSƘc*ž¤‡Ó ¾ô­Ó ×ñEŸÂG/×ééå"Ç‚Ñ>j,4¹¾ÀsPñ$-8œXðuyG :~0yuzz}¦-2 ,8œ˜c)×cÁá|#Å×åešjðG_òO`á¯ÓÓ˹ŽiÃm9Øx]©±èÔŸþU<Ñu |½¿¸Ž¤.ǂɫÓÓë ‹XôÂmO¸øº¼"Ç,{3îS ’f¸aè% iG»7lD†ùÇßNÈ_ƒËgØúHLßÍYiþ¾aþõÌÏÏšâ a÷îÝÖbÁ¢"Ú<ÈkœôNÖ †ÈŸ'6DĺMr+KPa\ç©FEY9Mù»Ð¦ma¤Š4½_TÆÇTk7­.´Nl…úÊ ^ÇHË]HŠor^ØgÍç× ÷µÅä œ»³/F]¹-ˆY]Y©µ.ÑqhÛ&Õî´ˆªCye=ÉÝ Q4ÃPTJüZÄ"©M+Ú“ÁM¯Z Ž^I”—”XrºZ%YŸ'–ã6µ@«¶miA5Š‹ËÑ‚ÚSK¯¨A$cl´%%Öš]¿ºþ­F*ÂÅWªúƒÑ ·\gÒÜí &Î?X:½pËu~¦ý×8èú ¦ßãÅ×ëëé`üÃ-×é›þ?uú?99/¿ü2233Ñ¿köû -Pg›Öºuk$$$€?[|à¬ÅõÝ»wGÏžöþ4z¿êéÔÔÔ;(o7ýø´úcCÅ ÎøÇf‰cžf—ËpÌN‚å(°÷½ Yu*´¢Ð’ìMIà‹€ƒÄ:\SÃíòWîÆ±#n«¬éŸ**«F Z#P~„tAšÐ"ã{ô°Ûçd¸KŠ Rq—‘‘jAFºžƒ¦*:V\W…â£dè©“£¬v¸Á"q_œ¬{ëMùÂ#GÐ*ºêx_)°ÐžJQ…-X>~ЧÝÔ6Õº-úQ4påå òT•’œ¾†×¢¬è|ßjPŽÿÜîºr”žÈÍr‰7ËÕ%_bIPËVc¹qíö+DPêr–À«y*ìTÎ8j<5™aÓþÆïüY/¢/†õ – ¬Æº~¹Ìô¿ómRtÇzXb5O…ÊG ‚§Æzÿ˜ñÿíî µ?Ô¾;˜ ƒç€“SàDL˜1I'8»¦Eü* ÐM£i†ìªRöGÏç{°µõõb‘¼¦qåV5Í÷ŸSëu\ÔR› C'Þ‰áäˆT–WÒbB»ÝÒÁ÷É)z¬ H]iGÀöët(-õ$öƒv–JK`5™°Àþú+ÆLWh„JOda|%…g0•–Àj®¼ø1Ýpé‰,LW`‰ñ µL¥%°‡+o ¾L7\z" ÓXâ@¼B-Si ¬Æáʈ/Ó —žÈÂt–8¯PËTZ«q¸òâËtÃ¥'²0]%Ä+Ô2•–À«ySl4`4`4\[·nµ¶=Ži0Œ¾ üå/ñ9ì °# ΀¤›A2q$äN#¶M7dnTìKø­L¥ú*ÀhÀhÀhÀhÀhàû®q8–Y‚fÔ Ûi±É3ù°ìw¨NA0NL›±½†”ррррÑÀé¯vÄ)PÛGØ2±¿ªVI©ù‚«–7‚Cu ÔJÌ@'¬2Uq¿G°Û–.Æú¯Õï¤ùÞ²e‚cb££ïžÝ¾{­5- M{òçȽõœ XÎÅž¼œc±ÝLf8ήb1 IDAT+É” D çûBÄL•ïŒØàŸ¼Fh††ééÙæpœ‚@ ÄaPqš¡'—D ±ëØ¥;:ôº C >b±/Åâ)™X°] ôt?-}¶qÒ½ÿüÙìõ7¡à)À‚iéV§§gÒ±ÅëÈa°4þsÑÿ> ,š‹2YP´s÷Ž#ƒhÌ›bÓàÁ3mÁzÛypçafæ4,]ú¸EÞ¶"ܰO¬Ýk÷¬Â”t{ÀEE‘ìë÷[ùî¼Å;eÖ.kÕc'`ù.jˆ'?ì—M8ËO|r¶¥y ï)v{‹nRF§®¬kd&–¯¥1ï½ùÎ[¾Ë+¯›sîó^4+83òf/oñLL{|)]»tý¤?Ž"¡³*™tälÎÃò¹™vý±ó°Ër¤ÝX;oJÍi °ßß}áÔÕ˜‘ì$h@q˜%Ã͘JLì2“wÊoÂ:§@­, „©¤UœÓN"‰_\ðgÌr!f`6^¹{°Õ†Ã¹ëP\#Wx väî°öŒu¸ñ­P.EJ‹×>˜Šé;nG~e V?y2”2Œë{ æ Z–geïZ³¹Ïb„5MàÂð©‹PBSLG7ÍÇÂéB.߀較¯Ö-Ä„¹±5îꟌ’}k°±ÐÞñÑãꊩ‹öY(UÃô­û055¥X¶h:F-jƒ…û°dê2d-¦“búâ¾5s# Ë>/Äoê‡ýï-À¬E× ¿¦•GÿŒ>|^“ F§‹¬kä1dZ‰Ÿì,Dî’©˜•õ2Ø÷Þ¿j6†eošüÔTæcìÇÙH±ÜÞ ¶ô+,œ1WlBá[ÙH:£?ÆCû ±rN ²‡õÃ3m@á¾M˜¼l^þØöè; ÿöÑöäõGé5ÞÂéXú9_u& 4h@uØAP„¬fƒœì²S¾Å8S _$ÔÓœ¸T<â®=º¡×Àa$òXýNA„¢`ÅCÀ#MA÷¸tè{%nL£‰¿Ô:`âó“±,{ ݰJñÆ„E¸çÞ+‘ȸ1]0üܬËY€çÞþʪmm˜H¯!xVcÍêßcp÷.H´¦ R¬rþ×e ÎM؃ŠÇ›\Šl¿…7Cž}¯ý½:tÁ92æ}§Ñ©CG ±[j¢ƒv©cÀ4ÇÑL¡„^£D3 ≜¿Ò En»¬‹U­tû¸ÚõÆÇ­ûãÊËGÐs|¦[©u=ððO£Å‡´’KÙ¥^t¾«†ªÓBeW;<ô1qÍåèOü?4¦lRß/ ÈLÇÍä°Åþ²Va½ŒÓAC §À©²Î”ñt‡Á©î)ÏÞ}á¡oà)Ýíyë(k?´67w¿iMö'ùòý6(¦+†gðÂ8D§:îZ»ÓsÙ±pÉCpÏ=ÀƒÙ³6ç'èEÌߺ’*ÌÆíãG"¥æñ %”bã‹€{¦câÈ~¨9@¯(X3|Çs ŸÐž à˜ÛžS(*ÈÃ7‰q믞ÄSÔ–7ò2ŒN+ ¨Ž¯-xFdME— •âõ'¦“'£Ÿã¼É¥;Þ]u˜>}"&•ÛÇ›7eœÁø^h€q šaŸÕþª0ëROÕo$N0ç (“Ó*• WRWLZ;ÏošL_$âš_ͦéý4¸âSñUæ#ôÄÞðäaMzë›ÁODÖü%ÈX8 ].ôþíŽk ìª1Șò”ΜÀÓövè—1ê=„®äU^þD&§­Ã°¬k}€Ê—±]ü°c…D\õÈà±Ñ4=åÂy=–;Ù ¶ÛÓœ,¼7¨ÏJ1½.Ãü¬\ŒêèÂXÂÝ»îwHMâÅŠI˜¾n2œ.ÕLl4pZh@¿F¬ —$ï>þa,›½iÞñ=aÇlä>>Þ>Þw54щczbZÉFw¤kæò…è19 ³†ecM4Ühèû­ž)hÆ} te†b›qÄÀ3Q†ùÇŽ‚ü¢ –O ±‘˜?¾ã4_ ó¯g~~þÓ »wïFF]E§Ið¸KQ‰xë}{È"{Ü(*­A"½›d¥EˆF)moÈ <¥(õ„&ƒ-o¢µÞÀSZ O|"h©@Ðà.u#†xY¨ïÄ'‡üA9£ã×@$gX×H˾¶Ž_¢àA)]¬‰t½Ø°§i7‹€†È·¨>û 33ýû÷·ö(8xð bè¼Ö­[#!!-Z´À<€Þ½{£{÷îèÙ³gHÒ¦¦¦ÞAˆ»éW­ýxOýòç­8æÓøäWG°üØI°'3áèEPE5¨N…šÿƒcâÈÀ†Ûª˜8$'Çœ$ó#Ö=Æ‚I§ÓdSå èÇÙ«mjïã”_“Ë$N X×H³ï¯CÀ-d8Ä‹õTQˆ‘ã¤j@Êk„fbî3îD/"ûÌ3þ‚1ÕYp‚ýÑ3yFFFFFßk ˆ +ƒáã ª-fbNUâP©›7> þNüÎ;Œ¾}û:à™l£æÕ€úê ö)û«ÚiU`5_pÕòFp¨NZ‰è„U¦*®Oªøìö—P~Á8Œ<+ôeÕ‡¶-ÇÛåé?²ûI•žýX¾hÒoOÛAŸ\Ö'œ›·mƒ¨matÅ ëd3(¤±õNù [g5a}"ÇßtøàëÈÊ:·þìì&¼9cÅ’â?+óÑ©KOlß×Ózr“'9¿L¦Ñ@3i€ÇY3îS Ú_Ý6뫸z™•õõ^Y³Á„Ðëžši7mSJÅeýÒ§`é¶C§¦¬¤*Ã|’yÎ&>”%²³Û÷¬Î„·6¢j%H'|œï„HΤ¼L:yqsiSô°s*÷ +{çÎoÛÏDú¼m ûR, S"·Ž²T²› ,ÝžÓ0N¼ãåq:©²lÛ<ÊŸgº÷×VÛŽÿ¤¼RäLQÆ%óË|ÜÚÀª™š€ŒÆ›®‰ÅA¯ u<{yl­Ûï—‡ã¸ó‹^&ŸU¿ƒÖ6O ¾)­mòÛ½ÿ(žxøA«Ï2³Ï·‹Á6ˆLì´ò帙Q±Í,XD¶9§ÀฅˆL­Í_‹íÜœ5;QRø9ž¶†<‹Sß-h ŸçâÖsì]"9»=¡MÃÁHºVù´…ªu°K|íØ˜¡³ ;íϧà];ÜÖ^a“ ¡SOÃÊü£(9zGé75-­ÏžŒÜÜ›¼‡YµÄeô¯9BÕ>¢2g%ŽV–X¼Ž¾<5ü=3"„y§ÍYC|?Çü´E˜”ý¯ IãñˆØËhÛnÞ׬i4îšb‡—SVVF;Æ¡¢²Þ?¿Ÿ9ÖþUžzë÷ÏÇ碸è0®øÁmHLŒ˜øXpŒN–䔃f LH%‘mÇ)Ä@Qqš©' À6tZ`b‡¾¸æz:Œ»päXffNÃÒ¥[ÝÆ~œÔË-ÙlfáƒsÿˆÂ+‘òØ$ôK[‚vb볓1kôök‹rÛ÷Ì›;Cf¥aY¾=KQQ²¹Å s4‡sסؚQrá» "‡øé?&:ž¾Ðeà¥(¡™y¿þ9ûÍOiqa-Mü-Þýº…å𬂠F'ZªÀ‚ê$œÞNvÙ)ß!ÐBC1ø"«žæü€Ä¥âéóüƒd°¤xê#K°ï§cãÙfX¼fõï1¸xvá?ä/ ã Lp'fÕ4xåi"'™ˆÜ$Ñ#›Éb ÆÜ˜ç‹›’œÉ™× ë¼d”S†«ü3<öØ‹V‘§àتx÷mЇ¥Š!LÈ>[~ó¿ciþ^ßÙòžý[l]d´ž¬û^=–^¬ B‹Š•3î-äþð–élw6¦$¼v©| Õ$ŒÉŽÇ#÷N£;…Jz‹PËØÍ  }¥UصÁnã æ`D¹ˆÊÏ>LZôê„$Ü„¬1èö죘>9S«©&+‰MµuÀµÏÓ˜˜½f5&Úë_}Ìî×îܯ‰˜:>fáß9ŒW‡ïàщƒ©¬cil]õì“ÈìE#­Â>„ËßÍ€_” kôíuÔExcÕ\9­©œ>}3¾ßþ¸óK&ŒLWáA'·´ŽÁ•?œýìRìÞðªE¡çW£ÿˆk-¸¶®1 r´Q ªÑ@˜'€cu¶@Òa’ÓÑë• æl=­ 6ýÝC7øzZe¢ÂRÿ´‹yMÁ#›ŽâÞ m£n5ÀºÛg •ïA¢|{ÖØëñ¿QQ3·=Ü™nÁ%V~‚öúÔãá3*R@‡%6„º-WË­=„³Ú©&ßœÛ$4aªƒ“œtž<ù)=W÷–ò+•ÑWâB9ÏÙÓ– ¹×)°tŒ½q 2ÚÒÄÇøñx¸sj-ÚL‚Ò9ÏcîÄËqp†m =•eDMÓ…—0m…&´(—5ÕôŒ{_þæ®Ê…ûÞÁöñÔžBl£iî|¬S\_,¨Ü‡ë_ø;= §!{öJÔÌIuèCÚ±¾ïDTîˆþ>£Ó:b6=Åÿ~Lwa£ÄY¸íî[1P¹‚¸uþ˜É¸þæ›Ñ‘ftÆÿ:÷aÃñ *‘{ý ˜7k:fϦŠß£»B“é±O”qãm¸u¢ê¡ÔXc¢m[˜Ô¯Ì¦Ñë6t¥–þl¶brV°¸­t‰RÖ(fÞ£30†x_9° âÓFáÆqõ întxé;poܦZ)¿pE·@kZÓкËY¸|êÃxãÑ»›„ÑwÿÁÊgJt\¸™)M§ëø4 3‹ƒp|­ÚbÙF«0êi«B ?‘¼>ðÇDwñ®ë@d‘..<ž"¬}Ò~Á®Ž-ß@Jj:ͯ¯ÁÞiõ¢›±\—‹éU§¨yßÐqÒ·þ ‹žÊú¥Žºþ?{o^Uqíÿ9!$0 $Ú‚HP zA)´‰ÕBQ5\­@kj%ôãŠÜû^yá¯ôyá^)ÜöQ¨¯5Øj^ ܶ`%¨ õAQ UP‚…T¾’JbøJ äÈ­½Ï:™3Ù眜pÀ {òìÌš™5k­Y3g¯µgÏži¬©ÂÑØ1xèÉçð|6ðfU½Îä*j1:UãU'ýÖi”.Á§§ãelfHM4FiÜŒ™ò^(yž2ÞD½NS(óAÜœ£ ¬HLÌʹ4þØ»%gàgç/2â7-Š%ív;E­ûK™Qqö—ŒÀˆßíUE LhCZÂ@¤¦ô÷\ÿò«—‘?çQOšËÒã‘äËé ÈÆF°5´ø>Â} tþݱÍ>qÄÀ3Q†ùbGA.z#¹Œ{ ¥%æ‰r¾Sñý…a¾†WWWÿ–â€áСCÈÎöcRøâœÍ<5Ûõ©,p‘~[I¿±AŒ‘€D­ŒöÐê… øP_„lÜu ¥Ÿ}à¢÷QK~õ<†Ž¿ ©×§v"Z@GöÖàó¿nÁÂy…Æùö(v–­‹ÖÀ¯ýkäää`ôèÑÆõõõÆxëß¿?¢££Ñ§O<ñÄ1bRSS1|øðnñLKKû!¢‹ß*«OòÜ_ìõr|^¹.,; †£ Z-ÊóŸ^„ÃT§B+úò'#ÉhxÙw“­óÕ³Ö{ zg{º…ú4œ>I³xšôGѧ<ôy[h‚UÛÔ<†•¡ÆŸÖY)ÎF­œt‘ñ H¶l’oš–º ÒÐuSNt-eè&I+´pÒoPvÚŠHwòŒötQÅ¡¾Ù¸SézÃ|ƒ½3gbU;­Êªæ ®Zîw×)P+1°ÊTŽâàfZ”䤯.y…´×…—¹%ê9ô*l%Š×ì ¯b÷þ Ò »wåj[0Òºšâ¿ùÞ¦#!î_¸9©>?q†lи=k“ »Öýgo¾—¶Éþb亡½¸ßtWÐ6Ï3ió¦[n¹Å¯¤ï¾û.ž}öY_žäüV° m \¤xœ…pŸÕþê¶Y—TÅÕËŒtw_è•…0 H½nïL;by^⑘8QŽ?'ä…® Ϊ5Æ»¥%[¼ÒQÏ¡WaoÎN:0¾Ë7eŽ£ÛVú>ÖÏ»êeHí)žåyoÆ?‚°°ì Ýhv-'xq…!ï¶/à;‹F`ÆjàöoÒŸ²ób°”ÎìyždÍÅ.ãð„`kÓH›r1½¼.ÈŠ­Ø4}¶úÜÒ0Hr_qt>«¾­­ QQQhiiñ{õë×ÏÀå:v°5p94ÀN+7ŽC숊mæfôÈ63S`Å€¸h!.G'âQ·öÆ/} ZŸFzx3ª*«‘¨ÖÅ–»°õåe‘E+ßÄc9‡&ý¾E›ãñ~PTØÌ1ÿßJ'–bí&ä§G¡®jZ/½Ðªþás¼Ýbhz ƒŒÃ x¿:aæ>Tº’̺¾Ú柲E©û·ÐÙ/-¢C£Bñ¤Ý„6Þê£'¡Gmr 18æè C»Ž®3gÎÂð&F|ù |Sfçë hœêàÝ.³5 ˜J!][ ?¤÷È63Sà8 *NHw¹ˆ´6œ$V'p¢7ŠÅ¨±co¸LtFýš%O¼yÅÆÖ«5—#Ëxú¥§Þ¬Bl«3oNç”`BŠ…+7ÀmãÍ3êg,ÂKÕh¥ „jWLO 8RnAImÝHŽaÅàUøùëûŒöʹõ¥űc•x¬t>ÖîµþºêõgQžù<=¾ˆž§'ÿ°3(…§eÁ§T IDAT‹³1gB ² Wb×q™ï®Á¢” ¨˜²Mí¨~'“Ó°Áp:Ú±¿r¿±ç%3koiB9mŸlÀíÍ(-™‹%5·£úثȊ5é,Jš‡ê¦V4«Å½iÔúº H™<Kª[ÑÑ´-P|Px¤ÜÿhkæòõxnÍaÃ.sJ½©v3Þ?Öu¯ùº 0yÎ`hï@Så<LøWT±ŸTWN3"%(«mGGkƒ)ƒÊ†à1PÿQ¼ lVއغH™P€)› ½£ ï䦳 †pÚ»´S#¦&Û[p¸üäÞV†GCåÚÙ˜Ÿûªq0Ë;Ábl¨Õ[šö£òtg[OT–ãt»éümY”†9ûF5m©¼é¹ÒNj° e2¢— ñÕ€yG ðÈš**tá½¢\”äÐIdÀ^È5Æ¢Ô²co ˆSÀ›ù»Ä)ð®m§l „^ªÀ‚ê$„ž›—ƒ ’÷k¯ý9bð…˜žæ|¿Ä¥âG¦ãÉ-MعvVÍͥÎèišN;ü#œ½3ǧ"’¶MNM0žv“ÇÜ‚èÏèÄ¿•ÿÃÜ@9ŎϹ}¬ ¯<šC;¥]‹QtPŒÅY6T¡/Ï(AîOnD;ÙӉ˲Q9ÿETYÙVŸ ¤ÓÿžÜ‚Úk‘¹j.Æ%F¡xW#\5€ŽeÂÒçÐëˆp¤N*Àó$ÇÚ÷t¥ä5]Í[e/Ʀ§ò‘š@Çd:ToáLzÚ§­’‘@ÛÜ^nÐy³h1.-B ¥>;á>ÉÆ(Qÿ‘>èÝ.Ëç9-šŽOîܺF~·h!–>û4¡”à4“4’Nš¤#œ§ xëï-“…P$­« 6LL1f$j>|J–ᑜtÒ@,&Í^DF÷¼g8/Þíôû²ôÃ.Sií+ÈIOÀµ×]O)>JÈ÷Ø‘¬bãp#£ ¯“r—-…TZÑš0êÜOòs÷sÿѨÃî7ŸÅÂ…ÿ…õ¥ÄÿàiÊ GÚͤ‰g¦¢`I1ŽK`LfôìºøéŸs±sàï½¾¶5j ˆÀ±:[ ùÉOµÑ*Ìdõ´OVþœÝàëi•‰ ûdÖû b16ÿqt4T`&¾ûÊŽ§KðYOÞ7ßFç90bénŒ¾ãdOpßÍ©üL˜94ÑÝTóÌ{«v7ïZgÜÒçf#.jæ­æ×«ðòVóiÚªŽ¯¼ä±ùx…f,ødà‚WvÐ;TÞë}0D¨Ô ;Üì±ÊÌËØ#QCæÏyò2#B¥cà¶Ðÿ™¸ç{ßC~~!vî¬ÄÃtLq×@æ4û~Ì~è!ýÖi”[‚OO ÆØ±c163 ±]Bá@þ‡jHÍL«ÿ‘¦®KËp6îZƒnFZ’q §«±UGiVä¡'QžÏÒO=GêZQâ¼Ô‰„‡¹x}O£RõFid&&Œ ­µÓ@°øg8)îü®mpË« :•[*Ñèjƶ•³H"vU(„§à–l’ðÙ×I·.ܲÊXÁe¢÷-ŸœEëwl&’ »PSU…¨1Sðä 4ËD¸Uõk×úÕBDDrssí£“ýjÉ. µŒYVš1×!¢ï1îD¯GöÙ—Sà‹˜ê,ø‚CÔ6›Œ­[¶z¦v øÖQ£FŸ#úºñò9!!111¶SÐ3UÛµ‚ЀŒCq¸*ÃT[ÌÄ|Tñ|²ôåøª 2˜ 쫞e~OÏ?·$fgÚ°5ð•Ö@Oï'æbÔ¯´òìÆ_ ¨;ª“pø³¿ª#àÏÃ>X§ÀSÑ ôØ!àúìÉÛÁÖ€­[¶l |Ù5°}ûvÀ΀:[ éè@œ‰ý9‚ãŶ»Nee¢ä¡#«D]]±ÐB¼%+œ‹Éc¥«ÊøRñ $ëå–çró³Ûï_—»?.7?ÿ­7§Iå7ȸ_ªß£Ý~ûþ'cìrŒ7ã_Ûâ1ÉAƦ¿:=(c;-6Yb&ãÏ~w)ë®SˆAÂÝm(Ë _'ŠÔq¤ÃCuSÑù…š¾. ´.Žjùt~¡¦¯Ë(­Ë£ã‡Z>_¨éëòJëòèø¡–OçjúºüÒº<:~¨åÓù…š¾. ´.Žjùt~¡¦¯Ë(­Ë£ã‡Z>_¨é«ò3m¾8„`Ÿ±¿ªVÙ©ù‚«–{ÁÝu ÔJÌ@'¬2Uq¬î z'ˆÒ|‘zëõõNÖéèøFùùF|ôn%Î_‰›G 2:ì¢é·ÆÑã­ˆJ¸ qþÂÓ º|–ò²EÌõýéO§¯“ÄïrÐX69îN¸ò]jýJ›íöÛý/cÁÿ_¾ß?ß«ÔÀéîS ¤<WÉ÷Ä)àÊB˜$„‡™ Þt¹\ýATTTààÁƒžw‚e'Ò¶M¼#ážzœä`t¤³ 'Ï¢Æ]•ˆ¸ÈÎ'ý&a֢ݟ’oÅ=w߀C¢Œp®¥™v˜  i¢;p¼ö\‘1tpŒµÀ £ïBLí{øÃÿì¡é…¯áŽüIˆiª‡«_MG¿œ®.ÇŸ?ªÃy %ü\ç“ñ@ÁO04¡?ZmÁ¯×}ˆûãÆÌ6¬½‚ŽØˆÛ¸QûËñÆÎv tš³ ®ó-hjoBK›‹è÷Et ‰wª 箹3†7`õëâócèÙï¾¶‡ÈQ¸þŽpcÄ~üñhqÁE†ÒêùSÕ—À³¬`5ÏP”òO-XbͪeKìA Pë ,±µL`‰ß Vótšj™Àë¸=¡oECÍSy ,±Š'°Z&°ÄŒc«yBGbµL`‰GÕ2%Vñº «u–ØŠ†Z&°ÄŒo«y:MµL`‰uܞз¢¡æ©¼–XÅX-XbƱ‚Õ<¡#±Z&°Ä‚£Æj™À«xÝ…ÕºKlEC-XbÆ·‚Õ<¦Z&°Ä:nOè«ÓÚj¾Ÿæù²Ë¾ò 6þœ1ø"žæ|¿Ä¥¢¿Xw ¬p³²²ðÞ{ïyŠn¼ñFcÞ“q¡Ã8sàãµû97×çLCN*M×»ÒÑ´{ÞØÞ€ãØ»3dœ/ ýÈçFõ¬»îÄuôôÞ1t0í }mçÌfžýt þøAŽûg|ëê¾F„]Àñ}åX_²´]½\toËÑr€Y·áúÁ´f a"vþžŽÆ5;Ä3Ïjq7’ŽëñÀíסϹ:$àC´„…ÓÚˆ“øœ Ōäë£OÇ |}àNü•xõñá¸)÷Šˆ6ràËÀïB^B!ìöÛý/cž‡™Àöø—à%üñõÒÝùýËX±¡ß+/²ª¢U˜ÉêiŸ¬ü9ºÁ×Ó*öÉ̪@u |)uÈ!¸êª«ŒíJŒ¡C‡zžè šduÙFÇdæbÎí#ê ûÞŠÖ–Ïñú‹ëñ9à¦ïLÄðSxÿ½ã§WècZõóÎ3h=Çg9µ™ÓÕDËh uǹ§v¾}wá:^ ~çlü¨×üÓ4Ü=¼ë_ŽÖ`S5çÉA8GžGë œ¥ì"ijî‰ ‹‚Ž>f:–3­ˆpµ'Xtp™qU¤mÎ6r šÑd82¦3a5SÀؾ‚/}ÊÀÔ닯××ÓLû—còC¸œü…çÅßn¿Ýÿöø·ÿÆ þÉXàØ×}PpƒˆÅþ²¢U˜Ièé€dý9¾*[11{ÝW ?ùªSà +ϼõÖ[FÌi¯à¶ºl”O:Õ©ì¶³8MˆŽacp]b_TlcS–V†&ñº‚ÓødË;HšòOˆ?ߌÖ~Wa-þã6 ù·~‚ßmØ‹¿¼º Ó¿G_9´Ñ Š´ 1…Žö=^õ±aø£Ï´ oÂ0r;>ÁéO¶b[ØÕ8¶g/Í0¦¹.¡Ã=UÀ†ŸÛkppÏPÒ ”>ßg®¡\OœýeïœGô±=8È„¸g´'qwMO$°»ƒM¦ T1`¾úDÇÄ/X|OC|:=-<:¾NÏn¿÷;Ý@ú ¤o]¿ðu~zZ§§—K_§g÷¿Ýÿ<&.ÕýO¯£I ¦qÞýÔ-ƒÈÓ~÷“87BšÀ‚Ãi9–r=θ§øÒ·"/ÓTƒ}Éc<…¿NO/ç:vû;–þ~Oª®Dg¡Æ×û‹yªAï¿@üuzz}¦-mXp8-0ÇR®Ç‚Ãù÷_——iªÁоä1žÀÂ_§§—s»ýWÆøç¾ á>ÜõjèT‚šë ûÄÏè óÅßNÈÅßÛÉÅÛ/‰yvÓýèb˜¯áÕÕÕ¿¥8`8tèx± F"YäúM‚¿6àsÒåGâ)'Öâé“>š8u†6CX-ê‹C­@d?ô=O¯xZž žmiC­ø‹!GÂÙ~}„Ñ«„æ¶p dZíL« ‘±NS=4ÍÚ٣Ÿí ×tÚˆ·>:Š!7çá;£ OD ˆq ýìiIÄ @·áTãtô釸¦ì§Ï¶¡åøghìsRûÓ ¢ô­J´ž€ÓF"œ’´™[(0ÇVA×§Ž£×5¾ÎOOâl¹N?Ôí $Î?P:½`Ëu~vû½/º~é÷bñõúz:ÿ`Ëuúvÿ÷žþÇ«¯¾ŠœœŒ=Úx°­¯¯7¾ ëß¿?¢££S:Ÿxâ cq}jj*†®w©e:--íGT@/Æ7ÑüÂY.6†.÷ÅïËæiv¹xžZ.6"†!ñ5S`me¨–T§B+ê^’½_ ü#à ±··›ëº–;qê$Oí{‡ŽΜn@#zö,.ý¾áô…Ó|Ïï<Ó„VªÒ—Ê;ZhY Áß…F…V Õç| 'ÛÂŒ%gÏ’¬a}æ§ý6Ôíz5 yKCnÄm7ÂùÖ6âG{(â57tn³„óÞ²Ÿ¡O7U*§¶9†`êÔhÄ9C~æÐµý|UHðÔXnŒÇ°<}pZÅã´U.Xuú\Æy¾‚Ôµ¢§æ©°U+ú‚§Æº|vû½ßù«zö§SÏŸ~¹Ìî{ü[%u ©°Œ'5O…}•3ŽO{ÓïŸeQåQe¿˜¨ØoßÏ_N/bÂŒIú‚ý°ëZįüÝ4ºÖèÌáÎV•*pzŠãájggÉ 2Xøs¿`B'¶|&›ð(nnm¢Ïã|ß( Œéƒ¦ÓÍp‘–„OwärË üx-’lk#o²¯1‹àl: 'ÒBwèiU<²p¾*—Ž×Ӵд¢ßyýÉÑzþäóÇ«»eþè÷D^|{BÏŸ|þxu·ÌýžÈëoOèù“ϯî–ù£ßyýñí =òùãÕÝ2ô{"¯?¾=¡çO>¼º[ˆ¾”³;%qwyXà©Æmwwì·3Ë—Sà«‚ÊL`H`_õ,ó·oßn™¥f†;"Ч/Í\páï´'AOCßpÍ^ô¥é¤ 8÷÷6/ï«§4íz¶l ذ5ðÅh€÷Úá :ì ¨NÂEHæÏþêC@6Á::Á;L(??_§g§m ذ5´vîÜil{tE»‚­Ë¤_ÿú×'€u¶@Ò!Eœ‰»ë0xXó‚Âîa ãúc¨ãÚi[¶l ذ5ð•Õ€Ìp,³!T†ú®Úæ ìww‚@ |1 a{mR¶l ذ5`kàÊ×;⨋í{Ø2±¿ªVI©ù‚«–{ÁÝu ÔJÌ@'¬2Uq¿”pãÁmX¾°… ‹PÓó¥ºqÕaCñ:üCùB¡³Ð†z«\ͱfùB.Ä–šKÕy.ìZ·ÛìÁÑ[‡-—­ 5À3!ܧ@µ¿ºmÖeSqõ2#ݧ€+ a £^ÿϹ ¹ÔQÏïé ¹š°™Xµ¨ãé<„„ð|‹þÌÐÓ÷U•ë›´« yŽ L­lEá+!xÏŠL”UoÅ8×GxbÄm7ò[èxr’oš_±’sµÔàÅ›ÑðïcðÉÿ{“§à[ »1)¾»Špbÿ`ÙK‹?–ûÀ‰ä•HŠên}Ï”£Œä˜Hgf°ã…X:$»s 8Ño eóÖ`v°5`kàK£ó$¤k ô‡ôÙæ`f ü1‡AŹr;ÏY…y9ó°aËäO’aX¾á µ‡žì 2PŠJL  gÑÑËêvO‰F'S½muVSÉÍXW˜‡•Öa^–ù”š·pº>À;±½h9¶1i4WmÀ,7~X^1IàĺŸ² ÀœÌ(d®¡<«0‰IñHHÏÁ=Qù§ŸáTµgÖJ¬+*$ï4;¨¢³n Ýô³ ‹qÜ åOV³lùºu($Ýd-ßE5œØQ¼Ð3;‘3¯žÙtz5²faž§,¯ˆñ}ñª6,G–[ç‚Ëz߸|–‡FÑw‹5ÚóŠ·‘$¬d4 ¼þeˆøÈLº÷ʯÄgGO}¤·m›¡/sF¡x‡©¡=Ås1§˜_0|ŠgVÖwñ“Åëq„ìúñm+IÖYØbNý yÏjÓRâ^óI ì~óY,\ø_XOÓ¥O›äüÉJe 6oƒcÓ‰8>|íd.[ŠœÔX„G¦böŠÀªµ8p¦a‡díc˜”OçH$ 9!.Ÿ|“0‘š»*÷n,)Þ"nÊ2h$(›¶{.@ñÖ#t(iž˜‰-–-}锎MÍÁ¢ÙXõâ{¦‘ô’±«5fc\¹h2ââÒðrË2ì¬]ŠtV®W=m*ð»E ±ôÙ§ ¡§ùõ~d"É3È}@Oø )<.$DbÊSǰ"{)FR½¦x*‡Oåôøøì6£w̼}àQ›YŸÔaX´p!^4:숱U·v¶­[½Hâp¬ÎHþEŠÚ¡ÔWaÎÖÓ ª7È·A_A7øzZe¢Â¾è]aùÙ¸Úm“,oÔœI¶ÆEG'‹Ã 6°Í¢›äÑäq¸ŸZ(Œz°µcîÁï–ÏGfbJ«Ûq÷ Óiñ_7M[0^™F0DÊÀbΖ2BÞý³=h§Í¤~1„ŸäM÷Á—¬ÜŽ=T`ª ³]æYÍh§?ÖNtSì ¾ùF"¿¨•÷üËç߆èn ©‘£PÔZ‹{~ÿ;ÌŸš‰‚4s²8Í éè¦mÄÕ”¿SÆNÞ#¯/sYv?>^²(n7 ³ZÏè£Üû‘ÿý[–||ïgÑ0&*›õ`ž1bÚ¿v8OšYÃI¹>Ë‘}ÿñЃc _‹]M}ææÝƒïg'Ò¬D>~ø‹!>fŠr6hkÀÖ@¯Ð€Ìp"G€Û%ö—m´ ëeœüÍøª¬3e<ÝaðU÷ŠÊ·°ë]äO˜KysñúžF£¬ê"”c&&Œˆ„ëØ.<¿üyš6­o?z”\¿þ-z A¡yñ¤›“yQÏúŸ 5UUˆ3O¾PæTUOïÓ£€M÷é³îwëÖ•Í#™Õ2nPegFdúÍX@É-ŸœEÆØ±;6I±¦i ,«Û£ cbîlTÎ-‚ùª¿o<;˜9ýGëžy’ÊiæÄÕŒºãÍðÉ×ÕˆªªŒ™ò^(yž${õôTîj¬AÕÑXLyèI”|5&ŠºÍã´W;R±ˆÞÅ'Í ËæÀ}/í5‰ø‘µS>55ÿ(]°™qL#Ó÷/@åÊ|zÕŽ)K`Ű¥È…0Gfþ÷~ªäƒ¯ëþ3ƒÚD²DeÎÁÌÏbÍt¸Ž–“1¦#°)?sN)VlνüÀÝÏUbqí >w/XKë<Ò ¡tMI;ÿóyßqýtQÿ{toâ&OYŠwV$Ñ:’Ÿø;â °—_P`V¡nã"L}f6ö½ð RG=ˆ¥ 0ò·±Ñíªu ä蔉õYçcç ÅÁºCÜ}kìתBmØÖÀ þí†pŸ½ÅݱÍ>qÄÀ3Q†ùbGA®¾ËÅó´|•˜'…9Í÷5†ù^]]ý[ІC‡!;;; Þƒàr¢¹µQ±ô^ÝRèf¬Ì"K[Ò„G3€ÆV‡ŸõÞ\Îf´¶;è]ºLÙ›åN'9ᑈ´fèMÄoÊE îÈÒ9ès8ƒXÏdõ%'³v6Óë}FçkæûÃuDÑ{Z{ |Zoa¬5Ò!ŽÍ¶Ñ$Ïþ 1ÃäÌ6wª}i‹í³¾´]û¥iŸ}““ƒÑ£G{Ô××#<<ýû÷Gtt4€×O<ñFŒÔÔT >¼[mOKKû!¢‹ßvª¿áäiO¾x:’ãóÊÅþÊÅN‚á(h·WÊ6ƒO/BܱêThE_±$gÝhwÑMÝŸn¡~ §OÏ”wý]ð´Œpú\Mó ŒÈHo'A«D’ꑱó =Õ—œL7’èw•Ö‚o¸¾isIè‚¿¶…ŽK÷)Yë³ûõmL[¶¾X ðl_ò!DÒxŒ;Ñë‘}öåø"¦: ¾àµíËF&?im‚+\3¾½²™W’¬½R¶P¶l Øè¢qÄ!`†/2¨¶˜‰ù"¨âùdéË)ðUAe&03ØW=Ë|žò³ƒ­[¶B¡û~ -Ú4.¥T@]l¨æ÷€¿?û«:þð_¨éëòJëòèø¡–OçjúºüÒº<:~¨åÓù…š¾*?Óæ‹Cö)û«Úi•š/¸j¹Ü]§@­Ä tÂ*S7 Ì áÎà w‚(Í©'që™Óh¿@ß’GF#ÒÑ× +4­hH™/>Lן|aíG°þ…Wq~Ü}¸oB×MˆºC_p¬Úo%sãÁPy¸þÖ¯#!"€|ÚL‰NOx÷¸ý! /2t·ýjöOäóÛÿ! o·¿óèXÑ…¯ñ¨ö=ÃvÿÛ¿ÿKýû }±Q2†9Â} Tû«Ûfa)±Š+y^qOœ& „Y€@Bx1ÔªÒ¹L½!TTTààÁƒž¦Ï¯#7*Ö¡UÐå±¢§ê_/×ivi¿Û¡þ:?®¨=ÂSxƒ/² ¡!±.ðz{ôr¡#±Ž¯ó×ùq=á%°àpZ`Ž%ƒ¯óëôõöq¹Ðà:z¹Ð‘XÇ—ºsÐùq^0í _çÏõՠˣ·Oo^®ÒbXÇ×ùëü¸ŽÝþNó ë÷bõ¥ëŸõ­¾¡Áõôr•ÃÓÿ\W Ì‹gÉ9_/Sñz«Œ:•¡`œ+,ÀE ÁÊáŽáÀÊ‘Žá4oãzäȸܛåKǼé/TdÅÖXf8É7OÃ_‚£ŸîEKÿÎiÆç Öç´ÎOp8¶ *£Ü­Gx_¢}ÿøG¢%cPt×"/„™y©7݆ú7ÐÉz¡zçF|–Š CÌnè"ÍD¬)Z“ÑY(üá$„“žÂÝ;.ö¥=(::¼oê†LçÏâØ±FÚÁ"1qqˆ‰4ÚÍe!o¿›¦Á—þÉLúSò%æö ç ,ø]ÚO8¢s_øBƒËõ uÕXx0®ÀK\I«±”IÌe*,²H{Ôº 3Áá´À‚H+|ÉczzÙÔXx0®ÀK\I«±”IÌe*,²H{Ôº 3Áá´À‚H+|ÉczzÙÔXx0®ÀK\I«±”IÌe*,²H{Ôº 3Áá´À‚H+|ÉczzÙÔXx0®ÀK\I«±”IÌe*,²H{Ôº 3Áá´À‚H+|ÉczzÙÔXx0®ÀK\I«±”IÌe*,²H{Ôº¼1‘˜¯È —õ0ÍIµÓ óÎ÷K>§ÀDÅñËX UêJåé•믿Üù„-‘‘áY¤x¡Ý­ðó4%…a_¿…ön:‡s®ó8w|/6¾ù6êxkZmW{÷wqCRNþí/øÃÛÝbDcäÄïà¶Ì!sÕb}qpmžü{›Æà‡“pvÿøŸ­ Á=ñõ»ˆ I¦3ÓR³/ïR&yœ–ºsÚ*ÿ`ðÉ'´ÔXxúâoæþˆ¾ŠË°ÊGÊ$Óvû½g¾¤/ìþïüý3^O¡¥Æ¢s«úç| è žÄ*=Ó_öñÏm°NE¯sùE(ƒÅÛð•ß…e0NZYôØbb$-Jã4Ïð–û÷ïÇ™3'ÇEEEáºë®3ã ͺ 1•¡n×øÍžA¸é›·á¦´‰½ó0Ö­{MoÄ÷¿=v–¬¦× o#yθ‘Œï>ôA­xëÿ­Æßßû+n}Éе´·ãÔÞq|èu¸iì5pVoÃþgmäü5Ü‘? 1MõpÅô1:˜÷yn;q×Þñ†7¼ƒ×?¬Ã±ã-ây·×tò0þÑü96“CÄ`XR4.´é²|`È’”q"*·£ùÞ=Iáp¢ƒ9ÇŽwaÜ„QUñ1ö¾û7Œ»nœ‡>5‚„›@AÎ×ÐJ:k#+$º•Ø#œ¨eK¬ y@µL`‰=HAj]%¶"£– ,1ã[ÁjžNS-Xb·'ô­h¨y*/%VñVË–˜q¬`5OèH¬– ,±à¨±Z&°Ä*^waµ®À[ÑPË–˜ñ­`5O§©– ,±ŽÛúV4Ô<•—À«x«eKÌ8V°š't$VË–XpÔX-Xb¯»°ZW`‰­h¨eKÌøV°š§ÓTË–XÇí }Õ`ºB[Í·âÓÃ<±Ózu_ùž?§@l‰ÔӜTôëNnVVÞ{ï=OÑ7Þh8 ’Ñ5?þé÷ðNYþz¨nZ‹Cõ·ãδcæÓû©Ã¨ØÞæ~’ÿ 'Z.`dz:švïÀÛÐÀ»Eã ZÚ.à‚ûQÜ1üvü,ïtœoÇÁò¿¬²îº×%Ñ@JÍD´ë06”޹þNÜ~Ý`:éj€œ‚0:¬F:œ;›a÷Ã/ö—¿ŽýL-f(r¦Ý‰a.\ð!KBÜ ÔãÑIž‡ŽvÂ58:óƒ!s`úV}Œ¿¶G /1põ0Â>‚ãÒÑÃKÄ?ÑÙ_¿z€±¹5³¼ÔAÚ*œÛ-y—šwo /mµÛoÞìþ·Ç¿ü&zÃïóRË mõ÷ûçßùmè¸)£j£UØ`Ù]ÚþœÝàëi•© w—·§:¾”:dÈ\uÕU8~ü8Œ¡C‡zf L"­8Õg &ДþMõxá÷ÛÑp¨ÎT>£‰BÌ %Ƀ“1ƃ!}âµçKñ9™Ü›î¸CÂOáýC|Òoò޸ʀHœijæ94:Ê|gpÞy­ç˜¦áEÐ|—‰NïgZéuE«™ßAZ‘È”–Y¹àÛ#è`¤Ž „ß§³o¾ä–å;½d9O;Úqö\›qòÔƒN bÂNãÌÙs8Ïd)Ïà#þmN Þç=|°÷3üõÏ@{îpS¢©ˆ20 ”¾ôï _©j 2=Oû ã‹à/Šƒ‘ƒ’MPK-(ˆ‚´ ¡þ$œ­pš1†¡'ÿpT¼ËSùÑ8ÛÒŽŽh³ymmôE[¶Ø¤d*?O¶lCâwn  gàŒL@b¤‰ÛÞN3 „+ÜA_~ rc59½i?‡ÆÆF¢çí-¦,ÃH–ľ¨ØÖ)Ë…þ´BQ:ÏOœÆ5ƒi¶À`É+WÉ!ñ,[0§¡ŽïێʈTÜøíï"¢ùElý¬aô…„®/a­A‘ÙWŸèøÒ6i·Ð•8X|©ç+ÖééxäÑñuzvû½ßéÒW }ëú „¯óÓÓ:=½w?úÒnég}Lïï¥ã¢‡e#ïÖ¿¿[Ö6¨Œúθ*â‚qv4}àÕ±áî—¶qÌ3ú^h#Ø\iÈ1Ä”å0ÉrX“eò0Œ3oî9‚Më_CÎ÷f’ëÂk Ú‰Æyƒ¦A•²xvg`ÇÛ;±ã V0ìÈÒÖ,tî¦%:f ”j,:år9æ âIZp8-°à«íçr=èø"›ðÑËuzz9Ó—º §æXÊõXp8_àžâëò2M5XÑ—<ÆXøëôôr®c·¿ó¶h<‰®ÔXtj¥Otí_ï/®£©Ë1‡@òêôôúBÃ Ö zÁ¶'X|]^‘Kb]þ¯Rû¹í!ܧ@T*qç@rºÆ>qÌÑhV`˜/¶Xrñ³¨\<«ÀIbž“æt?ºækxuuõo):d,ä§fl †ÈŸ'2DŽ˜ˆ cël£Éö¾ô)^´mgšátÑ;=:Ò8.6mN~Б‘œ=Ý„ðþÖî¤3}û¡ë-hG2îgZ:00>amgqê¬ù:€ÕÝ1Tî¤Y>üY ³gÛˆƒ>nÜ>1C¼ÎžÆYZŸ «2Sþ¾ˆŽ£¯èèk]z=;ý:ÚÈ èƒ ­gq!*ý#úPNá}mÑ?~ "¨üÔ©3èKzˆ ?oÈHB¢__NŸ>‹·¾TyýùÒÿÅâëõõt þÁ–ëôõñ¤—¢±øz}=ˆ°å:}»ýÞ¯CtýÒïÅâëõõt þÁ–ëôíþï=ýW_}999=z´1{[__o|A׿DGGƒ?[|â‰'ŒÅõ©©©>|¸Þ¥–é´´´Q½7Þ6³Ñ’‹Œ xêœ/6€ó¢\l¤äb'Áp|½>ðéEPE5¨N…šßm˜½I ü#à ±·ÓWzãžk¦ïòI¡}Øø]hÅé2„&ýkkAãÉVR8 8K³óýÆèCŸZ4rΟ9…“nIHœuëÓhap»E&®À°xóœ½KÌyzPËVc>—qž¯ u¹\`‰Õ<öUÎ8j<5Öå³ÛßùÎSÕ“ªGÎXuýr™ÝÿöøWÇ ËØ±Ojž [ÕQi ,xj¬Ï/ò÷ϲ¨òˆÜ³ ዃïg–[þ÷åø"&̘˜/Ø’‘¯L~àï¦á«çsg{”ê¦#yz=Å÷ðwoŠD„ ãè)ðtº0ÖH2¹T`5öÈKåíWT%“‹5Wi«Ðz.›üzþ_da «±ÈÈåíçŒ Ó\U`ôDÆXbλؠÒXEFæ#°?yýÉÃt…Fwé‰,Œ/°Äþxu·L¥%°+¯?¾L7Xz" ÓXb¼º[¦ÒXƒ•×_¦,=‘…é ,±?^Ý-Si ¬ÆÁÊë/Ó –žÈÂt–د´–XåÉróÅAb#ѳª-f¢Ý±ß>9ùr |UP™ Ì 쫞e>%i[¶l ذ5ðeÖïµÃAuØY‡AÍïüÙ_ÝaH>X§@'Øc‡€ åççëôì´­[¶‚ÖÀÎ;mσ®hW°5p™4ðë_ÿÚã°3ÀŽ€8’(âHÜ]‡ÁÚv'×C×NÛ°5`k Wi`×®]Æ*ðÈÈHTUUõ*Ùla¾|'€c™%a+Õ‡tÕ6e¿»;Sˆ/¦!l¯MÊÖ€­[Ý×Àßö~ŽgŸ+ÇáC‹q½kw`ÇûOë‰yä_0jÔ(ïb;ekài€q º®! š©Ø_ÕN«DÔ|ÁU˽àî:j%f V™ª¸_øØ® xçìÈŸôµ/´MÍ´«£“¾ ¥O\"{Ò{Ý–Þ…]ëþˆ³7ß‹I©‘Ý®Õû¿¬íêýš¿œò ÷§‹Þ@nîMxèßFZ²~}íËøKY5’’‡cOípã&-Or–ìL[!Ò³îS Ú_Ý6뫸z™‘îîë½²f ¡×íÝig ©Ã²–ló’óȦ\L/¯óÊ»¬ çA,Ï C\b"!Ê‘ƒ]´ ó¥ ­Ø4}¶Öóñ’þÞ•9ÈZ¾KAjFQVV^ »0Ëý.ŽXaY³°n×q…w °ûí DÉ.ï½௚ö×·c—k0Ž6ŸïrªkÀ³¿Xd¼Ó½aÖr8fžoß{[dKöeÒ;­&”VÓM·/Ü{­Ë<'ÏŒíhªœ‡‚ ÿŠ*nu¸|¦/©ÇÎêZüxt|ÚtÆ$NŸj@sÍ6<5õ`ö4Œ í«»ê<w.,Mx`AÙ>lý彈%Øg»ºÑ]„±3z­øé?œv-ušŽä1ßDÍ ,ÿùÿÂ3ÿç_iq!²öààÝô1œžU°ƒ­K­Õ`Au.o_vÙW¾!‚?§@ ¾Èª§9ß/q©x¥ÄÛ_.rïÇ`—ÉÉ`WÎEYUç´³ÙŽTÜ»˜ÿÖ^4WmªÌÙ˜I³ Û4¢rýsÈ~> áɸå†h”á•·Õx‡æØ±wa1*±ª¬†ØßGn °¬`<0h$fÖÔ©(Þz„}²XA™Ž'·4açÚeX57)ŽBðCôÁíåý7‹cáÒ"’øì­ð!ƒL"-ؼ ŽMGà I˜H[•{7–o‡ÁæU ž¨Àï-ÄÒgŸ&Ôœæå t¬ÏlÞôƦ&#Öâ^͆}Ñä4Ä¥MF˲µ¨ý¿wÓâÖ:LJÄ0Â’˜B¬Mb>ÛÕ~ Zv¸24àˆŽ$§èŽ;~ºýèlCÛ_ñýbø?}£'Þi”ERxt爽2ZgKy%j@œŽÕÙÉ¿È6u(õU˜³õ´‚ê ús tƒ¯§U&*ìÍáJI5ïÀÊ¥$lésH‰ŠÂ½óVO˜Ë^&C¦…ò—‘Uz¿yú9,xz!_‘‹çŠ^ÀӋȈޕæ=Ep ÝýGãŽoO$:læ8$ãÁÕäB,+šßüŠÕøVeGŽBQk-ÊæÄÓS3µp£çƒQÍó/cóGGC9"«ðÊr.ÐB×LÜó½ïÑfP…ع³Žõ#Œ³ì´¶æ±Oæé^&ÞÐD6ÁCåÆJ÷+ÂuîJj–A1ùE­¨,›‡OŸ¾ ‰Ž…¨¡ƒ'9`ùß'¹ _Beå>ŒöLd#¦S¼.Ìy²bYEƒáe=ždò¡|ꜜ1Ѿâõ–íêv?%;îÍàW:Ó¤?­JJþ¾=û†¸ý¢ã0õ'ÿeäs™£o˜±þ 7·Å–íË¡™)à8DŽ+Fì/ÛhÖË80øs |UÖ™2žî0øªÛkó¾þ,½{^†ŽÝFgíÞ½ee P¹te—Uþñ£§FyþªÁ˜zs*2²§¢ò™ù(É~“ÈBUï,£v.ÀÃù“0¸ý$Í t†ô»~†ÜÊ¥˜1Ÿ¸-¢©y*r5Ö êh,¦<ô$JžÏ–~ÚåÝýñª]¨ªëœ»ghP|4ÒoFP >=5cÇŽÅØÌ4ÄÒÓ¶?LiäýC$nå÷ò«žÄº=ü^ß…ãuǧDðÌZVÿ§eå›ñA9«Òx`¹,Ùø9'Ô8Ú¦c¦<„Jž§êo¢¾Õͳ´ gã®5äÎHK2ŽÜ´¢¯ç±‘§·^Ág{£€_Xœ>Û©;³b×vu§¼˜Ú‰^­~}Þ1QãÿݙȠÙ;~´I)_óä÷%Çgì`kàri€q B°OjU˜›£§6±'N0ç “Þp¯Î(¡©ò|¨o°“¿õ}šÖ/EÑ_¡Î.F^‹é¼¾-÷û¸‘ì^øµ·Óÿ³2ͨŸ‘=‡LâR¤7øíg«03³rÍÅ{ˆGi½­ŸGþX“›ëh92ÒèødÂÏœCÎÂfo9Xõo/FFЉ6hš¬ÅÏÆÓ4Còݨ޼s'§˜ÓQŽ8¼´·•ß2ôÌ;Cò”¥Ø¼,Ó3‰†‰3ÿžÉ×ñ:kxC©w/ÂêÇj19%ÊaPÆ ,XûÆÏüg†)[TæÌ\ñ,ƑΘç;+’_øz~d|’Õ©!’Ú¦Ig”^,O……aô=*TtÎ8¼·}÷Bà~èë‹Ôß`ïÌÒÒÕ8ôgsÕŒ/y"""hçÃ\ã¦ì Çη5j ðlAˆ×°ˆãNpì³/§À1ÕYð‡Zw_*z‘#~€¦¦‡;†/UëìÆØè`§`ܸqÆyÇikpy«KÇ7å„„ÄÄÄØN®;r È8‡€0|‘AµÅLÌAÏ'K_N¯ *3™‘À¾êYæó”Ÿl ذ5 ôô~ÒØØ ö6 [5 :êbC5? ‘®þì¯êøÃóP Ö)ðTt=v¸>{òv°5`kÀÖÀÅj@_Sp±ôìú¶B­íÛ·{f¬Ø!Pg $žâHìÏ/¶ÝýúÀ²2QòÇЋ‘°5`kÀÖ€­[_e ÈŒÇò*!„ú`;-6Yb&”ýî®Sˆ/¦!l¯MÊÖ€­[¶l \ùP_„`Ÿ±¿ªV•¤æ ®Zîw×)P+1°ÊTŵá/PÇwmÀºm5Ý“€>GäYüÉã%®ã»P¼fG爗ŒŸ »Ö­Á¶šKߦKÖ›°­[_: ðLA÷)Pí¯n›uÝ©¸z™‘î‰SÀ…0 HƒQ¯ÿçÜ…YÔQòž‡ãœ•»z½ØþülS.¦o­÷‡b”ܸaQqHLLÄ ¸¨KÞîÖÏ6¡`ÆÛÆI~…Óû$kÖírŸ¦è·¢¶bÓôØZïÞI²íØÖ€­[_ x¦àüùóÆ+¶5! *±Ùæ`œ+,ÀE B…\)ÞwqÙ´65Ы (Í;^Á!2™ý´ý€»4§¿›:•0hSí>¬˜6¬ VH3¼g@¤qc ºFŸl>€¦cûðÒ„L÷|º®*äѬHεf.Ô…ýhÓ$;ذ5`k 7i@@C¸¶@Hï‘mÆ)ðÇ@§7é¿[²ðžú‰i)´a`<âããÝ÷œUk7k%ÖÒ,BvÐôú–å³<3 9…EîcŒ›±¦0+7lÀÂsÆaM‘ïÙ°Ä›‡ÙÄQpÑqÂ…Yf~Ö<ì8î‚«n#r !ölñÈ™·Á=Å^ƒ%9³°…¬¡«n‡‡>ËS,¯œU˜—SˆuëVt—óŠJhÜUŒ¬°<¢Á›Z)ÁÕŠ“”<ñù c»«ØäQ“nî@ä¬Û†Â,³-Y…Åc\C3 Y2«’Uˆmîsœ«ÖÌ£c×QÛ¨NÖJãØéº¤?Á ›ÕyŽD¦[×uêfƒèFAî“ ‰ˆM…i|FW}òL –Ïrëhm#ÙX÷Ó Ú”˜“…¬Â5Æù¼Ýæ¹#[±<ÏlGÞ’îs%š±QéÇ¢=î¾!|;ذ5`kàRh@q˜Gg Øþª6Xì²Á†ÿ¹ƒš/yž8§ÀS‰a,Ä%­â\q0ï©ÿ‡—WaÍšbo0Œ}{{3JKæbIÍí¨>ö*²hCÁ„[~†ÚV:ЂN+Ī9X·Ï4(ÍGK17÷IŒüe-”-Æ33& óÅ8p¬/Í,ÅüW÷6þ{æD/A;M!UÎ;Œ ü®ä dÑ1Be»™ÖA”Ì/Aù3k±Ÿl¸kÏF,*‰1 5X”2S6£©£Õïä¡`r6ð±ƒí-8\¾ Ó—Ôcgu-~<Ú4ìƒD“#±ƒÆ`Æ;/ 'Aû 5<“¬%s&ÀA~î:w¿Õ`AÊdD/á„Ì;Z€GÖTeŽ”[PRÛDùǰbð*üüõ}F~{óa:Öy:jn¯À±­ˆ'¾)f é¥ Úþ¸Çj—áZã¡Luå|L-aÝÔbíìRä®aÝt Ü'§O5 ¹fžšÊGÍü…lv¿‰E âÅõôl[z„Þ¯§âÞÀü·ö¢¹jVeΦ“K°ý@#*×?‡ìçó_󳔉¥?Î!ƒŽÔIxž¦Ç×¾wÀ ÍOÕ›7=…±©ÉÆvÅŽ~q(/{w¤äbAY-ŸÄç4w éSžDkíN,ˬ@î¸ï"1?€)æ³X¸ð¿`ˆyð´Q9yÌ-ˆþ¬E+ÿÔdR–û0™s$Á‚Íx*<âcqpû›T8?4ž¶gŽDB2Éeø$¬Ó¨]ϺIÆu×û~ÍÁ†}Ñä4Ä¥MF˲µ¨ý¿wÓ~áɸå†h”á•· ÐN"D&%báILñœ qŽŠ£¶?š“ŽäkGQ & ƒF‡XMZ€â­Gh‡IÍY2±ìÿ¶l Ø™d¦€cu¶@ò/’Q‡R_…9[O+¨Þ ¿;¡nðõ´ÊD…½9\A)6ª÷ÿp6Ó¹O¾19 sßþfZ7Í‹WcɃßFý\xVѳ©ãV©Ãaš¶—DÎm6)ÑŽúŸ›w¾Ÿˆ–ö|üðCŒ§Úò—ÑŽN/â7G*°àé øÞ'G1³èd’u~¬6®Ö=Ts0ˆtg ×Ü&Ô³Ó)º')U|P ç”äÎvtR0 Èä±xü•Ýøö7ò0®`þíÀX#?ïþYÈHRççãC®¥¼Fç B9Jïüb:†Ögb·{q?K‘9½B´õAG™f›U¤÷ªæN°þ—U4àññæÌg7ï)B¸¸xí;t²ã`r“v›ØDˆûP Ü'CÙµÐBä(µÖâžßÿó§f¢`AÚŸšb-«VÕNÚ°5`k 'ŽCä°bÙF«°^Æé€ÁßL¯Ê:SÆÓ_u{}þ¹vm¥:[¬ÊN±›÷¿KÏïôÞz΃wƤ·?«ÖYÕ„ÂG€_—n©A\ÆXŒ;iI¦ÑŠ=•fVaþªÁ˜zs*<•ÏÌGIöØ”ŽÈôñôt[ާÿÄÎǪ×ép%àŸ'±±îÚéÉ=“Ö¼Òð=nOÅxzŸîžÓèDvÇŽUtŠ#gIé@$¤ßLÏòÀ–OÎ"ƒd;6I±ä8³Í!™FÅá󽕴&ÁZé·N# Ï h݃róñ:“¦Sæüÿ³÷>ðQWßøH  ”¨D›ðW‚°±DQh³V)j"­øZ õGl+b‘çgðÃÓG ø± Vá•H- 5(O¨-AA1Q“– ò7D @HB6ì{ÎÜÝÙ›½»›Í‚ wò¹™gÎ9sîÜ9çÎÜcXÉÓnG¨./¦ü<übò8ôm9á¾=‘½À’8u†M 5È~¹ËìõQõMî|øiæ§‹v;¿5pØ)S¦L \ °A ‚œS ê_5ͬëó~»ŒQ ‰HãÀ/‘Ë€·º…ëOX!ѽ Q–Tä¦béõŸ.Ç€ æŽÉB½-w£·v}úLÆì ñÎEÕÈš¸píã·èûVk?Ï‹‚t2ú®';!lÈX±Ä=ýщÐÞ“á»h }ªE,=E'Nżµ•˜2H[[ áü•]­Kô‡ÿ­.F_2 &”)”´¢1‰ˆ¼„#yFÖV>Bôâ± z®˜5áâCÁpÜ·‚L âqFN*–Lˆ#& j@}0†¾ø·AÐS±÷¿Õ›ò°(Ý"pDÇ>Šlsédê–ÚXK{»'‰)3h`∯Ÿ¾T… ËfŒI] [X<2rSi»xK£<¡ðvO³ý›ÍHLˆr´Ì(BÞ¦ÉNktÍÿ¦L ˜¸Pà•‚žS g3Ýl#<#å4_l(È« ¥åÅÚ’çowuæYõpš¯ÕÕÕ¢ØoØ¿?RRH»^–Á›­Ñéê˜ÓvJ·Y·÷Û³&›Þ±Ãƒh«Ñ$wÄ:Æ/Q¯„¯Þ†&z¡ŽßM¨@-ÐÏú¢bÌ;1.¶#l”ޤ´!+ö&Ø[|è$I œÌÉÝn£7MMd¡‘Ûh…]Œ¡–£³ø‚KÀô}pÁElè –-[«ÕŠáÇ‹3 Ž=JßG…¡gÏžèÞ½»ðÒ9þ| <ñññ8p`@~I€ûébáêÅ»§¼LʯÏrܪ\ç)-/6„¡`4ZÔP ªQ¡–ÇÓa¤Œä>5§Äè[ N¥êÊ[­Jß[}{ËÿÓk3ï´˜wܲ%º˜t0F“‹gVàt…E9?`ÔòôQc`Á{ßkkB™0%`J x È å6Bð˜æç›FáM1+:,²¼˜¶fw‡ñxEP÷ýǰÓR?w¼óŸŸÏkç†ïÞø^xïSÌ|áu¬~õNƒŸ {¥h^âàU‚Vz‘ãXn)„ˆe©›]Pº¹=F7Ì@‡™‘0Bƒ¦öœ8ÝA"£óqšƒ¡¹vïÆîµp­gêpèÀìÞ}ug fD$b Oï®ý¾³_xki[ðê»(ùûÛXöì}ˆì(ZÙÇ⮑t¦UÃ×¢¿ Ý•h2,ë/<‰›È˜xeþC(>`<;6xGÓ Ýt׫…ÐÀ§dy ­ µâž8ô5Œdï­¡YfJ€%Ðz_î¹9Þ-Özžù9?„Ú†ŽYÛ‡>°þÑn>Ó@+{u´²ç&ÕÜ@«}gè™çóß´Sàx…L›w¬øÑõ×âºFã*£ÀªMÊÛóÔÈ,øV$ÀÆ@ˆ¿-`­êé ts{Œ_$#*Ì·"èíÙÕ­|è´)54ìÞ€IÉãq÷¤I˜t·é¹ïk« Í•H=&Ýñ£Óñþךâk8°ONÒÞ”{¶4= § 锿:ߢGà™×>râÛ\¢‘[¸…ÏPÛikÜ«¢­=%S Dö@ìUC‘’6œ“Æ¡ i‰_£9éÉBrÎi_”ï¢Åoí¯m> qÒìÞ×\¼ó›þ;Ê–AÅš?`ÄØÛEǦ¿_"®Ñwdà·ß$èÕÙšá—3(~q¾€ùôùIñÌw¿{žÆ¶ yÿ“žA™S¾µe¯!i¬UÜ“»'ÜŽ±«¾Ôúdþ7% š¿úk‘‰Ñ×8 º2LKKÏ3?ç`ûÍÑVÏ h—¿ùÒï%æ•Úž£•½ñx~Ó!'wµÈ;¿ýûAnwþ =_Be%ø…u4’^a,óå?æ~¶§=ƒÍØkˆçɃš™¹XßHƒ€é†p¥€õ¯ªƒ¥^døŸ3¨å²Ì·Ç(p5¢„$,‘˼ sy¦KæãwÏ<ƒgøúýKôHJ%þ5VLš‹ÝxÅ_|âÜtì^õ8>8DÊ?,y߆/¨¼lÍj±%e5dìïÆswÿïí¶â…5ïbê H™ì\CN}ž_…'_/Fñ«cí 3ð§2V¯v¡ÕˆUÏÏÅÛ˜‰÷ Ö!Üc§>.èäL±bÒ“ù¨øZÓü ;×`ÂŒçûäë()ÎGï÷žÇ„?iþìáñêÛ%(Ûö.fÞô)^øõo,mé%<·?4—Œ˜Läï«ó—a rrã{«N ÿÝ·ñl:³ñ/utfêj÷áPåä¿ð)•Ü„ëÉç€w^z é®LÑjhú¬™v³Û«cÉ øõ[À³ORýîµ((ÞGp­øòƒ|îÛe$ÿíØ–y­È›ÿL °RüšVï¾®e©1æÝùo~xäv\å,úzû´¦ܵàmí™Þözˆºö?'8³¯:w&kدùÉX ×Ú7?†Fóîð ÷3­dà+axÆ+Xý$CZñjI¶?r|Íݯ¹ o—lÖw—á¦O×â×kÊééðñ<)´ÌäÅ“€j°  € #½lT.XðeH…/yÕç¹Ü'rÙðòŠ­¸)é$ñ5j8¿‹káL=X á ÓýºV侩'£ KÔïXÇhE`ôý9¢üìéFš>+Ö'gàŽá0úÁqÕžgðÅGlrŸnýþS[.ÿðK÷÷CÉÇÚÿšû'joØù/vô4”¿ŠGhÞØýÞKxèöÑXSY‡£_Tˆ÷>ÝŠ>üBƒ~åK1]sý ¯þ«V¬ÁΓ\uõN·ÇœSéÕ;ñ<ùìLÜJ¼[nMEY¿|üõgq뀡$'î‘æC$¼ü{iÆ$L˜2%7¥cÙÛÀ(òrdÄKÿ!šR¿:ñz ¿&F8ÞÐP>‚¿¿6 iÞ+&UZСЃDF…¹“FcÚ3ÿ‡}'Ðü÷=‘@3Þf4n§Õ»Û­c1‚V—Þ)ÛI­æcÚ+Ú3¢ ‚>þ}a7ž¼ÝmLÆ þ‘¨z/‡V«è­ûcTìF†ö<'u_lÆî¡„‡Æ¼=®Ã½™4«|úÐÅÇ!¡WòóïB÷8Þ@× ƒ«¯R•¢«þïqÍhÌZúîy?w?¾ ??Œë{Š}Ü4(ýz!3Ÿ&ÁîqèAû¦¹É°ŠT곯>Œkðo”¢Oz•žšî¡M“-ç|Ãq›'Wo!O†1îæ>x±7žsé©›®‚˜7ÙkͰ"ã⎹ØöîO°nÍxaÕ ¸í!oÿ/\£Îâ*3ý=‘€áƒrQ²}"zœØÞû+^ýÅý´†7¹oOqÉ õë‘™Þ½V[ àŠn×Ü/h5mú5ô-Ì*<~ÿZä—cb¬Ö,ðç¤Ûÿú ¬½ë\iàö]pmKÐ2 ò-äÝ<¾zŒ‡Ñ¡Q1þ¯Ÿ/Z¿~É·ÓÊ¡u&ò¾ ø÷ZêgWÓðy2FoÖ\@ È•ŽCd0·Rÿ²ŽVÓú:Îû ¾V Œë‰2œÞ`0j{é—Ó×=ôî¯Râ®Ð#·Ò[9èÝÿŸÕ6ôþAoÒLµ8~ÆŽÆz^òŠÃû¡~;›OUu6D\9D¬4”¼ùgl®¬Àk¿»_lG0Ð41ì&'O‡chr2†ÆÇ"Œ}Y9ƒÇ޲PÄͨذ»¿F}¤d“mÈø¸rØMâäÉÓˆšŒäáñˆ&Íooª'3€WîÂØ!=qˆødÕjS>ÌSéý`ðõÏóX…ʯëP{h7Ô¹$Cuº5Xmð/L˜XîJ¼„Ei“óá{ðµ·¼T+†îTåûï£:,ÿ9smtphD£rÛÜDÍÔ÷K=’1±döˆЉÓh+޶÷¾øâmLê~-ÿªŒ¾òIÿüP1"¿®x›«ÃðÓi3ñk~«§Ð¢Ì?'ÍûðWB×èzˆ¾ÇðÛh’VøJÞÛ‘,n~<=2ÆóE“˜hä.+†ÒKx´éÙæ•¿Ï“ 3s±$À4 BpNªÕ4wGŸ÷ÛÅ`ŒID~‰\V´.­ÌèNÌkKÕѸÑ»xü®¡xéqÚá$ IDATO{ùý_œ´#þ¦ûHùï¦%ì øÿ·G€@ðéKø²Ûh<ŸKªŠöÀ=å!ì>“vÔ)8—-ÏbÙãwaíó3èc¦±°N˜„?ý븗›®ÈêþÙñÕßæâ¡I·c<}¤4eî* ½ëI} Sn/xûø¨Û(pvÚ2§¾CW½თn×܈$ÀÝ«æâvù£W–WTÙýäqL™0I£ï¦Uš_˜†¡:Ä7wfí÷W øøõ Ö'?¡ïr(óé x¯²V= ž'IÌŒ¿ ðJAÏ)Ð÷!Ýl#<#å4_l(È‹G³¼ø-œ.óØåÏ]­{¶Ûó<…ˆM È å6‚ð@«]Ê¥ŸŒ#dª±`””yΔ€)Sßšº]5iŠ|7ŒJ»ÿB!7ñ^¦€4¸œî`Pu1#3B¨Â’42 Œ¨Ädš É´Q;¯å¼ägS¦L „Bæ| )š8.¤T@ýØP-‚¾/ý«¾à\dÛk¸:AÜ>™¾¸7ƒ)S¦:*òòrs>é¨ÍöTÛ¶msý†uµ@æCÀ€4dìË0dýõׯ„ÉABfÆ”€)S¦L |Ÿ% W8–[ !”ëi©“eÌèÛ¥¿5 ü0"Âþš¨L ˜0%`JÀ”Àå/uë çHý«êiUHj¹„Uë=Òj#& G¬Ua/»´íØ1;V/~"èyû± ¬\]óË’ºêí5X¿r¾jçÍ2ïqhî]S½ö\Ùœ'R†ëÅÁÊ1`'—ç+W—^rsFý¾­XüT6²Ÿ*ÀAþáÚeŽU¬Çº­/yîy¥ „ç¨úW¯›õ²Paõu"ŒQÀ %bfÀ‚Ð%ÿ¯i§uB4ƒÈp+*l¾¹n<ôdMýÎÐkGhª@& ¹ŸÄ±5s!JöIb§‘Ge9¥õí@z@›Ja!^¶Ê3…/_hm;VzÈŠåµ´"Ù4}…Ô¬tÔ´s æW,¦û›Sê«[mëôã")ëvÑ϶˜ƒ*9]±˜ä¾ç  §!2F{®¢#ÃéþɱkíhÔ„k&*ÚyÏ™€zÛ7|Ól:ÌsÆ–öÍôXð»Ps|ÖÜ7O@ þ{ðx¼QøñШËúDÐCÿHEúnÿ1meá.±ïXŠ´Å;Ü1Å+­­­b ç´YPº¹=z#À t˜‰ $hT5Û^ÅÜ¢ÙØÛø"…ÙPUY+<¶Å!Êüéò”˜S¼¿»%ßÔîÆ_~3· ^‡MGÊaíßé»*a¿"Jß,¨|ÕÊ4$¾ž†Æ’‡ÝÅ1kÊwá ­›¶òׄ•i‘x}B%J²Gz©÷UÄçoXP\ýn¡Ó`y~Œêã«÷º°®ø ýµ7DvïEMš=|DøÃ14c*íWøkS/ÆÅ¦½˜=ò,þøˆé³F¡¡$¡ mÈù,è94••öŽÓ>ö&Ì-ÂÚ½ ˜L^Bkªv¡Ñïƒå“µ€*kJ"ã/r¢ ²±§q"J^¼' ¶ äq|΢®§Á§¾…2 y •¸º Ê€x²7`'=cËIN£;ü¬·aáâDã6q¦ž/²5Xh})Q8@îãçl;€[þçMŸ·óòÅ0„ßè_ÒƒÒÍíY)ðE@ *Œ¯»rÉÕ5Ö žŽãx©°( 5}ÈdjªZIoò+!ßmªVf#³@±.-§ðÞÊ9ηÙ4¬®8æ·o Ñ‹V$"H¹Å'Þ!E@ô³ë*©¦ Û £ä0¯sÛ°.; ‹×­C6Y“I‹+DýÖ‚l'½$¬,sÓ«)[4‚Ó[&>Ù¾‰YEÀæ,Dv"ØÜ‹&”­|Ê C«sVâ sI½jõd/]‡‚l‘´”<(Æë¿)Àaç›VSÍVd'iø“²WBR®Z¿INºiÌ£gØ·n3,D7;˜-ç¯~*ÍÅÇœ•[},©@\\Dõéƒ>tEÐ})[š‰NiK]K;Vg#){†C‡»-O6¬Î´¢@ȃxiÚAýÊv­ ÜZàìO&?:HqŒTãªë„ì•ÞßÌŽn+ÀK%‡…šªèžd dÝBg_Ó°Þµ*ä)'±ýâÕo$&ŒµÐ}kFCѵהaaZ’KŽÜ'_cVãg)Ö‰1dE o÷¯éè˜ÿÒG$ÏcXJø—*㬢 “žºÏöƒ4Vœ´“æ ì˜s (ݲ7hËL'ŽóØ Cÿa#1ˆ¬ bÇÎÄn–WVbù¡›±"çŽ6}ÝõІ<çÐô`¢© s¬´"´^Ž·Nxju…vÏeݺ¥âÞ.æÕ1ݸVŸ™#¿†—6kcN¥áŸ'Vf%¢ˆæŸ1‘ÄÜÖvŒ4¡d1=oÎgÜš]àZqÓæŒõô,[E}Ҝը"±V'ìâûœì4A?oÙk6œs> ¨­DÃ:g½s8HŠ;%4ÉðÊ*ç5+VÊío2R:__±’žã4¡—±˜Y¸€ž/šo7—`ؼ<Üq iHY2»œQ`D*2©—½Q¹OÒ܈~bùÈb–Rº¢éâW³~tõ§ë‡t ¢+‘.š¹p#]·Ð•B×/è˜cG ùHò¹„Bã^GNŠØ qLÏ+riÑxk(Ï#Áæ9œ¬–ç¥8,¹å"×P™/,³”œµŽêº#ŽâÜÊOwìu¶õÚ»Ær Ê‘W^çQÍxaÉsÔ9lŽ%#áÈõ ŽüTæÉâx£|¯£®¡Ñq¤x6åç  •+(áØÅôŽQŽé+JuŽÚ#G -ŽM9*Ïq쪭s4œÖ>ű©ºÁÑÒXíÈã>O/r0ŠÊüTcÞÚRGmõ˜x¥·kÇ'6fµÚ1›ðÏ.ÚKé:Ç â+õ]®òéEÕ”&ºµRR”•¡¥Ú‘cÃ2¯ØQÛ@té¯x6ÑMÉuìmhq4Tor¤2ï‡l¤ÅRƳs99ó9ù›ˆ …–½ŽyÔ„óÈ®7ßÅâ¦9qc¶cK5õ¹¡Öq„yòèKƒ#øÑdL¸Ä=Iq”2ëµÅWî–jGKK­£(‡îKJ¾vÿ2.ª&ÊDÅ^Á sä åKF:FêÆRó{k8ÖN'žsJ]°®ñÀ2˜ýÆGù¦šg½Îúõ<ë{Öû¬ÿEðe²315èó\çB¤^–éˆAxº¤×ýÉé©X>k:Êë 0D·Îç™å¥í\==Y,³Æg=Ì]ŒãMørÉ,¬%Ã]º :{öjüþ•§1Ì—pD·]¦>@&À¦`Ê(¾§dmÿu Å)xuÁSÀ‰ ”®Ä©ÆUØ·ÓÓñÄãÅG4bM‹¸~ô†Mï ŸS{Kn)¬ñ¼(…éyy˜eY‹½y÷Ð*9½«ÎÛ„ç&m&»HÛ~AyÃKxª4;i¢(ùÕ%àzšÓSïÁÕ+^ÄŒ «ÖVýƒkú}¯ŒE¿(¢k'ïq„,·ô Š¢!eŲN’_ûy÷Ä{ÝæyË-¸!æ çxMFaƒð\Ý쌸Edöl:‚;û.Âý7Â=}ílŒ‹çg€žîªs5DøøWSþ7ªÍÅ#ã4:w¤?,àû ’ñfo(ÈA)N rCÓ%m–©³®ÀmçáÈ;‰'óìu´¼Ùä9Š$(³¹„œP-¡·[Ì.†ãᑢʈ®ŸºŽµOe ^ȱ¿‡6zÏ,ó“ƒ<7YÌ´ãýþ)F=HãzÖ|Pÿ0Fÿóuêw.–&Ö!GXðT)Å€+öÊ=ß¹¢pçÓ%82qæ&§#yù,¬(¯Ãã´{#:xAþEàáw¶k˜θ _÷F½=çtëù¦¹B 4]ÀÂsL½W•=QŒ§”¹ØŠÆTÀ+G›þñÄ£ïç™Q°ê’þyŠº"}é¯O\?ô¡›g£í2Ï1Œ¼y(Êþw5ÖUZ…ÜFjtÄœ±/NEyÒè5ñÎ/ÃJ‚i:{£€ £‡çoóÖ¤yÀø÷wâW½þ…å–éȨ\Žm{—¢å—É/Dšw±Œ~ec;j\ò-4·~¼÷LÒɈ(„w‹ÆæâqÇŒåô¾pOŒãy³mˆö0¶¯ÒÊ·ÓÔw±é}AŠcuµ@æ;ȇª£Õ4£Õç IÑ,jô _ŸW‰¨iC„—~EFM~Žº#3f V•=…z8aq/·4ð솥—{«…«¸> 7L™‰gUÐpı´]+Yªèk°nÖfzòÄÀW[ñãÙ»·{š%µ¤>€ÉÎNƃ3»#>j¨º·5*ø¡u;N3OÊŒ/\#ÙÀ¬óeéÝÛ­&¤çØ´2‘B -“'ãyr Íçä‚FTÞû&Ͻ ±YóPÝòâÕî÷ÃZ ±áÒ8:'xp÷V¶HÅ„4+FºÁµ {‹˜89Û›„ ‚†»;ÛÀ~B„KZ-â®1xcÝqÂW'Iæ:÷>ø b[Z0yòL\9ÄC+x§h¹Òu_Åñ…#Tžÿv9¦Ñc&`å´<<’ñ{§k×n:ºª·Sâö3fÝ2ö~ÿT•ˆ~?Á z¥Í_³»‹ÑÂR5ž‚«Ô´{ñPJ,ζLÆ´çÝý”lȸÿ¨ÉXå¨Å­i±ÈZUFFÁ²êÛ¼7ðúœ‡‚õ¾wÝ?ýèHA×òýÌ„‚‡úë"m£££“aËy §üGg¹mlmÎàO-ðLÙäœäÔÞÍ[öɹtŠÝkøãáRÌ{q=üâd¼ Ù³$ÂÞ¸ƒ0ª2YØÎI쪌4øU,Ž’¥ŸU¢éÎþî~Èêo1–[K!ìHýË:ZM3j}Þ/9^6hoðFDo0´ç·¬ªU56œŠéCïù<ö*?žz;–,EòÜJ p=-ôTþïWÕ‹v;>xƒâ‰¸†ÞÚú‰‘#ÕkøeŽ¯ßœ:Y»½ õÇv  3ެáTüaÊHQßöŸ´$"0öÞÙôŠ^Œ3ÑC0jÔ($&\!Œ’Ac'R³%(X·C<’¶c5°Q³îý‡§œßDDà–Ô騜Um;݆÷^šAz.‰®>µ¥Î%ƒn¤· ä‹3H$º£FYpEÍfözTUÕaäã•Â|‚Ø€£ô¢ãÂÑ—žÒͧÎhÅaƒ‘žA/Ÿ/¾«}ÝnÛ×È(ʸœKyz¶?€cµ´Wn³–Úœ?=ˆ§boCÜô­ÉÏH¾Oì?‚p³ˆ–vÕ½£-!R]·¾îÖjšKûß¹[ò®Àø¸HA3<: ;Y ÷¿Õ›ò°(¾½%+4:öQQ?ö27æ"ŽÊø#´øÉÏ£hÞX¢ùÃh¤ï™‡Ê¥“Å›±óÃh7qJ±£…x,¨Þ„+fø;u Ç}+hz°ÆÿIŒ¼DZf #ï%$·™ÓhRÈ¢7‚ã Ž~"f Ã=/W"çÈTÄ_¢-ØNò^:…·À¼…JÜF÷&2:š¼¿Eãg/W`ãS X4}-^!Cjää<Í>ÛbÒ«Âp碽È@‹Ž1$£ðhdüy@êîK&>=EY$«È°æÒ¥6ÏEŒ¼kç¥`*m¹„GÆgW¤¸rÊxÖx­¿Œ{…¾„Srd£‘;ƒ/‚ùëæ°æ¼MF»ßÒÇ“†tùžò(±áˆßXüy¾Æ¬ŽÃûÇpŠÚïæ{ècX²h{c¤0 YÎÕÈš8¢Ío>Ñ÷­nóS»Æ£b “:ÅbFC*gŽ#LÀ΃‘øªP1”kDab"^Ýé4àl;1Ø22+tø_#>{yf¼ü™Æ§NNÑ *÷P”´ÿ9רõBS‘+Ô¿ö€OŒ% óŠöjÛ`Tî¯ åû™QyghßAÇ“X'—(K*ré1˜K÷ð§Ë1 ¹c²PA6·^N¼Rà^£ŒsìÎ[CÎ+õ!\OóFرdÐöߣµmPÚÿîµ82•?R¦1–8óÖVbŠsËÎSFN~šÎÒîù8ü/=}É0˜\PFý‡¦o>ůæþ [j{r|r_BxN¾sèfC©à)§ùbCA^](-/~Ïåá"c^ å<Nó5>|øÅ~Ãþýû‘’B#í ö&~¥…>Qꫳ¶úFDö‰WYæeõ°0®·!œ¿ŒW+/`šym$k=’öè 5Z}°Q…g9•Q·¢"ÜÜiíÃåÑÏ@¦¾ÚÈ !ƒ&Šà üߢ+“u®˜`5·úv´¯%—Q\ÀOøãIÈ€i+üHªM¶zêO”×:Z^2Œ¿„m.xlHW»'žüYo|ú“•·6²L´¥©Àp,ñŠ;=ýèºáBû>¸ Ï9Maü-þÐXK =Ïb¼ù—Ž&o홡Öhþ ÃÖ…0³[)¶?1Ú?‚  ´1ÅßÑ´ÑŠŽáýößpÞòÑF«ò6Æý6º¤–-[«ÕŠáÇ‹3 Ž=*î]Ïž=ѽ{wtîÜóçÏÇàÁƒÄBBÂ/ p?]¼K£^¼pÃKo|ñÚÇ­ÊužÒòb#A îYJ”`hE(0œT ]Õå— cc€®¶!Œ~ç­œ †æú ýá”'WÌ«W}áåa¥2·= ¶÷$ã%G}ƒgU•éHxpŽŒ=L@íÚb ¨Än!LüsQ=¯.P¯2vÕ^¸„!]o÷ÄxÌzcП¬¼µ‘e~Ûß}ø ¶Ë8\˜çœ¿e9ú<…~MÏs€òQå]ùòH¦­7oì †`ÀÔ1Æi#Õáw¨çßÔ.íZ^-àKn#„ˆ[—r'|Aég£;k„L5ŒÒ!ꛉƔ€)Sßa DŒFYÃG|,JÐaÔ£E8’Z‡ð˜8úeÑt4z³aˆ% i0zNw0¨º˜‘!Tá I¶w©Ädš É´!!o¼ägS¦L „Bßëùäøq| !š8.¨T@ýØP-‚_úW5|Á¹È¶×(p5t&‚6¸}rr²Ÿ™7%`JÀ”@»%p¡¿)h7CfS: l۶͵UÀºZ óº&Ád¥ c_†€„ñ Ã¼6¦†¾‚ׄ1%`JÀ”€)Sß ÈŽåVB;ÎzZêd3úvéï@Œˆ†°¿&*S¦L ˜0%pùK@Ý:Á9RÿªzZ’Z.aÕzt FÚˆ è«DUØË.m;¦ù}Äí{(ý¬_v‚º,æCZVcëWÚïŽf™Ϭ_¹Îå(*àv& §èg³ÇèyªçßÚÁ”€)—x¥ „ç¨úW¯›]4 V_'òÁÜP"fü1!]òÿšöaqú£ù} ·º¼æñÞ>?ëN,ôÛäLr?‰ckæB”¸<çF•å”j§$Ѿ(åM¥°/[5Gw…¤žÈéù$«TqPоξ ÿHŸŠÍ5mŽXôÝ´ñR³Òq”ÙhJVä¡.S IäS;¹-P²!… ªÞ9Ø·q1:EF#–ž§˜èHX—Vx4KM |%À+­­­b u@ƒŠ,(ÝÜ£Àf ÃL„P A£ªÙö*æÍ9(ƒ£¥»Êó0@§o„UøY ãoÚøÌ¶œâ½hl¨CõÞRÜi[€Ûߊq¼fO¤ïªÄÃ×vàwJ ;U+É=±ue þ€”–”Œ5å»0¢Ã?1oÂJ2¸¬ªËiOJ~r 8ÇÇnº¤nð±Zí ‘ÝÉåTJ{Z-«æ#D&gꎠ8wæ¦?¤Ô>v½B‡ì~×àÕ sA5Ť×pdò&ðJÒ,4%ð}•€|1 á·ú—ô ts{Œ_¤Á Â\V÷º±îñ{ÇëHûЇ‡ vûîË7½è`~Öõ‚`E½è Šȉ§³½Ÿxg/![‰g×URM¶,FÉa^rµa]v½=®C6Y“I‹ùm«­_r*¡¦l5ÒNl™ødûj$f‘Ó,DvJÂJ:æ˜Û—­|ʵRa³ÒµL®ùF_‡‚l‘´õM‡ñúo pØ©›j¶";Iß”½Çœt«Ö/&¿åZyZAÛ7Â}ëfA°1ƒ*uúO÷áÞ‰Ö#z]øOŸƒõ%î~.^ïö×^¶z¡«_ÒV¶97¿je¶ð¯!¶au¦UýÌyµoÖÉtÚºæ A_§ö[Ããü¯ÊÊ'Ÿ­D&%–¼ÓEõÇO'“+‡Ùp…Ê“]ì„Ì›vнÉv­nyŒ[/~çmUë‘é¼—.Y)}([š†´¥îãamHJ+¾*j¶RÚy¿³WºaDgøŸ½Q8˜:þõqq„ZTÿa9Èy¸—ý ¯$í>%ÍAY_÷.,f”ÀwNÒw0„+¬U,õ² ÃÿœA-—e®¸=F«%$a‰\æU˜Ë*=è®'“Rˆ1qáÈ^ºNŸh9ۀͅnOƒgö!¹®ÌŽRàåC· ºŽßô05y>öôV« B&¹ÞüêG4éÚqdS!jù˜3 '¾)¢·Ç…øqù^|ð«á¨Ù8ãgôÅÞ*ç kÌã¨bT5ë7f*®XQŠºÆF}¦Ÿ¨ IDATÔÉňë&aSŽ…*s°«öü<1J´“UŠMÕ hi¬FÚö,$ÌZ¯ƒi;@.£ÓqðöRÔ~EgŸÅ'ü g«1/n<º/ä·¿:Ìù& ¬®"Ü4ɧÎŘ¢j*oÄ+“†P™g”FÞ&‰ ˼bÔ6üœ/Ù±ñwq˜Z:{ÈÓ!ùT85³Öôl¨ÏµœÅÍKz[1Û[+!ÍM}KST$—1S`Ei5p$ob›Ï{G&`åfœ.`kÈæxìùÅ::º/O›L”I>‚¾Q¿õÌ)²òÁ§¾ç7WíÀŽŠXðô\rN5ÃÅ"‘]§ì À–ê:ZmªÅËBæ-ØS¹Çå§ÆcÜ ~–#}áQ”WÁ¯ˆÀÇ©(´ƒ¼Ò£î•T§¬Ü}~«E³a‡ø  ïæÌ@_2Zúð8? «Aþìq6k VîÓ}3@n­Ÿ(ÎAáŒ1'Ce}E³ÛÌ{ft_(èVÎ9€1¬ nË› Í2S—¸T@ýØP-aŒô²Q¹ í뜩ð%ú<—ûD.^qÄ <]Ò€‰ëþˆäôTRŽÓQ^W€!ìÝA žY>ZÚ›Ÿõ&|¹„|~f'žZ8{öjüþ•§1LÁÕ&9 ÚÓæmú¦§ê´J`à—|ß¶ <O<Æ#±tnR“ã0}E9 2z ÞiaÁS¥hƒh¬pNdxÏ%B36%ð€\)àX]-ùvQÕÑjšÑêó†¤|z…¯Ï«DÔ´!±K¿" £&?GÝ‘IžW•ÑnqíÇ7½kþ¯–'¨An˜2ÈY—;„#Ž¥íZ PE_ƒut~yJ~^›óÏÙìèÝÛ=e²· ¤>€ÉÑRóÙÉxpfw$ÐG µ\N&ˆŠU±¢w;N3O.Ž)ꑜѾ,½{Óÿ¶ÂpH{ )Ò2y2ž¿r•D²FTÞû&Ͻ ±Y¤ØZžC¼ŽO—ª¾}û{+Hêþ¥àjV‚„¸µ¤ðÂ>¹tdµJ¤ o®ÔÊíl<è|¶;›÷[Áé5éO=(ßž”ü¿ ä?O‘sœ1˜¿òA¬zx$¹ÕÖ ÛÊû­ßÐû)zl<öœ¡…­¥³dæôP²Ã¦àÈÈ{ñêâ¹d3f¡¨º÷\!sÜ­HEâÒ5H¡L_ˆ›É9(¨gàÞD,­fMž<WqÞµ9¥#ú«¶ã§·¦!9kžÊxH´NM»¥ÄâlËdL{þÊ6c^‡ÆÌšøÎH@®p, „tNê_ÖÑjšQëó~ɳ}àˆÞ`ðKøR8VU¡øvg5InßûÐ{>kžÊ°§ÞŽƒ%K‘<·\“+oüïWi¿ØñÁ<×Ðäý‘Kß‘ê5 òhr~9/ Ò÷^šAKÖ´¤ï²,t#½9%_œAâ¨Q5Ê‚+¢ÂÉÈ©GUUFÞù0^)Ì'ˆ 8J/Žž!}ãh™üÔ­8l0Ò3€Y/¾+–þaÛ×È(ʸœ¡‚Æ©j hEN¹,ëvð—v«9æ¶¿œí8ª,©D½Ý†­K3é=XS›q#Iú›Q@>ÛíÔŸ’—Ÿv}S`Øo§Q²-ŸÞ!O4“š§sð 7Ñ’;¹sæo? é’ìîMwúiº‡õ¤ø©/5Çh´ b•ØU]Oß"” 3y.Ylðy 4–«ª9òN<ýJ!õ¨:Ê#Þ3 ›øRŠf uVVÌI—6Î ±ûd_4, àaàìÇPVV%ÆŸÛ îh'ïE%É.¡QH¸ÂiP4ÕÐ8ªqÝ3[M•ò<ÚQCüÖð€6ƒ)ï€Ø FAÎ)Põ¯šfIéó~¥ŒQ ‰HãÀ/‘Ëàè‡9HŒ‹Ö–th• aÞZÌÝÏ·ozѱöûYçipÁm 'WÃ1±ÿ »êÞÁ(çüØ–ÚePÓ\fè—¼ÿ=¨Þ”‡Eéá›=:öQì$å?öšôç"Ž,ÓR6ñ“ŸGѼ=°Dó‡ÑHß3•K'‹ _ïé±£…x, ½ÿ+fø;u Ç}+vÒœÿ'1NÈ-Ò2y/!ÙÙÙ’UïØ¬\êôx‚ˤá|û†w·“©há—›sn~œu-f¹lʵ ¶J˜·ØŒ·Å²´*¿á…¥( 1áÑø¯£VÌv¶EÄH,\›ƒåä³=<<Ï~©vÀ ßNòj¤ò¦¦Œ¤¥6 4«íÝ4­Úßú;º7dYÐw"FtÃp碽Ȱ–˜Ht¢¾düyí ÁlêP–%‘qK16¶”àÉO#6?™ˆþX0Ò‚¢Œ<<¬mExÀõ‹GMJ&sÊÄ9Îf×î9Ó_ÁM öCX4&Ñá<ÆÂ‘<£k+¡m-æ½ùQ3'êè'À÷­÷ɶ³‰‰…d¦jaOa"_¥ñ%B# ñêNYë,6#S—©x¥ „ç襈n6„‘ ž‘rš/6äÕ…Òòâ•Yž½dÌ ˜œçyÓ| ¬®®þÅ~Ãþýû‘’’âîb°¯o´Â.”=| û¦çeÞ°0®·!œÜ'ûyáYw ý’Óꃭ±‘´wï^J§2êV¹.–AkîÅͲ„0Š5¿æ ƒ&*B¡`£-]Y MM´õF”uíè3·`]±êiøí—ÉÂãþ:±Ðý¯o ×Ý{IÁ{¿eí…‹é6y‘9—ÑÍßFøãɯ¬|!p޳pCZÚ3Á‡€E‰ïY<‘ Þiúðz|¸8£àèÑ£¤;ÂгgOtïÞ;wÆüùó1xð`ÄÇÇcàÀq›ðKÜO/¨ªïÚòò_¼–Èq«r§´¼ØH†‚{v¦%Z 'U£BWuùeÙ×wºÚcßôÆÏz[ô%†~ÉÉw}Û‰–ÊÜö€@eØ^O¨M^õ«î®T}¼»Ku)2JtlýE LÖ‘¬ß~ ùP÷ß ŽŒ™(þHò¢cºÞdÇe¿²ò…Èë8Sð3ÓÇp;Èïjk3mJà».ù¡¡ÜFQ]Êð¥ŸyEÀ[0B¦ FioøÌ2S¦L ˜0%ð½–€4¤AÀÂàtƒª‹™BΤÑJQ•˜L3!™6jçµü{íÿÜ«DÌBS¦‚•€9Ÿ+9³ÝÅ’€j¨ªåAðâKÿª†€/8Ùö®†ÎDзONNÖã3ó¦L ˜h·Ìo Ú-2³ÁE–À¶mÛ\¿8`ƒ@]-ù°$û2$ŒY£í ÊxmLå¾êq˜yS¦L ˜0%𽕀\àXn%„P¬§¥N–1£o—þÔ(ðGÀˆhûk¢2%`JÀ”€)S—¿Ô­ƒœS õ¯ª§U!©åV­÷Hj¨˜€±JT…½ŒÒ6ì£3è÷Õ(¿…¶CÕŽ*£Ÿó]Ρj59@"ç3tLAH‚­þŽ;F?sä_¸\ŒÐ„Šõ+±r]Y›Ó|/õ¦ªÕ°v²bu¨„v¡5ñš0%pÙI€W BxNªõºY/V_'òÁÜP"fü1!]òÿl;1)Ñ‚I…òÀ:ÕpÏŸ‘hIÄŠíÚ‰…¡ïƒM¸ú¸ gy¤ ‘G õ •ijêyçcwÑ1±ˆ%/Ñ‘áXZ*.}qÖ‚ÏžÎBÖÂ2qÐ/H4U “8¹_׉¼C¦=Ež Ûi¿´´ØèTÃÍ8.&ù¤hVš0%`J ]à•‚ÖÖV±… ·Ú…ÀXêf†J7·Ç(ðF€è0Æý»ˆ5áá@ä¨~œGü©Eí∎ å7jÖ÷õ«°ÏpÉþQÎÄ~T—í"êæã‡wìÀA:T Ý´ß®ëO£m/Úª5s1cy%¦ço‘#ÕØ²v†öR°4ñÊ yüSŽ«Uj;”ìÆ7§o·6ž½!e3Å2;[6­Åì”J-ÊÂüÂ*o Î²&r£Ì†D*\Æ™VÕ­;}‹[;hňNº6ƒ)S¦B"ùâÂo XG«z:(ÝÜ£ÀɈ Á]l$ƺ˜<`«@6×›h± !&–¬B7:JíÛ¸Ôդ̥p²‹ªÕDÇ:«×-x—Vx®Ð˳3ô@lÿxŒ›ü0î¤õ;V#)2VдбÇÉsÖ >›®GšKf½x½æï€j×ͱÂ:g)V/ÍÖ2áo:¸ 3­®~e®Ü!‰Òǧð>o…0>’sÉAwCbÀ°±gŒE ã•)ØÈ¿€/¶ÿS…ˆŠÙIø¨>*ø-:Å$ÀB+F1É‹Q#*ŒÇ‚lgƦL ˜ÐK@Ò àú®°þUu°ÔË‚ ÿsµ\–¹âö®F”„%r™Wa.Ë´ÇÙïjj>Àø‹°95ÕäþrËLò«GÁV†ÌÁ°$:{kw!·ïrL¼DSΕ†Í…6¼±¥»ªbTÒE˜••ìl¾Á‹E‚LÜ6k ò¶ìÅÞM¹X>w•°jjAA¨RÚöžÈØT‰:’YQN ñŸŠMεühž\LO}ÈË¿½š+ðHÂx,(<üMå¨,Ý„©‰Ê)š‹Ô?+òÈ#Pår<û÷V“WÔP{÷mÅçÌec¯¿Æ—¨„± Œ,È/.ÇDv;é …K¾Añ®JM†•Ûpˆ ÔŒÙÈŒM ˜0%àEª ~l¨–{il‘‘^6*t|S ¾dHŸçrŸÈeÃË)6\)ˆŠÞäŠÈkÜü§•…‘t>¯mÏ¿ txQ Þš@oᢳëèíûi\ïìxî–˜2Ns8c$‹¤oƬÿº6ãli!)X6|V¬Y%ÅèL{í­yÃç‡ðœu4n¼}Þ{ûü¹jy¶§°½šZÔcOùfʤbòħŠ17g&gmþì#–ãV¹¿èsÔ?g¥r†!9Õïã½ïcª ëoEIÃ.¬\ô$²bêøBç—bÕ”phêy[w"儯óáãäüo,FÔ¼‡Wýûv .Qs‚è~͇¹ZÞN®–™úŽð {jÞ d[GQ )þk¼“™ƒê‚µïÀ;d(ÌkE & a7NAnQ'çVa0â%I©ÜhnüÉ(ôãûÊM)ð½»sXT9e(¶` Æ‚ÖÂüoJÀ”€)ï+««2ï½UÀ¥ªŽVÓŒ@Ÿ7Dêk¥@¯ðõy•ˆš6$vIW8÷ô7“k]¹(Ýt²V°N¶SÔ(¼C ñÜÙô<·%Æâ©.k ,e8† Љ³‹Q\¼ÃÜ/›ˆèáËöb˜öèØò0]S~Û²ÿ†MÀФtÂ]Œ—îûÁuˆŒMDzq3ÆOºS¼)¾¶´N5Qpiê.eøPÄMÂlÂW¼ååŒú¸:¦-‚¨axø¹wаë 2€Â¿”‘"?ˆÈÀ¦¼ç‘WX‰ÊÊ]ȉõs"‘8>Í#ÆãûÙ½3JÔ×ìÀŠÿáWÍ $‰‚½¦ë?kÁÝO¼ˆ¿¬Õ›wl@Ô€ábI'N k? Ƴ ŽÒÍ uŠÞp#1d8«ë"äü÷jl¤=ø1³D%àêëyE€ðh@œeÆ%AŸ®šû,QáãßÁ­ë°~ëÔÔ×£î¬$C$j(&6 ññ¿O¡ï•}“58j;I«g™‡´Û-8½O[Oh:©(X‰†â¨+5YÍÊÁꊃ8V³>Z<¦@8“}1©²ùà%}¯`ÜPµý l·Ë##0 NîÌÈ”€)S>%À4 BpNªÕ4ó Ïûä‹+ƒ1 $iø%rY„ Bí±gX6#kü`ÄÄY0·È‚¼MÏŠm{cRo³ š,¼ÄtZºNÍÁÂûiq»Ï8¼E{ú´‹?Á‡˜˜8XÆ,ÂQùòL×–É}I!Jø ö€pn¥~lŠr û¬ ˆ‹‰AÜ` m;Ѝ!)˜MºQ:!ǘ Êlž‹Â2¬¿[!êŠLÅ„ÜÈâBÝgôcØU”KÛ ³`‰‹ALì`ŒYô¡ó]ŸÞCù¼OOôˆ„dú†À2ůL!Ó¥²WÑ÷ÄÂô1ˆ‹%Œ¿ Ÿè”_’U¹*ÛÐ8@¬.Ì¥]Ÿ0:û)¨ö‡¿”¿AE˜šœ€Ø¸ÁÈxÿ›!–96¬÷º>>x‰À3ò c%¦ŽIÀË]Ü)÷Î-ñàæÔL™0%`JÀP¼RÂs ôtÑ͆0RÁ3RNóņ‚¼ºPZ^¼æË¯_2¦÷K‘ç©™Ó| ¬®®þÅ~Ãþýû‘’âVV~\4ö_á¾O?_z;šl¤@½ùwú½÷Z×qæíM6𪹧ÿz¦æÒ׎úúFrWå\œ×üÙ‡“ûZ¯®‰íM°iÉ­²²œï‡Õ&›-¢ rÛÇEË݈ëÙŠ$¾«Êã„ûf-釦S–áþàÜtMùäEÈ„ypñnŒ××X0neÖ\ ˜¾.Œ\M¬¡“À²eË`µZ1|øpqFÁÑ£G†ž={¢{÷îèܹ3æÏŸÁƒ#>> ˆxBBÂ/ p?]çtïŠòR'_<-sܪ\ç)-/6„¡ çmÊ{C+Â*ˆ¥ ]ûK0Ë~àû){ì*‹a0öoì÷^Ål:,BSªžíUšaBI»ë5öî¼.EJ=Š”_{ƒè?)|£àM>a/[¨i#lwj†Ž1D°5*}5-𠙊Ù×X‡ gJÀ”À÷UòCC¹"9¸”;áS_úFo´}`„L5ŒÒ7M ˜0%`JÀ”À÷EÒ÷›Ó ª.fdFU8C’F+F Tb2Í„dÚ¨×rÓÿ¹W±˜…¦L !s> Bhf“‹*ÕP?6T˃`È—þU _p.²í5 \ ‰  nŸœœ¬ÇgæM ˜0%`JÀ”ÀwNÛ¶msý†uµ@æCÐiiÈØ—! a<ÈjxmL˜|ô ä-SSS#>´K*Þ`:RÆBW…-ÓŠž?^/6?›žÙ߸Ø÷ãbÓóÝ{m™T>ƒ +Óêy4ûoÎrŒ]Œñækü³ó#<&e|Æ=ëi©“eÌä|éï6uþ´AÌœ¤°¼Áêj=Œ¼á¡®ž^¨ñëù÷—×ó£‡5zz¡Æ¯çß_^Ï>Ôüéé…¿žy=?zøPó§§jüzþýåõüèáCÍŸž^¨ñëù÷—×ó£‡5zz¡Æ¯çß_^Ï>Ôüéé…¿Ê?ãæ‹CÎ)úWÕÓ*9µ\ªõé@µÐ#V‰ª°~Ó,¾ô7A ͉l'c}{ýMÖãÑÃëë¹½Êß©cGÑÔ©;úö¿Ó  ŽSG¿{‹A¿^]]}fÚþøñÇŸ¾}pü¹©èû!ðKœfÿÍû/ÇÇ„‹1>Õç_Ï_(ž/‰ÓÿßíñÏcE œá9*r «²äJcpc‰˜ðÇ„‹˜·„úÐq½:!”––bß¾}®2ýC˜€[nIÆG+—£üTw¤d<Œ}øX ø{þÿÅWÃïÆ/<@”ÈPÒ`|*}}½häúw¥o¼‰]‚_<6=¨\¶å˜ƒž?.“´dºSóA¼ñ&ù1<ýlËàzmà‰GY¦Ç¯§¯apÿ×Ãëû×¾þký“4™ŠL·«ÿ>úÃ8e_eZöó2Í1=}Q¨üÓÛý×ö1¥ŒY>R†,6½|QФ^¶5ï;žsü»žqýó)Ç wúñ¨‡×?ÙNÆzxoø$I[¶‘8Ô˜ëTx™æ˜ƒl˱ ê³&Ë8ær^%gX^… 2í&Nd‚ÁÑ£Àf CL°pŒ„:jÔ(>|v;Ÿ¹à9iñ¡ü¡bkkW$þ¨?Ê?¨AÅ5¸îÖ«lkmªè¸†ŸŒ¼FÃßÒ€š£§p>¬'®¼²·á›¾¼‰‰Ç¿HŒ~pÚ0Ðx’`úA"ËeÌ7ÿ|—þxp }…kPõŸÛ©üèñ |ÊJ‹¤#cÙV¹ÌË4Ç2È:™WcY'c®SÓzþÔ¶œÖó«‡÷Ç7xY¦§ÅyÉ›K\/ÓË ae^eŒ¹NMK^8ö˜Ž„áz™–ðþøñ/˼ѓ¼©±¤Áð2ͱ VæÕXÖɘëÔ´äEöGmËi¦#a8/ÓÞ?ÞàeãÓÉ›K +ÓË ae^eŒ¹NMK^dÔ¶œf:†ó2-áýñã ^–1>}¼©±¤Á°2ͱ VæÕXÖɘëÔ´äEöGmËi¦#a8/ÓÞ?ÞàeãÓÉ›K +ÓË ae^eŒ¹NMK^dÔ¶|0‘>0]Ƀ¾.È<ëhUO»;æYî}{Œ_$#*ŒO²R ^¨¼¼rÝu×á_ÿú—wÝ„ÄÄDçGŠçÑgÈ(ô £àÁÕÞ|~@Â>PYAg,^¡}:¡¡º~÷sçQ¾t*`Üd¦ŽBĹC(ZY ¹½N|† #1-k ¾Úú7|¼ã+h^bpÏ#?ÇÕáMØýÉ&|‰ëpßÏ®§S9ÿ|øÏ¯ÞðèþwǸ¶_7Ø~Ž7þú%ßò#œúçÇ8H~b†[qßO†!Ü^‡O6þ/0âüì†+p®æSìÉŠñž‚I?†®Î¢bã»(ÝOÛ dŒÄ]†Z[$&ü<WÓ¹CzyÉ&9XYÆä´lÃy9 ÕX/q0¼>È:Ù^ß<—Ix}ZòÆ1É Ç2¨mýÁûãOâRcIÓˆ¾äƒcøUX ¯Æú´¿þ´Þj¿%n³ÿ¾f–“ þä+ád¬—7—Ë2N›÷_ÛJþ®>ÿêýæçLÎk2æúž(Ý“% /ŸQ¹¢%Ûc¨%ITæU˜€ÒrH`õ!áå>òqÏž=8}ú´Add$®½öZñqáùðxŒî”ÔTã˃÷Ãü“– úýx8ÂZjñ¡0á¡'î>.Äë—¢òèu¸!Æ3--8¹ó3Ô^u-nu :×ýÿ ƒ½o@Vf2«é(J­ œw ñä)œji„”VõÇë®ý®ÿî²{ýQ²nÂ3§ ¿Ã޳ôWùñǘ<?¬*ÅW;éºi(„CýÙ´œ='ø·{…-á›®E—ò¿’AЀÞ×Ý{®ï‚ÍkŠÑÒÒvÁ&U^2-c†ð–VË4,îÿjLËØ åN©u2-c7Tà)µ­LËØµN¦eÌðÞÒj™§Z'Ó2ÖÃߵL¥%Ó2VádZ­“i3Œ·´Z&ñÈX­“iK5VëdZÆ*\ iµ­LËØµN¦eÌðÞÒj™§Z'Ó2ÖÃߵL¥%Ó2VádZ­“i3Œ·´Z&ñÈX­“iK5VëdZÆ*\ iµ­LËØµN¦eÌðÞÒj™§Z'Ó2ÖÃ_5¯Ä­–{£d™‘^6*d|RáK~ôy.÷‰\6ôëo°IIIø˜¬ ×_½Xz—yÂ0: øëv‚4 IDATìþ²–Nuø†|LL ôl5N À}x}ÙÑÝ®yè;ÃJ¹·Ö¥ð·cfÚ8Z[ÐØp½ þäÉÏQôV~tó ír­dȯ:Ÿ?‹Ã_±ãÞÞ7vð-0þ¦~xóÓc8\{W9Ý&´þ'Ò,}PÓ¥ _}J NãBã[Û6!ÖE`ØTKo|í‚=ƒû4Ö_‹žu˘F º/Ηi­ñ%òŸ6r9ÀeZüK„Í Æ†ÙóþË1σL¦ÍñïMu\°Çð[CÈó/Ç‚ú¹²ƒÌ«‚VÓŒVŸ7$åË(Ð+|}^%¢¦ ‰y«P#¡^y啸Á~€cÇŽÑ—ÿ}qÕUW¹V $Î.WÀ@lÇþƒãú˜àãÖ‚ó-r·îœx¢:q¾39½é*Þþ™ñ½"pºŒVjá×`Úÿ÷ J?øŸ}¹›ÞÚÝ·LÂ$ö¤‡œ€é+dm‡ÈAF9H")6µj"à•îóÎt¯^Ñ@+gÏiuçÉ(8ÓšQàpZ½¢;áô™³8ã„u "i4sDãxÃjN6P`F‘<åÀl(ÿÚ ¯4õšd||9æ „‹I_Òü¶è›ý7ï¿9þÍç_L€ôOŽŽæA ÛŽXS0ÚKºšfú¼_´¾Œ£ÆÞˆè £¶mÊU£ M¥³€·xuàý÷ß±·³ Z›{bä¨^Ø_qJx~cZ[Zá苽€ž:†=_Õá†Á}p曣ôÛ„âêîZWÎk%EKK9¤À´RðqmWŒ¼í^ü0æm¼¹õlͤܺ;¹á%Ÿn¸¢?ýþàÔ)|¾ý+¤\Ž/÷§úpôëCJÛæÄÛÌ[Ý\†ã?OF‰¨ÆåVÂ9‚mmíì‚=ߎk®í…ýóJþ¶ƒ»×bÇ>ú8½Ä`rN¶(’ 0ÐÁ&¦¨RÝ=¼?zí…w÷Ä{JOå=¼ŸÙÏ=]òò'o½|ýÁëééóz|úúöâ×ã3ï¿yÿyL\¨ùO¯´=zôÀ­·Þ*¼çI£@­g¯‘W&&£{E íæ_ƒáWw#£ÀŽNŽpŒýùhzëmìúô}ì£e|#~6ý#¤Æ)„9ßÚé&µ¶œ@Ù–rº¸‚B¯!øiòÕÄÛM™SÇy;üôÜÚô>úçûx㟠Ø7Þ}?®%[á´¶C°ód”Îó¶½ìâ ¿µõ¼F“¶$ÔFصÁÁÑ }kp͘4Ü|ü|rèߨº"#¯iÆŽCTKxù€,Ïþ3š µ”oyª°rpú’0ðòÞ z=ÿþèëñéÛ«<Ê´„á¼Ls,ëõ±„ár™^Ï/ãTƒ7ü²ŒádZÒ×ãÓ×sy/eZÂp^¦%> «Æ&ðz~§$-•YÆp2-ëõøôõÜFöE¦% çeZâ“°j,aB¯ç—qªAÒRù‘e 'Ó²^O_Ïmd_dZÂp^¦%> «Æ&ðz~§$-•YÆp2-ëõøôõÜFöE¦% çeZâ“°j,aB¯ç—qÊÀtBxND+ã@t³!ŒTðŒŒÓ|ñªµ¼x]^¬ÙXcɸ«3ßbNó5°ººúOû û÷ï Ö××»n¤¼!êM“eŒ†È?O4ªGX$úDGR'ì°Õ7Ðçg—®dLôÄùsMâ§„áh=s §iM¾wÒâçÎàäéf oXwô‰ ù&RÌ$†ˆnq†¶ÎïŒî½z¡[§s8YšêºÐ¶C4ÂZ›II“`"È9{gšíèܵzõèJhOÑvÀytíÑ =ºv™S'qÎѽz÷@§–3¨§ˆ.Ýz:aOŠ­ƒðÑèÙ•hlãéãøª> ?Œë‹ÎM‡ñ·¿¼OßJ\‰{þó?ЇäÁƒY•^è²NÊK_¯ojx==}ÞýöÖëñ‡º?þøÑÓ÷—÷‡¯½õzzfÿ=¿qÐËÇŸ|; ¯o¯Ïû£ßÞz=~óþ_:÷¿OŸ>xë­·`µZ1|øpñMÜÑ£ô;é´ž={¢{÷îàŸ-Ο?_|\êo©×|BBÂ/©b?]çtW3åù÷ü|Ñžºˆù¼eyñ^º¼ØH†+xoÁЊÐ«F…®*°,[S2ðCÀAÆút ýR@_¦ÂÒ'ý¨;ÁKì28ñÙ›qªžäCÖYgºÎÐ>?×têdGÝñFÍ ¼Àuî4Nœ Ÿ‹t¦‹ Îœ‘¢8Óõ'àþ „§OÖQÛÎŒgÏœ[ü ¶66€Ð ¼Œ³ÉVO?`”¡ õ'Ü9{“ JͶ“à;É¡õô!lùG¥–ÿÃqý„Ûо)p~zà!+P$¥lÔXN ÀiiÍr^…ã¼· a¸N¦ÕXŸë¸Ì(ȶÞð©ejÚ[oø%œëù3ûï¹ç¯ÊÙ—LU8_òå:óþ›ãßÛXRÇš–ãI-SÓFõ £ §Æ—Òóϼ¨ü¨¼w Í K*-ã烀‘Q`„Lc”FiäÚVñV€¯I£m w ßlU¨2í ŸÛi«Ôܘ)¥zTè3ž€r2”L«±ä‘ëeÚˆß.WÞŒÇ~5 ü½A+"£{ÓŠAlMløiø%ÎË´>Ù†c*_ZIÇÿKœÞðsä‘ëeÚ¿¾8 Ÿ/þ|Ñ ´Îþ`øõE7|¾øóE+Ð:_øƒá×Ý`ðùâÏ­@ë|á†__tƒÁç‹?_´­ó…?~}Ñ Ÿ/þ|Ñ ´Î~YÏsžœ÷d( /pª.f݈þö‚F+22 Œ¨Ädš’i£v^Ë·‘+I3ø‘@—0tíÒY,-Ù›ÿMgø7«M ˜0%`Jà’’ŸµÃA5Ø@P„0ìKÿªÃœ‹|{WCg"hƒ€ÛOž)¨C¡'ÒwUâák£‚Ç1kÊwa¹LUÐN}ðÄÆg$4‰3.<ËÍœ)S¦L „Nl „øÛýKzPº¹=F/Ò`PaB'½‹€©ÿOD*–cõ'ÇœÔêñVz!f?qX•×l- Uí&f¯”+ 6¬ËNÃbr™œMuâ­ÛV…Å™IÎ/K3¡½t7a[Áb”vZd¯Áê§Ò\_ŸÎY¹Õy¸‘ « ßÒ±V.xÀ¤-ÜñÞN'¾þ›F‹8âõ`‰ä5 iiVX³Wk8Ú%G6.ÎtñX°C®4akA¶³< +Ë4y5U­FZæR¬uV”Ù|ðh?¨È¨² ¶:Íg›õëñ”UëÿœÕeر~¡“^6îsòA8 ²rNšƒ²cŠ5×®~šÀ¦L ˜¸8ßHƒ€©r:D©È¤^fôFåmH·Ç(PK’¨Ì«0—W:b$~“,øŸ¿ mßWŒ¹d&LûI²Ö#nü ü?öÞ>ªãÈÿJHBŒÀȶÄi„D Äc‚Dâ…8 lCp8“Äç—¼ÉÏ|`öÿƒÝxñf׆d³àMÙr€á8æ²°l$dƒ„Ä!®AÒH3Òü«Þ›õ<Í›C8¯á©«»««ª«¯zýzº×T4Ó…IGÑ´h6—éüÕKùX>g ¾xôö=3 U‡6byÞèp¸Ð\óŸ®]£ìÄù=y¸¬ÈèÄ®ÿ›Šù…qªÁ†Š=8½h2–î¨Ôôe#zK§OGïïŸÂùâ-È_µǵy° ïîûî¹ÏdMŸºó÷TÀáØ‡%‚B¾¬)DWU€éËó°ó¼®æ<š®ß]µk&/é‡ST¾†âg±hÂ?¢”dr8lÈÏ[Š5•_FÅåW‘E–”©ŒtZöýOç¡–Îj ×á•%ÿb·½¤åÉýFüäÇx(©ï4°bÏnÌÛ_ÉKOþ|Ì\‡µÏ-Á´ÑZtÇzÃ}ýe`máSJw, 1«ÖecܯaÝ̽e;Ïãû9dŒØë‘~yUˆøúÂ+;üa­ÅS9iÚ%SfΖËÁÉ*ß0_d¡ÍÏ}Gài‚§O_„MkŸÃãZAìø€…'©~¹j%p•y£¾ù7HÕg^Ý?ž ]dɘȈ¨A¸ÿÞfüióF2 ‰œf/ñ§ÖçþÝx’õi{™(À+¿û>†RZÓølŽ®ß þYã-¬ZYˆæãù@þDP Œ_WX,ËY°4`i l#€}uµ@ÂÝdäRò«0Gà ª7èo¥À8áÃ*öæp …¢†NǺLà?þ{#6./ƆoŽwKÏ÷),À#_ÿ:¸´Gã[£èU˜O·}útLE±#ç¡ù|1žñ)¦g¦`¥{@CÖþ8èGš¼¢;ì1¾eŠï²àoüLïö6Çš93¼¸^úÏêÿAñ®âŽ7lçeÑU ±lNÄŽÄÆæóØùì¼4=q+wiKü­,Pî\Ì~‚t±xŠ‹O`”¾ˆdööš”Íd´•lDtßa8ÖkúÒ4ñ7xŠÉyú$¸¥ŽÖM"÷懎=ºsg=‚'¾> WEñ‰Úg! °4`iÀÒÀM¦Y)`_ „0ˆ(ó/ÏÑ*̤á€ìüf™}11 fyoòødä®Y†üåKhwÁjÌ­OÎC'>LrçáÓº~;v,Æf¦#QŸÉÝåéøž][YŠK‰£ñä~Ž ÙÀ[¥½Ë5 sK_zÚol%øÕÒ,øÚƒÊ¤ÖAÏ;³1Ô/e82˱jë^”ØŠ¯d.¥{~ÿïìú¥gÑ·…=x¿J_»¯=u„ÊIdð8k+Qz)Óžüò6ä/|Jûb1ñ‘eôV¾IÃ5]d¤Я‚æ[½»ÉGwRê |köƒèGWUûÌæÉï jbì­DRÕÕIú€À†”JV”¥K–n¸Ø £ ç¨ó¯ s¹Œá€eíŠQ LÄ8ÈäVBHË^Hk´.°eh_wƒf¢bÏ:,œª/ùD'aÓq^¬zV÷Ïü+Ò“x“\–,ÀK hâõ‹ÂÌŸcõùùèKÖbDR&Ž­Ø†õó†ð´ ×Ÿ$%dä+IQCçáÔž 8½v*2ÿù}|{Ë Zæoqoä,ÝO›¹ [–ÇäTºnšdé›1+¶ýciáÃy©éIZ|æ’|¬Û3[»®yд°ÝOžè¤EÐTÁF­²¨ÎLÆŒì%dz¼€Tâù¥Ÿ•bAf&än&££³>™žØ_âóíÝÓ^¨À†Ä%HÖ7$&=¶Uû|Àø–³4`iÀÒÀͬoÃxN±¨ÁÌͦ82Á3Q†ùaCAžËÃkº<.‹ãók(Ãü ©¨¨øù]yy9²³³âÝTN;lÍDÇ%"Ö½ÂíS>7^\b¢¦,Ÿ8i§úÄ!‘÷„ÑÙlv¢©Ò(¢³ƽñö>©¬Dx3³×V£†lœ¸¾ý‘Üñ%„œ°Ùš}–—¯|&U P½9)!MG´¥‚åtÚ`s’ü*UÉ«€º£=åU’,ðïHÖÝG•}‹•ï>ÈÉÉÁ¨Q£´3 .^¼ˆ¨¨(ôêÕ ñññÚ¥wÏ?ÿ<† †´´4 2$¨’¦§§›Ëé᯻êÃ_cy©–^Ëe¿MyøŠ_yØHÐ ³ÙÈÔŠ ŒªS 5þ³ GÅ7ù‰KFƒ×­9Ëðäaô@\6¶xÌÔ `¬Øäþäó,†(*¯ïeù¨ØDšÄ…G|MGî|QDˬ% }]t€§•liÀÒ€¥îj€W ¼·€EòLîwi~6ŠÍˆ©Æ‚Ü]]Yù»£¨¡ø¯æüK ­Bm˜˜:¨ËnwİòZ°4`iÀÒ€·dœÊp7:313‚*ž)K3£À,ƒÊL`f$°Y>Ÿñ¼äg¹ë« W.\_uK7‰¬ñä&©K S ¨€ºÙP7ÍlžàoþU xꡞŒn Ëç7nœ‘ž¶4`iÀÒ€¥KŸ9 >|Øó‹6ÔÕ ‡¡ÐbˆïÏ/¶Á>3% ½ù TUUi-dIÅNwâX骲¾^üÉz£å¹Ñü¬òû×À®ÍÏéõeR郌+ðõêVù­ñOÚØhoþÚ?_~ÄŽÛ¤ø×¡Ýó<-s²øÌÎßüÝ)-X£ ƒN„Y’`œ(Ë®±Sq¤ÂÃ¥\#¿pÓ7Ê(l”LjnùŒüÂMß( °Q#~¸å3ò 7}£üÂFyŒøá–ÏÈ/Üôò å1â‡[>#¿pÓ7Ê(l”LjnùŒüÂMß( °Q#~¸å3ò 7}U~¦Í»0œS ó¯:O«ìÔxÁUÓ½à`530V™ª¸aVW;c%ˆÒ̈H>ñßÑÒ„æþåEôŒ‹CÏèH}´6 âT®4µÒoDcŸØ·ßuDä.ŽƒÒOVRz ¥÷DBR2ÞuzÇø–ù¶ÖWãRc;úÞ6 ü£LÅiòØ. ô“óhé‘„¡÷Ž@rÇí5¹¤ÌœM`ö:’µòT%ªµ¥'•¥CVÉÏò M_ôοû¶µáÑo>Š;}ü’€óû«ÑuDDbbcÿ^ípÂ[äéHÑ!£|ð}å÷'ŸÐ·]½LgÄá¶Û’´ß× @ü•_è³ïËC_p8¿Àìãn„|Áè×*¿Uÿ¾Úk ölì?ðD¸ÃÝ3ã)L‡ÚO÷ãw»>Ò~¬Ù‘ ¤?üMÌÚËoúŒ! Zc#lo:ƒ×6½Ž‹”šAt¾Lt¤asûY:!ðõ#±%àÀ¡ýE˜ù­¹H‹×Uf,çQË/´$NðëN0-‹ÈÊ´Ÿ}vFz.göëU'U!ÏCÆt-“ò‡éhõÕBºþÓŸð‘A×÷Î|Ùi=;Œ07O!a¤o”ñ¤¬ ‡fŸ´ö}9ÿÞÍû-N`8¾ù½ièEy…§ Îo”ÏHÓˆ/y…¿ÎÏû~táå‹~wñü}É+e2ã/4|¥û¢§â Ì>»î–‡i„¢/#ί:£<¢ áÁéBƒóÓUZ ñ%¯U~«þ¥}H’¶£¶5‰cŸãy•œÛ?at*±.ÍÍ¡¾°Ý‚•cÖ©øøÚsçÎÁéä7ïNˇ>ðFE]±5Øù?ÛQF8 ÃîÇ#9£Ñ³Õ†ÊOJÑNçò·ÛNáUÍ ˆÁøÜ…Èya¶¡ñÊ\‹Œí”>5ƒ¯ôiõêj\ë稤‚u¿þ „Œ:YO*Y/OÞù#ƒðøâŽêCøÉ¯bç;ÅâiœÅ3 ™•Ÿq„§¿ét§²DD´w’UÍ+4ØhoBUU b’oƒ«‡n¬DÒ .óªàr~£ÓÓ®âO¯˜è:¶]“WÊcÌßÝA•é ¦-°W§rœÃo7¾«ñYXüÍÉ‹Ã}_HB,—“: ”‘ói:Q:¥¤eç°¤‰¯Æ1l”ãTg”׈H_ø§òXäT}áÁ8³/Np%¬ú’&>§©°È¾/Ç|‡Óü@òøÂ—8_üD6ÕŒ/0ûâWª/iâsš ‹,R5/ÃÌGp8,°à’ǾÄ1=£ÙT_x0®Àì‹\ «¾¤‰Ïi*,²HyÔ¼ 3Áá°À‚H_øÇôŒNdS}áÁ¸³/Np%¬ú’&>§©°È"åQóFFv><˜ùŠ *n7`ž£Õyº£`Þñ~Y„bøc ‚¨8~K¢ª@£Ryyåž{îÁG}$èžJÈÈÈðlR¬?þžf ÿ$|;w<\­ôîÛ3÷N¸m-8ó~‘v QŸ13ñ ]l£“ÙEÆÓ¡9®6\øXIúúz-½¥÷jwRãí\¬ò}¯âX}L™šŠ}{>‚«½M“MÊ€º³(§sb†f!¥É†¦¤‘¸7á >>Uދ޻‘â^i÷ר¤Á¨öR©"«»,L#’NYL$CÆÙÖ„S…{±ïÃJmU$:)“¾üF¦Ä"¢å ¶ýê-\ÖJ'úìºQpéã}عÿ¸¦«è¾£;k ú÷ô~󵕾ßI×í={’®³5]Ûmh©>Ž?ÿéœçE›èøbîø‡ø·V½‡-¯ÿÃøê?<„JJï;*M©­¥\,)ðÉÿâ;@Ù0ž.\z¿ð8F=ü Œ¾v¿‡Í@vqñÀ?àKYƒpöÝt%¹¦cØø³ ˜ùÔWQýîP.<ö•Ï¡'•µæT!vîûts5É—„̤‘)ÔnÎbǯwÁ5ò P_„ÏÐiޤ‡GçLA?ï/#ÌA«o©#3쩎08©kñ9Y…%/ûì„¶Zÿ¡à3®ÐzƒÃBKõøBƒñNÒ$?çUéûÂç8Á7Â’×*¿UÿÜ6¤-²/Nm;ÚK ö)´T_xšñ9ØD_ÅXx1)—ø‚Ó ŸÕ¡,Q¡e¯ è`gó¥ŠÏa L%ìÙ_$W¬<¬0†Ùç‡ß¼ùÈÇ„„OÇÇÒ÷ë»ï¾Û“¯¶úŠÆbÌÄ ´66£•Níq8Zao¦ý­mh³ëþ –Œ&Úo üœŒçl‡SM·;<¼8ÝÙ¦Ë$yدÿt7voÀO|cÒR¹1ÑÙ§©¡N›”ã{G£•ËèhGœ¶Ÿ –dè(³J×X~N“8Áó’Õ]MWN½,•_Å_È è3æ+XôÄWпá< ^}å×\8±¯@3†Nç~ðmLp_îÀ´mð* cfàÛO<„˜šãؾûD'þ5—«;éšõ$ºv5—cûv2bÆà‰ÅóqOÌ%¼³}jˆ‡Óå$ƒ£ Ň¡GÆÜE_ejŽâL“þ.'ÖÙtž ‚ Ü=æót·D Úcá+ßûÎ|ÜÐŒO½OÆV;fÜ­·˜»ðÐì‡0 Ê{]=ê«íp’ ×*ɘø }Æ`þ¢ùø|ÿfïÝŽ‚²z­5RYªJᓨQC:HUØÖïXòDœ¶“ïÒ¯B–Hÿ²ÚqîL¡öÁƒ‡jG(OþBüî½jœ£É<ê*¿º÷Áè½QGF©ýQXEFÕAÝ9ý£êÓÅ8ÒªY/À™ ¸Ö>ªþt>åËÖzQ¿¹î4 ·º/E>K›7Û‘êVÀœo 7³.ô(Å™÷h5…ôá¿K;²;9ßXŒ¬dÞLÚŒöÞCÑpìþx¸5|Ú7®¡©µý“¢7…ªã`È€$¸žÍ…ü™äª»œã¦LDoÚ\ù…ɟÿ{•ç® =U/wô|'7-zà#0†6ÓN¹cs'—.°t|–ò³ì¬ò[õ/mžÛ¹ÀVû÷Œü#@tc+º9>t0ò^%Ъ#XÚþŒã„o û Xþ^ƒ­Ù 2pà@Ú9~ªé¿~ýpûí·{åKÐÎç¯CiÑ'¸oú=o]²SUS…dz+20(©CÉ‘ãwÇXD¹­32IÒß;ޱ©ŸCŒ{B—ŠójÔ4É'DG£%¦Ÿ|D—þÒ›%;Ç¥ hhiC¢û–☾ƒ€Qwá"½!÷§‰©Wh_¢¡_O£Q@WÏÿ&¾`°¢{D¡]±&™GV* Ëêž¾9Isu(ý7 IDATúÒM£MÍp’±d§•v‘Qn Ž&ÕæV´SÍ747RJ45TúV©—#.Eê?0·¥¦Õ>ˆ%þ,ƒ8¿º¶óoqÝÍ$¡/n§zÔoFG'`` YÅí:Þt‹¤íZ#[õp;ñôÿ^㟀„ˆk”ò´Uã­Mù¸@Óÿ皈Qux·œVkˆ¯ i6‚ËAF‚ƒ ¶ÆYz}ÅGÊÙfo¢¥(Z%Ò? úã1jBïÔ“|öF’&w0FsQ·gÎgìø^íIÉ`ÖþÍð•¬>ÁPé…Šï“©Éô¬ò[õÏí€ÏñÔÐ^'|%«O0Ôö*¾O¦J¤±ýs’èBx)èݵŽÉÓ£ÂLÓæ8¿ÎŸQ`–Ñ£Á`–·S|0ƒ-FàÕ·ß~[ó9¬º>£&áÎý¿ÅÙóïâÕÝL? 6¾ Š];⇃ÿò)N×Åïßl¦ô4a;è­±g#Gâ¡ûÆc¥—_=Š?¼EéŸw§Ÿ¥ô#‘“5@£¤UdAxì{ßÓ®‘äÈÖ³ûð³mEÈ|dÒzÚ°ÿ÷[pÜ–ˆ//˜‹±·.ãø¥ÁH¹r„Û˜»KŸ,¼K@Öퟠÿ^®÷3ˆ¶)…ù'PY4Y©,,ëƒãïÖÊråì *KîDkò´'âƒc•Ⱦ;=ÉŸV¢Ñ¿O¢‡ŒÆÈÑx÷ 7ñhj¦½$‰1´Ã€ŠÙtUÕu¸£oO½Wnk½ âTüõè1 ËŽª¿ž¤0pÇíI´ú¤ï%iåONTn™ŒÙh’É-”AK:>ûì$¯ÐÕ"Cøc¤gÌ*}#=)£YŸ4ââ*¾±<ư‘ž1=c óÎh–D^yÒÓ¯IN_¡2ŸAúäÁøüèøcÉ9ì~ãuäÌ{\“|ñKŸ‚Y÷;ñÆ»b{ž¦ ?_–€&[­¾ò¥zFê$”ëF¯½rZ0õÅukÖéÕúï =c~¡Á>»@ò…ZžPñ¥o[å7,êÕ£ùRGÁÔ—QŸVý{®ºÕ{S·®»0žS E?˜¹ÙG&x&Æ0?<­ÉÃï®òð #ââóQ=æs†ùRQQñ òºòòrm³`mm­g°56ré02ñÏù牌ÇÎ+=2½{ÑÓ;½éÑÚ·¶!ÑÕ\‡&•_K§ ‹4yÛyNçô„Xôh¹†zž¤)=1‰Îð‘ÞФ/­{ñ#,G-÷éCûêi9œ–žûô¦Ïíh¤7òVRObRZlh#~‰±hhhÒ.°î$¿›žðð›N´z%v.K¤Ý†úvŸ”ˆèöVÐË9¢c{¢­éiS""cDÒ´·"2!ÎDSm6ÖÕ‚¾² &>‰>´koõ¬Øè6Ô×5v–—–Ú}évÖ} ˆŽCb/Ú`I›6¹)ÅÆF“>êàŒJ@o:áI×U;¢’Ð+&Òœñ¯§=^„¦ÓúÑƒÊØ›V h)•/’7‹¶8Ùƒ~FJSõìE??$cƒb¨ìMˆî݇'sZY"¨œ½@¿Kùa£C ÙI}ÙÚˆ:ªÌÈoy¥nØggl¯ZdÑ 5ÝÈ:|èé…ŠoÌo ¢jº‘¾UþΓ¦ª£@úUqߘßD/Ôt#ý›©þ“““ñ*møÎÉÉÁ¨Q£´•È‹/j¿ ëÕ«âããéj$žþyms}ZZ† b,’Ïpzzú·)¡œžÙÔ‡—ËyG?<³Ïo±ò°µ*jÚÀƼ/§z¾R¼ãT£Â;%ÈúÁ€øFØáþ~ï3½­¶ºú6Þ‘,U{3®µ4-¦B®½õ54Òwzê*¤–&\³Ó„GÜx@ùj ù¯R~=·ço'Þ-6\u©à4[ÍUü|~@%FE‘]EòÔØYÿÞ®=Jöǹ$žwã7Ô¶x—U‘µ±¾–ÊÄ'9Ò¦ýÆŽ2¸Úš5y"HA.úLÀLS+?Ño!æ…â"9£« å1wÝé2øÖu;}ë`ZmökTV¶„ùH¼ºÏŽöy\Õ¢[lup«N›ðwð\ô+†kuW©üd»ºËɼȲa‘íŒÏå§ÚãúµS°“²6Sz3ÉÙƒò·7^£n0äÚ줟ÛÉÈR‚ŠÔV}ˆ8]`Ñ/ÇäåxÅWãTØ,qT'xª/21ÃòöÉaþœàpšÀªo¤ÏiVùÝíˇBEw¾ô©Æ©°¯<>HU?Vý{ïùPõìO§*žÔ‡´u K_0kÿ/8¾xu1ާ,™¶ÌžâfF1aÆ$Í`?ì:'ñ§3¥uÆöŽñY èµÑO÷ŒN*Q‹§%zýƒ€+¸°JK`¿²“ó)o€AÓW—»¬ÂG˜®ÏΈ.•N’x%'ùµý‘d ›ú>tÕA‹6;Ò¼ê‚-¿w.•‚7¬–_Ú‘ð0+…G>*;ÿDQwjSöæjÈCŸ2 ¬úRGLW`½¾BåÔµö$²07Å]‚Î9TZ«¾”™s l•ßl¸í¬_5†õ*: VŸRŒ/°ø*í®Â*-U?TyýÉÁtC¥'²0]Å÷Ç+Ø4•–Àâ«·÷Vv¡Nmߊg‚è¯ÎjìÚº×oÄ‘*#¾›NÀŽêDÙ­XIò®Ü¸7ä1† x¹h¶8Ó…²Þø,ÎjKt©œ×SÚ;vMžW ÂxN:ÿçf£L*®1M wÅ(àŒB˜$„Æè¦ÿc/Â,ª¨%ú Šá–×~n7ÍßÃõÙì_5 ó·_þâúIŸ÷/'l%›=ߥ¸‘ñ³påf”*BóYä.šCdß5{^œ¤”¤¤ô¥‹ rPH¦`8uQî®ê>‘,œ›TÔŸºû„ôœ…k°7`çªvý;&Ïß…û¿üEºy´+­»çÌGAU½½¹/Î_„ƒÕçŠN›5:û. SµÃ&Ïîÿ"F$ê?H ÁúçvçbNAU°èS¼æ³<–¾òXz=…>rä8öƒq¼J §¦rû £S‰uinÅ(ðÅ€è¶aTH·HñUB-Ž® A°æ3žzê'殣Øqr/°vÓ*Ìž÷$r†R÷r¸p3|¿l÷CJßd$öï‘÷ÍĦŠm@ñrlgY¨{u’]£¬ÿ)}{#²ÜoS+·éïDö,ÎZìy³·Ó‘ãá­ÐËÊÁ¬œ,,ÞÜy°kÖ º‚+5Tö¨DŒ;ÉQÕXO:Z³K/KPºu1rÖÐrgéVÌZ¸‘–QWvè­¬kÜ:™µf—×@áSn¢Wu„d•·Ãœgq Ór,sµa׋ ÝõyýV†˜“åþ¶`#¿7­VÅ&&#mè}xîSX†büËvêTäªt´ÿÅ›õ7<^}Ë\ªu:j#ÜìØ«´—œÅ¡Û6l]˜Ó±²hè7úS¶})‘­^°$S£g6ÑÒýeºSƬœÇ±¨€§¿Îi2¶ߥ™K a)â"h ¢•Ngå.,ÌêO6Ð_¼û2õ¿Í‹±Ðh¬8Kñ2½|dÆEøìß"N ß^¹—Æ]ŽœY³E2ë ±û ½l+24E-ÒʱÙO94¾™õøãægÝýx¶ѸÌÎVŠºÇ_£Ã²B©S6ý{êÔ)””èã û6sbˆAÀxa\)àù—q2/sØ,^p=~(F'“Â@˜ª U¼[®Úµ“—ôÃ):*¹¡øY,šð(Mé™yøüR­|βÔñcâ¨Dìú¿éX¿Z*~ö4&<õ¯ ­³B*±*u §íAÝìW±MNÇŽJ'F?þVS†;O fýcA½D¥MźLà—OÓ2¨ÙÝ6J 0ÿåËØtžVv®Å óÇá2~5pàdñIíLL–ÕÑÔ€‚<^yY•éÄžŠ8öýi€=ÙÐùÄЯ’ÜÙy˜@W/^¿Ã=ˆöǤéý°júï¡ÛRexiþ+˜öÐçè¢Iòó–`ù;÷â|Í ¬î÷2& ‡ÞÏŸÂù£›¿j9޹-"S¹«v!uÂ"LÛsŠt߀ý³Ncrê Tj’+ª 0}yvž§;škðhz8–0úx“i@5ʇbáºlüò j«v uò¬©h†«á(šMÀfjÿ‰£ÞՙÈ\±—kþ Ô¥Ñÿþïâ<¯zÕ¯,Áözc¼R\€zÏÊ¢w¿% µDN§×ðdxfxÁðö÷®¢ñãä·PÑìÀÖóÄ9}-±£±r'«qâò>ÌN<¢SñtÞym#[á:`ÉwßÔ^(Ô¾ÌT›N¢¸ÞУFb妗‰ü—ñ“Ç3µ ®+Ò§âä|×è$ÚÿYB£Eñ141%}0v裚ޥg˜—C;Y¿x~~öTÔÐUök0Üó(£ª®:´ËóF×Í5ÿ‰á7 {O˜0ž‡ÃfN5Ø@P³<݈7›—Íâ5VþÎ) _d2†9Þ/qÉxëúv|ðúË$~6~¹j%p•–i"¬oþ f¬]%ÓÿÕOþ¥¿¤ïy«÷ctT%~¥¡¿…U+ Ñ|œ^ò'jß¾ÌV•ïãꀅÏèË~‰.²ü·:…™óR‘BJ}J*’“C[œÔn*;Ãh`žù?ÂX&;hV`9Êëéu%ÕP[Áí8¼åed®-DNg‰™s³±¥Þ€ÏÁØ¡øÑÞ<¼ý¿1nN.^Yú4ŽÖlÄØGŸ§j*vV>‡g¶ââzþ¾dºÖš?ƒ¬ÆîóП ‡§ebû´Mø>/ÝÒÇÙèÇT5g&wå__§ôµxŠòp£~ðéUÈ^:‡Ê^ÀL=«þ·ïf.ŠÃÚç–àfëÞb°¯®HبßÃê­ÂLÆ6%í¯e'|cXe¢Â¦Ìno•ðíÈ‹ÙOL$Óz6¾þÝxðËe┯#—ýowMÀ^êÈù÷â)ÍÎõžÈN¡‹˜fã›ÿ6Pk¸üîË9Ì¡Ÿ÷÷}êĶVÝ‚çéRïÒø}ŠàÕÏ ãÒÐú.¡û]ÿN ò4¼-Ð éq|éÖEé$ºŒPJ- ž'ƒ‰;û9z»ú"ö€ßY‰±Ó&bÛ`ÍÆÍ8w|l9A„nã,™½=ˤѱ¤ÂŒ²ù–ÛyßAb=×<3Ivn5êþ;›Ïã‘ßѾ‡é™XDo„ŽO딯#ƒÝÚPûs¶/-@ö†uèî ðÈ׿Žz“=û»HoÙì¼Zœ6,&ƒmõ¬™÷%\¤•zOÓ$ÜŽGW±k¹;ÿÑûpçøN1ÎfmüˆWe,‡éØ"_³dóBd.²aËþ5xøö‹Xµ—î_‘ÄÌžÁa÷-±Cn$aE0 R>ÿÖ ÖÞÿuº”§_j¢lt9[#bˆÐ&i7“>ˆ}ERô_ŽÞÒz…éÔcGÎCóùÑøÝ/_¤ÕܬȯÀg¦ É¿¹/+ì‹¡dþå9Z…™´1]W>øbb42¾ø- ž.UrÚí°Ùl Ï‰˜øÈ2šñw¢1i8ÆŽ‹Œôzc¤e»¬ÎÆÒé¹È_°¥Q·‹ ~Æ””1VÃO¨Õk¤é(},}ë|š–ò_z­D‹´•¾‰%À×Þ亊:’•e®*Ý…Å©ÓÉØ€¯îo.;Ñãeø·Þ.ÕìƒÚ’Z­ yy ɪÉYŒôSª½X8n9-”ð@…áãÐv…E´ç¡¶¯Ñ¾½öÓ_R¼$¬.-Bi•6Õkñ õMæW‰XüóëPL›!—ççâ»3Fêù˜'2âLT¥%›Éö@.¥/Å›%µ^é7R ÐgÕ‚ÎÚJ”^JÄ´'„¼ ”ç…OMöjˆ4–«jÀÓŸvÔV—`ãÂTjç¹øÉ¼Ñ:ña*V>­ë§õÓ±™éH” L)°í$]ÏMá%KæatR#ŽsšÒžöWPß«ÄúÇ'PN꘨<4¢i’¤=tÛg@•Šû³©ÿìMTÓm°e{_Ñöi󲿱ŋ° ‡_"‰—-Á¼3à ëÕÙñJ&wñAœ¬u¢rïzŒ[^ŒÁ>&ý¸x¶þi\qÿ–˜Ò»áÅ (º¬QaJ—8h(FÝñÐþ¡A‰QˆJA½¯O¯ØŒ¢’Xó•qý˜õÁøA4æ×»û£ŸrðżſÇÛ¥z_/Ù·…äywÒðU[YŠK‰£ñä~Ž ¤Ë·J/j²Ú«Ë”1ÉIce)ªlRÊJʺ<";›¶n»rlˆQ†s ÔùW…Y c8hÚÉ‘ ÂDŒCò­äé{ÕÔtDÇÅ!)) I_ù5§½€ýëÐ÷iÚìGÖ]tÒ"w›æ÷ÏûŽVصßý²Û ŽÂ´*°!q R£õ 6ImÕ:ÃÎh Ýðg(~rbÎÏçHô3¾ŒùX±­ó†ê½µÃ®7dó‹15•#’95c:â7ìAÍ‹Á ŸƒüÈÎÙþj.¢‰gßÌEdQŸÂ´AdØ$DzeôI?%L]‰ëx±]wCçý{6äà¥ÉãðχR°i…¬m †î_|g52H&.O­4¬Ø†ïÞLjüØÙÚ> ¬ ÝÖ¬pv¬"%Žƒý| V’îKÙ8±m5æ“ÜÌ7cÎIl+^‘T$¾[÷ÎKdØé²e.ÉǺ=³5] mËÿìhÀÓŸé*ï¾ônçmp¢æ ÷'³™¨Ø³K'§êí4: ›Ü›ÛŸ¸ÄÌ\¬Í¦ÏM)Ô–¿ô /ÈÄrÚ»RdOÄÃ?ZüE™Ô÷Òq:g­Ö„Å^èI/ɺ‹ÅÄEki`™L|Ì7¾‘ˆä‘»n²_™úU°y_ÙSàglᬞþCïZÚðòt⟕Ff1mv¤ …‰£Â Ú 5®o4Òÿå"ÖR?—wsí:L‡\ÔÐ)X—KãJJ4fQ>û¥÷ðÌòg°»¼ÃÐ×1ýü¥½ ??µ9§_¸ÌFïïl¢²Ð^$ÊbÖÓ&Î%“m9R©ÿòþG³rè\¯âWsõ¾ž9ÿ<òO­ÐVÏü+Ò“xìM¢—«xiA–†~|Ó0düR7@#r^F~yÜ]Ûq Ë ú)•ϤaÆiF'²Äá@ŽÇ¨0žS`dÌÜlŠ#<e˜^=‡îü…<2¼ŠÏ?¸áþÃóÃü ©¨¨øù]yy¹fYD¼Iœvhïâè» + ³ÓÛ»ƒÔ“補‡“V'ši€IN §ó%»“ÞD¢¢¢èšáZ8¢é[¤afù©°YhÅëÆ­ÅÆœ¾øýÜbì]ÜÙÚaž6^j‰MD²Jœ–cgÑrì¬Íxr¤i…$7½¶ÁF忞®Ÿ®ƒ(‚…r4Ðå»ÜíÅ¿ÓÛK¢¶'€a§§_k} qÔ'tZZɳÓÈkijAVÒ<¼a ¾þè×0º?Ñá• ›‰´ÈÕ`Æ]®D­¯:y%ÑÓ—IþÚfÄ™ÐV«ÆNý7ŠúnýÀùÙˆi˜QSŒ}›…Šf ³œ±î}µEëÑwÜ^7¿A?}ä,f}Ç2bõ±Á¬4|ÑøÅe±!šö~x$A¦bw)Ï'ؾ}»vŸÏ}÷Ýç“ß}““ƒQ£Fig\¼xQƒ{õê…øøxDÒUîÏ?ÿ¼fT¤¥¥aÈ!>é#ÓÓÓ¿Mqåôð·hõá/W¼Âf‘Ï—ËÃ×ÄÊÃF‚f(øjs”æùÁ°?§þðnù´(šÜÔ¹-P¸3x5Ô@¨ëéƒN@Ä|ÉÎ;þ¹–/9¥3«Ìœ•DRúz+¡×’bZïÏ\´ëË1ÏdzŒ®tëéÇNë°© Ó $7¢Èh XQ×OׯòZá›\!·n;æַ‚)"Mr¾úâîÄš PZu²‘dJNö‰­q flQåŠòz‘!ùƒÜ´ëîGö3Ÿ}ÓabÏCüNæäé‹üupŶnƒ€‹aÖå¥C+*ugwu ”#I¾¸,>„ ªNÝDÃä±!péÒ%˜¾Øh+©´b Ÿ|át!Î3¹SÞ.ÍÏ­Û›»1uÉÁ ö¦d…>3à%z>¦†V4x$uPŸo2þ <ìùhøVGG÷‡k¥YøÌk jfÒñÄ3oâ‚ÆÞ5 Ï=ª€Q˜½©5ÿYC+¬4Z$¦Ò¯/̦›Pißœø3g®E1Ä à’0ÜM§ÎÅLÌŒ ŠgÊ2ÔZR™ ÌŒ6eä+—ü,wëjàÊ…3·®ð–äŸ9 XãÉM\¥®À-¼ u³a7 ó¯jøÃó4žPOF7Ðeƒ€ó7ÎHÏ [°4`iÀÒ€¥Ïœ>ìùTÀºZ á0ZŒñý‚ãÅ6X£Àgf¢ä¡#_ªª*í±,©øÂéN+]U¶À׋_ Yo´<7šŸU~ÿ¸Ñõq£ùù/½þ–$}q¾^ýÑ*¿5þI»íÍ_ûçËØq›ÿ:´{ž§eNŸÙù›¿;¥kbЉ0KŒeùÂ5vj#ŽTx¸”känúFù…òñÃ-Ÿ‘_¸éå6ÊcÄ·|F~á¦o”?PØ(?Üòù…›¾Qþ@a£ã;ZšÐÜ¿ÀèžôÛýžÑ‘úhm ÛÒ*p¥©•~#ƒøÄ>¸ý®»èÐwqèF¿Š“•”ÞBé=‘”ŒwÝÞ1¾åc¾­õÕ¸ÔØŽ¾· @ÿ(Sqš<¶ (ýä¯wÿ’6oµÿÏvÿ綪:‡ñœ•x ÁCÅUEòÀ]1 8³f áaæ P;§«Ÿ UVVæ‰cEª(==<ð€niÙ/`ÿÎ?áØ¹&/6÷Ìx SéÞÞÚO÷ãw»>Ò~¬©"¤?üMÌÚËoúŒ! Zã ÔÞt¯mz)5ƒè|™è¨òÙÏÁ+¯¡T¶8´¿3¿5iñºÊŒåa&jù…–Äiø­§±uÛ¸Úožš7‘nÓ ÎktFú¾è©ú7¦û¢§â Ì>;#?ŽÙ ̾¸Pðü…†øFúÆòqºÐà<Æt¡#¾_òZå·êŸÛˆ±½q\(í9T|cûãüª3Êcl߯ölLWi1lÄ7ò7òãwîøÀvj£åß«óFE]±5Øù?tùá$ »äŒFÏV*?)E;Ön;…W5ƒ ãs"g$ãÙ†Fº÷úZdl§ô©|ú^®UWãZ8OÖ®û8ðÝ dÄÐ †RÉzyðÎÙ „ǸwTÂO~};ßù+OËà,ž ɬüŒ#<=ø´Â'KÁNŠ–²ÒÂѪ“¼ª/—ñV¥àªt–4ñ9^…ƒ„äŸùÇ RùÝ48¿‘Ç©NdS})3ã ̾8Á•°êKšøœ¦ÂÆò¨y6ÊkÄ$/|‰3òâ°È¦úƒÓf_œàJXõ%M|NSa‘…}_Žù§ ,øäñ…/q¾ø‰lª/<_`öÅ ®„U_ÒÄç4Y¤‚Ãa?<¾ð%ŽéȦúƒqf_œàJXõ%M|NSa‘EÊ£æåƒ‰ŒŽùŠ Æ´.†yŽVç鎂yÇû%ŠQà¢âøe,‰ªJåå•{î¹}ô‘ {*!ƒŽ©dÀ+¥þø{šA€þ“ðíÜñpµ:áê‹{'ÜŽˆ¶œy¿H»L¤Ï˜™xn3â{ ØEÆÓïå]m¸ð±’>8õõõZzJïÕî¤ÆÛ¹Xåû^űúþ˜25ûö|W{›&‹”ugQNgHÅ ÍBJ“ MI#qoÂA||ªw#…ω$ç¯QIƒñj´ínUÓâCYš.wG㕈ãoÿ.€úd ê…Öª÷°å¿bøcQWtgè˜æ¾£rðØ”‘ÚÆÙ£»°³°L;{`@j_4\nÀ=ÓÇîŒ@Ñ¿ÅѶ{±ð±ñˆuœCþæé1wü¸òñ.üa¹^:ÕmÄÓ05s ÖÐÏýÙ‹¦í² ÷LãïˆEó¥ñç?½ƒó¼¨=_Ì}÷¤qæ6p¤Mø,?Õ·¸@ø¬[¡Áy–<Ý«¾_h0¾ÑIšä7Ò÷…Ïq‚o„E6«üÁ­<ÒW ú‘zP}«þõÕXn›¢ ö}¹@ú5æQõ,iÇá@õÉ8¡à’Oh©¾”™y ®ò«ò3M¡+>§wÓqE©•Õ1XšÇwbŠQ fÆÂTÂ*NP° €‚,Äa~óæs¤Ož<‰k×® âh¯ÀÝwß­5"ެ­¾¢¥™˜ÖFºÝépð‰D‡Že7tX2š´ýZГŸ/ò¤Ûù4HÝ9éÐ Ý E=d;µ»Ž7à'~ˆ1m‡°¢{ÄD{èqì uÚ§Š>½£ÑÊoNôÄiû jI†v´›X¦–_`ñ5îLKs´ÂB|øÑ]âSÆàñì{Ñ»ùämÙƒCï—aԌѴæÑF§}7£øÐ! 7w•âÌqz¾0·_>„d Ï=xü‘,”ïÊÇ{Žfº'­Dî–&:¨ˆNZsßv§ ¤­Rp½¹z¦â+ç`hßf¼ýë-øäÐ{¸wÔ $?èƒf-nÕTFǾƒ†>cðÄÂ{p4o ÞÙ¾·/y}¨ jYß]P/OMX|Fô«q^Än¾‘Ÿ1¬Ê&°øF\«i‹Lº‘¦¯¼j\wñùa•—Àâq9¬¦ ,~0éFš¾òªqÝÅ7æ7†U^‹oÄå°š&°øÁ¤iúÊ«ÆuߘßVy ,¾—ÃjšÀâ“n¤é+¯×]|Õ`ºB[7òèFØl^6‹×Xù3 d¶™ŒaŽ÷K\2úóF/ܬ¬,¢ Mܘ1c4ƒA´tÏ®­ÝA;ªãÏï”#í‹_B?ýë v´÷¥ï çþ:ašî…î8»?¥¨>¨?Q€]—*´ä¼‹3@ïHýí”Ì@=›+Òm,Ð[½C-™&X™Ûµ8;ÿæñ±û¢%A9m&ß徨\"i¥@è°î:ÈÄ஑)(>²çk´°Q[;áHš’ó äföÁ…¥8ó­b—*õ#E²r¤Kˆ"qÛïÁ{¿£D68(¯{A‘Ì+B–Àô´þC‡¢áØüñ0r¨Ù_×ÐÔÚ»Bó¶¸^4›®\Ô/a©;Âíî YÎÒæÎv$™JRô›ÝçŽÍ\:¸ÀÒñovù»+ŸU~«þ¥Ís[Øjÿ2bw1¢ãXÑÍ>ØÁˆXhÆ䎠?£À8áÃ*î ¤fƒÊÀqÛm·¡š¾ñ÷ë×·ß~»{¢Õ$h—nÔ¡´èÜ7ý-Òå´¡ª¦ ÉôV>d` PR‡’#Ç1ˆò¼]ëù“$ý½ã›ú9ĸ't©8¯FM“|Ý`ÖÓŠO>¢½Ý« ŽKÐÐÒ†D÷µ†1}!¢îÂE8]ýirmÄ•:â=ýzºImþ7ñ…Ž^,ºG”¶àÅ_>ÚD­m5ǰéµ÷ÞÑ3ñDÕ]¤2¢A“9OðìzÓía×›Ðت‡ÛÉ(ˆt×j[K ZQhº¢~`Œv6@ ^L§½©JÄSd»ã^ß” èÏ?4£êðn9­˜M1ÛZ[ao„ýª›&å£E3¢@.¡/¸^õ„{£p{4­<¸Â;¨šµ'/}êÒhCÅW²ú™·oöÙùlOJÎëÁ_xþ­ø[å·êßjÿS§èBúºÒý»êº>òª°ÖíÝ„;„ÀÉŸQ`–ÕÈ”ñ‚fh$ªÆ4 óg^xûí·5ŸÃªë3jîÜÿ[œ=ÿ.^ÝíÀ¤ñÃa㠢ص#~øç1ø/ŸâtÍQüþÍfJA¶WÏ•âläH=s Dˆ?ĵótM×TÒÕ£ªP¨ÍÞv4Ó¤ÔÓ§µ¥•VX"ÅFÐ&©”ÁC€?ÄÇ{w!bXO””ThtxÛNþ‚ÒT’O¢PyàˆöI„P}bàÑCFãîQ(<¨1DS³iBsÏNošd0ÄÐO7yí£©µq‘ž Ô\¼ »£ÑZ£t$ö}9™Í&}c#=™ÀÌÚ¤?¿PñòÃFzÆô@òñô¬òë¸UÿÔñ}8c{ ÔÞBÅ÷ÁÒ+ÊHÏ+‘ä1âé]ïö¯ògYùagÖÞTü°: ª0g3†⫪BwÂD™®B'"9¤"8l¬TµÒ0iÒ$í&A1 $½Ý•ˆGžž‹‚o¢¤â¼I¸ž´ëÓÑ‹¯>3û^§ô‹Çñ—7å^m }B&ÍñZz§_0¦öTž^‰­¨¯Õ÷*pØÑ¬OïQôk‡–¶Ð <¹ž¤ØvŒž1ó~¿Õĉ< }¡?Zõü"?ûmô Ã_ù™€¦+nLµs8ôö9 â?ÿ4 wFGùÁ×PN›÷ßÓWJñaEî‹ÓsжLwäÍ âGŸMÀŒñuØõþi””ÀçF߉KÎ23JO@zæ8Vx¸Šáã?×ûÂуèô€Ì;£QX~[Êã>˜~Ñqú ~xC¦šÓtD¥cþÜ)xýµ}xgÇV¼£• ÿ0ÿ1$¸?½èzvAT^Ö;i+Ò‰TýiôGòr8>Wõ…&çXø«xÁÐ7ÊËyT狾Ä1žÀÂßHϘÎyDF‡Ã =ÁU}Á ¾Q^¦©:á¥Ê#qŒ'°¤éÓ9”E`Áá°ÀBOpU_pÂo”—iªNx©òHã ,éFzÆtÎ#eXp8,°Ð\Õœpàåešª^ª<ÇxKº‘ž1óHY ,ôWõ'øFy™¦8æÆs „¬øÁÌͦ82Á31†ùáiM~w•‡ žMÄç£z8Ì æ ó3¤¢¢âätåååÚfÁÚÚZOEJ…¨•&qLmÀ?Oô™^‰½h®£ m­4QÓáD±t]©«¹M*¿–ž@¿L°Q:ãô„Xôh¹†zž¤)=1‰Îð‘ÞФo8䯣ÊÃpDtúôŠ¡ýõ´,O«â}zÓç‡v4Ò/ZI=‰Iqh±5¢ø%ÆF ¡¡É³À=‰ãò Ì>;7©¹Or‚VAZ¤û£¹ ±=álq ¶g4m t¡Åî¤Ê³Ó¦Áxô¦“•tém=¡7´ƺZ´ºšpöt-úÑ!M‰=ñ!m4üð’ãg-À¨Þ=Ÿ„X—ÒOú¥FžTÍ­¨»æ@Bï>ˆpÐ&MâÛ£ $Rld•½©g+êpÛ©èåƒfd4Ý?ß‹6`j›:#µ;æëêHÿŸD÷ì³3êÇ­ gÄ÷$¸cþpãùÃø‡šn¤îò’ÇÈ?P8½PÓü¬ò{÷'£~é·»øÆüÆp þ¡¦éßLõŸLW<¿úê«ÈÉÉÁ¨Q£´=q/^Ôæ´^½z!>>ü³ÅçŸ^Û\Ÿ––†!Ch7—žžþmB+§‡g6õáårÞQÇObìó[¬<¼$$O2ÚDü/§ÏB¾R¼ãT£Â;%È[S⸰ß;Üßï}¦·µÂVWƒˆHú?KÕÞŒk-D‹©koA}‘ôžº ©¥ ×ìÚ7{n< ü µ†üW)¿žÛó·ï®º¿Tpš­æªGþ2ê(1*Šì*’§ÆÞQV!؉%øŠc|=ÞŽÚ«ú¯%„†Ço¢òQáy)Ÿ-ÑZ½ 7~Œ”…ósYùúcÞÓ¨u:åñÃý{Pë! 3cúÒ^ZÒ·_«C 5Ö2´_:tü×ê®’¾É~$~¬§V| ­"´Íwv›Òl§z©m‰Ðd%©(»hY÷ý—_ô  ¬â*EÐ@IS}(a±æ9¬âqØ—NXõô9ãÌœäõEOSa_y|Ñ<Õ7Êg•ßû›¿ªg:Uñüé—Ó¬ú·Ú¿¯¶ÄíBí¾pºǃ¨ ¨æŠ÷CØÌ(0#&̘¤ì‡]ç$þà¯ÓtÎÑ#N:¥¦àôÚ´ä4’üZ,)úoœ`C*-4¹²ã°ÚgùÛè]è)ö–G|‘IäAt*æÿ2šÑJºë—DËøvÔÛìì‹PTÓÄæ1¡YG¤ù;X£ 3¦a,¯EÊÒ€¥K–, Üú`ƒ@Œu³}K&ó¯:O«¤ÔxÁUÓ½à®|>`FÂ*S/·\À^¢ÃGQ^s 11½< #³F£ÿ-~o—ëÁVÒóW½²ÇõKEZÿDO\Uávl£;«yr6îò£§ªÂØAx_yr¦_<a °4Ð] èÏN[-jmNĦôG¢×hèDeÑ~¼_^ƒ˜¾w#›n^íhñBÙ˶ãñ§~ކ‚«˜[|‹GûÂêÀï*Tºu%2ÖÒý%_BwY8k+±ÿÀût4y îŸÑiÞ2ûÒIéæÅÈxé$²ûMÀºüw[†®êáfηcÇÌœ93(y¥ Œç¨ó¯qn6Ê£âÓ´p°+ÆÌB˜$„1ïM®:°Yq)7u:æÌ™ƒÜÜé˜L‡½tLýÁ‹oÃæYü=h!ŠL~xÓ2DÁl' ¾‘R}ÒS’óìfTñ¯^É]<ò_XöÌjOXíü÷â‘—ðÌ3/ÄëœÓб4ºü÷g;ö®_ˆè¤¾HIMARt6©v3±cdzã>n*æ¬YƒÜ©™HÊy•îö®JâhºŠü‚¤®[‹tëõr¸V|Z»íµ;<؈×7Ssç`Íœ\d¦'᎕n’æ:I}èYì|6 …Ý–¡;ò߬y9‚€ý`¯ð/ïØ—O Áä GæfFíÒÜŠQà‹ Ðm!‚(èõG©=‚“— ™Ø°¿B«,ÚSSq ‹Gx[ÒÂØäꃎ(?­¶ÕµlEØQVR‚ÒJ£±á'³Ÿ$'½Í—•–ÒÅ¥¨¦·ž°ºhý2‡ìÕ{ÐLG_®8ŠÕ¹@ÁË‹0ý…«QOl¡›,wa ÅÎLžèžI”š¤r¥!†ôÇŽ­ Ù›õ™7ÄBR‹…ì[úsÕÞÇÔ¥yX°n?(v ks‹±hÂS8B·ªÛK‡Ü—‹‘½v?\ÇŽáüžÕÔà—ãÇo”ùæE±“²§`÷Rƒ)nç“¶í¬E)•µ$TO} âÓâºîìxíÿ›Cc\.ö׸pÌu«3åS_F þt’8h$¦L©±îž ]—þfÍyåÊlÙ²|ðæs8ÇÆ@˜÷_Ò»47‡bøc ƒŠŒ^nœ²=¿BI“»n?˜æ–+ ÉiC‘–ìµ®è%³±ƒØ+w`–»²¹Â¿¸Ã}ˆ ›¦¤ ¥ïãX<+Ã23‘‘ÞköVéôjK°fa–ÖH"f-Æâ…9ÈY¼•Ö$xÚŠ¬ˆ,l-áPºõYDd=‹;8‚qI)Foó™™HI‡í•úòEmÉv,ÌÒÞ¬ÅÏbaNžÝZ¢ÑàÕŽ½ë‰Ž[ÖÅ/îÒx¹;yItzalT,ú§Å6íG6a¯ÊC)±:þ¿ó1|ø||ÄÙÍå1-Ûµ9nþY ×£L/ѨÄÖ5 =²E,ÜŠ %¿Æü<¦qqØìÖ…‘¦¶4ÀÔŸ/~|”°²ñôÂéèô¡xfÅ: çãw•CÚý÷2) ÿÖÞ_É?bÚGZÈ`ìì8°q¥§ÍóJ#÷a›¯¶m+Ââè¾È q"½o2i?0 †G¶®Qx-&^Эä&bd2ûƒ0ë;dáãe8eƒ?0¶ç&yXΣS§NÑ ™>®²Ïa3'ûdÜe<†Ãä˜JLæe&o߉u(FšYS «8·Ütõ’&ïôìáÝ“ÛÙ ö£¦á2òWgã•幨ã^wL̤óqiâNœØ¿AãSðñYòk±qQ&VåcíÎbœøÁXæ à¤M?ŸÒa#ë¾Wú*€ÃvZ_Jäƒ+£Fൊme£á(Ó,¦åÌ iа(sòŠs‘_| DyÅt=~dsÑÆ…ô¦ô2Öí?…S{Ö’œÓñ‚(DůK‰iÙŒq õDÎkÀLÁÚ¢6})-»îÇùS;Ñ/o)†½°—°HÓýdp,Û@z:Qˆü9C‘œ>Ë4´’³ó(¾ŽKµQ­à-¨@ý9>‰ß¼ °ïCÝ(?ùÝ0JîXÅUÄÅëK^Ë_ÉG5«^ô¦þ€ózÔMÿ8QK·¹ò®O­ÖQµ“—¼€‚Ü ¨ ñ¡xÿwÑè$úhÛ{_þ!^¡´ù'èò±óØô´ÊІõnc_&ñ³^Ô—¯‹6>… óWáêÓpôD1öä?Bktt¼v·Ûr¼VT gm~µ$_#ÜÐä„?¨Ü-Ø[&L Ï*4^»›9Õ`A5Ìòt#Þl^6‹×X™¿wþ!€*£_â*âÍ;ÜG·Pç莋:÷VýÿóÂoQvüªFªê*™çinUg®Å¦ç¦!ÙY‚”zž:*ì§qûfö<374 dz¹K°ˆnöWAÚ*ÝqåýMøÁÌ¥4ùë’Ûè~ÛɃd~ðÊÇ*Ì=ÈXŒK^&~ìlx§>ìÝù§[¹o}p?ΤaøÿÓý„&òé{ÿ •·w'&Áý-ö…P»"šh¤‹Õ‹§i›»Fj«–6dñKMþ`ŒŸ2öïwã§Q‘Vاõ瑹ßÅÓÈê©©X¥Pà\QC¿Š=ëѼ)y‹:R)Ñ_ÔmG1%e™æªËDaÃ1Ü—˜B ÷Ô„ó—àùUõX´xFsGŠM7´íZœmnF³×s” ÂJ‹7N`ËÚe(~y9¦f¤`å®J-»wÛVÆ 7ñúî½âlxõS‘š:Ó§w<©©©øÇ?tÜ+ت›–ƒßP¹/Ÿ¿ ùÛ´å·\Lž øÕ‰JÅ‚»ªY)`_ „®ÒRòÉüËs´ 3Š1¬dó ú3 |çðÍÄh0˜å½iãå<mXÈ›¯<»Ee•¨,+ÅÞ­/bÍöR¹OãýÃE(**Òv–TžEÅ1BÍ\Y_Îĵ2½ƒÚë|Mÿ ÉØÁ´Q‰ÂK°býf¼¸0ËyÒ•ÜýÚspç±kãbL]ʼnºkºÂƒE&Æ„+…´„E¡†Ëuˆ>I+Yú#¬ß¼ ûNÖÒô\‰“Ãï,ÀÕ†d>ø 2‡§"ÆÇ›‡ŽOo7 p èvÑwÊû2iÑë^x4”x93yŒë/wŒÉÑò]½Ú€ÔÌñà¸áHŽ¡MЉwbb&%‘.^Ø~„6fV¡¤¨Œ µhôÓ–>O£ôX%½ŸÒ«Và–×@ þì¬-CQé% 6©Íâ_ç¼@e^¹ãúS#¬Æ‘E¨JD¢óþýs(-Kfsà ì¢èvV¾¡µãÑ'ygUv¼ïÀŒç^ÂïõÙÇ+Ùú7¶í8 żò±úß·RŸ[‰ š.¼ãðÐ?ÑÅâ<äåu<ÅÅGñO3†R"FMä…ò¯ÞŽJú”Á›«ém§¶ôm6$¦$âÄŽÇœ— mÅd’ÑâW'ÂÚò;i °°ÙÙÙž‡Ãb„áœuþUaÃ$šW:gf#[0 ÏÚ qù<5ñØO½…v¦wÑCëÑ u-dÑ3žžèɦç[tu²+˜gïÞ½¤“›Ì5œp­{:›-+¯gŶSA\›r½q8OæÚ£®â-ˇ}¹õë×»>þøc.§Ó骪ªrÑõÉ®††ý0ëÏÜömÔÑéè"ôWãÒGí¬–Úí3Dbÿþ¦c€­h=’Æ-¥!yölz9i&íÜSNØ©³r»Öú«'ž€Nm›û¼ ÑÉɦüÕì¾`éßqÔ¿i»æìt`“ÍN£•þÉÞòšé¤rïf¼¼é%¼œ×öGìÕ?‡øbøwÇçlß¾]»Ïç¾ûîó©¾û ''£FÒÎ( ƒ€ê$ ½zõB||<]%‰çŸÆ CZZ† Ⓨ12==ýÛWNO«áá¯RTÑú~u·Ï—ËÓN°å1á áú – Õ)E¥mBÒŠ¶4 jÀ¬?sÛO6ëèÔÎ’ ¦JSà¸;'Ñf¾ h¡Á9Ú¤ë«]sæNm›û¼ñ]p\ËWÿŽM$#CÆ Atûf:‰Žî…ÛÇ&õÃ@~´œ—ظtéÌ /dw@6Ò¯ä®Æy&w"Ð¥ùÙófÀŒ˜*½l eƒÑÀÈ'ƒæÇÖ“OoŽh¤ êoj±C¿+Î{Ã…t`’–´r1Èø6! ËÒ€¥ Dõ‹'¿?Ö$õ³=èÁÙxîÁÏNy®GI‚9âX 1XÙ|Ø ™Ô¹˜çî`æoSvfFY•™À,Àfù|Æó’Ÿå|kàÂ…3¾º{a'ÙeY¬Œ–¯k< ¿N-ŠáÕ€j°  Ýàäoþ5 Ù„j vÙ `BãÆé?4µÂ–, XEþö„Bǵ4p½4pøðaÀÆ€ºZ á0ð#@ü` kÞPŒF\ ¸VØÒ€¥K–, üÝj@V Ø—U‚0*C}IWçææï`W 10cÆòZ¤, X°4¼>ýôSüâ¿@MMßLýúõ÷¾õ-Œ1Â/ž•hi \`ƒ@Œ‚0œS ó¯:O«¢ªñ‚«¦{ÁÁj&f`$¬2Uq-øFj€~bUM?±Òvk?) sÛ·ÿãŃ*u#õÏ«¶ìþç—y(ÃX¬\½ØsB´ÿ\·Nªóròv·âñy:ÿºÂ¬Î*ìÈ;Œ¬ÇgãFWeuѼӘ…Ùž‹ÂÌ„¼yâyÀ]·n,X€ûï¿ß¯`ÄÏ~ö3 _Þäüf°- tSÜÎzôà_û‡e£¡:ÿçf£¤*®1M ûùÀ˜Y³„0æ½9Ãö"äREm(á«þn=W¶ëEDÄ%!%%}“â³¾ˆ ÑŒÝÿ?{ßUuµûHy@LÐDM €L¢ "´ Ö‚¨‰~[m)•¤Zz[)Té½`¥Ð¿WÂÏõ7h ­@ >‚På% bP‚B”W"$<“@B2 30w­}fÏì99gfòAφ“ýZ{­µ×ÞsÖ:ûì³×ø‰Ør‚1hC8¿›p-"WEW"TâO½Gbß¡3”mü•­ö®P¼'ÒxMž¿–œÖ(WiR•aã± ˜2q+N ‚í(²¦ŒÇ :ÒAöæg#(s…×±Ù{—d"}϶‡£²0~ˉ¶#º‚ØWý… †††ŸWçÎ,·±‚%+!6Zy¾qÜΆ¨ÔÍÜVéæ–¬`ÚÌÄ•„@hð£MפÐJüeÌ,Ì(8ˆçLF]e)Êl=D—CÓ(rùLDF0]ûN¢#U`Ú­ÌQ‹}t ײ¹9Òì¢ÒÄGFÏÃÁZ:´ýÓÕèM~&ú~÷žÁv]½A•acŸ÷¥ü0ÇaátdY† 8Í\:.Zµ l“¶þ‹Ã£2vîÚú8ýüùóâ@:9Ž R%Ó¼¿|SfãÛDGG7°J, \ ð¼ãK¾Fhú‡ôVéæ–¬ø" ¦úø5¡h,ÅÌÌ™X·i5²]·hÝ!3šŸr9 AÙÚZéê™ÈY²ù94ÐéKÄSuå¶|¤»Úç¬Øén¿i‘çi73'•®{VéºEnøì|ù”Ç>Øs\;UÓ±bçéæBqØPE¥gŽŸŠ!"¾R“µCOXý4Û‚EÙÚÌž¿ÞõDÙc>ê°6'‹èt®âŸ6OlÁÓK?ÔEù‘›×ôLdg¦#gÅÞæüRIåÎ_ï$ëm•|„dVLI¡ÛK04ŒVòÚ’L‹C“<âá¯âË£U\þLÛ3®ìÓ~7ÛÔ»+æ¸ä„Ì™+PÎ,QÐp¯Ãê9™¢>}æj”î]çæÑzmn4–ÞÉK°nÅLžl¬&µ¼d(J<Œç µ©Ü†—‹ÜÌq“Èw;¿5 ¥¯I®Ù.`ã9ä(_Én¼™ÈßVÙžÆñ±Ü͈qhƸ æEê¶Dô}Ñn:5¯t¿ëwbÆ}{—ó–=Ÿg'Cß×Å0|¢\;ޜۻ;¾oˆä“úƒ»Åév ŒHE&õ2£7+oFº%FÚXDe^…¹vÓöÙ¼Y£ ñäAò{¾ffe½¦)úõ³…ŸòåEeä ­ycÅÍØ^w˦Gù÷ŠpjËt«\‡:ªx~™ ÎÚb4LЇ4-;ì—¨°ÑF“ê"r‡š‹µûY+•#?k†”ÑÍɆ—~ÐGȯ’èÌÁA»µ%31eè¯Pªð NÆS…ó°2w(BÒs°n·¼¹ÓÔ=¹YcúäAT”¬BÁÜYØ'” †mÈ=tž,À¬ñóñâƒØò‹þpԞƺe.cÄlFæÀƲZØ·¼€»H¹¨5xf­\„¡S0zãAòÔV‹­ÙG02a6I ?[Hëi($¹/™ ÉÀ{"E%çPÝXƒm+þ„T™5¼7–?ËЉ豼ÕäÉîTÅBô!ç“,ç¡SŠ4ÞmeÈÞ3IÓ×i烊±Í®[ÿ§"fñD¤¤­ÁÓÄcñòI˜5æ17ìö:¬œŽÅG‡£¬º… k1qÐÓ8Dãå%CµC¦ó¤óFâÀTzÍ`·á…Ÿ£V$Wµ­;Í2ÉÅô™s0sæLÌœ3xÁ£ÈÍæ#$ÓVVeX”äþò-a0VnšGsî$6VÔ¶%£3Ü„„œ 磘Ë0~þ —Uàý#°=? +3 iŒ¨~)ËËhñ`¼|)iÐYôðuI£àòqba¶$ I@5Ø@P„Ë #3½lV.Xðõú@*|É«>Ïå>‘ˆ×\Lcü*¡ âd’+‰Æ†¢ Áô4ùñäVlÚL’(NŒOtÚD-foÄsã´s¯mÜ,Ú¼“?Eô¿’r}ÏÐ[dz‚OÖ;ß]µeÇ„w ØYË÷ÀðiÀø¬q#1ž;)“Ê\ôhÙø/sç¶~‡ÊJpÎö Xè’G?[ÅX,™5Yƒèf¿¼ù?탦# ·ÄxRtäaŠqµ 5ღµ™½q& Ô–äÏ«§>d³cÕb¤-,¢óß™¹~xð‘ ¬:çŦȔüÅ ñhf²áˆis‘1}¶Z€ qÄa º%ÄÒ´ÍÛjŸ…¤°YtÞü4¬)&¿ò‰ÁØ üeNÃS?¢yxŒg_!l¦qõði´Im:)þƒyÒR íV&ƒ' ESFŸýî˦±Ó`•æJrÆþ` ºñë¯.!ØWµ¯ŠZó9ŸŠ[m;±:-јóÔ Åv”¼E”yãyS•q4ÇÅKü›Ù¸á9¸¦ ’Ó„ž8Sº/ÇS¹?$LW6ðÓ?oæbãÀWàU0¾Ú[u–•€48VW d>P<&pN¥\Ms±>¯€z'}­è¾>¯QÓÞ®Ù\nt)^õéŒ=N°s)½5Å0i^ï#¨dúÑÈIFŠ‹K0•žžP·“CºcÁÒicïA‚ÒÖB1.߆’™øòùQˆ ™ƒr²½¬G0îÇ„'g9½Ûßþ&÷¸Ðøxê•=(~1 ˦ËTÂÍjêr“Ú,˜ò¡µ‰Ž6ÔÈ.4F²!Ç×qµGûÙ›ªš‘åÇy–âäÈuA´švÕkQ :ä\ÎMù7•:Ät@òÐáºñs@cÉûæç‹2IÜ]DKþ£­ÌkË5ÍØL‹òH@TËÀ ÆóÄaã ¯1QYò4Ò¥HgÜ{Éör¸2bÈÜ5 U®×fsˆ7mvïMk-ý306c(M$’Å¢®£¡eÍpiµè¢L›~òiuª}¿|žÞø„aOè+¤“ cÕ±'ˆápÙ¶H}ƒ% W 8–B;tWê_ÖÑjšQëó~Éù2 ÌÑ fm¯©òf7|Rdw=DÜ–=ƒµ{y9ÝÓ•§éoó|×X*\‰/ÏÆ`àÀ˜–„ºÁ×øP¬äæN@jd=mª£À„5(-­FêèŸâ¥•/RÁ;8asÑ+(D}d'%©‡Gép[ìÿ}g)ê#’›hmBÕ?¦|¸$*h.ƒ¢`ôLi¥bù¢ß¶v>Ò¦— &ÊÐHžEééxko(+};Ÿž'ahoE£¸¡uJ½9Œ™üµòÅÈ_»WŒ[ÝéJ’[(†gMCÉô|ì¯VêðöÒ\²é&!Å€%s×7d.”¼Š÷Jµ~íݲŠ‹›Ø&Se¨¤Íø MHEI%ÿuâ“æÆ¦žñ½§€l­’6›CuØñ<­_ÍÈÅ„)°3‘dŠ[î¦5‰éÅÞò¾yh~ëÞS`†«¹üù·Q^ZаÔÑx楕ÔÚ›qÂõÞÊü2”©+¼`vYFÁe¾…Ò§Ø FA;œS ê_5Í<èó>ùâÊÖ’ˆ4ü¹VèÍ,:»Í8íhɘCüèظ0 ãi³[P9.šôºø´Ìµ¡\€¢l#-ALЖ‰B"±|Ÿ iYX˜Œ‰£÷,CÏIi˜Eï×wŸ?†?¤h°ai¹˜”·ƒH™0½­y=è{˜À9„Æ;8ŽbÁÐD†ðf ʭŚ’GÅòxgù¶À»…9ôtÙ¬ ?­¦z˜É&yÂ Øøb&ž9¿ß‡å³Ih¯‚Çaÿšy˜˜Ö]ô)eüâw úé—_<$•QÑžÕ•B*Äkã²`|BÈZŒ{LÈ3qÜQ0ûÒ"Y†‘`6J–ŒƇ7S÷ZçpÍ Ÿ*üõ­_i+Ppp¶pf.,9)CUž.~ô󡩘O2Z6‘ø¤•¥g?§É`šË„IÈ`<‡"0zá<`ñ1g––öDZÉtL¡Í©ò0/ƒ^§tCdïgAóUc\Z-q¡6ÿ6ÝIÆAai(˜”‡GuSê/’?5ŒŒŒ èb –®”x¥ Ï)гˆn6…‘ ž‘rš/6äŧ+È‹oÙ|¯‘q'Wžï‘œæ«WYYÙËû ‡FF†r·ñÛâêÐü”øD׳)|¤“÷tògêVzä'|ªGÇœ¦Ïý\þ‹ɇ»>!Œð Œn¿èÔÆÆ‹–æ{ݤGÄêÝœ/Ôgèɲ‘Ü8‹§ëägvÇ«”`SŽÔ†:D.Ù„™öIßš¬¡ü ‘ í€ÇÕ€—º½K9©3l{r`¯©CH7×ÏíD‘Ÿt U yÍìæšfÍ)7šC¢Œv@0zÍ=‡{žjó)„ÝìL8#\F<´EžFøÌÊô¾ø3Dö_÷Ýw#%%Ŭ™(ç“·mÛ†Ç\ø·÷ lUZh¥x>fÒë½þýû‹3 Nœ8!æ[×®]Å×/¼áõé§ŸFïÞ½‘˜˜ˆ^½zD)))éçx˜.~»§^¼¨ÉK¾|ñB"Ç|‡¼.QZ^l$CÁàçNUž÷"ããjTøûæUù)7ì¥ð‘®_ƒ&?é àœö ƒ™¯uÿô4ß뾞'›ógÎGsXÿ%Žò·™4žÞùÓ£sI ų±‚‰AÀè eãŸN‹ Ìh˜”û—³êvZf)i+GÝÈ hQ0á‡ßo¸lvlÔ7QæBìeœióÉŒŠ.#Ø@áŒÚ¶¥Œo°l`Íš5>QuêÔ YYYâóEŸ€V¥%v”€Üh(_#´j·r'|­ÒÏmäÍ‘2uÉÁ,íÉÊ}k$À¯lµÕ¨¦UZAB|¬ÉªÆ7S$…ÚÚ+tÈÓ7S„íÖ+6 Ø k¿~ýÄçˆf7^¾1ÇÆÆ¢K—.–QÐnÒ·™I@ÎCi0§ÛT]ÌÈ̪p¦$ÍŒ³*1™fB2mÖΰÜòn(–oLá™ã_}cúbuäê—@kï'55ÚÆÐ«¿‡‡×ºT€ ÕHhCß|é_Õðç&ßR£ÀÝЕhµAÀíÙ’·‚%K–Ú*ýž‚¶â³Ú[ho ìØ±Ãm°1 ®È|;ДF€Œ}Æ‹,o( $6¦†¾‚ׂ±$`IÀ’€%Kß È•Žå*A;vœõ´ÔÉ2fô-Òß®ø#`F´ûk¡²$`IÀ’@à௠^~ùeTWWûlƒ©S§¢oß¾>á¬JKí%6¤QÐçHý«êi•Uµ\ªõ^é@µÐ#V‰ª°VúŠJÀÝkÿ‰ú;€7ë¿x¸¼ŒÔÚ†—þ²‡Èåñòp˜xeÉÐ9—l“l®>æàßi‰ø†›GGUO¢¨† æ³é‡~ˆ¥K— xù$ç³UiI àyÖŽç¨úW¯›õœª°ú:‘ôõ¾±DÌ øcBßöêÌ7ÒñÃ4PûÛÓ9~ ¾[½#=€ÎQKÇ5§a­ á‚Æ;P\b×ûlòËŸ´q¤I=¬WóÃà·a@túdpJ=ê/ vе(óçÏ‹aø#¾|¾)óÈÜ&Úˉ¯VV%¶I@>€Ê×mÃ&ZëÒ[¥›[²Rà‹€4T˜vèã•EÁ^Þ¢bãèDÀ~Ë>h1¼êl)ffzû‰‡ƒÜ礻Vfbçi×MÇQ‰Õs²µrºÑdçïpTîÄz Ö&A&ù(×:&|ÐÏĺõ+)V(Ò±‚|¬›Ÿ©Áf/‚æm¹ks²±dÝZ̤'gÆ“=g-4²Ø‘¿›ŽÑÁ9ú`ƧŽòQÑtHN,Füà!Ê•àèÉ3‚梵k‘CôÒq_±-?ÇÕæ•ý?Ðþ”P›iCÒ‘žN×}“ðü?v‰C|No[B𓱩R“QÝÞÕHš‰Rv `¬jí0—ó!®!ê•ÛãêzÎ 0uåëN¹Â“ƒm.Zê8¥gþS6óñÄZ0ÃUºz&r–¬¥ñ%|éKZ¸ÚáBnE_»øFËŠžÏ+`/ˆ¾.†ácŽÛñæüµ÷ßbàꔀœcÒ `.9ÝN©È¤^fôfåÍH·Ä(PK’¨Ì«0×\:’8>w¶uåÛðÜv‘<½;6àÈfo?ñë“„ÜðùÂO|ÉÌ#úè?I]:°þ7 ˜¸ '¶–UÓ!>§ðÂúÆrÌMŠ¢ÑQë´£lk6¦ŒLÒ<Æ ô‹‘5fTœBá¼L!z§*Š0©`^Û£-W,Àô¬•¾¼ §ö¢vÁxüêÍC„ߊ+qŠ]æzæÇˆO/ w¦ê\=·\ŽÏ¡²Ò»3˜æ¬ñóñâƒØò‹þ¨\?#scpÐîDmÉLâõW(uDàág i _߀-[¶àõ§3°òJ;vÄ4Î^‰Q sqèô^ü:m"Ænü úIíìæ€|.ÐlÎ}3çÌÄÌ™|=Žè`D ´³F"|þAºyWcæÉ)xtu©h’0 ++j©üòb–á÷oí囿RÿLE™ÍŽ /üŒ\Ë`ŽË^w˦Gù÷ŠpjËͽ²lfÅ×”¤Qpúôiq€‘Y,‚kªs³×¤T€ ÕH¸ 2ÓËfå‚_¯¤Â—¼êó\î¹lx­Ä¼?—ö\Ч-\ƒŠ_=ˆ`Çno?ñŽCøÙ ÈxsçÁ¶¯(¸ 6z*çòikfÐF6mÝÝÑ;ÊÿòN¢_dŠåôˆSðbÚt¬Ù~þ€}ЧacõóBMêÆŽ&²ñÊ“ Ûˆ»ÓÈH‘ÎGh…¿èrÌ\&âiZȘy˜|Ü¢]ÁÅO3> T¯Y—̉HêxÆ´…(®xÉÁ¤H‰æì0a ¿@¡U‚7DÇñ—¹sÈÍî;TV‚s¶WЯG9ùA·„Xq$oXlW¹B(F?Gʺ(½ãHôšbOf¼¬ôŠ›x©fR&~u;ìõäh#¤ ‹— Gù.hb_Š9EabtNÔŧƒmç»äù° Ä2½s`©o-M¦M4ÍûÝ‹GXžTã ˜‰Ùñܸ!ŒÉ ×°T/‰¾ºÁ«l@XÁ’Àå–€48VW d¾ôJ{5ÍÅú¼êôeè¾>¯QÓÞ®¡ï)XXT§XCË V½U?ñv4P]VöCøqFìãð³?^OJ¼V”‡ëÞç;ìŸ"†œD(²¨» ŸìcÐEŽBˆª®íP]ôr:*܃„±úf|6oÅz0maö<¥*B~t´‡'A3ëŒûñ]@Ã8üè—áHâ{©|eË]"pÙ3%;«´\ϸhO±A*ƒÜöŽ’êªiÄ>©È]4²™Œ Ba7¼žWbj°"»;¦`¶þq0"¢7ü¾øA5Ô£wY î ÞnP°©‘)1pà@$ñ&?Wùâgò…zr9‡ÊÓuM‚iØŒç_ß+ðÕ•¾rOÿÁ -ðÀîŒß|ó=íwÝ^ðC{fÚMæÌø4icÚq©ñCq—èx!ê#ûˆ~§$õn3MPºŠé5ÆÌÌJ[…²ý«P;‹¶ÉÝ-½6z £ÐäÁ˜Mà›>«G É|àÀ4ôˆ Áj<†7 è…GîTŒè‰ãûJPÅfIp†eÓ—¾E{/8´irK´US\ìXE×®Ô•^ 0»øÓ0k¥àÚçk‘s6¤QÐç¨úWM³hôy¿âjQ ‰HãÀ/‘k€VÑÑ9¤ù“%—{B0F/(˹HÑ6·E>¼š6ÕqùAäõ¤%ròC‰Iÿ8@Í’ñŸûéUÄÄ4±\™2³×”`B²öôâ›ÀéÉXöIíXUüWÍ?}dÌ.À¼Ññ¢š %¤'f:‘^ü´:.-?z¶æõÀÈêYº!‘S°ÏæÁã•rõ£rý\ŒY< û_š€Ä~p°`6f¼ëåf@¥‘诎 1·l#zL‰±©0/ßGZ¾rçeañ˜âi J{NBɬ¡à/³òÖ cÙDÄÑ2Mïgw){ Lp/!‚ gVòZ”jÐÅ„, \) ðý³Ï)гˆn6…‘ ž‘ršøvk@ IDAT/6äÕ‘ÒòbmÉÏÑ2æ…rÎóm”Ó|õ*++{™b¿áðáÃÈÈÈð w54’ÿyö¡óu/ÊCÂÈG½j`zòâöWß’žÕaI:Y+kñ$¹†¯±… ›Ž¦/lf|újã«ÎÑXÚ»‡0/W»¾Z´g&G¤—|¹4b¿D¥Ý¼9QSGŸG’+cu44ŽŒqµ'·®+#½ïþ ‘ý׳ûä”úÑø|òá¶mÛðøã ÿö>@­*K­–ÏÇÌÌLôïß_œQpâÄ 1ߺví*¾~áW]O?ý4z÷îÄÄDôêÕ+ ZIII?'ÀÃtñ^õâ·Î¼ÔË¿Õå˜ã×%JË‹a(4¿OR¬Ô’>ÿªF…OÀobe¨K éûf\Nþé ¾Õ–¾Ï5Иw#ƒ eXŒùi:84‚²Zr%ÓÆrä>Êà%çàPtëfƬ1.‰ÇН] ð – ‚‚‚¬Y³ÆgG:uꄬ¬,±ÿÀ' UiI %À«í¼·€¹s+wJ·J?›fÈÔ%³t;ŠÍB¥I Ùjáö(>K2–, ˜K€öÂÚ¯_?ñ9¢|«oÁ7娨XtéÒÅ2 ô±òí.9¥AÀ8ÝÆ êbFf†P…3%if˜5P‰É4’i³v†å­õnˆÌ*´$`Ià[-ÖÞOjjÚãíoµè­Î(ÕP7ªå¢RÁ|é_ÕðçÆ×R£ÀÝЕhµAÀíÙ’·‚%K–Ú*ýž‚¶â³Ú[ho ìØ±C|q þê 88ó%7¶‘®4dìË0^$ýúÀ°1aòEЋ•±$`IÀ’€%KßV °â—¯Ô˜ÓÒ?‡,o¥ŒXOK,cFÕ"ý¨Qà€ÑVöÍjfIÀ’€%K–¾9^YñKNs]SS“Ûhha¯¥þUõ´ŠB-—°j½W:P£@mÄôˆU¢*ì·,M‡äl[999˜“¿‰¾ 9mZ·b-ʯJæ®ByY,Y°$`I $ÀûøôL6ø’îºù˜m6øb>_£…AÕ¿zݬG¥ÂêëD¾5F7”ˆ™LBWýŸÆÝ˜Lƒ"®ôÉX»ÛÇÉ{FªÜ€Þ#'þƒ7„`Ç"ò¤8§¤yñ‘M<äï¥ïîe ²Ì LìTŠdU‹cÛQdMüÕª, X°$`IàŠH€?}=zô(ø|‚sçÎÁf³ C€6 ªªª„îi£ûn©›¹O­ÒÍ-ÙhhD€h3WdD Â:wÞÆƒ˜‘jÇkO§`ü Tœr>vHh¬ú’Àò0÷§Ä!:w¼Š»‰Ã"ù¸å&;Ÿ3qBX8ì—q[(- X°$`IÀLQQQ¨¬¬ÄG}Dg§t>9xÅ€Ÿ~ú©(ïÑ£‡0Ìðø(×?¤·J7·d¥Ài0¨0>x¿:«XGÅÆ!"¶Æò9ÿ8„ª³¥˜™™ƒµk—+nÑnú|‰<æçÐ*¯*¤ÏÄÎÓ¤À÷b:y?¤Óö1$=étÝ7é1ücûIÑÙK&#({ Ê]º~ïê¤ç¬5}ÅЙNìs_‚ÊmùHw­hä¬p­DO‹&»x¢ºœümn?E•Û“®­€dŽ›Dž"Ý> q¡ks²±híZä®ôE»Ý¬X K–, Xh¹bbÈù‡qæÌTWW‹•‚††ðuðàA”—— Ÿ2l´2°þUu°Ôˌά¼©–¬¨%ITæU˜k.M ãÜÙjÔ•ŠçÆÇ¡ièݱG6/ÃâªÙ(.«@r~´þ7Ý‘^»óAì_‘´Gÿ Û›0§p–^ßòKt'•üÉÒ{0óXž#¼Cûߘ=½7’æöEÅ«‘6q +þ_37Æ,4æ#÷™é(ïN‡KŽEÎ)T®CÂÈ\”Ùð`÷}˜9+FØðÓÄ ›¶µ¯¤Â±s ºý3r~2C+1/a$äm…í±Á({÷OH)جy24ÕL~N`Öø#XU|ì“ H[, X°$`I uà½}úôÁÉ“'éÈû:ñÅAùeáUwÝu’’’À¯Ú)˜ée³rAÖ—Q ¾äOŸçrŸÈeÃk%æóçŽLÂ\Ч-$'F¿zÁŽÝäظá9 ä÷ŽCøÙ ÈxsçÁ¶\ôÜE‘€ Qôˆ£¥!ÆC+¢ˆŽ'NÆsÕ[±¯ûH$,à×o.þI™c‘u{7ÔSóú}X¼øUèÐŽÍ"~'ŠÈàJÊõ=CÔ“ã1ìVÞ]‘²SG Ï5GõÇ M(š2슡ß}Ùôò@ÃaŽ‹ Åì0AtZ ³þX°$`IÀ’@$ÀÞ8ù”M>“€_ð—ìÚ[:îâri$´‚ŒSi£¦¹XŸW@½“æZ©¹Â×*5íMáÊñž‚…EÕxjH7×b¹?]ÜÇçÛÑ@µYÙáÇqh°ÃÏþx½0ÄC½§¥ö4®äá° ƒ‹â¢•×* ¥Ù“q/†¤ºˆ:¢I‘kFõIxèG?Biýqã~‰ëûD no>"Ór1oÍVŒO‹!3`Àê°§8dîIs\ ‡=iDG»;mÐÖ*²$`IÀ’€%–J€Wø5¼zÀ+\Ư£ùÓÄV©YG«iF¥ÏûEß’=™½Á a¯©˜•±îõ}sþƒ{ƒ·l*GdÊ@ñ(‰^)øå˜7 «JP²fr=ŒM>>nh²+&2$ß5–’+ñåÙA{`Z"Há—RùlL71ö*”¸„&¤"‹Vò_ßKËU5ØôÂ3î=f¸$-Í©–'g¥, X°$`I }$àþÒŒ6šf´ú¼_R­1 $iø%r­ð»üÎ!ÍO¸Ü‚1zA^ŒÈEBˆ¶y/òáÕâõ€Ió@ªçëç$aÁ´5xiB*RÇå¡`FFÅÍG¥Ü2ãCÄ?ˆ²y˜>2AÛè‰åûlHÉÈ¥Õ„H  vÏÒRLJÛŒ¡Y+PšŠùkh¯ÃÄ4²F»ãÙÏÆÓéLo>¬`IÀ’€%KלÑͦ0RÁs¯9Í òêHiy±¶d='cÞ Áy>iÓ|õ*++{™b¿áðáÃÈÈÈð w54Òf;‰ âëð#ìhD¨‡Eˆ½BN¢ ?Ž:Ô9ÂÈűËÈi¬C=„Ü.¼0Âu5 ÞâÍ’€N–ï@¬ìU'M›6‰×ìÚ_„‡‡»_°ùú€1úøãÑ«W¯€ú@›N€‡éº »ø-0¿ç‹—›9æ÷òâï!åÅF‚0\ƒ²ÞÁÔŠðkùÒ„®ý5 ¥Á5P±W¦OÁ¡ÍQæ"On–#ÔÑ @73fp]™^XT, X°$`I ý$àVî„R}蘂Ùë3dª±`–˜¸hIÀ’€%K–¾ à/ ôä¾Ùy²Ì«º˜uw úÛµú,i ¤T¨Ädš’iÔ²µþÏýc¶ , Xø¶IÀºŸ|ÛFüÚê¯t„ÄNÔ«CíÙœëùëé1±½ó¥õƒ_´-5 ô[m0¢AƒéñYyK–, ´XÖž‚‹Ìjp…%ðþûï»="Ì—·ò³DÙiÈ8PƒA¶ Ý I@â‹ ÖÊ[°$`I઒ÀîÝ»ÅA2|€LiiéUÅ›ÅÌ7K¬ìùõ€\ àCФ3$ŽåÅ [Ô‡tU7·HºRà€ÑVöÍjfIÀ’€%¶Iàó}DZô…Í8r¸Ê‘;ÿý¼¸Q?úèâ¤9@«Ø’@›%À¯°1À_ðé…¼§€ƒ|… ƒ“úWÕÓ* µ\ªõ^é@µÐ#V‰ª°VÚ-Fœ>Mg&ÒNÿnÝ"ÄwîªvLœÞ½Ô§c܈ÄÖcuTbÝÊHÿá8$}±@Ÿ7ž®k¤®Ð FŸ8¶žò5ÑÒqz7V¾oÇ' ùú¾>¹Z%u•Ì ~?ûøÜ·‘•u~ú¿úJë­5Ç¿ ËÐ#¾öVô›ÀäMÚ°UhI  àv—ÌŸ`È.çyÇ»TæO[Tý«×ÍzT*¬¾Nä;>0V %bfÀJ³«8Ù¸™A™ØÉg»BÝ^òŒ˜žO>Û­GvPâââ×<¶N3ŽŽnÈÂø-'̪+·EÖ”ñ8á9HÑÝîÐúE ‹}é†Ì%»ÝuWK‚| ÊÆnéw‚ÓÆrI›Ç’ûh;ºS&~à9°ªU¯ÃŠÉÚáWrrPæd¬ØtÈm÷"ªŸWäÎ_퉫inðöMàÝŽœ¬»Øì:\Y¥œ+nÆ·N^„ƒ§´M^W»Œ-þ®] ðj+ýÚÚZáQzHä|UUŽ=ŠóçÏÓñòÑmé¤ÔÍŒ£Uº¹%Ff ÍL´E—½mI«ßï¸YÛ±t `X=½Øk+P²|4Øó£t…P^{åånÔÊDxTÒ:«g)¶QX8Ž˜aа3 3 ЧªÚŠýÈÛÓÎwÑåèwsе´L§”rZžý¬·&ÎŽ¯BÛ¼ÚÓTAhæ¢ÚV‹Š²ý( LÕó7U ¶úNÚ’ŸÞÒ›µ¹ü2oŸ¹ÑŒñVðÍ5$, ôdöüïrñÜÌIرé]49œâúû’ù8Wsß{øgˆHˆà°Îâ†ÜJrV3K~%ÐåuïÞÇÇW_}%âcÇŽáÈ‘#Ø¿¿ðœØ»wïÖ¬HÚú‡ôVéæ–¾HƒA…‘Œ~#âºÒu˜œîz²Ë¦ãƒ]½ªÜ–tZúá§½œ; úÚˆê3T|æ8ªé<©àˆx¤L$ï‹¥xЊ7 |K°V´ÓVG+·!ÇÕ¿Ìq“ÜþDùÇa#¿ŒÜ•3âh¬ˆø~HMî†Óäª9(s>Ê5ôD`/áÊÆz¢WºÎÃCv>­*ô›Ñʱ±33gbÝú´ŠÃ2NÇŠ¥X7?Sëoö"25¨"®øœ çƒ7=Áž£‹&§»dLc’¿Mô“[•»Ç™^Í<–K^2=ø qÑ Y›“Ek×"‡xO_d¼¢’G‡JE >±|j9ä©sæZÔÍ;ò±tÓ1Átéê™ÈY²ù9$‡ô%¢Þ˜.‰¸r'æg{ú‘ÿiq³¹ÆH+wJ¹N’ó¶JM˜úùñ×EÙÈœ¿É- ®OÏ\ä}D·ÉÜ`:êÜJÏY.?¼]¿>èÚAÁ‘œz'vnz ÿ=ï òc_…ƒûKðÞÚ¿¢[ìõÿøïѱC¡Í¾!oF,$–\à=iiibï ¯dñê@ee¥X5ˆÇˆ#póÍ7·e²þUu°ÔËÌY¹‹;㈱‘Àû øÈbV-]èâ£øÙm ;ާëfº’éJ¡+®Át §+ƒ®©ṯ3‹Ž|¤ßíUlÅNz:vÕzxª-É#¡æ9kvgá ZŠ™QH)§³úTµˆÂ2+(£5€Úbç$Z®Y~Òº`;X@¸y)'Í™WP¬µ%˜²óDYÁþSÎZ›Ýi«(qn-©­‹ò2œH{‘hê’då9žªp’?%'æ ¸Š³©.˹±¢Öi«.q.Ì€3#¯X«+Ùê,¡r§ó”3Ë_,å_Úì5Î2ê‹ÍYáœMüeämuÚì6çþæË[¢!ý9XÈuD?mš³ Xã•ûÎý#“¬lÍ4‚ÉsV;Ëœ¤ãœÓ Ê¨Üæüá",/fic¾ªø ³ºV?/¨^+Ém1ÓÕd_¼8Õ™ºPË’³³×9OU“Mç^™KL[î,#šµ4_NÕÚ›Í5g…«OÒ|¬unÍcü3hÄ<ò“óãt1Ï¿4çV1¼vgÁ$8ÓjóOòͱáÜpÍZ]"ˆjçr’IÖªýj³vIÓ±°^xª««}ǯq>òòWΟüí˜3>õ;B~½îzÈ×ç‘Θþ²¨û—Êœýþc­“ÛXÁ’Àå’ÀöíÛ555NZÅr:tÈùùçŸ;é¸ç‰'œõõõ‚,mFtÒ+'ëÇ@ô(ðޥ‹õ/ëaÖÇét±~f=Íúšõ6ëoÖã¬ÏY¯³~g=Ïúžõ~]"øÚhÈÄÔ Ïs‘ øMI{ბ4x0q ¦t_ާrˆTêä¡›EWßÉŸ‡"z†^I¹¾gÈ»a²ëQÝ%ˆÐä±ÉV†µKžÆø¬A˜>mªó' GlAÄàÆ¤XòQ@ÉøTÜjÛ‰Õùkq舨OgÁ‘ñlT¼ù¤݆ôŠ ‘¹s ä­ 42ãysJ*|$«ÎQ’B|ê0Øv¾‹üµe`th’ëéüJd6<7NÌ­M!ü(ô»/›f˜Ö7n¦†äÑÏÀV1KfMAÖ Ò=ÅÈÿé@ÊN ‰‰W•Åÿ" ñ(mÞä̽ã!>üá"HB1{ãLȿǖZå ~Ùin¸Cùðœ½Ï"ŠmÔÆG?÷ØEc ¬™3 ‰|Î5­LñÌhÔ͵òß RêSf²èÓˆis‘1}¶Z€Ä|óÌÄ>@³%Ë Ë1â¯E½ð”Ƈ`ÆõÇhnü¿ŒÃXLõï,Åœ¢0ì+ µ±A® ª6¾ épzÅCž[º†ãÞÇóðÿõÞÁý&'-wÞ‡þÃïé‹—œÖ­$‰ ë%v”i}±©ý$&&¢±‘V‘««Å×/¼éP~À[œJ;5ÍÅú¼êd Á,è¾>¯QÓfø®îr¡/7ãÓ ÏzôÉ/>§$m™¸ß„|T”¢ï—Ï#-. ëÄZyõiúÑ0n\Š‹K0µ?ß‚ Bh"Æ=õ ª‹_¹,Kùvqó%X—®Þ»b2º÷¦[zÿ ŒÍ T5‰¶À–v½¸¹sZªv6 ÎÓ«‰˜Ðpâý§+²CÐ{Áô¿÷^d % êéõ+ʽsÞa;OMchG¬7³\hü@<õÊÓ£ð²)kQN€#§®¢»ý È_½s1 9÷°qŠqù6”ÎÄ—ÏB\ÈñŠAßoÀ—cÐ…51‡ÕØrcÑêšýÍBƽ™´$Ç×|÷®Êžcz¼A1¤{oìéÚ÷Þ3œÌv¦M ùýOšgdG#iŒ‹ëØlˆŽVyÖZøú»}ítÒ Ùè£kÆcžæµɘ®¼tÒ¥[Z®Éã8Ïí=}’<]“K™ü 1aÕ$¬\˜ÕÿýgZ@Y…ïšØ9ú¹qØÅPö#“ñ£qã0·¸û§ö—ä.k̯B:v@×ÐNô…Á͸gÚ½Îá‘óØŸD9×…t û.+3òo½ø“Dùu §;uê$ þ7!ªW …%õ/ëh5Íhôy¿¨}fˆè ³¶WoyDŒXs)ü`—KwÖ`×ûË6u0)cÊé`“°ÔÑx楕Ȣ^”ž¨Cò]c)µ_žÁÀ10- º›1kâÒ»QY§Ýµ¿ièFO/aá×Qû*œmäÒ:ìxžÁfäbˆØï£2VûøFm¸I.·ÜMÏôÓÿн5ä5ñÐ&üVî)h<†7é©lFîTŒè‰ãûJˆ’뎯ÚJ}ÚŒü×i_ƒ£›^x†rô•ÓVƒã4vÒ;}­+ZOHí‰õ¨àä1x1c3r'Òg^ú±æ$\¥¥ÕHýS¼´’Œ!¼ƒ´âÝoZX HŽ*#¤i‡¯Tp®$Mé•älL71ö*·ÈRï&ùOÇ[{OÃQw/ü6—·f,úç]ÊɘçªsgÑÈ^*ë*±iÉdŒ!›ðÅÿÌrlÆ­Ìeš<˜z<³ôMœ&ÒŽºÓôù¨£™Ì‡ó,æ>Õ¥oçÓ˜OÂÐÞdèæ$?ðKd•,ÀÄYÈ›;¦9&s#ÖÅϦÏê‘¿‘iè!$•4?*µ9N4ê*KQZ)÷Ê8PI¿9ù»L¶ðoìÜ]ÂBÄ5ä¾IH¡Õ{>=nv—w$ÃW¬`IàJI@QQQno‰m ­ê_5Í(õy¿dZcH"Ò8ðKäÚHÄÜ’U¨Í‰0±©­;ÆÍÆ«Sû6lþm ºsyX &åá‘A´.ÿ Ê6æaúÈmsZH$–ï#­çì(š= ‘!&nP.f¯Y‰Ô<8ù»ÈË*Á¨¸dç—aôÂyÀâ1‚¥¥=‘FŠhJþ^ÍA5ïÞpUY§NÈüŒÅHë†ÈÞÏ""ÃÚ¹ó²ó6¥='¡dÖPä拏.#Pð!4ó×Ì£Œ4Z-èŽg?7YípÅ‚¡)ˆ áM!”[‹5%ŠUüºêOÿ„ø©q.äŽcøCŠ&›°´\LÊ[ŠA„Ú»ßÔ?rŒtuÇ)|kjÙ]£K5²­ ½”Œ\zm² 4Î÷,-Ť´ÍšµöÔÿÀšÙ˜˜‡ÈÞØÕC ™Hšàbf:ÇèXÒe;'­1wÂBhì"0êÍë°q5rÒä ¢tPM‹JSº4Ë ‘¶`<­ÌÐpdþq€¾öšk{œ8ûiÌ'¦uó2eüË%š1§ŸL0bžœÇœ‡q.þòéÜ`~6¢Çô‘¿«<¼\3xëö­DJÊJ÷¦Ý+Sò­Žs+SRð—}4_[úÆ^@Rl4ºº¯'þüwŒË}Òçºä¸H¤ôPÍÆV´šY@ü‚³gÏb×®]bµ€ó¼Š …Ðø D7›Â)˜9Í ò¢7r?ûñíBƼIó|ëâ4_½hãÃËû ´Á~á®<2TMdÃhwr7Ïò=•8è`›=¤¹Ëb~Ò³Ùi ’\)³t Bc] êhE 4µ@i䃀hSx¸f´6Á{ uupøÀéAá@]MB"º5£ßH8ˆañdWGé0J›°H‹u¨¡þù>H£Å‹$õùjw~&þ¶7'x•3vR|:á¨ý} @Žž>·Cʈž(c‘‰ Uß<†ö ájý¢0¥KãTgk6'Ídîs^&jŸÙ…?ß7'ô3aË|nÐlüCÆò3Áh±Þ÷¿—ÿçqÃQHèͱ}å8þÑ&Ì™™#–ñ lUZh¥¶mÛ†þýûÓ=°Ð+ƒÂÂBadee!==Ýíó€Ï/ ³èÕ«W@”’’’~N€‡éâÓÔ‹ß`òR%_lõr|Q¹.QZ^l$CÁàîFUž÷"ããjTø»–ªBËïÛ>ÁuE³@§ %Ò¬ÂSÊ ÛäÀˆ ^9—[ØGU³îD›’03 ̨Ädš’i³v†å–ÿsC±X…–, ´B­½ŸðMÚ –®„ø3D>ÆøGôůð«6FÙXà<üib ƒ/ý«7ü¢n©Q GØjƒ€±%oK–, X°$ðM—À‡~èî"|ñj;Hâй³²³Ø Ùâ„4d¨Áà&¨Q ¸º¾êa›åùˆG çr¶º¤õÅøeúrÑóׇ+ÍÏ•¦gõß·®ôx\iz¾{OˉWø÷x¥éYý÷-+=Wšž¯ÞKOˆ¼ Þ? ^1`žùje`E*˘Q™)X†iV¨Qà@3ÄÌI …eôƒª‡ko%¯§×ÞøõüûËëùÑ÷7zzí_Ï¿¿¼ž=|{ó§§×ÞøõüûËëùÑ÷7zzí_Ï¿¿¼ž=|{ó§§×ÞøõüûËëùÑ÷7zzí_Ï¿¿¼ž=|{ó§§×Þ/]Je IDATøõü·c^ê_UO«èÕr «Ö{¥5 ÔFFÖ…JT…õ›VOyÒç}D2fx{SlMüåEGt CçÍú€jQv° gøHÉNˆÆ ä€""ÄEÇNõÊ©¾‰ê;£Kd7\óˆê¤ÑÑóÇt/œ;“õ—ÐýºèÂe*AðSw¥_T ©c$’oí‹nü§+´|^DÍÉ“ôÉbWÄ÷ˆýn:{JÐïÎÔÿKMgqâ¬=zÐç”ÄŸäYÒTcYDZQ`þx|Î*Fñ1:Pû®Aˆ%YHx=ÿzà—0ÜV¦%~=>}^òÇ1}ûöàÏ×ülü’g#þE§|ü±ú¯ÍOkü­ùoôûißg{ýþ™>— ¼¼tHœC|‚È®”yå <<|ox•óÙÇO__¥M­Ôøfîi¡ÂzJ•TkŒn.3þ˜PÈ5OªBçZU!G¸Ëôƒœ””„áÇ Å…ÆãØZø.öãã[=aÀbTÏ0Ô|¹ÿ³þS¯“í*iìÏð`rWŸõôê"2}•ßK _áõåoàÕ¦žïõ&ßxt'–½ÁžÙ°cûÖÝxpê#H ×D¦ïQû/qɲ  výÏìÇõxäñÿ@\‡&|ôú*||øÞOž\ˆ²-Ã[¥·âÑ'2Ðø•8$nI“óúþHXIa8œ-ßÏöÚ‘4d º_ô>ªSâ`8‰›cT\züm…—cÁ±QÐã7¢/qp{}½'ãSáeZÒ×Ó“8%=þ¶ÂëéK:2Öã7¢/qH^e‰C¹N…—iŽ9ȶËÀ4e0¢/ËT5-qr™LKüzú²Œõð’–ä‰ë%n£¯—xd¬‡—m­þ[ãÏsD?߸Lkì:9‰tǤ§D6 Âè–/¼ù° Áóã#ò­ÁÓ£Àˆ3Ð&&Xhf?*>:˜?×"Ô- ’7*jïjªQø9"fºô†‡2SÑùBÊ¿(Å%’󥺃xM08k22ûññÂQæ ÎwmV?*…v¿ˆóô)ÓùŽaÅõØöOÍ `t¢Óãä{#­?µøàm6âñÃ_OƧ·ã?ÿö! ?ø9£S¸‰û†dÖ†‘45øpô¿=û?9ãU{ÝTAÀ¡âÌyÜBŸ‹•¦ƒ‡÷G(ËÕuC–88–—ÛÈ4Çõµtê¬GöÏ©c'q1¬nˆÑŒ¡‡OÄO¡k'þ†Ö›'‰›ñq?—ì—©ëìuÕ8}–>ÅéD‡ØDD g5^åG¶ó…_ÒâØ(ȶj,i0¼L«í%l øF…¤ÿ†ÛÊ´ÕÿÀ”Š‘¼dËS䨍±s†•ikü=¿)+½,9/ëd¬–qZŽ…œÏ\¦–³„ár™–ðþÆÃ^–©tdZò©Æ’ÃÈ4Ç2HX™WcY'c®SÓ’ÙµíúÜ•u´ª§=ó.WYk–n‰Qà‹€dD…iF̨@ ^¨¼)cÀ€øôÓOÝMå ¤Ð¨lpþܾ„A€Ø»ñó¬Áp^pÀÙ9·½A›ðÕ®ÝÂåNômbDR¬¦Ú!œ§q^ÄñÏ”úžáà%©¾ë%MÞæÝ:¼å5ì9‹ïŽJÀ–ŸÂyé¢àEögâ0!Õ)9q uhˆì‡[»|ˆÏÆ û-ˆs}u"ûÃôd[)£I{]Ï$à“Oqäd-ÄqnH¡²œ¼mÅ_B)Ó2(9§?Á«¯nw¹ôâúǘ{Ò~©Ÿ¬{•ÎõO€¨*ì¢c™ÇþlÊVþŸÛ#Ñ#²„Z„äÌ ¸÷–(ݶoŒùÙôìx +ÈG@ʈ;»Ÿ|E§æuï‡Æ}סî«b¼½¾ÕÔ÷È ®;…°c5øFÔì«7}©!ç¿É£ñØ÷=§vÒÿ–È‹a¥ ™§% ÎK\j¬‡—8^dl¯ÇoÏe^Ÿ–¼ùµ­?xüI\jlõ¿õ¯Ç¬ñ÷þ}Yóß[ü{å\»ÔV 8Í¿?Öe|ˆò÷èÝ: +*UYI½ÌÍÊ›!n‰Q 6–$Q™WaJË VÂOÞ½{÷Æ@>¨%ˆXf¹å–[Ä ž kN“; ·Ý•‚ õ6·©d·k'™]¤oC9$÷ß@dÝíj}£6` áp žÞȪ;¸ ë÷ÕbøÛ.nÇ‚íHnéd_¸µgÅ«Šè¨\àåUºÈ/ …âá.ñGµjÿeZÆÜºCÌMä‚èSœ8V“—ŽRI4b»œÅéÇq¢¢žhÆ"1ª#œÕá¸í¾âÖä(|ñÞJlüb;¾HïÛbÈ{_}ÎîîS7à¶;nE×N„ó¢ÀÙZ4Ýt/&öªÆª·>ÆñS5pöD0MV!Nâ›úVOr9[²5½á¶›KñéWû°§|2n¨Â›o‘!Q?|a6ãíb;¢y5ÈŽ¯¾Ô ‚á?|ÃoîDcZï–™ @ԾʴŒ%Œ«u2-c†3J«e*®+¯§§Ï«¼É´Œõ°ð«¶•i·Ÿ¾ŠK¦e¬‡ $¯¶•iµWëdZÆ o”VËô8Õ:™–±¶5øp¨e*-™–± 'ÓjL˘aŒÒj™Ä#cµN¦e,aÔX­“i«p¦Õ¶2-c#jL˘áÒj™§Z'Ó2Öö?·aã‘>› &&F­8›Àˆ}™™^6+í}RáKBú<—ûD.úŠ¥"õÃçBoß¾Ý rÛm·‰¥zYDK÷.’â¹èzª·ŸÞ‡}p‰ß¹1¼ïÂ…úF\"ÇAú ÝW›Õ{ÁÛ+P¸•[4Îíߌõ'ËDõgÛþ¾ G)Xtú£5svp)>ZIÐJh¦’rÕVL]%ØñÊßñ™Î—R¿Ñ“0òf[ä×áfRà%eŸ£¸ú$¢Å Æ-Xÿù!rÝLø±ƒÉkáEtˆMF\íl(¨@í9Í8:ÏýïÖA8³ 7øÉôlts\ÄÛYm¥%d~ø½[С©’L‹Ñ,x';@«KAZ&¤W&ËJCÓñŽd|DV.¹°9U.V&¢ÓGaÀu¸;±ÅÿC«4lt@BÏ›c_aûÿüvÇõ¡¼FàÆ(_SP ìÚˆåS¶b™o&²ìÚèAÛ¸”}µú¯ýö­ñ·æ¿üMÈ_+ÿ¦¦&üóŸÿÄ—®‡$®1bî¼óNãÉeÛb·Š!X5ÍMõySt¾îÈ.­æn«Ï«DÔ´»A Õ(ÔßT®¿þz\wÝuâ¸R¶¬n¸á—¢Õ(tg¯žEéî/0dÌQètÔ¡²ºÝ詼×õqÀ޳ػsÝ8ÁR˹Œ”õíÃÀ„ÛÑɥРԤ仅×Ôé¾ø”ü»Vì'£¶é""\çOtê.øgŸ€ÃKЏgÎÁxÄtÖ¡¸kâÏp§—¡@ I)¯Þ–jzÒë’’“(¯"Ÿ„#¯GìyêßçGP~¸áî›È:²cϺå(¢w }†f"=!'þ}X*ÜuÑý.Q¢•mý…io¤ÙÎÛÐùb£ðªá$ã…i_r.ç/Q†³]¢ºàlÝyZuÐ '—K¹ý†Æ&5VQ¯ ­ y Ýnû~qãøàÃcßÑx÷ճȚ’…X׫³ñ÷î?! 0´_Káý±Áøx~sÌÁp>)H.}Ióë¢oõßkþ{~ÿü{à/ Øà¯øð¢o¼ƒn‹AàºC‹‡t5-~ö®[Œ^+wï¤/£ÀÒ“Ó嚀 zÐh)Õ(Ð×É<¿FàÕ÷Þ{OÄœWCtÿ»qÓÖàhÅ¿ñÚ;îÜAuì ŠÃ%„÷¹=ßÿGª‹ñê[6ªïK ÛŽªc¥8Ú¡î2½¨þpU1þùÕßáª?Jõû!3½‡À$nÚãñðO7’\xáè,]³iGbç:l}uöÕEà{“ÁÀ€mÇK°ïdOÄ)FÁ_wÛ-u\®ª¸½È ’þ{…‹¼ŸAJ›j4¥á@ÔM¤øKØÂè‚ø¨ëOé#¢mb|Z-±¡Ž·E„ôÄ­}¯Ç©íÅ¢ÎÑ`£–ΚÉH þ")üt¹žþyƒ•ÈÅ‹.¢"Í+ZžëØ(àpáÂE—a&ë.¡S\ODá3œûl ¶݈S{÷‰½ôb…`›phÇntL¼÷}uù¯â(áuÐ× [6 ý½ÒÔ×KÈq AO*0³9©‡÷G¯¥ðþxÖãÓÃûãG¯ÇgõßÿFY)c–¥Lslôòõo„C-ÓãSë8ÝRüz|Öø_Þñç1bó8ÝD÷ð[o½Uø<`ƒ€='r0›K¢ÒüªÕ4·Ðçͱ¸jZcH"Æ¿¿$½äDäRý¤V'-[Wwß}·°¦¤Q ë/9#ðдG°yÝ[Ø[ö1Þ¢K†Î´qÃÞŠûñ¶¼Aõ'öáý·öÉj$ MƒÝ.ê7sýq}}ª{ ´»€s5®§c\»M3P‚ék‡¦‹AŽÖ:“¿¸KH}àœXù*ŠÖýCÐ ïy7¾3Öýt-ùçø"½ÃðÕF e|ÝM¤|÷â\x/tï`‡½K}¤ú4²'n¢/œ—ÂÑ'í&|^toüýâ’n¤"Ï¡ôä%Þ!xá¯$É´„á¼Ls,ëõ±„ár™n-¼ž_Æ©#ü²ŒádZÒ×ãÓ×s«ÿžÛ²¿ù$e¥ÆR¦FòW᤬}ÁëNjۨA¶å˜ƒ?~õøôí%,|-íOKáõüÊö¼¹÷ðëÞ[œœ,6rÚiogHa4Ma´ÑÐpš/VkòâgWy±ž`} cÞ}Æy^0ç4_½ÊÊÊ^¦Øo8|ø0x³ ;#‘ÂÒ2—Ë2FÈäÝ›\ÆÁ«¾CºFt%ÝÕ€FzŠ¥ …“Þ—7Ø©ÿ¢¾ }™PGõԘ뻄¢cÓyœã%pªˆ¤s êk´Í‡^ôóÒÑ];Ñ~…s`4]¢£èõÃ%ÔÓ H<‘ahª«'…Ù‰Ü.‘§¹2´`„O–1„LsÌAÊ"¨c(¢£Âä¼€Zú¼ÏACÕ-‚ŠýÙ×’’¥Áè‰0'ít¥O.;u¤§}šˆvÕ¦ú&„1ÄÝÙšóbÉßIJ¹ 9éèä*ëÐQÑtˆÆ…zœ¥NuêJ‡jоógkÈ4èŒHWËÍ»ÿœ)û A=nB\׎8öÉz¼÷ÉI\?8ßïð¨h;.ÀND‡Pt°ŸGMÛ}ëÕ?£ñUûoRÏ8Ôà–— ^­ã´©|Û ^OOŸ÷G¿¥õzüVÿ½ÏéÐËÇŸ|Û ¯o¯Ïû£ßÒz=~kü¯žñç³ øÌÖyìI*ÿªª*ñ:uyÀå|N{MìÕ«—~H óIII?§ z?,Þú²v“/—óŽ:¾X‰qÌO±òbU$/V2BшBÊ胦…ô¥ÍóªQѼ6€¶¦dàëÓòSÃú‹Pw¶A:Ò¡=Ô’–ÐÏ7Õ.ÆB–¯ÏU7¢½§§©BbiÀùFÚýî2<@íkktí«¨½ÖÚý·í¦:T¹ÞTp]]u•›ÿ 2ÎRep0ÙUÄOu£§¯a3|TaTÆð²Üé \Uê®DRæ4¹ÔÐtžŒ>KÛYzêD¥éÑ^ô§¶JûZCÜ4¨Œãó5U®ý„…öÔTi_l0ÎÆÚ(9¢åɑţô¿ •»?À'ÚŸ‚ëoèۺã}ÕÁ4˜– Û Œ€Túç4Oƒ¸ûoRïBãŽôðœ´]í9-­y3ünd®„Äio„_–éñȼ/|* 5mÔFâSc §ÆVÿ½?9´Æß{σ:ÏÔ¹$Ór.©p²Œcýü’e²½>–mð©ejÚ¨¯¼äE¶¿Ò¿^áfšờ;øA—`ùTCæMžËcÔ§ÊXeIµÕ*ýlf˜!“Ä„ÌÕr¥ØR Ê?ds£AvºßZ+¹èð|r(aä$yR’Ú YÛ²XÅ%Óv»f òëú!µŒŠíŸbp±A ’?ëë[žïŒÁ?yƒmt­Ö\¤ƒŸ¢»t ¯êh³¥¦Ô[zÓðŃßþ4Vû*Ó26oq‘ŠK¦ÕØê¿·RfÙ°LZd[)_)[_ø$,Ó“i·†}—L«±ä‘ÛÉ´/~õøÕ<ã•8Å'yax™–±Š»µi—L«qKùõÅãm)>É ã•iû¢hŠK¦eÌÊž¿<àsrØà˜õ¸/òë„@é¹àTýË?&³” gJÂÌ(0k “i&$Ófí ËwìØaXn^Û¡C8:v@Ú(ù$eK–, |›%Àgíð Á_|!V'él~eÀ«ì2™ ކëZ|é_Õðç&ÙR£ÀÝЕhµAÀíùóB+|³% ”üÍî£Õ;K–, *Vü]»Òþ7 üúJ¾F´½8iÈØ—! a¼Pj6&L¾zÒgÝD¡ogå- X°$`IÀ’€%f`=-u²ŒÈ—þnVÇ_üh†8¤Œ%K–, X°$Ð& Hý«êi¡Z.aÕz¯t FÚˆ è«DUX+mIÀ’€%K–, \> ¨úW¯›õTUX}È·Æ(à†13à AÈúcIÀ’€%K–, \V HÝÌDZ¥›[b`ÚÌÄe‘…Ü’€%K–, |ó% Ho•nn‰Qà‹€4T˜oþX=´$`IÀ’€%KW‡Xÿª:XêeæÎ¬¼ç-1 ÔÆ’€$*ó*Œ•¶$`IÀ’€%K–¾ ˜ée³rÁ¥/£@*|Ù}žË}"— ­Ø’€%K–, X¸¬Pu´šf¢ú¼)#¾Î)Ð+|}^%¢¦M‰©¯¼òŠš½êÒ“'OöâéJð«§éÅ€•±$`IÀ’€%KÍ% õ/ëh5Íú|óÖº_FÔ5"¢7ÜÀ¾3fÌpW«gX» ] ®Ó>OZ–˳¥ežae§}á6ª_¼x17 füêéJz2fDjÚ(oF³V%K–, XðH@Ujš!ôyO+“TkŒID&¨ýŸ#÷ÂaaaÍõ ]ðU§ÂqZ…•uª—e2fx_çNñËm$NIOæU¼2mT狦lgÅ–, X°$`I ¢›MaZcHžØ80E,|ÅçÏŸ»CæóŸ¥;I†W•«š–¸žƒÚƨLUØj½Ä)륢æ<{±2 FüJ\‡ì‹Z.Ó/ç%ïœöES¶±bK–, X¸v$À÷ö²²2lذûöíÃÉ“'É{ìáø(.. À¨Q£””ä~°l§Þòànª¿ÍŒ‚@•½$Þª¾°—¨¯¶¬\õJ”¤Ò•uË2/ ,—Kx=Œ>/éJãA_Ïy=¿² ×É´ž/É£²/šŒÛ –, |}`wüðÒF?÷__¾E”Ù1{li`=Ä«Ö}ûömiÓfð|¯ç¹òòË/ãã?ƽ÷Þ‹… âºë®¼ñCà™3g°qÓFÌŸ?wÜq}ôQ¡_¤¾h†4ðÖÝR·J?›fÈ$1fÑ,0ûì;š­¿ * L*RYÆm} RÖ©ð¾è1OfÁŒß£GŠ Å4^{í5|øá‡ˆˆˆ@—.]P__/&ÓO>)|e³w,¶¥—,¦å‹¦/V¹%K—_Ÿ|ò bccÑ»woáæöòS´(´EüŠ7**ªÅ(xø«¯¾ÂîÝ»1pàÀ·— Xœ8q/¼ð‚p‡ü׿ü7'Þ,«EÌî’»uëv 8úû£ñÇ 0wî\LŸ>=zôð©Ï¼y2ª.f݈þö´Ö¥ükdï*1™f†dÚÚON*y=˜TàR¡ËX…“e2VëdZâ‘y›µax³:nËuúzžHË–-Ã{g‹/Š×<°¼<´}ûvÜpà à'>ø@¬ŠÜ~ûí¢nÖ¬Y‚4%ÏVlIÀ’À••ÀÁƒ-nÞüð¢ÿí_Yn,jH€_ËÊW³ÀK~HãU‚Ï>ûLܯûôé#«Žù^ΫÿýßÿîÝ»ã—OüÑÝ¢E¯DH¾Žu?òƒã/ŸxùùùxñÅñÛßþV¬&´p®ùÒ¿zƒÁo|Sà·1´Ú `äRÉú‹gÏž-¯” ï×sPÛøKk-šÿ5j÷ÒK/á»ßý.>ÿüs”––ŠwG›7o+iiiX¿~=ŠŠŠ„ºsçN :kÖ¬Á©S§¼xjNÍ*±$`Iàë’¿Òã%^¾¹sšoâ[×Õ-ãôé§ŸŽ!·ã‹æNŸ>-`Z:÷øÓßÿþw±¢4„îóÁƒÅk§ d(Øl6Ømhjl›Ùys9܆õÊȑ߫ÇÿøÇ?DYKi+ðÒq ƒE +’€»¡+á‹ ¶Yž—͖΋‹‹ñÎ;ïˆM)))¨©©{xiˆ•/+ݱcÇŠe¨Y`‹ŒƒŒ%¬ŒõíΈ gÄoÏž=±nÝ:¡ìCCC…•ÇKQü”1bĬ^½÷Ýw*++î#GŽà@||¼@릤mÅ–¾]pà³Âw`KÁ æïˆëÏUá|#Ð5:]ÌÁZ,:V|Ÿ`#ÀNOtNzÒóuoh1]ƒ‹u_áã/.bà=á½ËJhe}J@pF@‡Æûï¿Ð°P$÷JöáñfÍ÷cwÎË'{/@“ ·ã{;Óà‡Ä¨È(\th«ü°ø»ßýN¬@ÔÖÖbðàÁB7ð>¦Ãm»ÒŠÁm·Ý†mÛ¶‰Í‰¼Ra¦§LXàbVxR!ÊX–s¬ ÓL·jø#Ð ±žºQž;mÔñwß}%%%Ø»w¯hÆBcƒ ''ÇKÁ4HÔáôä «0jZÂÉØ_¾žßñ;,~ÅËA®¿þzL˜0A5­ÂÊ4+O=õî¿ÿ~±Q…áùfÂËŽ<ÈÏ>û¬¶tD@®4ðæCÙžáÕ4ç­`IઔÀ…bëWø`ÏDT¼>¦ÿ#îùnïr9¸ F÷a@µç¾­9‰ü‡É è6|>‰]‚Q±k†¿M]¶ã™{¤‚Vš´")Ÿù†Ï{ .]ÔÉX ¼gK ñIâd¤Ç2³—èžD7H‚½tќ襻°âÝ2Œž<ñÔìRf tävºf®» £G_D'ƒ:è·>+Œý8‘TXa744ˆ{0Çü*÷®»îrËËyIûb€ ¤1è® Á8ù•0¯lóFBþ‚•~‡Aè߀ØgÀ÷y¾ŽÑÆô¥K— }a³5ŠÕ(†gÞðÅ_ˆ¶-0 Týë­›ó®Â6¯¥’ÖŒH"fü1Áð>ƒ^)öïßß þÇ?þ±xGÏ;û%,ã©Y®–qšËýë_‹e}]RRžþy}±ß¼J‹Ž ƒÄÄDÜxãÂêã%!¾‘p̆Lsž­ÂÖ|2ã—) À’Àe—@0ì$DÅ aX:Q{UPtT|€_Oý Þ,åì0üaÍbL܃Òõø ÿwøÉmuáë?ÇÄ~dA8*°jîTün55è7o¬šÛcèV¤”÷v/Jÿ ü^PðþS_º JûauqZ]Âà‰xû÷oãþŸ¿†ieOâ|Á|ü¥zFÔý¿ø¿ô4ïll|>É_ÿÅ* ÄŸÿÏD¸š{ ?8°ràß:ÿ~ùj¦,è&îpµ,.ÜŽ›'DüžV©çÊ?FáæÏ@o8€Ð9æôЍÆÛïj« ë_ù+®»õ^|/žn£ÁqàÓ (ÚýwÅàûÀ€ë:Ã~ö >üxàþht¶ŸDák»qó ë±ûœ'È^ƒïÇÈ×QÊŽÃEÿÂÖÒ3„+]ƒí‰ûºoGF ^î¼óN𥆕AÞ³9&ê0IDATÏã¬>8J_1LÀýƒbá {ÉÞXvöÞ ƒàæÁ÷`H¯®8úÑûØúÆ{{$ƒ'à_»Nâ¶Ìï#):¶*º½:£è‹ž¸gìœüw!v}RŽ^wß„&z}žn]üäy©é<í¡8‰]Ûm|ÏX„“Œ?ØU‚[{ ƒýÀ&2ê0øûÙHê\‹ÿÚ„“õĵû¶ÞЖþò½]÷@寛Y?ñ+bVølÈ‹õ¼þë¿þK¬‚sœšš* ®cºl0Þ›ÆøZXG«zºUº¹%F/’ÆoŸX,5ð·›,œ³gÏ AI Œa8ÍÛÉï<9md¹Œy¹fêÔ©ÂãAËË[â5øNÆf8õünݺOÐ'%¼ºÁ‚ùb+‘áØúãKN2iô’–ŒhZe–®. ôÀõ7Ý‚ý€M›>ÄĉHèÑ}?AÁªwQ~Œ¸íƪŸBtOL è'?ù5þôÿÛ»ÖX«Žë<áÞk?jâÚ˜k01u]YÔn ìÆjäGª¨jc+ÂT ÉV‚Ú‘…-+ŽR«ý‚*5l«Ä²ÛºJ_nåWi?„Òª¸Ô‰T'€¡:VBZWÜ&À…t¾}îwîwÖY³Ï>Ç`À^#6kÍ7ßš™³Îž½Ö~œ}ïÛn]‘Æ÷§—ÍàÒJ[þhg:²;þç¯ÍgÒÓö?I龿þdºdj>,-¸>­Ítœ wÄçÜV{ð:š¯j¬ß–¾²îW3ùHš¾&nE _xeZ¸GáÁë›]ûéD>˜§|ïyöÂtÓâýéï_{9}wáÚ4-OlJ>ÛüßìË#ÌK×.œ]=<8?¿¤æßÞüf:ø?'Ò/ÌÂ5ŠátÞ…ç¥éy^G†p½8­½miN3òí„ ¦¥áñÖ±ch¸uŒÃñchdJÂ]‰ÅùvåÂLþTÄ÷ùøŽx¼íç£"æð{ÄWðò#Ø"ÀqŸI0ÌkÇŽ9îl­Nhñð9N 1.®B¡ Ä'ô7@ÁŽ¢‘q]•ð®aj×U{à”õIFC ŽÐņ‡1ðkpÜ2@ö„„:Ë\Mãö[Óo.ž›ÆïÛˆ{iôÑ”nÏWøýÇÓ=O,Müñ×ó¯„îiOùÁ'¿”ÄN+î}5}ù ËÒ’+6·Ú–~9}çÏ>n~ð«é¯V.]ûäïålãöüÈb©\’îÝõlš¶auZråD™Zý$qͼÊhÇT¹< Õ#oþMZ•?صï³y>~áše«lò‚|Z“×v+@§YóÓªëßL_ùPÖCiä¢Åé–ë~œþáù§Ò®ª£§ëÖÜžm£ùœ+ÒGgíJ¯~ýké߯Z“n—¯ùhŒÛ¹5“©ºŠë#­¶ê¸’Ç‘1§ MÚ͹î–tý±íiÇKÛÓÈG®J¿tépÚ} sCŒÂc¯ý´¸µ»lÙ²„¸+»ö!>&°Cøþû)øÅúDR€çO0?‚;6ô‰wïù!Žd^¾Øš€ùTŸeüHzgl<Í8oFíY<écù—?¸*1<í¼“úò"œñ3üzÇ(Ø‘ðTŽK?=v<äëû6<ûé±4eZ>“¨ck„qFRî.—±ôʶÇÓžkÓg–_j‰ïÛ:žEë©K/¾[¹reWÐÇe{s‹ù½÷˜qbŠ_ à$/'Â+“‘(ðç‰Øwð`!0Çm <;Ç1qõ^‡ŸNÂvÑ¢EÕ‡¥Ï¡øèèèïäúÞ¼! ¶.C`‰PÏ:7\á†ä¡J ÙË™H0É} ^4SÇ_ÂÆ‚_À‰xK 6-´«ÃùñÑœÌ4îâ¬'â{«KÞnºé&÷3âXŽïI6ôÓOÁ>‚¿yƒgò‰qûAx_ÆÇ~1OŒ‰ä¯VÞ¿Õ„·Ýxû€]7‰ÍEλÙ];æìê¤ °äò šõ-[¶Pí:o7L(Ú'úaÝö :ÛØ‡ò‰©T>uüõC{UAm<;wº^czö…§ÖX£¸¤Œ7‘âr®{ûàÔN¡ïÞ‡æ|,}˜Æ~r4Ÿ æ‡/8÷$]è{*§ÍÇU[û™ŽÃØð}ã²>¾ÿ~ öÜ>¸æškª¿’‹ŸbÃûk K Á[o½Uýݼ&ÏÉ¡ŸÐÖ@MNÜ‹ñ»”4 ö¼ô™kqVïÃ3à–Œ{µÓNyª³ÝJpêxh³óÅ¥EÞ±ý5©÷³IÁ „N®°Îñ22Ü®ÄeeÜqŸøL/C#ÓÒ¹y«Jn¸NüA*Häù9ná/ÞbÃ-k{œoâCœÝcŸÁ3 ¯¼òJõ+ºn¸¡º‚€[hG¿˜#ö)\‰:tèPõœÃªgäpú$\%`ü(>—’‚Rg >*éMüWqà /#cCñÚªÓF>Û(kª{6–Ï~(½ùÒ}³OÕaëqØ'ÛXœ~` ãŒ Ï !Pà,NF;ý3ŒœLàØÎïRcEÓq`ƒ«—_žÿ¨U¾Ò°sçÎôÈ#Tu<\ˆ€ä È÷ó«Ž‘pâù¼ÚøÆo¬Úa?ÀØ‹»›ÄïâÇ*%%Œ:&D½dçâø"°¡h@uÉZ§Ñ–ýØvàŠaq£Ž¶lç|d¸¶jçKØ'êè›r sÊûÛ½ŽçM?=úÁ‡øå ‚?7^ä‹ìÐŽÄ·qKŠ·šö‚gžy&mذÁš1  lš0´ûišp€¶á„R7 åvÕñÊdz©œmó=›|s œÉ8YãLþŒ1·“ëœD"ø#AÀI Šž bŸd¿â•‡uëÖÙ cÆdÊjXKœ¨ƒÓÛ›&½èê¸0‰6ÜïûmÃÓ¤œmó=MnŠaÃáð@x@<0hð—.Úª&H6& ã¯Æi¶A*N®¶wè­úPÏŠ—]è =;Bx <„ÂÍ=°wïÞêÙ\!@BÀ÷ä4þö úÊu$)@Gìè5 wàÃáð@x <èíÝ»w§çž{.iB€g œÂØŒ¦bsÓÛ¥0w= t%<„ÂáN !xá…ÒÝwß]]!ÀÏc™ t2«$@bs?W êàD”cæÕð@x <„šzÀKðóF^10ý þj f\­„›.Zø¨ lpÊzÓ „Âáð@x AMõVk'Æöð_ì?±~býØcJm$ÖqêÚ¾å:Õµ…ÿÂð@Ý>R×ûOì?±ÿøë놛xÆ\$ØgU21 ’}ezG'ÖO¬¬ì(ˆŸ”wsí†$A9°£-õ µû·:êÅ÷ v¤ƒ¢Ød€Jð0iðø “p¸eµï‚ùpœ¾³A؇ÿbÿdå´lbýÄú‰õsjׯ\茧ÐWü¡óŠ9ÚÌë‹Xnî,Þ•‚NFw‡ì ƒ¡pç  mš žM ` :ûª€ÿ©ê L+ŠÚ¨öÍ< >S½™uçwö±ÿÇúoºrZ<]3ª7íEmTûfPŸ©Þ̺|üC_(ÜÜ!¹ñ6=$¯ôJ8OŽ‘M;K]RÀÉÀ:;{Àà(hG_œ$àL²ZÕ!éÌô© Ö)-ßÖ-uJË·uËcÒòmÝòX§´|[·<Ö)-ßÖ-uJË·uËcÒòmÝòX§´|[·<Ö)-ßÖ-uJË·uËcÒòmÝòX§´|[·<Ö)-ßÖ-uJË·uËcÒòmÝòX§´|[·<Ö)-ßÖ-uJË·uËcÒòmÝòX§´|[·<Ö)-ßÖ-uJË·uËcÒòmÝòX§´|[·<Ö)-ßÖ-uJË·uËcÒòmÝòX§´|­ƒƒxË‚:ã-p¶CŽ º&Ôsƒ·¬úÅ&0`A@F8êE61œõsÔÁ…Ž “‡m©sœÜÔ1&Úµ í,Š{:1JÚQ*îéÄ(iG©¸§£¤¥âžNŒ’v”Š{:1JÚQ*îéÄ(iG©¸§£¤¥âžNŒ’v”Š{:1JÚQ*îéÄ(iG©¸§£¤¥âžNŒ’v”Š{:1JÚQ*îéÄ(iG©¸§£¤¥âžNŒ’v”Š{:1JÚQ*îéÄ(iG©¸§£¤¥âžNŒ’v”Š{:1JÚQ*îéÄ(iG©¸§£¤¥âžNŒ’v”Š{:1JÚQ*îéÄ(iG©¸§£¤¥âVWc+8Ð!±!–ãɸ&lS`(v«ðŸM Ú ¢°#h À`ÏÀ*0L W8ÚCrCíijÚw½ŽÝoaþ‹ý§ßU3Éõë'ÖÏäzèWëgý€‹ …ÁEëÐyµºn°GEûk!ÎÿuI'C3tŒ`N‰I p Jpô±óPun¬CÚ‚¾zíxuœº6ŽUÇ©k û–ê|T×þ ÿÁuûH][ì?±ÿ|Pö¬Ýø¹ôQ§®6¨{Òö‡>:J))€¡eÔQ(1 ‚=HÆ6Ú3)°ÉÛ[Ö-û:ÌΉv”^»bªÓF¥×®˜êjGÝkWLuÚ¨ôÚS]í¨{튩N•^»bª«u¯]1Õi£ÒkWLuµ£îµ+¦:mTz튩®vÔ½vÅT§J¯]1ÕÕŽº×®˜ê´Qéµ+¦ºÚQ÷ÚS6*½vÅTW;ê^»bªÓF¥×®˜êjGÝkWLuÚ¨ôÚS]í¨{튩N•^»bª«u¯]1Õi£ÒkWLuµ£îµ+¦:mTz튩®vÔ½vÅT§J¯±”íÞæ‹©ûƒÞUz%4B°fÇì„ÁŸ@ð\`VÏP;Ù@[©°ŸR{/<ì'ýÜËW^{ø/üW·>½}F±Øbÿ‰ýGWD:×$ŠJèÜÐÆø Œ:%y”૎zW)}qÄ!=Ýžý“É6 ¦8ê˜ÚQØ/tàZ敯„Û>J¼ö(ù©„wZ—¿ç°ý?Ö¿]-ÝõÒ:)ᶇ¯„‡}§J~*áÖýÿÐ/Š'+%à  ºÚ¨^ø_éJÛiÈ:%Ò€¯:mƒ='É:û „Âáð@ËŒ¥ôëÜÐF½$•CÒ-uYÛ¨CªŽN‰)NŒí(ä´j­ÿ-†f1å«îq=LmT÷¸¦6ª{\SÕ=®‡©ê×ÃÔFuëaj£ºÇõ0µQÝãz˜Ú¨îq=LmT÷¸¦6ª{\SÕ=®‡©ê×ÃÔFuëaj£ºÇõ0µQÝãz˜Ú¨îq=LmT÷¸¦6ª{\SÕ=®‡©ê×ÃÔFuëaj£ºÇõ0µQÝãz˜Ú¨îq=LmT÷¸¦6ª{\SÕ=.1H-Z§ÎlÖ!›èì—\Ö+Ù+øj;õ:iÛ00 ÎÛÀPÈmÕêÿ‡}?|Û[؇ÿbÿ±«¢y=ÖO¬ŸX?Í׋eº~`‡B{­·ZÊIí<©ûiË&_´r<½)†A•ÛžD(áð@x <=À„OoŠYû®û ÒÊm¢s0壬k#'dx <„>HÐ o?·×¦XÝöÙ®÷”=¾Ål½=XVêÚ”zx <„Â-h ·>±m¶¾‡Ù~ªú» Òuöumîd „Âáð@x ‘ê}][mçø[QÂáð@x <8»<0pà?»>fÌ6<„Âáð@x <„ÂáÓçÿ-¯;I—wIEND®B`‚vlfeat/docsrc/images/using-xcode-copy.png0000644000175000017500000005050712236612215017401 0ustar dimadima‰PNG  IHDR¥Å{3z ÿiCCPICC Profilex­—y4U]Ç÷]ó5d.™2ÏCæ9cÆRdÃu!¤™•™’¡%¢d(Sæ©D„L‘2FfïQÏZÏzÿxÖûÏ»×:wö>¿ýÛëœï>÷»~P’Ùp€'ÞÏÇD[ gqé2Žh`  X oçàKP52Ò‡Bþ¥mØÉ­a¡“\ÿôoÓ>ІÀ¡Z—?¬rÂöØì„¯ùü ×vpµs„8bA3uˆK!¦pùÃu'lÿ‡ßp€ƒËÉÚQÐÔxG7<Dß!Vrtòu€nŸìëèèëà q2Äžž^P~Šfˆù>ÐZŠEˆ¹NÞ ÔCí2”W¢Ê“ôÏ\”«&ï渡:híCîæ6M~¿+]¿¯³„øït025P“ÇÇ›«~Þ¬œrœfœîý>#>37›6§9·=ÿpÁì+òëóEû%ª¥æo„eÜòÀ÷›?ÄÌ­d®ê¯ÁÖj×ñ¼_6s^Ú¢ßÙÎøuy‡ugf·t°/{?è>L?²;9>þ[KÔ(ÑÌÉ9ÒFrIŠ ,U: 5mä©}z<Ós;ëY¶Ç8ŽXÎ=.gî^y¾B~Œ€§`¿°¸HŠèЏ–D¾ä¶´ŽLŽìÒYiù0…v%e•DÕub uÍëZOµçutuôõK † xMM5ÿz‘ÄBèÒùËxËD«'Wº­mQvöòñNÑÎy.5®ÝnSW7=ˆ<ñü^ò]o g__¿þ±©×r‹ƒ*‚Ÿ]¯ ©m {sãmxËÍ–[-o"›n7D½Œ®Ž©¼Sû0./>#!91&éFr@ŠÇ]‡{—R ÓÔÓe3„29³è²‰³sÖrgî¿Ïkϯ+(S_RìùЪDÿ‘|)S9¦|»bîñГ¦¿Wf?zæ[eó\¯Z¦†óù‹ÝÚÙº¾—u¯ ëã_û7X7j7‰4Ó7½YxÛÛò¼5«-¬Ý¡Cû@'Eçz×pwuOZ¯_Ÿi¿øvàû໡¢á0H}ÑÌÈôÇ£qc6Ÿ$ÆÑã£eŸƒ&u¦è§æ§«¾„ÍèÌÒÎNÎ=š',È,}m]ŒYÒÿ†ý6¸|÷»Éª}+±«š«Gk5ëW7Ø66à ÿü´±Í¿ÝÿË{‡z§rWwwn/x»_x yÐrh|8utõhë8ø·þ¸ BiŽrE‡¥cʈHFH—Éá´”¼X*cj{ÚèSYtô¯ºǘ¾2o³ÂÙHØépìÜœ§…¹D¹ÅxÄx…ùøÏðð³ Ðb÷„–…ÇE:D«ÄrÅoKxHšHIKÓKïÈŒÊÖÉ¥õ‘7TàWD)N*Õ)§¨¸©ª©1©m¨wijk™h󟃟û¤óL7VÏA_Þ€Öà‡aûù£ cS!S´é´ÙKóÔ ø‹ç,8-.\~jkåtEÑšÞzݦ˶È.Äþ‚ƒ°#‘ã”S­s¢‹³«¢­ÛòÕ·î™xO <#~Å«•éíé£âKë»èWïŸ`{M<8Tt]7„9ä{èë°„WÂ…ÃnößÊ DªÞ¦¾=Ucq‡ÿÎaì`\q|`‚~"GâvROraJÐ]£{|© u,­*=>Ã9S5‹%k'ûCγܤûžyzùü$ßô>)J*öyx¡äì#öRTérÙpy}EñãÄ'A9Ušé™ Ùròxò- ŠnJ9Ê2,36‰ IBµMíM½BãI³JëC»}*”M—LÏB_Á ÏÐËhÇø‹)‘™¹…ÅŽ°²i²-³ßÅÉã¾r¤qjpnŸ.ç²åfàæIæ=χå>“Åo' (°+øN([/¢!Ê*º+öQ¼V"[ò†”‹´±Œ¢¬ ÛYjyŒPØWÜUÚQÞS9RC©Sh0jòhIkŸ;g¥ãý«=Ôkðå<ò@Ó|³óý‹B¶—Ò/÷Y_Ñ´Ž´i·#¶?ïá8ã,ìêÚw•ÓýšG?ä~Q„y-ßrl@àµÙ £àæ‰ÐÒìáY·è#Òo3FåÇðÝ©ŽSÿ螌LypO5u>=!S.k)'÷¾Y>¶` 0­ØºDàÑaÙûŠÊ'I•¾Ï®<׫Qª•z)^/Ñp¶IëÍÅ|[\GeçXIŸú@äPß®‘ckW'7¿$ÌÉ.l/u}¾ú|£së×®øÁ­ßú#1 8 Ô €8P :ÀŒ& »‹4Ÿ‡¾x=ø-ø+øBშFì •ÑÈaE@µ Ðt7Q Ñ2Æ󒘛8•MBò“”@ºFæK¶KA¥x@)MÙ‡u£ÂPUPSïÑ”Ð^8E|ª‰.^’~ƒ¡š1I™Ãüž¥ˆÕM›•} 7Àñ˜3þ´'—1·,/ï.ß·3üƒ‚-BMÂM‹¶‰õˆHÌH®K#ddEåtϺÈG+”+ö+í¨œV5Q‹P¯ÕXÑ:£í|®D盞¨~°AûùSF.Æ ¦´f^æ½nI—~ZZYµY‹ÙäÛQÚ‡;ütrsžrµpt×÷èÄk{µ{kùtøéú÷]3  ¶½¾ê¶}‹&¢à¶HTcŒáÉ8B<1-™/åõ=ãÔ…ôë™Ø¬’…ÜÁ<—üÃw‹x‹_—=š+ ¨À<ÎúëLeÝ3­ª¡j«š¹Z÷ºÕWÞõë øÆÅf›7Ã-­ÏÚ™;n¾›éRéÎîYíSíOb¶|Ÿù¡ï#|TlìʧˆñGŸg'¦©¾pΈÍ*ÌiÎë-|5\Ô[Òþ¦²,û]èn…z¶º¾öy½sãùæýŸ‘[îÛF¿¤vXw‘»‹{=û•ɇ^G†Ç<'úÿ©—~×$ê^^>8}ußÃÿß§‡?TGýn'%™ÞÜê©¡‹:u^Àº| 3¨ ÍÿÔj'ñhÈÏr­O¨™§à¤û¯æçÕq¨{‚|Ü\\ýpªP¥ê$ˆÓÁ; âÄEEeÁš2 ¡ÕªKt pHYs  šœ IDATxí} \TUÿþ™…vdQ\PPqß´2w23—¬ÔzÕ4+ë5__µÌÊ×zÍVüJß,+33)ÃÔLCqI3535M \RQTPfû?ws™.ÃH3:Ò÷øñrî9ßí<çÞçžsî{ef³™Q"Bào€€Ò]m$Þt’d‡ œ# “Éœ TU[¾“¤6ɪ¼R9!@îEÀ”¹ÈSb¶»¶y±’…b-eB€pI.³-´Íìîè¨z¾³e.1_9Ã-Šå¢d$ m(O„€’œåP(îVÎÀšX(ZvÆw¶<Åó¶[˜Üå¦muEg”!B Ø2—˜çÉ]±¾lóU®ß‰„eKjyÛ]ØuPá­ kÐHR!¿3¶T%æ2ØK°âå  Q@šïl‰Ì!]±¤r†ûãå•óÑÐ.!@Ny 2bžg°­*ã`b`¤ra[nâr"‹ayq—çù®N§+--Õh4z½ÞV€«ˆþx•¸KB€ n ÎS\¥2Á©T*???µZ ˆIÜå™ò]JÉ ÕÈ‹»<Ï·Z­öúõë&“É××ΔJéA",P"BÀC Œº@Gr¹<44t$’ÏÀ¯m»vT%²*8µñ ¨Mä;äKJJŒFcPPB¡€K ñ F‰ [‰¸ Ã:Œ·nܸRòñññ‰”ÇóœÓPˆ ¶v|'Æ*’Ó¡%°a¨BB€ n%œŽÀb˜Õ‚”0ƒwì‚éSñ<Äx9¶|ÇK±å‰+X÷šã %eee=b2”B€¸€‘Àw|… yNv|‹¨@SÈ£œGXÁwCBLåTgýƒÉ,¯rPỨ‚Ü9räÊ•+| ˆ1gDDDûöíA”˜ƒw%uQXI]˜,+•>5S7 h©B©ˆŒˆtÅ{UQQ9!@x3à$‘檘¥ˆ„£øÏþƒ:ñ-2‰³l¡[ì^»v-00ò•d°œwüøñüL‡fxx8¶ð D92aaab(ìÕõ‚zXppˆB./,,ÌÈÈp]¡[¼aNýzaµÞ‚ñŠ]Sé…³¹F¿ _E•WˆšÄ ³g<`Ö1Ã…¬Œ¬Ó^×)ÃCjЀÒë×¾¾ ]qQ™R­”4`Ê¿p¶ LäǯÜÕ£c ªÙwð^´+ÕE—ÿ̽nTiÏž¹,÷Q+\Qr¹Å 8x¿ »à ðCpp0|ƒÚ°Ë ÎvËÃ*ç;‡¡À“uHWþ$‚æâ¦´° ²ËÊÊ:vìh®aÆñññÍ›7GòsÂæ¹sç0¾«S§Ž$åquð8‘«·hÞ̪îcfæóçλ¢^î½Y|ófÍbbê Þ™™?ïLݶ9ºü3;7|½teê6!Ëͽê׸i¸¯°.àÖ¤;±ýÛí‡OdÒÑ£.™ê7‰TœØœúkid|d+»´ü%²–½W9wOþ‰]~<Èíçä©‚ÃBA 0›¼DÞ²W£ššuî”מپlɺÝz…~çIE¯Ž n¶¦ë¿¿ú汞ýšüþé¼Ëq÷ÆøK‚_öÛï¬ mݯ‘p¬ÿE®4Ê^ÆÆ»áòö•ßi$Ôõ“ŒÓ^¯Ê½Ò_þûöê‚úÝb..úð‹ –=í;HWq`TiáÖƒPu(·°|Ç×ï¸Oq@‡ ÏóLÅAh¥8á/tÄ]‘ò8Ùa‹ %Û¯ÙÙÙõë׌ŒÄC1à&ÈÃ2à <¼rùòeDGGƒÑ*[àêõêÕ‹ŠŠòó÷óQ*1žÄeóY‹º^^žsõœœœ ïr¥Áh0ÍJ…²nxÝÿx‡@UÞÅxJÏí}íƒMJEƒQOMkhÌýó䮵Ûroôþ+‡²hÞ6cÖœ=xTÖ9)>¥C`@€7Ã5Ù¿gõ@–+#ä _aÂVÍõ¼AsáèÁŒ6÷ô Óœýqǯ{¶î{bÎsq¾ÊH¹Bý̺€îÊÙ3 FÎxö®3–h´7Û]I‰¢}C¹æÒ‘3Š6ú2¬ÃH95«šË›«Ìר£é҉×üâ:ĆJ¹pRfãÝ`<{ò÷ݰ*â¬ÚˆIsâÀ±À– ׿3ÇýV§ŽjÙK¾)2Dmßï–#Ôr`Ti¯Æ Tiñލ)jÄPEŽã<†]Nk|'Š:0vºHvœï¸²¨"fNŸ>± ÷†áã5<“ŒZ¾Š‡dP…].&j‰^ÂÔÔ ¥%¥¨Õ°Š'ƒ:ªœ¨Ÿ9sÞËÕáÝ /Ñ”"T£I˜Øƒm¹:VÊXÿ=Ènü‹Ï·®c2˜dQ1M»ö Õé Æ›=g+Ùv,ÀÀ›ÅwìÓ¯[j„^1èJËL‰3“ï6j‹K ÌlBÀ€Uîh¯ò¾°TÚ&iÈ}Ñ ù]¾cÙ¶«×´M£Í0 2…Yt®äX»²¥›,)¾šÃüÛŠ‹‹oRÑ*®Tšÿò@ÇD2óþì«#c¬¶qm6ãj`Á§Æç¿X·nè³í‡Øšv!oã]UÿÙädƒV£5Ã…›Hæâíß}×±Q‡A˜»u×/å²h…QWdŽ òwèv³,€X†"UÛ¯1U›¼j*óÎ&~µÉ;¾º ¶‰““ñnÜ‘Àä§?‹@y. ñà s[~3¥2ŒPaì¸0p/<€CÖ ‹’, "*Iu ¹wAØŒù5ž˜1ƒ:¹: ^AA¤:7h¸’~YÖvØ#-µ`K¡P‡ÿ‚9ìhr}ÿþ—¿YD{Ž|rP§XAÃ¥Ml‹èß!÷‹/`·iÏ'G Š .ù%uÅÉèÁcŒLL9»SvuwKÐq¢2³áª`Mº_>_šÝäaí£Xy+…N@9{Ó>Ý$xh™4nÔÝÍ…'Ê™æÄîï¿Øl‰¨åÈWëd)´ZÂý)ËhýƵâ@5Sñ…0Z„XI^æ®M+7Ÿ@À½Ÿ~´Ã93]ßûÍ7›~;%è·ìýôÐþ …!­¤ É`D¿ºC_¼½›)eëÞ™½&êái“ÛG¨@W§O«Ë_~s€Ýÿòüž~V2Ÿð~÷<Ð"²nAR¿˜FŠŸW¿w¶ñÈQÝ„ ?‘¾â ß½ÝÝPP¸ WZÉ#“€Kª—}·N.“oH}o]nÓ‡§Ýß^kK%ù#?®ÿzû%K݃ÿ|µ[4F Ü»‰Î}ùß5ý8Z*ÝSü Ô­ø—ÛEÌÕù›>x/O¦LKýà»Ü†Ï¾:,P3uLYqvû'GÕg&½Ýan9Z,÷Ë9kúJ (ÎÚññ7»,!wýìà6õ…'Éj_)!¡]8Ç‘p„cËw9§!Œpꉇ3Ê ùlL9Ùÿñ)ÿ-ÙñáËúÍx½l|è¦u?žíÜ4>5§7oý£í“ cª wB¾äƵük*œ²L® ë0}ÑùKeBØø/È á›s÷¥~¶ÙiR‡†e×ò Û(vDó ÎGZŽLipøA²2«ÍPÌë÷õèù×ÄÞ3¼kL@YÛZn,Õ‡4inÒêžok.?ä¬õˆq€ ,ÛüÇOÍêÞP•ýÓÆ•KÞ0L}ÅÂÈvM«;œø)-NvžGoŠy4Óf¨ai´pYö8A`kËtœGQ(‰')2|+2÷ -.#i¢.Ï@XŒa rޞʠŠ'î‚o!†Á,pä+«óNó²2,ìR^ÎoJE⨭ý´eq½¦>pbÑwó:GGÈÌ:3Kúç¼¾ |ô&ù°§úýþá¶Ü‚»Û´êÃÖ|ðd^£¶¹G¹,ëÑ¡±¯Q_±ÊŒ¾æÜ«’·Z≾ÿ¥)Ý}…AÙSYi9„ÐË.îÛü‡¼ó#ᬤDP_&ßõûé-ÛËÌ2¹Œ=u¡~Û¦ ÊËtv$èMfÜ&:´ø¹¦Kyr¥OŸG§u “•ê°9ñ±™#Û†ë eMÍ,ÃG!¸SE÷êÛ‹%òÈFõX–R(4TvaÈ“ ÆvhéÓ¸#ÕŒŽ‰Ž3êõçB×û‰—6Ò ¿Õ±™ š´7øÜ@㳨vw³Ëœî×·IйŒ=rÖ·MŒ©L+­@F;¥ç¥#”j Ì/¢AœùrHžy2õ¥EWó‹Ë'%B÷™xDâ *Ú>:²WsƒNݘËôFáÇãüØÐÂÅ {Uô”Úr$>n¹ÑT?&Ìl®Û AD]¹ð[%m‰à”iKlB°”`c96…Æš˜¤5)bxöÞ¸:Z½¹õ€!‰ÛŽý–sµm¸°¦TËç%Îq[ð€ÐM–T%ßS«Œð×rñ¡D/LE!i¥á/œARTçyˆIZÀT”„š­®‚rÞ d &©Î½óñw­¨Ž8QVå’B²ÐѲÊCȲ+gO³6]eÅ–Cë£Ê`&Óp?FÁ´Œ©LºâA٬ƭYA‰N3¶ûâ›?$ȧˆ1-kŠöÈéKYüðéOßÕ@pmÖß(*1 çeO8,9¡DáaçÁ/ßÜoÿ¡ú~J̦ÔÑžv郵ŸîZkJè;fø½ â|°\Óbbð Mê†G×ÆÃ¥: Ç…ûiJ1š”ÅóSÕÌJÎmùzÍ–£y²èzÊ|ÖF8%]HcÛ2C©ËÚ2­N¶ªº@€ŠHœ%ƒªá#mØW¿œ¹;¶þÑ´3é§3bSÄÊΣ¹Š¥h6€ÿqyÁK0„•‹kìy­°hPždlèÓs:GÈðÚ°ŸÏ^Ñuv¼’WåðÎ)- ñ!Ît·bâ'>ß­à;¾Ï(Š"i·bF ¬Íá‡lXDã„Å©’\ ÖÀ8€J*[Àc}’êЂ.l"@LR7¤±&zç”/Pç[hAb’ê<E@ .iûŽ·{°½ýa¡ŠŽcߟ»ñ`3áÙðDÙu,'*-Smì‚×¹Ù’kùŒÕkækÒb”Z÷íê¬lyýI­ÃtFáȳIÂlÖ—b‚oWh(ÖÐs@ÎdƹX¯ß3Óï‹ç’H€ :V¿Û°·» >ýÛÖ÷¿úê`üÌžõí§1c­‡3“±¬¨H°'ŠQ«3aLf¶ú0dm}ûñ>sÞš©4^:ëgËJ 8ºˆ’Æ®GqÈÁ‡åøÁµÀ9t&FÓ¶£C!FÇd’Ç%’}ôÓé¿ÊãžkTfÂÇw¬l#-ƒeµÙ¼oß/—Štº¢Ü}ßo3ÇuTcàg’E6ïc–eçüɺ÷‘cé˜è+%‰BEäÝC[çn{ýžã¹yyçOÿqäèY̦ô×Núýó×Jüê„㮌¿emÎΞ¥soÜÀk$tz£ÝuÏ2zd­î0K€À”éü‡7¯Ì6ç\¸X"颊`ìübi«bßè:Û*4$rFEL«îìòÞ}õúô4—q‘ /¶¥#”n ®Âê`óŴùŀÈ\¦)ÂåÇ6itF³"2qhkvdÍ÷N•ççžú#·Tx–vm­¶*Xÿ k€HY9çJçÕ¤ -.hÝ·þµ¬(Š6‘½Fç|·æhî5½¾øÌŸ÷0sׯ¡Õz ÜA+3 #3$D.f燌͵ÊÊz¼‘¢„¨ÉõÅ-çG‡-hÎá(¦œÄ9Ôbð…ÇZìb¦Y·n]Iu„uTA€Ï[+«Ã,–`òóó!À½C‹‹!ƒ›¿¨‚@UÞË š4‘='>üÃ×)›?ú= W_áÈŠ¶:ûÈC;ͯ}ëÓÏö¬7É䊄MéÛ@§Ñb¸äÃXÞ¡ôù^xd®aŸ=ÖM¦+F M¥êöwÚñõ¡¡]éq<;m¹¸ ãB[4øŽ¥7p„‹?Æfº:ÝFM6|¸æ£x,1uñbÃ0¹±hÍçŸ O)Ê• Ƕ‹VšÊlM1³¡1Uù­y«{Ëh ë ¿üÁ6dåÍîz¸ÞáÕKßþÁ\¯÷È6lY³Üoâ“­*»Fð$&ž`fE¹cyx•Ða\gDT–Θt‡¶þyCF¿ŽQ¥å3J¬ìá”ç M3Â< ’|‹ŒÈ”| [ŒÈ0tâ™S§Nµk×®*`À&W¯^-**“˜x‚z0„.è†ÿ0„NÔñT0Ôñ` ÔÁ›Õ1Å“ÌÎÕAjPÇc+Þù/NðܲukT2•`€±ØrhÈ}üý”Ú…¥³_P Ê\ª3Èåj•R÷Ðf¼ºú­O:üûµuY©Ž©ý”¥…EVÚ1ÙùæW?œõjW¹µÈêå¡!>ÍõbÛy®<04DÉ e*ܱ5h ‹]¹o`Ó—Lr¥Z­0jÌ>¡þ2näñxŠ,+ˆ6T!*¦¹^Xf˵³zM¡ÆbVŒAi?´·¹•zƒÌ ×ᎅ¦ÌGÊ…D0v§‘L‚ß•i®kÊ›& ]$6qW‘U†úûàRr½¤|Ô+{2©kÊê€`3žwTàá *é@î¤2êQoð\ï)“]Kmû]æ¢0j LiÆ*žˆ(Ø5Fådް+üñ{JƒÖ Äì'++¾Q*qÄÁ͸{ôèѦM›‚m@<ƒ)&O %žùŽ“XO$;Îwœìø|‡ßÞ;>`¿…€.òÄ.2 *xE¡]TqõÜÜ\H"n”€gQˆy¨‹êˆÞ¡yîv0®Äô¶Zï±a§ÀÍO¬oaýÒ†-0¶q‘°êóW$Òvü´NÑ~P°©`¦Â“ –¬ëõõQUÓì ÇNsl αèfõ^9§ª©´Ø€\å~ªrQ9çÖ«²ã\ë¯ÔVŽP²pa)·í;I·•íIŠ …7!ê¢ó*]9¯¸™@œ[òÞZ¼„ó';¾iˆ 3Ø ‚ïpˆóÄ)[ðØÉ–ìßuèÐÁyÓ¹uÎV\Ö`.œ+òÚÛ«îJ„ö2†‚ WýëÕó•[9ÈZm,½~銾A|}sYí¼®ZJ Û‰Ào¿ý¾³%;ä9Ù…Àt<Ù­ß!^ÌjyÔ¶ä+'ç㤠rä÷F¡î\Þ¡ööª;Sý®LU¿Y£¶´¬Ò"0²Y¸\W‚©põfH‚ j†@e‚9Ç6#uîZ*o£Là;×4Hêö PË’o¨žñÊïÉjŠ‹1šTNE™;–0¶xÑ”fÁÂG~ªàfíZÖ1#«9°z>ܾýCë_5ÙoN|sǾÏ[J—í8#J‹ÍÛ²e%¤–+8÷㲇,òíšwࢠÂgyMÒÁX ¾~çd[”±y!c«¾x¡uˆùøÕiÝ¥}„ÌhÔå®™?.Ú’^IÙ«L­™1´ù#„ÒWÖÈH{ÛR?n{Nª³Ö¼2㣴5–ê>¯¬ÉÊH³F/Þž#h5{?›a‘ï“rಥ 땯¤ý¸†»Yœ–cÔe½x÷4Æ6÷‰ž‘’a,ÊZ<¥EeÊo‚‡*Öï°lG|ç™cßmVk8¾Û¹s§ÛB CÕ!€ÑÜ7øøzáÆ…¤Æé;›Ò@QPP`WŸàƒIo¨WlÞZçÏ-CÇ/h´ùņeyg~MIùµß[+RÇä|6ù_ûl}X'-¶6¥`ô’U_55kbg~µ¡I¸nÝÌQÿKKzkH“½Q_èèÏιð©uܸ´/³Û;ùËVÆæ4p2ì~£Ós™3·J/üufŸ/ùýðZßü‹[æN8³`íî­©&=ðq¿9[÷ýðë‚>¯­ÿ­Ë¤öEù§¾˜û±âµû¶L0©÷ÇCWlÝ7ã×#Æ~?,ëÚÝoŒx1`kFVø©µx¹eÆ[Muù§ö~üñ^Aì¹ï>0aý°¬IWLýbÜ–Ò>ë|êÇ…ó×ÞóCÆúð’ƒÞ!B»V ™ØßíÝ»7((ˆæ³vèxÍN ùŽ ÈkZQËßùúúâ1cŒ p"ò$ï*MrÖTákýȹñúÉôí;=xjßZÆ:¦¯üŒícì”ÖüН²”±7Ö¼Òµ.+3 Èúú˜OT!–œüT«PáàæíÇ÷§í¹xYÆd&?J…\fĽ'€à°¹AÆ,·2\ض‚½°æÑ&ÁjÜkê+=üæð«úÉ/°g¾ú|T»p¦¹'ýòßEš¨YYû²2µ‹AƒêWlǘf`»÷Í×{5 Еµ‡a•ÂpYµÿ{—]û±L!Y¡Vh[º7¹W$Ó•5·ˆ)"ëF0V§~£xV7„îôg^ò›5yô=-ªlæ³¼kÐM¸_A|gÛ™· ïìZd㾆|él‰ÚÆ>eÝ€(œÂç³8‘—d˜¶]XòÆlÍèÎu§%׎¿1åþÌ IDAT¹xãÇÞcÆyzÏ€þCÚ2mÿ¤‡}ëªTëT/T0iðNc•OUbAžn¾±éÅAóÙ“<Ó7º0í”IˆÇ|§,Lp)•0¥Å‚£TMyYƒŽ½Ø+«³ 'ö ·•2kÁ¾¾\W-—1¹‘)•øYI(îÞ ¯o&S HÉÌB­9dB-*J,¾,Õ:…°hƒB\ØÀî¨3+½ÿÁñ~ ”J£BÆcB QŒ)à¤Ü²²Åˆ¬ý­6¬þð‰û»OùdϬþ1¶!Šyð§<ŒïêÖ­[§Nâ;œ[“ÉÉÉqÅ‘³щ>î»;©¥*÷"¾Ójµà>¸ÃÙ)œ •RXËÞ£Ù»ÿœ»âË7¯£–)Ad¡JŸÀŽ}G³©û /í¯6–À—2¥œÉ…šà –|ªÆoÀé ~ú‘^4¼K<[{6»¨ßɪßaàÃù²R¼åí=Éæyì-)ÿjåkОØw¨NâÝÃF²ñËw>ºxxˆæÄ7óö|ÿ:*•RÆŒÁª˜ ”-ãY%°ð¯5ØÞ$c KµÞGÀJ¥ êqÿ“lìný›£»Ã‹¦Ð+ïËP{V1•:×òë%&„­,<Ÿ}#¬ÝØo™~^ÿÙ™k/«šH¶‚/V¢ |‡Ç†pvßIuÛ %NWb¢ît%7Êpœ”Ø‚>@vU¬‹ÇÍÚ¹:lÞ#£.µº~(Ø_ÝàÞ韽ðæøÁwY û¬þù½–jUÈVǪ̂R²æÂ‰ZÇ©SÇ?úlŸg¦þ’5ì±û³OØpïÏüd2“ªŠ`ÊCÀóh8Iªæ¯gîÿWßA—Kµš¶/}Ðw~|ñ±{ZÖ…wM[þÙ#ÍU¬Ø?RÆÀw lKÖÃL ·ùùËeK+óøÎ’eÀ¶ÂVÕpÐÜoÌÒQ˜¿3fyäEåÂäÜž(æß¼÷÷=ûpÛF÷½óãlÕâ{þÉ“µî£NÂç³€}ēŠm¼ Æá>XÆãÂF¼ÿ„Kž3à[Ü{²M§Nêß¿¿wµ£VGƒÂ=üB³qãÆX –߉h tFfyܸâñƒN£30u@5O ;Ói4, FÁbÕšâñ\¾|7uÅØœdН_Õ˜Ò73VQL[\l`x¹†fÑŽ˜1h‹á¥Z‹RòÇž- ÎåqÖa §^€ŸÁ€òD”¹à—-xY.H¶ œ)|‹% $·F· I[8yÐm¸E‹žÃ\ «ZM8AC]¹Ç+kÎÅPË-‹™ÊŽJp¹()ñ; •»ß­¢R…¹„C˜uLê‚ è¼ —¥† Ù9Þ³K|ç=}á,œNW¯^…fL ;èŒ.ªR«ÎZ{§ÕñJè”Ó§O'&&Þiáÿâ%¾»3:¬Ñµk×ÔÔÔAƒuèÐÁù’™W5 ë÷ÎG£^mÍ‚Áš9²víÚ{î¹=U3#¤u  ¾» »Á(o‚Â8ë+W®DÆ FÉ„›ÀÈËv}úôAÕzrwf·Ç ñÝíÁ½^1+ÄtÛ¶m[XXˆûH5°@*B]ƒûHØÙyaw™%¾s’·ÂN',Þá‰Ö[áŒ|Ü wЊêÍ4«¶ÉßÝy=J§Ö×g±w àì± BÀ=ß¹G²BÞñ÷÷EHîA€øÎ=8’B€ð~ˆï¼¿(BB€pÄwîÁ‘¬„€÷#@|çý}D„€{ ¾sŽd… ¼â;ïï#Š ܃ñ{p$+„!àýÐïÉn®6mÚ„×:"ÝœI×:.^¼ˆï.ºÒ¬€€|ÁçpE˜d<Šñ«ðâL+V¬Hh‘Э{7úž«¨Õ^¹sžkа+í»œwy÷O»—-[öÄOÐoŸ]AÌs2Äw®b»e˼ª{ÀÀx×&½öÇUÔj¯œB©°|·­úF׋¾Èý_¯þ:--mðàÁÕ+„Ç ¾s Z|º(33søðáÈàK,øˆKj$T{à_³ªÜ¾U_¬ûØXÛrHêËô­ZµÂ  à"KÚZ ¼» ¾s I¼_c:|† ßå2™ð•?/y½°áèwß–t¼¿GƒŠzá3ÓG7|[ÒɡХf’ë$VVæ ·OÏzaVhPðšXU¦Óñ_B8ˆïDdn}Æ|§IÖzæzk[‡½õÏêÙØº-¢[wfjǛбŠjŽ-m=„9óTˆµ¤Æ±rÇ¿  â÷*+¬i>ÛxÀë~¯ÿn]ûd;ëž§ÿjvNxJû}V×z¶ãÍ’žxJçXèéHþvöÁ\8l›]RZòꫯ¢dîܹÝ{tðàµFË×N‘Ç»Zq áór´Šg‹Û­Ì{‚ïXYcÓWyª‹öê¥ß7.ž4¦÷Å”ýS{F¹Ð0]êäk{oþrl„› Û¾ÅpïòÍIÜo퀬/Gá©M†mÙb(?â\p\­.Ë8LµZ-Öïì^§n0Þ`lƪ=Ït­ƒ¼*ÕvµÕÚ­F@»ú‰¸5}¶§>.R)•-™\iïÑ€B“Üh_XI• þ€×áÿ-þß•+WðVwl/Z>k‘:öÍÌ~37h ª=»bf¿¤~¯Èã4¾yG(Ašðe¡¡ð›çZqLø6…As j¿r6¼2} Ûû"gÓh~üßs\ü¡™+.Xl(CÙõÓé¯Z Oxc7Œù˜º“pZ˜•öœEØâÑ"C7!0uêÔ߬iÚ´i¢U]©¶|Ç!‡ãŠvo%ßÙ7@™8|.[–~JóxQr¯9~ŸdŸéŸ:9iö¦¬¼þkÊ‚õ}÷do®«É7¨YÀ€g§'¤|ßwŪg»„¨YfÞÞCe#`M_|.eÞ²’¹)N_Ò9iÓÉG§v QFuzwFB”vùèÎÉÛþñ娤”é c’o?8®AH€!³`[ co°¼] ‡Ï<ž²'£[Ýë+Ç÷ê5¯Nöý% ªëvY1U‰±¡dâã;Ta ¯¤¤¤BFW•åo¿z®q°N6lòC‡Lxâ?C{ÎHR8hjÊûéÓ5W¶¾Ýó%Ù»¿î}jÿ†M_ýóÿÝW´÷íaSWÍûüûAÍCŠ t%×ÎÛW–¥ @Çtùdþ‘­ ~×Çži–²íî÷—Nì¬)(l6<ýçW#t¿Oîý5ÃznÆôjöþ3«ßJù~‡ïéF<órì†ùýÃ5VVx­  l¯£Ó—MZ×ùý_¿ì©¹VT"x¢TCpàëÚ®(c=DÆdX¼»ƒ¾¢éJ»îD™[Àw– ?vaã2Æw$/<¤ËNg鵌…6ÀR×ógøÎ~zloaÆZ¯«Àg¢¡å˜–Ý`W¼;¡'kMX±eµ**¡£öðÎUߟ;¡2ŒÕaáXBx4F–J–¯h~ß²,aöºž100fîÜyIÏÎíϤ *Ã[ô†‡*ø‡,O˜³TH™”$·h×9±YH‰Þ¯®Ÿ¢éô½ŸŸéùŸ²ç–íè]ß—Ïý¼Š±n{–.ÉÐæìd;;™|LY;W±QÉÃ:5Â÷JaO#—1¹~|˜I‰3w}|ÃcHdDdˆ°ÙªsüÑÓw\ÈÃs®r†ù‘˜˞Kyó¾vh]£§go^,öñ‰VȾqí#¿RÉ©o£v£Ø Ïþ§ÎŸxø¾p8¢TS„~r @ ôpØÐ|¶¦H»SÏæ¼u§Y;[¿~?%¾ÕDmÀ421¼Ô0xÔ 8G•qfío±aõ‡ã’:OùdϬþ¡Žw¼,–@f ‘ádqà‚ìì&&fLïí5 G ›¡¡ÜÌçÅ‘aA‚°A§ý&솶?<+"…Âw™ýq¯×êH’Sú @Å̲BÐr*½I`>!Ë43:/yþç¸ûúÿK6ú P‰ÚÐ ¡IÁd ú|'ü•pZwøüŸZ%¥~¼pÄ=/¸óxßú·â°6°Výu< Ãwñ&oä]wÝõôÓO‹ Æ 9åÝ$–Ræ–#à©ÃýÚ"ÿ®ùzÁ¸%lþÆjeÀ ‰lܾó¯?Þ;NÉ4…!^È)M5u~Ù¾õ+s.Ïê_7,Ší»á¯µt·¦cÌ÷H×8¶*;óZgð ó‹nÂ2‹‹1ÃŽP€¤î2hLæ3)™¿‘ Ùñù6ìƒxÌ”y¥ýÖ É˹Äââ¢$AÁÅ|‡äx ›}0ôº~£Hn®«Ãga±Œ§Î[Øc\½÷6oV}ž4|jüÁ/{†Ç߇¶ÿriþø~ –¶«TÝ„¢w·ïz_BH~^aH”/xj_vÞøVA+ÿ=*‹ ˜OeލÇö—Óœümc+þ1²-;°˜±ÎÂí>¥_ÛøÃþQmû‡h2·ÆîZÑH(•3øÎ¿²Sy^ÎÙ ¶ýþõV̉ Ig¯éU±þöО«àxÔ¶Ò#FŒøôÓOñu`??¿÷Þ{O¬ÙááHŠ%¶Z”¿•HžÚ5UËLÓ"Ùb'qbÊö#=ã„éXïY{æ¿Ð«{ü¡"q~Æ—c/î]œTþèʰ”w[ž:=<››8œ,7¥5½ò¬ºÉØéÇ뾌%Lœ8,sÁðU½3é4d Ó=vÁüÍÃ0¤³ÜÒŒ¹ï…O¦<Ô:ÖâtÊæïC›% bª|zý ªaÁÁ ²ÃUZ¡PØ-ĘU˜]&éÅ›Ëz-ü´ó¬%|úáö¾lþŠÃƒÇt~ÿðÅé_>°pF×ò¶÷Z˜½æñF_N}yƨ¤ÎB`–’¤O÷dRüL6ùõ—[¦ÿ*ƒµºÇØ—Ù(22=óÅ—{Í×9–µ9ydËÃ_èsú>rvýøšö±“SW¬ØHÍ4þąR©Õ•œŽ8ðV¿i›‡läëó»Dâî ¥š!¾³; ‹ŽŽž5kÖœ9sžþyÜÍ‚ìø|–øNÄäved¸ø`=Õò„°Ÿ/âú‰oñ\¥m:uêTÿþýk±Nƒõt%îd–[0è4:îmVœz¸¡ÅÀ)Uù‚)f1„Åc«Xcj«q«¦Å‰Sk¹+ž08vìXëÖ­ÃÃÃñ•+Š•e´ÅÅh; ˆUm±ÖPQ"ì2ß@_û¶ã–0Sú …†âb-°d ‚aD©dÚâëe¨YÑ>2N<ÚJRÞuΞ=Û¸±ãS¥8TðÞþó\ES8œñØnndddàŠˆˆÀ…S¬¥Œ[À“ÞM›6ÅÅ6áš„ÙߢGìÏ+·x®ÎˆÉŽ0t¸)êpÝ¬Ú LñJ<b•ÂtÒšµù[Ù‰Me5Y ¸«W¯BÎßßt«Ñ©¢Z‚(}}…{brØåå6jb½åúúF‹*el´-u¢‰J’Tà:8¯µ(¿õÖ[F0¸Ã¸T˜ŸŸ";|nån ÏÛ[¢7øÂaŠC677¿9®ßyC|Ã-G òú]U!ð)Ô¥K—0I’¤Èª©Üíß¹)8.11qõêÕ˜˜ôîÝ;*ʕߊ¸d™„îPpýÖ]\H—/_þÉ’yä‘Ï \ðC"Õ#@|W=FÀ”/ƒ9räîÝ»wìØ+¶Kj$DXžFáàÁ!„‰ ¹ß¹ >®Ìqqq8d±ð\,<ôB‰p ,ø†……a½ÈÎ%¼<)D|wèâxÅúK½zõ°ö|j$ú÷F7(è…—Äw7ÝtøÞ4d¤@x´šàý@Q„€ç ¾ó<Æä ¼â;ï节 <ñç1&„!àÐý Wûáµ×^Ã÷•?R€[¸uK7ã\Å”äþöðóÅùxÜÏùóoƒüEÀˆï\°£%á)*ç DvÎñ¡ZBÀçdaüïðáÃZ5Û%¾s7ür¶eË–xµ™« $Gî@_³ÄoòÜa‰ß¹ #~އ‰ï\Å‹ä7!€ Î>·£û®ÂHUW‘"9BÀݸëìû›ò]þ±mi.¸»SÈ!@x5µƒï4©Ó„ÏËZRÒ¢´c–OÛ:ÃýâžIÏìsÏŠ€37TGÞ„@íà;V–ÇØô”#YSçwJ~fÆaáãÞŽ)'urìèÔò7–©ÔîYptCû„!à­Ô¾¼‰AÁ!êð®IƒË̽ª»°kiRù€ï¥yÝÙoûÍLgûf¶ˆMJÍÔ·itçÒMD&/ͱ|pٸãN5–¹`øªLML§!Ù!¯´ù¬˜Õ^?¨ßzº_QÛyjßßÿ8&¶<­ Ÿ›Óëõ|‹ßëÚ¦S§Nõïßßû1Ói4ÌòmoFƒ/s[èP§Ñ±uMîI;v¬OŸ>øÞ¶÷7œ"$j%%%?üðC›6mœ4jÛ¶mM›6Åë0Èp×ÙGëwîë²DÞñw÷EGîC€øÎ}X’%B€ðnˆï¼»(:B€pÄwîÃ’,„€w#@|çÝýCÑ„€û ¾s–d‰ ¼â;ï ܇ñû°$K„!àÝßywÿPt„!à>ˆï܇%Y"ïF€øÎ»û‡¢#÷!@|ç>,É!@x7ÄwÞÝ?!@¸â;÷aI–BÀ» ¾óîþ¡èBÀ}ß¹K²DÞ€GÞo|úôéµk×â+j’mÇ׆Þ¤IÉZ*$BÀC¸ŸïðBú/¾øbâĉ‰‰‰’AÿôÓO+W®œ={¶äwmt…ù× Ì×7_Žup’‰…†¼më¶:8¦Fßl4ä[÷“~èƒk¤-áÖŒØ"Å_jš[c"c„ÀmCÀýóY|°Dæçç‡ñdÂÛè!1ÇFkr–O‹mѾs÷ÎÛ·n;ù˜ÆQijûºÜI3§\6ÔЉîâž™Ïÿ¢­¡¶UMw8)6ö€».¶HÌ0ÍòØØE‡ ­þè/!ð7BÀýC(Fãïïo°$I 9B,$$ÄF oQë~É S6|¾M¸Z§ÉÿãøŸ·x¤¤ôéÁzØ„t“Y¥ ¾7©ä(®nþþÆíu]n¸!'5¾ßÖÍY%Hªˆ-3,`ðö-†ºå_"wôNû„@­FÀýã;À…Á\.×W‘PBt@U“¹-™±+fìP¥oÓµcØØ÷íÂɱ–ôzêËGÙ4i/M^¾-íu „bc'/LË7°ÃË'^´—Ìt9ß&^šgë@ÊÈ·0²k×"‹íÉ‹vÙŽ¨œXËÛ»(iÚ·á¼å““¦…Cޮɣ— —PösÚ"K°“·å&uV½d)IJ=œ„7yÚª½ŽbÖpu—¾ùïªKÂØW#aζ¥–vÇN^uŒr^í7“±ô¤±/¥f.ìšÆëbG¯:`€Õºàÿàª÷^€Ìùöõ—€c9Ks,ñê.ì}ÉbdôäÉII¯gòFØèS–¸sð ß]©"Iòݹßw16·C”’†] º?¸ó®ŒìŒ=)çfŽš·í$ ®¦Ï›´®ËÛ{n_qcÉ3¯o=Û¼kï}ɯYfi†Ý‹Ÿg÷v³±$m¤FÆ ¿kÿæ÷Ò“œ´9±X k•¹þƒ“ ‹ ?ÏKÏ\²îlö¶Ó;¶c*–¹`ܺ ]÷0&}Ò·'jÞ®…£æ„îÊ>“±yâÌá¯ç˜A_œ¾~Î{1›f—úùx‰…¹¥"¼2iA§Oöœ9“µ © SÆ=›2,ûÉöƒs†Æ•QcßÝæÌ™usÙœW¶Ù4ÈÆ<Èyﺽà@_|.eÞ¤-AãÜ<1}Á¦“˜ä^XØkÌéá)ÙÙÿolçÌÌ㥶ª”'îp<Âw¾) Œò$¯rÄ­ §­c3\زŒÍžõhãe@LÏ©sS¾þU™üɦ¯û¿ûÚÄ„ÇõþçD–ùgA@›þÓY檘æð¤õlöC+lUmdâŠýz6Žj—ÈêTÈ3æÄš2ª#í>žŸ³ó‡„1Ò÷dëòwÍÙ7h{ÆÐ†)û?šÐ8<ªI³ÄµS¿£ìðêä…ïŽÌú"!úÊb¶Îmò²JÖí2†¥Lš¸(õ æ¤uÃÂ«Ý wwÔQ Íýr¿]µ|÷y”1>Úµ1W)[vÞÐ3<¼IÓ†xug]Æf=Ö3@©lÜ«wb% * îhÜ¿~8ÀwÄùúJ¯eaå<è€Z½ö‰lÎêŒ|œ|¶5<Ò¢ò)Òò§ §1#ȯ¼P_.õà{Ãz°ªÏ¥l6𽮉 ´uf“wb-¼ïìÄ!©k.Ê›½böùÓÝSSš.c÷$°LPv·(rÞÀ!ƒGvf¥ƒ‡þï!_e«$fãº"‹fVŠP}ßY›møpÁ˜Î3§ìÉž*€5–Xfê´¤™%ï¥Nïu%yOYµ] ¥„HŽ”Áb…)|Á¡u×4®UÄB9B 6 à-㻄¾¨»ðXž02è íÚuÁØxÈ06ï“mÂÝDMfê¼}Ãîï†3RU‡¥§ïæ…?õJ¨úÆýÇ Ì\òü‚ô¹Sïµ[»WJ±ôžÈK–=›M•ÖkÖKYÂîíÕyÈÀeó’ç.Œòì’ºÓ ‰,}Wi`“6mÚÄ7¬+0‰„˜ŽýŽ}„†Âœœë ½G½ùî|Æv\Ö1µ_c׊´Ó\¶žMû`×x}^6÷coªú=ex“alßì…©Ç2,?$“aŒJ‰¨5x„ï0c všT*áV¦]R6ž}pãôFK†toÕýøí‡,دeÊþó7OÏ{¾=ŠZ'ŸòÁ¼ ZAìÚ±¯yáé)ŸLïmY¬ è8~:¦ÄÓ·±½í ii# ÍÊ©b¼W¥5¦nÜm"m{ÃM“÷ÃÈ£}› ¦@fÖ)¹8¶Šê=+unÝQ¼Q­gþ2—³DŒA"BãÅÅýºŒIs†Í}½mS6î1w`æ˜Îñ“W»wöt¶lÀ[qªaBæ¼™«ö­‰Uh¹7Ëýäò|y(ãæïJéun٤䠼•ÈnX‡Ï¶Rž¸S™L&ÕoßûÞ·ªSýÔÿ½[mûÖÍìæÎ[rù̈˜Õ3wºGìR«Õ:Ylppp²Gì.úúú"bfñÍŽmLë`€FmjvQõ½m3§{@µó:@ݰ¢~Ò™ÿ4Îîjµˆ¨5>®ílŠÚ®Çå¿XõÇåÅkÃVhì´ÝÿÃz¯•7ßnxµí‡·ëñðQ64µji Ã+o³i{÷]1¼Æ§Ýfxåç\µ‘¦©õËЦ—†çÔê·Òæ×Þ0œ–Ãkõ‹>”Š«~ÍÍÃkýϸõP[¼Ü­_ïÒÿ‹/¾cýº³Ú'õ³/ûÆÕ_Þ;®“¡zÇyÇU<¡¶ÿŒ‡½x]ÿñú˜=«?ÞcÇL Êé÷Á¨Íˆ?š F ¾#/Œ]­V,îÁëÑ9'îÓù ,Ø´iÓ¨–ÿ»5wŽa+ÅZeE½¶ß;šu܌ڌÊ?o˜9cp0ö˜Q›ùêïŸúÙ#¯üê׵سóA£¢¢C—èðÐÔ wömùñ¬UWQÔß8÷Œ—8(þüZóã£Gïõ‡ÿ«½eÏ׿>¹þŸ_9ì¡çŸØs}GÜüËݼ÷‘çw2Ð.ôìýWxòÓ=бØöíK{N[3>ø%1÷s7N`Ÿ´R¯â ½û÷ðu³çÌkõ£É¸NLEQ?fð¡ß=ü{̨ÎßÏ<ƒ/F<;øÊïþðÎ¥ò|òÖò’{q^› ÿîѯFÄ[޾0"þgÇñÖYK"â·ÛoŒˆ·Í¾è¿ú•úÂo?æ /=rCDìÛóÅ¢å7[¯ßoÎſٺ®ÜçþÇ^RüëŸ +fuÂeñŸ­ŽˆwxyD<ÿઈx÷IK#â?¸."˜û¥ˆxnóµåßû/·y£õä¦qø‚+ÇÙÏŽþ¥õdz­*ütãåõÆcN[=ÎM0½ŠcåÊu½h/*úÙ—}c:L¾âÓ@¹ð7·4«(ê¯>vÏ–»;: ~ߣΘù†7þ)bgEÿËÃÏ~ ä½<ÿåÇnÞûÈ :é¶ð¶÷Õõ·ó…zãKÛ®¯×õºw{qDíÅ-k_زvÿã.‰ˆ^ï<þÒˆ¨EíW?Yý«¯.êz{EEϼ/•ÓÐ{O¾¢«ÂúŽ»—FÄì…×EÄöþ¥Û7^þþE«ŠŠ~Ì'VGÄ#ß¹ì‘o_ÖsÚêžÓÖlûö¥=ŸœÈ°Î”Y|ñúõë7ìSˆÏ_ºaº‡ŒBen“àëkÍž3oöœyÅêTô¨,ê¯ Ö"báÂ…7nŒˆE‹õ÷ÍÝ×ÿ¬ìü¶}çñûÇoŽˆ½&tâý¥m×ï×T×#âÇ^òâ–µ/<ǾîỸüÓã?sÃïúuÂC“%}ó¢6n^aýñκ)"~tÇùqòçoŽˆûn;/"N9û–ˆ¸÷ëçÖ—<õo¾6âP9ë’õw¬]¬¢ÃëS½®×¿q•ŠSÚ^{íՈظqã¢E‹-ZT”öúìßÂ… Ç6¸½<ÿåÇnª»O1ñþèWËËÔçÞ+{ØwgdÿͶëÇ6†wXL¯*7>_š{/<·ùÚç~tͳ?º¦ÞràÉWüòþ«ëßþ⾫"âàùËž¿üàùË[mî鬌ˆC{WÚÛwèΊ‡/¸²¨èO|yDñ‘«ŽøÈU1¼œõÑ«úè5ñèw¿|ôÇ®9úc×FÄŽ»w r{ÿÒíýK£4ý^xä;—Eiú½ç´5Û¾uiý§[ïº$"ŽýÔºcO_wìé»v^ÿéëÿôõñ“;¿pÂgn8áŒ"âÇÿzQì¬è'~ö+'UíJ߼መ·ø¦y‹‹rÞr2¦¨îóϹuþ9·FÄ=ÿò÷­– P/äî€owžz‘Нõß¡½Ž8¯#FˆéõºþÛ#~Õ<÷>6õºþüƒ×•Ûß3ïKåoËu½ÙÏï½êç÷í?äÔåñÌûž)búWÔ{j`åS+*{(<þ½eoY›*Í^xÝÐ |iWúPEÿÄTïPß¼þ‚Íëw•óœusDÜûù÷ß¾+¦îýú¹å¼N{w¬];?R_o_sæ4 ˜Bõ˜>ât}¡bú}ÆŒ¡Æ"”oܸ±>ûWÌÃ/\¸°>!?!Þ2kI­³¢ûö|ñ¥±&õ²wŸtyD­¡¨G½®×jϵ®è²¬ëñó{¯<øÔê°þ¾­|zçôûS++…õ²"¦Ç¸j.ïVŸbELv•²Š˜Þp….*­_·«¢ïÁâmxûš3(¯åýèåýëm´LêE(/&á£ToFÖÿøÍÅnõÂÞG^ðòÏvÍÀ‡¾7xëì%#v[¹OýÅ-k#bÄêÅ¡ï ˜»´¹±Á'_ñËûvÍÀ4ÙÁó‡ÅëCNŠãå˜~è‡VÚ»rÄÎGeÇÝKËG¿ÚTôžO®ÙZšŸl¸ð ¿¾B}ŸúÉŸ¿%vN¼3*ë×¥Ý^ n[ý¹éPÔ×ò“´•hš~q[-oèRŸxï°ý/;÷OÞú‡'vÕÖþ”¶ÕOiû¯Gn(ßìÅ-Cû†÷?ö’"þíÜ¥/<¼¦|V['‡¾GÇç³ÕczD<y«Ìùté(¹C{ûj‡-è{rÓŠúr‡øÊ'¾¿¼<÷^+×Þ¬_·ãî¡ê1{Ѫúö‹é÷BOÕYms>µvë]—l¹kèà¸ãN_×¼Lƒ?û•‡¾yQ«cåæùÕÍ.lž{ovÊÙ·ÜwÛyŽ•ë\ùR3åóÔŽWºÜت~s(ïd·zmûÖͳzæ—°)nèrü¡ÿ{Oÿ?t²ÉýŽúì+ƒo|u×eí:¹½ÄË?»iŸ£.ØMo/ñËû®>è”eU£Œúð#µ4Š†á•·Ù0¤áG{‰­ßºtΧÖV=çªTÜ0Áí%ªi­†:ÎÛK”oèÒ|E¹â†.m^ŽÊáíŽï¸áÿê›zèl¨ÓòŽkÑäW1ºnxǵ^ñèœ÷éüZo›6mÕòõËÄŽa­â†.EKERyƸxÆŒ7´ï±þÓžüñ×Ïv²y`l\ûºD«+³NÔòãY«®¢¨?ñÄs{Äw}\lepˆçß4Ú‰À}ŽÅ%hºÍ§,kõt9uň¯Ù4šóɵÝ<<*5Wtu¦Å‚ &uùñ¬UVuC—Á7wþ7î=˜pÅQrå³I›¿Þ¶úsއ)Ó|?´îÜJËå€éÕ&‘;P¨4¬¨?¸áo§k@Ýúë#:¨ÜWœóî© 1Øö[è"Êú8÷ÏbåÊ•,æ ¬X±¢|À|ãôûÀÀÀ”“[n\ÕÐR±O]]€©×á][ ç-©¸@jË¢ÞÛÛÛð¸òç€ò­ڧKûñÔÚüºað¤7«gn'‹õõõU¶OÌÑïåO´O—öãéíímøQýÛu€)ÐáEå*µ»õ*°]RŸ¨éôQõÓ0Þ¼w ¡Ÿò,úvÀnªeR¨œ‹îííç¤úd÷Ófgy'ý”Õ[̽ÐýZõÊ"UÅ~ÊŒv»v„°»Õ[G} ÜnT&‹¡ŽsÀ»Ñó ™¢¢Ïž3¯Ã³ÝÆx ÜTæõúìzçûÈ'Ð4ÎLðzVÎèæõQõzqm®¬åÊ7âã6ýŒJ«~Ê[lXeÄñtÛ9x¼>5WñNêzÅô{¹Ê6TÜVx¢Ú[iuÀZe?m:ïd<>e˜<£ºº\óÔ E’èè†.¹§ Ûœàþú4õG#0!ª÷©·:‚,¥æK¾O†n{ »m<Dë;µthbnèB{Ýv8}ûñ(öÓ¢ònª£2Š¢^ž¦nuY4ê6ªö7Ýj£•ý—ÏOë¼P5¯;Îþ›O±ñu±«Êñ´é¼²½Ãñ´ï§òEíó "n¹qUç W~hw \ÙÜÍ‹ŸÖ—i(„£mo£w§æåGÕψ* Õ8û/ŸWïm ýíõlno5žò•Ïbœã`D³zævò߆;û+Wo—Ô[ý}(]Ü­ÜØ¼z}|Cå¨locj CeæîΚÔýñ·;_7€î7žû©eŸzep¯,3•s³mÚ+µšŸpåOåÆÉÛbb^7€©7Áç©×gìË›§‹'»N×{îðsCóŠ íåç5žþú³nëgüýì4ªž'oy€ÝQEQ/WßNÚ[U¸Ñ¶·R^¾óÏãŸÛo?ÎÎû3ãyÆÓO«ñD‹ÏdŒ§¹Ã1|âé-L÷¸FVÛ¾u󬞹Šþ†;û3ýýšì¢²›-Úkÿ!`ò”+r{E½¾åÆU <áyêå?Ê“ñ‡x²û€±IXÔ'»Ð*ä¹ùý»/7t€$uHBQ€$uHBQ€$uHBQ€$uHBQ€$uHBQ€$^ûvS}}}ãY]Q€®pÞ’ËÇÙƒ¢]aÓ¦M;¶=PÜ"½“¯Í=ا]aT}VÏÜæuè £ªè’:t/I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô I’Ô Iò(òw'_,XмúÌ)*ÐNeþnÖ××WÙ®¨@©ÜYÞ!Óï„¢I(ê„}êÐufÏ™×ܸ}ëæökIêÐušë÷ˆ=uèNå*ÞIEEºVQË;¬è¡¨@7ë¼¢‡¢i(ê„¢I8OºE«;µtHQ€®pÞ’ËÇÙCcQ¿åÆUãì˜ÊúŠ+¦kÀ8 +ê㹇+0½ýIÌŒqktƒZooït˜ÿû¨½ë̾ԡIEND®B`‚vlfeat/docsrc/images/vl_blue.ico0000644000175000017500000000217612237004736015625 0ustar dimadima h(  @N+IP+÷Q*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿQ*ÿQ+÷O)eO)õP*ÿ\9&ÿQ+ÿP*ÿP*ÿP*ÿP*ÿP*ÿpP?ÿS-ÿP*ÿP*ÿP*ÿP*ÿQ*ÿQ*ÿ~bRÿüüûÿàÙÖÿkK:ÿP*ÿP*ÿP*ÿ˜‚uÿÿÿÿÿëçäÿ‰oaÿP*ÿP*ÿP*ÿP*ÿP*ÿƺ³ÿåßÜÿçâßÿðíëÿnO=ÿX3ÿP*ÿÎýÿÿÿÿÿÒÉÃÿäÞÚÿƒhYÿP*ÿP*ÿP*ÿP*ÿñîíÿœ‡{ÿX3ÿÐÅÀÿ÷õôÿüüûÿÕÌÇÿòïîÿàÙÖÿP*ÿX4 ÿʲÿrTCÿP*ÿP*ÿP*ÿÝÕÑÿÐÆÁÿQ,ÿT/ÿàÙÖÿæàÝÿT/ÿçâßÿÊ¿¸ÿP*ÿP*ÿS.ÿmM<ÿP*ÿP*ÿP*ÿ ‹ÿÿÿÿÿ¸© ÿP*ÿ¢Žƒÿÿÿÿÿ Œ€ÿÁ³«ÿø÷öÿsUDÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿS-ÿÞ×Óÿÿÿÿÿ–sÿ\9&ÿìèæÿñîíÿ›…yÿÿÿÿÿæàÝÿeC1ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿlL;ÿòïîÿçâßÿQ+ÿ}aRÿù÷÷ÿx[Kÿõòñÿ¼®¦ÿÐÅÀÿT/ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿ`=*ÿrTCÿP*ÿP*ÿgF4ÿP*ÿ®œ“ÿæàÝÿˆn_ÿ©—ŒÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿcA.ÿù÷÷ÿxZJÿŸ±ÿnN<ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿž‰~ÿÔÊÅÿoP>ÿ¿±ªÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿQ,ÿØÏËÿ¡ÿßÙÕÿ`>+ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿiH6ÿîêèÿÿÿÿÿ†l]ÿQ*ÿP*ùQ*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿgF4ÿèãáÿ›„xÿO*õN+IP*óQ+ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿP*ÿZ5!ÿ[7"÷N+Iÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿvlfeat/docsrc/images/yandex.png0000644000175000017500000000536312237004745015500 0ustar dimadima‰PNG  IHDR„4KŽÒtEXtSoftwareAdobe ImageReadyqÉe< •IDATxÚì] ÔMU>ïϘüéW)«ò‡HDJ†¤T¨$d¥I#•µÒZ- «V«¢µD#)’ÌËÊPù£9IE"2Šÿµ··_¿}Î=÷þ÷=ïñöZûýÞ>çí{ï9ß={8û^‘¨*&E "‘aðÙžIþT–Ò–J$Ek$R>¯>‰µLÉyzSN’ô^!€éÝ움h+È~^˜òô7÷ŸˆÞ.öô÷Càš Ôu•Ð2”ÿíGóxæwÔÆo¸àspÖ[¢1×Pç¢tEž ½‹08’‚¾¿k7X7aˆešÉ!È›W¨óAV·Ì²c‡ÙþLÄ(àB&Ͼ&€¹8JN£³Ö9sñ-ðBÛÍô5>ƒÉvOÍuæ"j¸ƒqr«ùÔw£ ›æbSv¨3+으“µ•Q±ä’«¹( ŸW -£²Ãœy€Øˆ’zp%©Êdß“âÌ„¢;ú “a†ñ"=R2 SÕ‡²CœÙ€Àý‹n€;[ÌE)ø¼–Iqµ™˜ÞÌÒHA†»—Çt\\ƒÉæ«htuvx@`ËV&«|™AÇõBhz¬¦ª3ÞDJS[€§ßÎä˜Êž!D!|Ïc³ÐO§Å¥¦À-ÏVX. ÔÀ³„PšË\&Ûæ° T(¶µ[ [Ø›€óX¿ ²~Ãã[ᕾNŲ–”}GÛ{:‚y­fqŽG5˜rx)ݵº~ÌÈbf¶žÏ‰Â °ÀÛ-ç¾M pÔÎû½xÎO+{AÓýtnúx<åqÌ×Yÿ¦++ ¼TÅͬ_¡O+w*Çò z\ Þý?³ßü ü’ǤéƒÜÂq²ªS ÀW…Mº†+s渙ÐÿaÕˆ–7ìaýß·ýqa²'°>Ÿ°ö•À¥@ ú÷Ìn€Xp’âŒ5å<&«õ‹& UVMµèš-ô7íZ?(ômn;r5à½lÂwW¦vü»‹µ÷Õ«§ g‡@¡‡ŠÕOÅ€¨)ÈV ËvPª!È~³ôß+Ü(¹Iµâ¦Ú¥?by¢‚WܽChëÃfŽ5€*NM,«T*)_­ QUƒÃ[‘VŽ<º1¢ši//DY¥=Vö×5@pšEéø@€@-mÕgŽ&b|ˆÎa²©’ óÙ’3V]M`(å¨Çk<§Pä&­HMÉW’¶R7ƒ¹ðzvA7H8yüÝËÀÝS±4saš"·˜!«å&÷4`p‰šö)¹šÓÔsM“åJÇT{Á`Š7]¦i²~[¿e@t*Iòcv†¨¿\Hz\Æ_zŒb¹éæ+‘‚Á½K e`Б;/ -æjDÿ$òøO'?«Œ‡ï¡ÈÃË9nk0OO’o˜R@T¦ðR'ÜTyÛò›’êÈ“´WHò1§–÷âÞŒe y[$?"'ÉYWðŽ×¨ o§Iý“ÄeÞ´Bœò5 OÒÕÒ~·ä¯$ç²UäC¤3ípŒ<‚Ò¶äZ:¨¢/}YÂãó”°A–l@$;|KmrÌM%)E}Vˆú1¸‡ÉžQ‰ÏÜÜŸj@H¶8JÕW ²êÊ^ká‡V²:!ž?Fu³+áyõnàÕN% 9ÆàéFKn&U I¿´«Y;ÄUè^ö}>å$ð‡ýÌïžJ@l0,½éþnÂÅ‚ÞzË·žÉ°2ªcº±h—¿è%¾mtŸ°¶.úMšl@,38šùiŒÏ¿ä·‡¤»ùC!¬ ·±ˆX½ðf„àçuL ð©£ÍÂÐÙgÈw$h¼ ÷ät²üÆOêýA†{XŸ4?TNílU4…¾ÄF!ÍI p[|– Çg Î7¬ÍÒ…e wMoô÷S·YÙ á"f-kYõJ³ÛV%Ö|ŽBêIL†%¶ø/CâÈ„ ìE o²M,²½˜î®r=!ãa,h}š,^Ú Rd+=·ÐÏÒ¿‡á|pP±<ß›Qƒ¼õþJ~àÆVuåð ÇÀú‡©4.½U¬Ž3™Xt¼…&‘ÓÙcˆÖP¸‡{¿jòþŽŒáß*‡©ø‰|0=© ˜ÛEÎé™*ñ¡èåµiXÞuMDüÕÿ+`æ/&$þW˜éø[U¬Ðul¥ÄÉ›êÿÇù#‚²t—~¥ËʱO}š€BÒµK[ %¾ª¢ÿ}Á ƒó(Övt%Û/øYM¶~ˆæÍW£|V,¹¾uâë¯%ß$—n”õt]è / 3Ëǵù …>®«69¨ñßìþW€œ_@Ô!è/IEND®B`‚vlfeat/docsrc/images/sulc.jpg0000644000175000017500000001042412237004745015144 0ustar dimadimaÿØÿàJFIFHHÿÛC     ÿÛC   ÿ”xÿÄÿÄÿÚ Õ Á)$‚“ 8HÁS¡ø´òbzP*11èYC˜ø]Ǩ &^/#‘!^‰„G¡_šŒ²À‚Aª§‘b8g‚î40“7è„PÇ%ÀiÀÌÖZ…IM"P…‹‚2£ CQeÊ=€c>ŒƒHÀ;–‘ÐéÀàW¥XM -#„¨Æ2.-AEdn&„;•(°s> D¸›€’¨-á8´èerÂBj!ˆÅâĈäÌÿÄ* 0!"#$124ÿÚò;nḡëîÓkE*θ…] Û©W{a¯v÷52tHÇ(Á+m@b—‚WË´l{Ì©(è^Ö£*žKF&$v%g+kÜ=-޽g²ÿA’ O Æe\º1,i:KXÊŽ[~Ëá ….uTçËþw¿óg¨¹Óõ>Õ<;¤úabˆq¬ Ô|økÆ×ùÁüŠ¿uœEÏÉë#š·‡ñΣOCñ;m/ä).IfÚ•ÿ¯ Hãõ‹W³+ììŒ&ÄÒðÐ 0JÏû{ݯyå8È]ƒ;{¿èè3f"«öðÒW¿nÚоf޲fïy•½¿æ}\¿û 9™Ô[ke"¶¶÷Bq‚[¤§7=}™áë!}‡&ì=eo"ÆÀZ¡Š¡°ÛäÖ'–¬L9_rùßÚç¤p¶­+Z|ÁMª¿èÔØ_"v$–G°­¨ï O|-Om?Nš#|MõuÌl\”òÏ](· õ‡ åèj÷ vÝÑ¥°É~W1ð}^ÿ3b§Ä?ÐÉdfµþ^5ï» MxWl½Rf«ÍãôlhÊdGp7‚îÄSo²Ô6¿eøÚÁ%âS=X_ϰµtr^-u8Y ”Ïúl+n#Ør˜éžFÒ¹ð­<ºµ÷ÂAúÎß(:ºÆÃœ¨CÍ*•î ÏåÕ¯LøÁŒrQvxÔ?¥z€gPÂ*¢ÔA[¹Ì:_HËè?å0-l€Juÿ¨§£¤á¸ÕĤJÜC =S`=:¯ƒ½l§U(Â4ó9˜ËBÁÎó…u~‘ÿr›è=½' ZšàzH10ËyÂË:ZËÒsf—->^¾<*¶#ÒTé[“‘:ÇK\Ò!òaL8mÖâ˜èö·Ã0 ´p!A¶¢i4•WÌZ-=÷·b¯Äb wU&=s]0Z÷¼¥R‘»¶–ËãŸd¢+YvpÔ@î#=hMûë-¼ÌÅnÄô`›/WˆJÿUÿtSªÏÒq­ƒ6†_‹­N¥ÎX­1sœUòŽö–TÀ·ö–10®Fñ ©«ÜÄyÁؾ<éÅÁœûÎS§}¼+÷=f½WÖñY Æ…ZôûÈPÿ¬Bòùi¢|>óeä ±”Ǭ´á±wœù›öEûˆWé0±ÐÂFMÃ12Æ8l"SØÈ[Àª,@vjTUc˜]çTrƧÌà3¾+T¨G(ìÒWÙ|½âñW-ÅÓ7÷ôŠ„Y€æ¦Ú©…ab˜Û»{˜[56΃‹²Õð¿òôë3 Dw«ÎIÞJaLZéËSÌDmÏÀJ¬ã¸ØDÆëv2è¸}£ÓªØðhN¿ÿÄ(!1AQa 0q‘¡±ÁÑðáñÿÚ?!ð¨neŠêhFwiÙ‘¦HRv<—Ä=¬ +ýE,Cl¶6§àW)ØàŒ JÊú©˜„@áG†"çò˜Ö•Ð a“Ç{ti9ÐÿïíZ¨Ž ´x ·ÏÝ•Ê4Ü~Ú®Êaé (sÐî1mZ&¹?pŒ£ÙÍGêü!*zÒü\v4Pxº uŸ™–:0hÅÍÍäG½}ÃýpÆþõÉ «°pŸi±BÛ©ÿ&:aößdžës`䄃v$|ä¬Â•¥·v`å5ÃÁ{ÖnÐ\50¶]jmöi*+‘îj¼4ØÃ’—÷”þDÐPvðá¸ÄÁÙš@·r„.•oùo„W°>õˆì ¶+\|ÔÅ9žÁ/ êëcéq•*Aô–°ÖSmŠ—A2’dN,›…s®`‹³µ¦¬üÆ^%…a·çíáI‹.§Z‹ Ø3YÕ¯˜¿xÎtTºÛ®…óŽ`ªÃŒŸYFŒ$Eucàÿ‘ÝMÓÙí½f_å*ôâúúÆ%`9SOÑ`ƒ þ«Å²¹¯Ÿñ{S¹ «‰¼$ÄYW #b+wWÖ\ÈŒ­/ÉX¬¾%A™¤–šf­>ïoð{äf¥+åßl£ ÛYïìÁxöô̾ÑXçÈÔu©fP°H¾¯~WõØÆoÚ¦&LDø16»·wËs£ ~#É%}[é(ç}"áîŸ@¦§`ˆqã˜}×øŠý/&˜q÷= ‚áO%(AæÄ³Wx³6Í-’ìÒÁ?nI‡mdëä_q†5\Þå·X¢êî¦/œJòk½˜ ¦¸Û¬Ì*öýÊùl›&…õ‡Ñ<€JÏŸ¤tǃ¢LP™Þᇣ¬A‹`Ü2zItÞ…[¿h>ƒÈ<*¡È6†âѵKºÀ‘“‰¬§´qô€Ð(˰yò ¸î‹™8”1"tÈ–25qÞ©pAÍ*ļ…þ"K´w;ýüUoÁpr–Ü$D« ñKëzÆ~°]zG ‹šåA4±\‡3a÷÷J° î›ßÿÚ ’I$’I$’‚I$@$I II H$’ ’H H$’€$’H$’H$I$’H ’I$’A ’I$I$’I$A$’II$’I $’I$I$II$€$’IÿÄ€ÿÚ?ÿÿÄ€ÿÚ?ÿÿÄ'!1AQa q‘¡0±ÁðÑñÿÚ?ôÂÈ%‚zàf¹‘·ÀåäPyŠ€¤†4Ý8¾ˆ[XÓ ‚ÄXòç§á5³+€É*4 7Ðvà€ÔÔqd:·•]Hbè™'àYçŒÂ@¦9CóïpbÍuAÓQ$ö“.ã5NàͳÇ÷š±3 ¡Ëß¿«;'©`Æ©¸+Õ ¨(à^Ñ“ï{O “®ÿ¤ ›Ïê¹Éc8ŽË`à úÆË„®I/<÷˜[ƒJaˆcÇRdïب~tNbÎ!%ӤǀTãF–—¬A:d[4¤Ä;¢`w;™>ÔI´ø2W…¾0Rã7´$û ëd¶ ûßÖEýVˆ•c˜HŃy‰]Ë\Ãõä‰Däî?§lbÙ«m*O$ñ{˜‰’MlêÜiÚpñ_©$ÞÕoÖ0c¡„ãj;½=$Ü’ÈŒ|á‘HòJ~¼b¶šrwÓ¡‹¢F=N\ž¡‹­2Ó8§úÊM#¾³ˆËžbK½k‹â nÌQ %$ÙÙÕâ@L ‰š÷9m ¢ˆ…é‰ iYJwD×'¥@Íþ‹(ÙnMÏœF¶øô(°`‰ÉÏ9²*Ic¦™°åž}.20Ú­qŠÙ¥™£Þ¸1Œ ’ÈÔÅLY€¨ŠÚR‡wøúšsdž04‰ vnRO¤óì%@yÃQŽ£Ê Äû+.Ç`y‹é1’e2qð-†è¤Ã*ÂLH¦°Ô*èÚ¤¤„”² R9±µa=•D.ÞA\£k~·˜0:ç&ƒ>) ¬<×Ô²xØ|ÅÁà ¦s‡!­Þ¨š»éöÆ)B#XÌ(ŠËI+LyÀ„™c·?„õ—Ê ÁÖ0ù`Í#Î*6Á K·ð‘¤)œOR:qø—“iÆÇŒJH&4Cf*›È¾VBÀEq,vÍ:©þã BîTtÀ , È1?vuúÇΑV/L×µü¬JÅ–°bM$1ÒeÁ-0ZÆ¢S´ä ,j’W1A'ÄÅã•$ŒD¡oàA³$*; 9m¯ñŒó赂54È\6HƒÓŠh]Ir3­ï «ç vÏG$NÐý~Íb,ðíC&ë}0„fÍ›æë‡#Š6Kߤd²†´ ߥãÉ:/„O :åŒ8Ó•GdtŒ „4P >‘{„çÛ89%1_x—”¥…mµ}²h&ÊpŽM1&EâDûÆeQ´SkÛÄ+/5ý`úUm§×÷À`­~…Ò9º ïN(4„ê&Àw…Gsm¨þÜ&’ÉHöÊœZ`|øÁxÐ@ì‚QE àÀ¤¡™w^R–tÈÓ‚àë‚=Ðêó•œß¼ DrrÞr:ã»$öž¿‚˾¶uÇm½·ˆê*}ÁCOlà¨,ÅÓßN“É‹,©Lƒ94¥áƒ5ÊÔ:¢ã!f¨89NÖè–98n~SßÂC ;š5í¿M`¢‰-ï& ÷ ¯ ÏAÅdÚähŒk¨­8PUÉ0mDÿ×5,Gܬ£¨®¹!Ë;Ecÿ0±ƒa@ã~€õŠ"KˆÜOçÿÙvlfeat/docsrc/images/using-xcode-ok.png0000644000175000017500000015373612236612215017050 0ustar dimadima‰PNG  IHDR>Õ¥‰( ÿiCCPICC Profilex­—y4U]Ç÷]ó5d.™2ÏCæ9cÆRdÃu!¤™•™’¡%¢d(Sæ©D„L‘2FfïQÏZÏzÿxÖûÏ»×:wö>¿ýÛëœï>÷»~P’Ùp€'ÞÏÇD[ gqé2Žh`  X oçàKP52Ò‡Bþ¥mØÉ­a¡“\ÿôoÓ>ІÀ¡Z—?¬rÂöØì„¯ùü ×vpµs„8bA3uˆK!¦pùÃu'lÿ‡ßp€ƒËÉÚQÐÔxG7<Dß!Vrtòu€nŸìëèèëà q2Äžž^P~Šfˆù>ÐZŠEˆ¹NÞ ÔCí2”W¢Ê“ôÏ\”«&ï渡:híCîæ6M~¿+]¿¯³„øït025P“ÇÇ›«~Þ¬œrœfœîý>#>37›6§9·=ÿpÁì+òëóEû%ª¥æo„eÜòÀ÷›?ÄÌ­d®ê¯ÁÖj×ñ¼_6s^Ú¢ßÙÎøuy‡ugf·t°/{?è>L?²;9>þ[KÔ(ÑÌÉ9ÒFrIŠ ,U: 5mä©}z<Ós;ëY¶Ç8ŽXÎ=.gî^y¾B~Œ€§`¿°¸HŠèЏ–D¾ä¶´ŽLŽìÒYiù0…v%e•DÕub uÍëZOµçutuôõK † xMM5ÿz‘ÄBèÒùËxËD«'Wº­mQvöòñNÑÎy.5®ÝnSW7=ˆ<ñü^ò]o g__¿þ±©×r‹ƒ*‚Ÿ]¯ ©m {sãmxËÍ–[-o"›n7D½Œ®Ž©¼Sû0./>#!91&éFr@ŠÇ]‡{—R ÓÔÓe3„29³è²‰³sÖrgî¿Ïkϯ+(S_RìùЪDÿ‘|)S9¦|»bîñГ¦¿Wf?zæ[eó\¯Z¦†óù‹ÝÚÙº¾—u¯ ëã_û7X7j7‰4Ó7½YxÛÛò¼5«-¬Ý¡Cû@'Eçz×pwuOZ¯_Ÿi¿øvàû໡¢á0H}ÑÌÈôÇ£qc6Ÿ$ÆÑã£eŸƒ&u¦è§æ§«¾„ÍèÌÒÎNÎ=š',È,}m]ŒYÒÿ†ý6¸|÷»Éª}+±«š«Gk5ëW7Ø66à ÿü´±Í¿ÝÿË{‡z§rWwwn/x»_x yÐrh|8utõhë8ø·þ¸ BiŽrE‡¥cʈHFH—Éá´”¼X*cj{ÚèSYtô¯ºǘ¾2o³ÂÙHØépìÜœ§…¹D¹ÅxÄx…ùøÏðð³ Ðb÷„–…ÇE:D«ÄrÅoKxHšHIKÓKïÈŒÊÖÉ¥õ‘7TàWD)N*Õ)§¨¸©ª©1©m¨wijk™h󟃟û¤óL7VÏA_Þ€Öà‡aûù£ cS!S´é´ÙKóÔ ø‹ç,8-.\~jkåtEÑšÞzݦ˶È.Äþ‚ƒ°#‘ã”S­s¢‹³«¢­ÛòÕ·î™xO <#~Å«•éíé£âKë»èWïŸ`{M<8Tt]7„9ä{èë°„WÂ…ÃnößÊ DªÞ¦¾=Ucq‡ÿÎaì`\q|`‚~"GâvROraJÐ]£{|© u,­*=>Ã9S5‹%k'ûCγܤûžyzùü$ßô>)J*öyx¡äì#öRTérÙpy}EñãÄ'A9Ušé™ Ùròxò- ŠnJ9Ê2,36‰ IBµMíM½BãI³JëC»}*”M—LÏB_Á ÏÐËhÇø‹)‘™¹…ÅŽ°²i²-³ßÅÉã¾r¤qjpnŸ.ç²åfàæIæ=χå>“Åo' (°+øN([/¢!Ê*º+öQ¼V"[ò†”‹´±Œ¢¬ ÛYjyŒPØWÜUÚQÞS9RC©Sh0jòhIkŸ;g¥ãý«=Ôkðå<ò@Ó|³óý‹B¶—Ò/÷Y_Ñ´Ž´i·#¶?ïá8ã,ìêÚw•ÓýšG?ä~Q„y-ßrl@àµÙ £àæ‰ÐÒìáY·è#Òo3FåÇðÝ©ŽSÿ螌LypO5u>=!S.k)'÷¾Y>¶` 0­ØºDàÑaÙûŠÊ'I•¾Ï®<׫Qª•z)^/Ñp¶IëÍÅ|[\GeçXIŸú@äPß®‘ckW'7¿$ÌÉ.l/u}¾ú|£së×®øÁ­ßú#1 8 Ô €8P :ÀŒ& »‹4Ÿ‡¾x=ø-ø+øBშFì •ÑÈaE@µ Ðt7Q Ñ2Æ󒘛8•MBò“”@ºFæK¶KA¥x@)MÙ‡u£ÂPUPSïÑ”Ð^8E|ª‰.^’~ƒ¡š1I™Ãüž¥ˆÕM›•} 7Àñ˜3þ´'—1·,/ï.ß·3üƒ‚-BMÂM‹¶‰õˆHÌH®K#ddEåtϺÈG+”+ö+í¨œV5Q‹P¯ÕXÑ:£í|®D盞¨~°AûùSF.Æ ¦´f^æ½nI—~ZZYµY‹ÙäÛQÚ‡;ütrsžrµpt×÷èÄk{µ{kùtøéú÷]3  ¶½¾ê¶}‹&¢à¶HTcŒáÉ8B<1-™/åõ=ãÔ…ôë™Ø¬’…ÜÁ<—üÃw‹x‹_—=š+ ¨À<ÎúëLeÝ3­ª¡j«š¹Z÷ºÕWÞõë øÆÅf›7Ã-­ÏÚ™;n¾›éRéÎîYíSíOb¶|Ÿù¡ï#|TlìʧˆñGŸg'¦©¾pΈÍ*ÌiÎë-|5\Ô[Òþ¦²,û]èn…z¶º¾öy½sãùæýŸ‘[îÛF¿¤vXw‘»‹{=û•ɇ^G†Ç<'úÿ©—~×$ê^^>8}ußÃÿß§‡?TGýn'%™ÞÜê©¡‹:u^Àº| 3¨ ÍÿÔj'ñhÈÏr­O¨™§à¤û¯æçÕq¨{‚|Ü\\ýpªP¥ê$ˆÓÁ; âÄEEeÁš2 ¡ÕªKt pHYs  šœ IDATxì]`TÅÖþ6½AHBïM@PÄ*Ø}¨ >»þúDŸŸOŸÏ†ˆ]lØŸ½!*ŠvPšôN ! ôd“ìæ?ßÜÍÝew³ï$w§Ÿ9sî”3gÎÌ,cQÀ¢€E‹, X°(`QÀ¢€E‹, X8ܰBeY‡°ZVQ, X°(`Q QS æP`v Ä4Š;ÈhXà, X°(`QÀ¢€E (pИä}å÷óö›ë(ΜÎr[°(`QÀ¢€E‹uS ƒàçí't_au—*)öwB÷Îgöûsk„Ìñ:LÛât˶(`QÀ¢€E‹ b|Å™Ãü¹ Ù­ë;{§§Ÿ…†¸J3Çk·¶™ÄìÖ~æ÷g\°ÆÊoÑÏj?Áö–}ÓYýÇê?VÿÙ·_Òûq2³_»½m¦÷f7Ãôé®OC2§Õî@¶wÐaÞn_~VΜžiêc¬üý¬öSŸã™Öê?Vÿ±úgŸ¨ïP÷–g6f¿/7Ãtx]6áê4æ2öq«”©V ›qæxn„Ž÷ç×á–mQÀ¢€E‹, ø§€÷„oök7íºÜ¾J`Î×:¯¯4*Ì{R÷•P§1ÛÞnúuX¤¸£å‰‘'Â.Î}¶F4¢ŒÓùé¦1Çùò›Ã¼Óšãè¦ ”&Pœ‘ÛʈFâ,úD£@qý,ú‘ÚH 8«ýüuÚÛ6Þn§DpŽex¥<åò”ºÜb©pÆéǦÝf›î}Œ÷$î@Ç›mo7ýú‰wü /¼ÐÿÔSO=;%%exDDDo –ߢ€E‹, X8´¨¬¬Ü’““ó£˜Y·ß~û2)½@ž y4#Aƃ†~®Ýf›n£™@—GÇ™m³›Š˜ôë‡þøçŸ~ð¨Q£þ=Èáp¸@Y–E‹, X°(p¸)в²²%_~ùåwÜqÇÁ§P2šy ­ýât‡k·Ù¦Ûmôé w€‡fÍ>þ¯I$«Ö, X8Ĩ©©á¸;\Š}Q=ëmóÎ8ú5 N%± _§g˜2þ o¶ÍŒ„v› ºCÃÃÃÛÙ@†ñä’ °|ùräææ¢ººZe Crr2úõë‡fÍšâNHuß0«\0ÃL‡£Z&G©hX(Z&·¬7žuÕãhŠ/,,DTtŠTÉxN§C˜ a&ä©®²#¯2mÛ¦ ==]UÛb*ަ·oÕÅ¢€EÆLÎÕ‚_¨ëá mf$ÌnÆžÔ%¯™Z‡ÑÖn2 t›mÅ@¸Â‰ýmwíÚµXl¿†UUÖ®]‹eË–At-‡˜˜™¨k¸·ƒ’’TTT ÿþèÙ³'¤â™Š}aF!VÁäaÊÌR”——ï7Lâ«ðtÏÒRÁ³´^xú%ÊQ±råJlrtGµCÚ"¹015"½rCᨶ£ªÜŽ1çuTï|Æ Â\´ÝI…³ YÛò“š†„H6E1ö|ig[PZ†æ»£CÛÃa6¾ð<Ì(5lñNägmCET+´n ôoØÊè¹6uxÈ|4–ÚªU«ã¤^Ûä!A¥GÔ´é×Ã|=ìÉh#¡ÐŒ…¶9Z{?šË©%œ{u2Üú0†¶•ËÎ||óß'1?¤5útÞ‰u•·£Ã‰­ë÷`çðÂ3ÃÏøfK".?»/xÞºq;ÖÎŽ¢²Åóß4á1ñHnÝ={tFÓp#,ðoÖ¿ð*¾>÷6<54-pÒFkÏÏÀoßÏÆì¥›]˜¦ W¯Î8aäÙè–1¦†^mªa ±  pq,'1ÔXÈ-c.‚ëc¸@ïØ±#ºví =¶Ö‘Ÿs7çm24d"\ƒµòë0ÚÞáîÚáÐ̃¶™^»i› -ЈiØ>í¢¢"lÚ´ ©©©j¢æÊŸ“·@HLºÉ\0Ü Ñi5Ãá (aRlNÆ„tL4ÂeëÄ!?‘ wÁŒQLÓ¶nÝÚÍÄ‚égH˜¬¶«eÿ¿a¡²êMjŽØ˜X…'a2m <}•s´‡……º¤RQ )œÕòc¦BÞ3•‹_úr½›-…hÞ¼Â5»Ã‚v„E Y˜•¨¾qNä¤ãw){ô¿îÄÉmdªÝŠJÝg‚†j$t–`í¢Õˆëy,Ú7‹ú/À ÏêÂtlø¥œT:@S’ŽÕÛ*Ñû¸žˆ«%û@µ¡lëb¬° ÄÙ[ ª¬k~™‹ù¢ó¥óxÜ9aRêä‚lˆì‚nQ‡qÂ= è¬å™óðàËß 4¤ .¹é.tlR-±øù‹9Ø9üŒÃËPxµ)³ey ôþ?þPsJï޽ѦMÅp¬·þµÍù’†6»ÝŽ;v¨…x~~>† ¢òÖAòÞ£™ †±=ïk·¹€Ûkp&&¯O§H›…h?Ý|83è'LWRÂ|r] jòçV E ·:hÈX`d(8AÓÍ<‰"ðg6oÞ¬`2½‚)Vuµå<^ ÅØ$Œ0ÉH&ó‚™‘‘á “x 3Q^V¡^žSU2?dˆ4Læ ÓþGk8ÛB¨LêÎ6Ã8„¡Ö7kvØQck‰šê yW¢Sa/GŽ4ììlÅêôAÛRyyݹBÂÙ$» M¼Smy ÇWš|?m¤õGZ“}ú¯þüðL9ñV¼0”8 =üç *¦d˘ö 6 bÊü-É«ëÒÿ4Œ,Lžô›ó.ºëg€×f.Ƨ¿õǧw¨7W­jBŒ~C…méK8ŽS„…_|«˜‰ÿûÏè-CwñZµé„ãN:öJYd8ôí5¼ÚÔ@²²f PJ›••…aÆ¡iÓ¦j~4£Ä¹‹Ùè1ú‡iiiJ÷ð§Ÿ~RRŽ^½z™“úr“¡Ð ݈isõ¥»)ýºPF‚ö5þ$LI¾ŽÔ,ˆvÓÖˆ‰Ó¿¡~•ï(Ú&3¡9/­”Ib‘0“3Ži©ÜÈ&™Šx8Ék¢“ÛcøÇp]•=÷îݤÒã L§‚)pȨq Q«l›»L[Ì€¥‘!B÷PN•òï ߿Ģ•8¾[vîu \$ 6Õ¤©EF}·û¡D |ò2:\ŠËë­ ÑÅ™õ6GŸŽkNŽsç«Ê]†—Ÿ*-Ô†O_¼ÎV—â–Ë"²<s?{³W3i Fýó îÐTå+Ê\‚iŸOÁêlÌ€3¯ÃÃ{"º*ß¼ôvÉûžñÙd|“ÕwÈʼu]+s{.Ìž…/~S… ÐÁ¸k¢¬èu5ŠAî’/ñÞ¦V¸eTcË#Žù«fáóŒVø[>ye ˆjoÁóÁ3,w žûf «ŒîÿZy-LWYûmUV¨Õ‘߆ÎÃGãœå«0sÎbdŸÒ)¼~Ÿ¼4J½¶ói¸ãê3Ñ:ÚTÙê\,›õ%>þ‘)Rpî ×`X7nsÚ±ê‹w‘ÑñBü­²*"Õ7xocš ;6Ì›Ž·¾^ âŸvJÖe¢ïe×¢¿‘ÔŸ.ù_wåï}î øû°n½«²åý~Ľóþ,ÀHŒú$uÕ¯*L~ªr7aVŽ }G]ŽžÍ°W¹ÆT¥HÎÑÅå—w>oú4|½ÀP2N<Wžw’U[qÕ³ÝéèV±Xê²T §`ä˜ëpRçUTUQæ ãú£«¸ô.\6JÍ@IÖ*|ûüû`.š“/ý'ÎØþøÆ:߇Æúmd CѾ}{µ0¦¡ž#õÜå™à|©Ο„AXõ`(H WCVs»vÓ–QE=LC7Ž7|®_SW!:£ÎdNÌ´:žný™0?æ<û¸YiJ 8Á³âf[»®ã˜–yÆsß]ç©Í_ ßÇ´uÁ$×Dz5,J>ø~Ã]ëSi™Ç2ž ãUQ-Ã&#vŒBÓ˜Pì.©Áñ]bà ‰„-,!¡qÂ\DÊ{ñGæh×®V~5¹º9ÈüÞ/[ѵKB#š÷À…—(a©8ýÂq¸r„ì'b/f=ô<æÆ]Ÿœˆ±WtÁW¯ýé%FÖÊ’ t=k,™8ã®>+羇 ¹ÂF4ÇÐK.HÀ‰C/Ä=÷ E²V(ð(ÕäqJY<‹¯þ(Â¥·Þ‡ ÄØ[CSì{uÙNäeÙ]½40Žûlýc žm>N¾un¾t0Ö žkOÖù²AÄ!ß2לÆ:,cD©Ú…^'õ‘Ñ J¤Oœp—aÂäÏÑîÿîÁ“ïÇEá¿àÅ÷ «`˜PÙÊÚôíû˜R5ãî‡K‡ã»·ŸÂ²\¦°Á^°[MÛQ{žÐ¤Ò=reÎ{oO_‚‹n¾'܇U›°>o«Ül´•ºâ³æ}Š7§àÆû'`Â}7ÂñÝÛ˜±Êµ •yë1ýÃÏÑìê›1î¾c èz–B ôèØ UMx7+ÿ^Ì•w>}I*ne9ÞŠ.YÓñìs±WµWYŒTlÅŸ¿‰·×'ãÖ{Æâ¢þy˜þæR¹àe-þ¿¬ï‚{&<‰Gš©Òwü‹¢ììÿÃÒ>ï»ù"óÞž—å‰öÔõ>t:Ën| ãÀ-_.°¹ ¦> Jðù”ÊaóÃ0êY0 Ó2¥ü„AXAóÜM·ž×iëù^Ûfp:Œ¶ÛøâÜqtèL3]ý¡¿Î-VR3ÚM[s^œ”9ÙóaÓ2>ÐdÍxNôL«†ñ¡ÑðHh>L[L£N«ái˜f<5Læ „§Bæ/ôcТ½Z‹ŽŒ ª1á64‰´¡Y|*e`n!ýÇuŠDi¥lØ¢±n«t;åzÚ$š©N¾ý–m>gtnŠÌU¿ÈŠ|8ú¶Fݘ Ô{ ‰A»ödòÜ®5RÂjPºãü"Û/#zË6ZQâÓº uÈïÈÞ[†N±ÑH>æ4™Šeë¡´ ‰m{#Õö»0B‚‹3 mÓÀµtrÛvh•,º9²ES(ʸeš±!zÊHÚV’rçZ£¬1c0¤S´š„ÚwJ€Cž¢!žªžª†)wÅ®q4vŽºâÆGnD8é'퇢ËKÔ â ‰Cû.%vthÛÉ¡NÙ¢sz-#œ(½$xï+t\Õ¿ W…9rÊi·ØI‘zä¦/‘퀾虉¢Š¤ <!Ÿ¬FNÅñH‹¬A5÷¢FÜŒÎéŠJ‘ðµ½ärl\ò –¤ïF¿ÍÕ Cù’~爵6ƒ&5U»ðÇô­hsÎíÚUô8D@8xÔÕXþǓ̚Êì:ãçM_A—!9¬•ΦònCðóòÍ8§÷±æ¨Ÿa7>€sºÇ£ZÆJ!Í-P7G[Û¦ ¥x“±gmÄ\i_£î>mB¡Nyõ¥øýÉ)X»s†°0}ß¿câÿ F¤T$¾÷@|³*…B³&Büšš¡Eœlû W§ÖH“mU¾Cƒ¾'áRQÜm*Û+¶®CqçÈu˜ôõ"äwèy¶©ÀïÄ´åltàü²ßŠé¦ÚpNªkŽs%×; Í8‡³1y?ŒÓ¼ms÷o­ –¡ ö$ T»µ­˜ ‰§Ðp[‚¼žøµ­'jóäO@ô3O Ã`žÔ5LÚ4„Áxµm!L ÝÌÈh<5CAXÄÑ&an0x*ïh#]² ŒA¸_ëì,® ­Ò$ÉTtH Å–]U¨‘W%§3ô²ÖAœÑp¹,Œ?ZS;·ÁÒo·`àÕ#®ZPszˆ+™te®–¸Ðp‘„ˆ=çíg1[ÍdVÛàäH£ìMŸi/†5’&¥KkaE¤±3ƒ ꨰ+ý Ø©ïÁõk6ý4 Ÿiù3“)3c'\Šæ±ª¬¨p§ˆÇY:Û šN”ÛãGuM£Ö…£ºr¿KtŒ®6ÄîrQ[±ÂSêl—­ îéWûì2ñNõ'?WP=BÛK@¹ÐÝŽœ¬-*ròcËÕHc³µ‘¾"b[E?cÐè…2¡# ufX㙀µ1( }&Lþ¡')Vê墥½ÔnlW0yñÑÄcÉGxl!K‘mJ)·u´l2¿R-¡i„(ír‹Ô‡q½º’*Væ‘04šíK”²£œÂô²0s6²I²…Ë Ð%uéßa¢ÛÅ’Œ÷%RP"Ný7ÎÎ}½ú„´ÙÚºñjÙ‰CΡoŸãY!Ç­ È)tŒ­:[ôî ƒ S÷ûÐ)-»ñQ€Ûñ”:¨.OKV†ƒ yÕ-Åf‹4?Lct#\¼nãÑuý1˜Î¥ý´i4´ ƒ¶§ÃJRDÃÓZª 'mæÒ“¿v3m]„¡ò Óqb÷ScDøLË< u7øbÍxj¦B㦠®¬Óº˜i_Š’F…²½Ñ7MVhÒô¶å‹þI˜4¡Ù®'ZÆ…¢½¬úWfV!º®“ÎPt=ùlØ^ù?|× m]pgw9Æk ³ûn qº&ÛQ÷ÍQ’ëÄÌ©™Ý,ŒùG[#Âp>MûöíÕÞ+Í¿f8Y{?LÃ}$æ dÏý# SOü„¯Æ4L[L^²Ätd*4 oÛ&óXÆ“Ô3±ÉES‰±¡X¸]&BY­…«'2‰,Ër AâÂDR@ú65ˆj×C° ¿ü²­‡@jˆk œ‘­û`¸¤ùâ©©X¶e—(Ðæcû–õÈ,¬”–,Ç€Y¶½PŽkeaɬ™éåÆÉ#=¬Kߎr»l[³^Ynìi²}Ô>åjÕe}÷ÚX–™ò’"dʱ⽵s¢Olu>Ÿ8êìu~LB+ê’¬F^n‘¬æ}o?`QZ”‹\9†–ŸŸ‹Œµ ðúC¯`¹0sc.<¶êy¼d7¦üŠí¹{±76­Ùˆ׫¡EúÔï°*s¯ôg9‚ûËW‚e*NìÅiZÄúòåô-È•w²ê»ðÖ¬gíðœú·.Èþn2>» ~þ<ó±BUMÿÁÄ_Ô;缄onB¾(cçfmÅšµ;<ÙÐtµÅõÀhÁÁ¶|*øt²ö–ˆ’j9Šò³°lî·X’UŽÈVÝ¥]Jûú~v•Øa/Ù…ßg}!!CЭ¥ybØ· ƒÁ¨BÆÒ%X·mì¢W”ÔR¶ædë.ZÚfóÎýί˜·$åò^÷f-ÃgÓÒáÇ£•Á»(z?u¿SbËÙÈ(À“мŸiá…ؾ}»[8ópbæ%  ÂpÎfW¢ÍÆÉA˜6ýÚ­-mí§‡›~H9|ü茈æF´_f¶eKÕͬø)ã„l5°¢Ép[ÁŸ¤€Š'<5Á´Ì.99*¡ìÙ³Ç/Læ'L¦aZæ “e2ÏórRÔxšóÐÍ&Lôuáé“ Gy %‘rô`a¦l]‰;Tª±qŸœ ‰âè¢;Át|HS3½Éã¨NÀ  {ã÷i«qÆ Ö¨ÒJœÒì8…†z,Œ(<ˆ8bqöc÷ ì“'ñΤJ™åºs¼HIZâäóū߼ƒ 3œèsÆhœuì Ìzm"jn•‹²Ú$ãô³z㵯ßÄŠi-qËø;ÐVOxÞŠ_•õè8à½g0eò¥7a 郱tB3©¯OÈV DœO|pŒº„ÈÌcÐGõ2É#!’× [tëÞžò>za‚œlùÆßq¢{^öfA"M’²øÏÎqõk¡ÙIç]+‡‹ø¹ËlhK8ßáÀ‡“>ÂS¿}fÈFmÇbì£ir|U”8©C‘* åäÇñ€ ‘;\FÝþ :E9$ºŸsðÖ—xvQ l¢péÙë0u“«ž"IhsÊõøgä\üºtEöÂí÷ÜŒ_Ÿ}]Äý’ÆYw|òËñÏš8LþèE|¯Ú‹´µc/Á#í[ ÒEÃPi£~Û£­O¹ ãšÎÁÇLÇ‹K¿Qu¤ä*DtGþqœœJ³Åb䃷¡æÍ0iü×/qi§áÖÏA‚Mtƒˆ+)N[šCÎd¦ßº)Μ‚>vÕE£‘7\…æ¢ÿãlu<î½¾¿ù~ýL"EÕýÌ«që™íQÍm 2·©ÀïCmý4b ðvè;w"33SÔ T=Ãç5J&8o²é¶ ¿yþ&ÁÂt‡h>Úh7m£ë—­è`ú50Ú|Xˆ~ÈÉ臼1ö íî(¢cù Lvv¶ú–·3xõ¶ZÉJ%'ÆIšßù`/« Öð% áNÂÔºÞ0ƒäÜT±¼µ“¸p;Þ<ÒJ<ÉPXÆ“«V­BA≲g^ÛÌ\êk`Õé†*dök™ÆL2”~ëEV}pÕL„Ö¬+¯Ü¡t¹¤Ù"Eš|¸ƒÈJ7mý°!ê‡ÍŽ;Œ¶ÅéÉ}h¿™¡ÐŒÃ4#Á0Í@hf‚6ã; Cñ¡Ø +MnŠ7{‘ àQ†Ü·AÈHpÅO? [—1Ãäþ·J‡†ðɰðªýI†„x¦Ë/Â$s¢8ƒÁ³®zMñ+V¬@I‹S BsŸã²èRœt„¼®ð¬¹8á„T|Cýè÷Ä6c6F8qa(%&ı6¿|fÞîýÉ£JwµysùÞ°ýù=ëá/UÄû¬¯AH)Р) \KU’†½ÜW}‹Ö~‹ÇÞKÇI§öAxÙü´h+ÂŽ» .î ›p5uÅ»kê*ÃhoîÐz:(•pGR}jÇ Ä' Ì ¹5޾h¤é§úK µq„K-Ëu˜( ß_°Åûê?òÊœx¥Ä“¡¨”G3f7™ÍTy03ìÆA1Z:á-¡ #ÁYšf"(mÓ’ŠŽrõçûâÊhb‘™Ð„`¹+0W¢#f}êt¤¦>}†(íPg¤ƒ©ïIMmóÏ?/˜äVš¿ *‹‘±e3v‰nH•M®XïÔ};5‘K©²®ø¿ ¬zZ¨'äjï«%‹™¡ÐÌmÍHÑÐŒm2æÇ½>ð^úÓïÍLh¦‚L„?é„™¡xOÒÕËq0¯ü5SP/ ^‰˜^h[^‹¼) z1êîc¸rÊøU²åÅêŠ÷†gù- XP†âq¡Ð[f†Â{Ûƒ »7SáîŠd´aoÕ£m#saöëxÍ„ØöGª@ fÅ“ý…A8fs¤À4ãl¹- Xð¢€0vyüšºâýf´[Þ£Ü IDAT", üå)Àù\ È(ÐO£çy³Ÿé˜F†~ÅT0A]Fs°NO?ó›Oç·l‹, X°(`QàðQÀ{Î6ÏçÄŠó¿÷Üï[o`愈¶g.Ì—ÛœÖ Ër[°(`QÀ¢€E‹‹z7 tm_<‚ßyÞ¼åa®¦Î msÝæpºÝ\ÌÁÚ®ð.Ðò[°(`QÀ¢€E‹z>×¶Þ•ðUN£ç}4¾¸âÑ®˜ÃÌé!bNg¹- X°(`QÀ¢€EÆC-àü®çxmKºÎñÁ0¬óÐïëazËX°(`QÀ¢€E‹Ÿ¾æv3Özžg˜NkŽw»ýmy¸¸¸ÍÕ0é~Ÿòð.Ðò[°(`QÀ¢€E‹‡„šQ0Ïõ¾Â"£¥ I¤¬Óù*TÇY¶E‹, X°(Ðø) çv=§Ó¯Ý{FûýÚÁJ(¼˜ ð(ÜRÊô&•å·(`QÀ¢€E‹’zþ6Ïéfw]Hëü*Ýþ0 ÷« +Þ¢ÀE~ÇeëÖ­ g~Ã…_Ëå‡èxÃkbb"’““Õ·bލJYÈZ°(ðW§€?æ!Ø9Ýcþ߆€ëmh¤‚Eâ¯þ­ú! ÄmË–-Ši>|¸úHÜ=÷܃ùóç«ðsÁü8\×®]ñôÓO!µ Mý]`rðÊ|}…~0é­4þÊXµj5¾™>W\v Ú·oßHaž¿õœ^/¼êÃPø*L‡iÛRʬù­Ä™¹¹¹ê+¸§všúÒìÛo¿ÿüç?¸ûî»qùå—Ëç©å3Ü®/Úò+¶GÛv_…|–»@¾²ë((ØG iþÞN|ÌÏ&tˆ)MbË–q}9¸1¿[~ï4בâŠ\”–ÊgÆ+å«ÄÆ­Âaa¡òùðÄÆÆ£IT2’C;Hý÷k|=¨$8qö&Àº-±põRlÝ•…ÒJ;bä³ò4eö ÄFD¢}«Ö8¾÷ôèØÕ;ëQãç×°¿™> qñIrÊpå¾í–›CýÌ\Ïé/o¿÷°ëÃP˜ Ó@t˜¶u¸e[8¢)PZZФ¤$têÔ ™™™˜5kÞxã \sÍ5ò5ÔóAâh6d&öˆd&¾¼Íš4ñÜÓ©ÛÐ-™Š¼;°[¶†š·iÓ¨™Š•ë_œ…Ðê4kšˆÔ”ÄF7AthŒªV¹£ÅåE(*Þ+[[[‘¶IMZ#5¢‡»Ú‡Úq$âl¦ÑÒµ+𿟡W^8é„qS÷cÌÑn÷¢õ+ðÓÂùxù‹÷pý¹—`@OßéÜŽ Ç”™³f#gw!þ~ée°F£¸¸›6mÄ’%bàÀcCmtçöžÓ½ý>q­C¡èµßÃv•–——‡mÛ¶¡\¬`óxdyŽh p…Ëí‚víÚ¡E‹®.Ô™èÕ«,X€¹s碲²eee¡¶jdnß9?/@®TtTd„ÚN=}Äii58ëŒa:Û>ö´/¿hH†BÏëf&B‡íƒ‹¿€ú2æÂsŸƒY¹Q„|â‰'¢yóæJ:L°Â\ ðý2D)8ÒÝXÌúõë'ãºuëD¹ %%%ˆ’Õ7/^ êTtè` 烙‰½ÂL$ c §W”î%ÞÆŸ”¢Z>1^\ŒT‘†"ð: ðYª’HšPþÒ®ðŠ _âÊ+>ÆèÞÅß»Å.4¬r!¸ÅAñ<%&/¿ü2¾ûî;üóŸÿT:l§Ù29>ù䓸ì³Ïð¯ýKÝCÁSÍdÅ{¤ÅLÈš™p!Ä3¡™†º*,ymœ¥ÊŠŠâÞ<ÉG¦BŸˆ©+ûÁŒßYµ5•UhÕ¦•H&rEÞàiÊ ì(È+G©Ø¥²ý!¸FƆ"6!ÍZD#¶™q ¹8Úe+$!1;²vagÔz©cwO€ÁWÎõ)âPálÆi‰(`†ÆÇa@¯~X¸}3ªœûn+™ÓãîÙ·¾Ù°TîllŠš_|þ9ÂLŠ*až6§oB¿cŽÁ9眣˜]Çþ²]:ÿ÷EÈÉÞ¡¤-““Ô<¸++ƒöÆÜ9ßã•WßDóĦ* LJô'.j¢£TœMEÏõæy]‡é*´ƒa(ÌÀ50¿…Ã$("‰ø¸±»=ÓWOÇ°Ò sG7šÕX¾h’úöGZ\0¯¢áP9œÙ‚i7 ‰ãí·ß®ô#x¿DBB‚RÈ<ãŒ3ܧ9¨ãñøãcêԩ꾉‡zH]lU(+ù¶2Y©†Û8{ä[¼(œ&Ê è”#¢>™ © ß‘¯Á€Êšêý‘ a¿»†n OIN¦l£ì–-žþ8”:DEu…ÇkÊÍ,FþQÊ,•­U?Ùà‘­¢œLF)vg…¡e»¦hÙ>ÞÏ!,IµÓ&§Cš*Ø­»î×ÊÛ ÐËQÎ+æf¹s´é¤VÆ‚'W 2–íVïïâ¸s;ºÓ54Îî‚\Ž÷f}ŽÇU²eQ]#Ìe É–wf—ß)ùª¥-UɣdžcN:oNû¯ôèë'×aZÿç¾»¥•<FEÞ‘#Gâ„NPiüé!S}Þ¹g⦠''F¶R#ÕIêç,þÓ‰áÃOÇ“?†¢Êö<Ím·uÓÂ3æ øØµ}uo_a~ ÜßYÌ»¿ †¿’_˜S‹çañ’ùøøý=xlÎ èç%(Xóõ“8áªÇøsÇ}€W ¿kÅŠ-xþß/ ÃLz!û÷9ð«R8¤1ÓÔÈèâÏŠísñðøoQnR>NLíŽA'ŸŽ3†tEP„-Ý€1#NÃ¥?fbì@¿Ø+\¬Ÿ†¥À7Þˆ9>8vìXl•Õ:u|ÌGC9(òDÊu×]‡—^zI´²ŸÇk¯½†5k֨ˮŽÔíŠQ«åG¼ìk £õ›è-ƒ¦6µ.#„ÇEAÛ”Ž±HCd %Y$?ÛDÂS%í¡d(òœ°UÉä/Ê´Ù%ÛÝË/â–'ÌDvzœ'š&G#¾Eš$Òˆâ=rdV&èÝYÅ([c‰–m› ³! •Œ|Õò‹ªÝùÈ“»,’Ck'oÂ>gÂUôöŽ*·×]Ÿcî§£VXꉎÛ†ö≠súe\ÜirG°í¦¡ÈpòÉ'cÒ¤Ixî¹çpî¹çâÔSOõÙ‰yÍö˜1c0}útÜu×]j$''G1=åXבf8rЧD¡FÜJ²à«œIÍ}[úÓS¡fYæ1Ç»`p’c¼SN8ßG_ÅŒ°‚ò\Ä7‰Gyu©Çinoäf–ˆv}5ZvhŠÔ..f^pã×\.µJL@ˆèÙíLß+Ïc$¾VäŠJa8#°§tZ4ép0ÐU0üᬠ~d%HG>ôóá1g¾K^Åwãe gs1«6¯Ç`Y™oÛ[»Â®¬ ÅÛ_uGYqœÕåîäl \¼9„2ÚE¬Ä1°§œTŒÎö­CZ§Îêb¬ní;»ánÇÆÕÕû;wFÑõàÑr£>þ1>üT,~ê@æ2Ù{ó±-c£ô§jìÎ݉V­Z!##C\`ß’ @§Ñ~{ Ž?Úh··­ãýÚlü~MtolÌÈCtÎÇHü¹ˆj“à«þo žùû±2ÂÚ)«ÐóÒg°ðÆ!8Ö—ÈÁæ*=õÖ縩§kš—ãb••\kìkÔ (ÁNá–ýáé5èú±âZ”Aó‰§×âÞ³còs£ññÈ \ÝÓ2¦òä<<ñrH£b9|Ç>³ £¿¬“JU À³Ï>«nÀ䩆ý /Ä‹/¾ˆ‰'büøñxlÂu¶üþûïGS‡IFµd×åoŽþ4ÂH8ٵߛÑ0R¹åê\cÒs‡:GYY‘ḩ©Sæ¸0·L&· 4kƒ”ÎñŠ™çÇÉ¥½É¤tn&z•ÈÏÅÀœRD7pÇV9«Ž‚"éÁMÜÁìð‡³Ì­JNÕ–€¼‡ »¡ÐLܲâka]}­ð gím9;qaZ¬”ímØD›Ù°1!Õ"µ Ó`´9Âd˸.wT|÷‡ˆÿ«Ëн[•)hÓ±ÖÍœívX=BkJ(øð¤ÚÙgŸ:[¶Èí¬ÅÈËÉRÌD\¸åÅÂTÈÝLÜBå ³_'ƒ>ÎÃŠíµ´ øþ'Òó¸†àÙ!ŒPï4:­²ƒý|¹/ÀP 8f›ØïS- Q±NTÚ é€’$èô…[1ã7àŸçtG¥\—[U)Cwj[ÿ†¥é…~`B\‡\–ÂˉÔ#û¤Ü£óƒQ%-¡”¦¬¬@ÝQP.pK#:ááßWu÷ño¢ÀEø…øåõ»Ô}܇¿êŹ(t—+âVI³ô[Ü?´…¹·¸à~ü.Ë,Ýü5.hq?Vj< ñõ]Cq×ÔÕn¼í9ËðôU-\ð¯Â‹¯?Š .xëEÁÌÀ»…¥vwzW´’Íu²ËÕÃ¥Bksظ»wïî®/ë¬v:_p÷i‡)€ß¡à¶Å–¾Ìªô?1oí×ømÃ'X3C/é m¯WÜ~6®˜òŠr<#ßóXú矾²7Ú0N@JBaÌF³àåV“”l_(f‚5á,a~üÔŽ=É<™ûIÖ Áå¢)Œ¡]Žˆr Ó…²¥ÁvØ4™'6*Q!O5¥‘Ü.?µjæÊYž&É1*_Ñî2w8ÓTÉbƒGþ8–Lãg;ñ¦ô¡Z¤+\øhœÉ@©P ‡`l®ƒNÓP8›ëÏãžú²*sxx¨ 1¢k…š0aÖùˆ{Ÿ'4UráXYBæ,k‚•« ±¿7(Ù^˜o}XÝ|ÜÍÏÏWÇɃÑùý÷ß1÷ûè•‚Û6cíÊÅxìŠbõÍ 2Üâhݺ5þñÒü÷ºXôêhÜyº7€ñž¿Í~Í<˜Ã¢¬„BÖÀÌxÄ3x0¿•¿.€¶!) WïFLé¶e˜'Î ãcka4ms$lé¦,\Ý£“‘Ðükç€Ü7TŽü]y.μôœÙ¿½_=îçÑ¡ð‡g­ÜFðlyž;¸kÍv Ò™ÿ»£*Å{óW¢Õ2üsØex¸ÍBП 6à’K.ÁªU«Ü ÈL|õÕW°Ë»ð6lÁ´ï|‡ÊŸµK®”®HGóäxtn61q±rÔKˆ)†LÄù§aSæ ¼6ùCdˉ¯åì9oŒäÖIc7ŠöÒÞ£ÀvOFÂÛ0^DêŠðŽÓéµíÏÁA „®w|(ßs¥œî‘‰¬Ò^¥˜ZÉÞ2µE-qz`‘Èm+ód ¤¢šÈ^‡Ëé8æÌ¶Ê§û¼Uƒ¹|©‚°ýÔ]èíg #ÁxêI°LŽS'Å4ðý¹Œ×~ÃnœÍeÄDD©0Íat+ÕHk¨‹V¡œ’äΗØ”‡†à—uÑÒÇò1 _±ªk‰, Cä[+“æÞ¸ÖÇO<(Ù£ ½ZÕ`ÍÎG 2Nêù[w|úµ[“B§Ñ~¿v° …7sÞ…{§õé'ÇY—áÞ!¡0R ?¨ÈWÇ—}9¦Üµ§H­<Œ”¦ß¨.˜8cŠ+ °hÚcsþ38ᾩøð¦ã|2µåJ‡õƒ§NÕGY …r§£85ekðæC"ž»ø%t‹®BUx zKÔkÓæã?gB¬äåų÷ÎØ€»6UÚãOM»3/|+2oÆ 5†ˆ5Tp0Ð0h–ÀÕ“”®ÿI˜ àñ‰mÂá°…7{mNž†0WžÔÞ7ç´ ~†­i N’¿Ô¦rqÚÑïâ^íÛÚ³w ÏeðÁŠ©àm˜\ñòÉ'}5·¿øÕ'ߎìí(²mAµ"® Ye QVXdè¸5HFï>}0á±ûñŒ(kf®ËTûó¼_ƒ[#ÝpPT"r±¹Ea6TºTºæ@o·Ws´‚-žPÍ)Îm—ÉÞ)÷GèÕ½*IáJ½Z”1‰›õ=Y%س³ ­d¤i‹ʶ8öÅ’‘TTxŠä÷MW¿8SŠBÝ.öYÒÒÀ½úÍT6׫ƒ†Á¹>”t"¿¬Xéwn%K2n5rÂ!( „ÊØ[TjBK¤Þêćº".· `5x¢É1k}¢#PqË–-ï?ÍÄŸK×¢yd> ³£3Á;nFíŠw­Áàž‰(éy‡”ÅE·wĽ“ßLb ƒŠÓ¯É<§›ÝuÑùUº ß°LÃÂÝaFÃöH¿‡iü­ü͉Ùé š«'÷BÂf«´Õ¨ ¢ЫCóÚ03 „¢}ß¾‚¨ †ŒÀ1)á¢Ç'aùe õ€¼LuµÁé×(É€/- ü¥)@Þ6ØNâ6ãÉÔÛ0xjm!=ãl.½'Š$8Ö&Ñ%†è4¼Y;•psN!ɶ7hE⪿èXHE÷CAú9l\%÷DÛ&U(ˆü•" %ͨGšu>ÿaä]èDiI¹¡/’|2¾Ì;•¥%°+¢6Áå/ÿ„PGJÊÞàHüÞ{ï=ÜqÇxâ‰'¾þÚÃýÅIe«É«Ø„Î;`wøzì-Ú‰0[8ÂBdUCZÇ(‹«vc]Á¯r%sOÜvÛü÷¾'d0 $¦kåž~¡´±Õ…þdÚUG6ÏDœ¼ä9C˜œx¹š>Ôï¹Ú^-_±,Cˆ-TîBÎ u£ÎAD´¨' #P¼·ñ-M€ ËÕö¦½ÈÝV„„”X$µ‰Cd\­î„¦EˆP‹§xšâ`¶]8ë ?âH£ô&\ï‹n÷ ,qó{T©Eÿ¯pvWVy)·†WùdÞòŠJƒ§‘Êë@X¥±¥U8±óNti¿Kêj0‚l§ÔÃ8˜47ã__7·ºy &õªá´]ô >—û*:%È7<öä ¸ªÿ¾,¯Þ½]ºtÁûŸí‘»'šÉÉ"Ü1® Þ}0TòühZ Z55ÆeÅLúx¯õÅÙ+=»¨/cnN¾âu˜6´'X ž¶W„F*X$§MzB\œ¨3¤6]XZOŒ–B\‘åÎ[¶s¾“°î)ÍÜažpEyI®.—ë`‹ D‹"BDÈ3ËïziN×)_iôIðaLõÈþy &¬Æü}¢$¼TJê9ö 9sœã~~|i4¢Uc`0Ã(ع9p ©)¦YØ™ëÒ(ËÄšù@‚ô.–iįq»tb«ÿX(ù›H4êRQZ„½…%rËU·Ê2Q*@™l‰yªP"4),1ö•5œƒa³ƒ½ùæ›êÚjÅi¼lA¸Qšeëþ@Ó„TÇÊ}vù:¥0kVm’[î6IóílñSbƳö|“™%«Ñ¬y<®¸áldîÚ‚ 6ªk»ßzë­FY?'|>摌ovhGÞ)Óy<ÞiL~Ò…,IЃ¤=xÆ&«½ryCrÊDÞQY…]¶ ˆ–K«ØÅ v•ªz×ÖߘY7Nìy2¸o^’ƒm+rQY.­¤Få²’´ÕìϨ†¾qö([p'þ†Þ„ñîœ2–ï„q†$Â)L”G¾ù¶>­š4SL(Ë­ÉDná^5Îè÷&7CxÂd‹*RhÝ<¿§tKG§¶; ]i‹¼0ŠŠ§í[Öx˜]9r!^‘NÖeøM êÛ´ŽÛóûÄâÅ»Úâã/ó3ÁS"—ŒÁÉmªðÞ[aÜ ;3ÂøûyXœa(ÞrLn`£_‹Ñsz½Š¬„ÂWa:LÛ"1ÕÎÀx–Pȱ®…ÈÏääZƒ¬ôLDņ!)5‘¶6¸æ¿Cpþ¿žÆÏýÇIñ9xï¡ûâ”4‘È =sö$œuçr<5ýœ×QV Ž"dæTÈ…#I¨ÎYƒ÷ß ûqâCõÊßW‡–>P4ªVñžñôi=‹ík×C>ò,%Xÿ“¬ÈŸýõ$n>%AVAI¸áѳpö£0¡Ãç¸âÄv¨.ÌAF6ÐïØŽòùd‡’`¼ûîGè~Ó…hmxûÑg!¢K\¥Ü6×ZüãKѾwÞ8ï:|&!gÊöñŠìr"þ!þ‡GAñcCñ÷ã˜åL·„‚¾ÃiöòãRA˜`ÛM Z’GÒšöÂö²Ò ¥ÙB½¥ä ãÀt9¡…´©d)/•òÅJ®·•®F›´¶hÞ1J&¢màuÞHn»í6ð/½iLFM>Òg9Xñªmnyè#¤ûàdß6çã¨Ä«š„ {?`˜áÕÇ#Œr £äè¨Rà6æ˜Äp„g‡`ïÎÑ ArGãT™Åº ©Ae™(‡—‰°ÐŽ–]ãÑ$I Å„ ¥Â¬DGÆÔ:ùÃY£d>ÖËÉ•úe4”`pã¥ò»ÂÍj(œU®Ÿö)m°qÝZtêÖ]$…j›‚ó /KkŸ/RR]s—ÛÀ›ÂáÒ*ŽŽVÉ¢dOŽÔÕf*Dÿ*WNAôlÝæ ÒÜ2A=òÈÃ*m vM½‰-ééJérì¬ ŠY˜<ÛL™ ~Ù°» ûãq†Ío-yþÜ4i5¶åRŽ-SŒ0hÊQ‰ìÇÌDxOäÞ~Ÿ%Õ‡¡0¦é0mëð:í€ÜVÙ:ü{øåàZ›fÌÈáò{<>^øúÄ8Ðí†WñÜÖ¿ãÆáƒTÆ¡%Z¡ÑG IDAT#Òüáiã!u1“ﺓ5„îg`ü;ßáŠÓ»Á.R‚îtåóø¬f.¹c4^ÒéFNÄÂ~ícgo‘#UöŸpÁ°‰Fl©Ë›W"¢²5-úãåôÀ­÷^‰%öúçÞÀýŸßˆŸ$ñr8“ñßµ? mÒdÌ…V½ÏÎ]ŒKd/ÎH ­ßý£@eH>¢!«ÜR›‡Èv“¬årYy–ý´ ËÛŠ¶½ÐýÄ´hßT¥É­ØŽ¶qÇ CÏæXûëNU0Ï‘sÐ CÁÛ6yê¥1%F—_ Vb»Or ’d7\­¤kD> ø,Ò#{óøTu¶?Q®Êæ‰0=Gņ#¡u,råb«œÍ…ˆÅJÓæò¢a¥Kb‚.{ø±"¥JîÜáaJõ `bçÖtK;Æ”úÀþpÖÍøÕÈ8¥%¥ÊmbÖt¸Î×8ë2h’ë¶ßýuZ´M“Ó3.lé3ýûÎUÉܳ™KÑ…·ò›Üº ¯‰‹(.2¼\ç<ìv]mš Šß~ûM1Õd¸AfÛš™ðeó´ÇÀ;þP °°2UwÞ5rŒ~-Þsº·ß'*õa(4] öï—ío¢VÀ¢`ªì9yÖ ¥{÷ Bf鲂PümÂlœqG®(5†¡yËxTÊñ0•ÎMÂöË^„½d/JÝëW/GI…°Çaqh™‰RQ¤©¨ö]‡«#Ø]["¾*ÚîBlßþwÏ(™p*+ÊP²§ÐÝYÊ kp̰ýòÿ¢PÊ‹ŠE¬Höî†#º;^JÏ@Tx(OË±Ó Ñ§h‰ ¹ÎYÕÅ3ÿ3éã¤A…E"R´ jFoÇùHÑžbvVvW§àŠÿLµ"*¬‘ |f>z£Hkþ#g"3䉞嫊ì»á±±d£ô¡¨ºE²â­à €rYey5–ÍÙŠfcðèÎè:X>‹-÷„ÄÚÐ"ÍXõòjn%þ•Á M›6àß×^{­ºM¯~Ø4LêP9*k“o’ìJd…*úUE{Qêê`póQTŽbñÛ$^ÆvìÜjߢE{òDÒ.ƒ~0*Ÿ!þ2J+§OÅÓÏÁuÛ"ç‡×0S¶÷oyë,ÄŠè¥A›Ÿ¿êîG8ÛC0íf?@P–’âRµ•Q% ˜%òÝN8•Uêè«S”`ù—Ö/ ]‡¤ M¯$‘vQ9¸FÒÊ)šPuÑÍîÝ»å®þbÅT™´´4¼ÿþûêîÿÞ½yæçð¶­x°r…Áަ‡Ÿ-¯)% µípÿpäà²U¸Úù€Zka¦xÏÇ¡~Ï-Ó°~ÍFô>V¾¹!ŒC Ú4M•뛄Á! €|—Ü2°IMj‡XÙÚˆ’8Æi#½T¥Ëظäª}É4%êddÂy œÍxÝpÁex}ö—8î̳„8&êx¹™Gµ1 w»•Ã3O¹,ð*¥mnYò'îuå!oC ¹ýüY¾|¹ú f&x¿™ Žšy MæA3Ú63,žŠì?z^7w{tíëËP˜ c!õ.PebÇ–¦.qQ]µpÊj*XãtŸÖÖ¬;묪Êd5ê:ñl9þÓɰT;–ùHÆm Á ’Þ·‰ÇÈï>FòŸë±#·ñ£Ãu#ÎC¿”ȪëH0ì Úªž¶ªh•b·=GV•ˆ’•j™(¯R/U¶:ºžÔ­{$ʵÌár|PD²¢è.óäæ!¢&ï¾û.®ºê*õ1¥Ý!_Þd»çàñðÃãšk®ÁùçŸßPè—Û1Íäò¼äm»ìóR“Ÿ/·K›óP7”°€Æ4)0e¨¤ß*"ê"2ݺ!^l2‡Ú ê8»òr°eýv´ï–"§>dP6!+8ÉC)RÓ–"‘H‹•Sd§Øíöíw\éoÝ´±‰Ôi˜Jw°ê¹¾å œÍ8õïÞ]ÏÇV¹í±y»49%‹9‘N¹éîÅX¸Ã Ä+Î^U)Ê´åÈÙ’cRÛ°Ãë²y'Îkæad&xêC3IÒÿ(ðe“©`8/ΪÒ[H CýutÆ/õe(Ì…ø>ÃAñ³Ï%":Ž•½4J#'! ƒç?cœˆIéƒó. ƒ5_ ÅðrMp±?Îä0¢ê§hN´lÁ´? ,8Ir•°œÔPº6¢å/’Šè¤0 Õ‡´Tbt2•{¥±¸&Üpùz`ÖÎhÖJ]tÃû8xWÜOågÐYWnð í~òIãÃixÝ{’èuðTÇVa*ª…QO„*O7 ne|1®8¦`+ ‘4ÂLËý#irk*™ 2‡ëê1?/û [7îDšÜ:XQÍSSû ]Hê"÷þÓ"Â]'é_aÂe¦ïDEI†õ¯û{ Š^ûù,Î?s1:Œc¡Äٌã®Âƒ¯>Ñ;‰•÷)—Á‰B«´7åÍnÉìÑ>$®\¶+ä&äR9•"Rèo¹Ç3¹ÀFèæýq²í³råJ…%4Ú&ACf!›WxÐHå:h?Þs»/Àæ4¾â=$ L̇cˆ~ȪÓMƃ7µ!nï§£œ»KÂN"$vrr2¢££í 5`%¬È¢;F¹hÉçææ*E¥ÆÈ\þ.“Ђí_¡Ý)-±[>lÄíˆaÔy‘IÇ=0º(AÑrBLÒØãR.Ä©'ŽP1¯¾úªúB©&¿bʯ“R9“+J+øuÓÃmÈôäÉ —#"ÙÖ¢QßBêk—úrpo†Bâ͆ƒÃVYÙ“™hÛ£Ça“L˜q¢{Ûžø}Å„ET S¯vj£2˜;$dDä¤Ì] ¹°¬¦:CŽŒvòÙò†6G"Îfš”Ê1ý'?GËD¹´ƒ’PE SÆÛ0¥Ý˜[Žy¢äiJ%(ÍËÍØŠpÑI{ô–#6Ú¸ƒÈ\Æát›qö…ÇG}~LpĈjŽ3$±TN6Rë®C8|Ô]"<¹£Ü<¶-RméKÆãÀk¯¿‰ÿÞßA/僆76[ä¡R—ÑmÓÖnú¹{·+UýP|§¾Jõ:Ùÿë2®ê{$3·ˆ`<üx¿÷‘‘¡>ý\׋ ¦•æÈ¢;™¶J(êÔ¦ª é*2v­Áæ…kТ_”–É‚7Ï×›GCvŠóc¥ëÛŒ–5½ÜÌQ¿úê«•bÕC=¤êÉëÇõö÷TLJ ¦ZÖK£® z¶ SQ£™ Iâô(X›M¹ÏÕÇ™¨3Ñ®1D @ÔÀhü¾üwüùëf¤´k‚Ö’å}ðÒ-ž˜’·¨õ+¨Ï¤tšä®©XVF.r¶—ËÅCI8ià´l’F nŽDœÍD!0^¤ ¯O}ONDÍC»¾²,}ž¬°°põ•MÒ™‰J¤”QW‚wèØå‚¬Ì•«Ð/­#nºå¦FÉLø»R@Ó€}¼iÓx,^¼D]΋Å8~POr 9½9vð¸²S8¼TtßƉ–jêÁÉXC?™ åÉ%Šs¢K:(6»0oã+Ì;Û CáNlrxâf0‚aø"8‰ð†1îáZæ¯I2”RÔÕ1'uNìuf/)ÄÖßÖ£Õ±‰Â¦Ëä# 18ÈqÒp~ž»›æf"%¤;Nô7µâÐx³­ó»”ÌñØ( ¥yò™Š`ú†w°mcuäº}UÞIa*Û·ÇÖ-[”j²0K\Šø3 ¸|Iš”Ëb¡|Ó B¤0dœÈh±Ón€AÐJ*œõbÛ"´Ãkb1´×¬Ýµé›3±uý&¹ˆ ê2²& qˆŽ‘ëò%g…·**(AáîbÈ ô8y=»tEï9Ñ!å;ã ¡êv0ëu$âl~ füµá5ç^‚›7âÃSላF¼0­‰©)îlÌc˜ìÉÊÆÞ]9-.Ãõ»ÇtáG åx¿ÜpJ†·!hîF¤¶)*[2ÔèÓ§¯è>ÈÉ/éWd¤„›à¿(m[€”ÓP2AiïÑ …qÓ±Ñ'É`‘ßeš‚‚4iÒ”r6 Ñ/¤ÞE˜ºùeÔg{ýùà–ýz«ƒ~ÖLÛÖ¬Yó?ñ[Æ¢ÀQCmÛ3ðËòo°1gBš9“øÔhÑö—Éeg)ʲd–) E»f}pÚ  б}'Ÿu'ó4sæLµÅ¡þxý•W^Q[ >35p s>dîøíÚÄÚÙÛÍ•UV™è~0¿‰SÇ%È6GK9ò'>œx9h†ÂŒƒ]M]/Ö‰Œ']7'yVIvåçÊÜ/JSÎrcåGÃ"ã#Ð$!­’’åvÃ\[ºëÄIE½Z<õ:q6¿73þÔ‘ÓŒœ!²—Õ¸´¡,9µ¶rÓ:¹I6 YErœW>°FS-Ê—mš¶@›–©8¾Ï$Å6QíM3£¤w”|9ö`ÓÜŒ}ܼ°Oë>øË7~üxieü8ñqJ¦3O¸RA‘T[?l?âT \Áû€пF¥”4ö‰ßŸ€^½zé-nqpÛÃ{˃k½íÁíúõV‡¶‰¹ê<æúÑÍG3´53A[3ÚÖL…Ùî( Å[’Ö2Žx pP$Às䜔–¯_„¼’­((Ë“ð"uŒ4:²‰ÒøOŒhƒ>ݨ †«„ÜÒá$ÆÕ±~8ÁÍš5KK§–÷Ûo¿}ؘ ý‚ôDÀ%ñÔ~ÆÓ]£'VÚ|4C¡ýõu i‰;'3¾?ÒÝ<±Ñ]£$Öƒï–õ¿4£TXÒ‰8›ëcÆŸ éÌ> ÃÍi¹u{Ñt'ÍÙ¯‚æððǺñôíCiHê^, …C¡u'Ì6™3CA?ÍLÐv3d‚1F86ËX8( CNF<¡ÑµmotvötO¸æ Šõå„̆6AíæÄʾÁÖE]„!C†(wJJJ½'m´~ˆ£ÆÓ ^×ÃæË͉CNÞæpŒ ă4çDÄò½q0î¦ñÆ´ÖÏwªžäè7»½aêôûk‰8›ëz¤ão®‹?7Û ã«Þ¶Ù¯;±9,`QÁ2°f.À;N§±l‹G4¸Wɧ!¾¿ÑC”“á$ ÙͰ`'LÍLi8Úö†§Ã…­ËÖ¶w™uÕƒ·?㦿ôÁ†k¸ÚöÎ×q6ã¨ñÖ¶9ŽîÆŽ¿7¾¾ü¬[]̨¯|0Lw|=§Ó¯Ý]FûýÚþ{‹ß,*Â\€Gáu5–À`­X‹Ž6 ­c‘X¯#gs8Òñ7×¥‘¸õümžÓÍîºÐÔùU:C>[WÏxŽË, X°(`Q ±QÀóìœî‘ _ „,¨>, X°(`Qà¯Lóü­çôzÑ£>[¾ ÓaÚ¶­")GYö”ÚÛ‰1 z¸^/ÐJ| ¨Æº9ߣ¼÷éâý^7ÛOÜ–+_º\÷3þ,ï†jÏä{Cµ푯œÊÙì°(ùmŒ:vå¦1úK³7"³ª%z´oŒèY8Y¨“î¾Ç/D˘Oë=ë~’>Û=`Ÿ­pãM`f"ôœ®±õöëp»> …¹0 D‡i[‡Evæ¿ó(nž4Ã]§A7<‹§oDwÈÁw”®{'\ ü¶ò:XCrúÚ×á¾A—B¿AçÞ‚»ÿuz$',|洯ĨAWâþ?Vb@¬KÆÝ‹ÊOæù`(*¸Oçûˆó ¹^yKnǸÊO±ÒCQ–w S³اbÊ‚У!n ®ÎÅ”‰¯aƒ¯´< ÷Œ9ò%† MéŽÏ1Íñ‡†¡¨ÎÆ´‰ob•Ʈ屸øÂÓÑ#¹>ë̇ÁÞÿ>¸øog GJ#ýÖ‘=ãÄÊ[ÞÅçcÔ“`¥ø¨ï (ùð7ŒéÛHG6é{Iß{R*ª†Fß Y2Vúì'¾ûl=)á¼lÓT 5SK÷^Ûx'n8¿f¼çto¿O êÃPhº@í?ªí¥¯_›'·Ç‡óÖ`Xûxسá_Ç_„a/bÙ=ÃlÅØ¤Ë¥˜;·MŽjê„ÊÙäKŸæî)ópUë­xä¤+ñ\ßSðæeNQDõÄ›³~–ë|Y~(¢%iX¤¯þ†ä!²*‰ØŸÁºë×lz”ûx¦ÎÃëƒGbr[1kÅè“$·N–æcãš­‹Æ„§âZu‹§\Heß÷ÿCïƒö2°ñ–¾J~[¡%‡FuEï»;Æ!ï/çßxNjY…_<‡isRÑéŠþê¾ú`°{ù¼²²þsu?uñNðy«±|ÊD¬ì|®>¶žÇ =ðw`ÕìgðéÛ)h{ÿ`4F–"ïÏ™øœ„™ü%Ö]; ðäçÈÀØþ#qÒ‹qqÎ’MpÁÏsáŒÙŸ‘ÍŽ¯ÇÂ7'}ÿ]Ü%øWS¯”û^^ô èÖ0³½-œp+`«ß)õª]€Äz^7„:,@6Ϩý)¨@Ïâ¹OV¿NÞ(“Õ“8>I&–={PÖ¤7›õðáíX¸e9Æö½K‹t=ФÁÆÔuàÈÆÔñ£Ñ·o_ôýVî1†ãŒ™OaüGs$Žáoâ’þ£•{4¬›zå»~ÅÄ7~G¹+&oéTŒ&,yƽRB³ñúõ£ñuF™J±géGïElW÷¬8°èűxgi-\wG¡ƒà&Ä7CXR?ôwQ'²2̼ïzLÝdÐöM?z<ÖÑ[±?ô6vÔ^1P«Ulzo£¯ÿþõ»q-¬äò0Žìù¸o´ñ>úö•r–æ©x{ÆLŒ½o*ÍyÝx÷}Çâçí.ä"º¥SÇ»ÚÄõxøþß‘àƒŸ(Ûô+& ´?¸ÃÊŒvW†Ž½»#ÉÕcóV~ë]í¡ïõOaiÞ^°#ß±°Ë}••å(—­òѾêJ”3¬ªU…›1íõñàíãÇ¿?3IušJlþ}š+|<þÌå84¼óÁpUd/Çëã§ £”#¥¿ôFÚýý­ŒÑ¡!(wÄ¡cÛT„îЪjdþ9Ã…ßëXžUê*b_<ª÷®Æk33™=ÇKZ©‹ÓO½«w¯Æ”i‹°NÁ~kWÎÆÌŒHdÿ†”5¹¼O°†øË7çÿtìy2BÃJå]â÷i¯»i;ãÏLã t‘&Íx}²]¤®Þ½ïO[®¾æ„Êݦ<ÓÜi¤"øs† Ö병¥ÞE=t'-“^Ç™wß3ñ f.ÈvÇÀ‘‡™2î¨1O򾯩+0gâHü$)5£ÇÏ”^YŽo¿€Ÿ³ÊQ´ò#ŒûÜ£T™He<]Wœwîsï¦.UÌìö9Oá¶øÑQRÆxl’&oÏ[*ýÚ臣Ç] ««z¹‚é{µƒ…©?÷•±Ø5Ž>Â5\•zXðÀP.ƒóðÓcÇʯ_tÓõú§¾F¶îîöÚyfôõceL¸_ë1o8ô¼nf"tXÀŒæÈú2æÂgŸ©Cq´<™ë1C0´k8Êä3Õ¬—³J¾=‘zœt&`³£5Îè1ü¼EÅUgΗß'to‚yÏž‰GãïE†|÷~Θ\\9~6*8ÂVåâó'Ça÷éß`ù—7aÄÐæxò¥y*®¦z‹ˆÚfàÄ:£º¬?~V,w¾ =sÂé×>Š{¤cûú™pýMÚ×z|qn.®=ýìô§/ø¾ÃŒë¶«å œyhj¤LýMgxs »öLš4 wŽŽÆìïÓÕ—HkжâÓ_6àæGžÅ¤§'âØá®:1‘ápmÀÓÿ›‰Æ^‰MBà?½A߸ÕÇ͜۰cÓ"Ìš™ã.îˆ(¡GQúø`vþûì$<ñï˜ùîäɧË}áÖbþyVŠ@: ÿ™0Ç‹N¿z;åO~À}ñЄ ÿñç€Y[>ž…”°ºq6וø—•£<æ¼õp\4—Ë“º»OÍ'Þ9Z$‹‘#ߌá÷_K Jʶ,utŠçùFë»}~ÙÐI}Ÿžx1R™Æô9/bvÓ‘xV`ý{DÞ±UûÑ^*¶üŒ‰†`ܘ[ðq=ðÞË?£PÁ©–1ïtÜûVG|±`5Ò×/ÇSç÷ÂYw~âÖ~—ãÏG¬ŒUù‹¾E‘|Ÿ¢YÏÑü§'1oK©ªGæ/aÆSÑ9.ƒ¯ŒõÒ·Vó>ôl¬¨A‡s·~ ·ÖŽG·ÈxáôkïoÒWcLÑ?Ëʹ­»®¾ÇÁ‚c aæÎ{AúsKü–±ëçŒÁW>ƒ-2¦žÄ›»OÇ‚åo£o¬ñþ4~îqˆe˜Þ ˹ò5øtÁzd¤/À¹›À™Oþ„j¡å¼8^VãÕ—Ï]'ÌÈb\cž †žÙ-UÑFÏíûÌé:Ø:)ÈÓY_†Â\˜¢«'¸£Ëç ã*§•¦YC§¬ÚXy¹\Cÿs+~øïLůüæßÀ¸ ƒs}( Ö~Ç~~÷ÿì |ÕõÇ!ï@A•§ >‚%¥ *šøä¯¤Rm U”?ðW*P$@ Tˆõ¯€´Ñ*%-D±1¡)P …€$"Aƒj $›û?÷îÞÍÝafö gø,wîëœs¿3;çÌÉÞÜr×DÝÙ_A_ê+èàŸDÏ»ÆÛ¦!Ÿ&5*¶ÿbþ4ÜÙ-!µ ÷¡]ÿ¦}àÃ%sðì‹obí—¯EÂÐñ(zqÊè™ßÆ÷bô0àÿ>„Š/þmÿ}b™¤–*ÎÛÿ:uí‚Ëú‘ý᣼râ·šÄ úæÊ¹ÿ÷®¢fß`3ýp|ÚÓ÷ –º°Ný1„.`îA] ";ôDד_àíÅ ðÑAªj.ïi-Rʌǧ¯?ˆvaѸø2z¬!Ÿ­4 ˜„÷N{ }£iyf\‚¤!qÔDxèI2¬7­©¡Ýå6”"kùzygòMQéHÃð¾íPYV‡«ïŸHÏÛ(pMOyÙy¦2a± uí×È[¿»i2&”Öº[ìEHÎuñŸÞÀ†‡ ­ØBé%Òâ½ÿIJyÅc§c`ZŽ9,ÚËN§ñŸ°fË??Äëù;ö zC¯‰§Ëj=J÷ÿ›–Ëþ ›Ve⃠ÿ »Šh‘%jlb‡“Ö“nKQA4Biv¦†c²wI ¹ã_´"d Më´¢w[bbBQ_Më†ø¼ôzVØŸ³tÝ\¼Ð!©H»§BbÑ©u-vlXMEGJ‹‘¹åŠóZ¾!t™R¿KÛ¡;-B•‹Eo¬ÆŽCtC"¬À¡Sßo °*3"l?Ùèm‚_¹‚¿Oî‚È£Gкï½Àç³ñÏ/év™föÄ5oÄ¢‡q5EøU4£CeT+\J’Ûµ¢BºŽÒ’zrmaWCøåøÍh`ڪϨEÞ›òžøí D„tÀÕ]ObýÒÅx{ÓAª£RÜ_W†Ž´„E|»V£úêÓ 2ÕîùðU<ûì<ÈËìwb®'øM}÷ê´ïž¹´å íÛñÖïžÅ‹¯¾Jûkà ï³ýµá ¬ À66Œˆ ;Ÿ[ƒÔÓ;íiô­CeU,îî9 3‡ªA˜öôpy½B»Ÿày½"Ùoz'«³WocªÁŸ€ÂN¸O¦Zϓ–èB½[ŠÈÛk[ÍáÏ@!ºÇÓÊy×ÞM³‹±nó?ðÖbàõ{{“¢ „êï¸ã¿ðËá÷bø¤¿cý†¡ò}qžöŽÄ1ZÑP,\ýÐdþºþø`ÅbŒx}0"jÕ]³KiX¸6 ÿõóûpïÐ_ÓSëñÀå­Ð²Ç-dßûøëÊwðùèßàÆ>‡õ+>À;Ë^ÁˆGúyVcvIùáþ/&ßû ¸ cg'µ IDATwÿ÷óX?»-ž½®âq… ÅV£®ëÿiù`A:¬E-Eÿ4Û@ÓÿVݽ}ýîx ‘WÝŒÛöÊk§*{·ÃÉòJÔ‰Yñ‚ ?iñ-2 >Œ¦åŬC=J°ð:…ïb—g.˜‚š#»0#ã5”‹S£–.भ¶ºŽ$Ÿ„ãxµÔ "jªí»üwñ»yÿDT—«puÏKÉc4¸È†Äcè¬4Œ¹õRl_±³>Ú'¯“„`K\ŠÅûPîp“´hºv#ÃzÏ?~7B6-ÆÆýÇ©„œ—¸p_Ù‰×_‡~7<€‰ŸDGñDÌÔ:æôxG\éŪb –ã¦VBPÕ±î¶'e(I‹WÈ•h­.š¢›Ù&Žè]ÿ/¿ô"îx9Ès æ»m˜þ»y(kÓW_Ñ ÅóuÏ!ÖæËµž¶WaVÚ$ÜziV,z}Nd¨MØáÊ«úÐìgô¿íqL|ò'½d+m®ÚºDëÞÄMý~†ÇÒÿ&g–þ½€t¸®yQ*;h†ËIQ[=]ßœt-WO‘—KÄKAîÿNÖàê_þðæ{øÇæ÷é*:÷^ƒã{Wàª~w`_»«pËýH‡;0¢RC`Ŭ¢Xí·Þ)$]gS~A/á¦`-¼·ábw›úîjß=sqÄTxÏ;îÁ=¿Ž¡¾„õë7àršj²¿6´¢…èÜ猹`C)]7ä×r9[YãÕâšFÃÃ[¡í¤k‰¼^Õð<"7ñ'+NYuÚzÎ2­Ì2XôÕP®Ú*Å*ïIõé”ó}¿!¢;Æ^LÍ gîëËö`~J]½Ạ)j>y)F?1s€œa¯ _<=rhÑwPä½nó„vîݺ¡Mt ºkqc£/„‡ $7ŒNÃGé0ç£aٖȦvNšÚÇW´»ä'É´ÿ7ì=…=º£Û¥mB‘ú°KñÀ°",xé] »ý D\Ôw-Æš­¸î^O 9?øxÍ (ýöŽ}»;讘œF[l[>ÿõŽÃX6ù~RËP7Y©ØˆŒØ툟/O§éÙ2Z$ë«m™˜V(‚#Çصü`ôƒríÅ8qx¯'§ÅE!¹y]n?ˆ¦¯ÄÞcœøj^š¶mèÖÔxŒbº¢KkFOY„½eîóN® O_X':'ÞNÓ±aï1ÙwÿÆw(ì†k»¥jL§•Êáh²jðÍöÏ‘t:Ç¡ªì[Ù@^ĪJñÍŒ\rõMøÕð>ˆüW%jIwCC5:vï‡_<3!–cIÞ>yþ7X´?=»Eè@¯Æü§Uíâ¿“/Æß_ý;ׄâÒ+o>+¤)öÄÇ·F4=¬ì‹£õÌéµx<étZ›ž"P»Æã,±Ñ_”£˜nQ‹x¶šcrËòŠãÒÆc¥_#2âvzúÑ-ª+hþÌ}®ÈØì”–W£®âKümáZº» •z«JÐ{T-qõMt#sE¾ª¤`3¤-$†/Jq²U<âÛ´¦¥ÜÉ)xŽ|µñ]šÿ{»}(õ}Dnýç·h–tñ_°Çáºæ-¡k‘8¿õ'PZF2"é²»¢úx#1V·î“n@Zï÷0áÑ—0ìÿ~Žøêzz|³•ŒÇ·_‹hZˆ¾‚î¾-ß‘¾Ó4&êqé5Ô Ø¼û(:÷ènÝ.EtˆÿÓýfÇI}÷;{Ô5ßq {>þ‡é± ©ÖP¾ò"Ÿ‹£¡¢Gw øÚDS ãûÚ`¦×U&dEÅñpÐb„bAB‡#‰·@aú ì=!ôžÀÆe4K4ì^tÇUÀ9S_Ŷ½{°~ÑoN°ZQ¨o­CÈhüîM|…Ì|½Y™êsJ*b¬`6£·§ FT3îCQõ€'vãõ'jñðmýqíµ×"1é—(ÿ >ý}2½OAÃvÖ¢÷Ý¿–ƒHûõÏÜe'qÝ“[1»Õ Ü|Moˆuú=¾†^­¡ûJr Þ-Õ;‰00í׸ô¤ûMA|÷rµ¬k=[W<‡Y#o–²z_Ý+&i'ÃqÕm¢ç0ÜxEÌp`ñkº¾¸å¸Dü ÿoÂÏu'Þ†§¶ Ã+ï¥ 1¸yÂx¬Oû9ûÆ‘›ÒäÝ”¢"‚µE´qï9#‘üì" |÷i$%&bÈ’"ù…jט¶Â-iO¯ý—õºË¿¼½ Ó1#ó ºk V4í¨¶0µC¡îw?‹'þÃõÇÀ!KGÁ‹ÙÖÐp!¦ìø;žhóG Orw7ü<šv§é”»àVlXôž>Hž“÷>y‹Ö?‹Kälˆ™ÄÓ-‹ÂUwS“÷žþßgñ¯²¶èøÍ¼·½Î꯱ø•ç1uÊSx1ó3 ›@äi’:”.5•(¯iQicÐîŸïâ¯ÛK,ÛŸ¾…¤“f#N:*Ð))·†Ž¥9{Тë­wO^1Ó¦Mó³VÉ&­ìn}ñÕ¸2dæÎœ‰í¥-,Ç-§g:éV‡ââÄÁÉy3g®n|Rob³Mu¡î…åT³ŽW\GG<¿{úñÆ¿¾GߎÅX¼b'j#Ûá†:!kñ‹˜3ÿßè5l€ê‚_oÅ+ÏOÇ”§ÒYLSà};Ó Ó€®·>aQïãÅg§I³HŽÏY}T±SŽ<ýF¿uœß—ÉÀG¼¤}íPŒ Wýó ]ó6á¹.¯ÊóûÚÄøßu‡h•¼Nšvæ¦Þ‚k'eÑüèêûFûÎÚÜ6A\ÃîÀ/oî"gy.¿q$}ïàºËzááå_bXï-¸ÿ7¢o®ýÝÌÍM¥óþ±çØ¿uÚÿ.×Ð5¶wï«ñøßŠIVð›ç»×u ~©®ùýá—ów¡žNéÆë·­¯{}®=Roþ‰¼._Ó/ Å5þ_Ì­,Ä(z¹ªÿÀrÁñÛ‹ nŒ×ÇÂð×Ò¸âÉCt]{öVºi Åm³6aö 1fø/±û¢‘òš5í)9¶à6=0ûâ#‚ õs+ê#®âr)òÂ-ŠÈGji·;v,¡üh EL\ZÔVÒT ‹ž ÇEÒËO4måÆÞmã¢Pw‚¢KÏÔn8bÛÄÑ”ÚÑôt˘”—Ñsùضhre"¼poôgc­ÛÒÝ3MY•UÈ{´ˆˆE|+úSšåFxt,â"œ8QCÒ"["ÄQŽÊš“oÙqQ-èY:½£!î’âÛÒËh”ÑK[AŸÊ®ó! ‰D|ÛVSmtçå ÷NÐÁlbBj(‹D$MɆÒô{Uy9Ý}Š>-Q]^F$Z U[ºó?QŽ âÑ­£CPq¢žî8éYzH Ô?J¬åm¡‡HxLbèÑH ½GJ//Ò2Æõô÷^Ž’­·ýx·ˆ@ÝÅÔÒ¹F·³áätCꎣ¬R;ÜBB#× µ•ßËó.ŒžE·nFÇù(gúòQÿذ“ò|ˆlƒúÊc8Qëm£ÇØ@wˆi[âS%ù¸:‹ñ¶ Óú‘ô¥§Y8š!k `úx]ÚÆ†Ó2Îu¥?{;Iws•t—©;$œfˆ¥³öŽÖ„™¶ÔD¯öîs ¾’¾âq!ý)që¶qk߃*DÆÒÌD‹zzEß#zQTœµa­Lí¡÷^ÚÐû!âzH5}ç©Ù¸OÔygaOXtZÓ»Oâ2á ãA§“›Ñ~w/É­U8ý• oºÒŠ—+ëhª¿Š®QôWMá4ÕM+TÑl€“’×õ…f bé8ÕÐ`ÅXÇŽÒT90ÄD\ZÔ‰w'h)ðˆ“žk‹F†"®ÍŒVñ*-¡kWºv9BÝxÍ£?­Œ !þ•µˆŠ£¿À7Jä]ªèQNŒö}ºÕ5ìÄQúnÒ1’ãŽi*úZÄPíl¨¡÷oè±=&n!‡ÒøHX}ÏkCé±s\ÝÑScÎS¿OþÑÕÊô»GïÆT–Ó㣖týn¡®ß!ˆ¢s+’®·tYF$½+å sëd”×£Mòšë}Çé¬ׇzÄ´¦Y¥z V/| Ùrì=2% ôÞOÄÒµ êlÅ/ûÇÝYÛpwá–}ot“,¢¹ýô¡“IÞóŠhDì‹Ø[¥B£È‹3[ÿW#ÝM0… ,TP¡§Ý) x„ÿà¶¡ô² KLp'Bwô´­JÞ§Ç…ž…¶ÏCÉ×ÔÛé‰û1ô¡€@ò1¥ƒ}R<¶ä’}RþNƒ8ÎâÜ𭆎!ýy£x¦ì»-Eöô¨C~IÍÎ;u>“±³ÓfUY—ÆD¼ü?/m™¦¥íÒéÅÊÊ*§¶â±•جÇm¢ŠŽ‰¼LøspMºŸR$1Ù"®t.‹G^»¬Î9›óâŒ^N1ÖU uÐø•¢Ôµò¨˜j·èd,¶·x'Ä›±ë8 áºN£È@ó¶ß=M˜Ù¹Ð9£É²Ûuéñö%‡>š…!Of—QÏ/hrtüëxçÑŸÒøÍ Hè© [Hº$ľú˜"8ðg³; ìêü‘}^´‘/a©÷,z—3ü…ÑEÿP÷¥“ tpĹÁâ…I]”.[gÿ6º h/ÑùêcÛö,ŸÖãõ¾Èù“¸™9#¶oEžæÁŽ•T®]Õ¬Çí߸CÇDëÚXìž<ÆîÎTêg™å9gs^œÑë‘ŘÌtˆçöm6ヷ4«ãÆSÛ~÷´ÖfçV@çŒ&Ën×LO÷”9(ºuÍ’¿§—4;´n£Ç´víºê¼QŠ/gã&â6±ée®‹ÿý (”`%FWàUð‰£$rʘ`L€ øM –~»Dl¡â'œÕøÞ矲"ZùoåÓE^í«ÆªÊ[¦â]‰`6]Qy0ò¸`L€ 0&pv (ÿ­ût}ß—5ª¿lçï ….ÔKUåž²µkéO˜xcL€ 0&Àš;«àÁãÓ} ÀËÿPx p+SF9û÷襤$6p5`L€ 0&p:>ûì3ú Ÿpù‰ŒŒDXX""h±= fÊT™J}á(?Œâ¢"¨g[&è ³ffm§Ýø‡7iÇh&¶ñ:–BídÊN•ÅX4i¨ë8õ™i8¾–beE½ÃS­°{SÔÙÛè8rEt,>Xnßk™ÀÙ# ûoåÓ•vc^•{¥º2%D•©T•[¦{ÞJEÏÞ½ñ»E[ÐxYvà½Iáèš0›·oÅ3‰‰0höV[Š93QW"?'\{fä+¥þK$¸{N½ +8]™a½°ÈY‚ŒàDðV¸zeK9þÔó̾r:ö(Ä£˜‚„ÇW{‚®Ãk§â– @NaùnºÎÈõXiW·6½7&TÝe¥È»ÿ?¸¥ç\C[ m§t÷Fl>x6 ¢N?Pövj"NÙ=»2;.§ç)°_É?³ñýÀ™îc4‰ÓþnâÌ=ÂÜ;ö2áØ…±q=1CQp ¥ÿ˜ˆ.aFVùr¼Ôÿ¿°¥ñâ"Ú½)ꬬSå%[þŒGé:سë[àBQá´PƒÑ§ó>MD€!¾ºô‰¢OKúÄÑ'ž>íés}.¡Oúô¦Oúô£ÏõôI¢Ï#¹¹¹N»-^’3a^w“êg ½‡‘S¡Š÷9Ç Õ™ïΗf;Ç$È÷4h° ÎŒìBÕÐY˜•á$Ÿ' 8’œ ©KJŒ]]IN†”•’2Æ™µ¯Ú#Oì”diú’œóÜúd§“®$çÄ©S¥½Â–yÙû¼úZe¬l)-Èq.[š.ퟺp¥såÊeΕÙÎ:· ’œyžñbçÒ­%®b6FŒ95ݹµ Ï95ÉÅ %#‡ì·—idzb_ŽsjJ’d3uáBg*Rœ[P«ÁQ¹•¾l±é¬(-mä=щ„…îc[á\Jã˜íbQ·o)Ù›â,‡Ñ®®Ì9˜MÌ.u©-É¢~IžóÌÎW]s!‡ùe^M­íôjf‘9[2í¸¸LÇ>ƒÎíey¼lõw|²ÆÐ1šçùþ !ÁÈÜš‘àDê2/9^Ùfªó’èœõúJÛ½)êl ôTÖ.¤óÏ›—§’w˜€vïÞíüüóÏû÷ïw–””8¿ûî;gyy¹³²²ÒY]]í¬­­uÖ××;ä§®®Îép8œ'Nœp _-|¶Ûw¤TøráÓ…o>^øzáó…ï1€ˆDL b#ˆXAÄ ž`# ê'7OgÊ ƒßuÞ}¢âÐJnyô¬Ý´ »ŠÂèköúЉƒ#¹¸¹÷`ÄLÙJw†u(Ù:S÷ÆÌÜÃ4ƒ» O§LÁ£ù¥pÖU`Áý ((¨pÝ!ÙÕ‘ØýRQX°Ý²£èXãTHýÁ÷Ð!›GsPRV†Â졘@úÒH_—›Áô‰ßcîìïñxál]:€ê–€,±ßll©:ò>Ù²WößS´Û·‚í{xîòêÂãðèÊ<²¥”ôuƨ™®™¨®H+ÌÃ]30 a0:yY ‘Üë"ØÊ´áYx-âhV`Oâ£ÈÏ_€èìqx›, ·¬µ²ÓÖrcÛ·—g,ê‹ñÜà¹Hq-Ô\RÅ÷@§®\Xg óP*÷ie]ûrÒ1wpLza&†vNABÆs®ó̇-®êjÔ˜´³³Ó¤¹¡èìÉ´æâ2iÏ_'aÊìÙ1读fŸãs!-9]S#}ñHÏ1R—Y‰k €·G N>rKÆòí¾ç*n‹ÞÀòåoâ“ _"ëÍåXþÆÈÜtPÎnìMQç"jÿu•ÙÙd߇k™@P~]÷éªÌo•~O$º%êÊDQÀ Í-ë‚ß—æ£Ûóé„éÉ— ‘öÇ=9 ¥I=кu?,ÍHr]ТÚY×QŸ°Ø‹Ðëš¶èEÂŽQ^mYsé¦u)æÑsv†]tçãÈÏX‚ÄYbjîC¸¢[;ŒÉzF:nô¤Q©8Tù<.RžN ÒS[â“Çâå䨹¸3~ÿ<úš‘ÿ8ㆻ&ÝàÞ‰E—^ýÐ¥Ýãl-ÃãýE™Œem/K™mxÝý‚ûŠé÷ɱ÷Í,@~øÂ?·þS3;»ø1¾S%é%ô8쩞 W…’Éýõ Ú×=ª,ê*¾ýš& mT$þC{ß”ËÇ(Qzfÿû%(Et£ Š3û=òîì!Î_›‰M!Ó—>ë­™u¿u:&¦®G·á÷ÈÛoQ&ãS Â.Ä}ÓVÒýËpÌX…‰ýòAÉ÷A)ó°oéH~w%¾Œ›ôSúLRÇ·‡°sûNDÓ÷¡D\1ŠvS«ïÑ&B\-Úº{X=˜sÉ%ÔN¦[­UâO¤nÕ—Ë™À™% |»OWm,5›¸/˶¢BW&„ûT`+Í]Yd^úË L~y5™ éBœÝ왃áeⲟ€^½:¡ÝqºZDD #;ñ—]NåÑš“_íEñ¡cøò³µ˜;a z”íÄñmmêÜŠ=®Ò€!.Âug¬š‰ô{×ÌG#=.vGõÂÕ’M>7¶¨qmÒL©?üºÒ»$ ó 1?«+ª¿xGéw5utÇœ‚þ}D0aØ,dVÛð¬û€d\ÖVRZXŒA¨yÖ§¶˜KÓKcÑÈÎ÷öTVO÷r(‘ÔìØ WÛúïöcíªë³u]%6f,ÆÔ¼2L¿‘˜ºoÇÇ'é÷àÆð*mø;ãºÉy=!¹âË ôøåDÚk („l‡~DCš£2·³)dJ…>ÿ3³Óš‹K\û¾w`üä+}Y/ƒ|«ñ¹›…Å£oò}èÛ+ ³;OÇŽ?>„Ý_‘ d~IßøGn@øxôøÕH7Å>‚ööý…—é#ŽÎ¢­_âZ Îû{¾K•°{SÔI2Ž#صs?â.OD—x1¶œeÍ‚€Ñ·›¥·1«÷*ÍÞ¡—á±ÚÓGÜ$\JŸÓ{‡"#ßëéPE¾xŸÎ…î÷êÊòåûôEݾe²nY¾ë¹w]ÙgÖ¼©Îô•ôEÅVù~ÁRw³4[¶])Þ‰°«£'óeeôÙ礗é™ú>W¾šÊ ÄsM8çåì“ÏïËöeË÷%R—‰w%ª9S“œS³]ϘëJrH‚3»Äë­×ØdÆÖjá®ÏÚW欦ñeÓ;ó²È¦‚ydKªskiµ³º´Ð¹t p Î}ô†E]µ´?=!…Þ)s–•ÒxÔ‹B©…L;ž¥y®w9æå:+*JÙóRI’3ç€ýølí´±ETYoÎeb¼t,V”8KÅ»SWzž«.M¡º §xË"'ž¹§,££ãÚ¬ë\ÏË“æm•Ƕ$Oœw©ÎB›•AÕ.ÞdÏTq¾T¨Kìí´'ËϪL§Óš‹ËJñ~“àíý„ÍøêJœË2æ9s KœuuέKÅù2Õé~ËG X&õ’ïP¤,¥cëtîË¢wg0ÑéýV‡Ë^óÿËœéôÌñ~ÍÅvìv\‚­¶5Ž]½ûãm±ë{ÃïPxSá\ Îð;?¥ï¿þ…ðõè#|¿ˆÄÜ¡í;TïÙ¬ !ÄPt§²à_Ê4ÎRá˜]΃äÊ‹ZÒÔ,ó(Xértª.!eª3g]Ð+òÝ/G6öMš¸Ì)¯%vuÕ§ö²“æ¹Â,o}©ÙÒ–òâ&tÑ‹^\–âÖ›d~Áðœv¶ÈFä3„ƒtËKHuº¨ç<¥ƒêR'Nt&‰6¤ïóì©íÝýR—zTRÄa!Óé´äI.9On;”=ãÃéZÛér»Ö¶h{ïÒ1JõèwÛ“¢q®;àL÷¼¨›âÌ)Ñ¢›º²üe^çÚÔeÞz-r µã#íJqæ‹Æ—òDñY•)ÚpÕûV çM/úNÌògöã+£ ‚9ÏqJp.5¼°¸L2¤zŸvláLÏÒÏka©ÝVç@…¾ì´´Å¿¡˜´rÈó&*¾=bµsÂÕÐ¦ŽÆ~„γ°ØxÄk狉‚`‘ ­8FaQhŽÊrT:êa~‚“)Þi(?Bç}£SnÇÅnìMQg?vÇ®ùˆ¦;© çãžwN‚wû‘øì³Ï.?‘‘‘ £·è‘=¥âŠ-ZÈßsˆNž< ú‹ùÙF?ꘜœ<šŠ÷Ó§Vûˆçêây¾øˆñ*m }õ9Iûê£n*NyLm|n¢³Úô}QfÌ«vžTXV0%!»–¢â-õòVÚ·“ 4ÒÞâbEÇ©uQî‹_TRBãvu­,öH_¬‰>‹Ö>‹ý±E\ÈOñ‹$9–ž%»YÉ$¯aÊSè #lOŽ{ IDAT–Á Ý—–¶;8:âí­Î»:»u¿ 9O:Ú=Ð`B :Š3:e,·`dŠû–xú+Ÿ3»Ù½)êÄwÉxUr¨hù$ôA/€'̳x}øÌŽœ¥1?(ÿ­O4»©6Ær™7ó_¦ µB]™Ú7¦Zsïݾc²P6Rü&$Ýù{WqŽ 0&ð£ Ðëé(œFï?Šó ÏÊ+SÍ‚cÕV¦þf‚• »:Õ¦1•w¿J4á=&À~tD Ï×ÁÝqo~6úo=¯‚½Ìvâ= 6%XµÕëTN™`L€ 0æK@ùoåÓE^í+«U•·Lý (ŒtF寶œgL€ 0&Àšå¿uŸ®ïû²Xõ—í‚ (¼¡ÜXvŠr•ÑâbD9ýÁa¹OùÃô&·m×"÷ªƒôS¼ó K_ÚÕù{«žñ<\)åÖ‹UUÝc,?eD}¯‹ègÅŠœ!!#½W+6¦ÍDîÁÓ0à RbQL€ 0&ЬX>}º{^ýƒ (Ì%ÔÒˆ=¯FÏž=éÓm£ãÐYîS¾ó«^똡îØïa¤§&¹«¼êÖ®ÎLVS”9vÑ/XºÇÓµóRùÖv¡g¼=±`§ï ÉÊ.ßã‹ÅÀÉË0/~µA[¿UÈ«<ðÆÍžw6YÞ˜`L€ XÐý·òéVmMË (Ì”©2•Z‘š!×à _zýð¶Òšô+ŒÈÞ÷?ò-çò¢µ˜4´ëN»O2^ÈÜîùsªö}ïÁÔÿýµéìêoËÄX·Ì>}†J™Ç‹31”äMNFZf±”Y/Ê’‡z•™*³(Œºæl'z²òûã“ÒP2x©\ú;aj6­m3[dh$VšL<‹Öæb­!"f’'-—áíø¶gbÒH×:×8ŒæElj9ú^ÓÙXÅy&À˜`:Ý+Ÿ®êyUî•PèÊ”U¦RU~JÖ¶ƒ+ (X†ô´4,X»ÚÄ¡­)VølK+ŠÎÅ]XIët,¼+S†'⩵=rªëô5,<ÅrǬ®|û"t0‹³Úajý/²¤Ì1«¿AEÁdm ýǰkÛvì;vœòY²,º•¿ø¢Û†>·ß@Q[”… sgcᆯiÕR*êØõ¶ŒzcýÙý&XÖlØð6Æ ¾ã¶ÆQXl˜[ì™o0_å®7Ð9q8æ¾…Ê/31aÆÛºAr?ìÂn´ÒPS'C—Sê¹€ 0&À˜€F@FŸnÌk]w (T/¥PåL hùïÙx[Äî­ ëu¹—t!-³´w/ŽUWÈüÜ…äJª] é—gËæ ²ðüäéxëã­Ò¹þå'f/³ c0øÂ$ HÄËû°r ¥®ÄÔ;»¢ÆÓ–VV§ím¼ýÚôc5¾LHÁ(òñwum+[Þþó”‡õÀŒÂ¥RýÜ8*v®Fn]5ªë¼Ãò(rï|±aµÜ[˜_†Õ«wºg| ­È(A’ß 0pá,`L€ è”_×U¦·³Ý& N¡¸[ÊBÐÏìƒÝ‘Ùpmµè¸˜Ž¸ Žf-úŒÆBšUX8n€ç×/£ÃÅ/{Óï{ëd ý*µM]lŒ[ý<©Ú.J?Y¾ÏL%‹Ï…á‹É´®hü¥Êúrlß´ Û¶íB¹7ø±]ûÉ€%kC²ÿ¶bJ±u首N¦Ÿò2±E´Qs"¿~ä¿\?öE¿ä¨ÿ"´éø$ŽtéèúYœÖ\5¼ðÄvÄ©cpÝ%üÓ9‚3oL€ 0&`J@ùu=ˆPe¦Ì •/3«3+Ó•‰z¿üh5ݿӖ•Õ›.C៳Dyw&ß0XTàËÿ£G7 åwŸ`ñË3PuÆÞ\Œå‹?@ñg®;òìךN­ñr”7¶-±¬ëqu¢”9⿟BÄ´;°ÿHM$]Kº…»+l ¥y²–!7e„¬K¾öbjáÚÊó_Eâ )”É@©óUì;MHGÿ´NÉÄÌ[ Ûw´±%öÈvÌ~úeÙnõ‚Ù¨éÕú Á=}iMZÆÝjì—¶ëF}²0øÑ™X™Úo‹éÚÏÞ¿ê/ƒ”]oLÁ”·EùuÚÏœËfü`L€ 0E@ùv;Ÿ®Ú¨>¶©$f,D!ý?B/–*5[mT,_Þ‹>â-q»=}’èó-fº^ZNº{idúÓ”ÔÔÆÝ+ufe4–‰?C¥7³hEѺ’lïrן¨:牥ÍmêÄj›[—y¯È™BË_»A?àœ*åˆU4iyf¹¢'-Óíª”öçe¸ì]HzüÛJåRèbil±¹–w¯Hic‹Z.؉ƒ%?) ]+`گ™•n\“úk+Ÿ.ã’9feãê‘þ †[1&À˜@3'ÐD« ß.|ü¥ô¡;Û3»Ú¨ 2D !ž¨T­4ª§>W¥þ6­ðY^MhÕÐWº´*WÕ¬&‘†UCÅŠšjuR±²(©mÔy3C:cF -`¶ú¡3·æˆ•-–Æû®¨¯ã°^ÔAõa´B«8h¼1&À˜À‡À\mTüÕC-}ÄÛ€"Uû"/ú‹ZiT¤j¥Q‘ª›a¿üŒÙˆÐÛ™]áShµª&­)âù%}jC>·qsT š^¬\:óçmkƒß³²%x‰2X°{C"Êk`§¡ˆ»2&À˜À•€ðóf¾Þ¬Ì’A°7®F%M`XÚÝ´Q½ðüÎM«ƒ¥3&À˜h~‚öçÁü•‡®LßXŒù懊-bL€ 0&ÀŒ”ÿ6NèíT½Ì³L@¡+SûÆÔ£€w˜`L€ 0fO@ùqe¨Yð`l£ÚÊÔ߀ÂL°dW§ÚpÊlTÒ/–nÃÁJ?~ðÃFJÓW/v6= ÖÀ˜À‚€Ñëy<èe¶ƒö7 P‚•0]±NµñNGP\TäYS®ÄIùƒ´çÁÌIrýŠE†•D½–«¯úÄê¦Å(zޏVõ%e×|±–ÆPïU;}ujfõMÁ³I‡èø‚~±tí1#úq±mEÁÿÒg}ÆÊUXÏÐñ ÐΦ;Ár ¶_°GßÜù#åw»ÏØE8ØÜãÅ`‡Éý˜ÀùK@ùoåÓE^í«Q©6*o™úPè ŒÊme~×âûѳwo 6̵ê¨H)ß5ýèrßSH§V5Ú¯Yš  ðàºçI¾XÝt½ŸôtˆCrZ¦Ï•M¯yt)Òé×5êX3­Í£iSðlÒ‘E]‰üœ<!òN'$¤^X[tŠ|cAûh. 2 ¶!w§u¥ù¸löp<î^aÔRfX[tèV[„±É} V)ÿÞ.ùG¸EËÅLÊPdÒ­V}ñrô![‡Nz‡ÝÊëlÃÌ‘4ÃA}Ò^˜‰‘Ô?yR¦¼Ã¶«³´Å±KÞa÷9ÛvmBZ²‹ÁÐ|]˜íyÎ/m«š†„$ãmj@Ñ{/xêúˆñ|óH™‘±ž·ÃÁ÷f±šêXl;R޵iCi¿‘ËáÜȆþHŸÿ6>+mŒŽìÊÅò·i] sI&23—#s­ë8½VúD]eq®\ÁUœ+i‹ÞÇ.úÁRñc)V[ýá\Œ6Ò96v¹ëÜr‰ãKvRù»*œöÇÁÊQnu|q±:¶vý|×V¶ØÙOG¾0³3Üë<úKÙ󱋖±ÇƵLàì° |út·™^ýƒ (Ì%ÔÒˆZ££øíMÐ/HÑVK¾£^D©Ýåo=DÒïq,/<€<Š&ܲGDÃ#¹¸™V"™²´ØUÉVú9éÁ½13·Ñ Šf§nuë“ÒB[b kßi´ØÛü•>dFb¦Œx×M[Š3bBJË,BÏÛFÒYØÿ=ýPV—Áxgë2dÍ}‡äLýAÌè0™üùo?6ÿœ!@ýðMô“£6uv¶DuEZaî*˜ ƒ€Ñ9ÈËZHè‹N®¡Ä’'µ« ã+óPRVŠ­K;cÔ€LWÐ@ÌÓ)Sðh~)œuXp *d0eïµC—ÛAÖˆ8ZMu1Žõøöƒ,¢;/>u‡ü)ÖýRQX°Ý²£è˜ëX áUG¾À'[öJ={жcûöO°}ï—-6úê¯E\Ï[°'ñQäç/@tö8ù“ïvNaõÃðdZñµÛB¤ éŒâí»PÝud´#[ïDRo ‚±“¬·;rpfÿÙ[.$ËêØÚõ³=¯ml13]/«øèD« ‹-¬sý”nªÄwž7&Àš#Ý+Ÿü…™2U¦RK#z=D«hJÓÊ]Ò…%ìšÇá|Kd+Qó%05g9Ëö@×IH7 û+§£jËût $½K_ÚH?^#ï{ÆæC˜žìÛ±º”¹þ¿ðŠ«h]ðcøÒVæ•Ò–Œü,<ÔW\ ûâÀÊbtþ!æ8Ç Ízn-,½¯¡‹d;)¼rWfÓƒ›Ò—’¿SÚwE>–E?‰^—µGå®ù–u?´_téÕ]Hż­ex¼¿ø «dÜèŽíÿV<Û»Ÿ*|üÇA7Ü-"é×NT;$ÒÞ¸'§¡4©Z·î‡¥I>Üë -Ïþ¸gòjlm=:t hŸ‡’ÜÇåï¹ ¥a±¡×5mÝ\]fˆÿ»ÐŒÆËɱsq füþyôÕÎT;}Cw¿@:–bÅôûdÀÒ7³ùáäÏ¿5J7îÅ"id0*m±q‰ƒhf« ·â{¤Nù9ºÝAØ)´ø:FKdÞæ8ÄÛpQ²ÌŽ­O´¿Òò¼†-JŸ}Ú8ëdߎk™8Çtÿ­|º2ɘWå^©v™ö*7ËèÊT½*S©*·I­U¶i#§0Ü}]Žººì?”O@¯^Ðî8•ED #;ñ—]n£ÃU%äth?ºs5=Кƒˆ²¥>eFiïsÄ´qërÝ^Õ¨»¬ú*r9®ß#‡ÐV†*wK¸Ö3—‰]ïñ‰™–ôïc÷{˜J©wjƳþð{è:hæb~VWTñ&:’s9Ô¹-†æd£ÇW{Q|ˆ¯ÏÖbî„%èQ¶7Ú¨÷= ƵX,t_âûJúxw`ã²X5œw¹ðIZ•¾:ñ”ä²¶2˜²ÃÔ±si²ú?öÊÁH-˜€¥KûÈ&kÿò*ŠIÖðì.Z—ÀìTÍŽƒª3O} .öÇ–4YôsýÚ.?jxÚyì9!Æ%ù±bf#¿ÛO³=®ïŠ,ÿыڻvîGÜå‰è¯`OÞaLà,PƒÑ§ó¦fóÈC)4h[(ÖÏ(/Å1òÂå¥GPéPw/•(¥iˆ£GËd÷ú²£ä¨7 ¼Òž7Š•H {ñu¸ïW÷aè-}P»7þû;[UbÖCȬ!™ú‹MËÓ0`°ô×ýìeÖ—áÅ-¦ÿÛ—ã=ŸvË\$¤ÿʧî-üŽúJlZ¼€,û¥ôçŽQ× ¡ù‰¹èšœFÏûßÀȸT'?±«³ŸXcÄÍë»’r”Ó;þýe¥5Ïêï·T\Û«+¢ðá¢q”wÈ1 r'RoŒÚ„_búôéxyÖdª+Àweö¾íÇP‰moŒE¨äWT#g*±Œ‰m‡…ÌzIŒ‘rß”–ºòê¼  Lœ_ÓØå±ö™ô>K±íñ»ä'I´2} ½ƒS„J:îkç?K©€>Æ€¨Þ>q&L˜‹•[sÐyö,.ë.Ž.8;Õ9hv^“PëÍ×q°àb{l…6‹~ʳó:Øs‚¦tpÓ¤Ìô*=º¬GÞŸg)£¡¿w»^ÔÝÓõæ%®GnÊN™8Û”_×U”-B0ÄT¼Ã&¦ ìVíMõôÀ¿ÕFÅ¢m S…ŸÔerÌ}+Ý«b"ÅYP­Vÿ¤vî•3 V¦7ö¡þ )S9´©ÝæYiÓ£/Ź0‹•Ì‚y§®à™4q™{•R§ó@v†Ç–„$÷ ªîq8Ë KÓÇ8SR&:.6'9·*3mê¬l)Éö^-U°K]ZèƒÕŽ=Ïç<¹ºªë8¤Nœè$ìb]‘ïLñðrÕ‹±—Y)ÒÊ­ÆP°PñLræ•Ñ ©c\rå±­>UŸcÒ¼|·ä:gN†êOýhÚeù®%a­ô9éŒÊ›g8Ïä˜ÄʲšÁ&»®bÇ8ŒeItže¸íÒNûã`b€*òy¬¸Ø[)ÛªŸÍyíÓe´IZwÀI1åþ¾¤8sJ¼À¾•e]ÂÄ,^ ×1_š`µQáÓ…oo²ÕFCI¸øˆ@C|Äûmâ#‚ãç4W%‰V›\©³Ñ´ØU”°âLl>dÖ;to†(£B*§5<k,×lª?ø»ÎÅÖŠ\ô÷šÞ§û]³:¶h¢ÏÈ®˜@t<Á[œƒÆ&ÆëpTÓ{´ê«Í½{R®‰Æ`ylôÕ‹Ù0úÛßxãO1Z/¨Gyy=âã£h(•¨£ä8×,íÔUø¹ïÏq°Ògul•j«~tÐMÏklQ²OM8B¿ßÞ”¥°%,Êpž*„K˜0!p†W=kµÈ‹Ç*û'ésZ«RÏfœwggk‚•:éJ&‡ÕÄ…ÎÔŸP¹!Fp‰ 7â‡F'È)vQ’‘‡DÕЮN4öa‹hr&·ØxõÇ[j”ûâE«±|™o¢1X}ad?Ånat>¸Ž¸è¯¿B,íôW€ÖΟã`¥ÏêØ*ñVý(’4³?¶(Ù§¦QhßÞú@[xcLàœ0úv3ƒô6fõæþÒÐÒ*hÂ}*0Èúagé9ü«û 1“ÞÌŒëØ]ÔŸTˆQÛÕý°©ðè˜`L yp?š”Fê~ÝÊÿ›ŽÆôÜÐR®ªR¢:ýðÓ0´ïÑKþÙè©cµ«;µ5—0&À˜8K¬&Ìü¿¥IÁü•‡fT†%b®`L€ 0&pÞÚŸPèÊô}A˘?o²¡L€ 0&À~Ä”ÿ6NèHT½Ì³L@¡+SûÆÔ£€w˜`L€ 0fO@ùqe¨Yð`l£ÚÊÔ߀ÂL°dW§Úpʘ`L€ 4/Fÿ­çUð —ÙZïo@¡+aºcjÃ)`L€ 0&Ð| (ÿ­|ºÈ«}eµj£ò–©¿…Q€®À¨ÜØ–óL€ 0&À˜@ó# ü·îÓõ}_«þ²]0…—’"”Ë|ÁõL€ 0&À˜À¹%`<øëÓ½úP˜J¨¿Fœ[„¬ 0&À˜Ð èþ[ùt½Þç~ …™2U¦Ò Œði%7`L€ 0&Àš’€î¿•OWúŒyUî•PèÊ”U¦RUÎ)`L€ 0&p~PƒÑ§ó¦£ $ P”B•ç” 0&À˜8 (¿®ªÌïQPœ–B¿-ã†L€ 0&À˜ÀÙ  üºD¨2¿õPèÊ„’€úm7dL€ 0&ÀÎåÛí|ºjciO …®L÷©ÀR3W0&À˜`̀ѷ›Ù¤·1«‡?…UÐ „ûT`ª• ™`L€ 0æB@Ÿ Ðýº•ÿ7µÛŸ€B®„¤Duâ” 0&À˜hv¬&Ìü¿¥ñþfJ8À0£ÄeL€ 0&ÀÎ/Aûó` ]™¾/óçF¶– 0&À˜À“€ò߯ †j£—yöƒ (tejߘzð`L€ 0&Ðì (?® 5 ŒmT[™úP˜ V‚ìêTN™`L€ 0æEÀè¿õ¼ ô2[ëý (”`%LW`¬Sm8eL€ 0&Àš/å¿•Oyµ¯¬VmTÞ2õ7 0 ЕÛrž 0&À˜h~”ÿÖ}º¾ïËbÕ_¶ & ð@R„rc™/#¸ž 0&À˜8·¬‚}ºWÿ` ³B õ׈s‹µ3&À˜`:Ý+Ÿ®×ûÜ$ 0S¦ÊT”>­äL€ 0&À˜@SÐý·òéJŸ1¯Ê½Ò@ ]™¢ÊTªÊ9eL€ 0&ÀÎ/*p0útcÞtTJ€R¨òœ2&À˜`ç/å×õÀA•ù=ª`ŠÓRè·eÜ 0&À˜8”_׃Uæ·þ@ ]™P°B¿-ã†L€ 0&À˜ÀÙ  |»OWm,í 4 Ð• á>Xjæ &À˜`L 90úv3›ô6fõð' ° „pŸ Lµr!`L€ 0&Ð\èº_·òÿ¦vûPè•€”¨Nœ2&À˜`ÍŽ€Õ™ÿ·4ÞŸ€Â¬³Q f”¸Œ 0&À˜ÀùE hL@¡+Ó÷2cþüÂÈÖ2&À˜øqPþÛ8a ÓPmô2Ï~0…®LíSÞaL€ 0&Àš=åÇ•¡fÁƒ±j+S 3ÁJ]jÃ)`L€ 0&мý·žWÁƒ^fk½¿…¬„é Œuª §L€ 0&À˜@ó% ü·òé"¯ö•ÕªÊ[¦þFº£rc[Î3&À˜`Í€òߺO×÷}Y¬úËvÁ^HŠPn,óe×3&À˜`ç–€Uðà¯O÷êL@a@(¡þqn²v&À˜`L@' ûoåÓõzŸûfÊT™Jƒ2§•Ü€ 0&À˜hJºÿV>]é3æU¹WH@¡+SBT™JU9§L€ 0&À˜ÀùE@FŸnÌ›Ž*€B P UžS&À˜`Làü% üº8¨2¿GL@qZ ý¶Œ2&À˜`gƒ€òëz¡ÊüÖh@¡+JVè·eÜ 0&À˜8”o·ó骥=º2!ܧKÍ\Á˜`L€ 4Fßnf“ÞÆ¬þVAƒîS©V.dL€ 0&Àš }‚@÷ëVþßÔn ]¸Õ‰S&À˜`L Ù°š 0óÿ–ÆûP˜u6*áÃŒ—1&À˜8¿íσ (teú¾@fÌŸ_ÙZ&À˜`?NÊ' tª^æÙ& Ð•©}cêQÀ;L€ 0&À˜@³' ü¸2Ô,x0¶Qmeêo@a&X ²«Sm8eL€ 0&Àš£ÿÖó*xÐËl­÷7 P‚•0]±Nµá” 0&À˜h¾”ÿV>]äÕ¾²ZµQyËÔ߀Â(@W`TnlËy&À˜`L ùPþ[÷éú¾/‹UÙ.˜€ÂKIÊe¾Œàz&À˜`Làܰ üõé^ýƒ (Ì%Ô_#Î-BÖΘ`L€ ètÿ­|º^ïs?€ÂL™*SiPFø´’0&À˜`MI@÷ßʧ+}Ƽ*÷J (teJˆ*S©*ç” 0&À˜8¿¨ÀÁèÓyÓQP(J¡Êsʘ`L€ œ¿”_×Uæ÷¨‚ (NK¡ß–qC&À˜`LàlP~]"T™ßú (teBIÀ ý¶Œ2&À˜`gƒ€òív>]µ±´'ЀBW&„ûT`©™+˜`L€ 0æ@ÀèÛÍlÒÛ˜Õ߀Â*hÂ}*0ÕÊ…L€ 0&À˜@s! Oè~ÝÊÿ›ÚíO@¡ WBR¢:qʘ`L€ 4;VfþßÒx ³ÎF%`˜Qâ2&À˜`ç ýy0…®LßÈŒùó #[˘`LàÇI@ùoã„NCµÑË<ûÁº2µoL= x‡ 0&À˜hö”W†šÆ6ª­Lý (Ì+Avuª §L€ 0&À˜@ó"`ôßz^z™­õþJ°¦+0Ö©6œ2&À˜`Í—€òßʧ‹¼ÚWV«6*o™úPè ŒÊm9Ϙ`L€ 4?Êë>]ß÷e±ê/ÛPx )B¹±Ì—\Ϙ`L€ œ[VÁƒ¿>Ý«0…Y¡„úkĹEÈÚ™`L€ 0€î¿•O×ë}îP˜)Se* ÊŸVr&À˜`L ) èþ[ùt¥Ï˜Wå^i …®L Qe*Uåœ2&À˜`ç8}º1o:ª@ %@)TyN™`L€ 0ó—€òëzà ÊüU0Åi)ôÛ2nȘ`L€ œ ʯëA„*ó[ šz IDAT…®L( X¡ß–qC&À˜`LàlP¾ÝΧ«6–öPèÊ„pŸ ,5s`L€ 0&Ð}»™Mz³zøPX B¸O¦Z¹ 0&À˜h.ô ݯ[ùS»ý (táJH@JT'N™`L€ 0fGÀj‚ÀÌÿ[ïO@aÖÙ¨„ 3J\Ƙ`Làü"´?& Ð•éû™1~adk™`L€ ü8 (ÿmœ0Ði¨6z™g?˜€BW¦ö©Gï0&À˜`Íž€òãÊP³àÁØFµ•©¿…™`%È®Nµá” 0&À˜h^Œþ[Ï«àA/³µÞ߀B VÂtÆ:Õ†S&À˜`L ùPþ[ùt‘WûÊjÕFå-S £]Q¹±-ç™`L€ 0æG@ùoݧëû¾,Výe»` /$E(7–ù2‚ë™`L€ 0sKÀ*xð×§{õ& 0 ”P8·Y;`L€ 0& Ðý·òéz½Ïý@ 3eªL¥AáÓJnÀ˜`L€ 4%Ý+Ÿ®ôóªÜ+ $ Ð•)!ªL¥ªœS&À˜`Làü" £O7æMGH@¡(…*Ï)`L€ 0&pþP~]T™ß£ & 8-…~[Æ ™`L€ 0³A@ùu=ˆPe~ë4 Ð• %+ôÛ2nȘ`L€ œ Ê·ÛùtÕÆÒž@ ]™îS¥f®`L€ 0&Àš£o7³IocV « A÷©ÀT+2&À˜`Í…€>A ûu+ÿoj·?….\ H‰êÄ)`L€ 0&ÐìXM˜ùKãý (Ì:•p€aF‰Ë˜`L€ œ_‚öçÁº2}_ 3æÏ/Œl-`L€ 0'å¿: ÕF/óìPèÊÔ¾1õ(à&À˜`L ÙP~\j<Û¨¶2õ7 0¬ÙÕ©6œ2&À˜`Í‹€Ñëy<èe¶ÖûP(ÁJ˜®ÀX§Úpʘ`L€ 4_Ê+Ÿ.òj_Y­Ú¨¼eêo@a +0*7¶å<`L€ 0&Ðü(ÿ­ût}ߗŪ¿lL@á%€¤åÆ2_Fp=`L€ 0&pn Xþút¯þÁf„ê¯ç!kgL€ 0&ÀtºÿV>]¯÷¹H@a¦L•©4(#|ZÉ ˜`L€ 0¦$ ûoåÓ•>c^•{¥º2%D•©T•sʘ`L€ œ_Tà`ô鯼é¨ (”¥På9eL€ 0&ÀÎ_ʯëƒ*ó{TÁ§¥Ðo˸!`L€ 0&p6(¿®ªÌoýº2¡$`…~[Æ ™`L€ 0³A@ùv;Ÿ®ÚXÚh@¡+Â}*°ÔÌL€ 0&À˜@s `ôíf6émÌêáO@a4á>˜jåB&À˜`L ¹Ð't¿nåÿMíö' Ð…+!)Q8eL€ 0&Àš« 3ÿoi¼?…Yg£0Ì(q`L€ 0ó‹@Ðþ<˜€BW¦ï dÆüù…‘­eL€ 0&ðã$ ü·qÂ@§¡Úèežý` ]™Ú7¦¼Ã˜`L€ 4{Ê+CÍ‚cÕV¦þf‚• »:Õ†S&À˜`L y0úo=¯‚½ÌÖz %X ÓëTN™`L€ 0æK@ùoåÓE^í+«U•·Lý (ŒtF寶œgL€ 0&Àšå¿uŸ®ïû²Xõ—í‚ (¼¡ÜXæË®gL€ 0&ÀÎ-«àÁ_ŸîÕ?˜€Â,€PBý5âÜ"díL€ 0&À˜€N@÷ßʧëõ>÷ (Ì”©2•e„O+¹`L€ 0&Дtÿ­|ºÒgÌ«r¯4€BW¦„¨2•ªrN™`L€ 0ó‹€ Œ>ݘ7U˜i©}¡RhÙjÆ –u\Á˜`L€ 4+ʯëƒ*óÛÐ` […­Zµò[97dL€ 0&ÀÎ9å×õ B•ùm\ <„P]™È¬Ptâ 0&À˜h6”o·ó骥Ѻ2!ܧKÍ\Á˜`L€ 4Fßnf“ÞÆ¬þVAƒîS©V.dL€ 0&Àš }‚@÷ëVþßÔn ]¸Õ‰S&À˜`L Ù°š 0óÿ–ÆûP˜u6*i£E¹ë°ãÛ3;Îû²Ê¯wà­?ÎÆì?þ ß6xçëÝ;PNE_ïØ#†:½eyQrv|ë.j öëðÇÙ³ñÇ¿}гN­áòÖä )WCå>¬Y³ _»ëþ–Û$:@öoZ ì`úèðlì{úNåüp¿Sg'ë87 ‘™™‰W^ysæÌ‘©È‹r«­¦²å啨ª±¹ˆZunÒò`|[0}DÐþ<˜€BW¦ï «'Ož„駺3~ö3üLûüÏŒ×𯯎›·÷ȩƿžžŽO8|´³Ðë‘ã_ýñÂ7ÉÆ7q4À~¦cö)£6ÙÎËñ“‹cPU«Ùx|æþ¡-Dº¨!ZAî·ÛžÄÔOK]|J·aؘép^õ\su†¶ÁÙi­ûyÕßàÉô©(­£>ÕøïíÇèocoõ·Ÿ"=}9¾új'¦Ïy G„›öAÕU‹'ÒŸLv0}δݾäéÇåd5¶M¥ïTiõ™ççË®gæAž›6mºuë°wï^TVVJŽ"yQ.꽿óÕøçŸŸÄ·Ü;î¸7ßxVúò7MpM±o0¾-˜>Öc2„ÊŸ' ôfª^æÙ?Ý?UŠ©G¾SE™1s31"¡5Ê˾ÂGóÁøûr±`Í›øé¡zS¯ýˆž” ‹ð*kªLÌ%ƒ±lY=bšJ.·á8¾DOL}ø^\©WU‡>C^þ~|¾§ŽÒOq¸ê¸Âʨˆ¾$%\ ¨9ö¥¿ÅÃw߃Ho¹†kpýyX¶ñôF@h8úÒ?¹EvǬ7W mЇ®k&ß„ìë–á÷ö@LAŠˆ¿ò:<ˆ,FpšÅ‘QH¤mÁô HÁh¬'¿S®Sæ gL i !??UU‹;wÆe—]†ÚÚZ|ýõ×t“ñ•¬o×®zõêå2¦üߘ¸ Ïgæ"ùâHüçÀ8ÚsQs‰;óÿ‡¢ ]jŽä…ƒéã·åÊ«fÁƒ±j+Sg(Ì+A^uN§VŸÔ£e›xDD·Â…¯ÄˆŒ•xû°4ç ÙçÈŽUH0è3gÍnœðÖ@eÉfÌMuÕMþS.Êê…žX÷ÌcXµï„«­cæ¤ÎAÑ — ß|¢ä¥bòäÇðØœu8!ís`Ǫ9RÏ€ÔÇ0ù±TÒ·OÊp|Ÿ…+w¢F´sÀÜÇæ"ï“u˜ì¶ë­¼Cn»¬eÇd÷<æî?€äí ÙaûšôGãä¦xf•K¿êÑ>Ó¦ $N”Nºq'v“ Ï`G…â[AÎ6«Š*äŸÚP)Ù»/x‰(¿„›Pä¢ÙIekv—Iûë¿Ù‚gÜ< †;ŽÀY¿`õÏòI1Q6Óú#»±„lÇK|Ôq'†lëøŸ· ¥òX9á8²ƒŽ«mêœ5(sŸ+ÖÍÅœwò»d²KÖä·p€Žá¡Ü—1+ÈÏAås°¯"w¿ñ,.ÅoLÕъEcj®ƒÎ“9“ñΖ-d¯ûZ²Å}.xÛõØÔg–uÛfuNêzŒ}tNŽtî<³ Ÿä.qsšŒ¼CîóµþÖýÉ=fâ7wÍ8¤ÞÈ%{ßÊÍÅ*O}«JΖurÉI‹Ý‡Š°ä±ÆñȾõßà­gÉœU;Pï‹ç¸PÞuÒ8Q¶û xl ¾q#qÍIŒ-GêÝçy#[}\¼Ï\Îæ9°{÷nœ8áúÞ :©©©ˆ‰‰ÁúN&û|¿m!Æe‚չØü§§@NýPUƒ¬;Yu›V•û!'kp8&ÿf ~‘™eÏÅ&oÄq’o'£q|ÂŽm2z®[‰Í[s±ð¦Ã7d!¾ i‰äÿ™K3 =1—d?yÇ%.n~am{áî{á’N”ÞŸŒNí»àºžë°<ï ËÎ’­äl/BB·8ù§6¤ !Q=ñÐÜ1Dy Vdÿ w\ÒÒmgkdnÞŠÜe`Öèù8x2 ápïsk°uëV,ù-ñâǨ늇ˆþ=ñûÙxü¶n^6y+ä;¼:d4^mûVçnDnöÜ|Q”lï:ÎdOH-voÿÒB퇨±™¤s=(›…9ëÊö U‡±úer´±¿@vö2<÷ä8ŽKnzchvªçƒs‘û8ºÅµÇÕ½Ú#$L¤d_£MV:ªÊòðò¤IˆýE&Ö,KGÞ«Àja×÷XJvºg!6nÞˆ§†$“ù'<çù9iÓÇpþŸl¨BÞº üfm,2‰ÑóCó0yýÒ{Û Á3»™»¹«àð¬q˜ûñwr\ÇÈÞ?¤½Ž¾ofâO?ï%çÿî5ëW`Lë=ü!ÄŽ¢ñ¼9MާXŽ'×Üûr鸮§»:c9ŠkÅ8]_SÅËuÒ„ m÷k‘˜ÿ*r>?.Û|÷ÏL¬Þ÷S\Ý>LæU{N] ™Ã¹áðí·ßÊóñ /”3â8äRÀ-‚ý˜¨v¢,ì ÒÇ$"côŒ¤›×½G]þDÔÙù!£ŸAÛiK°~ãFd¯ù .r]ïG?ó*¦-Ys±æ·×#Êòš&¾Û÷"#j,]ó·bÙ‡1zN.jIoþ«T~è¬Þ¸¯<5DÎ…ºì¦OpÇ¢¤¤yyy’]ì”ÿV>]äÕ¾¸”‹Mµqålþh²E“£+ðR.°éæ.WÑ£j#‹/ŠÁ·ªÑ¶yÕëØcXKû—­³s(êÿýÚ3Hº\Ìù_ˆ‡æ•¥“)Þ}£åº[ !Bžd‡ 6ÓÞc¸'ñBù·±×Þp+° –ê(È^ž½†Ä £©MÜpk"Öwßq¸Ÿ¼H;[8ɵ/¼ÿ /jÝ(´ð!C6rÿ÷ížО°£3õúÜó0_z;ÃííÛ 5ýkuA´¢™8KvRV+Üð؃Ș”²»Æá«÷g”…èáÄçTOÖËþm. è‹¶ömZ!|ú”KÄû‹ÿLöá¸ãD´ëŽîÕŸaݪ|M|É y'Û†fD¦}Ç6ˆŽ‡ò0÷• ­`E[uÚßô(¼l?Þ¤ìóÞ‰ £ Zt;ÒGvÔ45‘Ö³Ò’Íä wGâKšyȻ⸴ÙYK”xÏ jÐ…‚ˆã¡4ž±è@vµnÛm¢I:ɱ8»¨Ðð­•Žöñ—ßÇpy ‘ÖRwý‘=4Žžxí®>ˆ ðºËuƒ¨._Ö²8'ë#­û¸OAiøÏ鬥ÿÄûÃA§Ýѳ6”fƒCšÇ^»£Iqt"ž”ˆ‡Þ߉‰7Ü í}ð•ù¸írq<蘔óߘ?å6ˆ’z"wÀ4OgqbzÆãlÑWw§gÇkVá›rq`:1û@<Å&Ïka¤È žÑ—ã¡ß¼ù Íþ¤­–œZù`-…ñLà,³âý»¤¤$¼ûî»8|ø0&L˜€>úŸ~ú©Ç 5‹á*ˆFÿQ ðþÀ XðP\ý¦½ñ!¾Ô ñ» r®¼Ëo ň»®„üÍgz„BßZ×utèó¸óÊ !\D;ò ßl0¿¦Ñw{«ëb‡ÅÚy±»†f½¿ÁÇtÑ|ì5ºfÊ‹M?Ü*®uâ»Lñ=p3â]“Q£F¡¦F¾²¯„è>]ß÷¥Aõ—í‚ (¼¡ÜS&¢-ÓÍ]âºóqµù6¼œÄ)¿%g´›ŠîÄͷߎøúz$'G;ºÃ ©AÕÄF7ö“ïê’<ÙQ]¤’Ò@¡DuÑ1Qba¢ØkRDŸpĈ+2¥ÊÖ†:ê¥ä¹Í—²©L8ã [Š~ÀI™MíeP'ÏÖàpÐ~¤Ç)ˆJê\ö‹†!ò^ìÙoíûÞŽA¶]Oß~¿úçŸ[ˆf£(A½9èV$¦)ššdÜ><(âÞÿÁ³1« é Ç↠Êðê§uÒÆ“!‚S£MQí®ÄðGÈiyΔz„¶î€Ç~Ù.<¼q®Ž.€ü/šq¿`}Ó­ƒ‘KÁKr2mçš•!èyA[ÙŽ(Ëã­úKkÄÝ쥋ÿ¬uoêsA[q>‘2·,i9c@…‡ ´«Õ…Ð…Äìœl(³éã>õsmR_ÏvhIrE•«ÐBçª<3ÂÏkBI[<†ÂÞØ8ïôŒ¥»"—œðHŠ´ÔÌÉ›ÐU½’Gd`Ìó ‘|Ykôüò\Úán#÷=v„ ït྿b5Íœ¼Jo©¬øÍI[¤Xþ œs-[¶Ä¿þõ/iÇþý®k˜¡¸í¶Û.gZE¥h§Îuetû^Éxnk6®<³ÖîÁݽäwÑÌo¸Nû(„»¿g.îë(½§&ü‰Ú¬¯7¥ò»=覛1815õÉò(]Nw}ç=¾Ì%KØ«®õi´EÙd—êÁ„x÷ÄÍÉJˆÇ§Ûɤ:ÑßÓ–nÞ¼¸{+£<‚ͤŠ{çã•ä\jPY^ŒUÏÞMw‡ƒðø=pqÂõT»_U¶ÆW\+zvBŒ{¶@¼C±qã¿P)„VË;»Ÿö¼Pääöéß ¡æ[¼;ýºÿn)}_üÅWRÝ,þðSïø¿ï$Š·ÐBqñ•wbß‚™X³ãsìÈ}#^Ú‡Ö®{òt.™úÿ§ù¡uî”0ˆr/áãbi=l^E÷¿wâêK‚x9(²~ESx/M| yw¦ãgÝ€4}Þ»‘H¸ùš Ø‚êVK®];µ#U(X±–nÙ‡áök»¢þ?_ÊnÂ-EF¶¡ÿ¡Rý‰UÌèqEôè¡>W ë1ˆ$¾RËE+7¢œ:6TÑŸfÑc#«Mµÿt5ºŠã{EO´SتYÚš&òW[¶Ð+|ë8Õ¾Èö=è ÌǪÅt^VâÓ¿.¢œë²:'íúèöÈ}qòì;¥”NÃKpËtfüåcÏyýþKtfÜz­öB°f¯AΩç¤KÇ7…[hçAÜ“|-Z×3Um´&ôâë0%13#ñ·÷¢«<­ðyî*¬ÊýšÆ®œgg…@ÇŽ¥TˆÌ'Ÿ|"{Ü|óÍröB”©vb¿¡ü>;ðïó—‚tµ™ù ×w~÷t= †UåÿAUƒû:ºzr‹Ë…d”ÿ§aîkà)×4únËËî§ß UWq­»ÚÑìzh\M“°/­ü˜®™ôçýŸf!ƒ® 4,¯÷ýüÜÄK«â1‡˜™P/²štÕý·òé&ͬ‹ (Ì”©2•Ú!X,?×_n<[ÚLÁŠõ/¸þzႱzÁoñÒ¸»]/]ŸŒ5EáXÑû¸M¼ü—<‡ü=Æ È1øðƒÈ›5×ß4‡:ž&¯]1AèÅ·#sÁþóxŒxuRÒ$?Y'O’‹oŸŒS~ŠãÄ«ñ˜ö õÏ6Ä&îÄ…÷¦â •Wu¶2<é<阌ÏÁŒ·Éq=vÏ/{Â}ÑÖú¹{Íí?—-Çïçù+ŽSþF³ÿ‚ÿƒ…¿m‹qwß$õ_Ÿ<jbpÝø1ÀЉTv=V¼=÷½„™«Šzq_üvÐ>Œ|=&SÞz눇WÓ; ô>ËàëàúäÁXÈu¼tfû¢ý´}i®Ç‘ô>½æ€&⪯J ç“Ⱥ6z±tò2Œ92Ãs^ñàóxâö‹eõ)öšÈi-¯DJž+íúÓa4§ö&î&Æ¿YywöÌÇ#O­¡’îÞ´¦qZ±¸ytrLV'O öü5Ýóÿí?ˆgWÇŒ°0°E i·Ð”)„m aQd! EÁ"°Š Ie£¤Ð.˜”A;QRÁ&iY¬ÄNhvA + 2âý¾ß|~s~ß9çÍûývv“˜sáíù÷=÷Þùνïžy¿7³Oþo™Ä©µÞ ž{î¹ù%L'C†žTüg< ÖKšÂÑNþù§éÛß|þì~s{zíßß~õÏp}nLg{þÍWÆý`ì¡[·_ŸîÛšî£?}ùÙé•oÝžï]·üû±/ªûÍÑô…ï½3ýàøµéùqoÔ ë·~ø›?ž¾ôýW§›ïühÜ3¿8½ðË?½J;$‡Üeyÿþý ÅÄ»ãý¤Åó›3˜Ûøwdì@º.\úY…K·4Ý둺ùõÙñ’ßχÿð6ž^è]?ó¸ž- ãäáôàôhº~¼ûÓýéðŸŒãõx›°þáÃñ-<þÿ뗦߽=ýîgÏo«Æ^¸ÓÛ/}eúí—7¿š¸~â{öqöu]‹ž/kýXŽœ94Æñ7¼Ï<œŽ_Çú0p~2¸ûÌ èò¹žŽ_å:Ùý~-Nwƒ ¾_eÚø¬oÌf<=¹|6›>#_[sÙšT X›9¬ÿ÷dpªõ{雕}Îó·M-ðñRèÃ/çúý·ÇþøÃצw_?ì×WάaÍÀÁ ܽ{wçWGcG*&nÞ¼9~(ГîÐÆ^x {ÛØ_O]?, HunÌÙÅýzs=Úž+›‘êûÍfo~žÓét<æ“ÝÑÉ _ñŽªbâ½÷Þ›îܹ3?™Ð“ ޡГŠQì|g$è3$½ì¥K?êWé’©‡6\ÿ:—йàPq°o[U©ìÛ鯃f÷û¾)&ÞøøýBSñá)Óéß§7n½0½³Eßœ^}ëÖŒ;ýÇÝéÖ×_?=;Gÿeȧ·¾ú¹-r²wÙ×µf +ÂdEß‘:×Î ±Ë‡×f¹ÀþBÚ¾øÑÕµkÛ§1 ‡Ð!cäkkî´úÞë1Ld•ª"ïJ[œïÑØÙ]+xò×é×þ8½üæOöä9vÒz3ðxP± ¿3¡_ ÕosèL½3¡9ôdbû÷'â4Æ^¸~}÷PÂñþ‡o+ãÚ:ÇQ”5£,¨îéÞžç:5õëb6³bB{P\Xçz|ȀϠµ“yB¡'únñ¤âÑŸPÔsÝ;¢jò_ÆO£Æ:~æéëÉãr=å×ÑôÌÓO¥•âe^E—Ññfàñ3 Ÿ°Æs[]D>þõÍ@3p8÷îÝ.áî¶xà Š Ù7nÜøÈŸPxÅBA‚y8W˜©jò©qeíÚñõñÀ#{Þ‘¡sßUô‘÷ÜÞfàI2 Ÿ°.{Œñ$çÓc5ÍÀ¡ ¨X¸¬˜Ð“ ýq°Ñ8³õñ…gúÆÚýì®7Xk_ÊTGºâ`š~uyé`ukšf hš«g {?æˆñ0:g;g8ÅÎùxþÛ‘ ]/dJêÇùô®…®¥—2ÓG¿²[3Ð 4Í@3Ð |Œ/eÞÓû`\¼”É ™¼”É‹™z9S/dªØ@J×EÁ±óÄ!+((*TXÄ‚B:ïM ç‚âÌ/âCØØt.Æ®nÍ@3Ð 4Í@3ð p¸sØS¨ PL’"âáƒ3E…à³ßðØ)(tØgM{c¢1†Oªým\*0¼øPA¢‹BIA¡~¤ÓÜÆ_IÇ»]åáw¼Ûà*éx·«<üŽw\%ïv•‡ßñnƒ«¤ãÝ®òð;Þmp•t¼ÛU~Ç» ®’Žw»ÊÃïx·ÁUÒñnWyøï6¸J:Þí*¿ãÝWIÇ»]åáw¼Ûà*éx·«<üŽw\%ïv•‡ßñnƒ«¤ãÝ®òð;Þmp•t¼ÛU~Ç» ®’Žw»ÊÃïx·ÁU2â¥sÈKrQ ¨ à¢ P¿Ê[º„‰MØ ­*(L†ŸÉ*ŽÎ¤£]1/†kÛT\¨ ¯ ¬tšû#&êŽëü ÎKä,êŽkþš?1àë"®™¨;®×O¯Ÿ^?OvÿÀ7g²düˆBºö)ñ¨Ë'[M}vœýSùçðRAA'±麸OXŸ &®Æ ]_})–5ÆËbk|¿ËÿÎ"¦ùkþâþ@©±& =IDATkcÞë§×O¯Ÿ5;%Dz”£+;9w%)"N³ ?Êè_ü~Æ‚BHRôEœ|šœ>ήÉÉVÑ ]ý0ñ¡ÎM8ù‘r2žô¬E¬Ç—b`—0K±Îß0°ÄÑR¬ùkþÄÀÒYŠõúéõÓëg¿ý£ý¤‹sWRqHꢘˆ:x0²c“ŸcÒ¹æx,(HX’$kRÊe ù5iLTE‚. I5ÅåVbB}dú ²"–PôEx”Y<ú¢óгxôEœ(³xôE=æ¡gñè‹:9Qfñè‹zÌCÏâÑur¢ÌâÑõ˜‡žÅ£/êäD™Å£/ê1=‹G_Ôɉ2‹G_Ôcz¾¨“e¾¨Ç<ô,}Q''Ê,}QyèY<ú¢NN”Y<ú¢óгxôEœ(³xôE=æ¡gñè‹:9Qfñè‹zÌCÏâÑur¢ÌâÑõ˜‡žÅ£/êäD™Å£/ê1=‹G_Ôɉ2‹G_ÔczÇ'É¥³V:g²$zUX€'W¶ÎeÉK[UP(™¢Œ~¤`࣠IM€K“ OR~aèw¨³OòFŸ‡ä*§ó›­ÉC[¯Ÿ^?½~Ý=}ÿ½êû‡úS£xíŃl®øô‚3]9~ ×öÌ&}Òç§ ³Rü£D5:dPŸ°ž8P\x1¡‚E†:ëò©U›Qce±Ê?wþ©p•?¤Îj…«ü¿Ë@ÅSåßÍ®o4Ÿï‹æo—jTþÝì^O•¿ùÛe â©òïf¾þÔ¿šÎbéºtVËFRLDçy”ä#GÛ¢BºšÎhÅçV=¡ .IgHù4¨lWq É©séäÈ'˜taÀ µ[3Ð 4Í@3Ð <"œ»ñœŽÅƒœã`ÈÏäâÔ– u¦†Œ“Sa [®F@ñ^ùò «§Âɦ˜ ¸›ú!`æ#æ2Ãf>ÏÃΰ™¼Ë ›ù<;Ãf>ð.3læó<ì ›ùÀ»Ì°™Ïó°3læï2Ãf>ÏÃΰ™¼Ë ›ù<;Ãf>ð.3læó<ì ›ùÀ»Ì°™Ïó°3læï2Ãf>ÏÃΰ™¼Ë ›ù<;Ãf>ð.3læó<ì ›ùÀ»Ì°™Ïó°3læï2Ãf>ÏÃΰ™¼Ë ›ù<;ÃV>ùuqsVË‹ þ…$Å„°1¾#¼­ ¤ï´¬ P"7:R)Æ *ðiBäÅ~.b¥ƒE×Ü {_ÙùçÜîËðÍ_óç{rŸuÔë§×O¯Ÿ}vÌ.öQ÷ç±ú‘ŽD§ àÝ —à‘ÌRýÑ¢>ûâÁH ¤_@ F2ÃÜiÄõT‚‚‚BBù\;Im4Í@3Ð 4ÍÀÁ dg¶ÎcÎä¨ót‚BƒXï+Ú&X;@gPá²jTq MÔ?ê ˜P*2b“/öéöV1Ç»Ýùç dܸÏíóì‹\+æx·;ÿœŒ÷¹}ž}‘kÅïvçŸ3qã>·Ï³/r­˜ãÝîüs2nÜçöyöE®s¼Ûÿïù:{u~êëÖ%;êœÝ.‰Kª‘‹Üx‹/+(Ô‰ipº$q¤ Mˆ'`yR¡>(*(”‹®¸7ÅÕ*Lç×܈·æO,Ôõú©¹o½~ÄBÍQ¯ŸšñÖëG,Ô]ÕúQ?\Oº Ø:—uÉÖÿë!lô£?ä€åÍ %xÓ.¿:§Pp y ¨Iñ„Bùº(.°éßPȯ~„[jŒ™á:¿ùËÖE\O½~6ld<õþéý“­‹Þ?ç |\ïšsC—Ôù-]g´l Š·cî€oû /Émó‚bŠ¢@—Ô‚“T£sÒ…;Ôm>Ńr}Á*/ú°‘êg©9¹”«˜ã°‘¿Ì€ó„\Înþ'ldó·Ì€ó„\Îîõç'F¿nǾÁTR_ø ³äïüæ¯×ÏÒYŽõþéýÓûgy,E?Êý£±uņ¿d,*bœ˜òñgº|Û¶ö Å6áLÑ$´Ð²Kƒ«c2*,bÛg¡ª}ðqéßüõúñ]±ÞîýÓû§÷ÏúýâÈbÿhLšë²ñ¡WR}C—LÛÒ"‰1tɵzÄ18¾ÊÆß²hšf hög€bÌh£S$¸­b™žõ‰o[l¦ÄÝ¥Räã–TËðѯɃ‘ßÖùÍ_¯Ÿ}wÍ9¾÷OïŸÞ?çûa_íãº4¯Ø°‘ŠIÇ^+É“¼ÐÖ,¤ˆÉôµ> ±&ÓŽf hšf ¸R(Ôi¦¯õyþ…IîsÀGìÁ"r)¦e3Ð 4Í@3Ð ¬c ž‘Å¢oî}ní}ô ï>··ƒ e)q™®/´ó3fÖùš¿^?½Öí• Õû§÷Ï'uÿÄ"Á×¶ÇÜ>óy?³ý(©ƒ¥ü¥X:™v6Í@3Ð 4ÍÀcg`©HXŠ-NLÿ÷F·f hšf øô0ppÑð顨¿Òf hšf hšf hšf ød2ð?ç*bhoÀ‰2IEND®B`‚vlfeat/docsrc/images/using-xcode-new.png0000644000175000017500000022027012236612215017214 0ustar dimadima‰PNG  IHDRqÛ+€[z ÿiCCPICC Profilex­—y4U]Ç÷]ó5d.™2ÏCæ9cÆRdÃu!¤™•™’¡%¢d(Sæ©D„L‘2FfïQÏZÏzÿxÖûÏ»×:wö>¿ýÛëœï>÷»~P’Ùp€'ÞÏÇD[ gqé2Žh`  X oçàKP52Ò‡Bþ¥mØÉ­a¡“\ÿôoÓ>ІÀ¡Z—?¬rÂöØì„¯ùü ×vpµs„8bA3uˆK!¦pùÃu'lÿ‡ßp€ƒËÉÚQÐÔxG7<Dß!Vrtòu€nŸìëèèëà q2Äžž^P~Šfˆù>ÐZŠEˆ¹NÞ ÔCí2”W¢Ê“ôÏ\”«&ï渡:híCîæ6M~¿+]¿¯³„øït025P“ÇÇ›«~Þ¬œrœfœîý>#>37›6§9·=ÿpÁì+òëóEû%ª¥æo„eÜòÀ÷›?ÄÌ­d®ê¯ÁÖj×ñ¼_6s^Ú¢ßÙÎøuy‡ugf·t°/{?è>L?²;9>þ[KÔ(ÑÌÉ9ÒFrIŠ ,U: 5mä©}z<Ós;ëY¶Ç8ŽXÎ=.gî^y¾B~Œ€§`¿°¸HŠèЏ–D¾ä¶´ŽLŽìÒYiù0…v%e•DÕub uÍëZOµçutuôõK † xMM5ÿz‘ÄBèÒùËxËD«'Wº­mQvöòñNÑÎy.5®ÝnSW7=ˆ<ñü^ò]o g__¿þ±©×r‹ƒ*‚Ÿ]¯ ©m {sãmxËÍ–[-o"›n7D½Œ®Ž©¼Sû0./>#!91&éFr@ŠÇ]‡{—R ÓÔÓe3„29³è²‰³sÖrgî¿Ïkϯ+(S_RìùЪDÿ‘|)S9¦|»bîñГ¦¿Wf?zæ[eó\¯Z¦†óù‹ÝÚÙº¾—u¯ ëã_û7X7j7‰4Ó7½YxÛÛò¼5«-¬Ý¡Cû@'Eçz×pwuOZ¯_Ÿi¿øvàû໡¢á0H}ÑÌÈôÇ£qc6Ÿ$ÆÑã£eŸƒ&u¦è§æ§«¾„ÍèÌÒÎNÎ=š',È,}m]ŒYÒÿ†ý6¸|÷»Éª}+±«š«Gk5ëW7Ø66à ÿü´±Í¿ÝÿË{‡z§rWwwn/x»_x yÐrh|8utõhë8ø·þ¸ BiŽrE‡¥cʈHFH—Éá´”¼X*cj{ÚèSYtô¯ºǘ¾2o³ÂÙHØépìÜœ§…¹D¹ÅxÄx…ùøÏðð³ Ðb÷„–…ÇE:D«ÄrÅoKxHšHIKÓKïÈŒÊÖÉ¥õ‘7TàWD)N*Õ)§¨¸©ª©1©m¨wijk™h󟃟û¤óL7VÏA_Þ€Öà‡aûù£ cS!S´é´ÙKóÔ ø‹ç,8-.\~jkåtEÑšÞzݦ˶È.Äþ‚ƒ°#‘ã”S­s¢‹³«¢­ÛòÕ·î™xO <#~Å«•éíé£âKë»èWïŸ`{M<8Tt]7„9ä{èë°„WÂ…ÃnößÊ DªÞ¦¾=Ucq‡ÿÎaì`\q|`‚~"GâvROraJÐ]£{|© u,­*=>Ã9S5‹%k'ûCγܤûžyzùü$ßô>)J*öyx¡äì#öRTérÙpy}EñãÄ'A9Ušé™ Ùròxò- ŠnJ9Ê2,36‰ IBµMíM½BãI³JëC»}*”M—LÏB_Á ÏÐËhÇø‹)‘™¹…ÅŽ°²i²-³ßÅÉã¾r¤qjpnŸ.ç²åfàæIæ=χå>“Åo' (°+øN([/¢!Ê*º+öQ¼V"[ò†”‹´±Œ¢¬ ÛYjyŒPØWÜUÚQÞS9RC©Sh0jòhIkŸ;g¥ãý«=Ôkðå<ò@Ó|³óý‹B¶—Ò/÷Y_Ñ´Ž´i·#¶?ïá8ã,ìêÚw•ÓýšG?ä~Q„y-ßrl@àµÙ £àæ‰ÐÒìáY·è#Òo3FåÇðÝ©ŽSÿ螌LypO5u>=!S.k)'÷¾Y>¶` 0­ØºDàÑaÙûŠÊ'I•¾Ï®<׫Qª•z)^/Ñp¶IëÍÅ|[\GeçXIŸú@äPß®‘ckW'7¿$ÌÉ.l/u}¾ú|£së×®øÁ­ßú#1 8 Ô €8P :ÀŒ& »‹4Ÿ‡¾x=ø-ø+øBშFì •ÑÈaE@µ Ðt7Q Ñ2Æ󒘛8•MBò“”@ºFæK¶KA¥x@)MÙ‡u£ÂPUPSïÑ”Ð^8E|ª‰.^’~ƒ¡š1I™Ãüž¥ˆÕM›•} 7Àñ˜3þ´'—1·,/ï.ß·3üƒ‚-BMÂM‹¶‰õˆHÌH®K#ddEåtϺÈG+”+ö+í¨œV5Q‹P¯ÕXÑ:£í|®D盞¨~°AûùSF.Æ ¦´f^æ½nI—~ZZYµY‹ÙäÛQÚ‡;ütrsžrµpt×÷èÄk{µ{kùtøéú÷]3  ¶½¾ê¶}‹&¢à¶HTcŒáÉ8B<1-™/åõ=ãÔ…ôë™Ø¬’…ÜÁ<—üÃw‹x‹_—=š+ ¨À<ÎúëLeÝ3­ª¡j«š¹Z÷ºÕWÞõë øÆÅf›7Ã-­ÏÚ™;n¾›éRéÎîYíSíOb¶|Ÿù¡ï#|TlìʧˆñGŸg'¦©¾pΈÍ*ÌiÎë-|5\Ô[Òþ¦²,û]èn…z¶º¾öy½sãùæýŸ‘[îÛF¿¤vXw‘»‹{=û•ɇ^G†Ç<'úÿ©—~×$ê^^>8}ußÃÿß§‡?TGýn'%™ÞÜê©¡‹:u^Àº| 3¨ ÍÿÔj'ñhÈÏr­O¨™§à¤û¯æçÕq¨{‚|Ü\\ýpªP¥ê$ˆÓÁ; âÄEEeÁš2 ¡ÕªKt pHYs  šœ IDATxì] €NUû¿ï2ûfÆ6Ö±3ö-û®”¥”%DEIEE •¢ÂG©„/¾’ÊŸ…ˆJe© Y²%»ë˜}y·ÿï9Ͻ÷½óÎ;c3f9Ç8ï¹Ïyžç<çwï=¿{îjr¹\ŠHzK\6æB}Q˜ªú\–¹D@" H &“IX/sÁë¢.„•±le/:¡yÔ£l\„•‡‰‡^”¹D@" H ,F:ÔË,êްl¨+§ÉÒ£ŒE]’¹ÀÞYž¹ìѶ\”H$‰@B@çBD¥—¹€<«‚G T•N'ª3ó%$œP›–––’’’””d³Ù d}½ {g‰¾( ‰€D@" (à0r™IÔ××7 00ÐÏÏ:PГ¾Èuœª³£±€2§ÔÔÔ«W¯BÍßß®­Võt1ìe’H$‰@QEÀn·c> 4›Í%J” ê„ÊtÜXÀ¢ĉ¦O.0˲åääd‡Ãb±XЦªP“I" H$Eð%¦§˜I&$$€ }||@®:­r™9B«×SYêÁ¦B_AAA„Z´á“½“H$‰€Ž“ ˜g€A…˜[¢ ‹`SÀ\fEBš§ò²¡b‘%ééé˜ó¢¬7# ‰€D@" (&€"Á©| e&TÎÈe¦Q,ºŸ¥ˆq©!áÄ/˽‡*( ±={ö\¼x‘粘)—.]ºQ£F cœ1föΙ9X¶Z}®ÏÜá°ãL¶Åj)SºLNZ÷’J$‰€DÀ0’N¥¨ÕËàAæL|+/D QÎQ€%“%Ê'Ož,_¾¼‡w^„Ì<¸{÷nÜŒBœwNLLÄ¥ÝÆGGGã´ÞžÑOFó€ 2ÀÄ:…Ì“à$çæ8;„Öчä¤$˜_³uc$²,H$l8{ölTTx”'ŠÈQF»qŽ’ûz*Î0;¥¢`eÊPåµ%êáÇ÷ïßieÙ²eË•+W²dIh^ºt)&&æüùó¨Bcµk×­föÀæ`óÈr‘¥JFà\õåK—a{TåļL™2ÔzùÈ’ûâ¥ËhúÂù Ù›gŽGJ$¹A íàú•{•º÷vm@·ØSJ;øÃʳ•oïM{Á$ûÕ¿×þðW:ï4¾AÕ¢Õ¯™óîí—.ÿöl—º–ΐ+m%ÅP!NÄ‚JÑW&Qî4ÊL‘ TH2Ü÷k¤UPáD屸¸¸þù³X°æˆhŒ +¼¹pá"###""2{`s011 0ÀÇjuà’¯8÷+ÌAÙ›=zÔݺÙjwØ—Õb-U²TP`Z‡BV­gŽGJ$¹AÀ•t~ïÞý{Â"+t‹.! ]IGö jß9‹ý%çÎíÉñ[÷î,׬C£Ik×ÿºcËÏÇ=woýœRµÝ·÷ðɶØqéFŠ&gÌÁ?cª7®Â}É¡•T“@… 8½·Ì ÈÁ›H\@­zD43ÕNÿꄊ¡Vwd,?~<<<¤Ègw1ïÄ{! äx”U(°šÑË,)’¹‚³Ðö”äTÙ츪j‚9ŸsÎÊüĉh]57™`•œ”‚PN:å FgsVËܺ”Hn —•ŽJM›>[SgÂàJ4Wu™‚” _ÚÇn̳®ÛuîÞ"Ò·[Çs'þïìùXG½ˆR¤od‡3:§%%ÚrˆãÌg_}ϨFQa7¼4—I2s*x¤‰Îꄊ‚›SuZÜJ*±Yf˜pÑw!á†(p@«¬†©*¼#…††òíR^ÍAŠ TV†î1FxŠË=³ ‹õZÇô—[GC°+Ó¸¦¸Ïn#¼+W®x5Ï”Hrƒ€Óå+Ô͇?øiÿ=¢Í ®æ+|pŠóÀGûþ“oÿ€Fô]÷o_K¹¸gÞÌ¿{Œï[=Ȭ¤ývÞ¥ÃÓ=Eâ¶Á£ï ¾½ ”Õ„Ó-(¥&Å%%ú+æÊв!.1Í™räÛÏþ)ݦòÅuËSž˜øt%?û‰]>Zþ‹0k»ök³ÉüÍW³¾>[íþ1=•52“HT@…HXÌFlJ¼£*I#W¯§¢ H(p2NU!÷Š+䘂™A«Ü ì N Rôê a2Š›„‰EÒÍ9,Be¯æ Îus(#Ae$ö–x_ %7€€Ë§Ôï÷Xý?ZòÛâÍÑ/¶¯âOû‰ØüÎnýjÁZ×ð—ߨä8ýÅ»Ÿ|þܽu*Dú¬8p¢Kµºñ'þ~ÙGÙ}²sòö ¿ÿ|$êÉþ°Óƒ5£l±ø@âÀzEiP³’¤I§ÿܾxWë>O©îãú÷·%¯=r÷ããZVòýgóšEs§ÚŸ™Ð¨´ŸC±]ö¹ u¸ÌIïz%În]òáÚ¿[Ü7|xãJé±çíA–a­Û~óç‰N]ú7.k 5£G% âŒs" rP —±³èeà“áùTæ!#›23CîJ&B* œë¬ÆmÀŠu¼z€²nË(ÃDeÈ9úÌ Š7Á9Ô¸‡p‚ް‚×Ö3;”‰@np‚´’m »üã·9ë>^ýF?âB—3ýÜÖµGÌÍ”T’“MAåMæ_öïV·q“&ʽ'ïªSâôá_è|ʱCçSš—=è©iÏH_ãVʇ¸+–|úËÙcÌVëm÷ÝÝ0‘–dOu)­œÚ§’n³¥œA+îÕ©zxªÍUïŽ^­×ýµûè¥%Ë9]º¾éç½DR3BKƒ}ÛÖ²§Ù‚"£Gº])]±ºëBXYÜ0èrØlï»|nð‘º"…³!ó¨GöïpR9{Ÿ&¡_,"éä ‰WlpÚjµÑofR„Ô¼zÀi[4‰¦Ñâ¦9h(@Í«9·ÎóTn¹n'LÆYµîµGR(ÈØ-ì©Éö ÷?ÖuêGë~ØU+‡tàUK Θìüâ­í— ”h)`59]å›t0Í?[jߦ‡^xæÄ»³Ož¿œ~hƒÒax˜Ó‘áÚ§ØáZ·éÔ¨\ÏàðÈrá~I‰Év!¬Q¾dzB1žË‚ ºVgb ®˜(öDŸÊõ•m'/¦Ýi"MüG,Þ"QL0¬_«l*î? K~?Zz"wâ{iÉ$x À„È“7ð XIOL7¼˜áYˆ˜Ïô\/xxçE\+ÅS¤¸¨É¤Èô†*¶‚7° IfxžÕ«9¬` Ÿè æÕ¯‰Â-QzëL«hæœÃ æPójž9)‘ä— 6—ÓžêS¹Óƒ­Ö/\¿ü°ÉÒ 673x©\×'Ÿë^ƒbꚟl*]«ºé£•+w^4õìRRi¥,Xó뢩Ï3eÓ2Î ±#Â02ªz…Rf§Ã—(üÔ•šjwÒ Òpõ­¤¦£9Þ¹âNïSÊõ  oº0wÒÞL:ž‘Äžõ¾N÷Œ¡ý_Kà×$Ùhù+¸ÑÎ&f›`V,2¿2•"gUš§¢ÄR6@™ LËÈum·{QªX±âßÿ·+ð[†=X Vñññ¸k©jÕª^=TªTéÈ‘#0ÇES¶åi.|c&¨Â]K5kÖôjŽÛzñ¤ X7"qßtsŽ“Í«W¯îÕÜ£/rQ"Kèze¶-¼ù$%µV÷ÑM·ÎÜ>‡h)Óþžz³WÎYúX‹%Éñ—â”JQ¥Ì>¥ÖSVüe©Ñ»†)=­ltgÓÖ &¥}õp³ËžÉh²ër¥§Ä§¦ú¢R±·’ÐR¦m·Èy«—í-; º´Ï¿»·mQ\÷F•¯=S÷h—Õ[$Uʵ¾§Þ®U˾‹Ò©^ÛÕ W”R5Êù…ºÎ}ÿçÙ:JøZsx‡±!8Y”m˜™k@‘ØC™(!A}GŽä¾žÊËÈYÏ#÷ ˜–âÆZœžÅdÔC“HܨÁ›G-qV¶T©R^ÍÌQ>Ç›ÙnqíçòåËPàÖaÅj(à®`TA!«Ö3;”‰@nÀõT%ÜO½™>)-ìî§îÙõþ7>“Ó‘Þ¢ÿWÐËæmÀ¯YiÜç¥J>Ns¥ú-•¿¶·ª†›éýJU­ŽözÔ Âs`ê–«µo"N³¸Ìwj‘ï7zi:d[üÙ¼™Ëœ.³ÕçžGƶ(kÆýÁØÝU½,")Ý¢ïP›ï§kî\íÄ-MîY­lpµV}”]ËçMßÔuø¸6èæ>™$NÄ"ˆ†tô‚ ÜÃôË`‘cf‰„ "Ž;Ö°aCݯGŒ…·&a>ŠÉ"NÒ‚Þpê¶p‹Gh@u Eø÷°ÒaŽ73ÀÕÀÜŒ*ݧmñ6‰ìÍAœ0Ç#7­ã…hïŽÈÆ\C$¹GÀT"ÌÇ–t5‰.g"™ý‚Ã}œéx³pH€bK±;ÍV??‹=.Ž.‚ú†û™Ó¯&ƒE-þ%B{ÊÕ„Tö ç&Ÿ Á¾Â“ñ`T´hOºš¨¶Ú 1Ûq6X±ú˜ÒRèa6gìžé~ä…ûËй]¯‘˜BB|¶42Dt³Å/(ÔÇ•b—§&¡B&‰€DÀ€ÀÞ½{«U«ŽCUqW<9Ë8™ðýð­N¨Ì©L¨œƒSñ>zƒgÏ"<‚·ðÎ#Ø¢Œj,¢:Dzd\fs¼Jšˆ•àrqj7‡æˆ­Ã úÜ:ü`~Œ)ù5[Ï‹\’ÜTð¤4.îãÜvå¦zWIß¹ô“JTUþØy¢R¯ç‡5´êÌhPÒcð""œªò˜6ë&² (¶à;1Ì©L¨œƒªôÆbÒÊ9Ï^yJ«ç\ÈG|ñûŒt5Á¬ÈuIV6ǵU&TVË­9¿ËIo"çæº‰,Hn>øhÓÍwêéÑЈ_ãî½-ÿkï3¸³zÖäwë%ÝÞ‹Ì‹HW—‰@±FTÈlhÌõS¾L£H½ïO_fÌyöX‚>‘0¯å{nuoÙ[éµ·Ö\C$…‡O©ªmË×4¹)Iñž×h yßdø[‹@fZÔ™ÎXðr’n)XY½ ›ÃÎè®s¨ï¡vkÍ=‚1.f,³Ä¨/Ë[‚€#)!^¹-“Dà†àÙ‘ÑEf‰±¶8”1æ9‹zB÷¹Œ‚ç<•¡1ªÂË÷ß_ ˪@U¸Š œg¥,剀D h À<Šœ¬(æ´Š{t°Z䨯e#)¨œjTe£dذaºqñ)œ”Æ]N|¯Ö©S§po3®ÔbBj yñDöT" (ð½6Èq÷ nsÁ¸ßo@7æ@ˆªbȯß~ûmfrÔ%ú†áæT]Ĩ¢À¹GUñYd¼ó”—±=P±as|ŠÏ– {*(>`|cZ¥»XÅ ‡¾óXWÌG¼k‚õ=Jsàxçض°ÈSR~Vž§2Ѳ²Ì%‰@Ñ@„Ê „ŠAG?ãxX4ºy#½`Š4æðÆ‹4OE‰²Êo¤íBm @ôs¼àQla Tlm(`;ãÚBÝA¼D@" ð@Ct Txò€áÉC³¸-2^sœ,Ïý,£eqÃŽû 0(®¤âr62lar^-‡þB‚£Š6™{Ç\ÀyæZ]’§êJŹ £ñ<•Ù›”äÔâ¼UȾKŠ6âÐGä|Ne0¯`yÑîþôNrê5ЉbKB‰â”/´QÀV9Ò5ŒeµD@" („èĉÏÂ~Ü‚%§f :S&rlLàTÌSù%>" 5Kàd…D@"P„à„E¨[yÕÉ©Ù!‹Íˆ×cÛ²6%§fœ¬“HŠL¥È‘ô°Hô,¯:!9õÈbK‚Ÿ÷àê5 dµD@" (ü`è““‡ëX’Ss¤‰¤O[sd&•$‰@!G€‡¾BÞ‰ü _=™™ Ê–$‰€D@"PDœZDW¬ì–D@" ä;’SórÙ D@" Q$§Ñ+»%H$ùŽ€äÔ|‡\6(H$EÉ©EtÅÊnI$‰@¾# 95ß!— J$‰@E@rj]±²[‰€D@"ïHNÍwÈeƒ‰€D@"PDœZDW¬ì–D@" ä;òÝ„ùy â`\ï?ÌBë:ĺcÕöfû¿Ž ½‰ÀTYè×£ì€Dà¦# 9õ¦Cz™öÔZäz“lò©ý§Ï ãÊââÒu*MxU ÔõEn–I" $§ænCÀ8ª³±œ;/º6¦¦&Á¡øJ+Ñà@0þ2O[…‚nª‡I‘9&×ä&Ѝ•'ÅbQw™£Âĉƒ‚‚²ÿêÓu¸ÍQÛRI"póûD–îð)ª„„„I“&e¿©ë_êÎÞšÑwŠìf¬($䧦^:“hW¬Vÿ%‚ý%uãüß*3büðšX* » ïúþ£®?|"7¸¡î#:” ®õhK¨iíH—E0§‚¾ã’6ªÓá$Z¥*JÚbšg÷¯Ð EÕ7M¦†"ùùùÑ¢·¤›y«”2‰@BÀ°e{F•žž¾{÷nO©aT^¶lÅÖm[c¯\1›éûÊþþYd©©©‹Åáp†GD´jÙª_¿>>>>g²XtÈN=²qþKƒ^Ýbí®™ÿ,èuúûÙ‹¶Ü5hÜpcMA.ç1uh†(„þóî™ÕNÊD£Í3iOñ N5“G³âþì9È‘ôù2„ IA€L¬$$uìÆNbU’bÏÇÊ"dÕL‘?,k®H†?ͱ.§ÇåË—ŽŽ ,ÈkJÆ&¸ARRR.]º$ö/žìvûÛoÏˆŽ®õÆë¯U¨PA;Põ¢iaW<{öìÏ?ÿüöÛï¾ðÂs¾¾¾ÆZY.ä5§Ú·ÏÞ{òZ€5bÊüžMË+ÉÚ¹éB0$¾!„¡5¯C Fn(ûyÁ+ïÏ é0ùöÛ #Ù_ìvbÏ#,Ĺ¡IªJDy"¡R×B-a“IÅäTÌfeH5'äA=‹K"ጨ×í…Å MReCp$õ%¿<v:ÁÔôt¾Ô; G&ÄNíˆ6´ ±Œ @r*.S‘F «©$ö¨Å‹¿ôõµôìÙ×A0£Å4'H`.[ªT)X=ztñ⯆ `-øÃ_N:&u äí³4ö3k™P§|wxÒð^-›6mÙîÎÃÇÏß‹H•RPüß›§öí‚4tì©,Tböþ0qhßHJ]ÆÎXr$ÎÎö¸# §Žê"*úøÃÞKªAâ‰%SDz<2²ïŠ#‰,?³}ÅØ¾BÜeèÂÍ'TeÃOÌö%£X!ÌÙ{ImHWI=õÃèggýyTùõ§ńω™ö $«ÚE—E­X™ZÇÒóЂºš¨@ÄÇü‡_, ‰ ¦PQ-áA”¸J7‡ G",Èœ©”êæCrN ßZ$jëäÕèK„‚æIÙ@Ë"&‡CЬ,HŠ,Ymêiii»÷ì®ZµšÍfCœŠImN4Y¿Zµj{öîF¹ÈbWŒ;–·œsd/aÛvJÿ¦aY€¼¼_·~ëB¢ÃX»hÜœu' viûœÆÝž·6vÂü/f>SyÑô1ík¿|t›zptíöãf/¯üÌÌ/æNˆ];ïánõçï­Ú7Î~dÌìEʃӿûqÙôqÍø”JÌæÍ{\ÛlþóG„¯×¯Õ ´µh.Þ©´±lÕª¹ã*¯]4¹ÛãËT6Ö¬A‘-jŠ…Ru@1Ì,‚„Tžæ¢+N‚%ÝKºŽ CVÒT©ŽüŠ9¥FƒL¬‚ýˆH©Vè ¦ãL¨ †(•šãÖÈ 1)MU©r?Ä©\* –¾ ™°Ö<@®±2Ûª\Œ ³Pæâ‰ö¤¤$«Å^eÎrNǵ×Jº~‰%à~°KO‹p¯ó–S¯œþ›° ñÍæÌȈ¹7,˜3ez_(‹‰W”Äï¦OF¹ïÌGõêôöœçî­Õ´í]¤¡¤{lãÖ’úîŠÆ ÚyLÛÜ‹™JÐW'‹ÄHê‘øNða&u˜Y•™B샰ìI*”„*2- ¶U¸9)Ò)eœ¸¥'u‘ª5cý—ÂR£S4 NDzW½eóc¿º{ËöS 6U%áØš¥ .übÓÑ+j²±½ñ*ÖoÜ¡ô Ȉ¦¤aa!|GïúŽ”}ög±À¶D‰PøÉèX.ò–SËTkH ºä1ù3 wW¿Ñú¢¸ÀªøF’ e£rª<–~w8å"•ªEÑRé¶.âWq(þ·þœ|`ùäÞíWŒì»dW ªØÏòq=ªT¬=h6‘nB:[è¹}û±‘‘Uê7nܪ÷AËJfú·3;ØÁ¶<ÿ£ýHÝyà‰÷º,©ÿᤑHtáSå4Õ’Ô}R®&r¥¸.î[ýô½uëÔ®Y«f§Þÿ G°b¤ªî‰ÌsG’’;r#’¦_5úhíKÏŒûvÿUœ VµÉ %˜’wB³ãÐUUÑQD#ZÈ6K=<¼k‡%ûâè´ýØØ2uû ž±bÁƒï}{±fky3* ­ýqF¿ ËãÕsá7ùô!PœòÅeT\ ¥óCMæìeЇlá~rb%u yË©¥jÔ#8LwÅÁ,qñ¼‚©¤!*ûŽòµR¿àÊ´X¯FD€¯ ÓcWøªë¥ƒû¨B!ô¯ØyNLÌ_Û¾›ò fµ[Ƽ°&SNáç®)?ÆhiùpÁñl†—{Ç-Rê>³éŸ˜˜?Ò´7Ä7ó-Sv[2YX™mUÞÑH‡D$î€t—­¨åtBaNA.XJý1)Ž‹[;Þ?öÇÈÇ?Xôù;¯>ðÓöÓ©:û–ÓBfLqÕeL‚9…w½žj¶MŸ>ÿõ÷ËŸÿô×” L#tÙ¢UïtmQ#¢Ž@J È˯շ’ÃáëCª ‡6̶ÙÞܼnÙ©_=ÕÜbV}z±òÙ/­™?û¿)9i0ƒ©¡õ”߯zótZ†žfÐÍjáÒ_?ÏŸ¿ú‚-×gåPÊ‹ âøÓF¤ý‚4Á“"Íž=J«fJï½÷Î ³Žzðj2Á»*2ÈÈŽ0yË©ÖÈ;WM ªZ4²sß±s~ؼ}óÆÎ9t!8/‹ÜeÄ3d2üõÛ÷n^2uÌZ,Ýuo«*5»? ÂT¶Œ›¾pãÁ]+Þ¹KÏ<Õ%XI\3uìœÏÚ"ê4,^9Ø¢w{vÖ¾Úmâü5Û·o^³pÆŒ5G ñLþÝ÷ÇÆ9Ïw£vÖîÜzÂsR]¶:ͤwoÜ@lƒD”#K!ÚÉÍl¢Žž¥*úÓô„<‰‘šŸJÈlWÎáèõ£É£:µhq÷ƒ¯X0$Ü‚ûsUÊdCnJk’—<#jlͽj"\ ùê®W¦;œ.ÛÊ¥ûbùYXÍéPR è‡{Å.U5’æ %h:>>˜ØvlY;ÜbÅõ£Ùj¦1¯õËÙÔë˜Ùê­×¾6%å™ÒÖ\oä1¿L5rÖÉë`c-zù[„À®Šç³A“xêL‰‚Ù±OŸ>õë×G­ñºjݺu!gäÐÇ)_(À4‹0JŶk¹nr‹TËQó7}A—D·,šüp¿Þý= “ç c…ZfìS”(dšÙ W´wûûÔq^ÈÇÇOعö¬˜Q·ntíZµkÕòù¶S&ÓÕ¥/öyåËý`dA‚¶Ÿg?6fÁv¸º´ÍCµjU¯VµÚ€©û¯Ú¸ nNçŸõ_rtš2åi³éUëP"ý»cÅCµk×iÕáD²J?9ñΪS¿;$æx2»B«äYM—æ?rÛÐy;@ÒBºfâ]ýÞY¯-*i‡—¶o4Êáøù©.þÍþôªÃ¥\ýkZ?_<¤Ðôƒ_ΰݹ?õ¿ÍÏ—„>M^yÒÔÃc[7ßmKyD?¿'wĪ hí~ÏÛßOxôñybwbÍc«ÞhõÌRqZñÚô±¯'ÞùÂ{6-¼MÕG´žzxQóç6¤Û6´÷oöÄçt–\&‰@Fð,6׸¸8<Ãzþüyä⻇j IDATHŒ=º^½z´ÃˆB…ôÉ ¬ +ìãx -£K¹TDÈ|¦ó¦wÌZ³óðå1C.Å\%B³ZƒK” Í\3Pk-zàœ˜s´%%º×¨ gK½新0𣚂«´{{yÌkqq  ¿ 05|ÿ;'m83>55-Í‘Q¿ 5=4..I±Xüüƒ5}ÍÖkÒòãâÒ” 0Äd2âjZp‰L·(Õ:ëצ»w[ˆüø(„Oá/ º!‡(©“*±Ki4sä+Ÿâò'‹µ·ñ¼P1…Ôlû°bš6¬ë¦G§LѯVYá+->)ä¿K¿kTÞ²þ¿=_{ðÛžÿŒŠ®ñê+óï7«ºE¹¸û‰¹¿¾ôÅ[öÓëÚ÷}~Ø;Kgµýò¹ž½/·oÉ#!4çÄ£®f:ˆ&?¿düjËÀ9 itôõ¹ÿ÷êêgÕ­`±˜'fyÉòü‡[úG_9rÊ/ï4™|ükvj Ô¢^Rß3LK5ˆ.1rÔì±}Z×ßb:÷k¿7׿öç&Ó9¶ò‹j7iæ°»Gm5齺å*™OM,×|ZŸwv¿ûÂêi=ïè]ãÔï]#-ñ§Ïß6zõäöub6üçŽýïìû@ݨGÞœ¹îÎQ͇Oz¸q¹jÁÚ¥E£þÚOM,ÓhZzí·¾þõžzÁ'Ÿ/íg2ýSÎlÝó[„èýi¯M'_Ú¿aÖ´f3ëM_ñýøcŸÞ?¶ÿ7}b®Ö~æ×¨Ï꿵|f‡¨j8ÇçѬ\”€&ñ 6x©“hÓ¦M¸téÒ¿þú „zÿý÷7oÞ\4hÀ 9 áAÂX$Èóyª†š)ñPid)•P5yÖ¿Vÿ0JnBÕUƒE…AZýý…<³¾U¸ÉL¨ª?2c’·ú—*¥ó´Þš¦ˆ}Ä"æ§xÈ[Ÿ§ªÓ=mÖÇ<©N… fw´ˆÿüÇ.àIu®¨>éè3Ÿï·ùãWïlYgÖšƒÂ>øŽÇžîq[­Ò¥Ê• ÆY£]çRÍî}Tq­Y½óvã½?|ìp<Ú£yÙã¿}e·wèÒ´‚çDËû´ÿöݱ$1»‚’Övü_ÿÏá|{Dg_ŸJ½;TQæýr8žâ×y¶>ç(Ñ m»Ú¥|i€°D7q`›Júö¡’ªzH¡bÒô§\ÊŸo> ªýcÅ»vÇsýÛ•ÕÇÅ¿|§NÍL¦R ;uhÕ¬zêþŸÞ²Ùž½»EI›O­6·×sîÙy,†µî{î…ÁwT‰oØþ¾ú.×¥d\Cõ¯Ó¡mU“©^›N­[7‹ðqœ;Œ1ʘŽ&¸\ ûV“ïW=Ó«eêõºvïRÁ'#ÿùÁ=\ ýèµiT¹œí–øut¯Î÷>>¦£âŠONQü£:uyÀdªÖ¥s‡æ «x¸T{.Š7̦LàTDBù¾ûîÃÓöØ :uꄳ¾ ]­@¬LÆ¢àÞSŠ7˜E¬÷ù0O-:ˆ/rÊmŸ`…£SšÈâWÌgUGú,W±ø•ë;zFCgÛ—Îôâ\§7ãÊ¢ËÇlölùæÖWlÙ¶Í7 ˜ýcEßôßþÜâr¥ êØ†ârÕt8ÑzE´HSTÅ”¶iéë¸IqÞ[“w–1Ÿß±ØérLúú÷ zXjNøföù{F÷X5ÝÜú‰Uÿ}¡q¤¿¡—âþ`,£óˆ Ãÿ°Ñ ¿Ž]ºÓõû qsÞùnç}uJž\ùRÇÑ1h7 v{tì‹>š=}ëöæ«ï¨e1YjÖmm2•üåè;QV"Äb±ZÔ˜„{ו½ÿý,¥ûsSûG—MsØ­]Ú×]2jæü%ûFwon)×侯Nô:pÃSÝëÿAÓC¯õ°º;„’þja-dwgC{Žš¨Ü5cê„úóìí6ÞÍôæ®7”lÉtóÐôÍ1O7+!.Ëšh¢žöõòÄïb_èào9ÒÏ¿¡Iqo“~>\2?qÐG_Š L´‘ô¤ ×ÈJzÙ{ÓÜÇX³n‡£9Ùøý6ò%ç ò×Ì8‘p¬†{øÕ¨€7¿õÖ[ N£eÜ”![ÁУV. <×zÑèUÞõÂ@€(ª)'Í‘*ô軕˜ïò’ÙOlúrÑêßÿ½|5=åêΟփ¯›ÖŠL‹¿@ïIJNŠ;·÷ƒç–àÛSñĦÒ-»ß¯~ÿ¿_Öùtà <Ö¿ç*W<ý沯¦¦'_9¼ç¯X\µ1„uèçåFx¨[÷ÜsOn=Ÿ|~ŠIÙ¸ê×#®´Ó?~»ùß8[DåéqW±«;®ü²ü‹Í‡/"=p¶çS¦C¿G•}Óßú,úù—Z•ЈÜд^ ©ßk¬ÉôR»W×íINI8uhçK8ÍkÃózŠ->öêÙïg¾½Æé¼zU<,î²úá—± )Ôg:mfLÔ;œÒ}äÛŽ\¹xö÷Ÿ>™Å£7Y4­‡æY¨X·‰É´æðÁ³ )üÜ–§‚\.Î`GÀ,Ôˆ„2¦ªúÙ]½€*½¬xR+ì|x¦[œa,ª}÷"‹j? D¿ˆPõ)­¡ˆ§È/ì?²O‹†õª×¬ßóý`õÝ5‚"ÞóDkëØ¾íµ¾»âä—[šwÜßü¥“éNÅZuð¤»Ñ£ÑƒZ‚QQ¨ÖcûêYó_lרvÍèÆÝî™{6Íør†‹ëþ÷Eƒçëg¯CêÝùLóg«¶$9S~9¤mÃÚ5êvú°f¿…ÃÛ“Oû…Ož÷ÁöÓ|*VÄ͇™€ô©3ô æåGÚp0(‡â2÷§¬°$’O•)çvL¼û“{o«Z2¢L­Æm6ÿ›êò«3ò?lšrÕ 5æ_løÊ Ó”µÞÙyÉ\繉w¯y¡{dÉ6ÄâŽao OoÛiÍÐÑeËGµ¹}Ö…TŠ×ݺ_¨‘uÓPõÕ„–”)J7¿gleX›j%Û|k8ãì-)+^`_&$&‚)Á‘H̬^3A“MpxúnU¼,ê½5áÆn~  /õÀ‰~äxѳ1;v¬W¯^E/ýcXðZrr2¾Nü÷ßwïÞ» T±3x1¸½L7%169ÉnW‚"Jûâšp9é‰ñÉ–À³=·/û• D *ðÈŠÅ‚óNj«ô†‡->!{z` ¿ûÜ/Õ“º '¨2< #|(fœ$vÚ)ÉÉiv%4,÷K Ÿ.¼EX¡“³ZZïvîÜÙ±cG<±® 2C¶˜Y’© ¾]†`¨Ñäø«)vKH8^YI:%ÅŦ(Áa¾&{Ü•x%´d Ü(¥ÉJ…y¡·-‹½j·ø‡„øÑowëâKw&<+Ô½5MŸÂs+¸Ã&·iWb,aáü€—»EY*`¯ÇGÙp¯ÇÎŽ ¢gΜùmÛöömÛ”,YÕ€ sŽÆXx¾råʯ›·´nÙ¢bÅŠàæœ›ç§&_ÝBþÝwßÕªU+$$Åôý-°1ç)>kÖ¬©V­é9Ž“ç|B"[Cž†[ÌãÐ×Z*^Îh؇qÅÑ/4\½çÞ74\ÿÜ"*<Þd€£g‹Õ/\SΈ'Õe”P;º<ê&IR¥³­™L¼ ÜŽÔzƒ­ ¾V¤^Êxs6Dn‰ox©Rš£Üè#C™ºm¨ÊÝ:®s©/¿r/MgT0tnq¸†¦ä‚D@ jILLÁÄ#)ÏVqül  ŠÂpŒ©KBB2üäÄJê.2 x…+ô¢­M‹^çd$Eœ©ÂIšZ5«þ´~ã#C½`Öœw æøÄÛë6ÔªQ ~Šç„/çpFMÉ©…q­Ýʘq „3`Ù!²GV°g‰ØÌ½+àÑÒè:u._ºüÑüOnkÞ¬Y³¦xö>WzÕ… vîÜõû;Ê”.U§NùÚ™¢TœZ”Öf~ôGÙÇÏþ‰uÉ©ù±&d7†@öœŠíÉk ˜kFDD´mÛæðáûví\½ú›øøø¬”uØepIÙÔŽ®]»6®ÅÊIªNQ*HN-Jk3?úÒ¦ ½YB²f~`-Û¸u€qK•*•Õv:)bŠ vÄ;ñqm7e,ßÉ‚sÅ`Vð«$Ôìá*¼µ’Ss·î°§eµ›åÎQ¡Õ.æÝ/´ëMž;®¹ƒAúùÛìg½h[wˆi®^Î]Lù®}ÍNå{D… Aɩ׳’Ší¦–y,(¶P\Ïv#mŠ ÈëèS!Úk Q¨×±"òÂDrj.PÅæRá<fEHÕ£ïù¼¿éÍe¦vƘ¼Õf]£­Õ¹f¬·¥Õ_ãW³»†Z©v÷Ï#rwÅuŪz»A/×ÕtîŒ<º;ã\k»ñðh×]‘kŸd y»A7Yµ ·ÙÞÈ••]±–KNÍÝêÇ&†Í¸xnh¼ÿ2@-_AàÆÔ&é]bµi#Š‹xá¿V+-Ja VÃV·twDhê®…KÍØ ï„pýŒ!‰¥™qÔŽè‘ë›5U¸{©©á#îbuî¾~^4ZnîÆ ^S˜Z-µc­ÆÐ%ÑŠº¢õê înîG£Æ¤o`ð$wÇ«ÇC"zu7飨']A—ˆB/šŽ°Sm5YF3áÞØ©Ú3zð°”‹Y!眺xñâ¬Ú.àrñ 4'žÎ7¦ÅÄÄÜu}µ¼Ø&ìk¼gv:ã˜ÇÀлˆiøC;†Äâ/s˜îj!U«DÜUZÈTˉÁRa)jÝŠ,#w¨gw¥æ© þ"J ”Âxjˆ°œªÜp¨W7TpÇD5Ü(b•¨+F8ñôŽÀ—™TDįÀ]“ Bk EŠB„¨ÊÈŒ½R I(ÀEVí³Ô­¨yd¹0Ä R`… ýPHˆó.ãm—ü£OÚ¶+zƒ8E¨"#‹":Å ´žçœÚ¸qãV­Zé+L_‹\PWþMê(¶†kúω‡ƒw£€Pñn¤¤$¼›ðàÁƒpÎé&Å[ÈÜw6=t¢—QðX4V]oYm–ôá…ÇDÍ'UŠÿ”ÓБ1E½»Æ3NR¬:Úüs.Æ ÏˆÆ%Q Èn=kQ€ß }&b"„NpÈ4&S·3v\ £Æž±J•¹NÝc5AÎúª8ï¡, æpœDBÒ$0Iƒ`u+¨«Ò2úÔVªÅšƒ±ZívÂkV¸'×b] ÆÒºwë‹cÑ"Bð$´'~9XXÕ½=R½ ±“þôĽVä‡à!%ìQ‘ªð#jD-É´jÝŽã^I“ýˆErЫW×+Û¾zü­ÕüwÇ…'GxÞ´œº«KÀ Óâ7´¤ÁQ:»}ÁVÃ6¢Ôy̯ŸMk_¯$Kݾ`R«aÓ„ìÓO§ òWvÍê<4íݽ㚒MîÓÊ•+1Dã¹&ÜzzW'â5U ~~w ¿è #9sßÂõXä9§"(Ãr—Yh¬Êyø°Û¾‰=DØë³ñŸšÆ”}„†í2{Eµž³Ñãs£röm±ç¬t²j׫¾QÙ¨€rVUÆ8oFY4‹Æx”P‡\±LÃr$I£h’¤‰ëÕÉmKZÔH„©Pc'¢)ÔaIŒCª¢( ™JÂd-DÎy4]€)>Ñ[ê’èœ{”ö踠Ñm®àn’ &¼5RÒpg ûÀ©Æ­E_I‡ª%<ò:œ¬!NÕvÈ+ÜQ$,!ßDœPÍdF›Œœr˜@®½µ;×—p¨Å¡…HÑ»ƒK¢C(¢?ZHW˜¸;-úÃrªB…úOµQ‘!¼E½X!¤OªzE¡ ̹V…(Ñë\„>c¥(±ûwõ¢Ç{Vp%Yt7Yή­ÐjØ[ëÿù±K™­³ìPáå®÷|Ö¾ÜjØžõ'â;”½2·G•*£#lÞ“¥‡œUàñ¤¨¨¨ªU«bތǙÀšx—2Ê TL©™VAÿàTÌ‹ð0qμިV~p*N¢òúÂzB!ÃÚñ£Ï{ÿ:|ôØÉ”TïY{àïW½ZT£uøX‰ók}عºmlŒíæD‡MùÜ/lQà˜aËÉàûú‹p•½1+óìõõÚì=g_«;á‚®œy­éšÐÑÕtáM/`$Ô·1ñ`®·#dŒ;WñŸV'x —DÈ´Ä žQІ^1:‹‹1P CäN·P Ԓꑽjò‚ü›K _$CÿtW³ 4E_5PY 9<‚•0bZÖvMO“ѯN3Ô:§¹€é‰?ÍÒj"jM$M‡ ÕV$)©É™XõÔ†š4<üÕ¶] 8b[ñc ¿îpµþ0OàLRHÑm’ ‰è.QªJ]Òº,”È» »EX‹DzÔ’È4…±I .×_Q|ðù÷'=7¸W9Õ ëŸ“;¾V”·ëRìÒ~ÄÄΣ›m9:9øë™ ßÚÖ% 3Ù³fnøÕ?³n”SAtZ#Ñàà`|ÌÊ'¨Á¸HÐLY‡|3kòƒS¯:° ÆNìÙwèÜùKMš4,&>·e¬ËT¾èð?pؤQ]T/¦U”¹=G—³ÒñðÍÊ^…¨2Ö¡‡Z^äŽë`¢§^»ïUx“`Á.÷þÄB¨œfÚÿyMˆ*©A¡*ÔÅ2Ù¨ƒר j?Ð=2† eª;ú¥Q1Èhý ¨]M, ™&VU¨¢@&Â’{ªîXò°/h¡¬õKvÔ#Hz•è-U‰¾"w—X1‚‹JʈMèèFÀÍ&(ò?òLc9å<%á8£ –»+©iaEŽÉ‚ݳL(«nÔ q)Uhi~´ØUÕ›þ#º$zˆ–hAl¹À[´Ä¹G£Ôy(SÏDt¸57'ÎRh©Î Àvº5jĆMk˜Zº$XR·qÑ–¨Û‡ØÍ zŠO…×wm¼ççoßìß«R§õÌþK:öÄdEñ7RKºeú‹‘ñ]ñ‰døõf|j—ú*Ü€;ùᏸ«^ýÅœ ‹×ÛH®íŒϵq Ôu™µößÿïЮõî?wN:eÏî?³VT5n2~ü«Mš4ûuóVæTvÎ9€E¹‡£ŽGU6‹°òHÙ(ÛªÌhçbÿÇxAëVx0ÁˆÁP TBR‡upÀS„4Pkcm!êf‚EÄÀƒœ‡'Z&ÈÅYBÑ'Õ@ퟺ‘‰¶8¶ª8@¸I.ÕþKê6õ £-q–ê6a¥‚!À*4—YÜ9Ñ!Cuê?äQ >rÃI- çä]_¤,ÇÊ¢qŸê4Œˆò€ÿýˆfÕŒªHèN´   )–șʩjÌš†Ûìf—DhM'hÝ"¼ p^VûC"‘D¸œ‘‚·:"vÑ9xP›S%Ù"Á–rú«U8•B.ØTd¤(þ‰µ€3ãˆÍÝŽâHºxürT§þ£«*Ú=÷OÂ4%{‚ŠjÛ[Qú¯Þ÷à ­ùp£2dn½Gìíÿá¾a6IXóþʯ¢ý•½Ò äŒ!r̬0CÅK"Á©ð uŒa¹&rkšœjœG¢‡zWQà§¥á«IÖ§F=áãR)ª&Žƒí8]Ì¡ËiÃa>‰o:ì‚Úö?þ„ û1v˜Bn¢Ìr[ÜhæŒ&¬?(èɨ ËùŒ4~ˆµH+ˆÿ<˜¦­Øj ƒ:1¾‹(±„  \EÄx‘¡ $ƒ;ª Œ’vpF‹ä˜|ïP2² g¢]*kQ_ 3]3–´W’„ú‰^©ÿDG©“ft’úSºbƾ!ºKª\A¹ÐàÎëE6ðéøA—­˜‡É‚Ú¦9œ¦#Ö9¦ør"L…>U°5çuƒ1wÓ 9~jOh«?ª*nò.£f’h:'‚#¼µ&©‹j·Hä©´°#z\(Zá‹DÔ²!@……¢‚d]ÒN]Ø=´&…Cñêƒô„. ©áÖyu¯¡#¹…w¿?œKYçÖ¨~¿šÝ0b0étþjïò:à™~o®z¹oÃPá¸óË{—÷ƒÌä|íË}Y¶DÛ®ènPºté.šò Jº×Œkþ¸º(vZö©è € laaa¹ê>Á†wù0àfíãDP8*Áµ Œk*±eðÍB]Äm• 8RÑ$èà]¥J¢‘'|‘ ‡Œ3fÌ3fÌMº·E´ÁM (î@´°ôÁ„”»©’t>ž6úˆNAYï›æGuƒ†´:šÓ’ѶV-–0^B˜ÑR_6 rÜä—+º°úëÜ©wÙ›L¯ÌuL6Ý¿?˜ô‰ï°¼T`ß¾}çÏŸ¿í¶Ûrø%¾\7Ÿ…A®@ÊÂǵÄÚúÊR €ÕU*{ÞTƶxH·J³ýž={œN‡n‚íe}»bý,[ÊXÁʺ‰^`-,SFÓâ»´jÕ*Å÷èÙOŸâ „ìya@# ïÅ9óÚ®]»ÆÆÆ~ñÅ8pÔÇ–œ{𦩺ñêÍC¨©jnÀ}îN= 2N-T3"QSIFnįF´B®§Cu9·Ð ù—!Ê+W®œ´šÔãëžžúdzo¿]‚î<¹á“)_\ûÞ˜šÁ´xfÓ§S6–|çÕ®ßÝuïÌ¿ÚÿD \xÖLoæ/}Øv=Á"nôf>þæçØ„¤ÒqWô3KñÉ)¯Î[Ái9ýâÊxÅ’¡Ãïíl ÛÄŸfýgÍ9§¿84 /[½A‹Û»´-»îü³ì©{§ôÞ}âÉ’Öëù—ÞY(2`ØõÊ©“'O>{öìk¯½ö¿ÿýC°±¿8dÇæ›:6x Ê9Ý]^d9ïà#*Ž~°‘ƒPõã¯D¬GœoÈûpÔò‰S³ï¶`<-X“†lí¬/Kôa‹¼Ñ³‹z53çP¸Ù«±ï<º> œ2¶ÂÓ°Ìíp$°pǤº…Àí‚db"Ç­yñ£‹¬~>k¿ŸÓèáauÚFšLi{~šúýwÉžy¸fý’Š)mÛÂÉëªÎÇ-t¾-”fþúóÔºõÍ/ oØ@á×f·ù:}gÎ\ˆ:è~&&³¥M“Æ6§ ØœJºËAÿhMã"ïÚᆭç£ÜGÎs›}å¸{Lëjéq1f¿3™Xû×´º¡n¥köÇ⨈›Üp"àl?´nåáÐV÷ÜVQç{Á}r IDATC­,e°‰·RîêæÍ›×®]‹÷"}ÿý÷wÞy§qW„œ‡` Ð(et yß0éTŠq‰¦¨Z³ò:EÉëqUõ>Ÿ8Õ¸Éfî 6\»Ã9rHÓ Fíª*[ñ"®‘xÝÖÊ(£Q– }ŽAÈ{V¯JiÜ£U¥VƒsVÐÝBΉ£2¶.èP²Ý=ƒ¾ÚR‰9ù¤4¦[º•húE÷PŒìÛ{n-Wk¸âúþ÷ƒO¶)«8/þþY fô›wŸ} ^„%ýôšµiã¾nÈ4§ˆU‰ñã&ݪè= 𷘧‚‘<¢¿š¨8;öìOMI´š­¸±"]qXñpbI§S.“Õ¯aíjf³PPëÇúv¶ìùØÓƒëB_xeü/ï?7lÆâ1ó{÷LËœO¾'€†g¬lCü¶Ã_?~E÷¦å¬¹ hƒY,´`*ƒd |þùç+Vdá’%K:tèÀGŠ,Á†Í&¼©me¹@!€ñ| ZŘǹ Pu¶ °*‘#å[äNzäQ«=¹Ï£Ò¨gL´«óTªEÂåeüê¶(À‚x óT»3£ƒÌeWꎎeÊlKt¹RöŒ,SO}à~„2F®Þs¢Í>ùÛ:«Ìnõ‚±9.3&™å$*‰Ò³>ÆHÜ Ø9Qµx$ˆø¾ÝLë|Sd§Q»glÃ3¹Ê…£Ûèý5ÊÚm»q¬‘xô÷uÎέk…óÖ–zæ×%/V®Z%ªb—…›O!rÿÏ{U¯T H—%¿ŸÂä5“‡¼¶øÇ%“zU®ÔuO&tÉ¿-|­reRzü?áé%2L;1¡[•©ßRýHM8ÓÂ(ýh¸ÒN5Ä%ÙÒl±‰)fÿ@›Õ7ÕÇÇañOõ Ló±º|ƒ¬!)Åæt¦ÚHY³¿4±LMNØ~äk£ë(g|¶?‘š9»ó˪U«‚4`ꮋɢá ?~0¦ZÕª$|tñ¼ý ^\ŽT*¥nþd|µ»Þ<Ÿ¾ÿË7^±Ûì“Æõ¨VõõeI1îïOÆ?PM˜v{ñ£ƒ±ÂÖ÷íø^^¸vù›ƒDU·9뎰Wò'SáD»GàØýÞ}÷ÝeZš;w._£åy 7­¶ùËß„¨k « e*rÌT™Yy9Ö#„ùw>ÍSÁ@èú“·WHP`9nlúP@N¤#¶r®5æŒ ÍS!Õ|¢Ù§âWïÿ~ý#3"»oŸÿÍîQõl«&ß6¼[Ý¿Î=PO1ûù³!ûÉŒ8äHˆÅ˜Ó+)Ô§¼„Ö(M8)±:å´ DÌ›FöD%\`ž*ã +«f‘›jw|Vyùñ„q–¶ý]û±ÿô8óê{».Îzàê¦%æV}¢‚¨qÿPóÏÿyì×V#,_¼oîƒã.îvb\YkÌÔ]æ÷œðÓ=ίûß¾EíZÛª”rËÇl´z峯ÚV 0ï[8nàøç~¿©ëàs=™^yÓë=¢ÌV¿š]†ZÃáœ;¤‡Ç çƒ]Žã›Ée±;Ó··­þß@ÀË.˜¬Þr€hÏB“TŒ\Ú‰bøHÅóÇN{Zš[Þi@çYo$Ä%¦ÆŸ\Û®ÿ¸“LnôÍ+ýûŽ,³åã~'|â­¯_ýtU»²¶gÌN˜š”tzŠÙ®¤¦þ¾ôÙ§þøÒg?W0¥§4¾³¯éó? |¥{àŠáéiÇ?lz×Ó{ÏþêÛ~'>yqT÷&±kw>QÑ/56æ·ÅŸoþ¼ï¸O<ö÷ÒiӇ߱ò·^5øÕ/zGe¡0!€7äöþÚài÷4åç@\˜0-H±‚M±¦ôy* zB"E-V(—ó'ðü˜§ê=ÁHв`LµÀU˜Äñ<•‡iä˜É  pb [˜°-ä(hõî_%õôg/tFœõÁË~BÂB-ÁQ]{á ['¯¦*8hIùwËœaåð8ð°“„¯˜]Kû•©ßkÛcR!K=ºjÔØ¥¿¯›×±cÇǛ›ëA þçI§Ú.¨T%S«'¨JH…BÁð\´œ]V¦vóÚÊáýGþ=²ëß^]î¼³£IùêØ¹³»–íî?¸e6EÁõwëí¯ýþÅ+›·ëѳŸË¹=&Ù•ô÷æìö'º7/á°VoÞ¾¦óàþÓqh35ÞaøöŸÓoß²a„ã臯®4Ý}oÝR¥¢j;ÿ·l¦ª.Käq¶©d =5H>!†f‘°¥ê ݳ۔4>«”s5ùþb‘'‰M¢òÕ¤³WSÒl6Îó;@}º!-¼òÃà2=ù,D¸‡ïøÖå{ÇNË»|Ûõîçüý‡ãÉ8WO®£G/ZKÖjÛ¦N ø@…ɬ”°íÙðßÁSzþãu4.kµ˜C*6hÒB ¯Ü°i³fuÊ…¦Úò¾ÝþÂÒ±]T©R«ÓËÓ&¸\s7þ¦m8«ñèÜ=¯mݼåÓÿÓÙåZ¾õ4vJPåbáB@Ÿµä°€A¯gÀæ-ç©Ù L£«‰Fm'¥u§%”YÎÂ|‹7Ÿæ©zˆ`Dâç`J¾žJdI¼El•YM·eÖj3²0Ñu\JÚ®-îÂ\×â«5ââ.'œÜón¿¹ÊÐÅUý•?«(o>øÀ´Uœ¸#ºÍ”Ã#:5IÜØ¤ç˜7¾ùsU‡Ò|0¢{“iÛNOq¤®_ýÚúÄ—–¯]³ñÍ^Ä…xk&1¤X‘ôƒ%qÇub óq® Mµ¿¨Uƒ$¡Œw€Ò,Î2ù±Ï&¹º>=wꨮáf“Ťüñ棿ãì³ý[UòÕîþµãd‚ÅÅÎýýœJíå‚1¡xy„‰¦Ñ8ZnQ¶¬Ÿá¨àŽ|Ä¥Wèý”…B…ó¨>>ä$vŒBa`"95'pÝr¬)¤M(è4‘oqæ§Ò¨*Æ~æÌÃ4ø¾_æT(°Næœqa5.³s8˜p[‚¸'¸\xáã›÷Üö¦¢<üÆÿ|òvWúÕ´Ê“Ë>Ö:Ü–\­½Rãÿé=?(ʃ[F¦&:›Ûþ¥Î;Ž¿ÐÑ…ÙêÈÿd¹|µL…h&Í9‰ð‡SñM”ˆU‰ˆ õLuX"ÖBRq'rCçFE¬ÜMw¥g©tûç;Î~ç=΋«—2ùönm™þŸ·ŽáõÊùSÃŽM½ÉK·¶§$¢æ?ßî\?Œy ´aRRH!Ý­Œ6µpÕ¸ŽLf‚+Ñ+òê5ç©`)]ÆùW»bKK±'§Û6où‡ xÍ)ý7[µj^7=ÝŽ‰¬Ë™æTo+ÐAÁ%@óusjÜîÿ›ºÞÙebõÐPŸ:-M¦JkLªjÍÁÄd¡{ÂÚrxà ;ÖÌ<~Ô².¿ha6]Tº¾¶dHÒ aï>8«Î²n¤ž“ó8›`lÄcÃ1ÇßçâKE’Ûí—Цs,šýÀ×t|«X|aê‡ôŒ§Þ]Y(`‹Â)\uL!ƒ/Ÿ~úécÇŽqp¦jÞ¼yFúÄ`‚±&Faáèmñ‹« ‰ITÏYÈ9F2VÈ7lòƒSÑ}ˆÖ Æb#MB‚Í ¬cÌu,Äq$L ^( ÷ÐÁT…$¨3»pj÷õ¾-Üé°¥¥¦£ßB(fMµÐSøçr¦‚l|ðXÙÒm`;³J’Ö\§sÚÀœÐÕqVªXŸÏJ¦ÚkÒ#’R#fC[uî½ç5ÛwUÞùY©}g­2 •ˆÆíÚ)¿mlðTÇrL•ÞŒ€fPíÎ#L¦ ½¦Tûi\ó¨ÀKÿžL+Y³f„Ö ¶ò­1bÒ=½&×d̓j:ã.?çlÔ´šÅû˪¬õooS«”1@tŒ9ÖÄNÅ…ÒÄt»ÅesØœ˜§ö¸½·p ¶³˜ØdwTϲ>IÇÿ>W®q£à‹;7žnÞ°Jõ:5±öüL~ ù×Ú°ý“ëç%Ýþø“ýͯÛ9Ðì©~{õÁþ5kG„„Öê0Ûÿl1u@”ùßÏßèrÞß¡vI«5Å?DÙþÚª?±k½À-ÿg«ÖGwÔåé¬7Œ¥¬ €ÕçÁ©X1bÄðáÃ1Ú ãÇ÷xr~ôBrj!XÁ/ÄüàT•a²î¸Û—<ë|ç§ý5"<ïk4túb%bð½Þ >÷½¹·qÕûùOŸ瘲ªuÍ’z/9F¡è0^ÜÈnÜ”’ŠÛl%Bƒ7mØEs€ãÌŠ/ÝÅEÇýK©ˆ›‹°ù&x¯­!Ê¡ÿêö?!q¹Ž~ïç}ª‡Ñ„Ô§Nßí+íÏÞ7¶ë§/Š®Þ»æðìÚ¶Ó£|ž®Ì*®O¼w_“¾8} /áÜ[R«ûËëçš»Ž|tL™¯?z´YÇ¡S•¯_éÝâÓ—Wî}²Yí7¶|e> g‹É´j ýlóKuC}Í&fñ®Zñ³ûvxŠ®z;',Ý|Gå š³ÊThÈÌ©èJëÖ­ï»ï¾+VtéÒåŽ;î0¢§bƃ6õBÛoø-C ?8Õ8Ä@ÌdÃäè:tNe$XG§%ÏSu¡7„œ$Ng0‘¥P:22)>ÍŽ'Y|ÅD£2˜‚Û t|À‹¤äˆïëùÕùäØqœÜÖh›@~–'R1Z#¥§'û8“kÔ‹ªçG/‘ŒÏc’š„GVQI³JŽ˜|‡üøtñõÎÐvå|yªßÕ¸D‹Å/88§gM!N½;)4êÇ'®ëÂËý&œ¬…Ç:½ÇŸêõÔ5›ÊÞ6ôô?}âR•ˆPœô©ÖvúOÇ&\M´+–°¸²Ì-™í‰Jë‡'-}°VB|’%(Lxå5F!ÊTÀ\oäÑ?¦§;vìÀ{”<&©Ðági`"9Õˆ˜,çüàT„ÂÃqæËÅý´î+|Y)ëæ¸M&ºš±«n¡_ƒÏ.¯JOJ²) ^¾ìHMÂc‘¬ér>´ò²)-9^ø5Xyy%©ÙS+ÝõìåóO%¦Úýƒƒ\©)Éi¶ Úý6õÒÅ+ ˜Èv'(F£PÁ©Ì«\$®Å9|Ð ÝUwbú!jQGfDsZB†ŸØD înfzy=ªÝ®2ꂜCÂé™-ePB)x*-ê¶â8`¨âW‚i5ŠE9·ÿ7ôÍ[bôù`#"ØO‘Á[ñZsÅ72 Ø­i„¯oF*³œXøø–ÊðáG_¿È Þ`ëØjÚÖÙî‡Õ¨~1ÊØœ,FÀ‹úÕÆøË—/¿fÍ|aIìŽÆ%4á¸Ðn§ÓþÚ®›AC.H²F ?8ÕÍsYÄÙ$î´C%kêúYðˆ>L¸= ¼ésAµrÙøÝÙzAoÞ•’HÓ&[§- ÓÑ´=-%Að_ Þ$$N{J2^8 xP$=ULÝä%܉}ŽeäŽ&³D©„Ëc¯äP)÷¨î r†˜qÈAÔ¬Y UFR|ap0$®EQ¯nç(ƒ!4q´„é).›ë×e L—C:.ùôËò5ýéEQ&(È!àõÜ/»ÄcsYùÆõT\*ºté’×9nVVR.‚S1ó=JÌDœ#¸Ì^gbØVŸ·Áx 5¢(‘t^Ì>geÝD[T°È Ë( ש3£[­mÒ@YLWõ€X•Ä$w«Š½Ð%FßyÀw%cbbJ—. R;êáâ NÀ‡Õta6…‚€_“»41®£l¢—U…ÌSs{ô†-&øp ÞN-$•a §â²'?KÃ#²>.ë e,ãzªv»*7ÖÞ,háSOzÌÙòA•D§ðW(ÇlŠ[$(îïøòË/ñ)`À¬7 méG"d±7f׎ýõ×M›6 0ÓÜìTeD ù±Å`Dæ-› <@C¢ËqzÐë¹_DËÊaÓÉE¾·H(°+£cUV1å¬ Êœ\o™a¸^ë`‡“·•+WÆ=“[¶lùöÛoy-ú^`ey„Àuì¼¼‘ãëªUªT1ž‰É£¥Û"†@>qª¾e{xC³M\O=uêTNðeNåtN5ò({Ös£ ™ôZn”@e=GÊÆVŒÊEµì ŽÜq=5**êòåË ¸y‹Aâîë…¢Š†ìWáBÀcëÍIð¸G ÷.y\Úȉ¡Ô‘|âÔì±oá…„™uš4i‚1z×®]U˜Ô2Õ±qjöÛ(=`ïp†•» M$P&æC5jTÇ¢{÷îÅLn âPÃ<•Þ{—)ñ¯ç0Ñ}8Ô=åP`9+ g¯sâF35•·4 ÜD· šž£Àå¼[ú”H$…|âT†c:FÞÌ#»¯Ÿ^ÛÀCK¿ø4!>žÀ£_}µLÇ‘…!¡¡PçUa¢óŸ®ãQ06¤—¹9‡­®Ã~°È.pÙ£ ¹(©Tn‰€D@G Ÿ8• ã¯N„˜k"äàÎêU«;y¦zõš^ŸNÔ&¢cö—éøZÝ2 ?0ˆ9÷oÕ*•ñn”ç›ô[ ¼r6·nŒ™¯úŒj‘0ë¨É‚D@" H2#œª· ~‡é´ÊpUÃÑWb¯;vü¥+gUÀ9à å#5¨Ë$‡ÜƒYÎBä~Œ1p0™u£üÏÊ7^ÿlã¶eÓÁ©"Ñ\UžÖa—…b‚€Øî hVLVì¦ñN¼V诿þ:tè^Ƈ7 \¼x‹[·nEº…š‡aÞ-NM=´jôÞΓ_žðü¤†3'¬Šݵ%Ÿ7ºÿé¶Ÿ^¸pð­ø‰Íž[ Rõ*ÔщÿwýÖ 6,ž]ûr«Á?Ýv"%%þßY=¥të§þMq¹®lSæ=±ì`‚õ>ë'5T”I/ü<0:$ƒá°mëOÄÛRNôÞóhíÖ Q{⩯¦=õG`õuú¸¤J2IŠ L¤ÜÛ‚FªÆ¨ŠËúý€)qv÷ìÙ³'OžÄËk#""ÂÂÂW­ZµiÓ¦˜§8p`ÿþý—.]Âü5ß0+œúÛÂaJï%í©åÛVöŽþþ¸á(-¾á[Û&ôkZºtaãÆ(Ÿ¥·zºÑ*)Š©;¾ž©ŒøjHË(ÿòQ¥­ŠƒÖµNÿ¸xö¢_B¡aQú—.SUiX¦Bép:ÿ͆v6|kZ—¨«Ôc3ßS>^që"=Qyðç{ÔWoPâ)ªdU7ì²T”‰¢{J3ÇÃAå5!û–pj\\Ü… üüüpŽ×ßßy@@—5jT©R¥¿ÿþûĉ¸ÂšÑ4— §&lŸ=MQVÍ­ÐçÙÏ1y|káoè1Í7ý¹ëTÉ«P«tÿ¦SÑ×}­8a׃>Óö({Þ^WQÔ[„ÓâÝjÉž˜ŒF}4¹Ÿ¢$¢E0p­2ò9aQ+UIþŒ´šUw±K\Ç_VÞr.gr…¾dÎm¥f¡FœŠÓ¼øâgPPxÉ××Ì ŠEäÚ²eK|mœ êÍ·žÞzN=ºúýUʬ+®=Ø%öìÙóý÷/ï6{W‚âãº÷㕇bÁh±?>SS+\ñ.Ì–›ûÆ(ó&,Ûw„xñìÅ«G6¦(O<ñ@ƒÐ¤ÐX¾¦²7.ã›øýÛö±wô‡ûHšð휑ʠAµ@¬ZµnA«âÝ„ž‘Ó”ä¯D !ÀD…1ue“_[#ã›QU„P—]ɸ ×JqŽSÒúõë—/_TJ/³ZA¨(ƒeëÕ«‡“Ãxa{Ž<Þ ¥[Ω—þlÌ÷ýÀ—œÊwzh„²êÃŽŠÅ"|L¦ˆÁ{'œv—¦â)ôã·Ä¸š“»¦­«aÿ†eL&Ÿ2CVXö~«³ÒK·Ï«:¤á‹­†íJU¢Ú è­¼XÁd…ê†QýÞ\õò‘†¡ ÎÐG^Ü1ã>Lv­â¦b¸6R™UQE- ù+(ÎÐôÔ¥àÛÇ|ç^®rX©†ÅAÙ÷ëB€Äj×®]¥J|´lÙ²`SL[1OEŽ +˜µqãÆW¯^ÅK×ÕÂõ¹Ï^õM°)=N\­q{ò¯ó¡ìšßðÑY{žY›ÂÚp=ÕSüÄFõLlƒ'6îUùw·ÈöÌÜ›OH=š3nƒíÉ„|[3×Isí$+ße¥+%!U ñ÷Wè†á÷LÝ`›˜ÃÀ@ñ]¥Î¥_ÇÇãr·Ù䞨Ê'iÜ«L–Š4%ô^û Âõ°SØ=yTй_ˆä$Õ¹Xœ„ÊsM'‘c´j€ˆUTît‰â´=ûM¿×Í«†Vd±8 €1 Š-† óTÐ*„ÈÁ©ŒNƒ}ó ]ò­Åœ6ÔtÜžÌG·^…9õxSô°öDº)Τ“ƒó¼½‰Ã&Äåu\ç¹j¡+5íÓ‘| „ÃütW›­fá¬bK L„ê¡b¢jaX1<ÉÊ$¸6LŸÐ茜¦=&•ÉU·×÷[]’w…‚Ë©y×çëöÌ«íºÍ ©¡¾9ê…BÚ‘Laë¢ažé:Ä–Ú,ºI“uÈH-Q¨ÿŠ1*þÃ$•f«Ë™CF⌵€hE3ŸþÅ $‘¬š A)ð†v=æQì—(@$oºù$“œš  ±Úxméƒq.Œ¥jB€W rµ@÷¬jáQOªÿ˜U¹’´ÈD$ª÷¬©/ª¼•»±û-û%ô‚Œ£ ¦†©øe|4‘®/ð$Š{™ z™$9A/s@2žÚÅ$U°ê-cVÉ©9YqÅ]Rd ¤¨]E IDAT}¤HßCßD Þ¹»H‡MâŸ(h ¢ÿn3ÌÈ@©88Æ)Ë"M«¢×Ô_ãÈEÝ4 ð謯¹ 7 à°“·•¬7š²²ŽÎÃ8 L·*@Š?Ü HG+¹ãUž£ ¤ÜŠ~d™é›…^ÈRõÖUè]Ö ·.–[Ð2÷ºà¬ üàT¼ê }ÃMbÁÝb8Âmcx ÇéÓ§«­˜l¾Æ.ëˆBXH»ÈErò¡Ä‡¡ÄÔSäÅ ¬Q*zÉéÿÙûÀ(Š´íšÌ$™ÜHÀá>‚†•p+ñQ@–ÃåpE–CW.Wø ûÝ\?9>u/–Ë]`• Šä” B¸$9&ÉÌdf2ÿSUÓ==“IL&¡ŠÐSÇ[o½õTw=]ÕÕÕH¦]<Ï‹ƒk¡ó”liše|ŒÕÄúŽÍ›7:t;©âr¨H«žPY*^ŸÀ†éÝ»wê©§ø¢•»4 uÇ*ÅM›6ýòË/ž\wœ ¨;6äãuÇsDÄÜeÝëWvÔ-…s@yrÖ!îàÔV­ZÕl#átd8B-÷Ô‚h't"Ø ßÒ1W³µÚÜŒNé늸ú,V ¸‘²#¨Ri =—𿂃Œœ”Œ<´ï‚SÑðº1Î( ÔÖ­[?þøãx °qãÆ˜XSbå!~4'öÓ9uêÔþýûgÍzåÑGyúé§Á.wl¯ûwß}‡¾ë±Ç«/uŸ9sÖÝ×ýŽA««Œ2•Êsue /÷ÎO»êÛ:£ç<:[Tyf.à$ÏoCÉã¹*®ƒ+ç°"•á¤^YnuddÍP‹¼üXQ§SLu‚¼ô*$å r”^QØI¦ ÉŠyï8Fi‰KîX³{2Â~84e¹Å‚?ü§¼H9•Q#cQn Ä(Ë2f¥Gºð1¶˜©áSÆH¡!*좕ÜS­Ú*w“~ø!6 ™1cFß¾}9•zr»GFFvêÔiÈ!{öìY¹råÙ³g§OŸŽÜ$×ß\žlŠ““^Œì.·nMr§¢†¼¶JOeÕæ’Jyþ=¼~øýáÀq|JyŒ¬\ÖpK'äB•ñ²6e*4+enË[y«/\}ÉÛ²¼âЯDàv•Ô½<¬g„j±˜%NÅÈ—íÒ ’²*%Oþ_a/½PéÒT–ÂÔ‰B‘íÎOEAã©|ôÑGøšÇܹs£¢£€nBø FgÅ=ÏÑVa77há=°sú¢E‹P…?ÿùÏ·K«÷rÝ=¯a«k?9!-{ª›³äÜÁ©ôt¯àèEà*^)€@¨xuwÿþ÷¿[¶lõÄO ¦â$¹ƒNx”Jàçݲ¸Š¹EéœD°¾ ÀCTú~À0•½NÏvÞðû\wJg«í”RžM”^)Ó8i†˜E)…ê *®íÄõ…‡ˆ¸âfϞݨQ#†Q9½¦ø?×™ÜkÎ:v¨(°C·Ø0'Ä¥&FÖãáâsãŸûßþטÆãÕjÚçÙu¯´5R÷Jµ×‡ À»}x`/÷וáô…žÚv8ËåV‡‡žõÒ®R·eÿ…12"}âëíK–,A?øòËFF©ûã¡-#rA2üÈ;M~D^(޲‡ZàÏSùÑeRm£$ô×"t’—59%SêÐÐ(4ÓIrtû¬â•‚¶qž1Ö„8ÏB#°2Õ¶M¥tæÖ¢ñnT X°z`×®]>ú(>E  pÙœYò8þžýyþŸá £F½¶5KW‰¬cÎ; •lí?°ß×'ÊL%€ ¹©üˆZ„„†àðÏ?ÿŒÕ…¼­o‰âÔ½B S?~#$8˜Cñ~Ê)G3+ˆ×DDÔý–àx²€Ìh}؉v„«CƒÝ1Nåõä•ä —/_.,Ò¡ÿrY{~ŠÓ%0 `ã·ßbÝÝàÁO]¹rå·ß.y{kПQm,':8ôM›5 © J/§:yä ·P¶³2-Yº-Rfi~ÙSïª ËùÜ ½£ “ì„Ê^/wò?6ÃIEITrð#;›ú•®Sùf|lû¨½Ã“òÔã_\q©©©X‹ÔµkWtøƒûÓª±êQ€]aÚ²6OÌ6™Ú½³âë^M,'Óvò?‹½üÊÃQ¾lOGéY¼,=5^å TEôa7mfê`¶¾T#>TròäÉŸ~úéÉ'Ÿ”·©«Â„Û­{EUç7½54é‹!³?}¾‡ïÞ•Ïm;uíÏ·T+쬘åîcj¤îwoFj@£ó«l"›HÙïf;8Õ©z8w±$gïï;X_t]ããDø‰G/^©OC._ßó9—wîÜ9n܇ m40<  ¸0Š ûaËÆGyš1ÏãT\€¢\óöàe^øœR’”Aá÷dl¤ 2esèÑèÔÙ¤Âv‰K+P#mfÆÉÈÅ9Eb6V¥/SÒsÖ“«_MÛpJãµ1ÌúvìØ!ËŒezµ· øÔ_CK¯>wí_³@¨m—ýôݰNA¸„ïï7ú¹YFu€ã[Éš Ð… Õná«Æ¸^Üô eáÇÓP¶ÝUèСùsçP©[¾]sûu¯X£â½ÿYnî1ï_¤öêÕóêt³š™ZQ²&cî¾î5iM]èÂuŒb=§CvºHjeme¡Þb*W/_ýó!^>*µýóU©}½4¾td_ÿm)ÿjҸшÑc1)çëëçã«ÅGgÙ_õõöñïâ¥{\H\³¬_ÊžŠuãs8Ê.#g‘=óŠ˜z…€ÌŠð°»6F©”ÑI#Æ6’euâIìÈëˆÓ€‘1¢ü Ç'ˆé0¥e¸z…F¥Æ‚~p“Ú¼ys(fÁAQúR>Q‰ azįâïfÆÖ·[ykþ£-½ Ò—–ô†rb5A¬ð§Ïg7iÙ8²qãȧ—|¼˜ªÈ[ÿʰ7þõý榰¤¾K¾Ïdñ%%y韽9¾I.?ýÐu :¿oۦM"¡aÈœ½Wò‹YÑF¼U¦/Ñ;XËŠKŠñ¾ )3Q=<3B°X =,¯´ÂŠ„Ûª»É_¦-'û޽\T‚‘²Áˆ{Ò¤¢3½8ÌVµ±svCE.}öâÓ?ݧ+)fyonL6ná÷º¬²¤ß¡ÊrdÔ]Cýóâê£÷XŽ{’Ôá%é&Nå¼Å¨?®Õ’Ró•æ«ùÆìÆœ›Fx®á¯  žÜãÕ›ú£úÐ/‡÷ïüî_Æ=iq‰ÁXf1-zƒ™ýÁcû3Is²g?rA´d³|²GN’=r’ìáIrPöpUõït;!@3NLÛ™Ó&Ò(=ÊTKSxáò¹ $R"ÅöG…„CõÀ@ø6Vhh( ´fEåøu+Wé0o„Áaÿž-‘¬ŒgþÒ ×lÞµkËÛ£ö¿3~óU“ +®u×~þüÕ±ü.⟫¿xõ‘ÌwƯ»Œxã¥Ä=6{ÙÙ×?Y·cÇ–}6(Ä«¼ô̆^Ïü¥õüÕ{vm|ÕºtØÔ¯ ÊØ3TzcS±8 [iÐ[ f[m»¨ã‘0¾J-ßpWÑJ·[÷ õE„&á™d•êßÃl»ð«Ÿo¤'¾¥åÍŸúêûí©_/~dÛ'ïmúÕdnøÍÿ|vZÏdröMúhOçέõgR\WÙUaʸ»¬{°Ô‹$œœÜNåÜoZî&Nå5ä}Ž˜¤-5–瘯Yn—ßЙK,þGîZö΄¼B®L…Ql‰Y³ñ«Oî»/æw }ò J½}ü²³sÆŒz2#ý†§¸¾Lè±bk|o:9”È‹s—Gra¥Œ2ž§V”qR%‚õ Ê|`BÛÄ-mzz‚ØB4Nv4D›-¦I€ë±PëðŽX6¶¦<¸00SÊ G«Ì¯Ü¯8Ò› ?,ppáBž˜:shÏvMšDGá¶äH¶‘ê2c2ô‘·÷5û‰^>1ÌZ~ ר6žÝñ±Ù<ù‹å“ÿ]ëÖz´s?ïó?¯5›ëÞB¥mÔã÷£Ë÷oÉ2zAƒš6 Zc³Ë^0eæÄ)½j4àTTŠ6ß­ÜmÖÝ^´ìkôà§®~¡'YüƘøöS·gaî\£ é4aæb£›txðÁöVÐ>ì»ÿ÷"Ö)i×Q¥Œ–Y,S‡õjva¯ë*Ëú+óÜ}Ýo…§§£­åËPöÔ•ÑîxžŠºñ[ Ô–øpŠLÖk&•±L£Foe(õýíBö™iW.é´tñeÖ©ôC;7¼3bRPh 0ûäÝ(>rä—kyºRRlÆ5„k+þ|À©Øm”]68rLå Jç‘<†ÛPQ†‹Uln¹l¶$ TÀãxŒ”κgÚå4Ç¡«U‘,çŒÊHÑyMh Gi’ N¥*"‰Péba Ѝ þK-L™¸”QÊUÏi±ˆÁÇì"s*ï­PS>€€\K/ ½#Ï7Zq%VXˆS¼÷ß<;ûS‹¥}‡ö¸6 êP©ÒëÉ„(oš¡Ü@HâU>h„E3$=ŧÒ÷b½ÑøÄí´8k{Ky¼Ȉ¤âì)‰"æ1Ûé­S1ŒƒGhÒk¯ŽZúáûVš{~;¸³¯º’*ËZ+õÜeÝ+Õ[€oqx`5÷וùî˜ûÅ).·ºìAeЛK™Éj²xéõ%¡Ñññ“‰Fk.·šÌ¦sÇ¿ïÙç‰ÐÐp³ÙŒð6,¬ñ›ÉËbZvÀ¼´/Ä}h9Æ©¦HÊš¹‡J//V:?"IÊžŠòH’ς汚õˆäAžj»|i~[©kT'k±! %×Ukß3å{¹®ÜK{e8ÎàJ p¬™à“O û{¬œPѲôÖöÐTû¡¹ÙŸÍC5x0ªBXÔƒ#¨Hžl¤4 òxmó'ßûk_òõ¬¶Ó>˸’o0_¿|"eÑÿ[ûkQ™.ðƒ¾8çȧùÚZ^Tl ÈEgnéŒ,ulšIeÕhB»>9C¥ú`ôëŽ\ÔäÛ·7ǤŽôœJõÕ”w¿¾Rd2òOÍ(´Â:¾ÅHk¨ì(ß ðŠðJUÝ@·[wWEv}ùÉG±É`,<»íǯ­ÖÖa*})vQ‰ß¬˜¾·|÷ñÓ¸¿€kÖøɉ%‹×µŸ6+!Âè•TÙUQ•ÇÝAÝ«FÆóSÑvÜHt·ðH—tîN•ë©ä$À.4š¬e¦ò23½£Ô†´jÑå÷–r¯r«¦ ï7Ýõ¬½Ÿ0Q¤=˜Õ/ xÈï'†7jŠ¥‰èå0»ªÂ6/´Óä@*ŽÄþRdd“?~ZÀaƒ)gûÑ‘\‘Î2PŇg’ƒ4¡‚»°oõÄÉtÇ ¹ t_Eû^M5!+Wˆ#b©˜Ü9ót&S¡QcðVBÒ‹KUFªôa¨4"’åèÙÄfzÙ^KôÄbwBH§9¹•J0ãWIwCùÅÓGlBÄ¿!Ó*µçÓÿ• ?}úfçõo=ú@û˜˜ØNñÿéo盄¶HøÃ+ýT¯íѾû“‘óçôõÚ72îÍ‹J£|” …Z¿@ÌýúaØæßúíÓ?Íê·õÅA¶i×ù±¡ËòËÕAÿpâÇ#>Ù£CK(~øÉeÙåt|ªÁ§€Ø8Ui(†9×ÀjÁ`8¾L©:ís›uW–oóy{ܽÚÇÆÄ´ë;çÛgÖþ2¯K`ÈÀ—?ìâõÙ“qz¾y>ùõ‘ª•/ ûø8­‚ççæ= Ã’žï‹— "¸’*»(IU#u¯>+ƒëW'ÌÃ+)wrŒÛQ€ÆPd”ÝQ]ÌÝ<²lÜkÿýêû< qÔCMb J_”c>v±)€”hiŸLßì“elâ§6ïXx3± k/ʆ¶†@¹t§>ÌCåÑbì℟¹.ÄÐA)ýÏŽ,75^Æ ÉðJLLLZZÚ}÷ÝÁ)Š}PST¨¯OÂø9‡FMÏË+6Y­¿ðÆa~W©Bÿö}áëùÅÞ¡þ>^¦ñStÄ?"Ø¿ãÖâIX“Ëîgº<ÿeÉs+ЍÒûþö}ñëùfµ6(ÈÏ—E¶îûÂ÷ºqùÅjÉ$ý&+4(A{¡õ¸Ãm,¦µpgðÛo¿ÅÅÅ¡R®,Wæ¦U»ýº;h $|ÌECëMmãÆáx€i{¼p¨ð÷ùÅ$44;Ü}£<Ï—]ÌÍ~ù`D²êVVK5Ñ4Šhä” ªhÔ$€Gz7jâÏ}ÊG›PäaòMð"뉤DRPÕÃQ´ z<–„™™™AAA¨uŽj]‡î¨îŽªÔêFMBªB‚4i¢¨£#L—‹*;–Qiènê^©Òú€“ŽA*ënmWyÆÖn­ìƒåÚ+‡wU8¢~äÚ›1Bd‹v‘lûEÞ¸Ð:¶sdÓ  àÐà°PÌú`&•Ò(ËFóÁ±#"eÍJý„ þ裗ö¼µ/>¼ei¿ù3þ4ø¢‘Ó¤×Ô“W .ü¨^•´ù4v5íH~à¥%­¶d\¸zùì¡md›­ú‹;‘WzµÄÛ;t ºTÚ©Úz^´í\E‰–Ž?ÙÙ*LuÉ9ìye1Oö0Ó=Ù@Û¸µ’Í~Ö*Bˆ±£mþ—½z!mîkkEI—ÜZ¬­{ÒÌ,?û•üR†ó‹Ž /§bc›7oâ[Ü`&\dü¯u„©0Q>œ››‹í Qå”`µ¸—ë^,žŸ„çFV³¡k»FÊ;ÅÚ* }¿,å.Oêõð¦6ýC:£%LÈa¨jµ˜ôfýÌYóÿúŠÑP¢Öøà%Ô‡Ö¹k–2aR—.as¿S¢U¨´9^ h,"ÖŽEì<9¥ùÚä_=Þì·MHµZ};<søûÕ뻄›ár 1_Þõ)yþ_SãùX¬¾¡Á”º¹ƒIÅÈ‚2iNÖ¯Òn•zcE,ü61èRÄ;† Â{×p 9ÂJœ%üù-ÎG$Ò8ü§UúŸÿs°€·&däfå¼Ì´8H6˜FuQQQ ø¾÷×_ïºDGG£·ò|fEƒ¢{Å'ê6n܈»=zÀòêìô+·Ý½\w„úèáç'¿¢ëüDu§Êíī͂ô ÜHǪش„äM†FQodÿº-u/¾˜Å¹—3úÜaXCÿÓ›!Þ8¶¼œDi$³µoOÚ”ˆlÈ­jÙ²%æB;öÁ´k×.>>>66³Á2àÍ*Ñ€J³²²Ž9‚)_ìWܧOì°ˆ¿²L5=rÝÓÓÓëKÝñ‰lkŒºŸ:u [ßqÝ« ‘ŠÙúWzYÒ ¶n›8UîÔÚ”»àµX¼½Ô>k¹¾[ âÉ&±tê÷²·Æ˸´þ!çŽ}›¹û½ûZv()ÑámtШ··¯Ÿ¿?¶Ń¶²TH5J9¬¼C--³>ð‡‰äŸ¯ßnc4Ÿ`Ü«;wèkBÖ>?¼­yo&!=ʬå^1ƒ_$£æ­þÀŒæk…¤IDl†+·ô{eRòÔ—~zuÁcQZd½1ëjéÚQvWÀÛ%Ñ#YÚ¸Ìxè¯4vÝžjµZ:Z úY‹ÑrxyèGÑ#k&î¥MIY“å¥?6-T m&KÒ¦ä9hCÒ4ÆeSÕ€~PuP –)á›e8^¸p"-,,¬¸ÉGúGoK0áÉQ²pE¨¨ ÅÕÖTRòÓšl¥wÐLFŠÁ¯Íqƒ±ÄS|bÛübõ2ôº»M§¬;ô\¼xqË–-x×€÷0·©¯ÖÅa0nxÝñy;´‡ßYÝkÝÖZ+×;ok~áßA»× inâTe…YÇG¯šòr³µ[7\ÍüÆj)Žêð´`6ÄǛݳ¥Ü\†wB­D}íRF0}ªÆõÕ`¨zùRÖÖM«îïþp§¸žØÙŸ™¦W4£UY9ï‰ÙªnóÔæ5MCèa¦—- ó±vyêÿõ3ªc$éøû©#;¿=xVÂÙÏúŸÃó.v¬ËÿÁ°Þo÷Ÿlk”`fhÂË«þNƽ™ôîŸGñËZº´!kk>üPŸœ@Xêkõb½4»íë»Û¹&T[Z-Ou¬éaýå?ÜRb~[_:Ø|øaÒ,=ex^*Œ¯-­1þ#@à d ìUE¿Œipp0ºiL¥â½ÜÂâêsª3ƒsçíÓexvZ¥‡Ë–ƒÎ1\Ù¯] —m'UÂÚ‚q@ ¥ B[€Ç± Ï–Lûq꥿¼ágM&5û•™‰6ð˜ ý5ƬúàJƒ¾NuF&ˆÀ©:NÇöüÖ‹‚ÅNy†%ÏŽg¥z91av„SÂä˜Z ªÔ*+þ(­r ;Ð&ü…\¡ü"U$Þ¡zÀÓ¨>Þ)BÅÑ_W¬ûª®Ñl¨;Leï/ÝK§¦C´ jŽà G×ac¹ƒS•÷wðsGŸZÒq*†£¥Íº>ÙvPÁ¥=WöŸ;¼¼Ü„­Ñð©)|ý û—y™Œ¥¹VóŒ)ƒ€[HhDlÛ¸g,ˆ‹ï‡/ÁáCJx b¥OfÆ©¤LWTÆ .7l¤[VªãQ¥:º7“®¸¹h4»Y_¬£òf½Žñ©d)ý5áôÔ±¯{ÉMâXþJ~¨c^),ËWèäá¹35z_z`Žvé´#¶õÙ²6™K%Ñ…ÛÚ%³r™¼=ÈDx"Òð³æeï­VDÍqÀá «S0‡#^€Ã8Ì ¤8ô€ äÇ‘â2£gX'=4…×Yž‰Q}¤âc¤xy네“cmE[É)þ.ƒP‡ºß¥‘½ö@A9¿ìk¯”êkv¾HªŸ³ú’¨-¯¶2 .:N-·x•ã{ˆïÀ&†Gu^n*2•^/+Í5 ,&|Ž&à·“[Ãü¦ü¿ °Ð°H­_†§¥ôƒ‰Süo IDAT…¸Ö°¿’ûèS†v|žÊ å@£ôŠ6 †Gâ&†AäæáY `·™±/âáh$ýqHgÝ‚MœË ³|‰CSM_ïvÓÜàsªªJ¬NÜ*‰OäJKióÙÛPn*B…¹4 P9ÇyËáH› ÿé‘J°¦­×MéXÏ» ;nì’€>zªS¬ì)¬xPY¡h¤1Œyt°¶£¿4†ê¬*wu"âž@'úpÜ÷p àuæg`ÔßMœ*×õdô ³¾fF€^f/:­S¦/7Ó]Fq/ìÐÌ/¤æ3 åëVpã²F$¶}·ÒѨ/-)f—vSÂ%>¥Žëg$í,Tå ÷nž ’Ge19/<²Cªì¤“~åG¢`‚cj= µVn f$·” ’ÅR×lï”Ùùî™e¥b”Ti«¤Ôl´gíÆ~)O°öfã)eß/t/ÿ*ùŽáÆÀà7+Ü+ù¦ gG¼\FÚDèMeùµˆÐ½‡€L¥2àN•[}z%Ö“Ñ+XàÝÔ2k™ÚB°]™…nŠuHæ2•—%f{0›k0½|‚o\¾v=7›db8ŠnŽ,¨t# v!O•Âà b MâAn —ä~ùX®VÎ"=zú&>7° Ž CÖ‘ã]:9oE=r’“Jxш¯hbàx’SÆÊ"ÏuV”¯/1õÂ~~¦HíáÅù@ûaé¼ ‘¬ùlRij±M¦s¹<“MÙ¤$2p*e¿6B¥1Ò`•—'ŽŽ»Ò¯ŒA<½PéîdŸýbgw7Rºô+ËÉùœc$Iñ{# _ó|*‘u ö³ËýฉSyÅ8EÁÄœª’+«9¦v±j {£,^´ûb0´ê´¦Ÿv‚l>ÀÊ!FYðð¹§b< •MRúå¼ð(]eF*ã!¯ Ö;5í—ÅàQë†úÊE³²l!FŽ Þ”ì ñ BE í éGÁªô“BRNeRܬ±ÿ,ˆb%­÷â¯#ìlˆÏK)ÖùWJph .D£¤›ÜÙ¸äØ6‘Κå°|Ê1Âs—¸nñ»TZ Ùå¦Çå*«¯CãÝÄ©r eí³$Ð]ɸp,Œ@“=ôöÅÆa`S$ñœeøà.‰£œ×Éã”%åxÄÈ‘Jä©ððâdáïáuçÍ„ÊV¬>ÇD†¨¶áIű†á[ÁRÎN©ÝhçNZ&I;s ?á½29øm„ÊOPixŠh–Ã~vñ`ƒ?J ÓŠ*ýöŠó™s¶Å#CUv²xŠCÎÿarRØ4ñ ÈMF§l9‘NËÇ?~Wd7€ùäsÒµ‘NÒ"X=꘼é=ÇTwpªÜ|¨6íÎä+FJà1üÈd˜@¢˜þÅ&a‹/ƶ&ðóAª¬Gö@Yeút*³H&PžàÙåÙƒ$8®ŸGrSe{Ä#ããT}ŽSdmc‹S%Úûg°ÓÍ£ƒ—±*ÝùœÀdè„/zJS¥³Õ¦È1û=bº®>‡ÓØ×7 Ub ?¢ävÙƒ2|\@ÖF™SÎH}4Z€p“M'ä¬6M”üÎÉ"\ €Ÿ“GRÂÕ9ÕI¸®‚0ï^|?Unyn¶²à8Ê0`–ßAä— â¹6~”ƒ\^Ž”³Ã£Ô‰piƒ“ ôÈŽ«‚ˆQªu *“ª¿âU‡šòKÎÍUfMaëj•E#^1Žq@¸bÇÀy•&Ñ4^ê“Z›žÊ"î5?­?‡Ûˆ:`4\±œ ÁâaŽ;“¨ WLv=¼tJ¨ÌûŽ]š iur*Ú¨ÿ>X±˜Dïç±ØÊd#+ïþwŒSeSòVUå°R€·(¿fxª,S™Nùƒ§,r^eJî‡fYÀ­^½›‰cCm½^otàæ2J% ÛÍÄñ¹§:âãÕø¨–SdÑXhD«!¹%x Ý ¿ÎH}é-‹·š豯¡5\«òÕk%Øg”ÞÙàÂãäŠß-)³c¹º±åê}át³Ò*,mW8ÕLÂUƒ¹@¾/?6åÇo°Û3ëÿ<—VaïðQG—·Õ¬{ˆ¹ƒSsrrjÄV7+A Öd}t:kœgXrŒH´ú_Ä#ÎÍVÕaq˜*hÚ´©“˜oÓ¦S¤'q냛¼Ðl2™1—ËøÕ—n±p+À—¬ç¦Ã!¼$/{\½zµmÛØ:¿&=='€ŒSŒ20Õ7t%¤µŸ¦Y)2R¾•ÂQ>{\NLå$¶))1Y½½H8ýö>Eeè'‰ n›,$&’`gnüúˆ!6 Ѫ ôÖB“º‘EÓ"Òí¨,ÚÉ_ñütÁ["À9}h•ç>z?O¦Uùš•=·¬fí ¸ƒSk¯µ§ô‰Ç·XxŒQºgŒP‹ŠŠp¿âÃOˆ¿×8õäÉ“ø–àÀO»"=!¨´ ­§+.6ðy•ÖÏ/(0}6¡s Ör?¿7nÆÆ¶Â]¹'ïi6ètìó•˜Zô+µx«B¼}Õfo F©ÄŠü•zoññ"Þ˜À›éŒt1¡€_5vá/Ç ñ6c×R«Æ›îþBÊI9ªˆ¯YåkÂ×ÌnÁ©ÊF§Å wû€Sáð1"p*ÿ2üàTDzc¹¬Î@n½C«ë¡ª;8Õ% õ"íÄN0úþ+nÜ0”Ù|ÀÊÇ©àÝzQ‘1„Z‘rÀ©˜ªýµ§Di!VÂlÜVƒƒCð•P44æŒ[·n]{6ÔkÍ·äÔ ƒUkÖZˆWž‘V”>•Cç†#?À£"%˜Óñ"ø0TF¨ð³TˆÑp^¤˜FZ½4D*E ‹ÖS…V­Ÿw o@p°×#®Ä)º} pQdôxœVÑé¡ëC÷„H«²I¼7­rf½E=k-Ypj¥Ð¢©øtH§o'øqûBÅMX·W©éµ“B­ø¼ äNªkE«ÒÚ¼¼¼ëׯ_ÍÉÆ«¨Ý»wGËÖJ‘õ_iÕœŠ Á‚­»/g””–à«‹¶êrÊä‰_e$脯S)½JÙd¶\Ý4g :w‡Ç€²qSD¨ºð~§U*F«|¨ÊûC™Ãª«±–åÐ s“`ž\TöÌ‚SåVpá‘O/ÞBâ<“Ÿ¤"’Ç»ÈÙ£0NÅ“§š!²þ`y»víœj$‚¸qãFÅH9WF3áa¸4äÈšõ`Äç!«îÐëï©X³pÝ6 ÇG¥èîà@¨8‚eAZHº嵑—›ä9]±àÔJ[M…vÂi„#N)álj…7ܘÃ!®Òü .ýfÅ穈±\S;WkUœ£*„ÝÀg·ìÐÅ©X¡Yn; á¯ã=w<uH½m¥µ™ö`i ÌCŸ,—S‡F6N5§­_[Òcx¿ûj~âŽ7 nÙàƒ§x”*ÚïžâTL‚Aå³–{‰¥#N‘"ØÀÀ±^ÔHœŠwßLèè G°ïô8›ò O½ûRjPƒL¥°°ÕÞ±*áTC濎û“w›Óï6+cøqäXþ›àÔ´÷TÝ û¬s{Þ¦RYFùâ´Š6ƒ‡óè=ŦO Ð+>qä[np!_¿@+× ƒë ÷{>˜¼ëÑ;NWÜïÆs¾ç}2Œ¬[ =…S³w®X$æ.K{­_üm8}»âCal7îdº¹I5Í\>¬ãŠaúÏ£´*2òÓ­6…f™JeO5‹kb| È©"ˆÄĸS¤60ÀUX”çá•§b 6ÌL=5XJM©ò(#=„Só×'ÍšœLæÎ]ùûñCb€uæšY ¯÷éuþ ‹ÒÉÐäßΎo¬qio—«{—~XüÂÒçñj‡áÀšô;—¦ ý²hó‡Þ›ôHÒ*„LþdÕGSÂ/®é8!…?ÕÂ/Ó÷ô=¥È¸<¹ç„yTræ—_Î{>FË-ðXá#禡 N®|½ƒó[š´œïø0Ý©š.#dD°¾#€õÞX íáµ€‘üÆ×ÃíæÕ8ápZåC™bk¼ ê(ôˆ hCfÊŒôïÌžó—ä¸EsRò™á&Ýùe3F^êóenîÉEs»¿²÷É.#åz]Ù¾/—®<ÌÞ:„úåþ z}ѕŃñ,¨q¯—¯è­Ö›ûɲ©ëO괱÷'Ç’|2w糃2NØ¿ýB‘Iaر -gl” š2=77}fJÒºÜ@¹Xá4p7nŒ×T0ôÌzÂ0˜#=Ó3iP¶n%qi¯_ó~ùf™¼n\B ªC•]{µ;ðÝšõ.Ó-L Ê Æ‘­H\dtã06ÓÌ3š‘…&Ò,A“/ž·îìâ!(”Ìܲrz"†¿âH¡˜é´.|÷˜hÂÜ=Q[QÉz…”Ó*ÎRÙð:¤U»²5îöè,ÁTkÊÇÑ~~Ãg­ÆàqÁн°Ž7µ¶U¦ò[o.#+Œ½ZðˆÕ~¿ Kï>ï0øÑN FžLéìÌÅ¥(TæL¬ËСDüÅ5‹d²&¶KŒs6:A@9ë['8jç§·Ï}ûa Y|Ó:op—½õÍèAKÒf'zû§¼!s|Çaº«a¤Ë®"+˜ªíýÌL2hÎú—{è–—ï}uÏ*B¶LÓ•ìžCHoFÑþQmIz!¶1U<Õö:9}äÒŒ K»é6}8•Œ[×QKÒ+ "õì~…OÍ`Ûê{ê#r“á±+V°ãù«xŸUƤþzÀ©õ~jSóþ;vÕÌ-#8¡¢]£~n2IYúý9ÖÆ‡G‡c³…ð±éÉ'ç ”ZÝ9Ò—OÜâ--ø8oû‚¸‘q‘Øø(rÜ×긡 A=º¬Õ¸¸¤žÒ $¦÷è¡$)Z¥Zš¡“3ÆŒ˜Ÿ2ûL\0š)xä™ÙéKFà¦CN…R ’-âW P¯ÀòÝKÌáË}÷&¡¢¹PqTŸãàùë™ëÕùUÆŠ÷S@oüºÓVDÚKYLÚ’¢¸‰‹M_ŸŸ¯ âj²:GNMµmfÔujª4¦Ô&¾¾Ò4ýc½É;(ˆ>0}}‡éEžmdNþØLã¢7Xõ: Â.¯]åŒaCþ¾Ã4W'gDÞ®Sv³Y4åØ=´q’SSÕ› 9{㪽ݞ5Ûꘅ÷?;¢ö)©ªÆxÈtùòeÐIåBÆ›7KˆÆ7$8 ª½ê+ϯH±œøa«¡ë£ñÍnãFÔróÄ·û̃ÇÝFE‘.¼æÜÔMG; zÜ¥¯ƒ_cbbøü¡‹ì"ª> €'©hAþ ÕeSºóñjS+o1ÃôB<ÞÔ„I„JE]FV¢C£‡ÊݪFÚW9RK µ‚sÌX!YDÔ†´ñ8ý%—¸$­F´R%úKC'Œ¼Êfø«ÔY¼X¥JÞ'«¸3–“ ·ÿ¾—VmU†ß`a¶Û_øÄ|o„j¼´gz—îýáz't¾¶ â­U9Ѱÿ•¤ƒü;5rÜ­<†«ûßJúE¹jáôÚé]*¸/NT\ Q‰ê²«ÓÞz%_¼©Äª¿¸^I>í`7¼É|yßäN¼r+ÝÉ©uÿ<µ²–‰ÝÅÐedeD¼‡#€‡ÙÉ[ξÖ'\o&?Åsí»´ÛÏP‰Ãòa~+¥ï˜Ò•À‘t;)·ãWÞeÖøiý£ï,²pçk½Y$?Á¨¤p9Zãó0yX¹Çƒn¥êwL®™ºcüÿN )É=wÑ‚›Íó¦?½1ñðÃîhÔ¨ ïAnÞf£õÃÆÂeÊ!rìÐy{ZÔ¾êã_Ž_@’–OèBŒu]¿_-§Ö(6À¬Ž5ÇñãÇ×¼A’ßÝ þ4›JvlJž¸)pË®ŒÜ1m3]WxàÃÇ’/ßvøØgsžé!¡¥Ž¼þŽÇïz#t݇;©˜©äʺù¯äôZ³kù3Á7÷<ö\òS+¶;öÙ3=äLRfé×5Ëž÷“ŽÝ¿åÀ±Û>¿òÖsóSÁ 9&Ž9Ö÷óÇm[‘øÖs¥æPþ®Ž»8ÕÑ!dÜZ ZZZŠ#ˆ÷FˆƒGN®° ÷³ð»Í8Á©nƒZä =¦úˆ‘Ž2ø†ó°á†Fƒ 7Ȳugm¯Û2Úg ÏãÕª+Óc£Úv@"hæì_摸yúi5ÚO³Íüj¢zuñO]¾tåOç!CÙSÞ"‚D4ld[õFU›/bó&Åi‚bç.°ì‹ŸiÉJ¡ÂU8WzŠ/¢†½˜D41ý&|GÖý|¶ µ—tË}û|[ øâð¶^i7Ú¨noo."¾aáÍI»ðÈð`_5ñlׯïêæµ«ö^!$”0²ÂØnÒŽ%ãZ„G¶ŒíÑŽ¾ž³óSòÊÌ!Í|Õá­zl‡¶¥.²]7¿«×®úYI#Dzb2éóÇ…äžø™WFÄ7S«Ã{?1¬ÆÑ’½}% Ñ"@Ð,aê=Ö}“Vš“ñ)i7stBQ7‹fn;ò}Úo¬ü[n έU ·#²ÄÃÕ«Wù ÿ²5ŸuÀÑh4"ËñýWwš&8Õh‹²À¤ßè&yþù)S†Di\o¸A3HËÈŒé¶ì àf‘ÏAÍúbB"œ6ó×e,õos,°Óãö‰#(:åú¶ÅZ8­·íÑ4&eàߊ¥Hò•ýºÐ£7ƒ!†EÕ]=Ë­7ômöø ó÷®KÖ%Æ$-˜Or§7¼Ñ{Ðg¤Mþ=º‘é‘g»þ?Û ÒbÀ½ˆVù<ù‹6Lï6è³SmúôéÑÍF³odkA:éÜ·籵Thå¿fÜŒùhl±\&ƒÀ†Ú÷O %¥ÕûF:`qs·[y½DÊm À×%:uêÂ… ×®]ËÉÉ­rN…„ —™™‰/Tºó;‚So£ …h#`4¡oäŽm¸1ƒ=0%|ÃqØp.}Gz¾Y·{ÉøvzE´­·eŽî:”¤.ý:ÃlÎßññþ<õÂá-„Ìž8¢_„é†DÇÞÑ$µÐqM«¦ÍÈqdÆÂoé²]]Æ3RÇê'1¶C)¼¬J®ô4ŽM˜LR~Aug~;5•Œê×¶R µ™€›zlŠ[y Æóé'rKèø“Õ¹]ˆVíCN3°JŽ®ØDÆkΣ“·6¹ÓŽúÔ‘Ýzù_í¼i±\:°.ù4{žj¼ºc²owîtcÃ!dÛxrzþÎÓ7-%—¾Zèü<Õ±)¤¾ï‰§Èü;éRÉéoæ|ê‰îá-âF’ƒ+~¤6•œß™|<Ñ=FÊPÕ/6 8UIˆ4Dwà~H¯×㑸3//ó(§"éðáÃàT¬As[ §º jQ3xžê+‘ærÃNƒ_ŠK™îü׫‰3ãlä]>ìµ]ßY—¼llœ·wø»¿Ú±ã€©ȘDÝ?0‘|Ø¥ËÚÓ¤ß+/“•S»té¶æ|t»ÓóßB†‡xÞÊœ4¾ H|ãƒë’úwë6héqÛ£QߘQ/'®œ 5SÏG?uúƒ1kO—h³q¾í~0©GÒðþݨôyªT/P=`Î×/ç&õ†¹ ÃOMúàÍÁ-iñê·ä&ÑÕN O'MúàëÁ-èã>’æÙ*–›UŒ1žf@«: ÊIœŠÝÁà@¨8îÚµëÌ™3Ñ̹­:ªÂÂB<ÎÅx™šå!3'|³²²žzê©;6èĉØoݱ=ÿ½~F×ï¨ÔÔÔN°_²ƒ«ñö56Ü …Ñ(¢x«ØÁ‡€A—oòÆb{¤œ×¬Ó™ýØêb,Æ¥÷¸v1æ3è°½³ŸòI«“@5ƒ®ô x½·T~5õÔ†®tL‘a¯—Ê%E%F³o@x€ýÙµ±ÄHØ7É-Æ @v!2kðÕµ³‹JÌŽ»F±ÑÍJð>¨6Àņ(Ú¬DeJ]µfâ¤Ö4U˜§Ð„ÅÍš5»õ”¸"‹ðz?üð;F·ä‰ŒŒÄ¸C·~ñÒ*è]ÓÑ£GAºƒnÙ²%¦ˆ+v_·U—M›6µnÝš•³Ê8øOåá$Åu&ûÚè!Š¥KŠ”ÛóºÒC·qUæíi¾{i\ÿ-˜CïƒëßI!^T¡cY;¡"Ý—*|x­…'©«æ>µ/^~qR-e±:'qPôí*3®¢>Xw M¨8d8‚P9þõñˆ¹|-)>>ÃBcIúŒ-™Îs²|.Üõ{ý2T®Þ¸wV$-E&ûŠÍ*^íwØ" IŸÉdÙÐ!ï,ßK¤W-äÒ…G Ü‹çT1Å phh(HTv°ÅÍ¢DàTÝ%óIù8ÚÏoø¬Õ`½+öÚÚEz°Ê_öwù^¿¢]¼qïðv=é;.ØhÖ|êPjÓ_õ«ýŠ-´#–êÓ·Ì:½ð‘Hï7ëhƒ9Eu…W ÜÛЪôn1¨‹~x”O Ã/§º §ºçÔsß~˜Bß´X½eËìôyKðî œÓËþZWïõÛ‘rõƽr8éÑÔzˆ=¯ÕܶРë+OáVöj¿b‹s~fæÍ®ŸÿtÕ'„l¾ê¾gÞö* Ÿ@@ pø¾¾8ÂñÌ÷^¼h[‘ÃãùшÕ9§æýw쪙[FÈ/]G=üÜd’²ôûs.^öwõ^?À’ÞÍwùƽLMÌôÕ³gôoIol‚ãÎÌN™O9WÊn—„OZ©Ø" ÿòß:bÿ•_ÜÔq‹?쮤k‡¬" îC@ŒbéïÏ?ÿŒ#¨ÃVÚÕ3ç>S02öè=äö•T|¯_™Š×_ª~sߟwSOü‡I3ËŽÙ]„[Påžðê¾ +k=Ê={>Ôz5D@ƒ@`Û¶mØêïÃÀ¹sãÆ§OŸÆû3C† Á–„؜̊·W±Ó^³¹Çö|pÙÆò ûÊÔŠïõ+S±%,–|Uñæ¾6¬qTÔm*”+¶ Ê=áÕ}Ç*‹@@ ¸×àk‘äZƒM1B¹bç‡sçÎñ ae÷xê|î×=Õ¥@ƒB@ù¬Ûèb»|Σ¨dZZ¦ÝO¨(Zpjƒ:ÉDeÀ½ƒ€Ìš˜à•9„Š•ä ;ñ”½ ÝYgQ–@@ 4 8­vïÞýw¿û>ý~ùn8ÊŒëΚŠqª;Ñe @CF@pjCn]Q7€@@ p'‚S݉¶(K 2‚Sr늺 €;k”܉¶(K j£Ñˆµ¾X‹Ä7øÅ¥7n`uv{ÀÞ¿øF lë9J{·¾×…UݦìÎ6έéH5NðSu[^t¡d®™5eÉú¥t<ºÄiˆy`Õ{dèìÙCÉÔ/RåïÚdXc³I5~ß1ý†«;ßúpçïìË™*Uâ¬ÝÙ4ιfØø¥;ÖÛ ÞÈ n§˜¨ƒ@@ ¸gðN5d¦ÌHðÎì9IŽ[4'…SWiÑ™ôBÛ÷O¯§§šÌ±ÃÞLŽ#q³·ä½ßQkÞúZôØý½Ï™Š.l??¡ÿŒ”Œu×Rf Óîý+g·$/Û3¹¾—’ôßHõŽîµêJ‘Õš»8bÙ_¿=©¾IòÉÜÏvôs©Ð¤;¿lÆÈ‹íÏÝ9Aþx==Ì™&¥.ž?wö_’É¢Eû¸ÑÙ£{Žmòåþ›z}î•]:+õ™‹ò6.cóÄÙ[£{N¸ý¬ÉZ´kØùþѳaºÉ¤KY5õ‘U0øÊºÉ)C×Pƒ…z„€GpêÞÈÐÑfCTŸ±$}Æ–L>–³Ãè˽šð$¢idcì‘o¾øÍ"²`Þ¤Ø MPLâÜÅ–}ñ3ÍvžÌÞõãóñQ±}#öÿ{zlã˜îŸ"1ªk/ÿK©K—|u#[Û8²‰‹Œ¦{êW¢ÐXDfoÿûˆ„Æa³¶Ù?®XEÆ%›Ì÷õ@R—mÉ„Ês{72ùõç´ZìÔ¤QèÇj0juù_^Ÿ”«!Aý&Ï@ý|¶ãó糯l€ÁQí;ˆó•¤yqGÀÖýê,™œ>Žö›¶Y±wÌß)tÒרŒé6 A;’3•"ÝÛf?ãŸ2$BX¤·wD)oÒsùˇ…O É»ælv5î'nP¦Í¹Vˆ¼q¡¡’Œü›ÿí{ÔèÉѫҙѩc×-3‡%û;`j×/ç%æbj»RŒš×”ó¶d°=‹ð @Eø¦¾Ø@übõ¯N§Óh4jµóC=TQ¾¶cê~œzîÛSÈâ›Öc€æØ±c[¶ÌNŸ·$-úIß‘žoÖí^2~†^½#¢Ija EÓfä82cá·tÎU—ñÅŒÔq£ú9 $+"g¸¼!…Ìœ:±_‡àœé7ÕúGµ%é…´´ÛQh8·ejjÜþ"ÙèBæ®OËí=˜EK×gàñª./[g&vý(B¢Ê˜>C ™ñmµ=sÓÒT2®gÆüÒ­CEÛEŒ@@ 8! ï’ßµkW¬Æj.€ïsÞÿýrÐ)W­ëœSóþ;vÕÌ-#äG•Q?7™¤,ýþ\§Á/Å¥L÷þëÕÄ™½R§í=a™Û_¥Ÿ¦Ó ù8=ùÊØpÀwlöº%cb!áK§vÇçOm³¨Ú¶S“‡.­R Êl5.=©'Ö=Åô=”$!ji†Þ¥BoÛ¼³]'|‡Ö, 3$ÈõøjüÒÝ$jÈ…í‹çŒó†Q‘/Ð…~ûíJõhbFœ\—<6ŽÚÞqä™uéK:`ЊT[5åIb‡BE@ dÐÂñ ÞCÅ6úr0>>´*3®œÅ Uaa!>ƒŽWeM&?âCtJ—••õÔSOݱ)'Nœ03ïÈ™ :=ÁGÀ2ã+>D£•¦N :‰øUõr‡Ìò\#¦¤lim¥Ü®BGõ,DÍ6IÊã ß.ï,fOñL_jjj§Nœl»«öuÒ%‚€@ ÚlÛ¶ ï¡¶nÝ„ÊèUµqãF|™ï§2¯¥"ß-Áakˆ#GŽT쾪]Ü´i/ jeçíí©f~Ä„3œò¡Þméw‹°F$åqû!û1tu¦\Eš+¯¬ïKéZ%kß®BI‰â—šíh£2$ :‹É Â#·F@˜rÑ^½z9s}ã‹H'[k¼k‰:Ÿû½ë€@@ p# ÏñbØÚ§OA¥|·B$É©îAHpª{p¥@­ FAŸ-Z´À„ªäTøk¥`WJ§ºBEÄ €g#€¥tÊ·«‚™–KÑ6rœêÙ-)¬ºFÄ)›?(+Oáƒb½-_{‹#‚8Ê’µíñì5Jµ]{¡_ ê'œ/A™üE•âââÒÒR,ôÅT0Ž U9× N­Ÿ-,¬w!Ö<{öìÍ›Ø^]Y_P)^ Á[.x³…¿ë^n¡ºóû©bœê®öo¸åà½Õ†[9Q3€@ÀC á–a%¥‰àZ8ŒY•‘nó7NÍKÛøSI·ýb̹i«~,{vLO—/…º Ù{¤ »|úAITS ¸Gð€u¿†´ñ´3—8þ´<ùS¤·×—~:rçUä1\þqÂØ]úÛË-¤€@@ p·x§b»y|ÂtûÙܳ[¢WÍ}õ«;ÜHÞ?Dú>Ý¢W|)ínÏ ‘_ nàT|n-2*¦qìÃrƒÖ@·f|"6¸§^CÆ”nSègj ™³gmܱfѾ·ñM%†ÝK§Ðˆn‰/MM¨0Û›½{i7&?eù&/€@@ ¨-<‚Sƒ ùÏÒÞŸ0ƒÌþú¥xÔõzzj¡‰O›Î¤Ÿ¡I3•žO]4ô‘-ÓÏæ¦¯›œ4ô¿øRZöŽäþS¯m¿R¤ß¹x`Åú³7F÷Ÿúνµèp鄞Ëéw¿…@m!à)k”¢[5mÖ“Í?îš›ÞÃÙ”++£ˆ¡´34Äœþí¼¸û£°~×!£¬.tÈwn/]ºyiò~rc!í®ëIl…‘¬CÀ#àœ ²4`ø˜®cº†$Æ=²âiëLTH Ò¤ÎÄfƒ™— hξ%#}ÛÛ\|D´òçi®ŽXK=î™?ü!Òd1âå¦mYfWr"îŽصk×ç€Ûèß¿¿ÊòNÅÜonÞ5³Î;##Ëüâ;Ò/¼Ô)øãg{¦“¡¶Šƒ` Ѷï; uêãçµ¼¹÷ >¹Ž·Zp¬M.€#d”ò•ÅW¡JNªN^¥ŒœÑÉ£´Ç)I*õ(å+‹—3Vá©N^¥Leª”öT&£Ô£”G|eYD¼@@ pÜÁ©øäør»”“ úF4±ê n›´‹2_ulPêTfWæõ õSä^/SGtŠoíu=ë× 7‰OPã­¡0OWFó)õ(ó*uV&£ŒWÊC2(ü€@@ Pwp*ºi¸ŠeË‘V¯ûû÷mÛØO–¹zxóî,ì€ow\ØžERXY¼='ão™·bž+8ªmL´×õŒô:[¡²\ƒ“Ur¤R?däx¥¼ËH¥€ð €;8õVs¿þ ƒkå_öóŠw—ネ&iÚ6þþV‘Ëšã³â|xU­·”[,ö5V&ƒæ™ ˆ”ì,8øæ´/J¢ºôir'–› ¸ïP™ \!Ó¯2˜òMxæ™æ7ü÷§óP{dù›ÿº\Ò¹gŸP_(^m,…DÁ‘åÓþu9ªKB«MXûÞ=£K¶í8Æb+Ç©àE¼óD€@@ ¸nâÔ*Ìðé‚ϵåîYý‹±Å÷‚¤¥ÌPPª×j¼4á­{Æ· Õª ®d:’Ó„·}°SøµSY~í»Å˜²Ò~Î4Þ÷P¯Þ%—îO/2“˜^OönA23óÛvmíMJ3¶ÿTÖþ¡îÍýM…YÛ7ï¿©‰~ä©Þµj//¯Òü¬Ÿ¾Ûw“Ð,}[£GrÛõhïOŒYû~Ø—…¯ÏiÚö}¼GLXyi~¾Éìi5›eö¤F–³‘7¥T‰S};¿þÁ$õ¥›öeùÆôÚ7úÒáã~]º7ó%ùg÷}w€Ž>ƒ['<’ÐÆß‹˜òÏný;5Y¶I3ýVš÷x´Êo–0ê©Èo7îkþû×'µVïÛ¸)«Œ€ YʺÿÁ¤˜Kû6*hñ`—ûB¼ ýzy?”ÕfàMK~Ýðc:ø&=}?Ù’²¯Ä^¤ð @M"àŽ=(íTî@#p…zm˜¯ RåååDííãE|¢ºÔ+´àÄ7›‡vê5bHo‹EÒ¬uL›^ô‰(-(kÞýñ‘ÏôkYZPÖ$¦ëƒ±AÈn&Z/ï°V‘E+?JÉ%þ]y<âÂwëd{‡4ó5›­7ö§,™1cÆ Éßù†µŽkãdzï°®¼R>ZŸM|[wh ;Û?B=‘²`Æ;ÿÎ1©a!å7…ã”jUÆš¬~Þ^~j:´T™‰7TÝßúìúO÷d›ÃÚ´Dlh×'{µÉÛ–ü ®…µy¤GâP_~,—4"Hc,P|ãºÓfbÎÚö·ÿM¹‰%Ô^~ÄËÇZFE(pV(('f/oâ­6Y EWr‹!]|ñüo7 Ùç‹}›´m­…°*îÖù÷æSÝU9…=6ÃdiZœp€@@ P9nåTeM©€9 oy©½xß Ö€ÇVÚ’½þë4cѯÿÚœE‚Úvi¤2ëéŒkÖ–OW|ûÍÎq]ùòýOÿûÍAøôÅF¦\TòãªíF¯ÜFb>½qõ/× ònՃ슯_±tš2ó/oOìž4¸ 4Ë·ý7ß« ‚!à F‘á(=ãBX|;ÍešXøÏÆ€œÒ`0anŠÀqšÀs„œÞøåáBSi! ú—7iÑL ö‹ýÚ#1;ìÙä-ׄϚ‰‘$”°Æ(Ô7Xëe!•¦Y‹`:&¥ñÖ2”ÇÄq€3-™”—›­ÅÙgòʈ*?-ýtA™×Å#Gp“Ѧm¨%¨k»€ì­zhàuVmöãÇÁ[C°hv¯Ãì€@@ ¨ wp*íÿ™ãÞ›£§†Ç2ööjh£ .#}ý|ÕÄX¢mìíæE׳jý}ØÐŒ¨¢š5Š õÓàyfXëæ‘Í‚ø6ÕO+ª Šóñ ôÁ¼¨wXÓ m ?[³jµª›÷}iÜ &ÆœŒÌK˜EY0€g m©õ ô‚ µ Tk¢LoVª‘IEc©°Ò~T‰EÒ£MSÄ%ù *ï°ÁZ­ÚÖ™ ¦rS9ô¨Œ7s®e_øyݺu©Ç¬ÖŠÉel6s|LL›eZ™ñD…¦‚0×Ìfˆ™‹²òÁ>hUåà…»Uh Ÿ—µ\[z"£„µŽïݧýÍý; A¨ŽÄÙþ û¹.×GX…ªy¼3\Êʺ”‡çßÕr9¿ùø³o.UW¼Z:e!sÞÑ•kÕŽn¹öÜÍȲjíA§jÞž®Im¨3çl^¹¡²³%ïèæoö^ªbo¡V­ª­søE×D²¡ /'/¯ ØÀ×Ô„Ê:Öá&NEÇíäÐG#ÇÒÌŸŽ•ˆ¸G{·ã2ÞaÍš‡™=•K|Ûv¡k•,mâZr#í×|ΙàDRJÁ®LT g*É|¶1%¥ÙfI-ÑmZAÏöoöœ¾A@tj55€g)gãc[öòr=]‚tßm‚UA±Ý[ÑÎ)gyQϦ…yùøyûùû`œ-nK¥vPÆem\n¹~e6òÓ§¥=qùòÍ›z*Wrî| ñoÕÕØÙ°3êJ R[}ýƒé̸\¶Ç+ˆâ0dURÕþZÎÍj¯£G~#ÍÛG–lù¹@Í4ðòÃCÕHE¢ko œª†£”nм•{‹k@¯¤¢8½C×®>—>Ÿ+EWö{í—¥¯Í˜Ÿs—W³á×ÑÊ:qÂÇ×®¤N°Ç‰lŠ. X˜_™Aw_ Õó܃+›]*¤õ˜IÈ2eÂÏzG¡êëqÌçÙ!ÃåQSÇ^­äl¹’:jÜ®T 6›Ø>†K£¦Œ»³s¸6L•O W¶:ÆŸúxb@DtË6-[F7‰ }´&ûDzܪ³5J ÙÖ ú˜7¼ý¾éÏ/ý®Ï3úت~öû•›·/ý>ô¥'žžÔÉ‚G…E;>ùô²Wh8# å(X-X9±hʱLˆs^¹§<ÂÔ1Îa^š S³æ©»{Æ>þìÿ¼V”}îb ‰é÷dÛ¬5e, †oÈB‹·P&<¹y]ëVÛ?42ÖpõÄ•ÂF­¼™"{ËpÚ¼¯÷Ð ½YdÙ…ÿ¬:G/7³\"¼Ô/›¤)üéýoü§=3è•®ƒhùUË·édHùÖO×6zqÔÓ“&Á Ò÷¯ú¿“&Œ± Òö_lÓ'~¤ö»W­Ðó 2Årq|ÐÌG¸g¤÷nõà°É“³v®þ!Sg8üó‡ïÓMÍó×`N›ÙJvüé Ý0G9µ–=Ï®Þ61 ÷ä¿çMwêcï_[¸`0= y§Îåš5áíÛ7»ÃóRÛö`ê6Ò O ÐÅyùú Æ —N]("-Û·…Rï#zü»ÿ’[&⛺þðeÆ@xwÕÕ¶ÿüÊ3Ñht¿ŒìôJæ÷½‚¦Ü5W¾€^§/÷¶yöàAsõ> |»ViGü™ÄT³2†•£#Ö<~pËÄÎÅxc9œ³ÍR Í³iÍ‘4IJxKñüWëŒ;Â;lDGUÒú÷'ý+µÇ·_‚©1r7M|jåèø5OÝØ2Þé´©´P$h|ú‘~U Tž&›j>µ2$~ÓÁÿ錂ͧF‡Ä?~ðÆD¸mg?1n‘5g^“øw»¼úó…Ù÷7ÖŠó2Ó/4¹“oQŒû“Ý1N¯Ttòð¨¼Ü«Ñ}êMÿ|ýO¯ÍynÎk3feF¾&$ôðŠ¿™öÚ?þŽ˜9{KüAkÇVŒ3fÅ/yPxlÅëcf®(oÿòú˜1ŸÿrEÎ3æõ_ à-X1sÌÌÏ~¡>š ‘åªâÃIÐøÚŸþ߇Ëÿ™4íµióA=ËWPôú äö (\‘4æ5óê¢ÿ|:WÒ e6Ç-167ãó«%¿PE+äe;%ý^ÁêSßÌó§×à¦ýiÌ«+n²‘"4²á" çÏD¡ïþß»s¦™ùCŽ·/åNriÇ?©ÕÓÞÞ{³Ünm%Åé³¶ÌdÒÿ:t™½šÅ„cêOçøMÍz‡r?3ú—S]zjìì|êá½{?6lâçÛ¾¥&§æ˜ ~]›Ñ2¾Gñmú$m`7¬†½Ÿÿum8ñW6â3\Ú;o¢-nâÊ_Á‘I I¯ýxZ@À Ï‹Í¹kçÎZ»/Z‹¯hÙ²å3GGwˆïÓ#>:$é×bòëêþ´]Ó#¦AaæWºvÎ »´wåèVXÂèÏwfÑÊråŸo^ɬH˜ø1}`àÂiCá‡Ê‚¬{èbܽaS:zs-Æ»ûíOöѪŸZ8‘—7ÑùöÜp*iд ›?çÉ]{ÅN­=ñã ŸÓz*&æœC4ƒVÚ¦ ‡?™·ó"ƒÉ|éói,wBÒ¡aå¡S›ç1‘Ñ ³Äk§þxófTÒÚC¿n¶µÅ6Ö—¶-ä$LÛËz§Ö&Mûxó†y ¨Ñ Oñ³0g/ÇrÐØv‘`§»'´71mǤÍ;×rÜbQu8«Ñˆp0˜Â+;CÖÚxÚ*S#„“U@Òʽ¬Â.Û]V`ó˜s¶ ’šuï‰0å½4oÐÄyŦ^¸a,HXxÔfªùÔ¬ø©„lê«beÚ†Yñ›™Þ#"aÚZckS$bST·m³4o?1d#䃱Ÿït<ÿe±â_¿{— Þ¡"RØøþÞÞé­´¬Õ#<îàT†ëgtRl¹UÓ¨y‡¸èp¸ðè¸^½ùª0åÔ´U¯6Ñ~ˆi⃘r•6²W¯^MÔðû5éлs/: èлw³ú°Ð¯IÛÞ½;àYb¹ªIçÞšúCÒ˯I¯^íI4Aí{µiÞ¼[«f‘ÑíÛ4o¥%ÐC³ø«`¤W£öŒ¤%Y½›¶ïÝ­CóFÍÚp’½ô:{K&QKˆš›–ÈíŒô÷‚_I£¡NШS¯¸æÍ›G·‰ëÝ¡15^áˆ&à¾Î½›G”éRó IDATD´éÕ)ÜVÎ7¬9phÞ¶ªmÜÚrâ»Q° Ú`Qù†u‚tt›FZ:xDoõÅÄOQ޳E ŠUÕ¡æNØ2[Ø~È«]9~æÚ©…=&'¯f””d|ùÂñÇ~‡N1g÷cÓßßõÔÿoïl¢ªÒÿgdP†72P(ahuUÔ$Á, 24ó¥k…Ê|iU—踑h¿”uÛ`7%C²d71KÃÕP“5P¡„ ˜Á˜ÿsÌÀðâ øœÝ.çž{^žó9ã|ç9çÞ{â‹*ËN ƒ{Æ`Zí ×™›öÞˆÏ8~êhÆBWp†”eçÎíXò)‰Œqyá±s'¯s3‘œÿ”³×éPAÑþM Aºÿ﫟Ÿ|Ú#+÷_ë(&¢Pƒ8·Î~â:3,ÝcK^Q^üIJUþžÑï;®òU RHð–•>çö®Oýßͬš’s‘AŸ[”ïYž¾à‹BhYUw=cçuˆ\ýagäÞYEµ 5ï»pú ‰š ’—åì\¼£*¡¸,oÿ¦­!SÓK*•,}ïúØ_g•}îi~9Æeú©g2*j‹Í ›éšÁ©ý•Séו€Vuè/®«EÕ64œZY6}å4Å%d«Ó¡¢ŠšÊ²ms]Flˆô ëö—UÆŽÑklÞ”ðÛ䢊âý›êB¦F—Â]ärYÎ^Í»Dä²âsuôÕ'uW¿?¥ûHª>ä:sÕÂCEµµé/ûhü¹ÎºI„“^ÙYÙÐPqtËÎUÛÏ1ÑÐ"hc0¹zÈezØ3µ •‡æ”Íty‡.]RP;‹..Ûi6}ÜnËð²â£ Ó#Ó èHɪÒ×/ˆv‰-.ع#dúÄÝ0EÓËt,„ö“vCûe[lvÆ|ó3­OV¶sý‚¯-_++;µ2=ò?…PÉÕX—™Å8TS[³íå è·Î{_ „À±Æ<ÿo_+(;µgyä‚4ZÝ¡wf®²¡Ý8µ2lúŸÖù)!=7F…Dæ•};Œ˜8å]PY[Y”Q6s}ôØð¸·1B8ÂUJv~WbWúyäÞœÿ 4Õùï6希µ%5Ué‘‹c§/øö®S…c6dD¿Š/óÊbçKgmØF¬ÛŸ÷mì\ó«.3WEÕ4To ›þ÷S…R ²|­ øÔ®ôM‘…ú¢Ê0¸Oì*ýÏ?ojyÞw„l™0‚Oè?‘ž˜ž§‡Í+·f¾W vîÑd¬ÒY\ÍR!—K`bÒ&E¯°nÚzèfGé\aPV‰^K|½­etå–¶©“Ï ÝvuÓ;‰ ¸µVÈÐÚVk=&Øeí>\ýð(*ØÒI•­—X€þ '®|±Äb씑–p¦ÛVkîÖv{lî—o\hÿ(üû=GoÑ´­ž³‹|n¤C¬¢FAÜlàÇsúªÿS·tù˜ˆª?f/![^™þä ÿ)jàÚpüÝ™ô£¬8 ݰåøÛSF›+ž›N"÷ÖËäæŽci{NÓž­+%gN@©ø·–)v\¹rÕΰ¯O—½îI}u_f¾ë¯úyàú9¦]:)ºmX’_WüÅëð½!wóñhâ kk°~t<˜d¤/&ðUkª­-LãÛ88ښÿ [['B†Ù:X™‹KÓþüWì)rc/!.ði€(HůÓ^Õùú[W?ð ø´ûüóYá®Sþ¤_EzBSyÓ%§ûý®«IÝI×­çNËv”¿£:uÓuãݱóNÛzuš u4ÖˆÛ©ñ]´¥Ûý{‹Ó;¡¹Púå*ø§êó„£ø{z¾0cë[_>6°.hþÄ•y_þsç‘‘þ;"×í/ZoÏJµ=:=j«­°í%SQëø‚#*e=Í¢u”[³sÉ­§Ó|ß8=JµJ¡‚ï€;ÃØÒi{çF=[ýútÆ»Õö>뉹_~qNçYLz? œ²©FÈ–E:OgWÛçájÑ­“5 G>¢[[çuB¨™+ú0Úß>ìéçrÏž?{bølÏ­ ¨›ÞžâðØ3PýÞ.ÖÙÀ“ÁµW+e*ÕÕ³?ªž[»y÷ž•p­è×:s;7˜RL_ûåÙËÕWKÏÿ Ó³4Ô±ï?v¢Lüx_iué¾; ù™'ˆØÌbe¿^fËŒšÜvnÞKÜ}àj}õ±oÒ!îã>Œ]ë¤rMáŽþÀ7à¹v×è×" ·.ÿ\-»4b{¼9øË5–È-HNæ:/xë<¸¤ÄdQ§6ñèß/'9;pò×ÿüͪòÂTg¾,:Ï]IÒ¿ÿÕbÌAÖ¹”Ñÿ: ¦ë¯VÃá{’CŸœn`î7õÈÏ· õü1ø¹3ësRèȉâ[à45òœ“F^µµ=²;…œ[ÿÍùjU}ib”f=µ“nr³ë–M±QÖ´åÔÎàG'Ï!*§†ý|ð“²p¢s9ÒÚÓÍ¿ŠŠôt²òÕeSÆX\+:wƒvÒ@Û 9Ÿ8¯RÝ:š­]O5=V'´¹¥N¿&ý3ñ$:6ß5Z8ÃÐŒq¦û+š7³wߕγ ç-$ëÿö ípýùÝës¾0uhçã®c¾•ë3 ÉÎÈ6Ïþ~䘧ž9·#r¯Ï¦¶.Wj%^kœØl(ü~º%çÒÅ.ðžFjÅèI³à_åÅZúIòpÔ<³HÒÖ ÓhÛ(TÞv\[³XyÌZIÎù¼s–[W)n=tžS‚G’>úWÆÝÝÆÜZ{¯ÆÚŒé±îÈy õb¥=K ;;û>5¸ÃêZ•GÀ–/£VøÓ©ÏW>É«[ýräâ雸6âOUºšý²À?„;ƒŸö‘Q/Œ%Vd÷ñ]+§†À #-½åøÉåÜ̙η<ýýLï¾Ô†âO§08 Ø´ÿµ)ð“Øúå-Ëw®ß1ÝõèÑÊ“ƒd§ß¶SÞ<¾K»pv­ûøèz:µU ‚Bt*׉jëïä/8šË­.¢6±âhÜÄ0- 3vzjòéü9»ûeËô;iÝ—3GëÁ?ÔÖßu±y{æ›8˜Ã³nÏ©t&»Ìã~]g¾[ÿ†«‹å*ZŸO|eæ+3ß-Øòω[i–㙯?1ié&â?sð¦…Ç+?¡“Ì­áÆî—¸–}¾,Ø>Ò]g¬óX?Õa/ñY·i¥Çw\N@f?e´=}aϺÔÅÀ¨…Ë}˜³ÓI7ÇLÕ‡¹ Þê±påBœéó?«Ì\ª5ºÐÆà ¼=‘ã&:p=öÙsêó1ðÕ¥"­f·òÑr ¦6Y.6 š±;¿î±råÂs‘Ó?y¦Ò›/É ;íŸxlԞȉ‹'î !>ËdÝuãíÀÕöæ˜ùî¡-ëgº áʯüBþ£“^ þ.ƒ#áóÿÊöS‘ó':pcì³nÏç FCã®Ðo…Ù$vž·’ì-[$5uö^‰¡³¬¸KzL´c'=mK@ˆ¿“e@ü©/^óÒ¦€™3]6|\ùÅÒ¢Œ-®3]Ø7ø–㕯?Ñ–*k?ä aÎg‚ˆpô_ËŽ[­œ:Õ…~&iðX—÷ý̺?]¿šLYèÏV(Ø•¾uÔÖÖ2ßK©T‚ÇÛú¡´´4 à®{uáÂ__ß».އhª»»{{rrrüýýÛ$Þõ©¢Þ¬7Â" *}\hN×yø ª¯W¡ØÖ¸:lj‘~7!·BXâóÒJ¡NqkŠæ×ZWóÕÜs„kN§³Ú gg‰ˆ­ÉôPÕ+Út]›…ûK90káu!Bauì`'ñÑŠµ°ºÈ¦^yš¢Û=…‚rÔÇÈU¥ª¿U/´²Ò) ±?.zvèž(êo©h›:CÓQ7¡7tp¡+*ÚÖàNªÒ5¢Ûq¨ŸpŸ­úúzÁ×ÃõJ÷#Ä_¹»×ÝϹn5ôÓÉ8¹AlcZë¸ë»÷84 ÿ*ØÈé}48su?8÷Þ_Cý­j¹’ˆÌ$÷/_¹n$##ÃG{ëœnz÷ãééé£G¨D"‘P(dÇ\Ðùèw¿n̉ øòЯþ!·IëðÝ>Q¿œ)©›Q·¾€8èg7X)-ßázñþ‡›SÞ 7¨á]ô“¿~+qªÃzêÓ.?å¦T8i®mЏýÏ Ðf(JŸÒï/¤èCÔ¿ÌŸ‰ÍÛì”*Oºb諨­Á|~¾½{‹ðõwAÚ@¯î©áNû¿-Z+ç-lMêòs¡“õŽ¢º ë}4:5÷ŽšhŸÙÜʶ[¬ö%5ÅÐÙXmE»@÷ ˜{,¯¬|¾ º_ÄXrŠ'|_yDx†[­8R6ç¦ÂzÄHƒÊd,ýB;ÀC@ 'îQê_Uy©)ÇØ“õý«cý­7ôǵv&«¯õ L¿£_»BsÛ‘#QPûÚ0£½ý‘€hª"o)#mjAbç'OÝUVU˜Y;ÿ­ý%XS™>?æ©3ÅG_sïÀ¤Õ1å3˪þ=÷éÙÙQk S}÷×ÅdÖSöÅ€@}ŸÀÝ ÑƒÝe1~^$ ›‘Y¾aί)‰$¢b’5)€ÙˆŠý«@„ÇúJôIb±½§‡üdJBjÉ%B†Ð×{ésÞчÁþþ³¤©³v­òs&ŠF_¸¬T%§c Ù·q };ˆÄžÎêv/4]"ѹŸƒŽ‘kÈÚÒë„Ø‘K$âÈáEã MB$˜ô^0½l;'š„%f–O›ók`2ɬšÔ½f1@H ;ãñSyu¿’º:Ûwöx‰í”}KÈæ„¤|µdÏËgN:œ‰Ÿö¥Z¤ i©K,q÷õ÷õ&5Ú-¥–lÁT$æu”/¡æ4ð†.Æ ÛRû*ÒÛÚ¼È?"ß¹I„Ø/Ú³$ysBÊ?> {úßë.µHð/@Hà¡#`š oðª½uC¥Rܬ.HXêK·.òôÙµÛócCÂÓWÎq¥#²˜ßf„d'>L&kÂMsS^如õ³µRÒbç „¼½c?,ˆªdÕÕ2~òY“©¦ö–B¥Ñ¯òi °žºÿwtîVVðÕ6â'åß~Îrua”sž³20?vqxÚö¨Ù]Ý,ÕÚ.Æ@HÀÈ …¦‚ë5ÃI$2³±“fý¸ðÆ~:± s¨ã‚£áOĪIÌ9ŸRªá©u/%³6G“m³ÑŽ¢QÒüÕ!ðŒ~¶!íTKûNǨ²Liì|;‘@da÷ùE½ÇcLH~Ô 3‘™ ÏÈè­I|¨9³Óîz²^ŒH‹žE]h«]˜D+‘LZ =‰Çï‹Ä×$€è«Œû}¿²¼ ‹ñA…òe®í„Q88“r"‘ÀKCe2•™D÷U£:¹:ŠB!9¼mòJqoD% ÙM¥ÈZ5º2éf‚ŸMæ«…û¹*m¤i=ð¾_#í9š…@'€ïû¥X”².lßÕ© B6¡XÂüX¡Dg3¢î~ +ÝÝì¨ý1¬§´žÎMR}–-ÍMëK‚Úm:˜ $ððàï 2F®¡YêPc4ìm»†ªûeÇî‘ GH ôqF±žÚÇ¢ùH $€(ÔTü $€¸?PSïG¬ $€j*~@H ܨ©÷‡#Ö‚@H5?H $€îÔÔ.8VçH=¦Ùr®‹¬x $€nF ©Š¼¥t{SMð‹Ï3ª¹|8pþÑkFeƒ@ÆIÀ(Þù»šFg¯Ÿj#W¡Ù¾ÕèAsûJé„1 $€è‚€ø©„ÔÁ¤Nð²?ðâ]EQJÐÒøÔ„PÀï¤L‘§ñcýB®Ð­_d)¡Añlô£®íÚ”“b8'7è` ¨3lõ]žêES¼Öž¬V©®ô„(è•cqKýÖà¢å1~K³ª‰êÊIV´•ÄæxEkýBSSã¡‚¸³¬êß^b;ye…\­¾‘KÃR ©jÊ*ÓV¾ýøÖŠâÌèm‹½¥;-‹«Êv-I ÿ7l÷¦:¸Þ)lPŒR­Î_{Éû_ªìݼHbæOP°$9<9{Û¾‹°¹[ÁÁ¨ìÇ=mË£¼sg©S+Ër‚B|œ”Có—²çÇ\;SVñš;Ý7fˆå Õ•6ãCçüÓÏÖ(<{CC‰iH $ÐËŒF!`§µÛ¤ ¶ö¦þD~/Ø–;ñœüøÉoRRË~£{´)ÁM’K$"çð²q¶DöŒ”d'î]å,&|‰BNê·Ûñ͈ژ+¿FҦȉã¼âóÝ…×,Ï&JW,ÉO¯J&“s;‡CD%‘tkþU!“)‰¨{™iý"3¸ã¸}Ó˜ÒJ ;;ÛÝݽõœ‹åääøûû·IÄS$€€QÈÈÈðññ¹“ÒÓÓG=P?ˆD"¡PÈŽ¸Ð'dDÈ *ЀHw wON9Ä|ý÷Ë"$€ÀÃNÀ(æ~öAÀþ#$€@¿ €šÚ/†;@F@5ÕM@H ~A5µ_ #v $€Œ€jª š€@ý‚jj¿Fì@H ÔT#4 $€úÔÔ~1ŒØ $€0Æ ©²¤ _BžÐ@@H Ü=cÐTÒÓhvy»ûž`I$€@½KÀ(4U‹@‘·”¾ù^ ð M€ÍÉOÆÅkÞY/ËKð J¸©*[êÅò„&Ã]b´èð/@H ô>£ÒTb;ye…\­¾‘KÃR eîOú¥­Ž- ›¦*¾Ž2{Š5M^‘\G³lO û Ÿí§ÚûÑ$€@¤»¯¤ïTbÏÉŸü&%µì7ºÛšR%AVï/N ˆ»oÑëž $€€ÑèÕw>èÒÁN4!N³GíÊ_5ÎZ÷Ê=ÅE¦PêÖ M„DgÞX?•ÈaSóÞn¨* ¹ÍΗ‡zÞýfræ/ÉÏWáÛuác $Ð ŸJéZ RV'<'M^“–ºÌ“á¾r,|V¡I'¹YjhP\jj¨@à—§(J Zš•Ãe :P¢ñsB¹B^kOVƒ^v|휬ÅkĤú8®qYå4·¬ Tà•Zr+õ ·4Ø$GjæšU·7&%4(þàÁ˜ Ú~PÌA®yÙÁ8 œP@׎Fîø/7ó¬8™´‘3Uà·6©œK*JY USE\WE‡ã$€0zF¡©$íí¥va5Ûo|8Wã8_9ààS&W×i ñN*¡*TS™>?æ©3ÅG_sW*eiÉa3’-‹«*ö­H LÝáT×;… ŠQªÕùk/yÿñËŽ–QM-HöG‰‹Ù¸6& ôÍvڦ̈ðNJ®¤¾.MŒø0ÈÙ*`c¦v•Ë,<ºužÄ1²Ê´Õ³g[®*®Èß“~ oöìðäÌ ¥Z~cž“¬ª«>X ‘+#¼Cr”Õ)åeA?…8­>‚¯”]J\úæ*÷ IDAT˜f¹ªª*MZø¾ 8Ilôÿ\Ð@$€@§ŒeîW"‘’üÓçªÉ4[joɉl8f$Dç’šdB¿.'ÎBr‰D9¼hÍ!#M yûWÙÒ8ÖWªUù·Û`W¸Œ¨¹ò i$m ,£¶™õ¥UZ’H'Lìq»Ø[P޳ÞËÝ~ÁÛÅH7W|æIÂav£nç`-—|kؘ5™«ü쉢֗ ¡õÚ<»ÒÍž²kó†…³8o[Ó¼êǯ¶I7çú9Â4°dÅöí«¥ûŠ·Ï%MudMæg«üÀ¡u•’Zƒ¶Òz1 $€@ß `šZGcþùYà ;r¦î³qt²‘%Ï¿ô’R¼røc$-´²ÒYÝ”§5›—Ó¿P&0èù—}í•ÁËß§W »ªuÄw¶¯ß4O®´æp[QGc£,©ƒ AI¸svbؘv¬}–v¥sMW<¿÷“ðÙÒˆLå{³´TõP˜×LXâ•Á†ëðé;.’Ê<$€èãŒbî—ºF¥$8¡j»oòx‹µE â<ÅŸä_n Aê$áõˆhWIA‘òõÙ ]ž_CÒ²Ê-Üh!§aœàA6C¡¦ªZ¡RÈh ²[~p­OøcgÊάI ›wŒ–0³|ŒÚºÈÙµ1´QÝ,/ª”ÌZövòÇ$öZRÓºxjàŠüÕlU–¾#Œ,Yâ¦óÛ€+$€èóŒDSGÛUßGH·¹=Å~nÙ‘í«}è}="‹]èã0¦Ü «9¨,,xrA+¸ÂY±eKÂD´Å )´ \ÓsGiS’5ÃLdfAÃÂÓ¿tš½mOáÖqŽãb‹÷å‡ûÄd]!BÇ%›£À€ $Y—Æpf¨*³Ýœ, iiXÚö#ÁôÞemëŽÁï§E\”Ò‹ó/FäÇÃüwK2WLÒüÅ?H $Ї jkk›››U*•R©dÇÛú¡´´4 à®»xáÂ__ß»,®¤\)2“ˆïdŠÜO%I$÷ÁT(D(Ö´Þ-cT2™¼#ƒY÷Ű»äyoŲ³³ÝÝÝÛÔ‘““ãï“ @ÆK ##ÃÇÇç^ìKOO=zô@ý ‰„B!;àˆս˜swe…â»P »)Óyb±Ž0wË¡D¢¿ÈªSs·*ÐÉQ$€è[Œjî·o¡Ck‘@H è@MÕÃ'H $€îšjê]£Ã‚H $€ô ¦êáÀ$€@wM5õ®ÑaA$€@zPSõpà @H »&€šz×è° @H =Æ¢©²j7Ú7êÙx‡'ÕyRq·u¿ êʤT¶[÷ u•S•—šrìWïî¬,gÌ]”ë¬N¼†@ž€hª¢$.H`aÁÆLä—Gß“{OáòáÀùG¯ÝYòË!ó¯z90lÔ oŒÉ¢[¶ÝaPž¿8û }CbgA‘§ÙsšñZššWM¿‚1WîõçEýv :÷ëŒ=^CH Ü_½¯©WN|ž¶¦X®V+ë ÏleFTEI°ÏwÁ;x Í K_©©öÀݤe6È—|¢êèîÍPGT|Æ]h½©'ìÚ¨9úHq]Uá.ïäùãwU N'Ó».ÖEóù…ùËÆtøR§.Jãe$€¸s½¯©ò5„\¿~CE„×qžÖ¤è ·BÒ¤f‚ФØ5n©¸pBŽQçMQ´Öoí¬” .1î@ ×kű„Pšàå÷zXöî•‚ªòƒÚ¢~ Ç®pES‚–ƧҜ~'eDqåX(W·_ð’lba@‡egâbó#6Ã~7!ÙåÌs”¥†ÅH]Ë Ú˜ZM“ &rv1ã´ y…&µwxaS9K[;‰­«?l¬CJjZLÈR–ú±ílˆ¢ Ô+”9ñåY \ã^AA~~¡)ˆ½âDB\Öo´®¢”µ¡`q ,(®ˆ+Pt Ža JÈk5cH $pz_S6Dû&{;ˆà{ŸNx ]7‰†MgÒ «¶.tƒí[&¯H®S«oänO û 4BÙx){[àŒÌUÅUùûV„þæ7¯dEû„U©¨“Ý>KëpªD+’+Ôjuîv¶òk¥R––¼:¦|fYÕ¿½$W¢|.¾’#WÊ?Z û͵Ÿú-úzG¶ô㨠Q`ÐÛ_œaœk*ÓV&OÝUVU˜Y;ÿ­ýTÔ &jÇ¥<ÂÁgPL1tbmeÈSŠ´éš¿°©Ü­²òcïÍÞFVø»è¼cøz~v­’i¹òbþEjá•N3Â)S*†M!Ù¹×ÛÔ¦=UUI®RÒJÙ¥ÄÕi–«ªªòפ…ï»ÀÊýÓÊÔjù?ç=¦-‚‘@HàžÁ;ôÅÎogÕù§þcüüÀÄÕ+ÎÜHp·…º‡<âdËm-c?ÙCþMRBYÕ%è(ÕÝ-<­â3?{¢h ‰B¢Êÿ:Vº9×Ϧ:=ç¾è»§–BÛ{zÈO¦$¤–@Ñ!tçU!Í¿£¿l Û^9K¤¹!Ó`Û×ç‚|I6-£®ì^œøñJ¥‚LÝì¾³hÕ$W¼K$:÷³`ºsºcä²¶TÍÎPâ0V™ªüô6B|3vlÌ5»FÒÆsÆé4Eù8E²b󾊷æ U9Ž%'2ÙüG?G¹és_$át;sEÉÕÚG† ¢µ6V>øþÛÁ´¶ÐTGÖd~¶Ê2ºJI-õLJM]AæÎ}dׇaK @H ÜF ©´’qÁÔ7žZjãýÙÉÑT'è†Þb"+H°†EïË™/"%?Ñt|!â²Ð?DU Å) wÎIK¥!²=91þ#®Ee5iº*µd~ J^J+20á«©B–— ÑVX„åK¥°Yköî£ï¼7KÆYÒ»­mÎ`"»¨âüÌ —úZepðûÃÛú…à@oν±aÝq•æ—²8eÀ WÖp)fæ´›š¾(9PÇî÷+£FÑíZiPІ8°;Héø™A[€ˆƒäùÏï ŸaQ¦|J4$€¸7&÷Vü>”®.Ê+º¢Y„?6ÖƒÌ …ÉÔ[܃5eg2 ‰x%xÚeM¾Nk :A<æIßìÕ; n*d%YÖ¬§ÊN|˜LÖ„-𿦼z2S©‚bÚZÄž$;á?*ÕͬÞn·žªøöÃÕàûªú fúé§Ì5$6îk˜6…­Ñ÷ïÿŽÞP++øjñ“Ž„¨ÁDH‡ vžAHÖ¹·q¤Ã$meÜnqÛ4V”³òËTŠòø…ÞùÜŠ¯Ýc JÉ*8–òœt5ñå¶3—Ø{ŽóÔ†q®Ô_ï4¨nÝðœµìŸÉ’q­«{“;­ /"$€€†@ïkêµï£Ý,èíE6ÞuûVN²:Oߘ?ÃN”PàææKb‚§w-‘f{&îÂdk&|möÝ&µ1³pÙ$Ѭ§JfmŽ&Ûf ¢E£¤ù«C ¨'Çå§eÄž1û¢KE"›MçÛ‰ÐÍÓ1Édó’ñ4'¦‡î!ÙaGÊ› ùš3;mÀ` éň´èYöôº¡DZ.8F•¶ÚGD;)zaxÝÝ1éù‰ÚJüߎH ‘ŠÌœ.ùmÃá'ÐyQñ‘/mž!}çô«{"HM“¾[ÛZ±¶u"âd—]ÐDU¿ýÕ   ̤aK¶ïß®÷­µ` $€ºM@P[[ÛÜܬR©”J%;ÞÖ¥¥¥Ý®°mÆ .øújïj{Qs®RÈd2K¬¹T–ª)„XëS!“º9¹J&S™±4C5©d7e"‰5W¦µæ.Š*d7•"Ýv Õ¬›&‹÷² Éu«ÜÈM9_Ð`¢n)ˆƒõr"êÄþ6ù5§\ïõJ+¶U{^¼ßøý/×e-»;MêÊ;±';;ÛÝݽ•999þþþmñ $`T222|||îŤôôôÑ£GÔ"‘H(²ã.è¹G÷ÒÞ½”‚šŠÛꂘ×W¸Ì. %’ÎìJ¬µK’Zkº.J›Öæîæß|RÛOþX[ëšl0Q¯B°^·€ÞµNNø.hò¨JÖY¸$jN|÷¾p7•rÅëv½;ñ@H t¦QHÇÉ*µº]ºÁÄv¹îK‚Ð9A­N¸/Ua%H $p_ ôþzê}íV†@H × ¦özl $€úÔÔ~6 Ø$€è5¨©½†FH ~F5µŸ (v $€zjj¯¡Ç†‘@H Ÿ0M•UC¸É½Ž°G WçH=VÞ£MbcH $ÐO ¦*Jâ‚vlÌD~l‹ÐîÒVäJ‚cð2üNCABÀ¾ÔPê· ѹô•½—Î?zM›Ž‘@H Ü=Þ×Ô+'> O[S,W«•u…g¶2#ª¢$ ¨€n§m(¨Š`sívYìñå™B®ßTïÅÕ©Ë|~aþ²1Ü ˆÄ¾RÓŽ_`¯S£H $€:'Ðûš*¿QCÈõë7àm×qžÖ¤è ·Ø Uj&M* ªò¸¥^ôåóAhÂ1Q¤¾á–FH˜ÔÌ+4E¦øm÷Ÿ~ãÞ"¯ºr2&H“3¡@Ç)5@q"!.ë7*ÚTN›Š’Örƒbòª¡.YjhP\jj¨@à—§*?¨mß/áØZ™¢h­_hjj<˜õéû¿˜rö{EA¨WÐAº¯:$€x ô¾¦:lˆöMöv…Æ z$tÝx$¶I+¬ÚºÐ ToòŠä:µúFîöİò’°CKDfáÑ­ó$¤ñ‡£g¨Š•G9xG [[V'¯«ª˜çdÖé`ª*Ž$WÑýÍaG‡ü¨Å—§îªª*Ü\5þ­ýPYMeZøü˜§Î}Í]%rX‘\Û½ån'a+¿¦Z­l¼”8?æÚ™²ŠõþÏøfG}q†N#—§ïHÌ÷›d¯{¤\1 $€B½¯©°¿èÛYugömN\šw“ ³… ´‡<âdK· ÚOö””ðÙ÷—`x@ÅÃìF2ÜÎAw3UÉiØ?|߯%ޱÄÖÞ¶Ówíë sSl’úvð8[[× kH2·•ë%qäð¢qÎЄØÞÓcÐ唄øï ý!Ü&¬";ž9üÞ8G{ÉÐq‘$<ö!7wÏO\“Üö-þzá @H ôgF ©¯d\ðpE—ÄÏN–+ ·öɹ‘²‚‘ËOæîÏ<=UJµŒn"Êý¡Q>°ùÖw¾0Jbõp Ò(4oe¥Y¤-HZjãKÜ}ý}½aQVë„úÖ.âú¼²‡¤}”²#Ь}šÛK•U‡G$€xÈô¾¦VåqÎ!‡™UëAfƒ†Âüë-îÁš²3™0ÑûJð´!Êš|66f–RÛ ·b*vžAÈÛ;öÃz¨ žË‘1‘åÓ‚ä×ÞPpû´Âî£:E¦ùŸì/º I7îÙFÖ<®u4Y&Ù‰“Éš°EÓÜ”Wé^â:E5• gì›¶8Êw{¨«Vrù†1‚@Þ×ÔkßG»9XÐ{l¼ë"ö­œd+tž¾=0†((¡ÀÍ7Ì—Ä:Oï(Z"ÍöL’ —lŒòqÑÇc,4cåU–)o'ˆ,ì>¿(×B¸Å7ÜÉLdfACbþMÓ!º×ϼh#‚æçGÆÎ‚ :W%³6G“m³ÑŽ¢QÒüÕ! AÛ(«Äz^d4,o†u^ H $ððÔÖÖ677«T*¥RÉŽ·õCiii@@À]ºpႯ¯oçÅ9ÿQA`{pM²2….¨‚o¨É Ý?[%“©ÌXšB¡ B1wY·nÈ!i²è¦wWÁ ÇB¢¸yS Íô3 µ¯Wa^‚ßøÌWåûiçƒõ®ö›“ììlww÷6ÝÉÉÉñ÷÷o“ˆ§H £"‘‘áããs/&¥§§=z ~‰DB¡pÁ ˆÜK»wSVj*æžÕ)-æõ.³‹B /zb±Aý‚mëÑ©Ò`‚ØÚÚ`…ôš¡öiº&( Ö…eo>óïËk3â_$€èߌBSû6b±g–ZÝ·»€Ö#$€Àý Ðûë©÷£X@H Þ'€šÚûc€ $€@ÿ €šÚ?Æ{@½O5µ÷Ç-@H þA5µŒ#ö $€zŸjjïZ€@ýƒ@/kªìfõ•+Õ²¶J­Î;z¬¼€Æ^ $€@¿'Ð{š*+Š XØØ98ØY˜ 6¦äµ•îåÃó^ë÷c€DH þA ·4õJÜ“náu›‹ë”°5iYÎDZ‹Ç¯?@]Ò¢¤ _’ÆqûJMï|¯™þ12Ø $€èkzGSe_‡çK|±Á™{Ù ã´Ð3Û}·î.-Iq I#Ù!f¯¤•Ó¦ÒÔ˜ ú†ý ¸"n+Å•c¡^4Á+4©šÃ]”²64>5!’âéæà@H ôÞÑTn·W~gÛÚcwß É®¶›w$vw‰.¬:ºÐMBLò£æ§Y®ªªÊ_“¾ï(fy„ƒÏ ˜bµúÆÚÊ?¦AJÙ¥ÄÕóËgæV ÑîÔÖZ3Æ@H ô ^zß/ìú-%†ÚÛÚ"R;[î•öMdMæg«üQ¸JI­ˆ¨ÊOo#Ä7cÇÆ\³ i$m|-ÅÔTG"޼<©ga+H $€ 0¤k3Þ×D§ ~$ÿÙªIÚ]dÊÎü—¯áf¤R” ¼#ì¸3%¨0ؘ BЋK}­ˆ28øýá°=9¡Ù¬¬è H $€z@ïÌýJÆFlï×®p7#UçÁ2jòŠ}+…dýc$¿–[95@EìûÌœ9sî®/ð«âóÏó?ú{ž¹ÕàÉÓfÎ÷b7xÀ€žV£û2 ÍÍ-5U E•Ÿî)üèïg^cÜK/Iïñׯ†šzG¸03@}•ÀíÛ·ÿö·¿UVVnذáÉ'ŸìÉïÙ„ ~¸¹¹;v,))éâÅ‹«W¯8pà5îiÄ_=võùeãÇOu¢eaJY@ú¦› †“¡£ÄSm&û9óßòwœ-8Wõ×M3zÌaEM½£fFH O`‚zóæÍ˜˜˜aÇ©T*ÐT&«T@ú`Pp/项¥eâÄI>úèÖ­[áGÛo¾Ù}YAýó_Ÿ:wëQ~6¶æ²¦*¨D- &juK¤æÓÑlë[ˆóøG–=b¹çï¹þË¡÷ÿ:³gd5µ/~lÐf$€î€((Ì÷^ºtéwÞ±¶¶nV5·Zè—/ûßÔÔYU%ÿ;Ygáþ;gë.£¢JŃ++«e!q[â222`X(ìú»J}úÙ™C'ªf.ÿ½©åàF%ûq¡æTIÝé/ Õõ’³ŠA?2¢K#{8ƒ€¨ÁÃæÀæ–ƒ÷¼Gæî<·ä3X2¾dµkî=L›CH ÜGðõÚÐÐðý÷ßÏš5ËÜÜ–!¡rê¢rÒÁŽ7W_zâoÙ´7‡Ëæ0ýÕ­ïÎ)î¼ÔÝ^møfòŒõ›²ÖNì¼èºè-,- YYY~~~]vM.—ÿ}w¡ã4—3q}S‹ˆÞädÂQ=m_BÓµ3Ç??üýIΘ1'¾úÖ㶪üÕ‹ÓÿðÅ{Ï{undÏ_Ð;ºÍ” ˆ«ºIEZÄâÞNÿô‚Üü MBM}Є±~$€z“8©GŽ1b„§§'Ä ¹XlFõ†Óœ.'~oýøGg„2vóÞƒ“m•ç<º#üƒÓk7ø=˜^5 Ÿ$Ó„À™î¼~ªyT8hM•7Êá}¼páBvv6Ü%uf!ˆñçûÎ5˜2}Ħñ¶º¬Zî`c& 6jAY ½éW~ñ³÷#Þ#dÌì?';Z*¯]üᇉ¿½>Êz€ÀƒŒ TªŒñÞ`J¦[ˆ²YýëõÆF1}dHÃ…ÊÏSÏ-_:áA»ª¨©nñ*@}˜|»‚7VRRâî·›nË 9 ElvÔDÐùÝ­×v­¢‚úiîá¹SÇÔówO. Y§ bæï>4ôÞ p±º¬_ w<ÔÄèôîZ‚›• ×ÐÁN\U…Bqð¿åG[¹R}SÞ|»™445ؘ‹ÌÅ€Hi­:ùÔÇŸÿàsW{S詵ÓD7¿0P(…²AÙBšMðn´5¦[„™ ÞV¶ÈªjÙíÆ¦f…RMLL$ŽCþ÷×Eó= ôF­µJÔÔVCH ÿhllÕ9r$hŒÉˆ·€ •ìÎNTP4g¾sž<ûîÖ4746èÀih¸­:•¼iÞŸÿÅ%Ny÷‹¸WèM³ 9=nõtÙKÞù!nï~‘ôÊTš§¡8yKìŸÿõ-—Éá’÷]MIåÿ¾|sÎ[' iÊÊÌ®ó´„/䆦fÒ|[®ßW¨Ý¡¹¥dÔ.²i §çÏŸ‡^K$’v%Z@SK«š-g!„jʪli‘+o›˜(APusUVö¯dDÐ_ÔDYxEÙZ’@¼ñÚmÒRSrôß ?¤$ÄÅ3ìçdžÓ$o™?”9»z½7|Bx }œ~5ÁªªZ ¢*0QŠUÍDÐëÎj®ôNRQSï„æEH O€/P°Ê_¦LSáHý1.P»Ñ§£>™4Ó 7›ÔPª]žúÿîŽ ÞH¬ÕÂE)k“z25p’—¿EÕ3 nbJŸ9±²†—ñõÔýD'}Le³ÁPÅx®p®ÀÕ‚Œ|Îv-s ÐÖ;8‚z@_À™†8á…ì’á’\*d0¤ Ô¦"UðS`q¿ ŽpÏ•).€ü@€D8vÞžÄÁa,!1»¾{uÒ"sý¬·~Ú‚ú·c%‹Ü­.¥„ýþÍ!øÂà ƒ&5«!Ù…Üëýh:U¢l",«ÉÚÝóIòoçkþo”^Í\ h!½dC'L8áš *!,F*|¯ ¢iH µP&û‚«Êi9À®µh¨¸Ú?æ|ï5&¨)&"úVˆñ@ª©¦Ðg80P ¿!~Yg–Þ¬®t¡¨ÃtÈ&3/hg`Cù‘#ユq䉰…¾¶N$'í|ç®}¥¾;4¬&°ÚÜ2îþ?•È”ÍC%MÐk®wpùA….>RªY¬ $ðà À(8©p„GTAAá+$–-ÝSm²Þ_ñ#DO#ûÞt|ý_ç¯ÞR(ê«/Ÿÿꃷ¿8_¯¬§÷Ð47Èn]>ý÷7÷"«—Ó{a¨¦šh*/pÐ/µPhå5¦‰ßþ­¯Î^®¿U}öøñ«*¡—ÿ2B>ýÃÛ_\æ*>úì-®æ§êÙÑè è#ÜÄ÷ºÀÐýÑÃT-M**l…ܯÐÌTh qš"2³}Úoá$òCä'Ÿ¤ÔÖÖ šT7~.ËØRRÑ@ýZÐTp@9—þ 1 0wœæIHNÚ¿er…@^RøŸhðí;J7%—<¡+-F8Óû¸LL¡BûßÏ'dßw_P@%·kjKϵ˜@CªÚ³.ÿZÃZl©Èùåì9hNEp[÷±µrÂ.åbSíü_$„ˆ˜ËF*çaªîüRéZw.¡ŸÚJ˜ ¾Ja󖺺:™L6tèP¦=L~ K]z->ë2NŒÜ²"$Üç x¨†…9i/Ku]²Þçƒ5³žXCÈÛû«Ï›™ëºá\],ÕT­—ifFï¼53‰Ä£cÊO˜,òêŒ ®Š9'ªž=vQÉ÷Í!O…>ñÑë\âÂ7&¥7¹êÚOeÓ˜¼“ j óÛðòÅúúzx§R—w·ŠÅ♿³J:)S5‘ 5KÇ0ý à§Òùpxü„8¿°{Ù°|³ý½ÏÃC5,Ì\0Cb&V‰ÀH¡ÈL<R™QÞlÐ@³®Ï~´wÀæ…{Þàò;†¼ôÑz{ äé ývsÅG+âøÒKsŸ¤Žž·ò=õ’näš \¶g‚Í@å´ÿ›vÀsì#X_º;k×3Ò}`5÷vUÁ¡]‘O»8Ú™Á%6¹ËÝçE ©š›¡G ™BØRÿÔÐk®ÎxÀ˜‡Á€5mv„cê†ÒÒRØH蚀U#$€¸ö—_~ÉË˃÷æ=Ćz“\€6»ÔT]*Yu• î™ÙØZóßË*ÙM™Hb-#fÖþ’áþÈnÞT Í$(ÁB™K䓺á&~ákæ·ËÊÊŽ;æååïÀªj'õÀ·=|·ÿíócÍÃ|=ÌÌl xÕàç²{¶à'ZCsCCm=¬Mš ´lÞYÚæT·ëZˆPlÞæ¥E†ÓUòx¿EûÌŠúp˜éíj;<1Å­ªEÓíʲjÁÕœÐSᣧձüðzK(Óº_¨Ù‡ê.k¿;›°@H ‡ À÷ÝðáÃÁu+,,?4•}vWM™¹¬†´jgù+í ©­±v™t¬†Õ=åâ†j+iw©[  ¬ ¨°Œ Ž8¼D K…þB;/ J0lذ§Ÿz¸èœ²ÁÊÒb0L¼ÒéqºH=UøOă%°´zað 6«Ïš²†Óþ!b8sWV°•Tê¢Â––Û·• 7Ln›æiý½kAíªÙÖ먩­,0†@ÿ#:‚*•JÁ;uêÔŒ3À»3A5n(ÐðSavY‡U§M›ý…^wi5¨/ìg^SsðçßN©‡>cj7îÒõ`T*ª]–7Ö `<q +Ëõ57«KJ/çç7V\€Qž4ɯgf}ÔÔ>ñ9A#‘¸'à’‚Ø<òÈ#°Ýˆ+ÜË·œÜºu îÇdko÷T{o†ÁÍ20Í zî¹çà5¿‡ wê|ƒ¬Âú«¯¯ïc=öóÏ?_úá`az `é>ÝŸ6 üT3jÔ˜i l{ד?›PSïÏ(b-H 9&Bp›¬«¬Â«0Y ·öÀb¤‘[nÐ<˜É„'Cà–+xó"øÅp×s› 9 ÇP `›‡ Á6Ø®‘'B_àuÇ€ŽÀç.~dÜcQSï GH /áaß¶ðÐ*{¥ïú© Ðø­áÇj`ˆÀ¶FÛw±Ü/&w‡5õî¸a)$€ú0N†è» {àኾ…‰'Ó·Ì6k»¾ßÚxlEK@H 3ÔTc´ $€úÔÔ¾4Zh+@H 3ÔTc´ $€úÔÔ¾4Zh+@H ô0xš¹û-¢¦vŸæDH ‡‹{=H÷ûŒÏÒtŸæDH ‡ˆÀ¥K—222BBBºßgôS»Ï s"$€ÀÃB€TxÃT÷ûŒšÚ}V˜ $€ %%%ÌCAÅõÔ‡bȱ“H $ð \¼xñ›o¾)_&¨°ÝB÷[ÁõÔî³ÂœH $ÐÏ € +̉@ý™@Aå§»ßgÔÔî³ÂœH $Ðo Àö±º**ï­v¿Ïi*Û?ˆ»_#æDH $зÀ4ïwß}Ç‹¨® BúÒMA¤šÊ6÷áû¯[•Ç‚$€è—@PÛˆhqe½îHu5TPWWû¹«T*¥RÉŽ·u$BcÏ=÷\¿äˆBH $Ðp³ÒèÑ£E"Û¼á¶àeG¶E¼û~™äêÓÒÒ@\!€èBhii†`Gø>º)|wPb$€èǘÞÁõ,€:j““L&¥º²ñö@ Q£©ºY! ñ‘#G‚ãÊ *hjAYEMmS@H O`’§•Tú—É*'©YÇú¢+Ž|"|7õüTÝg ´´wIQSy AH ¾E€i¯©ÌIíHÛe›ž ÙeH…;êЭší„#«‚)+ËŒšÚ+ž"$€@_!À„ ô"Lõ˜Ÿ q¦¯|:ËÉ¡ƒgGiûms­šÂ/«I)#UÀ);꦳«xDH $`ü@Å €Æ±cAíHY¡_Ÿ?²ÕT>U·RˆC€ªaõ”WSNHt(ÒAkÙ)j*c‚G$€è[˜Š¢A`ÂÇÜS8åõ•Åá*–á:ËŽ¡s¿ì",ð¹¡.LvÉdA73¤@q8b@H $з€öÁ }LþÚ*“U–ÈŽŸåÔ¨¦VF¡ŸÊ_`Y¹š5¨TSWPáœWȉšÚ·>7h-@H ´'r‰Ló˜ò >è*#Ä!§n€àTsåãKB]  pdn(Ë)aBˎ褶$LAH ¾B€©¯€ zçÕ”?åÅò³Ì¬ ;Bgõæ~!h$+Ãt”¹§º‚ %Yž6šŠ²ÚW>:h'@H èàu‘É$A8êj*<¦ÊŸ² PŠå‡ÔÆŽ­s¿p t‘eeG]YÕmԔȦ¦¨©º#„q$€è+xQdÙFy)eÝ«PákЛû…kLV™š^)YIÈ ÕSú®ò¡¯°C;‘@H ´!Ç]Õ5„S8êú©,‘eãK±ˆž¦BËJ eX“HgÕ0M… ºš  ¥‰xŠ@HÀø 0™c¢Èt™ 2ÕÕT–G¾‹@O[5.³ž·QS–•T^M™¦BHaÁøÁ¡…H $€Úà¥Ò!ÎÄ’?BdD@YuO!/Íz*¤‚.Âj„k.C´“µÁ{¨A×IeùùR¬,‘@H ô LìàÈ^)!ÂÓTÝ#K‡"#ôŽšû~A!”޼:²ÚÙ£¨LDu¥âPdæó÷ vh$@H ö˜äA:ÓHvÊâp„À•ÅÙò@Šðe5š ©LPÙ‘ÏÁòA"&Ÿ,Ø);Â)$€@}—Ó;^!ÊÈN™‚òGþËÀgƒt½÷ý ¸G¸ÚÉ"¬0¯©m¤5µï~€Ðr$€à €ØA€SÑ=êj'ÄuOùl¬ê§‚.²T–¹AAYˆðàj{Ae‰¬ ‘@H ôQ v`9d²ÈN™ B¼}„ec!®ñSyYeî)cò 9 ”ÊðšÊÁ)Kd§xDH $ÐG €ÞåìÈ"g§päÕ”KÓ ‘u–eƒ¸f=•¥Â‘WS^>!Âró)©)+¥çëÁ@H >D€×E°™ÅáÈKÑžéýå/±HëÜ/œóòÉ®1eéºqHa‰,Ò&Î'b $€@Ÿ :ÉÛÉÇY„—PÈÀâEh:›ìe¾¦Á£n"hsʧ@@H >J€—R°ŸWSÖþ”´É×¥ë©ìˆ%ŸÊùtˆ0)5á3c $€@_'ÀKa›Hç§ÐkÈ@oA‚X'’É_b˜Úœv’È.á $€€‘àõR×Î6‰üig^#ù«Q÷T7ηg0‘¿Š$€@}‘/™ºÆë&êÆ!î©ÆOÕ- qƒzi0±MAu£“ÞÛ™‚þSÇg™±Ü'QW©¸Š9rÙñv8p^<3»4ü„¬¥@–ÉœZîØúïÐIeJ‚ÂÕå6ÅXcÖæüBÈ’d"C¯äÚÜ÷üÙÓî\éá“ùÕÓ¼qèå§i®€&ØÙ‚êcdÛM¬[ÿ¨°±“ÐD ‚«’I@'.QéìÛÍbÁÍˈ€*„Lo.~·]óóßçÐÙÝ5²Tôò9hž€¤²%†0”öo?Ó>|ê­Å;­w°rõ EÒ½cñÎÒÅT×¾bbЍƒìK›`Õ\i߸DvôÑ7¬Uœ/çÅˆ QÐJ\[º*Ó|\B,fƒ·ÇC0&ó€Ýü…xäÔ«íVñÞ CwÅtÈH²µt-¯‡O¿d|&ÇBØó¬›ÀT%`K—ÑÃ'ßlï¶?,¸ûœAÇÂÚòru6|ñ9Õ©*& Ì…©J$--àõ“¯5›ÅyÄ÷‰ìäaãÖzm:ÌMu*§ÉJ¤X^Àçz}·ÙþÙÿzè—KºµºÓ8.Î3;•ÑúóWlöá·v›÷Gü «›=±ùã·pè‘WڭιáwiÔˆÌw)}Щ~ZH©Œáòð/oWèÈdaIEND®B`‚vlfeat/docsrc/images/using-xcode-err.png0000644000175000017500000020110512236612215017207 0ustar dimadima‰PNG  IHDR>Õ¥‰( ÿiCCPICC Profilex­—y4U]Ç÷]ó5d.™2ÏCæ9cÆRdÃu!¤™•™’¡%¢d(Sæ©D„L‘2FfïQÏZÏzÿxÖûÏ»×:wö>¿ýÛëœï>÷»~P’Ùp€'ÞÏÇD[ gqé2Žh`  X oçàKP52Ò‡Bþ¥mØÉ­a¡“\ÿôoÓ>ІÀ¡Z—?¬rÂöØì„¯ùü ×vpµs„8bA3uˆK!¦pùÃu'lÿ‡ßp€ƒËÉÚQÐÔxG7<Dß!Vrtòu€nŸìëèèëà q2Äžž^P~Šfˆù>ÐZŠEˆ¹NÞ ÔCí2”W¢Ê“ôÏ\”«&ï渡:híCîæ6M~¿+]¿¯³„øït025P“ÇÇ›«~Þ¬œrœfœîý>#>37›6§9·=ÿpÁì+òëóEû%ª¥æo„eÜòÀ÷›?ÄÌ­d®ê¯ÁÖj×ñ¼_6s^Ú¢ßÙÎøuy‡ugf·t°/{?è>L?²;9>þ[KÔ(ÑÌÉ9ÒFrIŠ ,U: 5mä©}z<Ós;ëY¶Ç8ŽXÎ=.gî^y¾B~Œ€§`¿°¸HŠèЏ–D¾ä¶´ŽLŽìÒYiù0…v%e•DÕub uÍëZOµçutuôõK † xMM5ÿz‘ÄBèÒùËxËD«'Wº­mQvöòñNÑÎy.5®ÝnSW7=ˆ<ñü^ò]o g__¿þ±©×r‹ƒ*‚Ÿ]¯ ©m {sãmxËÍ–[-o"›n7D½Œ®Ž©¼Sû0./>#!91&éFr@ŠÇ]‡{—R ÓÔÓe3„29³è²‰³sÖrgî¿Ïkϯ+(S_RìùЪDÿ‘|)S9¦|»bîñГ¦¿Wf?zæ[eó\¯Z¦†óù‹ÝÚÙº¾—u¯ ëã_û7X7j7‰4Ó7½YxÛÛò¼5«-¬Ý¡Cû@'Eçz×pwuOZ¯_Ÿi¿øvàû໡¢á0H}ÑÌÈôÇ£qc6Ÿ$ÆÑã£eŸƒ&u¦è§æ§«¾„ÍèÌÒÎNÎ=š',È,}m]ŒYÒÿ†ý6¸|÷»Éª}+±«š«Gk5ëW7Ø66à ÿü´±Í¿ÝÿË{‡z§rWwwn/x»_x yÐrh|8utõhë8ø·þ¸ BiŽrE‡¥cʈHFH—Éá´”¼X*cj{ÚèSYtô¯ºǘ¾2o³ÂÙHØépìÜœ§…¹D¹ÅxÄx…ùøÏðð³ Ðb÷„–…ÇE:D«ÄrÅoKxHšHIKÓKïÈŒÊÖÉ¥õ‘7TàWD)N*Õ)§¨¸©ª©1©m¨wijk™h󟃟û¤óL7VÏA_Þ€Öà‡aûù£ cS!S´é´ÙKóÔ ø‹ç,8-.\~jkåtEÑšÞzݦ˶È.Äþ‚ƒ°#‘ã”S­s¢‹³«¢­ÛòÕ·î™xO <#~Å«•éíé£âKë»èWïŸ`{M<8Tt]7„9ä{èë°„WÂ…ÃnößÊ DªÞ¦¾=Ucq‡ÿÎaì`\q|`‚~"GâvROraJÐ]£{|© u,­*=>Ã9S5‹%k'ûCγܤûžyzùü$ßô>)J*öyx¡äì#öRTérÙpy}EñãÄ'A9Ušé™ Ùròxò- ŠnJ9Ê2,36‰ IBµMíM½BãI³JëC»}*”M—LÏB_Á ÏÐËhÇø‹)‘™¹…ÅŽ°²i²-³ßÅÉã¾r¤qjpnŸ.ç²åfàæIæ=χå>“Åo' (°+øN([/¢!Ê*º+öQ¼V"[ò†”‹´±Œ¢¬ ÛYjyŒPØWÜUÚQÞS9RC©Sh0jòhIkŸ;g¥ãý«=Ôkðå<ò@Ó|³óý‹B¶—Ò/÷Y_Ñ´Ž´i·#¶?ïá8ã,ìêÚw•ÓýšG?ä~Q„y-ßrl@àµÙ £àæ‰ÐÒìáY·è#Òo3FåÇðÝ©ŽSÿ螌LypO5u>=!S.k)'÷¾Y>¶` 0­ØºDàÑaÙûŠÊ'I•¾Ï®<׫Qª•z)^/Ñp¶IëÍÅ|[\GeçXIŸú@äPß®‘ckW'7¿$ÌÉ.l/u}¾ú|£së×®øÁ­ßú#1 8 Ô €8P :ÀŒ& »‹4Ÿ‡¾x=ø-ø+øBშFì •ÑÈaE@µ Ðt7Q Ñ2Æ󒘛8•MBò“”@ºFæK¶KA¥x@)MÙ‡u£ÂPUPSïÑ”Ð^8E|ª‰.^’~ƒ¡š1I™Ãüž¥ˆÕM›•} 7Àñ˜3þ´'—1·,/ï.ß·3üƒ‚-BMÂM‹¶‰õˆHÌH®K#ddEåtϺÈG+”+ö+í¨œV5Q‹P¯ÕXÑ:£í|®D盞¨~°AûùSF.Æ ¦´f^æ½nI—~ZZYµY‹ÙäÛQÚ‡;ütrsžrµpt×÷èÄk{µ{kùtøéú÷]3  ¶½¾ê¶}‹&¢à¶HTcŒáÉ8B<1-™/åõ=ãÔ…ôë™Ø¬’…ÜÁ<—üÃw‹x‹_—=š+ ¨À<ÎúëLeÝ3­ª¡j«š¹Z÷ºÕWÞõë øÆÅf›7Ã-­ÏÚ™;n¾›éRéÎîYíSíOb¶|Ÿù¡ï#|TlìʧˆñGŸg'¦©¾pΈÍ*ÌiÎë-|5\Ô[Òþ¦²,û]èn…z¶º¾öy½sãùæýŸ‘[îÛF¿¤vXw‘»‹{=û•ɇ^G†Ç<'úÿ©—~×$ê^^>8}ußÃÿß§‡?TGýn'%™ÞÜê©¡‹:u^Àº| 3¨ ÍÿÔj'ñhÈÏr­O¨™§à¤û¯æçÕq¨{‚|Ü\\ýpªP¥ê$ˆÓÁ; âÄEEeÁš2 ¡ÕªKt pHYs  šœ IDATxì]`TÅÖþ6½‘I½7ATPÁîCõÙõ×'ú,¨ø|ú|6DìbÃþì¨ˆŠ…"‚”&½„„@z²I6ùÏ7wgswÙM6@ àäîô3gÎræÌ™¹€e, X°(`QÀ¢€E‹, X°(`QÀ¢€E‹Gš¶ÃˆÀá,ë0VË*Ê¢€E‹, 4i Ôì‚q!u1 uÅb4,p, X°(`QÀ¢€8dÌÆÁNòÞò{†yúÍõ«+ΜÎr[°(`QÀ¢€E‹õS .Á3ÎÓOèÞÂê/URè„î™Ïì÷åÖ™ãu˜¶ëŠÓi,Û¢€E‹, X0(Pà-ÎæËMÈæ8¿hÝÐ Ü3½ö{Ú,¼®0œN£ý–mQÀ¢€E‹, 8<³_»µÍR´ÛÓÖèpí÷i7D‡Â<ùkw]¶g‘ÐažnO?+`NËø†+¿E?«ý4¤Ç¸§µúÕ¬þãÞ'â;ý‡ejcv3Ìì×nÚÚ­óyÚ:žmA»=Ó¸ùýe(tãò´ ŒaæÇæÍÍ0æ!’Þ`2ÞcÎïOzÏ4VþZú{ÒÆ¿E?‹~ºÿúÓ^<ÓXíÇj?VûñìþûÍý‡n³1ûµ›¶Ù]-~=ëp3 ífœN§Ã¼Úþ¼LÆl{ºé×a¡â—'Rž`S¸9N+Ñ.£Ã4ò®?æ¡'¢jÉ~Pm(ݶ«lqNç–¨,-Àº_æc¡èÃ|Y}"îš8‰õrA6„v @·°z‡†ƒÀ³ñ³–e,ÀC¯|ƒÀ€6¸ôæ»Ñ±Y•HÄ6ãç/æa׈3,CáѦŸV EJïÿøã5§ôîÝmÚ´QŒÁZ…@Ûœ/ihó‘#¡Ø¹s§ZˆçååaÈ!*o=¸²cr0ÖF3ô³=ïk·N§ãÍþz%L¬Òæ0ÅG»‰†ÑÒ•·WC®+66VMþÜÊ ¡(a Ø›†Œ F†‚4ÝÌ'’_fëÖ­ &Ó+˜2aUU9P^f¯%`“0Â$#A˜ÌSÌôôtw˜ÄSà”•–«—W-ƒ*™2D&óÔÓþÇj8ÛB LêÕ5l.†qC1¼oÖí´£ÆÖ 5Uåò®D§Â^†liYYYŠ)Ôéý¶¥,òòºs³9vA›˜jµåå7o kŠñýŒÒ)ÍŒNì-™_ax&½ /#ŽB¿øNTœö#f|¤ èÈC2 Fòêºô?# “'ýæü‹/ÄÆ¹âõÙKñéoýqç|#¤bœµª 0ú ¶¥/~§ž’]t!ñ­b&þï?w¡· EÜÅkݦN8ù,Ø+d‘Q}°oï °õhSÉÊz„)@)mff&†Žèèh5?šQâÜÅÇlô˜GýÔ”¥{øÓO?))G¯^½ÌI½¹)TðìŽlÌ”Lèpúu¡u6t_ ÉïÆH˜ÈB<ÂÑ8}êGPùŽ¢m2šóÒJ™$ C19㘖Ê}uÂ$“B'yMtr{D› ×eQÙsß¾}uTz„©ñT02nj•mœé%\¦­f£‘B÷@N•òï` ªÆ’Í8±[vís X$ 6Õ¤y…†}wø D1}ò&Ò;\†Ëë­ Ñř󖆟kO‰rå«ÌYWž›.­Ô†O_ºÕ­/í—DhYæö<æ®eÒDŒþçÜ!Zå+ÌX†ŸOÃÚ,Ì€³®Ç…#z"¼2ß¼üyuˆjoÁóRÁ3(gžÿ&UÆ‹ü ­N¼¢¦³¬¶*ÊÕêÇÈoCçcpîÊ5˜=o)²Ní€Da^H¿O^ž¥^ÛùtÜyÍYH7U¶*+æ|‰dŠDœwãµÞÛœv¬ùâ=¤w¼럠ŠÈ[ó ÞßœbÂߎM fâí¯©øÁ§ŸŽâ è{ùuè¯D$õǧJþ7œù{Ÿw#þ>¼›AïÊ,y¿ß#nd/d0 ‹0 ž9Y]õ« “ŸÊœ-˜“mCßÑW gsì•Î1U)’stqúå/˜9_/2”ŒÂU矌ÕVœõlwº•/•º,ȉ5özœÜ9VUY˜Žù¸þèl„.»—¤R3Pœ¹ß¾ð˜‹æ”Ëþ‰svð)®÷}`¬ß&F2íÛ·W cêrnÑž×Ì(kf‚ó¥~8aùÉPpùQ%2v\®È8bÓ/£Šz´[¼ºÑÓYkL=^ꌴ͆~¦å£ÝÚfÁæG¼¾ +MI'xVÜlk7ÃuÓ2O]†ñÜw×yjó×Â7Ç1m}0ù¢X¶†EÉÃo¸kýA*-óXÆd¼Ê«äqØDbdÃÀŽaˆŽÄžâœØ%Õ¡°E" 0J˜‹Py/¾hvíšcõW ‘£›ƒ Àïÿ² ]»´q+4¤E\tùP KÂÇU#e?û0çá0?êJ<ôÔ$Œ»² ¾zýH-6²V—£ëÙãðè¤IÍ©X=ÿ}lʆ4¤†]z¹@†»÷Þ; Z¡À­T“§ZÊzð9|õG!.»í~LœøÆÝv¢½°ïU¥»›iW õàè°ïŶ?¦á…×â”ÛÆã–Ëc£à¹Nðd/D’pÉ­ãqíé¬ó¡2æá@”ªíaèur *EúÄ w&Nùíþï^<5é\ü ^ú`‰ëNß@ÙÊÚòí˜V9ãïËã»wžÆŠÞúkƒ=¶™¶£ö\¡I…“&@Æ‚÷ðÎÌe¸ø–û1iâýèP¹s·¡Â9¦ÕŸ¹àS¼537=0ï¿ ŽïÞÁ¬5Î…à_‘»3?úͯ¹ãï?‚®›a‹$ztlŽJŠ&ÜŒˆ›•æË;Ÿ¹, ·±œ‡nC—Ì™xîÁùاګ,FÊ·áÏßÂ;pÛ½ãpqÿ\Ì|k9 ð2—~_6vÁ½ŸÂ£÷ǰÍU é;á¥PzÎÿá!iŸ÷ßr±Àyï,ÈtÃD{ê{:e7= yà–/Ø\SŸ‚Œ%ø|Jä0€ùaõ,˜†i™R~ ,?ŒyîÖs¼¶ÙìùèyŸnmtœ9¬Þ-ÏLº Úik„”„¢¾I••ÔŒƒvÓ&÷EÃüœìù0Œi_\Æs¢gZý0Œ†GBóaÚú`juZ OÃ4ã©a2O]x*dþB?-jÐ+YtddP¶¡Y¨ ÍcP!sKÙè?¡S(J*dkÄŽ Û¤3Øy,×sÐ&ÑHp*ðíÿ°bëY8³s42Öü"+òèÛ65vc‚Pï% íÚ“ÈEB»d$Õ dçøE¶_Fö–m´ÂrĤtArÀïÈÚWŠN‘áH8ît™Še롤qm{#Éö»0B‚Ku0bÛ¦€ké„¶íÐ:Atsd‹¦@”qK5cCô”‘´­%å®õFYcÇbH§p5 µï ‡ Y‹ìò‘Zƒ*îE¼/žÛ"ák{éؼìY,K݃~-[¨‹ò%ýÞU=mMj*wã™ÛÐæÜ;0¬«èqˆ€pðèk°ò§˜5YõÆ/˜¹ƒ.GBP*ª£åÝàç•[qnïã!ÍQ1>ÃozçvA•Œ;”Bšé¦›£­’mÓS¤p7cÏÜŒùÒ¾Fßs:ÅÙ¤µv¨k.ÃïOMÃú]C0„}€9úþ“þo0B¥"1½â›5é(š5â×Ôd -¢dÛ/½:%#E¶Uù úžŒËDq7Z¶Wl]‡á®Q0ùë%È>áBÑ2°Õmªî÷ᆶåibàürÀŠé¦ºpNªoŽs&Wó¶¸Ùˆt³§ÍÑ]»Í¼€N'ÑîF gîAn>37ûé&3ÁpýÐ_§á¶'x=ñk[OÔæÉŸ€ègžº _€yR×0iÓãµÈˆnæ©Ëh<5CAXÄÑ&a®?xÖUÞ±Gºdæ³yý’°«Pü92´J“$SÑ!.i»+Q#¯*4LNgèOÕx!Hux\! ã©‹ÒqZç6Xþm^s ¢ª„5§—¸BÁ‘IW`ÊòƒE"ö¼wžÃ\5CYmƒSB6²/u!f¼òÖIšÄ.ÉŠHcgAÔQnWú°S߃ë×Jlùi2>Óòg&SfÆM¼ -B"UYaÁÕ"gélƒj:Qn·Õ5þYŽêÊý.ýÑ1¼Ê»ËEalÅ O©³]¶&h¸§_åµËÔwRô.ƒ[HIeBw;²3ÓT¹S_©F›­ôÛ*úƒF—¨0” i¨3ÃȬAí3Édò8ñò©AMK{‰ÝØ®`r?âÉDz©x|1K‘mJ)79\¶F™_ ©"J»Ü"õbœ¯®¸Ò­•¹% gû¥ì°jazY˜9Ù$ÙÂeè’‚ºôo‹ ÑíbIÆû)¨‘N§ýçä<…©¯=)íE¶¶nºF¶C¢&ôísBËå¸5U Cd«ÎV ½ûÂ`ÃÔÿ>tJËnzàv<¥«‹ÇÓ’„å‡á¨çom³EÒmt6b÷G¼Þ/†Bй´Ÿ6 ÓˆÐ6?Œ÷iXIŠhxBKô¤ÍLzò×n¦­0T^a:Nì¾`j„Ÿi™§.CÝ ¾X3žš©Ð¸iF‚+´.fÚŸ¢¤QloôM‘š4Ïíy¢$ÍGh¶;¿­¢Ñ^Vý«3*^ßI€ê@t=åØ^ý?|× ‹m]pWw9Æk ³ûn ©vN¶£ï}§òÔ‡ÓP´¢< _½ú9ß—Nï(«îlüï®'$›¹ƒ³¶åô‹Pü¤ë^Æ)×ѵ¿räKÚA©(šÒTÊÄ.l’rûóS'ŽZÔ.´¬}Í/%Ð…OVFæX¦n¼yÇ»a÷6™² ü:c¬¶/AËÐ0Ø’»Ë[â¡—/Ù ÃS'§†Yã¢c xaæÑG.ŠÓù ÷®•owwú 3¯¨v²·ç@gg ²)õÅ'¸÷ž/xjS# ÖezÓDãgFH'”£k1"ÕïÌ…ë0ðR‘jÔF¹\ÕÂlŠhJð¨B‡ƒ3«ªàw—ÜM\èæbKôhêLâŒÃÈÿ{ÃK²±xÚøâíÙèðØ5hÝQðþ6Å—÷…ž"ªª¨WƒýÞuZûñ>ܱ²|M…:tP'©\É-÷1œ‹¨ØÙ¹³î!uBÑs7›%GÚlU|èf+¥Û<:è–k“$®S¹õNL?ÝÚ¯ÝD€h?Ý)=*HwÓ¾}{µ7ÄJsůNÖžÓp‰yê2Œçþ‘†©'~Â×c¦­&/Yb:2†§í “y,ãNê™Øä¢©¸È@,Þ!¡¬Ö‚Õ€™DVd:+qA") }ë65k×C°¿ü² É#F")ÀÇÊßPhrŒ°/žžŽi»E6;Ò6"£ BZ²fÙö9®•‰esfC¦K”•'ô °!uÊì²m!}«¢ÌØÓdû¨}ÊÔªËúîõ/°"#eÅ…ÈcÅûjçDì ¯ÎçGƒ½Î‡‰mM]’µÈÍ)”Õ¼·ÂêÆÛX”æ GŽ¡ååå }ý"¼ñð«X)ÌÜØ‹N@ˆ0†­{ž(YâÍi¿bGÎ>ìËÛ-ë6#ßùj¨C‘:ý;¬ÉØ'ýYŽàþò•`™„¡½8M‹X¿DâÓÒ‘#ïdÍw/âí$XÏÚÁ‰8ío]õÝ|:ýü|öc…ªšþý‰¿¸vÍ{ß,Þ‚ñ­® ÇH¡K€ÌÌ}ÔÒ@òHˆä5èžÜ#¿ÃÔ'ÊÉ–¿aÂC]ó²4ýi’õÇxnžs1"4;ùükpÕðãS#"w™ m±Çá‘;øhòT<ýÛgj)c³q¥ÈñUQâ¤E’0”SžÀ‡&@îp}ÇCèæüaè~îÙÀÛ_â¹%òíÑ ¸ìœ ˜¾ÅYO‘$´9õü3t>~]¾KB{áŽ{oÁ¯Ï½!â~IS]|Â+ðÏš(L™ú¾WíEÚÚñ—âÑö-ê¤a ´QŸíÎQäSoÆøèyøøÃ™xiù7ªŽ”\ˆîÈ?NSi¶HŒzèvÔ¼õ"&OøZâ%.åtÜöйˆµ‰nq%ÅiËC`È™lÂ4ð[7EÓ0õS~TѠѨ¯F Ñÿ©n}"O¼õ:~ýL"EÕý¬kpÛYíQÅm 2·©ºß‡*ÚúiÂàíлvíBFF†:©A©º?† 2Îk”LpÞd;Óm­Žüœ·9kFB»ië‡Ù=ÝlÄ £í2 0ú=  ŸŒ™m“/Ö{…vwQ‹±|ÀºLVVø-ngðêmµ’•JNŒ“´ŽãeUþ¾2!<ÂI˜Z÷¦Ÿœ›*–·vngxÓGZY2–q§Àš5k7TöÌk›™sXu¬:½Ñðƒe‚ÌúƒÖ^í Ðp%éPÛz+@”ø"ÂCäþª2ØEÎn E¸HF¸¡Åî(§DߦB&B‡¸#„Q••¦]VÒÁ"º§ö`¥LÑá2 ÖÈDÆ-ÿ`9æJix0oï”™±RšzPue-L¯J \‚"—A•ÂŒ°P¹¸H2ã!’Gí=>qÅÕp„ >®;+¤ÎáRçjgUýƒQ.w¥ÈGuä#l¢›â ?¿Âm‘Jïñë,œÄ+첟o —+…‰ü½”eK}C¥¾íE", ÓòÈM._‰@Ñ• ’m!»è¾Ð‡ U+Q.scD¸(½ŠBM Hž\õ& ˜xˆîƒM&Þ}›¿Ã£¯Ïõ÷>Šn12$Õ/ãßopµHE’å):rËCÓPµS…teMvPH˜l1T¢¸¨\I7ƒå:þˆ TІ=[›zçRo¡”"wÔH­¤L¯0Örá^ 0'¥¢xLc¼OÑ%RmÔ u€\I_.8 "é *Ó ã*ж¥B¤@ù„Š~N¹èT( z´}¦÷ý>k™¦L2”~ëEVCpÕL„Ö¬/¯Ü¡t…¤I“‡"M>&7*ÃØõÃ0v6=³-^ƒÃPç'C¡Å!š© C¡2d&è'ƒLa(¦Š]§a¥ÉMñf/2<êBÒã6 ®øé'aë3f˜Ü?âV áÐ>^@u 0ÉOÂÔbyâE˜dN´§?xÖWc)~ÕªU(nyª¡@h®—`bœ]Š“‘ל9't’Šo¬ýžØfÌÆ'. ¥Ä„8Ö¦ñ•Ï ÃÓ} yTéÎ6o.ß¶/¿{=|¥jœp¯õ5)4%k©êÄCÒ°—{«oáúoñøû©8ù´>.MÃOK¶!è„«1ñ’ž° WS_¼«¦Î2Œöæ m ƒR çx$õЧvÌ@¼ÒÀœ .·ÆÑ4ýT© HmÜAáR Ær! è÷çoñÞúO]yeN¼Jâ5CAu$2 d*ø‰ _?d"4cÑ †B‹?hk¦‚6™O†Â,¡è$W~ iü2šXd&4!FîŠF‡ùÌ™èhÙ:­igΜ%ÊA;ÕiêÀûA’’’qÁçû“ÜJóW¡@EÒÓ¶b·è†TÚäŠõN=Ñ·S 9•*ë‹ÿ«Ðɪ§ER@®ö¾F²¡Ð’ ³­ O)™ óãZx.ýé÷d&4S¡ ÚZ:A[»ÉXt†â}±dÈ8˜Wþš)hÄG L´-¯E‹ž½˜uwŒ1\UËø•¼B§«/^§³l‹Ü(àd(Ò%ÐÌH˜·>4SA›+}2ÚÖL…«+’9І½U?:Œ¶Ñ‹o¶ÉpЯìÏÀ%r IDAT‘*´Yñä@aŽÙ-0Í8[n‹<( „]Ÿ¦¾xŸ­‹y ˜z®7Ïït“aÐaf‚™ÃSA`uÍy˜3šÓëp GÛæ4–Û¢€E‹, XhzÐs¶ç\NLõü¯ÓÔ‹}] uf æ0íöŽ˜óYn‹, X°(`Q éQÀÛ\Î0ò´=·0•ƼåaΤ3hÛG·9\3% ³ªí Ï-¿E‹, X°(pH) æmHÁçr-•ðUˆžûiï—V3¾23\ðt›ýûf¤e, X°(`QÀ¢€E&O=Ï{ò:œ0»½VÈ3³×DN@Fƶ~Ä©Œ§_‡[¶E‹, X°(Ðt)Àù›Æl›çtí®WpàkËÿÿ¯.1¸.L¥¶¶<ö'šbQÀ¢€E‹š ôœN[Ïé¾ÐÔi}Å«=Ÿ‘õDxC ÞëiE[°(`QÀ¢€E‹‡Ÿæù»>æÂ+vþJ(|׸â- …W:[, X°(`Q ©RÀ5‡;Ôs;½žq>ëà/CQps¼Ï¬‹G+ø—mÛ¶)ôù ~-—¢ã ¯qqqHHHPߊ9ZëgámQÀ¢À_šæ9Ü“0ÇÕI$ 33pÏ‚Íé,·E£ž”¸¥¥¥)¦aĈê#q÷Þ{/.\¨êÆÏóãp]»vÅ3Ï3^!_%6>J(ŸAdd š…% !°ƒÔ¿¶¾Gª>G#Ξ´Ú¶‹×.Ƕݙ(©°#B>+OSj/GdH(Ú·NƉ½ GÇ®žY?¿†ýÍÌ9ˆŠ‰ÇSG(÷í·ÞÜêÇFnîæõá´_z Ï<ý,ôÈ÷¶úªnÅ[hJJJN:!##sæÌÁ›o¾‰k¯½V¾†zÈ@ˆÌÄ^‘ÌÄ”•¡y³fHm\†nyÈTäî܉=²5Ô¢M›&ÍTìªØ€¼¢LV yt’Þ áªZeŽ•¢°hŸlmmCNPâ›%#)¤‡«Ú‡Ûq4âl¦Ñòõ«ð¿YŸ¡W^8ù¤¡¸¹ûqæh—{ÉÆUøiñB¼òÅû¸á¼K1 §÷t® G‘ƒcÊì9s‘½§¿ìraXÃQTT‚-[6cÙ²?1pàñM¡6žs¹©³+ô<ýn8ûÃPxàé7 ‹4³×­,7Onn.¶oߎ2°üÍãÀòÕà —ÛíÚµCË–-›\]¨3Ñ«W/,Z´óçÏGEEJKK1xð`µÅq,·Ùré“d&â…q”¼ìÝ˯÷Q,¡˜¯/K$Iòùù]YYÈ‘´-SRšSQ\“‡]Å‘D´o¸èX” ó`¯.Ã{¾óƒ‹@P`HžB×¢9Z‰Äe_þ^äìËBQH’¢º#Êï•x4âl¦CIY)^Ÿþ>šEàÙÿNB\T J++°³p/ʤ}å•«äáBïˆà$%¥à–+nD¹½ ¯}ò.~\º7_r­0|³g†ÝÜk׮úõëýBeÎ÷¿àœsÏÇÍ7]Æ“ü‚"¤oÏÄiÆá…^Äæ-[êÜ2ìÕ³'z÷îåWY Hdž°½¹=ç{O¿[Qþ0nL]¸¹³Û”ÔÝIfB>sŽSO=UM&fñ©{JËw¬R€2ÛÁ‚ T›S±{÷n¬\¹?üðƒˆÄKã#+‰eèׯ߱úZ ˜‰ôtƒ™­‹QsYÇ"ØØš‚¡ÞÀªU«ÔVÌ’%K”ÎDûöíEY¯ ©©©Šù9ûì³SAФ¤¤¦€ö!ÁA3±ò.âDQ]P›gÿ¤d—ÑL†ÐÊ&daÀ2eûc¤oq„™ŠLÙæˆ ELL4rJ26X9ë[US‡H,"£ÂD\mavk6Ô5:ühÄÙ\insP2‘Ð: ¶o¦¬B&Š:Ú9³É½·¬²á†Nýû«­“ñ×ÜbŠmNJ0=ŠœœlÌúö[Ûì¸ñÆ•.±=ønþBlNB·.í•r3¥©é;1tÈ`|4í[üãºËTÅ4ó íFš/=_Š·¹Ü[˜Wâ×ÇPh@æBÍn Ô[˜Žój“HšP^ÁÀòM_âª+?Ƙ©ïáïÝ¢Ž &Vч‹Üâ xž“W^yß}÷þùÏ* ¶Ó,™Ÿzê)|öÙgø×¿þ¥î¡à)æ²â=Úb&äŽ ÍL8 à™ÐLC}–¼6aÎ’dEEqo®ä#S¡OÄÔ—ýPÆïªÜˆšŠJ´nÓZ$9"op7¥ùväç–¡DìòÙþ\C#Šæ-ÃÙÜ8…À\ í²ƒ™»±+l£Ô±»;ÀCà«ç†q¸p6ã´L0c¢0 W?,Þ±•Õûo+™ÓûãîÙ·¾Ù´TîljŠš_|þ9‚LŠJaž¶¦nA¿ãŽÃ¹çžëv"ª¿l—.ü} ²³v*éD«„x5îÎÌÆà½1Þ÷xõµ·Ð".Z‘…cCú5áa‡EÜ<—{›ÿë|]õ1fàf@º †¹¹ýa‘D|ÜTÝž‡™kgbxI¹ˆ¹Ãͪ|¬\²ñ}û#%ª¾WÑxhiÈlþ´›ÆÄóŽ;îPú¼_"66V)džyæ™®ÓÔñxâ‰'0}útußÄÃ?¬.¶*•|[™,VÃmœ½rŒ-FNãdP¬–#¢^™ © ß‘×A$êý‘ a¿»†n OIN†l£ì‘-žþ8œ:DyU¹ÛkÊÉ(BÞNQÊ,‘­U?ÙàѬ¼ŒLF öd¡U»h´jãÊç–¤ªÚ&§C¢ìÖq]håíèá¨çUó3]9ÚôŽA|kcÁ“·»é+ö¨÷ÀwqÂy]égWANÇûs>ÇLÄÙ²¨ªæ².É–gf§¿ZòUI[ª”G Ç| Þšñ1^íÑ×G®#,´þÏýÿvI+y*ŒŠ¼£FÂI'¤ÒøÓC¦úüóλNCvv„l¥†ª“ÔÏYúg5FŒ8O=ñ8 ó)Ûs7·ß1ÎE ÷˜ƒò¹Íß¼vw4nÞÅÌùr»äé©ûœrl^ºK—-ÄÇìÅãó^D?AÁº¯ŸÂIW?®Àž7þC¼öð(ø\+–§á…¿ˆt¥@ÒExüßç¬JáÆLS#£‹/<ËwÌÇ#¾E™Iù8.©;rÎÒ~¶dÆŽ<—ý˜q}b¯p±~—7Ýtåøà¸qã°MVëÔñ1 å È)×_=^~ùeÑÊ~¯¿þ:Ö­[§.»:Z·?(F­’S1²¬u&ŒÖo¢· šÚÔºŒULmS:Ær -”‘ül O¥ ´‡“¡È­N‡­R&Q¦Í*Þá¶òÉf"+µÕŽjD'„#¦ešÅÒˆ¢½rdV&è=™E(]g¢­ÚF ³! •ŒvUò‰Ê=yÈ•»,k'oM§µëÂYÑTý 8ß…~´¹’­‘±‹L‘¾SãpàL”´¡¡wÞ(ªªD‘Ü-ažto6i\.+û G*$/ñö4¡‘‘r×I lLß‚îºxF?±ä¥v<F)·Ï:ë,3á ©ÎÂtôèÒ©Ûv#µÒîÚúß’º¿/ü‘Qˆ–­5^˜ÇþÉñÈÌ”xƒyaú±*tïOø÷kÞóϳP—ßߊûš¨UYÅË0ðŒ‹Åž/+‡³4»xZ˜‰'ð¯ÏÃm¶bÀÈ«qNÈ×Xpï©:‰»m/Ä’wßÅÌÞ§âï½eß»¸ÅÒheô&'©vÕ©QåzK!¢Ï=xuÚ»èý÷[qaçpìK݈çW•ÛëîÏ1ÿÁ3P+,uGÇå B{ñ„Uûd\\iq‡¿í¦±ÈpÊ)§`òäÉxþùçqÞyçá´ÓNóÚ‰yÍöرc1sæLÜ}÷Ýj$;;[1=åX×Ñf8ªQ„“‘¸•dÁ[%8“šyé;LOi„še™Çï„ÁIŽñÕr ÄAø^Òx+îP„å—å ¦Y ʪJÜNsp{#'£X´ë«ÐªC4’º8™yÁxT ¹Ô*.¢g·+uŸ<{m˜Z‘s *„á ÁÞ’Ýh٬á@WÁð…³.€øQŠA:ò¡Ÿ9ó]êðJ¾ÓX8›‹Y³u#ËÊ|û¾ÚvEe Þùª;J‹rQ]UæJΦÀÅ›C8 £]DJËpêÉEèÜiÿ:¤tê¬.ÆêÖ¾³ ΑvlÞ¼Y]½ß¹sgô]-7êã³#NÃÒ§_d “¿/ÛÓ7KªÂžœ]hݺ5ÒÓÓÕÁÆó2,šúàú.±Þ4Ú6&A#Ìï߆2º]( b˜ÙïWálü>MxolNÏExöÇHü¹ˆj“ç㫟þožýûñ2ÂúikÐó²g±ø¦!8Þ›ÈÁæ*=ýö縹§sš—ãb\kìoÔ (ÁÕÂ-ûÂÓhâãÂu„)ƒæ“ϬÇ}ç Æ”çÇàãQ鸦§7dLåÉyxâåFÅrø‰}fFY'•ª €çž{NÝ€ÉS¾ ;ûE]„—^z “&M„ ðøÄ‰êlù<€h‡MFµdçåoŽþ4ÂHT³3j¿'£a¤rýÚ$šô\!‡ÏQZZ(ó)ꔆy .È)•É­Í[E ±sŒbæ¹À©æÒÞd;7½Š äeŠb`v £C\±•Õ• F~¡ôàf®àƒvøÂYæV%§jK@ÞC¹ÝPh&îYñµ°®ÞVø…³Æööì]¸(¥VËv‡6l"qÍmØ›€*‘ZpÊ0ÚœNa²e\–;*¾ûCÄÿU¥èÞ­Ò ´éØ fÏu ;¢¡5%|xRíœsÎñ ô´4¹µ¹Ù™Š™ˆ v ¬H˜ ¹›‰[¨Põÿño¢ÀEøøå»Õ}܇¿ú¥ù(p•+âVI½ü[<0¬¥¹·¼ðü.Ë,Ùú5.lùÖh< ðõÝÃp÷ôµ.¼íÙ+ðÌÕ-ð¯ÆKo<† /| EÁÌÀ»%vWzW´’Íu²ËÕÃ%BksØÁ¸»wïîª/ë¬v:opÁšÀ¿CÁmŠ-½™5©bÁú¯ñÛ¦O°6{†]ÚAÚ^®¼ã,^µeåexV¾ç±üÏ?½eo²aœ€(™P“®1# ƒÉ­&)Ù¾PÌkÂYÂüø¨{’‚ë#¾1ƒËD14TC»å¦ÿ dKƒí0:'6*P.O¥‘Ü.?µjæÊYžf *_ážRW8ÓTÊbƒGþ8–Jã g;ñ¦ô¡J¤+\øhœÉ@©P ‡`l®ƒNÓX8›ëÏãžú²*sxp  !¢k†š aÖùˆ{¿'0•ráXil<æ­h†Õk ±¿7Èœî(È3ƒ>¢n¾n‡æåå©ãäþè‹üþûï˜ÿý,ôJ ÀÎí[±~õR<~e‘úf™ nq$''ã/§á¿×G¢WGãÎÖ½‘žÓ}cžë½¦i¨„ „À=‰g9‹áf_+sjCR@=®Þ˜’í+°@œÅDÖˆNƹ¶|K&®éÑÉ ÂpÛ9 ÷“#W‡³.»gõoïSÏûy4d(|áY+Å0§<[ŒçOî^·‚tÆÿn؇KðþÂÕè_¹ÿ~9i³Ož—¬nì£ Æä;nÁ]¯|Žy)û0yÔ?0ª_4þÜy'š•fc!Ö£LÄ`Fý«åž€õXÞÝo™x²÷™x×áóÅw£cár<0ò:És )}‘·ûó“íqÕ+cþÖ—Ð]$¶öŸ¡Óˆ»ñäüM¸ª»ˆ«Rq_ûáøèÆw±ó‘‘ªÞû³iÓ&\zé¥X³f ™‰¯¾ú vyž†íÁŸvã™ïpù3wË•Òå©h‘ƒÎÍ!"*a¡BL1d".8½[2Váõ)!KN |-gÏyc$·NšºQ´—ö®¶{oý—ñ"RW „g…tzm{ÄsP¡óÎ÷\!§;d"«°W*¦@£V¼¯Tm„KœX$rûê\Ùiްf²×á4d:Ž;«­òé>oDÕ D._*'lu×0bû™0ÈH0žz,“ã”ÆI1 |N£Ãµß°gs!aêLsÝŠF5Òê£U §$¹ó%²eøeC¸ô±< èW¤êZ,‹ÂùÖÊ¡¤¹'® ñJ6“;v¬/2KÎERàœy|^ú`•:RúéW²XœÔ³(@«S»cÂûÔ]7ŸÏ*E¯Ö5X—Æù¨ÑÇI3ÃPÿDî…Pþ2¾€k|Å{)Ò"ÇYŸáÞ!¡0R ?¨ÈgÇ—}9¦Ü½·P­<Œ”¦ß°.˜4kŠ*ò±dÆã{Á³8éþéøèæ¼2µåJ‡õ§NÕ[Y r§£(5¥ëðÖÃ"ž»äet ¯Dep"zKÔë3â?gF¤äåų÷ÍÚ„»F+íñ§gÜ…Ù=‹U·à¤CÄ(8h4‹åêIJ6þ$ÌðÄch›`8lgã­ßžC›Sf È™'©÷ÍÀ¹mEƒß€a‹NÄÉò—-¨-ý.é…À¾Éîõ¸jx.ûÃ?TLoÃäŠÿ“O>9䫹ů!ùvfí@¡- ]DÔŠ¨Rd–.FiA¡¡wà’€Þ}ú`âãàYQÖÌØ¡öçy¿·Fšºá ¨Däbs‹Âl¨t©t%Ìžn<æh[Ü¡šS4žÛ.“}µÜ¡W÷ª$A„+õ*QÆ$nfÔ÷fcï®R´–mè–ˆ0mqì%%"©(wÉa!¾p¦…º]쳤¥{-þô›©l®W-ƒs-|(éD^i‘ ÒïÜ.J–dÜj䄃_& ”±/8 ¶° ÔK½óÕ‰;uEœ:n~ÁjôD5(”cÖúDG]Å­X±¿þ4._¡y(È SÌï¸3®+FÞ½ƒ{Æ¡T¤ç:tP:ßÑ÷M16¼3‰u•Ø 8ýºt&=·Óï§Óìgûù†Ýt$¼wn4ìýÊq `_+sBvzÖ…«'×BÂf«µÕÂ(—ÁARöêТ6Ì hß·¯T†CFâ¸Ä‹qñ“±òòÑz@¦ªÊàôk”dÀ›–… ¾Òä#w»l'ñ›qŠdúí<½¶žQ6§^H5 %8Ò&Ñņè4¸y;•pkvɶ7hE⬿èXHE÷ CAú9l\%÷DÛf•(ˆü" %ͨGšu¾àä^T’â2C_$á|™{*JŠaWDm†+^ù Žr—ºÁ‘ø½ÿþû¸óÎ;ñä“O*|}µ †ûŠ“ÊQ“[¾;vÀžàØW¸ A¶`È ª†´2ŽQUîÁ†ü_åJ枸ýö±øïýOÊ`@IL ÖË=ÿüBiS5ª/ ýÉ´³»½N^òŒ!LN¼\Mî÷\e¯’¯X–"À(w!HgzRç $\Ô…(ÚW†˜V¦@åê?kË>äl/Dlb$âÛD!4ªVwBÓ"@¨ÅS øl¯Ü=Ñ\N~âÎñmðÞC© ’çÔÅhmŒËŠ™ôò^гôìªÚx6sœNãÕn¨˜{ìµo$N}O€“­¨M”Òcà«2]ùKw­ÀwÖ=±¹+̶(/ɵÂerlQA¾(cQ„`C€(¹§sú/­ÚyÊÃ[}$8@˜S]²~ž†‰ë±Ž0 /‘’zŽûBÎg»ž_ƒp•ÇÌ0òwí`ÇcjJivå8u J3°n!+½‹eñëEÜ.؉ÃÚ?KþfÒº”—b_A±ÇrÖ­¢T”€òQ*["FžJ M Š}e çPØì`o½õ–º¶Z1@[n’fņ?‚ªH¹¯À._§FbÝš-rËÝi>¢-~JÌxÖžo2£x-š·ˆÁ•7žƒŒÝiØ´i³º¶ûí·ßn’õÓHqÂçcÉHpðfw{ä2Ûã™Æä']È’ð@!yÜØdµW&oHN™È;*-·Ë¶ári»xþîUïÚúó ëÆ‰=W÷­Ë²±}U*ÊDBओ¢•Ô¨LV’¶šB몑wœÝÊ܉¿¡7a¼»jËŒwÂ8CQ-L”[¾Fù¶>­›5WL(Ë­ÉDNÁ>5Îè÷d“Sm¾Ÿ Ù¢ Z·È+Ä©ÝRÑ©í.CWDÚ"/Œ¢âiû¸VµaW¶\ˆ×G¤“õ~ˆú6ÉQ;qAŸH¼tw[|üe®b&xJäŠQ8¥M%ÞÿokŒq—b&P° ??KÓ Å[ŽÉlôk2Ïñu©Ó»Òø+¡peðpè‚]€Ù˜ý1uK(äX×®äepr­AfjÂ"ƒŸ”€P[\ûß!¸à_ÏàçþOàä˜l¼ÿð@ÇpjŠHd…ž1w2ξk%žžù*Îï(+G!2²Ëå‘xTe¯Ão’ý¸1zåCK(U«x÷xú´žÅŽõ!y–€blüIVäÏ} Œ~ ·œ+« xÜøØÙ8çÁјØás\9´ª ²‘žô;¾£|>Ù¡$ï½7Ýo¾ÉØŽw{òºDUÈmsɪàÿXŽö½+ñæù×ã3 9K¶/ˆWh—¡ø‡ø=Eÿ E?>€7`–³\ úޤÙÇKùaüm7~€:dIò™H‰î…¥«¤JS· +­›e£ãÀlt9©¥´©)/òÅJ®·—¬E›”¶hÑ1L&¢íàuÞHn¿ývð/½iJFM>Òg9Xñªmny(MoíÞϾm®®XÕ$LØà ¯!î° a”‹&GG•·10GÄ#8+ûv‹n`:§rÈt(ÎÐUH *JE9¼T$€v´êƒfñ¢H(&Á(f%<4òÖÉÎ%ó±^N®Ô/£¡ƒ{ì/•ßn®Pcᬠtþ´OlƒÍÖ£S·î"™(PÛœyYZû<‘’èš³8ÝÞ—T:pâ€T´N%{r¤Î6S.úW9r ¢gr›CJs/Èøô裨´uµkêM¤¥¦*¥Ëqs6)faÊ\C2Af‚úeÃï6ìÇ6¿!´ì…“pó䵨žC9¶L1 ÕUŽJtp?ì®þMàF9û¥÷‡¡ð,ÀÓOÐÜ S'·Uºÿq¸Ö¦;j„üžˆ¿>t»ñ5<¿íï¸iÄ ™V¿[wÂËeÌcj IDAT¯MB*D , nc Di:Îq¹3­XCþ/—ߎ$Ù"¶»ŸqhɈô_xÚxH]Ì”»/à ¡û™˜ðîw¸òŒn°‹T€ ;]õ>«™ˆKuºQ“°¸_;DØÙ[äH•ý'\8|’ÛCêòÖU©(FMËþxå=pÛ}Wác‰½áù7ñÀç7á'ÉG¼Õ øïú2y æˆÎBë‹ßÄgç-Å¥²gH$ ÖïQ " AáUn‰ˆÍd»IVƒr¹´¬+~ÚŽ•¿mCÛÞ±è>4-ÛG«49å;Ð6ê8tèÙëÝ¥ æ9rd(xÛ&O½4%£Äè2à«ÁJl×IŽƒD’…솫•thÂû£Eºeo“¤ÎöÇÉUÙ<¦ã°È`Ä&G"G.¶ÊÞZ€Y¬D·-+]”`ÙÃ)UBçh‡)=Öƒ‚‰]Û²Ñ-å8SêƒwúÂYC6ãW#ã”–”*·‰YÓá:_câ¬Ë =H®Û~ï×9hÙ6ENÏ8°¥Ïôï;_%sMd.uF'ÞÊorë:0¼J$.¢¸È4ê óˆÛõµi.(~ûí7ÅT“yà6™nshf›ÍÓïüC-@‚‚JUÝy×Èa0žs¹ë59Ëöô»¡äCáY€§ß\€ÙíV§Ç×D­Ò…ÀtÙsr/¨%ûö¢\féÒü@ümâ\œygŽ(5¡E«TæÈñ0£”ÎOÆŽË_‚½xŠÞ×®Dq¹°ÇAQhŠQ¤)¯òŽ®ÃÙìÎ-OÜélwvìø»{”L8å¥(Þ[àê,¥58îʉØqÅQ å…E"R$ ûö ÃÞ/§¦#,8ŽgäØi¹èSD‡¢\®sVuq„à¬ÿÌEêxiPA¡-ˆš1;0V>R´·ˆÕ=U‰¸ò?“qˆ käŸÙÝ$ÒšÿÈÇ™È ¹£gùFBû8‚Dl,Ù(}(¬*@¡¬xËy \FVQV…ó¶aóŸY<¦3º–ÏbËý‘6´L1V½¼š[‰e0hÓ¦ xÅ÷u×]§nÓk6“:PŽÊÚä›${Ï$a|xŒÒ½ß\¹„µG&à`¹›#Ð_¥¼ƒ+Ò•»GÒlÍ\Ý9¹ T::2&QŽƒJ÷ß»St‰d¯Þ!c‚y² @³ÖòEȤù|¹±xÐJqAB§¢‚"‘æÉjùx òØuá̺Ÿ–äVŽÆ)".Ä-N‡ëĉ³.ƒ6o°,üôù0Ü.„Ëí«j„51 Šè’Î5òJœ/7áéüÅ¥%jÌ]³º2ê¨0ÊrJ(©?ÁEÅÖ­[3A¦‚~33A&‚~Úü"7õ2¸UN©&¿5Ä‹ØÁ¸È/°½¹=‡O¿Jþ0nL]¸¹¿ÖÉP8J›Cí_F.„ÊËE \FDÍœ½n”(“sʵ÷±IW&Ç‘Œ/•!Gîé¯ËÅ÷ų<+{u!>%(+@Ž[!¾ :PœŸ‡bYáоEeá>”8;Â|–¡Hü6‰—±û7MX2 …{sEÒ.ƒ~0*Ÿ!þ2J+ħOÃ3ÏÅõÛ"û‡×1[¶÷o}ûlDŠè¥QšŸ¯jD8WŽzõx`yÖ⢵•Q) ˜ÅòÝN8å•êèkµ(Áò/¥_<ºID›^ñ"í¢rp¤•S 5ꢛ={öÈ]ýEŠ© ‚)))øàƒÔÝÿ½{óÌÏ‘5l[12`åƒ"L?[^!R JjÛááÈÁe›pµÅòµda¦xÏÇá~Ï­âR°qÝfô>^¾¹!ŒC ÚD'ÉõÆÍ‚à@¾KnؤƷB¤lm„I ã´‘^ªÒ¥oÞ‰NrÕ>‰dšu²ƒ²ëÂù@œÍxÝxáåxcî—8ᬳ…8&êx¸™Gµ1 w¹•Ã=O™,ð*¤m¦-ûwŽ¾ê°·!…Üþ¬\¹R}HP3¼_‚ÌÇÍ<Ð&ó ™m›™ O E#ô=ó%Ðm¼ŒØu ŽÃP˜!,¿êØ2ÐÔ'.ª`µ¬¦ü5ÕÕþ§µ5ïŽó/ïƒÊRY:O|ø[Žït2,ÕŽe^’qÃK0ƒd€÷nb0껑ðçFìÌ)@ÌèÇqýÈóÑ/±ù²ê: ;ÈÁ¶ƒÆª§­2…¥ØcÏ–UFÂd¥Z*Ê«TÆK’­Ž®'·Br8¹–9XŽŠHV]ƒåbž¼‚\„ÔÄà½÷ÞÃÕW_­>"Æ£´;åË›d¤9x<òÈ#¸öÚkqÁ4ú~ÁåvLsù„4/ýo6™ †óâ¬J½…th  É¯;¸¶¨ ]( 1»é'®08(~ö¹XDÇ‘ò±—&iä$DÿüǬB5"ûàü‹È`Í×@1¼\\ä‹39‚¨ú(š-Ûƒ?íÆˆF Ž@¼\%,'5”®hù‹¤"<>F·Eç!­”LDÅ>i,Î 7X¾˜¹k'¢ƒZ«‹nxï¢àê‚û©ü :ëÊ힀¡ÝO>i|$ ¯{½žêØ&LE•0êñ‚P…àébÄ­Œ7ÆÂÇl…’&]˜‰"¹$EnM%3A¦ñH½ãA=ãç?aÛæ]H‘[Ë«xjÊ5dõ’ßø.rïØÓ"ÂU'é_AÂe¤îByq†÷¯ÿ{ .ÀàðgŸ¹Æ1ápâlÆá¦ÑWã¡×žAèDÊû •ËàD¡UÚŠ‹òf·dvkW&[‹årr‰œJ )ôM·ÞëžÆ\`tó~‰(ÙöY½zµÂŽ’m“‰ !³àÍ+Üh¤rô›¼Ù¸^)Ð[˜)ºÖiF7Ž!æ‡LYvÚÜLÔvˆ¸=ŸŽrîþm ¯Óp!±ÞdW¨uVŠ<( °c”‰–|NNŽRTjŠÌåï2 -ÚñÚÚ {äÃFÜà€D™t<{E˱±Hýa'NH¼§ ©hôÚk¯©/”j‚ñ+¦ü:)•3¹b¡´‚_7=Ò†LO® rÙ"’Mú–R_»Ô—ƒËx2o6¶ÉÊžÌDÛ=Ž˜dÂŒÝÛ÷nÆï«!(¤zµSÛþÜ!!#"'eîz¤Ë…e5U‘rÜ`´“Ï–7¶9q6Ó¤DŽé?4åi8ZÅÉ ¤”„*\˜Š Þ†)íÆÜrÌ%O3P*Ai^Nú6‹NÚc·þ‘áÆDæ2Ž¤ÛŒ³7<¦N ~LpäÈ‘jŽ3$±TN6Rë®C8|x¯ˆú܃róضHµ¥/¯¿ñþûÀý‡t¾”Þ(ؤÉÃ%´·‡«SŠ»¹ƒN·~(¾Ó_¥zìÿugÕ÷KâÖL±æpS°»“Oâ÷ÒÓÓÕ§Ÿë{1î¹-ß±@v.2l”PÔ©Ss„*<¤ÿiHß½[¯CË~ÍPR*wÞ<_o Ùè)Δzlüm+ZÕôr1Dýšk®QŠU?ü°ª'¯×ÛÜS?~<-Zt„jY[,uŒZ:/èÙ!LEf*$‰k У`m6åb}úŠîƒœü’~EFJ¸ þ‹Ò¶±H9ú¨›0¶¼SD3ÆMÇFŸ$ƒE~—‹üü|4kÖ ”r"£ço¾ºõË8 ð3Ó͇,£~8Ûë‡Ì‡Þò ›5Ò[ §¿ãºuëêÝòt–±(pÔP`ûŽtü²òlÎ^€æD$… &)\Ä“2¹ì*Ai¦Ì2…h×¼Nt!:¶ïäµndžfÏž­¶8´ÂÏ£¿úê«j Äk¦Fä`·Ì¿=B›¸q@Û+{»9²Ê*ݦñ5qê¸XÙæh%GÞ¢dÀ#Á‡/'ÍPø‚q¨«©ëÅ:‘‘ã ë¦âdÜÌ,NÇî¼¹‚[âEiªºÌKùѰИ4‹Dëø¹Ý°ƒ Œ"­pÖ‰“2Šzµx(êu4âl~ofü©#§9Cd/«qiC™rjmõ– r“l&2 å8¯|`¦J”/ÛD·D›VI8±ÏÄG6SíM3£¤w˜|9öPÓÜŒCܼ°Oë>øÊ7aÂieü8ñqJ¦3O¸RA™¾ÉRH¸¸Å©8ƒ™ÜÍ èßcFVJš±±±nqêéÕ«×’7MÏíÞKÀu¿·<Ìõ£›f&hkf‚6™ÍTðd&è· !‚eŽ pP$Às䜔Vn\‚ÜâmÈ/Í•ðBuŒ4<´™Òø iƒ>ݨ †«„ÜÒá$ÆÕ±~8ÁÍ™3GK§–÷;ï¼sĘ ý–ôDÀ%ñÔ~ÆÓÝ£'VÚ|4C¡ý u°i‰;'3¾?ÒÝ<±ÑÝ£™ Öƒï–õ¿4£ÔXu¥=q6×ÇŒ? Ò™}@‡›ÓÖåÖíEÓ4g¿j š×…‡¯8Ö§7hNCP÷êPI(ê`(È`hFBÛd.Øq¨GA[?$Ô@A¡!ÆÌ€è‘Æ-Œ Ç2Ž èÁ“OhtmÛ«{º&\óÅúrBæHC›ƒ vsbeßà ëâ‹/Æ!C”;11±Á“¶Ú?ÄQãi¯ëaóææÄ¡ 'Os$ÆâAšs"bùž8wÓxbZëç;ÕFOrô›Ýž0uúµFœÍu=Úñ7×Å—›í†‡ Ž„ñÖGõMÞûwj‚ÊP˜³¸'õh`¹- 4e p¯’Oc|£‡(-6%ÃI@³›aþN˜š™Òp´í O‡[—­mÏ2ë«o_ÆL_éý ×pµí™¯)âlÆQã­msÝMO|½ùY·ú˜QoùšxXí °ÿÜîê¾{‹{vOÆAÇj\ñõ5Ѳ- XøkPàXŽÆz8›{ÉÑŽ¿¹.MÌíšÃxé¹^Ï8Ÿ¨òYŸÑ®ˆú€›ã]™,‡E‹, X°(Ðä)`žÃ=s\ñ—¡01÷,ØœÎr[°(`QÀ¢€E‹Gô|nžãëÂ\§w¥ñwËÕÁá v>VERŽÒBì-±#02q‡ì °9-ïá§@6Ìûe½ÏÀ€DÏ÷긹>âÓ½~ÆŸeÝ0r@í™|O¨ö½ò•S9“&_¢PÇ®<Ó4EIÖfdT¶B¶1M= '‹õRÀÕ÷ø…hó©b½wÃOÒg»×ÙgëÜtp>wÍå~ ¹_z Ï<ý,W3~àp´%)ÅÂwÃ-“g¹tãsx掑ˆs…zGɆwqÒeÀo«¯‡5$×A_ûÜ?è2è·3è¼[qÏ¿nD8ㄅלöÕ=è*<ðÇj ˆ´cÙøûPñÉ/ E…÷éB/q^!7(0wÙ_ñ)V{c(JÓñîc£`jvû4L[ô"z4Æ ÄU9˜6éulòVƒVgãÞ±'@¾Äà·)Ùù9f8þïð0UY˜1é-¬Ñص:—\tz$4cùØûáß—üíLôHl¢ß:²§c QX}ë{ø|쀬Sûž„â~ÃØ¾Mtd“¾7UúÞSzPQ54ú^À²qÒg?ñÞgH Ïä¥[¦cð蘶Tú¸çÚÆ3qãù=çrÏùÞÓ? …gž~sf·[AG«gù×à–)íñÑ‚uÞ>öÌ%ø×‰cxùKXqïðF[16ëræÏ¯B³£•p‡ o›|éSʺgÚ\¼ ž|žï{*Þº¼ŽSa=ñÖœŸå:_"ˆpIêÙ¬„„!²* 9Aæ¯ÛD5‚ÅÆÅ>î)sñÆàQ˜Òã6ÌYuúÄË­“%yؼnä¢ÁÆ1ÁI¸NÝâ)RÙwâý'¾Å°ûÇ¢½ l¼¥¯‚ßVh@Éa]ÑÆÁëjƒ±…Èû Å7Ý‹“[UbÑÏcƼ$tº²¿º,§!ìY9 ¯®î†ÿ\ÓO]ºãÞ*¬œ6 «;ߌkŽoàqB7üX3÷Y|úN"Ú>0M‘¥Èýs6>'a¦|‰ × ¨{òs¤c\ÿQ8ù‹¥¸¤ gÉf¸ðçù¨Ž8‘ÍŽ¯Ç Â7'ÿ]ÒÅÿWÓ ”u÷½Üð“Ð#¨qf{[0á–ÃÖ°+RT;/‰Ís¶7·çÀèéwy0#¥.Ü\€ÙíVÐQé‘ÕïGS6ËdõNŒ—‰eï^”6ëÇç< |t§­Ä¸¾÷cy¡®]¡4ø1˜¾AY˜>a úö틾cžÆê½Æpœ>ûiL˜:Oâþþ'é§®Þ«`Ãôûqÿô (Ûý+&½ù;Êœ1¹Ë§c aÉ3áëÕš…7nƒ¯ÓKUŠ½Ë§ ¼—°CݳâÀ’—ÆáÝåµp]ƒ^€ÓAñýÐWÜ…!œÈJ1ûþ0}‹AØ·`˜ Ø@oùN|üð;ØY{Å@­œÏôÞÆÜð/üëwã7ÉåfY qÿã}ôí+å,ÏUñöôÙwÿt,™÷†ñîûŽÃÏ;œ8ÈWK—OŸàl7à‘~G¬~¢t˯˜"Ð>úðt *5Ú]e:öîŽxgÍ]ý5np¶‡¾7<å¹yÁŽ|ÇÂ.÷mTT”¡L´ÈGûª*PưÊrTlÅŒ7&€·ÿM˜ðþÌ Õi*°õ÷Îð ø3‡÷áÐðÎÃUžµoL˜†ôŽ”¾Òiô·\2† Ì…Žm“¸SK¨ªñç,'~o`ef‰³ˆýñ¨Ú·¯ÏNGhÖlLš i¥.Õ>ê]µg-¦ÍX‚ öX¿z.f§‡"ëû7¥¬YÈá@ 0Ä_¾9'øG cÏST"ÏxÃEÛYfW ‹4iÖ³å$uÕž•ø`ÆJuÕ!*ö˜òÌp¥‘ŠàÏYNXoÌE¦z @Е´?L~gÝsÎÂ7˜½(ËG.f˸£Æ†`X×`”ÊgªY¯êJùöDÒ Ò™€­ŽdœÙc>ü9MÅUe,”ß'uo†Ï…ÇbîCº|÷~ÞØ\5a.Ê9ÂVæàó§ÆcÏß`å—7cä°xêå*®¦*MDm³0ô¤Î¨*-ŸÉïBÏœŸpÆuá¾E©Ø±q6^…¯2âЯëfL•QÕÔTaù—O›ßÆÊ]‚§ÀyëíŸp|·ÇÌ»¨«Mq­óí'ÿÔ{.Æ#¸ o^É˧l(ÙºTYã–>ö’ÌÍ™Òe„ž"ÓX½d3ìòA~ ÇèBF»]3é$3©ó^ÂÜèQxN`ý{d9Þ›µ•Ð^ÊÓ~ƤMC0~ì­øÇøxÿ•ŸQ àTɘwî{»#¾X´©Wâé záì»>„qÛ‡?áË  Rƪ¼%ߢP¾OѼçP´øé),H+QõÈøe*f 9 £B0øº)Ø(}kí7âóÇ>Äæòt8ï.H‘èqÛ‡rkít Ý…ϸ1÷ý&ýp-Æ>ˆ ³Œ±ØLÛ†¸ëë{,8–f΂¥?·Âoé;°qÞX×¶ÚÀ_ ](Á›Ýô›¹úSÄUNÍÿ³÷6àUUWÞø/@@ªU° ¢ª^,”KÕöF[Ë´öRGÚéxéu‚_Gÿ­Fmm¨£^êÓ ´Z‰Õ&m ­ ­Ú0Ö0NÒzQ‘HR ÖP¹¸ý®µÏÙ7çžœ}îá³û<ϹgŸý±öZ¿ýµÎÞûî…ŽY¸CôÕÆ ÐáÊøäòÛP÷o¤f]¿ øú¿bê¡·ð?ë(Âk¿Ã·ï½ë6üØØc}AÄéËî¶§¨Q˜ ÿÎÿÜ-À–»ÑD“±æßοŸ: 9£V«lwný¹ß=ö]ÜûàñKrw¿·¡õÁ?£›Öüþ°~n¾øýŸv"öÆï±eÞbfA&“Ô2‹öç¬)çâÂÀâÿy<ßÐ.å೚؃ó²Þìßä Šö6^ø°ü®/ €ºÜ³æâZêÀìA'Œ>ã|L9ôÖ­yÏwPÐÄ<ùõH¶Héå6üïãÿ‚‰¹cpö´¬!×V¢ˆÏXþ1k ™gƇ¼vÞó >ò16ƒlj8¾rv· öÉçä—ÉÛ­ ”Çr,œ5½Ýq\üåR|Ö!jMO%ñ9\/¹À¸o¡á¹ x…&cF’­ yLÂ<\×ü×ZlúóNð@Ë×HÚDÚ¶í¨Šü×,¹óÎ Cp4C_&:ŒææÅ?þÿô7Ø~åXpÉxêVÐõæŸÈ\ö_°ù—5xvÓV2²D‘=ødObä˜ ¤ŒÁHšÙOƘtrçõœœkpËücY„ÜOÓ:§ÒÞ–±cGb ì†¸{ɲ1ÿõ•ú¸X‡‘׆±ü Óp0§g;€?oz›[w#g$#³ér½VÕ7‡º)u.YÁ瑪X½öüy'}p¤C1ìü¥};Š_ÖÔà¿£-È}“xLÁ“Wpô7w×\‹ÑïíÆ¸Y_^ÜAŸË4³Ç}Þ «oÄŤá±cI¡Ì?硉§’'õ£dROÚv`¾æ]ˆ»¸û—¯RŒn¬_¶_ÿÿ¯Ä¨œ3pñ”Cx®r Ömî 0ôþø\œI&,ÆO<¹d /¾‹f)ôµßý÷ÞìfßṞì/Õö⎶çMm?Z8÷f<ñí{ñàHî_£ŸÚ³ßðuO™ ŽúE¼ØJ£½ãÚ¿ëUŠ€óÆ“å¼K?O³kðÛ~'Öq @¤„Pø5×ü¾²ð‹X¸ô7xnÓ¹‚ëéŒ‚ÑØC ÙtòþÜgì* IDAT1MfàçÏýÏ>µ7<>£¨¯f+ÓÜ<¦vþá¯Ç|• L=‡ºðTœ2í*âïWøyõÓxýæÃÿ·ä><÷Ô³xºêû¸á¦9 kÌ•“÷—'ßç\öi|þ_¿ƒç˜€ûnþ5¬^®`¥¯¼g9ô¿d>˜‘Îq€´šm é]§»íçßÀœk~„Ñ} Ÿž7 è908U9c"õô"γ ¼AªŸd|‹ŸKÓò<ëp–4£Î™y@Ëϰ51LJÍî­XQþ#ôpÕ8@8åv /N”¡ÿý>™":R×;M?÷#Dþ¹áâóϡ㠅lÎx,øÖr_}šŸZo=¿]ö“ €§àƒ£F¢½m;zúm$5ñ—ï=Dຯ}ß¹ýóÈÙ¼xó}ò¡Á‹;îÌÄìO|s.ÿ'””|gòŠ˜'Tæ´¼Ã==[}d´rS,&´oÏ^;î!©J’ñ i‰Vuœ-‹Kôs·?ô ¾8ïBÐÈýïlÁ=ߎ û´sqñ‡§âL^_O±c¾ÜñÁ“3á"|kùR\}Î><µúA<ÿ:!C‰h¹h&Í~ÎÅÜOߎ’o|4£M¶R†}[A]ðÛã“sþþoÙ/äìCåo¢”‡Õç哪ÜO3\‚´¶êßõeÜ{ò»4/ Ù?‡öãâ¯ü'ðãõøý ¿¢^ôf|ñ’±xÛS¸hÎ5Ø>ñ"\uÅÊÃVŒ¨@ö°<«ÈÖ~$õ³¡/Ñ&Ü–’á½MÿDØÆ¥Ú^‹£íy“#Lyô¼æ øÂWbÁ¿<„çžÛ„ iªÉ¿o8• ÑÙuÆ›°Ë—ú ÙÜI!—³•x¿û4Z Ï;ÉuˆúÙ_Å÷&–È]D2yMÔ0J¤ª±ÓÏ—V*…BGHeÄÄ“ÜÎé”Ý}pÔy¸å6àÁp9­ [º_êÐrê½Vãã$­ùÐ9¸ùëóðÝ[ï@ýußÇœñ´ä0â\\Cš÷o_hÇÈÉÓ0mêTœ6f}µØPQƒH`C•äò›—ãù²;ðÝç¯Ã¢9d"›â šÚdh9Þ‡>ZDî_`Ûî|L›v¦žsr¨È=ÿt]+}èg¸î3ƨIspMëx°gž7_ú[³éI<Ö°]Öÿƒšø‡Ç7«´5æo]Ø7qþµèlü懿Á®ý#qÎG.^m¡)ö±?~ÆÐ/éøÈ-${æ´@ÍË“Bèå¦UŠ7XμÄFÿ(G}¢f. oÅ£kÿiÁ²'ö¾äqO×[=ê3´ú1#úb4fש›½®ž>Äc;ð‹Š ôu3R滯«öQ‚‹?I2…¿ô’²™3†7ºpèÔñÚ82åNƒr†uä/øÍÿ݇WvþN.õ=O·þÉ4Kºæ§x­ßêó£¾ˆë·Ø‹®nZÊM{ZˆïXßûƒ¸°¬vއκËg¬Ç·>„ëþó1¾o€–o)Âmø§Ï\Š1dˆš vÆŸIm:F2QúQç\B±€^y“§MÃÔ©ç`LNúÓý^å¤ÚÞMKVá5Õç÷ïÁkÿýߨEË.”-sCÏQ˜%;ùxoä1íîJ4>u¾µèS’ÖŒ‹çàmDíP.ú4§¼W|8—*óYøU0ÜðUê_l:‰“ú—wÂ?²ø³˜=ïÓøæ‹×áûëC±øÔ·á¹åÿˆÙsçc÷'—˯)… +!êuší£QtïjÌûÙ]Ξkk•{(T¼Á穸jù×}L¿Oî83Zʰ¢æ új X4í¨®\å Nè¼Ïß‹¯Ïû ^9ó®} …¤¼x]~Ëþü|ý´`aЪw—ÿcE=6R•ûÀÕØ´úë¸kᕲN~ñ;±ú¹{ñ!9âEñpýòqÑçI‰iøîú÷{ñ?ÝpæÛ¿Æúæ.ˆ¾·°æûßAé²oâÁšWqí’!O“Ô#©[Øß‹žý§cñòbLüãÏðóæNmüÃçò¤ÙˆCý1œ ãê¼×QYÿFL¹·|¡?X†»ï¾÷~ë—räŽïqg_ŒäüÜ?š»Fhå–Ó3g9¹‰³gÏGNýã¸ÿþg7C:£ø¸ÇPØHÛ°œŠvæ‡?N%^oßõïXû?ïbÖ™mXóÔË80z".¿ü,Ô®yß]õ'L¿î2•{ßjÄ÷¿s–}s9jÚh |Ödª01åê»p]þ¯ðà½wK¾EtRÎê'¨²£¿¿k=n~âÓïvKŇ7©¹tn ùÇêó6ã¾s(ë÷¥³çáß»“¬ä…˯Á#á«péÒZš¿ ]µ7r‹cñé;¸»_ùÔ¹r–çÂ+Q»{¿`:n|r®›ñ"¾üoœv.ý}Ì=¦zÿïxmÏp[ãS8ýÛa\B}ìŒãö_´­ì¯DÛ›ò¾¢úü¹Wâ+«¶b€ªô`ÿ-0îãßÀÏï;áO}TöË—ÌY޶ýé÷ Þ\¶`1m®š;ož4 xÛ/¶áW߉ÇoÛ‰…ó.%¹çá;©_»÷júh‰Ok3¸¼Å ¿‚W&-’{LhnÔ›´·¯¿i0“ ?³¾1&Àn¾YÉP7Ï­¨›ûFî.ùÉ÷hºyxä›ýùý¼?ÿùÏ?¢çItÄØÂBŒ8ÐKSy$­ ަÍO1𶲡ÏÉ; óßKÚebj7§RJñ®SÆæ §›Öå &àÔœ½èޱza_ô·±qè뙦¬ºcò[#F`ü©ÔŒ) Ír#oL G ìÝOÔFŸ‚œþôî?„¼SÆ¡0­¥Ó þJ?6£õ£›6mVÍP¼ïÏœÑ?áTYa%«ôåÕOûöRa16csö“"7£iJv$M¿ïë顯ONs úzºiIbN@_þ{{#š1#ió"™1 ÿ{õ$ÚŽrå,ï£PH_1¨îäÒçl º9ñ÷ÑÝë¨ 6ýœ‘£QPx*ô¾+ë].­E;%—Êù=*gjt”¾ ÷¬£O‹Þ=Ø{ ™Ç¬‹Ž0@øì“øXTXÞSóxZ45vš…£²ƒ¤L¿… ydÆ9Ž‘ô··Cô5×K_™N¹sòhv€°öâ½ý¹žñ³æ•Úu` —Ú/Ò_‰ÇM(DîAnû0º€f&F е#Ú(Êuà@|äо—Óh¯¡çôQ›§x^rï'—3³‘;¦ãhïwýTTÒ»ÜüÛ©$n§æÑ¿l¨¼©‡åÍ•qšêßG}D>ý«)¦ºÉBÍz´úš( rÚO²¬ý{Þ£©rª0„ ÷G#â¼w‚L:”è[Òcr$ 'ÒÌhßìÙÇÚõ]§QßRäêÁ>þZ96‡ðï=€üBú(Ñè²–rÆ:ÚSQ}ØÞ÷¨mRI¹ÇŽÀ>jcIƒ÷ÓþZö£eâŒñH’ˆÅ©IËÎ…£è‹ž"'òÚž»é<=Ûíéí¡å£S¨ÿ¡úïäSÝMý-uËM{¥ú©nÊO¯opó"ûü‚ä/Nq€û‡ŒG³Jil€ÇâeÏZ2% ´ïgÔ>H}Á ìnÄWf-Äçk·àóçòpœú¢dÖæÞ¤›*SÒÍ rAóÍ ?9GusíV75r¸ÉT¡PJ+ne‚ßOB…‚¤¢+gÄHÚìDž*ÌàK0‡¾:hµ–V%Þ’VÖ?´:‚×C‰kê-kJ7 sH!øga<’ û¯û eÑ>$Ïiàr溑:*Cú{#¯)§ŽKš=-uÈFêUïT} AÆO2 ÒËK2^é×ËLãgĦgdÉ;)’°ÒñAþ——­øÒËí‘•‰ì&Ò)\äC¼d/ÜP]æ%¯_º:çS/†µ?¬å!ó ùŸìkYå©vM"··Ü¼'$c«™¸3O7ÉLß}Ûžƒ˜WÝʨÎ8hù9­|’Ç’Ï ×~£¸€R¾A“£·=ާoýýq =mÖG¡`C)êÉJf¥B)üäR•%Ë B&—£ºTÕðòSqNš§ÜT”…4ÉXœI†¹Á8IŸ¬n9Èe*á|P³aÒIÊI›Ë9½‹:Ç&ºTi|ãåú —7¹“K%÷=â`§Î(Ã[ÙÑñAþªw# z¹äT&ޤƒþÙºdÛ‰I©tÖ2mó©ÃÚidòʃ×í3º|äfÅ!™š®3ÊqHdß¶çˆíU·2ª3Z~N¯|Î }­WßM3…4ÖÓ&Í3ÆÀ{{vý K†uh¸s¬J>™*N"RItz›þ Š'W ój0 ƒ@Æ ³KøÉGˆ>¼›ò¯l¾Y8†¬rÞ+‘Î¥#®Ð…§CÛÄ1 ƒ€AàØ!àÃÕØÎ¹Ã´\¦;C‘Šx"|Ãú “¹ ƒ€AÀ `8QHŒáİ[p†ùÊ“®Bá$â$îÎsçÎE0tÆ7nƒ€AÀ `0†W_}•þá“'ïÑ£G#77£F‘±R0Ü”3£7°³/û2^Ú fFÇûpiæNÇjщò°×I7wV¼ôà¿Î¿ |älooÁ­X†ÀíÏ$”®]JqÕ@}K7½s ¦¬Ø˜àÌ/lC٠ܱïËhïîB×ÿ†«ÎnÕ6AÈáèzåx¡ã=D7mB,î,(>$†8.MÀ—!Ì9<ôéâxcã˸䓟ÿøE|ú¢XóHòr‰ýœý[qÇü@´ûâ*böxZzðÐÜÀ‹ƒ‹ôÖËàK¶é”4ºgç‹?Á­Ôž?å •B‡’ñ?¸Çr÷xï~ײȄXÁàî`ÝùtŸBw!Ýãé>îItŸC÷4ºgÐ=“îÑý ºƒt߸qãFáw5E‚"‰&G鋊iFõ1å½]#,šì÷î–:Qš åu-*¢h©-4æ±" ˆ@¸R(2~aõå’V(T,j·÷%è±£+ZëÈ/("v~íue”WP””–J~™—HÝö¤´º/]ÑzQUY&ù/­¨ÕÕU¢º.*â6¡ÎúHB>‚XT6vZ!„Y1Ë.ÑQ´0•×ÿþ4ýðŒm¯¥¡ Ä¦´¢B„ Ppä¯ã3/>$E¬«k‡º@…]¶1QIò–ÔYXÄ·W¿!•ÅèÖ-"„YI]—•mg-¥ &ê™/VX\TP=,oêNŠªç3)šæåhÑôÃÅb˾œêvUC»ƒ×ÔéTä–Šµí&õ*ŸÞ4­(u%*+§¶”\ÇÏ> ½¤&í'ÑK‚@ûo© úIôWÚˆ&À  Aà•W^¯¿þºxóÍ7Egg§xçwDOOèíí}}}âÀb``@xìÚ€Bšxmö­hjzcênÁ:â,Ï_:ªãÓ——t N?]ÖX ´á¾ù pÃ¥PsI±w³Î°Þr'“š‡Xâ+W6××—á‘ùg`éÊû±`ròû¬z–‚+¸û=âùñéÝåuôhêq±XzíçK±ìpÕO'}5§Jg¥îÀê[j±ìsI’OG³¿u-æ?ò9DJæSüò•,<{;6cíêµxòÉã¥M;Pûã'ñäÚµ¨ÙÜ!ùñ“áH„% yéÛçU›4‘·AàÈ  ÆoÏÙí5®§sº““^Œx…gàw.¾×Õ„©ß)Ãü+—ÙéŠÑ[‰/þ Qò)zëϨ|è¤íÍH`Å ;qOч0›Ü·|ãnt§aܸ9¨,ZƒNþD}¥É-˜„é—LÀt"¶‡ÞÕ­}„>Z+¡uvVÃ&}öv4•?†ÙßúJ7~ ž:ŵÿ!nœ‚‹ÃØÙûLR#"ä|úð2¾h .š‡—×tbÅ÷¾ƒY%òß?¸·,´ /·8wúœ;‘¾q»qû\V ‹p… ®¥Ùáƒç‚WVJÙŸºçz)û¬š(šòî€Ký³óúðâóÜ4äJÉéCËaß<kP†Î;ç:Èí\zpiÂb}‹"0!4þF®èÛ=r%¿¿ «¿÷º0fé™snú&>;kBªËƒÏ#A3)Ãõ˜wõ=( ?‡© ¿ ?G’IéÓq¼Þ­µx¥ètaåM³k¾¼áêvœ‹¿`ÞÅ›oìBà’I–)3öÀ3™¡¤·þ¿îÄËÍ/c µ‡Nî1Z_¡ðwqÚ(î-&Øqýd8aI,}q(QCAਠàV Ô¸žUæ×'•):ÝüîÔjø=ãk`÷<ôÓ½¸óágpûÔœ:âåcÎdz¯} »¹Û`úô³0ñ}ê-FBy]Æ_p!ùÁ‚ú:LûË6´í܃¯nÀ#w<†iÝ/ãŠñ|‹j¨tÁP8ÊѱÙqßµf>âý…˜v¶­= pzâ)å•‚5cÃ}šƒ•]ë1…ö’T4´`Uíô½ñcL^ìüª‰Óssg²2áº44û|ðŒ?K4.˜ • I-w¬‹¨÷kJ>5¼xSsúîÂêE“q˺R´ôÝ#çÞTèhrìÙk½ ¼ó&6‘SõÏú°^ü¡| JºqÏ„Ùâc]ámx©ì ¸"oZ7=‹— §Êy=¦Ûô¯”kP¡`ÚýÎBâˆ4GåÍç‘ )3Lùãŧ‹Üé³®Ámw~c.˜žD?U:ŽüÂãw€–;’ʈý=iöïÀFókN‘3`oaàV´ÄŸÁtYÿuxrLïëô¹ÿŒ‡éæÒYݸ—’r>7Ñ–zá'Ñ“\öïÆÖ—ßDá…³qîø3Þ_ƒÀ±AÀ­@¸ÇwæÊË/%·L˜—@¸æóú÷¢<¢ðº X¼Žâµ‡bù‚î Ý7¥µ‡¢ÜµÎÚÄû *ìýñî&¹? œ6QÄ·Wɰª&kÝ;ÞÝ.j#¥¢¬šöQÄåþ‚J;LtÕɸռ'Â/ŒVæcÝÝto´éÖÔ·[ï}äåuMˆHýv¹~ß½½Nî—Wñ^‰>Q_¥uÖs¼³žòˆºÎ¤Û¡«]¾¼Pt;¼v{·è#ùêhOE¤–xŠFˆ—°hìê}]-¢²˜ 6P.¶Çh‡E¼Oò_ÑnÑÝEò¨̆¦ž] Ö^ŽH}‹ˆÅºD]$LùE}»¿|¾|úðÂAú+&ªX^*‹êh§èâ½¥Õ‰õæ–Ê…• ÞeQ_UQéX—>ÌZ/FeÙv6p½ ‹'n:†úbÞÄO)×—˜ÚXâÏ§Žœô?ª4…ÐãbqÉû›oÒ 8sHªt¢¯I¶‘*×^$NëMÓjÝÔ·7òþˆª¨Ú—rxr†¢[”Q›¬W䤟¿ ~òeÆÙÊ®öþØÌØ«Ý$cüü†=7Qûã±›ÇpËÕ Þ'ù!º3ÚCAñ——B¡Û”É6xãgžù¦L—B!ºx`¶¢';˜`im¢S‹V[ „JEývêÐcVG¦üù,©¢.….¿0»t¦“ií e-µÉù…Ëë$/íµ´1PòGm¬ Ù<½;ŒDUðãEF¢A±œH›^ ,,ªSDT.)Tò”ßëu¥ƒñítáÊ–D–¤qhh ¡Å“†ä©DØ|(~PœbÐÕói »z^ ';©ŒÂ‰üm~Bœãí¢,±Q7$ê;ZOXwSUR]+­Š&ç«y‹Ò†ÃDùH¾B¢‰5˜T|jè±÷Q¥ÉúàÂÁÛ«­ú(©M(gìŸ*]L~” {»°L¢~´49‚½[âªÚÐaàiåíÑÑí¨ÒßOö#F™úÊNá±&þ`0 …Unæ7†A¡¸‘ÚŸR(œ›2Y¡ÈxS&+êb7ßf(~ 2Þ×ÖUE÷?ˆ—ïœåˆ0€Ý»{1~üôöôb ·§œf–úÑÓǘ‚ä;fiÇ*òÉ£¿¿ÖúÇ ÀèæÈÜÛIùõöÒ"ú˜‚$šÞ‘Sû¦Ã‹õÿù\)“boOñ1žøpú¦çÖÑ„O¦:Ðß‹ÞxÆg˜a*>µ¼¤'ŠG¬~YoòÇŸŽG°"ú„‘컩žåŒÇxG}ñÈà$ôòÁ…¤å2ÊÍ÷ªh~é¨ýÑ”¦K=Í£ ¯Ÿ G"ÌOÞS¾ cèK*&nOl6>Úˆ˜üNl^}õUÚМ'ïÑ£G#77—vÐ’==ù9r$FŒ!ÏÝaI:úLJ¼·Ð¡ŽEEE7“÷›tóZ:¯á«çûâÙŸŸ÷!r«[}l Y ¦8i]LÀy¹ßaInæ,ºl6r¶V"öÄ×솔‹ÓOÅû)ñ IDAT·öŒ?Ý«3£D¹ù¤p Ë·;¿ü|R4’râÎòñ sEúJùxä74bz>éðÂùq‘ÈŒ÷Ø#‘^¶rpð¢©Ã“Éæ–ÙˆžŠO|iŠâ-Ÿê»ÔU4Ÿ0*[}:•þd}úËî­L0~éX Ö㥧©OsdBüd8aÜ–¼i}r)fÜ@ÀÍöá#ƒ€¡jÐ  &Ô3í1ÝIÏs¬qFp¹U&*Sf?ç»+Iòë¬âZt/âcñèË?9ȼ ¿ ¦© Ýó—“ÆAÊûß…ÄFÈ ¯1]ÿZQ2U(œ™(â^~Ú !¿~*¡È„ '=¬HŒ7ýàI_Î'–€jL×qíë=ãð^‰l/&îf e†ÙffÒ ƒ€AÀ pÄpŽßî±=­LÓU(tĺð´˜8ñ"‘±+:ÑsWï‰Ç¹áøÈ 0л [››é”×]fM|8!îÝŠû—Üæ$Ãp~œìmód—ϯlMØDÀ=†«±³t‡iÙHW¡HEÜ®ÍÌ èÅê"¶bÉ÷¢´,Yn]½ÀŽŸƒUž¦/3§©c²wWÚÚÚì»^–Í{›ŸÀì+/Ãc¯Ñ¿/äÕš%–UÌ«›u¤Oxism Ú¼@ñ‘.uùù$ö ʶܳMçÍLok fNF€ŒÚfLÆìåJÅñ'»· GÂWW_Z×.±Úó¢µÞlýùJ¬X³]ô‡+¾Rá9Üm3U~WºßÌëYªü†[>çÆÿïçîV œa¾À¤«P8‰8‰»3vÆÓ¸ 0ïÎ*DÊ蔔݉EâÌ97¢,´éñ¿WÜWæ4ݬw²t8y Î?ÿ|ûž‚Gš”Ò0˜¢`ê\”†Kð‰3Õ1Íùøèç®·#¨óãŸ4®·þ€…‹âÙv¯2ÐK™ºüôiýC²-÷lÓyq³ ÌXˆh¸tþ Ê‚ˆ>ðÛ„9õãOv/ŽŸ¦¾L |’Îw¥‹fø|[ ÙÀytñ: ¤WO²¶{¥Âs¸Ûfªüü‘˼ž¥Êo¸åóçß„þ! Æsçˆ“B‘HL•ñÂÎHʽ«¹K-ÀÊß¶)/ùܸr Š, ÿÄ.Âú­ÍXµd,(‚¥–!¬Óg}¥ÿþÕ¤4êEGS…÷¶mÄÊå÷cíÆä¦Ùu¯Š2äi`hŸ„è í¬¯¡ uDqÐiªÙyÂ_€L´[#Š«èôÊøvQj¿K¹é¸ì |/|J™]•DD}#™–'cÚyû¤û…ãDKf.Öå+›`·°§r “7Ãò´É 4QÞÝd;ÎÇm—–—ÙatBge”Nu´evÊA§ü¥‹©Wùùå'OgÔàâWîñv6IN‚NS­®«¥Ö —%t\º_:…U¦õ%fcVRÂù‹ê*Æ×ª×Šæñ »oTŒz<õ,TR*Ší¶,o°NÐÔ”‘}¡#Ðí`%M2EÏu®Ñ:VÕæ¢Ýj3áÁ#Õ{^xrX6m3Û¾Gñâõô«g‡“_6òyñgüN†á¤Ì›¨¿¤áÈóèísÈÿ,ºÙìë…t³9>\…uÖxRÂS±`Ot+LÄ©Pp&N…"­£·›"VÇ^a+å<@ v¼u%Ü©°]…>Q&7Ù¬°¬wX…ïÕ‰¤¢É);ë#‚Nî% Ò~C:U)¡P¨®»EÔ7´ ¦G¥í·BAó4ÙÇCw7ØÇd[ƒn_‹¥P%Ž'9Ét]1ÑXÅá)ZêxçP¢sÕ§"fÞ²öYy0"Wn‘GJ[åÀ3j Nö@¤L—‡Î>*¢¼¾]ô± Kïl\¾¾å癟—ŸuI…‹KE$å%¶"ªLQ™åLë‹’+ÀŠY°LÔVñ‘èAÑàдTœˆCV|V%Ùå)áÚ:è*,ç+ÕušL(®¶ê?)΃uB_FKm}± U¥]–Á¾@¦­·ß>ž¼ðLgÑ6Sµ#ßü:eëQ?9Öaå—…|ƒœ×ɆÀ0(7RŸ® çÑÛç‘?õ“èv*<É U(¬…IŠ‘ÅŃ _NíÄé¶BÕ/›ô#«¡çžiã2îŒÉôÞ‹<{§–TÜ€[›Ö¥ua)…J>&OÀh•€RÐä(“æ„pßâ´À¥‰iSö÷»òFó¤Ì omµwáªÅ14Æ6b®ã¯ã…£+À¹yr*'ð‘ ¬» NK¨.ôWoú+œNkäRéÙò_¸lá2K*pßÒK±`j ‹é½±6.ºtL7f*oÏga¡…‡CV>Å”¯•9éê¼ N³Ê`ܤÉò˜åü¹ä¡xtÆu»=ËÏŽä•ß{>¸Ä}Ê]ÉP8öL|€d<0ófTI{.ÃèŽg(G}dv2­/yc­ qÃýÕ(ºg!B7XBýiG/Y¼µÂŽÙ¹®©/î:hq¬ù%‹ºº%¿2bjúúb×+Ue‹loÀn¬[J IÁ |éGƒ³YôÃSI‘IÛLÕŽüòèiCÃæWqÊEW`î4«oKÕ/N~ÙȧҘ§AÀ5fóxÎn¯qÝ#™·W:cwÊAEB1 ‹'ý'NœJÏZÌ¿õ~T‡ÏÀ:ÞlE×O¶3þy.ò§ÏG}úܲŽýKpÓÕ¬ÑE¦ÌŸ\ó,Ú^åÁ¨{ü{ØÖ8|4\ŒsRÐdá6¬˜‚ù4@ó·Ý/ßžâTº4×<†ÕÏmeDñøC«0}ÐüƒZz'æv¡fÕ:ìê;8ÆÓbÕþY¸0x.ØñŒeŠù«°üÂjœ»mõ>s ÆìnÆw=L)€g}û§Ÿ³æ\‹/Ìš„îoKÿ ¦Ÿ‹Sâïàå—7É÷Ç×QšÏßÓ¤ãHZÌ$ïŸÝÍ¿ÀOXüÏ4ÏÀ›?±Êáñu[°ôâÙä_‹þõ›u÷5xóé•ôFÐ/–¸õÆù˜wàé‡.z?¸ãZIjrÙe‘Q|ÊošO~‡vþJÒðÂåß|ÊýÎËçSºZìøÛL˜q9Nyç%¬yxzó?‡ÏNò¯ƒ™×*ƒiŸ Ú ,{öÕ/«”mñ#Ùoš­¯ƒ6·Ú‡Ò×,ÄõË0õµY'B .Ç¡OÈ4^eô½¯‘­M}yþêV»>ƒß4Ðj×ÁŸþ¬™ú‚YèÝòS,£&XÞp]r{õÁóŠ3ºQóƒÌÛ&Ë–Ë}OPõ=¥XòÙÔ}Ï“XE~Sv>B®þåHôu‡#ŸdÔü¼Pã7+|©§õv¿LH·äq…ñ´·4¯=óÈŸš¤Ÿùò˜¨-SSúR bA¤åÌÄÊ‚m>»¸šM…[W¼³.±AÆ·4(áÍ´\ŠfKU±•MÙò´¯ÿ5¸¶ëÌËr“ÅÍ{ú׿AÅ W¾$ªK¬}!{‡Â!-©Û&ÑU|~†*¢+ÝÒT» ‡-yiéd—_:[nÌüdŒV°Ir ÿpi©5}Íïr©&.å”ý`ù„Èdxbé‰ö{8­Ÿ‚¬¢V'ÌN{çê_~>ùùàB‹-¾åÞR[ž\gˆÏZ¶N›"KY}±dn·§çy©#@X*«¯Ç“ìjÚ^•}R´Äðþ%‹ rɃd ‡xù( Š#–õ]á[FDNS_œu°xH´LÌeƒõÎæÌÏŸƒu—eLÕ6•Ð]Ò”=Dú}•2êÙ¿ø×ONéÕn¤|JNó<¹†%÷ êÂäþHÞÖ –<>@nž~+¤ÛwÉé°[)¬X¨›?ÜFÒÍOž«TO·¥Q~Oimt —ÿ×à²dÙ߃ŽwÞÁ «oÅ lBuK ×O:ÕIô=/OšŽ˜GÛÚa*~¬Ùβ²Ú‡<—%Õ¡ñ>‡‰™ƒÒP§´DÚ‡\¥Õ~²F§2,Ð>J0…6?\üq&k±„) —ÕTÿtþ"u’ô´mFíó"S}“ðÉ/-ÀôñÜLÒ¸Ž²ìip”e÷Ö\Xˆ‰euXwË\œAFü’%ó/#&–Y}À–µ¡-°ÿ<‹¿a†÷ò+û^ê› ¨ fzéúϼŽd»%Æ=óÌT ÿ„A`­ ¡½îƒäÏ+ɼbÊnu"·ºÕGjÒô†—BÁŠ„º•"ÁO¾y%›•V2”{*™/ÌÏ|9Årõn¹…—Ñšiâ*§ÿôß™<Ý™3FÀ`fêÁp 0@ËqU>ýÊaïNüôîñgGF 1+2sþ¾¦Ýþ}—ÿpK? ÅMÄÓºY™pš.çw¥H¨§R&ø©” ~&Šä IórÏl¨dNå—òY0ó´DHî9r^áÙF™HšÁ,@&8-bo¢®j0•g3“¯ØŽ÷®ý_üôBžå¤+¯SŒ2aa‘å¯i·Yg’)Ô˜ÍJ»ù™õ•­BáÎÔýžCù§cú%Ã?½™'XlƒÙ V`Ç'»ùÓ®Ç3/«S^OO*®L»=©Šó$F)ê™Õ˜Îû$2¹T&*SNË~Î÷L虸ƒ€AÀ `0_xéjü×rš©BáÌD÷òÓfh Z2¶,©¥tdN>=QHÃZå -Ÿ§ÐÉž'»|ÉÒ¦ñ–FHƒJÆQ†µŽ  ÃÊgÆ(ÍjL×åéë=ãdªP8‰0q7)3tHÇÍf¡­²Po  ZZ½­X¹È²Áö3¬ÞªzüdnµPÊr‚Éî´,ÉV_[¥ÕWËxï®¶Ä{ÿ1.('Ÿ‡ÏJæe›Ê"%ʦ³è;ÔZåP œòÉö×:h}w×nÝ1WCéè|¶®^dY]°ÖóÐ,•R½Lýò¥J›ëancGBöT2¤S'Ráä OW†Ár8|kÍ:RÉî×V”Lƒ|*Ÿ“öé¿Ýc{ZB§«Pèˆ+tái1á©åɰÃú'[‚¼"¬ïPçþù¥&C?¿ ËÖmBieêjqû¼3ý—¡™[-d1N(Ù–%ÏèÀ7&OÁ iõu2Ö5oÁŠÉç'Þ_:ü1-ûRvòi[ÀÌž§Ì¼lSY¤ô£9ÔZ¥‹{—|ÏÜ:çÏ´¾;ùŒBÌ\´»Òk~.âÖëÙóB–µÑ˜uPÚHoegÕv/—|^Qœ~©°ö6vdO%CÊ:á$w:2$•é‡m­Y'C*ÙýÚŠ5‰Ïl·¦Ú1ãÃÕØÎŒ¹Ã´Ì¦«P¤"î ×f–MÀ%ÿòCðÉÉdÛí}}hªâs 7áñ |š%]­µ,Ù-O®Ä½òXÈúº¶áÅmÀ%öæOmºVuéRYñìÙº>as&Y"eË‹ÖZ³%:š,ŸÎj!‡é/ÙSÈçim´·™xgk©31sæL² KüÓ;Ïø¬ÜБ`#SK‰„äH²,™; ÿQ_&ƒ¥uøÚ¬¹ø¦ý^V·þ¶ØÍk—',´Î,b^–¢ÕžºÐâé+»?MÅkŸä™Êz¤–J«/[½OæÃÏ⦞& ³VÉ4Õå–oAyVNW°--¨(!óìënÁü6Ê$zùôxŽ¿äóX@Ïbòh´o^dÍ´ˆ,Û>ÙÚ ?+¥œ¡gý¤¿Èû[E•¬Ê·|©ÊOµO£œô¸èË6•ìƒR uùõ/züë„N¿¾.]Üåàg­¹y-Yc¦6~ÿú:¬xõÔ-XŽ­v{÷«×~²ûµ…°›Oå>c¸[p†¥-:'bƒÕ0>_‚Ï–åÿ‹ñÿÉø”,uRæ9äžF7[å¾fÝŸ ;H÷MtÅ0E¦N¯,µ ¢BZu„(­ë¤ƒøô–%ùTÄJ62fiWö3,šè¸Lßt>>;|òó³â™Èx))ˆRÛbcˆ¬•&²´Žé ¶^v?«“¯é¬þ×ϧyòIžÓ m15X‘°8š©¥ÎAÞ‡Z–T';†*šd4õ^Á'¤Æš,Ãk¡rÑØÒDu‚Op ‹èa”m§M?>ý¬GöúÔ?‹”|Âd™ÆŠ§âEáá48æK“j­U*¢bh9eEW½sëò‘ϯŒdÛdk£á QUªÚhXÔµ÷ùZµõ³NëkÕG>¿òS'ëza}ÿ¢/[ ­ !†8}ˆGÿ¢"{Ë ¯ šý’__—ž >õŒûk—µæh¥ÕçðéÂñîzûtßAŠ©êµ—ì©ÚŠ…›Ÿ Ðãä9Ì'e:ƒñÏcý$ºyì÷:)“ϨbÁSáÈF¡˜IÄX¡˜G÷V(TÇÑeÒXYõó²,©:ƒ&Ûš¦Ó4rªt: ŸþéR[ñ,«ï´«aŒŽêJÓæ~4Ó±ŽéW¯½dçø©äKXxtXm”!iÐî¶ŽbŽÐ‘ÛÑ äÛº*ÑÍÔR§â½Óò¤2 ÎJ_I‚Ô¨ó †‹E ™a/¯j”G«ûáÉuB';œôÑ,•%7MÉýxñÉa:ë‘~¼ø—­¿OÎ3 ö Kå§³è+#yY«”ù …4 ªŽ¸&E²Á¶ÞêÙþ|ñT v›” Õ2˜UÛ„|^Z}­¢ZfZ~6,žX«0¯6¦øôÄ…>tü¬ ëd§Š+ÊI™/..¼©îө‰r÷ê_Ÿ^õE… :á/ƒ¾¯cšZì =ËAÕ¥¸:­5Ûü©¾ E*ÉÖi½dPòyÉ®äók+ž|*¢ÇÉs˜ Ëy’€' ÒQ(xò!I¡HgQˆ;Yçå~ç0O Å™({·m™0T‰–û1cö-@ç[èvô²,i™î!«¶5Me@Ó‘ ºtjyXg•Q—NÒV=¬xŽ>Å6!Jëæ×¯× à5G^4Ó±Žé”ÇíÖÉ® ]'Ÿ—õO^k$4­XÉUHV6 IVL´ŽJå¼3µÔÉit–%ÇŒ#Â|Ù]•ÅGé—n”àƒ;€};^Æ#´G†LÕ’±´.—˜¿¡ÖF¹NhË6WOóöY,»Þ¦ÎzäN^üÊ6•Z&«ðÈÔú®Í’¬qJO|dE׺FËÐßþ:™ÍK¾<±ÎŸ¬-£Ûg)š6è <¶ñ&ÜSÄCTÓ4VmíØÞÖp}¬¢Zé4òQ ®üT~žXÛº6ÆÁ^¸ôùXÑå4:Ùs±[×ÁÁ@ÀZ‚¢¸Ñh³î|çqBº¼ú+DS_T ýZ'¼eP}+uÖ1쎾ŽIéeàPM9øYk¦FË-0Ú¿— `_ÌÚDå4<-èÇKÏòã³ Iõk-Ÿ*£“÷éËÝã½û]‹D¶3 ¯;{jß+]¼«I”©%‰’2QQQ!j›¬ï'¿tI|65 Ú÷aå[Ù(zK !QQ[/j+Ë,ãUe¾¼´W—H•‰êêŠÄt)}Ç}5d½ì~ò)œl©‹êú:ú"⥷ìÉ„<åÕUÒXT˜ DÕKCcA9UÍìX_ê$w ’Xñe“»#2ò†„ 2+ } ˃ }…/›9{B3'4&ÂåÕ¢½‹ë„etާÿýÊÈOváC“Òò)¹íd­Ò*+”ÒÂuùñâW¶­v¹WÔ‰¦ÆZAÛ$í’JZ"ëÛ.ª"Qfã¢:¡e´†Î>áG3ïÕjå%VÝ#\#‘ Qµp×É78½¥ev}$ìùkØO>?<m…f9:»†ÔëX“U'‚Åå¢"R*ù ”7%fˆ†ÖÏzšzj²˜Qû/-%ª Û3\:ù¬’ò.?áƒ5-œfÕ¿l÷+[bF'»]¥<ªÈ"òþÅWŸ:¡hzõ‘‰òã>ÙÕ×q¿ä'ƒ®¶×–Ùí¢´²ZT”Ú†$Kj é˜Ý¾H¾ªˆ=PŸ^EíÁG?Ù}Û É ãӳޡç0ÌPÜH}íÊZ"¶Û#±.šLã° JG—ÎÉçP+žéhЮ§5c¾t4©iúZÕ”‰=\SÊR~Kvù4Ö?u˜³bRÚxÏB¤ÌZÛ,­³†ÐÌ-uŸr°jY’ÅŠº,ŸÉò)+„_kÍ,sSå 2«ê"ן˜ ¾²Sùé-UëøÔ¡ìü‡A¡¸‰ðd…‚·-ö’+êb7ß¼&¢nÞt¡nÖFx®R=•µQöSÆÁRZ¥¸GàÒ[–ôÏìxJ§çå¨[ÔZÀôG“Cu–½S¦aY’,›îîíGn~Æ'¬†’…ËÞ>Œ“‡¾¸eù4¦rÒã©b$?ýh¦Á'Ó[«Ôó¢/ÛÔV<“ù|ÓÓŒ“ìJO¾ä4Î7/ùüðt¦Õ»µVJ=ê§¿UÔôäÓ—ŸžGÿ/\8Eê²ÕÊ.?ßD)³§9T†ôÊAWÙ¿Ö9 òÕ¢m ÖÓöÎ+=>Ó Ä£ ³q°İóVFÁÔ3¥q°t V0Xqà› ¥L¨§R*Ž‘BA™Ë `øûD ¿EcfÓŸÉ/cu ã:y…âfBçMº•"á´8ª s*Y[åie¾ÜЇå;øë ô5.ƒ€AÀ p¤Èÿ*[ZЧò1VQæiÈçXî5þûÒK5wä$î$¤2b?Û߸ ƒÀB çNç-]æ22DÀoüÖÿÚ,x)#›Ë™‘Î ]“Æ `0 £ƒ€¿Y±`·SÁȘƒl w¦î÷Œ9¦ þ~¬É¥ ó´Ü—&&šAÀ `05”b¡žYé™**•)KË~ÎwO²³ZxøVè<™qyfbM.¥õ:c}Ð….íiïiEÍÚ´õªc¥†D1ƒ€AÀ pü à5¦«ñ_Ëe¦ …3EÜËoH†ÙY-Ì?l+tCq{dhM.•õ:c}Ð 0½¿u­Gzdg¼ ƒ€A cÔ˜®Kèë=ãdªP8‰0q7Ú ³µZ˜½º4׬´,RÎ,"‹†l%“žKk`Üj‰â¶&g¬fÿø(ÞÅßðÂKíÎòÖZPëƒI™ƒ€AÀ `8Ú8Ço÷Øž1/LŒ þç‡ÛÚèiäw:Ý“èvZU'eÎ#ÿ Ýú“2Õi‹Êø ½[G+G„¯ÕB•Ž•— ¬Ð%Ž‘„E97L¼É;XZ+HYg› µ&g¬ÒßAëtÄ }l1cud­»“æL΃€AàDEàœ”ÉcºÛ8ØÈÏËÚ(ë ¬3$‘tg( (±—æâ §(þ—µ’ž' ¾ð!›­µËÁ»¶mÞ¾˜|¤bØä½œQU öòF¼ÜÝ 5—5?úÎß RJ€ýqäŽ/ÂwÉ^9_|ÊÖ__i’îê_TâÎ;F´‚c†)û‚´Ëλ6þгâÎk~WÜþÈ&]a\xþ8m¯ÊñüÃé8tèU€¯=!@Ö)(²n !žÀ,²¤õ“/w>sëMøàß6bÕ«°¬Ö¢§#E.Y²d¹Oz”×·£p‰õÝ*Ký­X¹d–,Y2x/Z‚šÖÞD~doßy;¾ó̃¬›âƒ ã^)®IEKðÌï"®Ž¸~2|ð³ßCL*eO=ü0þýV~)”åà+ƒƒ¾q ƒÀ1CÀ9†»Çxg˜/ƒ©Î¡ðJì$îÎØ+¾å—­ÕÂܸT<¹ÀR@ NÃd•‹:>⋯÷÷ñq7ØÇçÑ·^É¥±zG!Æú #åm¹ÏË‚âáY´ò2¿ƒ€AÀ pLPã¹sŒ÷cHÅOÄÉF¡H$&‡Êxag$vw<ÿ Ö±£ö'XqÿËx`Å#ü†²»¯Å¥¼ ‚ZìøÛL˜q9Nyç%¬yxzó?‡«K«zÌô¬¦’]‡YOÛ¬«k–„_ª{ Ö×`ýæ6»Œôùѱ¤ØòäJÜ+à  ¯k^ÜFöMìM¶ºüš×R™SyÞ¿¾»6`¹‹,ÇV*Û”24×`é"*ïߦ_v~˜0ƒ€AÀ p‚"à5¦«ñ?-‘˜+üÏ·µQçI™|zŸ¢5n÷I™7ÒÁVÃ||jb¥¥XÔ66ˆŠ’ %Jë:}-`R ( D¨$"êëE¹¤A'eö{±&A:Š@¨\4¶4M¶®Q ënªôéàOQZ^&©0ÉÓ"ÛëÊì0Ý;,(ÈXâª-¶âÓùØ¢;áëïè¬÷°ð‹ŠbKYáâ°•o0dñ¬Ý>òùYZím¯µh…JEu]¨'ˆB”Ôµû2é'»fÑ Ër)—ÙàI*÷°3 »Ã²ü|ó«´° UDE¼»Þ²h‹,#?bÑÊ¡PÀv«“U}¡1ƒ€Aà˜ 0Ì'e~ÌÓ'e²Ý çI™§Ð»ö¤L K\™*œi€n>®3åÑÛÙ£­ Çà®’&È›"–r,.‘HD”KÅ€â…*)<&«#¢8¡¬€Zƒ¿2Nƒ\0\,JH9(¯jL¢Yµµ„XcÂÌz7ÅÊM0"ã¶T0ÝäA§³>"è¤PQRÑ â™Ê|œ&Ã[*™>):ÝQAð"íÑ Ð ’N/ŸÂ¥z»ÅYZ•|FéU…ycæÇ°^vEÓ3:½!"h²˜*Èbªˆõ¥ Yo•¼;•6ßülC¶éõ©`¨2JC†&K l,gEH¥óÃÅ„ cƒÀ0+<–«£·Ï#7Od¤Pds呸ԴGèâÓ¾é U¢eÅ~̘} Ðùº-_ùëe³oËá²…Ë,©À}K/Å‚©1,&{dcy‹Bî¸=R‚îöíxHÃaQ°.·éȈô’gçoûËGa¡œÆÁh>ݲyŽm“æ„pßâ´À¥Vgº4Ü…£ù1}::ÝÞ.R8¶…”7&{}äãsRùò´´jÁ ³´Nâô]å§Ã¬à´Ñ2×q“&#??ùR¤t*ßXcU6ûòá™aŨEû÷Ê8ûbÖ>gˆCÊ/.Y àÜ3­ÃÏÆ1™Ò'—­$h~ ƒÀɇ€{ Wc;KêÓJŸîŠTÄáÚ̲ ØÝl[²$+¥¯Œ½ue4)²iæ/Z‰}]#IZVJ˜6¡ÿ]µuÛö¡{çÛ2,ÙŠg-ØŠç@ïkøÖ`ßYŸÀ·~¸Žh†lÖpæÅ³¥û†ý&j6nÀÊ;¾AvBi*&x1¼<Ó¼ë¥UM¦¹Eùذb ®œ?ù•Hëÿ»P³j%V=ô8H¿A-[ø\µ¶þɦ¿u°ö~Ô?û<ÚöÓp¹éiÔýé-ɧ—|’–V¶´ºhQ.³­°rËò)Þ.-»&c& j~œåà–ý>˜ÉáÙa1uõªå˜IJÚì•Íšœ”7ïY…‡¥õV˜¬·®Z»‘†xø–Ñø|Ëm”-Ð>¹ ß²Sz²@û¶Où6q*QŽbþ­÷£¦f5îZ¼ŽÞkñÓŸ –­âÌ< ƒÀI†€s w+ΰ´ÅæD™ì¡8*KÑ {ÿiI¡Ê!â-‰½d:´¥¶\ŠÁXw ,j·ÓrEwc"‡ñ>/DË´äTñíg€öSlçý´PÑXU:HÂC¥Õ¢‹Bœ¼„KKíõy^bá%ëj©*¶ÒWËeÛ[ÿè³–3üÛü„×<-—9$ïeå¢Xîå ú÷¤_ZýK½|”›ÞÒªÐc¦ç2…ìzÌ$IÚï‘{X˨š–oü/¥.”kÇ?¿¦Ê’¤ò“ØÒ2Ù‹Žº4´üb¢¶Œ—Wu‰Ý´_E•­?¿&Ô `0]†yÉ#Ó=l8”u†„‘pØžJ©àH|+K£üäj/k£¼“ýyÒø<Ú”ù£ì­…¬.Ìôöô!Œ|ÑL»ã"ÿÞ>Œ“‡¾8ÙúÈCAk ='w KNì ãíèïGn¾‹žwÔÃôÕÉè-­ª,u˜©ð,ž)0vk£>ùé,Ц’JgÑ6U:n0Ž6Ã`môfâùMºÙÚ(ßN‹£¼šÍ îê9,ÖFù«Íy¹ß9Ì©˜8ã%·Î¦ÎŠ'ùÛ–DsI‘ðúsó1ÞÇò©Ÿ`GG™`tòùYZUœë0SáY»Ó£½uUñ²ÃÈJš_´#çðqçA©ÿ .» «_s—Qš·´¢ß#IZ^­XBõ*ãòÌ6]ZL9#¦|NR麵X§K ÝxýX¿„±ç{QFí©cÃ*,Y´K–нhV®oK7S;^¶lÜêª7èØº55ë±¹¹[67£Gê¯ØÝцVG¿ÔÚÖ‘”vw묯©ÁJÓºµ™ú,JèÓŸõîîHÐk¥>¨cWOÿ=”Ÿì)ÌâÁ îïÙŽo…Q_Ù±+‰޵k+)Þ™4>D?aúÝáÇ’*Αyq+j\?ìܘ+¹t¢;ŸîSè.¤û4ºO§{Ý¢{Ý3èžI÷ºçѤû¦7 ¯+ 2ã"È'Ô³¤Ž¢wŠ2 ‹Dû¼’få·½ºÄÊ H­KK«Ew*jñvQ‰Æác%UŽG |øñ<L:Hö‰¦ú±=wø‘3ÞDeM.ïäH©Þ:E9•gC,UúžA¬=ãžg¼/&b±í²=e‚S$$‚e•¢®¶VTWW‹ú–®Œiª ¾&X)›pŸ¨-á> JJKuTÒÝÈu"¾]”rÿ`÷ÜGÅ¢IÖ—>Q_¢wˆbJ¶ã”7v }V+êJ­¾ mw¸Òî{úDu‰ÝÝ`¤)![K•곘',ê;%‰Ú²¥[õ|ÖQ¾ÃßO˜~wxDZDåÐ8^yåñú믋7ß|StvvŠwÞyGôôôˆÞÞ^Ñ××'8 ÄÁƒåÇE¿Ø»w¯à±šÇlºyìþÝ<–èæ±Çøsèæ1ÿt§›uÖ X7`uÖXwr±§[¡K~L„‰)…‚3q+Ì 3¥U(šH¡”G –¸ˆiÀæA¢%B•SC‹‰Š )ÅÅ"d7öHýö„Ý-u¢8Ñࢼ®%¦wô‰ JSn+)ñ®&QL´ÃÕ]=Mâ%åU¢8 ($"µQâšØ• >$ªÛãÔU B^„J*©YZW¼«Q”…©¡4¥åe"Léƒ%Õ²có ÓòÒ•<Âe¢1Ú J #ÂX„ÊëõbË<;ë#’w¦EÅ&*•$cmy",Àò‡+©tR_:ÚkË ‹EcW7u¶4X8pé¬/'"*µÛ;ήh½¨ª¤´ÄciE5 ,U¢ºÎ*æF—‡Å¶×‹R*C¦[ZQ! ú–†ºt©ÊÝæÇëJ%_W´ÖQçƒ"’V÷/?ÖÌŸ®~¾^WFõ!(âDÛ¬l›~uÉ’;&Û{F  â¥õí"ÖÕ)ºÒ(·$|»d©l¬K‚Úó^Ÿ µÚUØVTê>«_r$ëj°êf}BŸ!Y¸Oiêþý™Õ÷$>bOQÅ@\TS/¯Åb»Caî‹rŸ±•!R>Š©–7*&©r7J…(B<¤sùóéßOdS¯qnú]ïq̯­dÛï…‚' ”BÁ“¬PðØ?, …š¡p+çÙ™ræ£[)7êf(Z*i ‰D© Ø 5Ü87žp5 Ö1QâÁ­˜¾FÚEC7´2!ÛqW½àJªEŒ´«ÎÆ* ƒ(«½Ö`ãWáíÕÅôåRA•MÅ ´õM¢Xί¸º…:Ý&QBîrþ|‰w‹ÉKÀ¬ÚE)…HÁh¢Á¿\ÊUQ–Â',/í-¤HØÊTiU=ñSA N‹IóT2xàÉÜ4TŠŠêÑÙÝ%+눥4ØoEñY判žÕñ“¡¯SÔÚ_yu]]¢’e –‹¦N«sÇ:E áeá:ØI¶×WˆÙá²ÒV*JKKDi¤Þêh}ò‹wÖÉò •U‹¦¦Q&Ë!ä<†Âæ—ηÜ}xšË Ÿ|ñöZ«ÎUÔSQ=«ãA†«Tu>Eùé°ö­ŸT~ÖµU—+© ¡4¡DkëRBÔîÌ {6“e滤šûô®–*®ÏƒüY©ÚeýB¸\Ô54Š(õ1½Á&<”ϦÍ”x+ï©ú3TKI ì&¥(J <ËQ§ª3ÜבÊ$"\® *€zÇ&ŽëP(Â.…‚8—Jõ›CeŠQ*>M¿ë5®ÄÄ ÑïRqƒBq#ÕM5CÁc¹S¡P3G\¡Èx†b°ªm¸¬dȨ>úšH ·êöZk°¤œÒòr‰ð5²2‡Ö>HÜáªPXÚ¹xÙ—¦Å‹TljR¡FÞMMXjßêë %>ƒR¡ˆÉ/ [ ât$Ù5Q«÷ K-åI3šfMÿÒãÉ4xÛ³ÜÑI%K·¦@A³ eeŒuDT:ftù§–AˆF©$r^‘Ä`4HÏ…k"ÀÂ×½äá—ŸœâuNwS…ì2Jõpø§sñç(w?^<²qyyËÇ_•ÉSöB4•ÓàFrYj˜‹Lâ5òsÉBiýê'“flŠkm^Ê®”h¿º¤˜òjï*ÌûÙ½=*Zº¬ár{m©|[_ñÞ©,_¹$ W$V #%Öò…¬ó‰e q(Ÿ,w ÜZ’èël¤þ'"**I'Å~°5MÇý™5PS}çöEwIíà¬Îv©ô”ˆÆ–¨¨äˆÐàòL,Z!ãB!«Ÿ£º[מ¬:D+HŽt}%š|zóiú]ݸrü÷»\¬Ã P¨%Þ¶ [òH[¡à%Žl.®ôÎËýî s¹yÙÅû:í4^šQ×Déèëþ=˜>ý,L:ûI)W•ƒ®‡Ó?ŇW¹ûñâ‘M²—F>©p”\ LJðn .(’‚tÊÏÆÔAݯ~rñþBL;»ÀÊk€Ó[mÓ¿.Yч”©òöyŽŸv ¦ŸnõÓ>s=µþFìéóIà*:c~»·à¡Ÿ¾‡Û~ÔCômG)ÖàÙל{°Ÿp$EtÃKàêÊÜŽŽŸ,Æ^yßžwºý;h17Úšr Ö ì{_á¾O–¯#}ýöJ¼ˆ0Pû0~¿Ë*Ù{®³_¤`Äèíàýè¢ ˜òßRΞVýzóÉÁ^ýÄáÔkÓï:Ë+¶’N»Mä‘r¨}ê™Á˜>ÈR¦ …ÊDeÊ”ØÏù>HÝíêïEoOöÐ(ÜÓµ½ýª{ìEWxï½n™b û=¨7¡§·ç_1Ÿü¢(8ûã¸þŸ¯Ç‚«fâÀ¶üîO︩»Þ-šû‰f?ýãcó“ËqÙ  ò«süitcÕ;îùšiwöûªG(û¨\DâL¶µì@ÿ@/6¯y”8{]ôwÇüK®EÁ”¢å´“|-^Fa…RÙð ó•o ?×;=èÙ݃ôþY©Ç³ïÝv’ ŒK§OÁ˜þvünõ-ôÞ/e@ïË_5_Á=÷܃‡¿u'…EñN·ÿ¶rz±eíw¢‰˜úR²p¶ìbš$ÉÄu‚ÞÞîê²ÞU½ mŒëÁ[${O6¬½«hÇ¿_~úhXª­è¥rß°ê^Ôí½)dH'W¹ûñBÙú_ù.~™™ðƒmRèiÛ€²eQ„—}.Q= û–Ÿk¿úÉuã½÷bx¯ËÙ6ß•mÓ·.ƒýªle{·ê¯*ZOþÙs`7ýCc³ü÷ç½åÇS ¼ ãÆhS$Äy<ÞØ§þÑ·óXvÇUX½e—Œ;зG~ŒÎ³Ùd>wƒ6µIÜg„h!nÓ-¸uÕFôNš‹¯-ù\93€®BªWºþŒúîÏ:;‚YøaCÖÜ05­ÔŸlù)VDCxðÁÕxâ‰'°zõ*T¢X¶îEêSúñÎnn gcÒä)˜1} <õ€BгˆrÙ¼æËòßRS>õ˜T‚¤°ü£ã“b™~×c\9AúÝDù‡×˜®Æÿ´rd¬`p本féöPð’ÇtºgÒÍÓ$Ÿ ›zrh÷PðôLTM{ÛÓ€WÉuÀí¼·Aú…D”v†WÉuoRTx¿§«.³Ã­éÃ@¨TÔowOjrƒWK•¢i¥mÌ«hhODÐÑŒÒs‹•Žvb—TYû9(u{µ§‚ã;¸-9h§ ¨,£ 9¡šež­å™©O˜Ž—Î:žîäƒÝáÊ–„ :‡?ž"¢ðez%%r“—Ä:ÖDËÉù±ìƒÓ»ºõe$§g%Í h莉Zžâåw.[ZrçÇaƒ;ßã‰]ö2M ,ªx]:ÌxSXC„×Ñ“åà5kÿisÿt~å®çE—¢—¯…7³:d—× ™ÆBݯüRa­©ŸjI‡7¸ÖÓ˜ä¶éS—â-rC±Sv—Ô¶Á!ü³ÿëÂ!7ç[M§ZÔ,~ÃÔ8¨Ûû\œ¼Kk-<)?Þ¿ã s¶Û®¦*«}$âDµ½áÓ»?³÷8Øñ#òï"qQ[ÊÿÚø˜¸RÑ¡% fq°}@,[þI|ÛÈ’Ó^N)º·CýÃ"PR+i«tÞ| áßOøµ1EyèÓô»\—¼Æ1Ÿ¶â×n‡Bœä3ŒK<†ö §Ân¥T°bÁ÷HÇÍŠÏî«'+üÎ3\ìæû<Ú”ù£`u‹a¾HkìécLAò=µö,òKAs ¿Ÿ¾r‘ïÎðÿµ÷-àUTWÛ/H¸ËQ$@° >¦­QZÀ(ê-ÚÚòWüPôCkѶ "ýI‘·ÞššCôCD³Ð5Æ{’t’Öø9„ŒWÇßÊŽ4A[{ &¯õ ûÜCæ?BC)l}Ðwíf­’þŽëó‹L͹6œvT´/E Ò`8fM]Zµí˜ÚñNϹµI_œ_¾ |“úåFÏš çдmÛŒ®€@]V+tlkíø¾aÀÿtîáçØäÐç@ûÓ‰:ý ®Þ]†F®Äœ ‡ðƒ^ ×ÀûRVNC}xÐÞãØ¯£&ˆx<„‘ÁÂö]g_‚¹®!ÍŽ c%Ýãöý÷ßGúyž·ìlú,+ M›ÒÏ¥Dykܸ1Î8ã ïy0<å£G‚þ„ÔÛÞ¢‡ ÞIêM´¶6¾ÖÇ?!ðÆ¿×1­7¶£ÄË&…pÒÇ;¸š$Aý.ŸôtY9tB8 Ï"AL>0'Ò[5‚¿¦šµ(jÖÏ»ÄΊ¦–#_ ÃúØ8Á\ØäD¶VmÝ÷däDNF9tòLí“´†ÀÏ!d¼,š:»K¨_ÐçÎLÈ\}naëk•â"ÒþüíŸ!‹Ú—B\vqL9t›Y}0‰.ƒåüwì¾HŒ,tìèïïm#÷f˜.‰y:÷¤å—8rª«gÝŒ[è,&8Ö -&ü€zÞMõC ±:VÒ>nCÆJ±ËÎá’Û9ŒÝÚtbž7¹:t…‚¯ZÈ ›ž¼+KȤú&´qvÒ™­»œîÍSbX_&­Açòï‰À—iÿ¤µlÙ¶Ý;º¿œÆðí[èÉÝÓ+¶Nãu‡O=lß ë z:ôž¤+5?_« IDAT|u‚¯JÈ• ¡'ì …‰­Y„$]¹˜¾¼<}êÕÇ{ HÃ5†õ5´V"ðÅ"ðeÚ?i-TL|[+*&´Ù„í»a}vœ{Yò¹™ãÃ@û¨ _…8ž&7|L¾Ô¼¡ßØø/\piŸÔo"äð›%é®ðéñ3•Ÿ•à󶇰¦ëÓÙwœësÆL  Ä:_ÊÝüFÊf¸áEvAø¿’4þüFÊÉsÞ§'f‘ku5zÝü3Œ¿žÿš9ÙÆo¤üý /2ö~#åJ¼ýýèÜó4=œÙ%h›Å¿ÉoÁ^ºÏ™ÿ¬‰Ûúu>·W÷¨/¿‘r庭hÚ¹'rϤ?Ì8§º7ÛU{ÉI¼Ø‘<;ç¢]Ý¿°í³:/?ü¬YëvèÞ5¶_ó)÷Eî¯n—׋æà KÏvØŽªòCúŽ8»{×è<ØŠßHyä¼KÑàyH~ý_PAÀÌÙ.ÞÎ÷¶,q<šÌŠ8CÁÍLÞ0=lΠ7R⎠¬Œ_·ùßÇ|òM§Ñ]á/Û†©ôgޕףƉ˜ã)(̉$Çëß¿~îêßÈû›ØFúãÉEë=ý–O QÿBú›Ø»ð= rÑÄ"âû£ðþytj¥o\eO’Ï¥xü—¯âý]±Êa÷Ú2üöÕ?’Å{˜7s=¡ò·˜·h­÷³8h<î;@OÀœXTHqûcâ ÀZz²ÿÉJ¢ä·þ·÷S¬"ÌÛR‡º¿EÿFPtÿo°=0l.Ac&Zßîµ < ñËžAñD¿~Á“ÞüÑûÎý)‘ñã…¹aÍ}üã'n%Ìúaâ“OàÖÈgôÑ¢'(^!îŸ8E“1ýå¢ìâµíe¿ŒŽ×ˆì~yb!wòŸi¶jÕ mü'ÔúÉüO;FÁ€+0ಯbз¾‹Â>“ñòmö¿‰ü1K1ëWÃcßìéªÌ¯§o|¶Ó&OFÙ± ôä~þ‰¬^˜¼†Ù¼æèM¹ WÛÓ#œ_ð®¦ì~ó—¸rÂfÐkhðù½²æ3Ð)½K|k4½akÖTú~•k@oئ¯Ç¥“ÿDOH¤×@½ú'””•Ñ#šËWoÇïÖò'‘ƒïN«½‘ôFJ,ýÑ ØÙíûü`è4dó ­¡xǑݫ¸òÕ5¤óÛE?ø9®Xz;f­öËÑ+UEÀBÀ. $¯[fɉÉ2(G5y–ͪ†ew£² î; Í'TÐóé`[ÅLÖO”mG÷«ï ' ·ÆÒ¥/Ò7´:ìüãëXŠ[ð‹Ÿ~Ë;áwúÚ|øÞ ôxýE¬7ê_½ûc¼½ò#o¼Ö¯ÆêÕocõG»ý‚"d¼ºí‹Ð:ïJ|*+g ÙÂ1x•¢¦kóËr+ÆÑ(6í=„¬îÃðZż>}¶r~™‹s ˆ2l}ü–NýnîyôFJ|¸°?"<'ž¡ž7ðà pOå.ÐE1ãûýðÞ{±wDa lÁ£ 0¯Ã òÕãÌ¿=ŠW—wŽ„óßGÆíÅôŸïÅ}V¡bVÍef´˜:Ò¤5îù}9ÍsõÛ æE ®±"1tîfgÎgøù•¹hÝéltjÝ÷Ï[kö†òëòo,áê>Æ“6rZ£i¯¼çI,zó-¬]ŸE¯ƒ³‚ñè|˜+…HÛúÎz.À4Fë™V¸Šñ—´EóÖ­ÑÞ"âGËô^…1¢'ýÙŸdç¶*zhÒv¬}û/b÷.‘+p»Ëqó‹xæ…_Qéð"f®Ü-CÊkb¢rì2U«þ¸g4=>~Ú^A3TNP8ìÂÎïlìÒÅ!Ñ=ÈÔä%ŽK'}ݲòt(üä]Ìzz} «¥ïÀ£+¶â‘ÂKqýøT´¹:Ñ“oŸÁ¶²û¼±³sV«®èsQ;ô!‡OYiÝéŠÆ´Â˱æÅmxô©É¸ÄXMØxE랤1faî#ßõ –K潇Ê&?Šœâ%zCúá¼`¿¬ŽDæGY#«-úä_DÏ"÷¿v‡Íå‘® Jb}«_§¯Ó´†gî*ôÖÐuè}¨œ:ù“þŒ‡ o þ;õœöȧøc~ò0v]Ñ mÚ| ³¦FÞM@ú ¬¬}?§·•ìšv›÷g±—Ì­Äœf?AŸó(“RÒìÝ£=F¿^LW h=y÷âŠÛGP15]#ùqù¯bÌÍ‘…]ñ“>éqÍ3øðÿœç½DjらȻaî:òúû@Pô#¶Ñ¥ƒoXuÇS»*Ñcòã6pBÄu4Ý×á_‰ŠÕ„>ã~gÑMÔj¶¿…_} ÙZÓå®sñ½ÛJPæõD®P ‘uÑ} :…Úd÷~NEàÏ=ªK^߀¡‘Âdã’Y¤í€ë«Ðš‹ƒÿú#ýæmÞg&üpÚ1¸´ˆ¢¿þ:WW`aUÿH&9è} ›¿Úî½ÓÂ(› eE@h€€™Ë]ù¿ƒ©Ht… núÉ@¬ âM{$óö:}#ed¾ o¤t€è)OÆ)P«RP¾¼„åï üˆF¢‚"ÈÑ(ˆó }+#½¹SßHWL Ÿ‡\oÜÔ7Rê)Oè)c{œrŠ€"ðäo.,˜7 ŒãBƒqÁ›ÒÆWJƒÞ6Ú“úúÒÆ×Y¿FÛå´]AÛôr°¸·¡™BÐ[coÜÓ7Ršxù¼¾‘²&úFJ>è½íD½‘²ƪPŒGà¿m”s9çtÎíœãÏ¥“çbÛÒF¿åz5×\#p­À5ƒ%1&¢”¢‚x³ß6ÊøÞEÞ8 oÌËG¿Ëã$½Ý-ð u!ã…¾Y’ÔBýÂÞˆ2— ±D¶>}#¥¾‘Rö~Ño¤Œ\E@ø¢8Iïò8Lóçïç;æ…2”6~§SÙä NÊïΉV"L.¸tÔÐŽã­Œ=u؃ÞRúfÉÁBýô”Nä‚Þ²ç4NR©o¤tõ…¿‘Ò= Õ*ŠÀé…€äô Y›¹Þi“Ä=ñN?Vrp{  Œ¦™@N_¼´áC<á|›jæOßœa÷ëŸÅ®ªýhf*¿$üy#à3}‰Ô—äÓÔe(_fþ¶s{R“H¶  .êOjjtº ðezsŸ¾‘òtÙëtžŠ€"pÒ°s¸ävØî œ ß'‘LKÜìO&žÚ(Š€" (Š@f `æp»€0ûBg›lAa1ƒÛ›vÊ+Š€" (ŠÀé€äs3LJÍ\ì£6éQgbdàM#åE@PE £à|žJ.—ü]T2…=€-s°£#(£(Š€" (§v.·ó½-Ç­)™‚ÂÀ–ÍL>n E@PE £0s¶‹·ó½-Ç-&™‚"ÎÁdps“7L•UE@P C@r6çsæ]y=é)OAaN$éÕPPE@P2»€¼žÖä’-(dPÄäY6«–µ)Š€" (Š@æ#`v~ç¸tΕ%*($9¨ÉKP—Nú”*Š€" (Š@æ#`ærWþ]A¢‚ n’XÄ›öÊ+Š€" (Š@f!–¿ƒòà AŽæ@A|¯êE@PEàÔ# ù› æÍ#åÙ¥[P؃ÚrÊQE@PE@8%Ha!4­œžjA!ƒÈ ¼rÖ™ò)ACUE@P‚€+§Kþ Õ‚ÂD‚»tj‡" (Š€" d’Óƒ&fæz§Mª…„ƒÛH8 @yE@PE@ÈÌümçö¤&˜lA\&ÔŸÔ$ÔHPE@PNv—Üβû'™lA‘(¸Ù8˜v(Š€" (Š@Æ!`æp»€0ûB'žlAa1ƒÛ›vÊ+Š€" (ŠÀé€äs3LJÍ\ì£6éQgbdàM#åE@PE £à|žJ.—ü]T2…=€-s°£#(£(Š€" (§v.·ó½-Ç­)™‚ÂÀ–ÍL>n E@PE £0s¶‹·ó½-Ç-&™‚"ÎÁdps“7L•UE@P C@r6çsæ]y=é)OAaN$éÕPPE@P2»€¼žÖä’-(dPÄäY6«–µ)Š€" (Š@æ#`v~ç¸tΕ%*($9¨ÉKP—Nú”*Š€" (Š@æ#`ærWþ]A¢‚ n’XÄ›öÊ+Š€" (Š@f!–¿ƒòà AŽæ@A|¯êE@PEàÔ# ù› æÍ#åÙ¥[P؃ÚrÊQE@PE@8%Ha!4­œžjA!ƒÈ ¼rÖ™ò)ACUE@P‚€+§Kþ Õ‚ÂD‚»tj‡" (Š€" d’Óƒ&fæz§Mª…„ƒÛH8 @yE@PE@ÈÌümçö¤&˜lA\&ÔŸÔ$ÔHPE@PNv—Üβû'™lA‘(¸Ù8˜v(Š€" (Š@Æ!`æp»€0ûB'žlAa1ƒÛ›vÊ+Š€" (ŠÀé€äs3LJÍ\ì£6éQgbdàM#åE@PE £à|žJ.—ü]T2…=€-s°£#(£(Š€" (§v.·ó½-Ç­)™‚ÂÀ–ÍL>n E@PE £0s¶‹·ó½-Ç-&™‚"ÎÁdps“7L•UE@P C@r6çsæ]y=é)OAaN$éÕPPE@P2»€¼žÖä’-(dPÄäY6«–µ)Š€" (Š@æ#`v~ç¸tΕ%*($9¨ÉKP—Nú”*Š€" (Š@æ#`ærWþ]A¢‚ n’XÄ›öÊ+Š€" (Š@f!–¿ƒòà AŽæ@A|¯êE@PEàÔ# ù› æÍ#åÙ¥[P؃ÚrÊQE@PE@8%Ha!4­œžjA!ƒÈ ¼rÖ™ò)ACUE@P‚€+§Kþ Õ‚ÂD‚»tj‡" (Š€" d’Óƒ&fæz§Mª…„ƒÛH8 @yE@PE@ÈÌümçö¤&˜lA\&ÔŸÔ$ÔHPE@PNv—Üβû'™lA‘(¸Ù8˜v(Š€" (Š@Æ!`æp»€0ûB'žlAa1ƒÛ›vÊ+Š€" (ŠÀé€äs3LJÍ\ì£6éQgbdàM#åE@PE £à|žJ.—ü]T2…=€-s°£#(£(Š€" (§v.·ó½-Ç­)+Nr ö¶làñK—.uGR­" (Š€" d  òwdb¢·ó½-Ç­#™‚"ÎÁ\6jÙ²¥a¢¬" (Š€" d(R p>gޕדžz2?y3'd£zE@PE@ÈLìBòzZ³M¶ Ay“gÙ¬jXÖ¦(Š€" (™€]@ØùWàÒ9W–¨ @æ &/A]:éSª(Š€" (™€™Ë]ù?t‰ 3¸Hb]oÚ+¯(Š€" (™…@XþÊÿ+H÷¦Ls  >pP³cÿúr¬®9W^ÜÅSøä]”,XˆOзßuº46­O2_¿å ßÃùC®D—ì“?Ö› ×â¼!…'¬“¼/Š£';±›Ó9´?yü!¼<¸šT㵂B|ùÏuakÓêÄð‡vâÇ?ˆ™ÞX'&dÚQj×aÄ ;ñ“² \Ü<Í(ǵžp¬wþýÇxððÌÈ>’æüN…[í?ð³A#±(:v>f–=‹¯¤‹q4Ž2ŠÀ¿+V¬@ee%ª««£‹?pàxûä“O°gÏ 0 ÚÔ¢âÕG0nFyT÷Àì2|¯w¦€‡ð÷Áá™KЯS“èÙt|Â#Fz¥°ÍéIyGŒýäaÇ’AdPîg)Û>árÓK×$fýçØŒ<<4êF\}íÕÈMµ˜¨¯Âø‚ÌßX>fPoã&¸„þù­9®œ;ß>7ý¯ªt< Æ–Òníh³Oÿ²2¡`Îî‰I³ç¢gSšgºfçxëq¬4 •‰u-JÇ`ìü1¿¦ùÈkšní „~±Q’¶3\²»Ébòœ”–” ¤ä1䥿;%K /+ëׯ+&Î>ûl <—_~9Î=÷\¯Èàbƒí¢mÿ;^11y^**V ”Îç—wM5©D£¦1ÎÌR;µ¥ã“ÖÔ]9]ò`ÀT s §;vìnûðÚøxmݾhßúùÅ(ž¿Þ«FȃôQúøp”cîT@}HWƒwçOA #P*þu;ðJñˆˆ¾Sæ¿‹:²-{Šý©· ˆ)‹qÐ9—Èüêvcñs”ð½ØÏs!{nþük°fþ+Xµ«Ö—iÌùS"cŽ˜Žuûê<}Õâé˜òZ9ÊfFbU¡fëb ŸD³©œ„A<÷ #qcøðXÛÞ[ìA#¦”b_WS?ö¡bT¢[˜×í^‰±S°¡Æ_÷»4ÿ±ÓËQãÙíÀ̱Åx{_ ë­eÓàÁ6õZ§ïט?–Úm 0n°Ÿ¬2ö‹b¬øv¬|%ŠOÁˆ)xwwóóª©*ÅØâÒè~TU:%²_ÃÁªòØg4>fcÏ TfuêÒí;wFçÎíÑÔÂǶW9v|(Š…ìëÖ­ó~â`¹¨¨#FŒ@sú cåʕزe‹wNãŸ@ØN|ê>÷¯d|ú¿|î=í»÷ÄÙ-Ï þ ÓyUΟ5t.¤óŸ/Øw÷ºØ9¹ À?p.Z·xfôÜ[9æÍs yn</Lýˆ±`R%ÐDÎ éøˆoŠtëV?×p2šätCÇš¹>®C„T ñcÊÁí 4¢††[;\üÕ6˜öÜßp˜ûnÁÜ©‹qq¿s½ ¤!Ÿ(¼{:]ŸÈÃôy ñ“ouÃÞ·žÇ˜©m0oEÊæ Ǥ;‰-GÙ¶ .ºñ1”UT`ÉÌP2õ·Øx8nc`äô¹xî¾ÁhᜠûÅ[3®Cñì®x¾d –•-ÄøÁ4²çæÏÿ(öT.Âþúúˆý˜šsVИs†oÇSʼµÔWoGÉ´ñ(oõ=,\8ÃËŸEYÕçÈé63FólFcîÂç0¤G‹H\ßß:R žøÃ•ø­wÎä"<;~>§¾ú&pãc¥TUW€–‡©¿XŽCì³w5îv1¦—®@Ų%Ü5'Kb6Ú»יлJ–¡¢l6j&݉?n;ŒFí.ÆÝÓGâÙÞˆåÛöbéS#P2ruㇱnõǨ9êÂð_xþº1ȹkÍg †ï›„)K¶Ï^Ì"ýÖëŸÇ²ËðÓë i­QY›Ì'«cœ‡TlÛ°ˆæ_9· Ûès<º©/UvG^»ÖÝ݆-oät,,»=rhÝM;bÃK`,cÝ»¶Ï.€Ú_–-‡sÉ×õ94ét+åo- ñ@›¼´|‹Óîhm5*WG1®­ÞŠýýamÉx,þêtoXòÐ äXë–9µ ÏøÎ+/ífaÍ¿ÿ³Wª8è>ü>°sçNïØéL…yŸ>}<¾¬¬Ì+LÅŽuYÝ 0}t>¦Þynú{|ô¿tŒŸn¬ÄÁú£¹[7lõÏ]|þ¼³íž‰%Ë–aaé½óç¢;‹_ÂÃ3K°lYJ@Ç|й‘ó‹;_T¾Dú­×£dÙ ü÷O¯£¯±|“ºOòøÉº™nÛ¶ åååÞÚix³™ƒÛM»@>ÙëÈAÁeÑ~®ð\íü«FOßÕŸ]ƒ¯üc!ý®<ôl†í«¸*ñ+Ãfgž‰6ô¯e‡3Ñ2»ïüu.…ÊÇ^|øtñðyM1Ž5o {ÂßJçcÇþíÞpGꎡ)ùw%©Ý™ѲYSúÖYŽéÿý)šy68´݃Q£‚BMþ>úwöŸìÙžLŽÕús— ×+—¸ò«ÛîÙ#^|nj7Ó•‡ò‹PË}‡ç¡øfÞ5jÑ’áçô•úر¦8³-Í&¯-:žÙM½5úÓðþ'_¾þ䊑ßÏŸðòÚ€®ÀPÌ–ÝPDâ¸qãᱷ⪂^Þå9Fþûä=*y©­˜ÿk¬Ã§Þï÷Ýþ—®²œÝ/ƒ—ïߌ;¿{-Ík,þPœO>3¦6†u;>€÷)¬˜‡çÖeÃ[zïÏQ·ûŸ˜MåÛË×ôGS*K»_6>©J/…1Zg  Œ©Ø„[|Œ’¼"|kC ÞÛúŽüõ?ág8“؇çrF+t¢õ¶iw&ÎlÆ éRNŒãBË.|SV1ÝÓco½½xm ?‡ö=/Ä¡÷ÿ†ùo쀷÷>â´«ö.ð(EöDæéÛN—¾ôIÃã­Æ­7^…^cát-ó|L^þWÔUïÇß_Ÿ„1E»0wùtÏ„Ÿ¹â&ª‚"ÙðÕ‡¯ýë¸âŠ+ð»ßýÛ·oÇ~ô#üå/ÁªU”D"íä|4Ã¥·ÏÀ._Š·MÄÈ’§ñðoþŒkz7ŽœnøXæsa~ë{œgŠpË5ÀË íÛ“\ƒUœ‹Š&cèÁ‡oûÎÍP¿c©óÜœ/v`ùl`ìËCÑÙ;i~ Wq¾àsG`Ž ñ‰Ì;²ô¤_™xóÍ7qûí·£¶6îÇøø“iüm v_àXÉR8p Wðh?W@ÎÖî<<t_Ž­+g£è©´&ÛdLu–_-E|yW!¡Ž ¼ …ÃúQÆ-ÄÕ7gã,úÖyhÓ|Þ2£'?ÂóÚ ïÙýJ“ü(½GªNúvÚþÜ|ÇÙ@t•uhܦõï¢]Èi—Çá&ãõÖÁKñøzÏ~à Á–ßµu…¸îžöÞz²ÉëÐηÇQñ\|ÿFGx6‘ùxœñŸ7V>:·`[à¨'û¶›J†[&UãñçïÂ7:ìÃK«Ž ‹ç‘“‹—•bð’˜qÿL¢oñ+î.ðvp‰ÜÈ›éP ¾új´­«CaáÍhßÍ¿:Â6u‘9¡kKÿ[5+±{Cº@ãµAW C~+ò/,Ä=í»¡¾Æ¯tšdùó‹aí½ ï¥ËF¥˜¿{FŽû®Þ´Å% GÇèðÒäJ;vëF†Oö¥0ŒýÙùÿçä~ ËJó°dÁ+¸Ä·1’ö±»¿ÙñŸÃºGc&Ñ•£çï)D‡}yøøˆ?V¼ÿYÐ >Þõ°âyå~ëA”æ Æ‚Wf`Ä·'á©’ø¦ãO’²²rÕú, üÞ=´ŸÞw¶Ü‡Ü^z#…ù¹)¯$B€ÿšãïÿ»g¶iÓ&òŠ!C†  ݃ÇWs¹±œ7<ý×±O!£«‘†I‹>Àµ}úy§›ìFY¾m£zúêåïþ©+Møü#ˆóršxçaQ%¿4ÈG?÷ÎÎÙÍ"ãFFàù6¢9pNJÍ'6C™S5‹‰Ã‡ý«5†½ÌÎñfŸáÒ¥ï–)73¸=pH°l øÁ½(ŸúS<]>7½Kˆ-we£ßàát%`%µ<½{÷FîYí½ä¹ãÕÔ?×^Œ6uŸÒu‹HËnnÄ~~(rpó q©˜IDATèÕ»zõ’bt “yãnàÐs_˜(™ÕWcÏþØÃ.J#öå«v enoo.gµOœ²;ÐlèwºÈ‘5:1Õxoî"Ê´7áê‹sQ·g³×Éy½þÀNTíoŽ‚kGá± TÍþgƒØçô㻜áŸÚxóìwšG¾﬘Ž13ºavÉlúif*î~õ]/v܆Ùç\@H«6B.}½{ç¡=ÌîØ éŠÄüeQ_«þç’ZÄj7#h«ÜË0”~ö˜QÒ—]йù—aÃÜX”=.î`]oŒ6éÖ“Ï’cì¬Âþæ½pí¨ñ˜@ŒVlÙë9Æ}µ»èrÃKcç¶ÄžÍèdâŸ.âìØ“ÕÖ`ëzì\õ;Œœ±]›rÉUUÈîU€Q=F8[ö:>åúZÔF ²=¾Cûiztò÷›ýÿx¯Í{ü¡9¨6E@@ K?_HQÁfo¿ý6¸¨à›3ùê7±c¾~Þ¯ÚCG«ÑZçD…Uï@}íNüî‘;èØôÏ]þùs.æ—Ñy,«÷ïAu}$•¼€²ûI[ý{ö#+àÜ(ù¥A¾hÜ Òyééß/÷~JÿdÕë˜JÉË;¥å˜0ŸèJ3ÿüç?½Ÿ9øÊüW1Ž&ùÜÌñ³¨J죊t Ѝ312pƒÀ¦‘ðm/ú(#ÿÞ›Ñ+r³m–‡¦XÄÓwãùÚa̵ƒ¼›a>*Êÿ¹_½‰.¯ÏƵt“á¿Có*qÇOKQÝø, ½w ^s-ø¦Ç)>2@cÜ=t[†Pì…(^²ÕëkaL¡iô¯EÙ¾šOŵü›% \ìýõF–õ×>¦xV¿«(ÙÌðæ9cÃÙ˜cyÃÒå/ 9.»w4U;ãhÍðû-]‘·ái‡OÚã¦Ñ ^Æg¶tJ8ÜAToGróܯcdÞ"Œ2E³öâÞáyÞÕþikÕ¯†cã1è”}WõiðI ºêu Šì/׎™ÑOMÂų},À´© °÷°¹åEÀ…À…^èÝ„i÷qÁEEMM×ÏvÒj÷½ƒ;†_9o ÃÔƒ£1çæ‹©»9.5å“èÜ5¨Û¿z¯wïWÛGΟ³'R߅ÞÄfÊ9œ‹fÜ›‡‰· £óÆ +þ+Îôµ×/šcГ‘_ò(†ÑŸ·~wÖÞ=þ|Óñ‘•†Ó*úòÃ÷L˜ÅÄ2º?ÄÑ8Ÿ'•Ë#¾’ÿ£¡Ló¼q‘!}dž4àó%ë¸ pm=éÒÓËÔwB[=ÝÇßôøÁ$Ñï³ôí¯š>èæÍ©2¡+ ÕuÙч–x¿ ee#™g˜ÔÒß4×7Žù&š¸gO³ðÆMdìõG晩 ’ò¡%ñšiÇ÷—Wºìæ‘õÔÓŸHÕ¢qTèáSŸØ.À½!†þ¸0г¿¼j¨oŒV<ÑÙè÷½ZÚ岓ùÍq#ëŽÛW¼þøÏ?Gúé:} !>foÇßFªé*Vv+cß‹Œçï—aûû~F?‘ѾۺmôJ‘9]åE 9\Ï¡Oþ‹üü|ë9ÔKçƒt|×ёޖŽa³ùçXë|&ç÷1pn¤XÎ|áÍ©Íç>™¶M¹˜X¾|9Få]™à+r_© /w’ÿ†Ä_mìÁçk-Þø¢ Ó£ÖÆEˆWˆ$SPpçM ¡RPp‘Áçe–{PA1“¨6E@PEà„"ÀÏ™à? å¿æ'eòÏ|e‚ÿúC[ W1ÁW*¤¸`K*(î ²™6.&è+ºW@/…„\PÈfÑ‚‚‹ƒt›W‘³]”¤OýE@P@¸hÐÂ!žhÇæÍ›ÁWt¤x{(L™FMò7çsæ]yí’jÇs…9™„ФW#E@PE@8qpñ¨˜à+‘ÆWÌ&yÝÔ%Í'[Pð R,Ø”cèYÖ¦(Š€" (_ ®+æÏfdZæU Éãv.7óèjÌj„yÞ¸È0·D÷P˜÷RðM™¿Q;E@PEà”#@÷PŒ¢Il¢ï“°oÊd™ï™0ï¡àâ‚uLe“B$úû õy|²ß{a|S&ߜك6áYf;)H„šÅŠ1d¦MPE@PŽIî’ì¥"€o´”)߈¹9¢3oÊä>ÓNþÊCâ˜ñeL/á“_ƒÆv'³Ox¡ŸRLpA!E\T$*(8v Ò'k§þn\¿x‚ö“ }¼·ÿÓŸî¿6*Á¸Ø–A8éÕ? œ‚ôñÞÁŸ“úŸçONôǕϼü¹§üå†|‚›éÇ2ÞæÆ:³q_ƒÆÉ>¨9ÈØDx©ZX¶²œ`…Jl–ycYúˆŽa÷‰ŸË^ý9¿1>‚‘Pîaž›© ’ÅF¨Ø µñ¶eñ*~Bm{[?¡â'Ô¶·eñ*~Bm{[?¡â'Ô¶·eñ*~Bm{[?¡â'Ô¶·eñ*~Bm{[?¡â'Ô¶·eñ*~Bm{[?¡â'Ô¶·eñ*~Bm{[?¡â'Ô¶·eñ*~Bm{[?¡â'Ô¶·eñ*~Bm{[?¡â'Ô¶·eñ*~Bm{[?¡â'Ô¶·eñ*~Bm{[?¡â'Ô¶·eñ*~Bm{[?¡â'Ô¶™íyãœ,”s0ó’›]<ëxã&ý"ûÚØÿAúÀ+1W?¸à ñU–ec7×dYÇ ³›,ž©ð¶Kæ1S±·c¨¿â§û}T$/ëñ£Ç?É/¶åqüð¼qî5yÎÃr•Âu@l…’¹×XæÆTr½§pýg^¡0e§û2ÏzÑÙf½ü³†ð‹TÑÆ:îg;³_ƈ†0.[—.(„ËÖ¥S7.¬\:·wl2ûÕ?þx0±±yV.í'²ËÖ¥{›ºl]:ÛOd—­K'ö6uÙºt¶ŸÈ.[—Nìmê²uél?‘]¶.ØÛÔeëÒÙ~"»l]:±·©ËÖ¥³ýDvÙºtboS—­Kgû‰ì²uéÄÞ¦.[—ÎöÙeëÒ‰½M]¶¬ãÆTò³äaûŠ…èm;ö5ãH<¦’·™ç&¶bŸÔ qÊÎ< nõ÷Ã(¬OñSü×>Â:n’wYfž7ν’ŸmYü¸_|˜Š^(©‚›y…´²‰lRX ¾”"Ń\u`YNè2IögÄF‹écÝÂúÄ6Ì&¬Oý}Â0 ëSü?F l ëÓýG÷ÝNÜñÃÇ7ι’w9?³že).l*?‡ˆ™z>¶lê™kA…ÉäXf^‚ •IsÀ:ž¤YPèéYÇmì‚BŠÏ òŸØ™:áÃú’±QÿX¡'xÙ4 £°>‰fÖ§þ>a…õ)~Š#¶„õéþsúï?üùÊ&…Bíb´Ñ1åfS_kýŸ¨ @vp™(OL®R0/Å‚ â'‡B9¾Ø2ŸjãøêŸ*j1{ÅO÷=~bÇCªœ?züdâñ#yWò´ B¥ «,sŸl|0/qLÊ}ÒX× 16)ó<By2ÜXÙXf[ÙL{¶‘‚´gmŠ€" (Š€"’s%W •bAŠ )"¸¨àÍÖ‹ŸÄãÙ0ÏM(çoá½WAÁlÈMŒ™òÆ“â&“ÊöÜoË.SgÛÛ²iëâm{[vù˜:ÛÞ–M[oÛÛ²ËÇÔÙö¶lÚºxÛÞ–]>¦Î¶·eÓÖÅÛö¶ìò1u¶½-›¶.Þ¶·e—©³ímÙ´uñ¶½-»|Lmo˦­‹·ímÙåcêl{[6m]¼moË.SgÛÛ²iëâm{[vù˜:ÛÞ–M[oÛÛ²ËÇÔÙö¶lÚºxÛÞ–]>¦Î¶·eÓÖÅÛö¶ìò1u¶½-›¶.Þ¶·e—©³ímÙ´uñ¶½-Û>ÜÏ©äg“7 îY¨iË<ë™òÆM¨Í{®‚Â4dgNæP¨L”“d/vâÏ}Ÿõü³ˆI™—XmŠ€" (Š€"p<-T –…Ê×^®TˆÌ”›Ä±©ßküTP&Î`2 \8H“Âû™ç ðÕ–ÅÖ,$LžmYJ¬³I¿P1Y¨èm*ýB¥_d¡¢·©ô •~‘…ŠÞ¦Ò/TúE*z›J¿PéY¨èm*ýB¥_d¡¢·©ô •~‘…ŠÞ¦Ò/TúE*z›J¿PéY¨èm*ýB¥_d¡¢·©ô •~‘…ŠÞ¦Ò/TúE*z›J¿PéY¨èm*ýB¥_d¡¢·©ô •~‘…ŠÞ¦Ò/TúE*z›J¿PéY¨èm*ýB¥_d¡¢·©ô •~‘…ŠÞ¦Ò/TúE*z›J¿PéY¨èm*ýB¥_d¡¢·©ô •~‘…ŠÞ¦Ò/TúE*z›J¿PéY¨èm*ýB¥_d¡¢·©ô •~‘…ŠÞ¦Ò/TúE*z›J¿PéYr-˲±Žy¦²qñÀ:Îß²IŸØ‹¿IÉ<¸%*(87 ÈI“AúX/¼Ü¨É6æO"³-ó¼qêK±ÿ9žÙgËléÒI»Ï–Õ_ñsíºÿøØØØ²?zü¸ö =~NÝñ߇¹ñL¤@/ÿR8°,…SÖ'S\™»ÙOÄnœÐYσ1Ï”›™è}MìjÛ˜…÷ËÕ æí{(8¾Ä3y¶åfêLÞïÕ~“W||LLL^ñQ|sŸ0yÝ?tÿ8ÝöÉÓ¼ËÆ:›go\@¸¨ô³óL¹I“ú=ô¿]PD;"Œ8±(Å„ù†Ø‹üÌÁ2Ûó&ÅOœynÒçKÁÿKœ`‹ðõ÷±G)¸WñSüøXM·éþ£ûî?é=~òN?>ö¸`)X'z¡Ü'EóöÆvÜÄ×—þ+(8OFò@f1! •˜² RD°ðÄÆR\È8Üoò,5Ó.ˆòe}©Wÿ`Lœ‚ø`oÅ?3S¯ø#`âÄ{ëþ„™©Wü‚0q ⃽¿˜ýçen<–¥``Yx¡\XpcÙôµeîs¶ ‚‚¤``G ”u2ˆY0Ï6RDp ÙˆõôLMËÉ4{NÉø˜6êÿ™šØ$Ã+~ŠŸyNHfŸ1mtÿÑýG÷óˆHOõøa{Þ¸1å|ÍMô¢3©ÉK~7íýþÿ¬oЂ 1'Þ$°ôñ€\80åM~î0mí‚+ Ù©„’Ê‹mÊA:Ö»ÏMýã‘qao“\¶.]Ì#žsÙºtñ^1ÉeëÒÅ<â9—­Kï“\¶.]Ì#žsÙºtñ^1ÉeëÒÅ<â9—­Kï“\¶.]Ì#žsÙºtñ^1ÉeëÒÅ<â9—­Kï“\¶.]Ì#žsÙºtñ^1ÉeëÒÅ<â9—­Kï“\¶.]Ì#žsÙºtñ^1ÉeëÒÅ<â9—­Kï“\¶.]Ì#žsÙºtñ^1ÉeëÒÅ<â9—-çdΉÜÇ©¹±ŽmX'Túm™õܤߗÿÛIXLDÏÔÅÛ…‚Ø1•>ŽeêYæ q?7‰ëKÉýÏþéøItõWütÿ‘£!uªÇ?zü¤~܈ÇyüðXÜ„2Ï…7Ñ1u¬—>±7}Lžû£-Ù+Q‡Óà˵É`f»ÉŽ(‹2u̧Úx‰™ª/Û«¿â§ûO:GŽï£Ç?züdîñ#yXf(2SÙ¸Oø jÚÏÔÙÂv³Ox¦Éò¦ .º YôJE@PE u¸80›) ol+r"^âJ‘=j'ø¸NÌ~áèÝÇñ\:Sϼ6E@PE@81Ø _d¡<ŠðLMÞî3e›g9Ú$ÙGÆ´qñÉê8´ië*ªâÅ%ku2õWütÿ1ˆY=~ôøÑã'ŃÆ0Ï´ã‡ç#ÍÅ'«ã¦­ÄŒÒTvÓVx.7YrPÑGÐ¥ÒoÚÚ<ïÓ¶ ’Õ_ñÓý'èèH¬×ãG=~'A'ëøá¸AÍì“ñmø饿MugpÙÛ:[6 ë3í”WE@PãGÀ, ìhvŸ-³½KgÇñäãMðaþa}ÎɨRPE@PN:aEBX_èÄøaTÚE@PEàß´‹†ˆt¥Š€" (Š€" (Š€" (Š€"pz"ðÿþR„ê'IEND®B`‚vlfeat/docsrc/images/sarbortova.jpg0000644000175000017500000012771412237004745016373 0ustar dimadimaÿØÿàJFIF,,ÿáÉExifMM*bj(1r2އi¤Ð-ÆÀ'-ÆÀ'Adobe Photoshop CS3 Windows2013:03:22 15:52:54  ¨ á&(.“HHÿØÿàJFIFHHÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ w"ÿÝÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?éS¦N¡eRI$’—Uº‡RÃé¸ÿh̳cN•Ö5²Ãû”×ùÿÖþmŠŸ\ëôt–6¦´_ŸkwUŽL5­: ò]ùµ~åÎ_ÿ‚.+''##!ùYVòŸô¬=‡ú:Øßm57ý&’ºÙ¿\:µ®'µàSÚ@²ÓýwØ6Ûuª.úåÖ)2iww1Žú²ÏjÈÉ"KO”óþjÅpÁ7I.ƒß@˜rº»RŸ¬y÷?}¹Vïlpÿ¿mjé:_Ö§‡ º6Vb.Üßå=£ùƯ?©Ÿ»÷äV†-ï¬:\ÎÞ#ú©…C]}]ŽkÚÛàö®SögRÖèN¿¹EZGܬЄj ¹ЄCæù] ÜWѤêÏ?ê_ûU °ø´¯Fê,¹„$w\GSÅ4ßc` ÇÇÿ$¤ŒÉаäÆ#¨A[ΑßQñ]/ÕN­²ï°Úékÿš'þ§û+”­Ó0cPO—ò”Åï­Ì½„µõ88G2>’hXŽÏªÊJ·MÌnv mÒ°Oçó•…+é&I$?ÿÑé¦I@ÊÑëÙŽÂèÙ™ 1g§éÔ—iôZ±¿Ô^WŒæ4“ð »úÿ‘³¦cкËaLnÁÿJåçì;kuqöÏ™I.Î6×Kƒò’⺞^ʈ÷?Ü~k•¤88VÆï$†ƃÜóþ¿¾ºz2¬©kLcœgïkT'FÆ»ØòNŠèÐA:ž9×vÙ±Ìc‡ï1ÓåùË]¹§o·–”ÑÝ›ŠöMiæW#õ›ìj`¿Hù-ìίF;C­%܉+;+4fÐá]-p‚æ4ÁþNíÈQÑ*1#«É&G<ÁUÜñêe¼–Ÿõ*Ñ¥Õ¹ÔZk'`<ÁágXKn“Äêá©'Ð~¡d›zEØîúX·üŸ.õ+¤\WÔ¶u¡ŒN–ÔË[ñaÿÈØ»Dñ²Ãº’I$PÿÿÒèÓ¦I@ÊñŸ_­œ¬z‡5Ðw×ãÿ¢×+‡_é=XŸOè7Åîútÿ]ZÔmqüʪhù‡à¹ü}Íi,0æ ¬?ðë?ë5¦“ºà6oãbtëëc™–ë3\Ëñ@p`Ö~ÒÇCwoèý»Ñ‡G²ÆØ÷Öó“ uÜáïvæªÝ+ž¹p.cÀ aƒ·÷uÜ×pº,z²ÁÜ v}`þ,}J9HÆ]üÛ€”vû4tm”´Û‘g®Ùõm.q›emvýÛqÿM]é9}U´æTÛ±íª‡:º_mNsˆo.ßU¸û™¿ÛüÚ6ksP›ZÐF®Áá¾Ë}ßÙBÁ©•a¸W££'RyÎýïw¹6S5lÆ,zž-Y}B¶eeÞÐë ½VVÖ‘^×>¿mN—»ÜÏ¢÷*#ª´Xü‹HئÖí‡k¬úLŸµkàÓuvÙörßN×z…–4¸5Çéì-sÝñ¿óÔò>ÑjïÞ?èšÒ÷+JÐq]"¿¬.£™—ExäY‘qØÖÛµ’`¿Ýc?ª©fc6°‡4GbÒïê+e¶š\Æhvî'äNÖÿÑTz}†¸§ó\ 7çÛùZ§‹®/Á‚`qpºTò>Íױ㠲qì'ÁáÌoý=‹Ò<+˘ßBú­aƒ[ÚáÚO+ÓÚñcZñùà;ïO»c]$’OZÿÿÓèÒL’…•â¾»<39ã»›Qµßù%ÌÕ™V/¦û˜ë®ÚØäø•¿õí߯°øÕ'þþ –°zŽ`íò&ÕW]{¥>C-ûõ]>% ´w\§Cp4µ‡šÉgÝ«WUÓØÛ©-#Nß5A©lá>Ç©8ºƒ÷µÁÄ»ÛýT ^¡…^Ù`p´È ï?ɹ ÜûÛsª¿‚[,;øm÷)ý»§Î×Õ¶áàcOí{“kME²-ÆžlúSÜ\ç0»cÜ"LÎ’­äZØ3 =KZÚëcÜ\`´»ò#æÝ:D@á0v¤Ý<÷Y½†I;XÝIÿ¢²­!¶0´Èåÿ’VºçÕ:½àG—u]Õ~ €ò'ÿ"¬DzCNfæ[ϸZÆ>}ÇGˆúõÏüø½ ¢dý«¤ã[2í®ø·Ùÿ}^`Z?ùW}õ6ÿS¥¹“ü݇îpk†’[-C¼’R’•ÿÔè“¢I W‚úöÊÞ«þüåÍãûÙæÐº¯¯ÿ*R?v–Ÿ½ï\î¢Ã"ZLš-)ú~[±rË_;ßÀ…Öàeí:¨?ÊWH9m‘¡óÕm kè`~?¾¾M}Çõ2Qú†LDä]›±C·  îƒâ¤kê l.ÓnÝ倾ÿ~@é½F›€Üí®I¼Z¿n¨‚Ù8í /PèÚ„ôÒTÑ¢§c8Üóï>(Y{‰{Ï_ŠTêuÒÓÝc´cF¥s]^Ü¿²»Õ&¦¸}Î þÿîÿU@“®–Ç—-^¼TÔÌÌûf~öc$0øþó•÷jc{ÐÑ÷,|ï´ƃï[SúFÝ×îRäôÐÐÖÉêŠæa Çœ?ô—Sõ##kßDé`ãùM§üÕÌÜíµ†ly€>:¹iý\¿ìýB²†>cCþs h:‚¸Ž¡$šG=’R±?ÿÕè<ʾvv6%™Y.ÛUBO‰=šßå(Y_=ú÷nî¹c?Ñ×Scäë5ÿ·F >˜qüã§É¨ßSê7e9°ì‡—Ø7†7üÕ0Æ´µ­á‚š4) jØ¡¦Ë©x;cþ"KOö—Q‹^ú£¿Šæº`w®Gæ>ù•Õa64=»(duf€Ñ©f´úÕƒàá ÿžßr›úfgµÖ!c–›èivâ¥e óG‰w ‡N 8Ù]~îœKþs¥ËúÉo¼T þñóðþÊìrÛèÒ\Ѭû— Õ˜]îàióåÈâùì­Ê*4t–‚-Q}„ÃG„Où­÷,|šÜà9Ñ[¾÷9¢¡ÃÒ)ÙÉŠí°Ù`x}ƒ¸ý¥£†ðË™f²<'_ʨ×^úÄrÞB±Ž@>›æ<>:&¸ÒY]ÓÍÀ‰“3¤â’Âéþ¿CÍÇ/úi²uí°í±%'¦ÖWªŸÿÖߟ’Ox®3­æ3:¿Ú2ìiszVïǰçäÝÿD¶þ±uL\\ ñßgéï¬ÖÊÙ«áþǹ­Ès½Ë‡Ïê–æ^` ÚÏkYËZÖûZÍÿºÆ¨ 0k†í$’=G'Àx'l’:|¸IŒnÂã$‘ <Çïi 븘 ïçÏýÂ,Òá ·k¦â×¾5$¸®WéÃÝct,ú3ñZ ºˆV8ý[?àßÿVº'šÍA¢$´$hQ’ÔÝÍð¦ê–o¥ìŽöÖÑ$è:28J¢êàr&â:Pâ÷4êâ'ÅQp%ÊÍÙ\H. i4`‰u1«s„°Är{ü¦ý-¿ËVþÎmlÖx×h;I>_Ëÿ«U±³°šÏÒ‡‡ṿE™xOxÙg¦ï OÀîö½V=‹(®ëÑ“eÎd´½¬Æ¡Íx,{Ô‘¬oѼ81ä‚m™­à~w¨ß¡}ÊI+ÑU«ÿ×á2ú®V@sL4ZwZ@÷¼ÿÃZï{›ÿü×ü-—ÃA¬vÑ–¸òJ :I;X9>>Mœ¢¢Ëm›nÀàhèñìÕC*ÒòX?7O)ü䟑">úþòî|uNŒkU²•§éù·ád3&ƒ¯xsOÒ­ÿÉ^ÒnÇêX¬Ë¡ÅÌvŽé1ãéÕgòÛÿ™¯2«õ{®ÛÑ3Åà1¬†äÒ?9Ÿ¼Éÿ Wø/ûm36.1cæ ðeà4~Sø>š•­Õ«žúÓõ•ý-¿eÇ çØÐf0ñc§ÚëŸþ Ÿõßôk\ýmú­´ÔkúLÚî^o×s™ÔºÆ^usé]aô·>›@®™oæþŠX •ÈÛ³{4í²Û¬u×=ÖZó/±Ä¹Äÿ)ÎPóO)‰*ÛI5 8§ÍFÀpøªÕ8€ï~jíí ØîÄ4û÷åQÌQ_¢àínߟÄ)¸HžyPv€íÓäQÏ´1äiƒà}¦TG£ gKÝ[†<hñŽíüæ9$J˜ÀÇ1ßGi-'Ã÷ò)(ôâµúÓÿÐó$À0ÇtiíÁ®?š~â–×~éûŠ bá?èÐÿ¹k¿týÅEÕ¿Ó÷P­9O*¯š~å/w%.J@…fŸ¸¤7wi"’—ŸÎ=¿ÖT€wòTv¸~i' J^CB·m¡ôÓQÇÉ£ýª¦ÇòA.<*Mõ ´™òMµÑ4é88;pÔîF¹±S¿xnŸJy²§Ò%¢âUþ½U¥€N‡·þb«È< VI©Í?Iÿ’RRc‹ms¶»c¹lk¯æ¤£ê»£ÿÙÿíüPhotoshop 3.08BIM%8BIM/J½HHÐ@dÀ°'llun8BIMí,,8BIM&?€8BIM x8BIM8BIMó 8BIM 8BIM' 8BIMõH/fflff/ff¡™š2Z5-8BIMøpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè8BIM8BIM8BIM08BIM-8BIM@@8BIM8BIMIᨠUntitled-1¨ánullboundsObjcRct1Top longLeftlongBtomlongáRghtlong¨slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongáRghtlong¨urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?ð8BIM8BIM ¯w há“ÿØÿàJFIFHHÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ w"ÿÝÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?éS¦N¡eRI$’—Uº‡RÃé¸ÿh̳cN•Ö5²Ãû”×ùÿÖþmŠŸ\ëôt–6¦´_ŸkwUŽL5­: ò]ùµ~åÎ_ÿ‚.+''##!ùYVòŸô¬=‡ú:Øßm57ý&’ºÙ¿\:µ®'µàSÚ@²ÓýwØ6Ûuª.úåÖ)2iww1Žú²ÏjÈÉ"KO”óþjÅpÁ7I.ƒß@˜rº»RŸ¬y÷?}¹Vïlpÿ¿mjé:_Ö§‡ º6Vb.Üßå=£ùƯ?©Ÿ»÷äV†-ï¬:\ÎÞ#ú©…C]}]ŽkÚÛàö®SögRÖèN¿¹EZGܬЄj ¹ЄCæù] ÜWѤêÏ?ê_ûU °ø´¯Fê,¹„$w\GSÅ4ßc` ÇÇÿ$¤ŒÉаäÆ#¨A[ΑßQñ]/ÕN­²ï°Úékÿš'þ§û+”­Ó0cPO—ò”Åï­Ì½„µõ88G2>’hXŽÏªÊJ·MÌnv mÒ°Oçó•…+é&I$?ÿÑé¦I@ÊÑëÙŽÂèÙ™ 1g§éÔ—iôZ±¿Ô^WŒæ4“ð »úÿ‘³¦cкËaLnÁÿJåçì;kuqöÏ™I.Î6×Kƒò’⺞^ʈ÷?Ü~k•¤88VÆï$†ƃÜóþ¿¾ºz2¬©kLcœgïkT'FÆ»ØòNŠèÐA:ž9×vÙ±Ìc‡ï1ÓåùË]¹§o·–”ÑÝ›ŠöMiæW#õ›ìj`¿Hù-ìίF;C­%܉+;+4fÐá]-p‚æ4ÁþNíÈQÑ*1#«É&G<ÁUÜñêe¼–Ÿõ*Ñ¥Õ¹ÔZk'`<ÁágXKn“Äêá©'Ð~¡d›zEØîúX·üŸ.õ+¤\WÔ¶u¡ŒN–ÔË[ñaÿÈØ»Dñ²Ãº’I$PÿÿÒèÓ¦I@ÊñŸ_­œ¬z‡5Ðw×ãÿ¢×+‡_é=XŸOè7Åîútÿ]ZÔmqüʪhù‡à¹ü}Íi,0æ ¬?ðë?ë5¦“ºà6oãbtëëc™–ë3\Ëñ@p`Ö~ÒÇCwoèý»Ñ‡G²ÆØ÷Öó“ uÜáïvæªÝ+ž¹p.cÀ aƒ·÷uÜ×pº,z²ÁÜ v}`þ,}J9HÆ]üÛ€”vû4tm”´Û‘g®Ùõm.q›emvýÛqÿM]é9}U´æTÛ±íª‡:º_mNsˆo.ßU¸û™¿ÛüÚ6ksP›ZÐF®Áá¾Ë}ßÙBÁ©•a¸W££'RyÎýïw¹6S5lÆ,zž-Y}B¶eeÞÐë ½VVÖ‘^×>¿mN—»ÜÏ¢÷*#ª´Xü‹HئÖí‡k¬úLŸµkàÓuvÙörßN×z…–4¸5Çéì-sÝñ¿óÔò>ÑjïÞ?èšÒ÷+JÐq]"¿¬.£™—ExäY‘qØÖÛµ’`¿Ýc?ª©fc6°‡4GbÒïê+e¶š\Æhvî'äNÖÿÑTz}†¸§ó\ 7çÛùZ§‹®/Á‚`qpºTò>Íױ㠲qì'ÁáÌoý=‹Ò<+˘ßBú­aƒ[ÚáÚO+ÓÚñcZñùà;ïO»c]$’OZÿÿÓèÒL’…•â¾»<39ã»›Qµßù%ÌÕ™V/¦û˜ë®ÚØäø•¿õí߯°øÕ'þþ –°zŽ`íò&ÕW]{¥>C-ûõ]>% ´w\§Cp4µ‡šÉgÝ«WUÓØÛ©-#Nß5A©lá>Ç©8ºƒ÷µÁÄ»ÛýT ^¡…^Ù`p´È ï?ɹ ÜûÛsª¿‚[,;øm÷)ý»§Î×Õ¶áàcOí{“kME²-ÆžlúSÜ\ç0»cÜ"LÎ’­äZØ3 =KZÚëcÜ\`´»ò#æÝ:D@á0v¤Ý<÷Y½†I;XÝIÿ¢²­!¶0´Èåÿ’VºçÕ:½àG—u]Õ~ €ò'ÿ"¬DzCNfæ[ϸZÆ>}ÇGˆúõÏüø½ ¢dý«¤ã[2í®ø·Ùÿ}^`Z?ùW}õ6ÿS¥¹“ü݇îpk†’[-C¼’R’•ÿÔè“¢I W‚úöÊÞ«þüåÍãûÙæÐº¯¯ÿ*R?v–Ÿ½ï\î¢Ã"ZLš-)ú~[±rË_;ßÀ…Öàeí:¨?ÊWH9m‘¡óÕm kè`~?¾¾M}Çõ2Qú†LDä]›±C·  îƒâ¤kê l.ÓnÝ倾ÿ~@é½F›€Üí®I¼Z¿n¨‚Ù8í /PèÚ„ôÒTÑ¢§c8Üóï>(Y{‰{Ï_ŠTêuÒÓÝc´cF¥s]^Ü¿²»Õ&¦¸}Î þÿîÿU@“®–Ç—-^¼TÔÌÌûf~öc$0øþó•÷jc{ÐÑ÷,|ï´ƃï[SúFÝ×îRäôÐÐÖÉêŠæa Çœ?ô—Sõ##kßDé`ãùM§üÕÌÜíµ†ly€>:¹iý\¿ìýB²†>cCþs h:‚¸Ž¡$šG=’R±?ÿÕè<ʾvv6%™Y.ÛUBO‰=šßå(Y_=ú÷nî¹c?Ñ×Scäë5ÿ·F >˜qüã§É¨ßSê7e9°ì‡—Ø7†7üÕ0Æ´µ­á‚š4) jØ¡¦Ë©x;cþ"KOö—Q‹^ú£¿Šæº`w®Gæ>ù•Õa64=»(duf€Ñ©f´úÕƒàá ÿžßr›úfgµÖ!c–›èivâ¥e óG‰w ‡N 8Ù]~îœKþs¥ËúÉo¼T þñóðþÊìrÛèÒ\Ѭû— Õ˜]îàióåÈâùì­Ê*4t–‚-Q}„ÃG„Où­÷,|šÜà9Ñ[¾÷9¢¡ÃÒ)ÙÉŠí°Ù`x}ƒ¸ý¥£†ðË™f²<'_ʨ×^úÄrÞB±Ž@>›æ<>:&¸ÒY]ÓÍÀ‰“3¤â’Âéþ¿CÍÇ/úi²uí°í±%'¦ÖWªŸÿÖߟ’Ox®3­æ3:¿Ú2ìiszVïǰçäÝÿD¶þ±uL\\ ñßgéï¬ÖÊÙ«áþǹ­Ès½Ë‡Ïê–æ^` ÚÏkYËZÖûZÍÿºÆ¨ 0k†í$’=G'Àx'l’:|¸IŒnÂã$‘ <Çïi 븘 ïçÏýÂ,Òá ·k¦â×¾5$¸®WéÃÝct,ú3ñZ ºˆV8ý[?àßÿVº'šÍA¢$´$hQ’ÔÝÍð¦ê–o¥ìŽöÖÑ$è:28J¢êàr&â:Pâ÷4êâ'ÅQp%ÊÍÙ\H. i4`‰u1«s„°Är{ü¦ý-¿ËVþÎmlÖx×h;I>_Ëÿ«U±³°šÏÒ‡‡ṿE™xOxÙg¦ï OÀîö½V=‹(®ëÑ“eÎd´½¬Æ¡Íx,{Ô‘¬oѼ81ä‚m™­à~w¨ß¡}ÊI+ÑU«ÿ×á2ú®V@sL4ZwZ@÷¼ÿÃZï{›ÿü×ü-—ÃA¬vÑ–¸òJ :I;X9>>Mœ¢¢Ëm›nÀàhèñìÕC*ÒòX?7O)ü䟑">úþòî|uNŒkU²•§éù·ád3&ƒ¯xsOÒ­ÿÉ^ÒnÇêX¬Ë¡ÅÌvŽé1ãéÕgòÛÿ™¯2«õ{®ÛÑ3Åà1¬†äÒ?9Ÿ¼Éÿ Wø/ûm36.1cæ ðeà4~Sø>š•­Õ«žúÓõ•ý-¿eÇ çØÐf0ñc§ÚëŸþ Ÿõßôk\ýmú­´ÔkúLÚî^o×s™ÔºÆ^usé]aô·>›@®™oæþŠX •ÈÛ³{4í²Û¬u×=ÖZó/±Ä¹Äÿ)ÎPóO)‰*ÛI5 8§ÍFÀpøªÕ8€ï~jíí ØîÄ4û÷åQÌQ_¢àínߟÄ)¸HžyPv€íÓäQÏ´1äiƒà}¦TG£ gKÝ[†<hñŽíüæ9$J˜ÀÇ1ßGi-'Ã÷ò)(ôâµúÓÿÐó$À0ÇtiíÁ®?š~â–×~éûŠ bá?èÐÿ¹k¿týÅEÕ¿Ó÷P­9O*¯š~å/w%.J@…fŸ¸¤7wi"’—ŸÎ=¿ÖT€wòTv¸~i' J^CB·m¡ôÓQÇÉ£ýª¦ÇòA.<*Mõ ´™òMµÑ4é88;pÔîF¹±S¿xnŸJy²§Ò%¢âUþ½U¥€N‡·þb«È< VI©Í?Iÿ’RRc‹ms¶»c¹lk¯æ¤£ê»£ÿÙ8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIMÿáÁhttp://ns.adobe.com/xap/1.0/ ÿâ XICC_PROFILE HLinomntrRGB XYZ Î 1acspMSFTIEC sRGBöÖÓ-HP cprtP3desc„lwtptðbkptrXYZgXYZ,bXYZ@dmndTpdmddĈvuedL†viewÔ$lumiømeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ óQÌXYZ XYZ o¢8õXYZ b™·…ÚXYZ $ „¶ÏdescIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view¤þ_.ÏíÌ \žXYZ L VPWçmeassig CRT curv #(-27;@EJOTY^chmrw|†‹•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿÿî&Adobed@ ÿÛ„ÿÂá¨ÿÄ   !1 "02#AB@$4%3  !1AQ"aq2‘¡BR ð±Ábr‚#Ñ’3S0s$áñ²ÒCcƒ“³T¢Â£„%5Ee !10Aa"2@Qq¡3‘Ñá#±Rbc!1AQaq‘ ð¡±ÁÑáñ0ÿÚ ›¼žþé-ް–YKÉ4Y‚(:© ɧ  ŽÑnÃK) $ˆjžÙ6É ¥”²Rƒ“r@[q”¤ŽÅÌ-öÌÒg7¶²v¼Dœ a $CTöI¶Ia,¤«R#þN‰p·6„T¶ ¶ {R-ªÀÈt*féƒ?örº¼ÂIê§¶mµÐÂU§MÑ8•ùÙÚoÎ~Û®„OÛç˜í,B¢†T r’Ö³}Œ¹? “ŸÉÈk˜¶IkJ8)SåV­rŽUóû3»´h©lIi Ć;ü‘yc¤ã’=ÍìåÊ8RÖ‘s°ä€•&5-6-²t®S­ž¹]KLU¥Wà q£XüS9«ˆa}eÓqE‹$Ì @H’!:J´¾xÔí'wbYò=Ì¢mÉÐm å!ò˯ý>j$tœo.€©UŒNU¢RD•ÌNÂu¨ºŽŠº‹^\m™¥Ïvn”IsHNq•éôFYld‚®Þ£„Khf·öQ4i•Çkgœ Éa!$7Uü!U5|\PˆV¨õªQ©’·ËÖ›yÛ‰­ˆz¼çtlj® 2ùŒÁù_ŽæPRÖÎI -’Uv •ô¤ì„d†çºeEºJí\Õnf›KZ$h:Ú¢5Df¶Aݨlæë@"%]õíæ.ˆ¤ ‰#,¤7Uuœt!ªõ|ìqs:95ÎõŽKI¼$%N~úðœvŠn›-LgÚùó§ÌêvN‹OØÌ“ú@Ñ;K)y*ÃÍ: [‰y~vܸÀíœø¦ ¬Ç7£i«ü²´õEG}Žfv^jW˜Cብ6vr§~þF(ieÖU6qÐb#º ¹ÅÈvò§pÂ=«4TΞgn”ƒÅ×I$aÛåâ]Ár{™|œh['Q…—bf’Ôʦ3Ž‚79~¦lÙæ;iSÒ™+Yct—Ð0œH+Îõ5E‰½o®ÉÒæç ;/ªÁß(“4²—+=Gd.³‚ErÙšœßXòeh´š:çóÙ"Þ¬füühGÖñÑøËÜ"ˆ¥²»¾ƒ!vMÍ/%Å Ô(¤Ácªq…t©´Ëc«‘ØÛ0[ËK J ;pô8ñ°R P¤GåaÅ$ÉÌýiZ‹QÀ§*÷ØÓLTI/ nó,ŸGŠd*ü¢œŒÓ,óL¸Š¢çûnj¹À.NŒâ†]Æ×`¸$Ѝ²QÌ{ŠY¾„¦~„u´ ¸îüñ„ÖÑ›µÊì?œþº´+†ìDE2g·æë^êtÊ+ü]±4³ÝFËæ:{ óïBPQ¢ï^Ù¼jþÞçkмÙny¦v™°…z§4“A S€K«”lVôNG‚pZN©ÔÕ©ÒÏj~]êóß”íôU:òí|ú³=/Ìv»a7`Ä­qµ9+½AžAˆDìgT{ÝòÆ5[ÖìB`i“ÄÖë\¢}E÷Éç>©!3´~sýCÈ›có ºåi:;Â0äkÁ#¼k—9åDïWóã/ã¶²R)ç“Áô¥Ð—Le¦M„ÀK hvÃIÂÈÓí³ü£T™åq)¯²‹ˆž½ç{`ø›kLW6ò]±[Yüè €ì$¶³ð:éOØ1*ŒíC™ÖS q<&v 1_Ö|÷s?“ã¡ÑdØ.ºâ²ëBCeÓ\²l³œÀBÞÞk`Ϋ²ÍÒ«ù÷Rp§ ô¼J&·Emuˆ®I¬¤cÊîaf.4œLƒÌÂ)o‘¡¤ÿÚC×äÞq°ø°¹ó'Ø|?0ùW\ùs~ÜåÚ|ó}­'ŒyõÜúéΙ|¨Y%‰¤¿¸Ø òÙ¯‘£¹Ï£|LÏ ù CXæ½¾¡èsšÆùçÈÖ<‚fSœ‰6ÛïW¶éXiíÍ ³³4q*ºáu{‡Çþm=GÇ+%g¤pÏ•¼ôî«6jm·wy¶ïkþBjïþ ¢Y6©i  n…ü¡°øÝñß“·u£ŸHãò‡™ãükn=ŠµÛ‡AÞ/³¶H ä+6þÓ ˆ¼—ÇÖ^€Æ¡v’ÉrÑ·yý†½¾%_o¦ý«ÉSÆöm£rÛšf¹«Æ7ºlôü¤Î÷’EøU¦^5·ÕU§u‚¬[ÉÄ[…¡°WcaÝèþìµìo?­jÍìn®ºö]ŠOò;]½PÏOÛñ=ßÙñOÉä7x¯ ýÁ\¶‡Ž~%¶è MÚÉeìøÕI&§qÒEvŒðËRäq¿h†)bîX¡eÕîÜÑÛørótú~]˜·zc±KV]¸íIÚ ŽotèÞé¾ú§.ù¶Ã Æ[a°^²æös*nâù-L %‚é5þ,Ü >FÓ‘ÅÇ—Ìnÿº&³!öxõ†ÏHÇIå Ü©W­¿nAìòưYòzì[ö7G^3-Š ™†iîÁ¥Ã-g†^ýmæ7eœe>Ï™ž?ÍWw¾fº8¼?wÐv»Ý¹¬Ùý¨d£b½ò®Ôèì[4¦ÿRõ®ëüïv¾?€ë1™d» Y.Êt_ñ»¿¿³¬ð˜û>m~7½z,ÈÎ䫽»ŽÙ¸ÉÚ·ÎÊb)OøŠNV+Õnû€ˆoÞO Ö¯M¸ØØãCßeñ •wöìüq{¿·qŸìù²M^HžúM|‘í±ƒu›TëhÜv)ö)¦ö³É`Õºy-(ÙrÞã¿ØòzÑÒ­HwfÛ=µ æës¶¥Z˜Ññfá¥ügû>b²dòý¼,ÄþÙ¯ý®Óc»MÚcÙ¶Ën—Äö€É|sjŠI++ùÅSí ³]š*Æ;UïXý§ÐwàðKF®ã ‚H¸]ž:õüÏtÿ5äEnÜLiílE³ avâo÷>ƒ´þˆîyÿ­SÈ ¦µ¶á–a´$[¦âæÃø©Ì›m‡ÒŸÆ®‹{js°>QóÙ®¸QNí1´°µxÝRÕB¹ÕšÑX‡Ë„ÅyAÀÝ+~FŽÔ¬›·ü¯£Œ>¡h¯6–üaäâ9Wï7W•¿h¬Èq®ÌÖ6Ý´Å^:ÞÊ<ËbO‰ªÜ|¼¢™|[ÄaÂï#Ε4µR¯ßX®Q|-¯rJRÈðÑä^MZžïsq}©`¯Ü8­§p­Op‚=U…Ÿ©]»m®a«…v½ÛÚêÖò!Ú®ÛÎz­+âu+ñ½mb²¤©ÊØ®®ÕÅåyjä[áfZz¤2L l–CE«Ò:o¼Ûuvš’ºW²Î‘cth^qóٵɽïû§[˲´ B¡ÕÛdöÚ*oÛŒ*¦ó^ë,Mjt؉UÙ[îÂÓ‚s‰Ä/‹üÂ"† ­š¯åÿ:›h{Gª'¦°HÐò׃¥A¨µì÷U2Bø¬9w2›Í³]j’Népäδ®ZÛ­üeç´|Ûi·=H"ó-Ñ»ï•òáÑFãÝÚýó½º%#ðÒ÷ˆZ×-º<­A¦9IRÏ,ÆAͯÁC®S%–éew …ÕHSÏ..ÜwûÙl›lY|ŸŽÄRg+àñ„×– àxehÀ9JÈj«aÑË,ÝÛ2B%±b3û»sIkO1Óƒ†SšZÂî-H—!&VrÓV”Æ Ìr¹Šµ‘`íW]NËKL°»±;=/è¿ AzFö·ìþhÅþÕ¿ãž¿ÿÚúxj3”Ù^SÌ‹¹#Ts‡}wȉLnW&žD=¡ŸUÎNrÖd¡:OÈ[œ§p†BߦäòœQ 'NWqÙŠÉB]K9 ¡~~‘Né#”ÉÂÓÁ)…ÚG? ”Ü„®äš•„yN@æXÈ„û}lû›MÁZ@ Ê»¹ŽD}þ©>ÑÑÝ2Ÿ$@V4­MðA)ŒppæÖ"‡ÿOT‹)奡º—ëHÂsH,ÉŒÊ|O tœòΩÿ~¤râk:¢ŽÁ ÷$Þç)¦p=çºl˜Ô—»ˆ?ž»RLÇ¢TGS=/ûÔcŒäŒ r˜@Rq<H 9Q(ñÙ“Øæ¹Ww·Ó'SÑ™S§!ÉÈÆç0†T9ÉäÉ£ÔÆôª}Þ—}ßßD½_…•«ñ¹JøÖ¤T›ÛìÊ{Faå/¤õǼsS7›Â‹B0Æ»\¿[)ÐèLP ™z"GA_ÙÁFU¦s{rºó“²W5ª”\çw<åQ³‰Mû±ìŒáÓÆæåHÒ¢µ9wSTØÛeÈ»ÛýUsè*>½Ž Çñå 5Â0rJkXÅTåòr\ôÀ\O%Ãø•Yy5ÜÓø2šx¹Ë<è1öËÍØËØ4©:ÆyŽcé%aü˹ËË€@¢Q)¼Í?ke9k“³ÍÇ+V '-à\3ÜÒÒI9Ê•Ùá” %e1@þYÔ×7.ûCÊÖ‰U¤æ¤vDîiÝ:5ÜB(¨ÔEEÍHÀ×9Áð›Ô pþÁ¸R¹c(À^Ò²‰M(§¡ÔóG†°¥`xšFwØäÒQÊcpž´ä²%@7q«€ç-k^{*¾×5…x«±KRÔÈ»IO«Ok¢#JÔw¹658¸Qì;JÒVÕ·ëô<'{V9uRr ©0àè‚í¬&F€Ç4«;-Œò sËð´Æžæ…Üzr²pظÿÓüõNT× õ Ý]¯‡Þ€‰$%¥ëpŸ”!cŒƒâ@ópåÞÇáFC“b]˜È1)…=\ó!€,sÇ2¦€ÓùÄCòiÊkŽç!o›® I#å6ÞfÈ' Ëx„äÔù@E«JÁB5ÛÀºTC›9êîi½9¼wV5Ê.h,"ÔƒT‡ ³îtc ÎXC’#”ƒ€ !aDZƒV9KÒVóèAÀêZŽ7!0p.®kqÀ#”Ò¿‰”=4äššS‚÷u‡¯öè#8?ÉQwW7§×JBjLw6”Þ¿\p£z·¢ÿÚ?Ъ VW]ɲ¾»c  âËnvôAPé+¯ÇHPÚvÀ¢yÄÎa¶-ä î&Æ¥VÐÊ$¬µ(û£–Phƒ¥DË”)dbN˜öŸlÆg‡ÂnhésL›Ð<FœÄH錩÷y2lSxí%Óº­•-'(]ׇå)ÃÃŽÿ/È-þlŸù@Fê…3§±V‘£ô¼Ÿx|ãÿ7„¶FçEÓ«ÁÍ ñâz‚ÿ ºs’òù=Ì›Œ9k‰ô.Š>”§ôÿÿÚ?þƒÃ×Lgוž[¤&¬ƒÝi6G§CÅȦþîò݇O{/Œ¬žÝ/âG ÿ)¬úÉ<¿P6ø2i¼+އ£6¯þÁ´±h?²%¿3vµ+Çæz©/¶=LçQôZRûitÚó“XX*äR3wS˜œŒOgôÄœ¹$ìbI;€7•„š9d^MOØI-í¦H+4‰üÎíöq©5ƒ&¯U3™%ÔjÈòÈ×,Ä›ïë¢T]–°ìÝRK5ü8Ôób¸œt×þm¿n9³¦Çð“ŠúhI’F9?Ú!è;H¨¼³Îdg†á4úÇkɧç͋E}‡jõPt`ÈÃ2²›‚ÂÀƒý;²¢"³»»DEgv8*¨Ö£Éü’WÓy LSS¬‰òMæù[+s‹¼´ƒl½XR<=†ä!öVø*‹m£Ëáa˜›«÷VÇhŒ­•˜ö\…©ýû¨€ÛvbåÂŒd®lÖûÛûhååÄg‰Çvý;Ѩ23Ú§¯ÚQWØûYo`Ëï/AõRyN½Ú]#c¦‘ÉgŠÝèúW…$‘°tu ¬6vE/ø?ɦ?¥?üî®ÃQ0ÿñé"ŸáFMŸÞkÔ åºÛ$l·ýK îß”i$™Øà¼¸½í‚¨4,þŸÔ(rª_Ù[bzè\HÃýèlxß –( @¹l;ä›6ýÕ&Xm¶ÆÝà1;pÍj>)²' òå9ØÈÞ£YNö7öý‡Ò(2[nÏwŠãº„‘¹FFñ"qì#ª“M1UÔÆ¬swŒ€æÛ³ß7oô2ͦ|¾mæE´>YþîB·ŸUÿ¶‹÷È£9&MF©ÞVv»×°,N%‹±4¬Ak]ºKZìÇy,ÍaX¯1!@Áo`#@6QŒg#3n,ÇC¯e¶uõU­¶™JŒÃºp$Õ%ו¯›ãînªç`JïÊy\ýíÕ‡wcz¬k-ø²ºÛ¾œkK0oКQÊpRÃ?4Wµ ñ0xådÆÇG‘ÿ2ÿA6š'fÑù(>]¦[ò|Bí²¾úž_ÉAZ(’ý<Š@õØÔ­sÊ/÷®½újË„dëšß‘haÀPå«ð•ôÇöTœ£™Mþ.”[?)û¯¾üE«¡[‘ívŠåڤȽ^ÒöÞõ ˜•m¸£{y…iKeÒ–Ó5°Á,ɇáoŸæ~fÄÐêu ›gˆ‘7‚¿š[ žY›Ä”³I#jvv™ØñÍ-'´óaÔ¹‚/iÉVmž+I'NEÎ{.+Ç~ô‡9koj×û*æöééÙX}?ÏLžšm\j,—-†6µûE$ÖÂÄH8ƒ7£¾õ9FÜm{ôÞÔqÃ8Vü2›_÷«Î<©ðÓâ ¬maùÇÏh.GÇù†–m¦8„š§ÃxÍ Þ¥‘½·8ñ9‰'²£A²$,ݘ޹ͼYü!}Ö*Òuì Ha›Q{\¬O`8“–³I±vƒ›NÁüMjU‰ÈÏÊrsžÞMnËÇ6c¼VPm€=$îÛqjçÕéÓŽiTzÉ©#:¸8`2º>¶µ:t`Úwc$d€wE9°ÿ¨»ûV²ÞÀu÷þõ$²y†ŸU§¶ë¼M*öø‘Ÿäz"ùbðuÚ¹8ÝšÛÊCÝ_úêMKwçeŽþgBõ¹¦Š-$Ú†òßÒ“6T_‰foˆ{~£¾wSl;¢—M˜Âí•#>y$cìÅ Åœ“_ ñù Ÿ?„©ý‘Õžì¶ðÞHä·)ãJú4ð{fm+øy–ù•¾êrŽ•´ža¦–EÌ%5xÈË|Ë$Dø‰b7Mší7-ÐFu‰-b0Œ9’ê¾/Q©‰b¸·ˆurf¿¹0³0믆‚->£‚¯–Ì„a¹d€¡«ÓxêùÓ$°Y4H§ì ñÙ¹C…NIÙ"Ì*ãqè¸`GúB¼ƒÍ…í«HdÜl²(—´¡«‡z#Õó¾þÓË´ª:ÜË;ýköW†=·Êxe1êÙKªxš} ¢ÓEˆêØò‹ØØ-‰&¡H¼¥<¿Såü.±¼_µm%²Î󣑊®žÜÄÒê"U aÍËqlW¼§e/˜mg‰ãfÚ4ì|@¨ÎâÄ¼Ò žW$¶kÓE©9טŒâíÑÏÞ5嚘|Ôj<ëÌådÕyaž7:_"".öY¢s_o_…ñp6åþbºj1~eoÓm™½¤=å:Ýòè¡Ñ$ká½ÿ2|ï8“ C‘qÆùà á¸TŒ£ões_˜â{E¤é¢VYç,šÉP_§Ážšñ?Z ›.šG‚CbO9CgÇq  óCa»S¤Žb{am9±ÖyiÇ—kqâåFºÕ&›U®÷Y< *és§´™ÚIÜg]¶Æ¥0§é…@ ¹F^šŠXÜŬÑÎ5:yT8)FŒ©ÁÒDlW}^Eò­G-­ý§C!l-™u‘fêjÇÊ ßÌže¦e·ü ØQ¶—Iw’Øû°ÇúU&¢fGs6l‘ÆR$°öØ„ ´tîy.EöøMï~öºjTGi#ÂØá‡UC ïiݰÞ3œÄv7Îóùvõ±ïæýíÑ€Š”û0sÆÃìÛBw`õ ø˜ÈÎíVûçÖh1‹tí«%‹>¢ûh+«à\²åûÝ•.+³2ã”l9ŽÓzve¹ñ\F=B£lFhÕŽeÝTxZÛ»zéÎðáÔ(³ 1b{sè FÂJ¸; áùÖâ¡™?†ÉúMÁHæÓË÷ÔúEy†‹‡…¨Œ_Ø9£A#çj# Œ,Gìàz­Z—™ÝÒý™G¬Ö…¤ži=D`‘™W=‘ÈRm~jú¶‡Vþr^ë†l1êè¥7txùU“xmLjÍ_ çBÅ‘¤¿éßw´N«QusyÇf8Ü€ä› P6 à/ºÆÖÙM~Ÿ§UIŽê­\6¼A£U;kÚÝWSLû‰?—ü×½1µ¤ƒrN6‘÷d¶5§æÈš„hÝwÄ/ï-Äó G»ô cë_²¦ù¿Oª‹ldlÀõ¢´ò\57õ±õÒ#ÛÝ>šIüµ¡e¯ ›lÞ­Û¢¼=Fž@n1Ž/TíÇ%Í…f‹O$›1´¡½èݱ Údzc xÓK«TÞæÈ arÖ“0æ/”v_™Øû,o×û ÛñüÿðàC¯]»: ƒéÎM0àËn#”ýYkC-Ç&¯Lç…³‚ÞœÔ-ˆÜz6WÌ5NŽ/TõTˆ}à~ÚkaoUŒNrô­î-ÕA·á±Ì„zëât¬s_¾ÄqØoHÓy>šYã\£4Xɳˆ7¸µ1xV,ïxÐálvÔik4½ýÙFåí¦7À\ö¹æ9,ĵFÛâ‚b ñ|-Ú0¤b1f¹Â×6,EíSƦþ'i·0¦¢¶ÜÐ…Ù‹û=•£Ô^ìb 'õ‘€¦üÌ5¥þÅ_§C¯£’®=¥Cn°=t†Ø2å?ˆ}UÈLn”˜­ý– P)*l¾ÇT﬷·Ò 5Æß²³x\àsXÜQdOMwÇÙ]Ãu9fÍ!*)æcÀ “W;]å=ÐybŽæÈ*ûCFӣܛ&À-‡@§“Œò9n ”zô]}–SÑÞ§„lÿŸ‚eFÀp½?0õPA¶*ÓƒÒ^]CÔyw…^¬>Â*H_iÄ~+~Ú†%ãQÖ æýêTuæèãSÅZ³ã>œò‹•}vÐýEñ8©ßFÒ»È7ÙLÆU°qn^‰Ò L¤ï“§/¾jPI–_jgŘû«î­"íèM¶÷í¶³ •·ý^Àíf§·Þ‰wìþ+}7×>Ùºßê0¨áfçb¾#•yÇXÊÇÑó|Ó݉4eé˧ñ×- XöZ„€á¿ò’§ÒµQúsŸFL}t ì¢Ö /Þ*ú*fþb“Ô"õtøµè]\¹{.M\Bdn3Ë$Þ¦lµ–5á†BÑÓ¡¸LâÆô/møî°±4Š¢÷PG^îÂM#/+œ·öR>ô¶á´Óeþ$*/ݽÁïFÚ\¡Ž[S‹d#ïgíHÃxúz~Yg••c‰™˜åUUf'€¯6ón“jåu;²_,}‹RêN¹P¤w›/¤U÷±SÄNª @Í¥qáõ7#ãùE(ìú¨áÙ]Ýû«Ú·mlÙO“¥6Ãjej|{¤&ýw4ƒŽe=¶¤KØc¿Ø-e‡–<©/”YÏüG¥möÄî`ØŒiNNW©‡UCªLÁbn¿Ù6 aî?¨Ô ›? êîþò|„ý:û*oðï;ºEï-TVÈö|A…ð߆þ–+f¶9Gðóqfö‡^Úð£¨2ÞÝçÛ#zH‹¾âÃ…‡³FKZì úEGø};*Æß˜ôn5u‚¿®›5¾›jFѦoPD·¢³6ÒìÇÐM#n\uÿž˜ßUz8š,ßEöhFØ«S¸êÝ‹¦78rÜÄqáIì­²oË«ûŸVÊ ¹Ò¹oâ ß÷»ÑòiÃLù|ÛÎ2KlÃGå÷Ë4ìÜvo¯ÿžò…ø‰¼Fo5ó7iµ[;ûd6ÝÛ…X0gqv~½×éú«(±Ë·ñ^ìoA8Í÷ø~w½ê.’®xÜœ=Œ£Ø«m7ú^¶nù™—ˆ=êµ`-"`ÃxeÀƒ×BØ[_Ž5­€ý¸vÐl·7Ûxì¯Ó\ÛÊÞÒêö_ª² n3aaY­î¼wWÄF±¼ýB/âiÍý»{=# Ž^ä°0’ ã&âÖ'2ߘ.ú¹!@±Ý_â0]@mf§Uð-¾$]åЬRd;QõZ·kzwQ²d2W}”ã{åˆtâÔÒ1º/´}¦mÄM~'ñ½Èµiÿ¼ ¢–TŽFøDµÑš×äópL¥R¥N‡) 0e7¡~õ†,ž1¸Àÿ®ª¼Ã‰håc4qœ)Ú¦,F¦>‘ÏÑ_§ý]’²|FÓ9ìÍáõâ*o€Õ鼯ÊÓï9Ù¼MPÿõÚ{x²ßsåUé57†Ò?‰<’¶¦R~"|p.B&Ónš1­Âœd”ß6Ý—Ü}[`]ƒ‰ÚåÛø«Ä{„K¶âƒÿ2Mûë”c˜/ÚIÞ7u ‹È|ÒLÌ0ò½KœNÿ‚rwü>Ž^ Ðg̽'gù)yÆ 0Ǧ§ÐyHqæçBÈöòí$ å"iÆ:—MëxQÖy®©§{ŸºitÀû:x/’>¾ñÞ~Eé[}XPì8ý•ŠÞÖ½½G·ë«ø²G”ÙX9Bû&Ûšƒ.¯P­Šÿû/Í”óVLé+mEöÚ8“…ŒgG¨k¦ ¥ßI¨ÝmD=õl0jS#·åðöwlÎvmèrBaËšÜo|¾å3“úqÛ;þ³é4#ØÒó²‹à¶À15›oš1VB °6alTƒ¸ŠU¯tO;ÒG~bûÇN–¾¦=ƒÆOöŠ?UŠNñXôì§ÿ yC˜õóÀ¯æšÔº¶—M:æM.™¿©Œó·²‡ N)ŒíÛÙÐ}“JA¹¾C…®WˆãBãëz³¦úP{’]oèÛ[6§éŽ4®7÷NÏÕCÊñÔmÆB9]A¶#¥}¿‰ôí«æå¿}íÿ„q£$¹’=€¶,ÇÝAõÖÍò/O½øßBV8ì?äèùtúíϦÕéeIôóÆlñÊ†àŽŽ#aWo8Ñ*GæÚµÖ]d+ÿiª •÷O)©%šh!†8ËÉ,²$hˆƒ3³»¡Uvšóÿ6YDðêüÏRtÒ åm$OàiJ_Ø0F¶ùq ý6ì§[òªx½9€õRïK‹/º`ôVM¹[8¨¸êÌŸU5Î$²Àp4úixg î3m˾ÁèDâóF8LÅoÅÀå40Í€Û²Œem‹ÄðD Õv8 Š1U]¶ÛD»kî·¨Öe–Ë•ŒRªÃåÃoËÕ]-õp¬kÅÙ´uäÒj“uEw/xöŸUJ6`²©ÞE±ýÚÔ‹÷4ùqö›2örׄ1ÉËØq½ªXq+|ÉnƒW'ÕK~ƒXüΊÃ«æcãûkmXcưÅ÷ôVg¬/” Ù{ÿ²£$eÍl;¼÷MM˜Þë”6†|6û»èë1~F[m&F[ô*›Öaݹ^Þo«^ÏŸÛòší£ò^¿°Që£øfû+µ¿ê­'gÖiÿ¬o¶¿ÿÚ?!>N/ä«\™ÍËÁÐM ­æ“!mq}%T)ÁÐrƒžÒ¢ÕhW}úĸ€#Vî4àÞá™[{+X´¦ïÙ‰×Ä!ð >?YŸ‡ˆ€€ ‹&µpþæÐ9ÊÆ‡ÞÇRÝUÛÙñ•ê©g¬¡Øã\0AA ÖM±3‚­ˆ^¶8‹¥7£¿IpЇ C MœÐƆ»0Ô~ª3Y¸ü»Š]@"q”à"¦¶™Š*ÞË,܋٠²¾¹ŽjV³8a¦øÔP¼ß ÐB½í ¤šP" ²Ô}4sÕ ‡PC‚•‚ÔÒQéÓó%i®ÝäXßh¹ †q0½ouµxá¼­ãÐQ¾#v±l+Bvøkq§õqÔæ*žÑ¶¾¾™¯¡9] †Ž`™¼­QåÁG­[ŠˆÑ™J=u×!Ì:/#†r›x•N1y¶µîs¬Í#Ÿ™n=…¤º¼†o1¶î¾_]‘o¥*D¶èÍÝÛ;º”jÆTµŒÓ.fÙ¥d.é}¡"ôŠF*½”¹‹ð{L|L¢Ë –ÌÊIJ\¹ïÎìjܪ¶ ž–õ#T+0†+«rÖ/ ¯ð-PFL©m{€§B´ñgB>Väúÿ²´aiµ>" ì8‹£ù®á;8LS!Ò2Ÿ2š–¬^\¼Üb‹4ŽÜNa`œ ູ²ª¡‚ƒÈ?ĸK‹ª€DÁî‘6|‚#£5” «Îް%ª:ÂhÜ,%sXqÍžc/@²¬Èk¼êNÍvæ1Á»þ/² V\gf&(p+m¥k)„qtE§YZ@tÜ t^P½azÇTy74 ·àt†*奱fÔ?ͨAUcáqø™cËûO¦eëU÷“µØ… Ú#œ¬nÖÒº ´r9«,#Ý›Äô*ºý¿Sd°ãtÕxŽàWàÎ(hÆã],6[^sÚ Îl2zÓ˜3ÊÅ‹<ç17 ‰3™²À׬:9ø“"¡(¡AG±ó(ä{Õ‡Òj79ÈöùV|WâÏû2…°ãþ„SU—Сó½’j½T©Òg:a&Qël¢»/5``±zA ívbK’à£4²–µµ¼—7²)“ŽÍk XŒLU¥xš‰ 9J•ñ)sªæÊðF½e´u›u‘} ÏúeÈ/ÑVòJÖU´«±Ø{MjqÅ;î¶³s¼XüÍ °&L߃Ÿ2ÐÎR¹Òúþg—aw`=b¨ÀJꎒ@os6Ó„°$×€©…—¯‚ôE§áI2#/a@ ›)¡ù0 !É?ò·…Áh­KZ5n”&-sé-du‘³ÕíkQc_9“¬?‚Ò¯5H}XsÖÖÞàB4ä0üT¿®‘ÂÂu™˜Á^bs·‡¤Á“ÍÊq•Ñ•Q¬ô•‰pwµŽæŒC0b£M Ô ÑÒš*¶›`.f´=7ÕkX€¬¢¡¨rÁÎB(¼Ø U™‰ÓXq3åÁJ¨e†óÜ{¼1 ­H–Û2Î÷l|~øz5Ú ô3^Ð%+s"DØ‹¢…œe-.'¼Ž}ÖF,ø\³@_жì"wIÌŒ=qÏ郥á%i´”^è Z•ñ@8 JBŒû»Sj9XyP¢![ø\\$ÜÆt¡Ò(á ‡€e9Š¢¬«y•KÈÓX¡+Áe æ‚3zgIÇؽjç@.á°£³¬*Sâж9f{²‘Làó]hÖ\ËP5!QLþ¯Zˆ³¶þ诼OO“>ßYˆŽ …s8NðKà¿Vañ¢”¦ªå ø%mšY·G×h ÅÂÜ/šüÁ¡§S†Í92«F…WJ^N@0=ñ qU‘¹­IT(Í.ƒWo}KEAJglc=®,¬ÑV‡x‰P`ť⎴ö”=zX_ˆÅªl0J·WïfNlrýáðeJ8$ÌŽÇÜËàs-ôêÆÓùžÙÜÈêõÎmÊlT¤xÃ2ù/{ó3·5Õ ï=¨Qºwï›4³·1cm¦Œ+(šäý*>çP‚©¡+G’zʺX^p!EÇ•éŠsp˜E;åå#ÄËke/$¾¸]¦yV:–Ši¸*ÚÌ‹ìôŸô€?SRåÊ› ç¦ T/=²ÛÐîo?Ü®K¨¯4|£Á¤.àˆjSåM/ÄÛ$ÖˆªÄ" \Û“3ˆ=mZÜŽiaT‰â>¶Iˆ€ìgžqæž<Ç|“w¤ÍBlU…[x…¸ŠáN8gô–eZ_`k-èÄñÝjT0àXÞTà¡' ó/ØŠýkárœÇE hÍŸIËÞ›éqÆÔf²d%ÙÄv6óئQëh:f´é">Qw)±.‘‡Cºç$YÀŒÎˆ%œmF¸Bqi ¬ i×”ézE.ßY‰Ü_)PÔá©2ó ࢽaÇ3ÐU(svØÜ·š+Mn¢ÁÀw„­†ËtúU[úüíxÍ%Ý|¶ÝVÆ‹ïsÏh˜”§ˆ NmÃí³<Ò{Ó*UŸ-9]ÀR®£`ÂE…ñq@Ž@ä£ Ò1µIÀ@é¸I<ð/§"@ʦšŒ@³m–T…¥|À»\NU}ä¾êóՃ׉ºÞÊó KÉM2˜r®©Dx4׊‹œ¬ 5Š×Úc’k¬¹yª½]%Àé÷ø}Ê ,­Ð_R˜ ­´3l¨3$-‡®èûÊŸ,¥+ã•VáRiÎÌŒ¬¦pë Sa:–x•Q«h(a[.¡“/ µ—yûÅŽé…9è3}ÐÞDχYDI·¤Ñ Fô¡âJ*”‡hÜÜ.™wßS] n3YNUTZKh}2ÓmÓʹ¼S[Ì,­ýF­¤}Jt›§5٨˹K^1ŸH€Kõe }ámTÜñ[è*LvMñÞ3Ûq… !ìå§’Ý*\·,\º–\¸(úå_)¶IUóVCOìnÃ%\.êüÅìæS/·Jž Ébÿ¤h)¥œpWmŸ8å"{ ñ—¤´írŠ–ÎåÔâ ætJxýBv¬×Š,&+9é-òÅÔyÃ{o©5¥Äi¼\Ç©¦´ *Ôô¸å»RRå sWP<ÈkrcåŠ}¡,„UZ”¸˜[Ë3KDÍz(6¶°q„åµÿ#õ”އÔå~Éjæštßw˜² âˆoǹ»EHÕUΚšä)Ã…5¾Lî¸õˆNXÏå:õxz«´ ?E½ÁoÛÃGFqø ž›J»H7æ9g)f•ƒï-¥wy=æ7¯Ú&|Zrs$dÜFj̼ß:b1Â˶_1³Þæ¬í,±×ì%µé‰l’ji.ËW|€4jx›»¶.Œ2ú®ƒìtð˜vPË´AÍ@q k=å8 x#d))èûž"\j©ÞM³7·þBAc.°ÆBúçŒ>«6ª«¯]½`ÌÙR¨"g;2tbÜžÀƒÛrSr”40y8Gñ®¸®Ë».e3EÈ6‡9z“ G ªÝDhæøfth­»^(9M¥C$ªÇH\[uw£ˆ¤eÊ S„Šm“H-x¶Rªuc;^˜ð[ÖQøÔÊ‚´ímXåc#æÐ‡Tth;¼<'›ßr£4“6.«Ä´QÀŸ[PX¸ƒÄw½CTi&ÐîøššÝ_²f);;k1TÀÎkPŸ¼8wOnº@¥ªV¹†…bòzVæ‡COØL„° #À9õ1*3m€q僱•Œ˜¥«°æ²‚­ò¤í<Æ0:«)„ê™%óBó±»Î.N–‰– Í_¨[/¬j“LU<…Uhêagá¥.£–p@ŽÞUØÒî豘ëÍ3oÅcpF£`õ„‚«aÙ»±aU®y±æ4õu ‰ -׿WhärJÏ-Ç<ë쉷«aHŽºbQCFrä&'Üõ”0r2Z\âe­ :g*Ù2]Œ·GX¸`Qbþ@ªá—ÂéT¹¬¨ 5Y¸˜+*©  €àΈ$´²uâU­RÞ䨙žÛM£¼î²äõ-ÃKò /•`±‡—‰êµ4n®…*‚Â+ÜäWà…¤z’ô¬±3d$Ä0ø#k ,V@h²ž{‘¥Œcêén ’誠²F,hö¨†°ýóø©ìKÞ¼q˜Ž»è ^%~ê”Dó)©#c„®©*ìx zª[M1ó³wš¡4T£pÝ$QÞY””·òÑåXã!ÌR]ŽQ\o'8Ua“î+(ÜÂÝK-nc‚7µO*ÝJÔB´»aufÚµ Ò½.š¬Ë1ЖC¬±bW~g`yÀ)—¤µ¶ Ü"õ͕7 +Fú¬J` `0Ï–&ìaOò_Û¼Z^_57¡‡`œ„#ŠíìÃöâ)0à8 vQÝï1kEšy)D¸eMðX*­ê¥xyýš"õi˜äó2àUm Ù¯MJØÍ™×Ì ±@g}M,¨ô³µå09þÏ&àX™wÖ9,Ì®}‡C³¹ÚŠ–aµ—HÖwdª‚#U©ÀnWyðhï«Qê¾Úñià–—f+ƒQ,¬E5˜é.´Ã:ÈVÃÄ‹“MŒôÔâb]kмÊN‰«Ö¨°[Évs/8u=X CУÉ]Üt%iÉܧ×s{µTûœÝ—¡Io\ÿ%o‚óØ÷ž]3¹Oç¤ØèûöÜáž{Az}r[¾ƒ|xï®KNœ!>\k´§úføEiƒ™nŠQœZ5Ò(‹]ÂŒ}ïšíÃ%–2F«‰ñÝ̨|+ Ì`!ÙwE‹•©½]âe9o¼çí9üÍo¯Îâ8ÏWnRoz û ´•üü1u7ØÁÛàãÐK0Y‘Äéù];V=V&æw¢ü_5Tº§:í#@sF]o8•â+4¬Ã§H%ìf6LÛÚ'x€Ù…ÝR›B,ÖPA *oÅTÑe¸¤Ÿ†§‡ñ?ÉÓë¬ýŸ˜s üSOFiõÞ~ɼ}¯êlùsñ¿ÀOÊü³ê!øÖ1ÿÚ?!‡Ï²f\âøüƒ´bõŽkù&þE‡ÍMû’çyœ[®Q!UÖç0ÌJ½ðg›–á N)×|{ÔzÒ™eÚ#lˆ–kåwòÙìœ&ÌËMQJæL0ʚ؇Ì©ðÅÜ“š˜É¸‰Üܼ¤ÖåÃ9œ¼@bÂ̈×É늎’:¸Ê¬…ÒuGŸJRç® uÛUòŸ¡zA‚Æ.î›ô@Žæ¦A#ÔUˆtéÙq;E\D¿‘‡ÁW“0(é3'´P²Ž¡ˆd°á!0—í zˆì:CYæ0ê¬÷œ|Ï"i7Öˆÿ|·Yýy…ÜV¯5-$Fp¸^úLÙ‰rØW J1Ü|êÉÐŽà¥r‘-²ÎßWÞbõü Jý]â…òp_/¼¦êð7¯Z‡ïIŒ8ûËð`¢Å70Âã¦x[æØËÛ(FÒÄB⟑ å_—ò(á÷—æÄ0 –dzü‡zñþÎ;ú÷€,l‚úÚw113À³7DÝ‚`îÌ385•Ó Ì¡—“—u¤±GcyùåvÑI²Qs-œ.ù Ga…ðˆ3kx×Êêo ‹öNÑïó©–¨Â犨µ¤†J°#R¤€3µ3 ù4†TÅ;Ç)e13D`ßt¸LTe—ÖÂWЙ­„æd’ßòhÔo—ÊÓ¨ …@DMÅ5¤²bj <>ò¬_2”¼ÁÙE›ÿ?&Œ÷Y%Z3ˆ.H† ¸ ê`öÄ7%10%ŒA§Ë aª¦Â ‰gva޶•s;Ó=¦d /XøD¨VæÈ”êFñÆ –[vdK=ãàpgFYpåu(=åŠ3+Úb5§#¬!Rgã¸q,Ž^è\²çd¸V$XÎ|J(Nà‰‰ˆÄ·<Ç®tX„ÏÃv²ÌhÎ[^æÇ¯ÌVB(38f,R¤é6|d&o0CX˜ÆÞ±PB‰êe«(Ñ œLFå’Èy†w)ÕÑ!¬]ÆŒL’ H‰míq%ÒÕPNÁìb¢ÝųËÀÊjÑ ‡ÓßÞm—À²ÔÌX™†}çc_h‘ËË厦O(¼‘\1Š—¹mPñ(ª»D­èG~ˆêbUš#ÓL1ؘb%Ä÷tñÓÚ/’:ÈHV2rö8ï/¯ÈÍD;f&÷0¯èƒœíðf @¿„M|Kî$¡î~¼‘‘ ÍF~ç?àt†fᓤ=¦ºë(uÆq.q Ànp•òQÜ®ß35Jë1U/﹘nâ¤yˆ|#o_ˆÄ¹OÏ_¬••ˆî}¢>Y„»`×Á—. üh˜˜•Òz|^h²ZæeÌáw0s‡Xü‡1Ô~M'1Ütøü|kÿÚ?!ÿÃS¨Á¦[ù”2 »¿÷[˜)‚t#Î%åŒ?°G óÊ^á–hø#83-ƘC97ʔӿü‡.àåDbÐ yIÀñ,£ŒáëáoÎÏÊd zbÄ(P¢m Y£à±0.dÉ?:PO²X3ZÔ ©n°Æ–ã- ÇÀºf'ç ÜCS1f%wó­R„nzÇcÓXiqö„͹ül°äŒ¥ó „ì0îÓ áWEÍ3)p„MCu3/X^n.ŽS:›gUaG4úñ)PZY7R˜, Oªh?t¾ôÿÌù*™tNjoå>øYm´j æLÃ;½µ~ UU#æ8,ã‰Gð‰ JOI‘>œ€)Ñ«ùà¯Y¢Ò ?‚UûÊ“­PDBzˆK’Ç™@~`þå¤Jî¾ÿä©éžj6NI©ìù´ÊBfLܢΰ*"9P•€+NæLž©ž&QÃirüùSKPf:„RÊ£¶K§ÂÆØ°®Ò³s¡!¯—DÐï1®·ý¡[¬²¬xì™´Âd¶bÂZñ,½H¨b9³ù θC‰Iw$kÄZÙ†ä9‹YÛüøoSd,Ì¥ÇÀ­ËÏÌjÄp%ÖâÐÞVæ,À$¶BWa\f¬²ÏhÂ<"ÏÊ{M!‘„ÄÆcD°)E‘yÃre“ »;†‚Qy¼fIcÛäÚÄÄq#âng˜Xíf4™Lø„Tå©tqJBgD⸠ä·äM:#&+ÍL‘ÖDºSaܪ™†ÆqNÈ™z6|-‹²ˆCNføœù*—ø˜w˜ê-xøB[‰ÂÊ 1Ç-…cv®`ÀëÂûCEA5ð6å‹Â[¬µØõj ·q\u J&h¤ôWW‘e 5 ½¦¾ˆ&WƒÊ ¾žÞÓe ¨°•tÇïwyð{Ä÷<Cq܃a‚·9Ì¢OÁ-îƒU³’ç·º˜ý嬭ÂkEíë篼ÃðÒõˆx;¼ô%PÌÚ3MAôMQÄK$*_Xüü+"±ž&MÊÅóðWfA—% Ã÷ሀx$6-xãí‹«Et⦬Û+ŒË(Xyi_ð¢Ò/ÊP@)éü1ïGó¶?GZ<-ÉÕZn\MŒòý¬v:òÅšÇ@„­%¬lŒb·¾.†šEËBW²Gú-Ï`:Ÿ5‹ ªDbH8V®¹™˜}Yqئ60‹àð~’6m.±" %§`óIŠ3žnµYW{EÉ1S-‰¨_zVÓæ¸ç”k³–=¶Ä·ÆÉè;ÆG“Uù±ä¦ê€S&è«nvRW‰jí•Sg˜¿qà0LS?ÿÚ?ÝÆpV3¦.ùÆrøÅ<Å­µù|zź§_X½²«¼qÓ‹[ ^Zöëh !‘õ¿0nëÙúˆ-̽°ÔZ8)⸤ê]r­j^ˆÉž)\HÈ€å.‹ë([[5sŽ"Å%#‚¨ îâ‹àü-¡µË@jDPeŒ”bǬTf̃ö? ExoŒ-â9 âÎñÎnSF4Íf÷Cšˆszëü1^Ó¨œ`½q]šŠï:ã^»â<ïN(±§5ŒDÓnÙ8ïä–7{4Þ-fzq½â‰›6é´¶ãUúëÕF(ZÔ²<ñ‹þH'r±Q¨ê'ß$µPQ¢HLŒCGrªŽ J†;*%ó VŠEÐÞ<ÂùtE_CLWT9')+dà˜‹Hr- nò¶*~ƒj Ð2@+¿5¤„‹´lFd9œÈ€|ȉV8”†€€LûTâãB ¢4)^Óñª‡Ðh9b†–šå;›EÐBE$°uRE [7‰e•!|¦8 *àÔJX#\.fÐM©üزÖ3‰mñVª †‡´UXQJúéo'çÂÜ8A8lÙaŠ +zy¹½2`<{\Õpq]ðc7:(Ûç½à–³Ž™½=sÖ;u²œÞµÙ¹xÃèÛ^˜™6çœUú„¯‘“ª3èÁKŽÖ u \]mEܬ›ØŠ.{e¥äêïP›¦8)„yJ @ 0غ @iÅn‚‰·¨pˆÌ)mªŠkj¼EÐÂóýy×1Å!Å„×l-lD-)å7CƒIµ8Àêîæ‹¬P•kF-† aˆ¶ÒdELóÁ"[~ c8—çâõ lóE%ŽxCZ7Šn<ŽG–Þ¤!o%Û£þËÒìß?©Å:Ø÷¾@Š{§Øé†â]võÕyf,‹"kZF5à(ƒKlYPH»Uy`]šÚ5c¬§ (;ð¾, >a81Ì%¤' ŠÙqM³¼ åQC-Þq¦ªxn-¡+.¹¹¢]݃ e®ÜKØ"™£½„TÂ-WDcp»DCê«Ø%k1Bféº2K¡ìVqlj¨`E³¤ð.ñÞ*¯Wj™<]*÷/Ów[ñ³ýëÝÆêm¾%Úx:cœ·Þ3ªëO‘r`7ÓÆ¢ 7dk£fÉtæYÔȃJXª—ÏWÃ|`[H;ÙA/Vãþ¸×»×„ 0–C"ªš`ºvHf_V«qd”"öT]—ʺ‰Òªêt\P¾@ˆ(œ0õ j±3È+Kñ­:ð|ê 1M%¯Õ*`ÂÝ»0·âÍÄÍimZÕIuF¡"×ä« NÜXŘ¾åÅ<ÐKhlj$¦#m0Ë SÎ^½n˨ÛÎnò÷,3Y‚Ðcï_iÝ4g©iŽa¡z¥]ôÏ| 0»xU¦­ÖÑÒÒȦöºÛtÂðWÃa¦È[¤%”RÖ¥©i»Z¾æt{½ „CWRÉV¡UGŒ*N¦oméÀXmŽ]Ÿ|öÌ0”9zËs)aÉþ’ëÑ¿³D-tÁ¨|æu j©Í¤:ÔåW)ß}¿Êªú B'Û=eÝ<Ò[ ˜O4ÚpÜ–Ð]ê«)ë.÷U‡©ÀK9} ìø¨ï¾Ðå‹×sXÞ¨ÊÙÑC!|+_´~±j\Œ/†¶°ÝXÆá9Ávb•'Æ’©#49ÃD)acÍ)W“+n³ˆ„ÔX§{1={@£µÅzD˜v€P Ls9jèZ$Ír*  ºêÍz>²Ê˜Ð©¾%*Ó1W¡ƒ0˜Ôîs ÕžbÏÎBxöŽ%2—±¤ê(h4ZRà6a!K«±ƒ-¦EV\Ë3t¡^×êjX9ªô㤠G©¶«þÂû^;sß1¶tèý´ÙP½Ûof¹C ðÚ±é‚RÅ)Z¦A„j’lÞki–£^#dmëD/v…9äaå%°Ñqo<:@TøÈ˜G6Übú´¦¤$-QÚ³0³_µ¯t l YLÀ*T YfRJGóÌSVí;\ªOغp”Q²±½^V…yq¾eç *iÍ\QD]E¦ÓQR¶ëmÆE=ÊÝèmÐ<ôܳ¼nÊËH¶`b§î+.į6bÊ<Ñxvm< iV[o)²%ö½Hšä¸³qŸŠ½¹µ0­)D=±hÃÈ *²·±i˜ì¥Œ«H)¹E@ªåp|xžÅW,rà%026ƒ5 kc Ó‚ÜBEL1J5ˆÓ°‹]k¢WÙªÉÂïåÍyb…â³]ké3Â= /4ÖˆZåÚê¬l#­b`P€Ô½ ^èŒ&rŒè”d [éÀ˜rèrÒ)wïz‰šùZ’Kp37!Ìh1 yEäñ™l iK‘,,2´OZšé©tw$H™cn©V­¡G…ñÈ‘ÖN²3ciœh¶Ý QvF[8e£®y¥Ám½¹ ¦Ù¦1W‘”¬%°¼X)ÐUêP-WjQ/i)ô¶‰Ä ¬Ê.Ua²—H- ¢*AÄ`s¶cIšq&©8‹]L«”öÃ#Dœšš!vÊ¢’Z†·.¡» Íu´˜‘’<>\ËTE\š¦LiLª€” Õxij ²QØN,§;Ñ–XçÀ4Bð4ˆ¬+V’)ã¿WCFè]B1¤çxÃj«‹‹H.iPh³‘08´tÙSsŒZ_ía%(NÀ­¹V2%t¬%K•0’)Ùmß½&äð³Ò3®Qk ¥¤l9ÁddPa]bè]tûÁÃRK™pÑž-ÊÀC9, -9šÙK®ÓW%åâ5…æRÓ›q âb/¢úž£P+ à¶ ØŒ"ò¹}ª DZâû›åƒrÀ¥Ä$Í>¦"É£cṪM€r^+TJ ™„#BŒø!%À…‚²…ª7™e()m .×¾¤­K ƒHh(wKÌ(|[-â2Õ¦ ©„rpq)f”¥@ ,ÜÁ%”q–%¼0Á@Y±ˆœ¡ù ªDb«YŽ'·º%g]®w¨Ç(Qnø…hn¬6£Tœ˜ÐJD.´¥b1H0 ´0ʇqoÉE#nÛ‘ZZ)ؼ´hÛ¤u8BÂá(TÓm%¬.ö1Kªù€¼:3cX3E®,Z¨E1¬º°_"ªÉãs?`]RQ‰E;aÕ¡ms  •I€ªsf¦ŠŒd ÄÚ9Bå*àh/j» yuÙ-UkTôZß’'.–ëÈAï TÄhÁ$EDP(©œÞ .£49¥—T‹^½¥@2‡U*Ýñ[€®†T zêá“cb‡7+/r%r«ÑihÛB‹€¾Tñc±)“Yp¯]Á°Í´±\fHnô@¬9©ÂÂéÈ`®ÊæR ÖÓUŒm-x­Z(´,"ñ s{NB…&……J±Ð:A¢Ã hdÕ¤³š ˜@@À"P± (^¤Ý.íh,GjøÈ¦º§m!AÖ2«Gp–Û¼^RµÞ˜­|BÉ5Nèƒp–Ø\ ë5U¡ÊèFJµâ;ÁU6/Ƴݔ&Ó`£8Š;‰ßQú.é-4lÅ®·)v—“8›è“(‡ µºô§ÇIi±t&‡ aoõ”¼ ¾EjÊ)æ4‚´PªU†úA<¹`ØÒ6¤Ya¶›àÆDéë.(P€v«ÏW:„¨¼$匇ŒÃ¢[¡l;5Ý™ácfÅ«iÈÕfâ®2J »F$PÖ†oZâëRÑ”˜PšÚ+6dJº…ÆKZÌ ¤¼iZt•íRÀã=\-÷z£œ+U¢Qd¢t·AÞ¢»U.Ư „«zó)vLhc5›ÁeAÍÙYDÅœ°8é¶[*.«ëc9–E=w‹2N–Á±=Áõ˜Z«»ÝmvërÍHX¼–9s (,ápϼa®fœ^P€(…U\ ”Èí|AmÉ•–ªÄõØ8«¨A°(XöE…bzjîµ1‘±éÉ#K5Nï<Ñæ°ÅsTVK\ùhTé¯"ÇŠ­WÁ¿ñ8ú™ÃGÓd?iÙâ:xÿgÔºÆÏ£3öþ'o/ÉŸCÃ>çù|Î)ÄšvHûŸƒ ÿÚ?¼§þ Œoḛ̈îËüüÆí ãù^Ó‡ßo¼¸egÞªì:‡gí3ð¼TÑqÛñ¥ªŠò|ܲ›áé×Ì6l½·q’ÊûMÒn³6}#WV½á—LË0²¹ÏSîx‚ Н–¬0V–ñµÚsþ~a]vúÔµM!P|"Vʰ œl„L‡¯úF9"QpÁ ^—ˆ­@]Ã_Ryù\ú½¼u—p†[œ€øÄÇ«¼$æ¢Û¯º t'×ü8¸{æ`3FoÂf2 û}\6—8çâ,b]ããKƒpÀ1£ˆí..Øœ.˜è)žŸ˜2óÿe£@Ù/í&À^Ó+ÚtXX–ð ´Å"Ñg‰N>-é+Æ¥‘xލñýK²ãëÒeÊ[ÃÒh&ÝÄïÿ>¿ì©‹£Am•÷=%œÑÌåÕLÓ„u<§3SQ]³=Ÿ‹¦ks«;^_bã/eϼ<õ¿®ò†y5.ž#>c»¼MÙš¿ÔQUu¯±h¯¯¯´fœ‡0Š8ü3áaN~Ñ3‡yÒ‡ìiüü—ª9€•²]—T¿Ô@» ý¡ˆæ_;0:Åù‚^ŒÎ úõí+ý`ëœlz“ o›û㶘J2ÞMÂX-ÌJ¬?SºD2ñ>ð׫>‹>äBçãC–3p½{^Щ52b¯ž“BÀ{PU缡ÈZªa~ÅÙ‹1»š}AöJnœŠ9*ðéôcé‡(4W}€hG®Xõ¦öïÌV5ºDsèÜX݉ŸXö¤èÀàåö–4Žƒ¬ðÞnj*ïî ž󨪪­èuãRîzZŠl«Bú Ãej­ÑæºEPQ³^ËeÖ:Er¢©1»ñ. ¥ÙPü†Á‹r½Ëöˆ„-•lß:?È•vš5N9\Ûk‚Š:Ê-oƒú”`È̵wQòaü|q_‚7èýá+´´Ýa5ѳ×p†.øc M8 ÉtgïhNéìÛGÚ3L9¿®eæh£ÎoÜjž*3È!÷·Öæû=n^Ûãh}= ÉBœ¶§w¬Z®x"lÏ£Ò–/Àýë÷ö•œÆo#ðw2èÌÑ¥5÷ýK· ¦a±`¹Y‹kŠR¼ä ¾ÀüÉ%Û÷Äpê••jÖÆOKþL”h‚G@gļT²éÚ ƒðôøZ̲'ÕD¨O1†‘xiеD+¤ýÊ~¤¼µ %É]¢Õ‹wĬðÐçÚX¼DÎJKiûÿ‘ÓѰË:gÞ!FŸ“gˆp ÌÄ·Ÿ¯´+² ±¿³þ—da » š€Q´Áæ 3AŽëEûK71{õàô—RË~$|/êP°èff‹BŸ'ù_#…öê5CgüˆÆCà¡b"[ë™J Ë•ï™\'¢8ŠœÆ×ux”‡ ÖWWÌPŒ¶™uÑ.ÍFý`ÌKùW÷|‡Í.H¼>¾ò•ÉpÅp~?äX9óUÕͬ:ËF$zQ«Ãª  úLw§ÞXqyqðá{ÁbÅßóÒC†úˇÇÉZÜ%ÔUûT¶h7/cLu2SœîâSÅË•K3="0+ó ŸYw‘‚®¶â\5ÛÍÁŠ•{KÆÜ~ïÕ¶PË-BÙÿ}È&l¯ƒÒ+:Ë#}ÕqÆ;Ä(c)#!_y@˜¶úfÎæ»ÿ’“nHôซa´×óíOµÃqc•²ü±ÓKJåhæ5b‹Ìeõû!öƒ„æRtuóÛÆüC ß>ž“eM¾h·jWnq]ÊûÎRtúûK««Óâ&˜6¦ÁŸuú©ž‡ï·X‚ ¾Çö/ùha°ýuÁÙXóÔâ¢0ÐŒ0#W0 v4æp úÖ2¨vÕ¿tÀø¿1gá8aáéÛÃ*sY˜kûLsæ(Í9¿×¬Æ=õ׹ߴ:=nRï~?ßÄ­GÙ?Ùp‡IÀug;¯·ûø‹$h;/¡ ÚÅœ:ùf.=\v}>¨ÂŒ,ËM b¥ÒB­Y½áÏ‘CÎeúî|hà%2âòœZÓõúü@4†J¼u<}à¦rm®K?ý-«uOJú`µÂØÍ9±1çˆ UJƒ´‚#šëÞ ÐÈöë æòõÔuP0¤tŽÄ醈æåù,…ºÕó ¡?ð¼9b²}M4äàÉÀµ âqÌL@¥ŸÊdÉúþ1õü–B”³÷3#ƒ'6ä÷–«eùNwÒýÉAª@º[ ýÁ©ÉZ;¿¨æÍóõø‚‡ÀÎaó¸GëÓq¥Ô©žöûvD'”ªô<ÂÂ΋>«[‰c•/^¸¹COLƪŇ­oïˆ:ð”Ÿãù„UPSÓëQˆt'PÕ÷Hƒ·âûvpÅ¥a]‡¡x\÷.׫QÔZÛòX(Þ` h?Bãm— †D~òüžÂë/º¸‰'®Ž>½¢›=Oì«E~Iõ™rhÉ×£þøÍå:ˆZgs8¦3†” ÉòóSÖs4¸ ¨ÏvýH,N­b<-GLþà5nþ+û#–üb¥B §ÇýüÇM2Ãf Dm(FX»ø= Àè™g¬VÊL9p@² ¨-%È¢’¶uW¿k;¥úWPn»¿xƒKLjÏò;úü ÆÞ±ß×i±õÄvÏÖlšlÑæ?„Ùàýüéýϱ~§ÁøøÿÚ?ÿÃOòuWWÚV-äþÇÅ\¿ÈÐíÄT­y9?§Þb?5c¿ÎÈOïò¢ˆ}pxÁ¾òîÞ"c”‘Ú+\ÚŠçƒã£ö`PJGPYS‰n¦còv†'ø}Éi|MÜ$¤§»àÀ¨³~Œ¾Ö:ã£Ä|ØÈ;»ùˆÁBYu3}¿ðèõ‚8/‚P*ÑŽ°ç{ö€Eõƒ8†QÆøìþ à‰Dy¹Rm²òœÄ/Âë%?/XYZ>ïIp9Va§1/›h<ÇTa:F7 \-.ˆ|Lt‰“êãE&E¹33füB±sX‚òWÍIílÆžÝß™C¥dʔѺÒj&XßÄ“”‡ó mó=¤¨£ôKC¤° ,×Åøw 6§F!¤æu‚ ø©v*á†?Æÿì¼ý?ÛtêWà ú! }‘{þ`ËežÈW.#ð6—‚1ëˈ‚t*#òqø“´¤kå+²éŽÕÒºDÀÉà>ÞðÙ/Úf?™8õ–K†r5É’½ŒÍÉ—UòŒÓ‹f¥YØ£ÄVøKtSÏWŽš•rAÖïÁ ðÚ«º¿+=™±öX¯…%äôß¼B’0RüÖþÓÕíjö«‚ ˆ¸ ä§òÁg×øÅinå8…=j4Y±–XÌÿ%K¹Q€æPô:¿[€0o7}è]JC'RSºž¡—\ô¾"Ó†™éÅê6C´.Iª¯Ì¼¡U(R—Ö®cÊÕ6y§ë3Bœ²…j©_¾c€žjá9v«:ß*îåm^eJØqú€PõÏïáuž~CЏ2·|Пv$L¶*÷ˆ <î/¼ð“C;¦-¯X©R0zEQ,a9Å"ˆî<)¬Y꪿iyuõþr‰Dà·ê¹ pŸD W ¿ØA …[ žGù ±¯ˆ×˜ñgÚÙp\v–“HhW|LÛu•Eö½À¥eàqp _0Qá¨Bº©Ž<ûEzâߘ¡{áóþê2?c3J~ÿQ§<ÌW“€^Õ?R¬¡V©œ4]E\ßî7RÙ|T;u:Bˆ^aW_gñ”˜˜&&tÄN›·¬A[‹ŠÜÃùÿ`-h¿i²|†É‚°MŽ­^0wi¶`D#7¥WáH3/Äs(§"gx÷”%=—ê8ä±h€úÃfP0,çwÛþÀ5Ö㪑,ðüÁK›Ž~%@EAí4=Ç,šeÍm}Çù†àá Iû&É!´(r·êÇ‹qF1Ú־Ѷ#ƒ¥Æ­+†ãƒ—Ö8ï4¯¬kŠ˜¬y…)ĤÖÏ\ü›$¢ª×î Âá][>ó* ¸˜(}å4ÂUt˜‹c˜pxâÎ28‘¯«Àp>òáŒÔ¢˜3þD*Ù€Zqª_,©yþŸäj8‹S¸` /ûâB¥Ôµ]Ñ©¯ÝŽñ‡œ®y—wX˜;†Ýÿ8ˆjaY²âPáq~7,Fö‡î6ñ‰{´¹D¹~Ó˜Ž0 ¬9ÖTlzÊJ™ô̱Ùnîƒ~\x9ŠW ¶~Ž@ñF h%UðàüÊ„2ÿ° ±f=w*a¹ƒ%°Kˆ&†PÊNÁb/RýË€ÌBŽZôçï-Img¼¹A®žŸZ—\?HÁò;ßÄA†h?CóË. ¹žpYU—dì( 6˜ŒÃ Z„‹Í3;af.i‚˯ìKìýBÂl‚Ê Ž”p}O †`ëùúæ-F¬ÇªÅÌ% ˆ -´/áž®áŠó³1†6[¸” >íB)Á–—³ˆ ÛtþK›½ãÒ=oOòiL7Ô0¨fMjåqËõüŽÁ÷a J=îa.…ÞNz.î c’d"ãЉ«¼«HdCÆvö3(%5ržƒ”ó^!$¹®¤ýA&Ð:À ,j˜¿ÓÂ}àVwÇOóñ4ˆúúÌ|É÷?äÂÔõí2þŸ_x&“?ç«P×/ï§‚uà—=Ï×Ù°€X:@EX¹×¼,çýt`zkò¼¬°*9Bhw¬ÄŠqžØ„=6ËöeúNŸ«[y?r¼X ‚[ÃŽ°Ö5™ý›|Áj°Â4(‰±2'ˆWv} W³‰á‹¢€$CŠ<*m&Ãô6ä£.âXàÄÍÆf05iˆÀ³§üŠuŒKLAΞýSpéÂL\Ÿ]ã†èïú‚(wmìBÑÖ¾¿~ÑW*ˆ ²‚ÜuOCbtýõ0âªÆºuO±ÑÃܪ( ¯‰•ªF)Ú…ENâ‚æåÓ/™võ´À»ƒ¥Â‡!üRì+*0Xrv—ýŸ\2˜[TM@uÏ¡qò±Ó¤j\¢å¢5b>b @îšÆâÚZÅâåÍDT©‘¨oe2ÁÚïïƒÛ†*v¦~ïêf:t¹„bñëõ’)*µ„Èbc1–š—rùgyv|=%²óHéy‰Me¯N²—‚R{B?|ÜÉmc÷yúñ2Q¬±E/37ˆœ|ÛÜõ‹a Á̾à ë*lÓ/–ßßiÊϯÄ!ÞìO^!³áë™Ì;&¾hLJ6Ñú¼O ñÏ>ÙýM¾_É>ï÷?'êÿÙvlfeat/docsrc/images/vl_blue.pxm0000644000175000017500000002543212237004736015657 0ustar dimadimaPXMT_DOCÊHEADER€€@N " e›¬METADATA Ĉ  streamtypedè„@„„„NSMutableDictionary„„ NSDictionary„„NSObject…„i’„„„NSString•„+ _IMAGE_ZOOM_†’„„„NSNumber„„NSValue•„*„„fœ†’„—˜_MASKS_VISIBLE_RECT_†’„—˜{{0, 0}, {234, 135}}†’„—˜_DOCUMENT_SLICES_†’„„„NSMutableArray„„NSArray•–†’„—˜_ORIGINAL_EXIF_†’„“–’„—˜{TIFF}†’„“–’„—˜ResolutionUnit†’„™›„––†’„—˜Software†’„—˜Pixelmator 1.6.7†’„—˜ Compression†’„™›¨–†’„—˜DateTime†’„„„NSMutableString—˜2012-08-01 23:45:44 -0400†’„—˜ XResolution†’„™››œH†’„—˜ Orientation†’§’„—˜ YResolution†’„™››œH††’„—˜{Exif}†’„“–’„—˜PixelYDimension†’„™›¨–€†’„—˜ ColorSpace†’§’„—˜PixelXDimension†’„™›¨–€††’„—˜*kCGImageDestinationLossyCompressionQuality†’„™››œ†’„—˜ PixelHeight†’„™››œ€†’„—˜ PixelWidth†’„™››œ€†’²’§’„—˜{JFIF}†’„“–’„—˜ IsProgressive†’„™›„„c †’„—˜YDensity†’„™››œH†’„—˜XDensity†’„™››œH†’„—˜ DensityUnit†’§†’„—˜{IPTC}†’„“–’„—˜ProgramVersion†’„—˜Pixelmator 1.6.7†’„—˜ImageOrientation†’§’„—˜Keywords†’„ –††’„—˜ ProfileName†’„—˜Generic RGB Profile†’„—˜DPIWidth†’„™››œH†’„—˜{PNG}†’„“–’„—˜XPixelsPerMeter†’„™›¨– †’„—˜YPixelsPerMeter†’„™›¨– ††’„—˜ DPIHeight†’„™››œH†’„—˜ ColorModel†’„—˜RGB†’„—˜HasAlpha†’„™›Æ †’„—˜Depth†’„™›¨–††’„—˜ _PX_VERSION_†’„—˜ 1.6.7†’„—˜_DOCUMENT_WINDOW_RECT_†’„—˜{{630, 174}, {909, 854}}†’„—˜_LAYERS_VISIBLE_RECT_†’„—˜{{0, 0}, {254, 240}}†’„—˜_DOCUMENT_SLICES_INFO_†’„“–’„—˜PXSlicesPreviewEnabledKey†’§’„—˜PXSlicesVisibleKey†’„™›¨–††’„—˜__OLD_METADATA_FOR_SPOTLIGHT__†’„“–’„—˜ colorMode†’§’„—˜ layersNames†’„ –’„—˜vl†’„—˜Untitled Layer 3 copy††’„—˜keywords†’Ò’„—˜ csProfileName†’Ô’„—˜resolutionType†’§’„—˜ resolution†’„™›„„d¡H†’„—˜ canvasSize†’„—˜ {128, 128}††’„—˜ _PRINT_INFO_†’„„„ NSMutableData„„NSData•–z„[378c] streamtypedè„@„„„ NSPrintInfo„„NSObject…’„„„NSMutableDictionary„„ NSDictionary”„i’„„„NSString”„+NSHorizontallyCentered†’„„„NSNumber„„NSValue”„*„——†’„™™ NSRightMargin†’„›œ„„fH†’„™™ NSLeftMargin†’„›œ H†’„™™NSHorizonalPagination†’„›œ—†’„™™NSVerticalPagination†’„›œ—†’„™™NSVerticallyCentered†’š’„™™ NSTopMargin†’„›œ Z†’„™™NSBottomMargin†’„›œ Z††††’„—˜_MASKS_SELECTION_†’„–I„[73c] streamtypedè„@„„„NSMutableIndexSet„„ NSIndexSet„„NSObject…„I††’„—˜_ICC_PROFILE_NAME_†’Ô’„—˜_LAYERGROUPS_EXPANSION_STATES_†’„ –’„“–’„—˜_STATE_†’Å’„—˜_ID_†’„—˜;BF75F66D-72DE-4D7F-BADF-00A982D90954-18644-00005DBC9D1EDC9C††’„“–’ ’Å’ ’„—˜;E33C6912-ED32-4557-8C2E-51D7FCAE5623-21936-0000891642B12696†††’„—˜_DOCUMENT_LAST_SLICE_INFO_†’„”–’„—˜quality†’„™›„„q¦d†’„—˜PXSliceFormatKey†’„—˜PXSliceFormatJPEG††’„—˜_IMAGE_VISIBLE_RECT_†’„—˜{{-127, -86}, {893, 812}}†’„—˜_LAYERS_SELECTION_†’„–8„[56c] streamtypedè„@„„„ NSIndexSet„„NSObject…„I••††† GUIDES_INFO0 COLORSYNC¨¨appl mntrRGB XYZ Ù  acspAPPLapplöÖÓ-appl descodscmxlcprtä8wtptrXYZ0gXYZDbXYZXrTRClchad|,bTRClgTRCldescGeneric RGB ProfileGeneric RGB Profilemluc skSK(xhrHR( caES$ÈptBR&ìukUA*frFU(Vaeobecný RGB profilGeneri ki RGB profilPerfil RGB genèricPerfil RGB Genérico030;L=89 ?@>D09; RGBProfil générique RVBu( RGB ‚r_icÏðProfilo RGB genericoGenerisk RGB-profilÇ|¼ RGB Õ¸\Ó Ç|Obecný RGB profiläèÕäÙÜ RGB ÛÜÜÙAllgemeines RGB-ProfilÁltalános RGB profilfn RGB cÏðe‡NöN‚, RGB 0×0í0Õ0¡0¤0ëProfil RGB generic“µ½¹ºÌ ÀÁ¿Æ¯» RGBPerfil RGB genéricoAlgemeen RGB-profielB#D%L RGB 1H'DGenel RGB ProfiliYleinen RGB-profiiliUniwersalny profil RGB1I89 ?@>D8;L RGBEDA *91JA RGB 'D9'EGeneric RGB ProfileGenerel RGB-beskrivelsetextCopyright 2007 Apple Inc., all rights reserved.XYZ óRÏXYZ tM=îÐXYZ Zu¬s4XYZ (Ÿ¸6curvÍsf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlLAYERSo8ÌÒAÿÿÿÕÿÿÿ¢vld';BF75F66D-72DE-4D7F-BADF-00A982D90954-18644-00005DBC9D1EDC9Cˆ streamtypedè„@„„„ NSTextStorage„„NSMutableAttributedString„„NSAttributedString„„NSObject…’„„„NSMutableString„„NSString–„+vl†„iI’„„„ NSDictionary–„i’„™™NSColor†’„„„NSColor–„c„ff†’„™™NSParagraphStyle†’„„„NSMutableParagraphStyle„„NSParagraphStyle–„CC@S…„[1f]ƒÍÌL=†’„™™NSFont†’„„„NSFont–œ$„[36c]ÿþBrushScriptMT„f´žžžž†††vlÿÿÿNnÝ22 streamtypedè„@„„„NSMutableDictionary„„ NSDictionary„„NSObject…„i’„„„NSString•„+_PARENT_LAYER_ID_†’„—˜;ED230A23-0A93-4360-BEF8-EC974D9E76EB-21936-000088A6EABC5FE5†’„—˜TEXT_TOOL__KEY__TEXT_LAYER__KEY†’„“–’„—˜0TEXT_TOOL__KEY__TEXT_LAYER__ACCEPTS_DYNAMIC_NAME†’„„„NSNumber„„NSValue•„*„„cœ†’„—˜"TEXT_TOOL__KEY__TEXT_LAYER__IS_BOX†’„›Ÿœ†’„—˜!TEXTTOOL_KEY_TL_ORIGINALMOUSEDOWN†’„—˜{7, 116}†††€€Untitled Layer 3 copyd';E33C6912-ED32-4557-8C2E-51D7FCAE5623-21936-0000891642B12696<xíØÍNSAàSZ[~Û”–H"%Š¥l (´.ØÈ}p\„—á‚«01.Ø‘°5!bPƒó)*h\¹àô9É“ùíê93§ÙÍSʲêdµ¼Òim.6Nv—§Ï÷»­ËWk3×Îû8¢Íð‰»^Ü ¢Îð‰{~Ü £ÎðIçþy” 'ß÷ÀÿÔ_mçå_­Î\÷ºÿ˜Ãƒù‡¨ßÕOÙ÷×ÒxmŠ'²ˆö@d{?Ü£8"Û_E_è'y™úBÔ) ”mäû»VåOù\ g¿ÛºŒ|ïIg~^Þˆ¹ÏîòôyžoåÀ½všKñl.6NâŽyG;²þ“£XÒÿk§5võX©}ûÞõå@>‡BÙï¶?MVË+ÛKÍÑè%ùZH¹D?Å‘¾ï¾m=m¾+eYunªz°×m_DHcöÁít¦Og'«/³ô”KÙøB½v˜î‚g1gÁüÓZÈKùEoµýùÙ“úÛöxåyÚûRüù3RÊjÑÊÆúìÄq¬4ï*rˆßòð¤ÿr¾¼Xi}ÜZj¾ß˜Ÿz3_¯½­ŒW®ÏàXàqµR…÷ñº&þàkÎwÚ|ÚŽ ž×=ÐÖs½çšÀcÍÑ}=úü¯9ú ŸOßÿ5G꺿¿š£=¾×h4šôäÉ»jÓÞl¬^¼Ð˜>zˆqOårò¼&Þ˜.× Ê%8ðË>õйÞ}s¨Øh¢ yY_}¾TyÊY fL{Ê%`>ÐN/SÞqÖóÜ)eìÑóei®nMtèÝ¡¥òŒ³XÛƒ½ÌÿìÛû“²Î*òA°ÑDÖlíüá{åg=yw)cÇäᔥ¹ôжSÆ â|›7¬S–YEYæ°ÓDâ3û÷ý¬<ä,§½xìrDt^W4±óY²Z׸RʘÁ|U^Ï׫–Kvšèpg…’–ùɲ‹õÖ;¿¨ñÍÚ/”UV9|Èx¸ÞõbWèÏèܬ¾Ì‡ÐjVñy-;áýˆ£}ûÕããw'yާNÜOyÈzµ»Wʘa7Ñ«‹ØÄ‘»®>Wö«?°ÿõM³Š1ð;Ã_5ZU½\ìÂüùyÓ&¨wø»ÈÁb_elœh|eiËϬŸÚ%ûyQ.™6µ¯•sÜL«Ím»O ‹8¦ñûŒ{µ—” ù³×®Vµš‹Üj윘øúËÊÚf¾=JÊ$ü?±@3GNE˜j8žÝ®IVÐ<—–7]ê87GŒ}–±·‚\~üãVV{°zé9õª¹^|¸™ØÄ â–fí®[õx¤¹Ôã‡æ•.´Ì¡I–Ó¾}lÖß$ëç=»å{S.3ôé¸Þ˜)Žyüôñ¬æ³ÜÊï^vw_SÆØ¶éUƒ;ÑNPÎ r­ÝêÉoJ™ÌÜye)YÛk&ÖÑ?Á.Npý"úZ´»ÔåÆVk—/V5¸WƒòŤ¬Nû®$«KËFR.×|úufbHû†7Š]œ`Ú š=ù-©Ë+ÜÿÀ‹h¯)g…ÝÜL²ˆÙrüQ.1@+‘;‚Mœ`Í+ý÷ r“+•Lÿ§R%½iãšURÖ ÆpnöÝJhþûïH¹v{6ÃïÔïL7î­r±§~²•˜¡ÿ@na «þ•8?)oF϶-”…{ ìÒ^Ê|ž_UÏfÕö-›$–ˆ]\`.‹½ÂP÷6M¤N·0OÆÞ§~ôlËÛ¤38G½ˆ¾åøË3!„]œ 憾ZµLês‹ô¯Ô:Z?â:eµoc/ÚýãRŽ{pîØ¶U=c®8Žóû=ñ úfá¨SÓºR§[†½ØÉð+Îoê0ÃK¼ç`ÜÉxÎJä Pwœ ­cŠ0ÄoHná\£=õ+Æ)Ô“ ñ«µ—VbÞæÛu_ªÿÌõÙœ÷%Jýq߉¹ê0D?›8 õºeñÜ™ª¤?1V³ÊÍéþPSeáM´ÿV¢?Ë=½¨;N¸Ít#îƒ@ná:DÜG—zÌà\ KgNû<¤#Ä­˜; CK>ú@êt kçwmߦJú{´PW2 ʳ·yyÏ´h õÆ Ú}òÒß±ð{c¼Åø’ÅxzÌð²?·“è›RgÜ`.? Ño|¸nE©Ó-ä Y­“q+ÖÚP—³&UÁEܘúây[AúÜ™e—#e…—¹83­Xø‘ÔcñXrw‚jî”qžã—éùsaˆ}Í¨Ï Ä‚ŠöƒºÌ ]ª¥Ï’ë#õÅGݬ¾apqr®Q§‚Þ3‡ñ"õXÁž\Aľoô©+Ž„qÒ6'k(¨Ï Ì+c§¸{ã‹û¯øù^éBÐßÑopòäk‘SŒ\«½œD¼Ÿ~õÄ• ý.ÆÂ~óù8¯üú17h5Ï“Àﵟü»u>q€<¼ bž­GÛ{¤.? ~¾£ªÅ¿ºµn,õØñFßç•¥71~=öà1n¤ú¶þÄoäfï;V~ò‘ªÉŸÍ~Oêp‚~»Wu½ÿ)gØã†ë¶±Fž{ÜR_ÈÁòe.yàÔã„Ó:d×§\ÜéóØýêÛzù/Ô¯$uá µÿ…_õjßRêp‚ük¯r³ŸWàÞ$^E«UÕ+¤|Pü^û½ä³Û«>ÿ†”3Œ‰¼¶ý¬átÛæºÁËšÛ„ÈÁᜦ¼h'¼jh÷NR6•à¯ó%A Û‹ˆ“‹IÙ°`/b¬áu]÷Ø=TIo"7˜²©‚~Ø—K?U9Æäq*Ö£³ú¦îµxÎ )Ä›éÃyyX”u ±·ë3ëéæ·HùTÀºùÄæTúŸ|'Äþ¼kW,Qÿy“ÝÚ!¿pï8®£fb?„TÏ3Ëq+r³(ã•!Ýž´üÎÙ-bx¬aŽÈ«h«—ñÂÀi¿ Ö;`—JX‹éV^ã½äGú‰í…¡Ý;¶ÿ-Áë87!|Fù °~Õií,clS ë2ÜÊKÞkÅýþæ\«ÙgÁÏœ ã=Öû³~„Ï‘Àé÷·kÖh?¨Ã|îçf'®3#ا/{ݺýˆû¹Þ"®ì©A=ìÇÈú3bÎNbÅ|UîÙ›/wWVþ”yÏ/´¸á"Ç54Œ¿ùžØç^ÖA²˜2v0¦enЯ^}¦Ô“Úî¿FŽ ëo‰Y±§#ó¬áf/>§|lúŸ~EÀÕ½õËø])g'r'Z×¼Jìs ösq«AÏ=&eÌ îÂ|™Õ¸Æ†¼ð”Ô•´oPE½ƒ±†Í¯»½ÿÖpUÂ^Œ…R_t‚>×87"¦Éµe¥\f³É«FäæQWvÁPP±÷÷ëæúF™!Þ<¼çÓ®®Uˆ}¬(hWÝŠcedïge<Ú¸yÓ'J-ˆÆôï.Ÿ#»ñë°}LrƒøîŒ/Yâ%¦IŸ‹ÏÂÈû÷«Tù̘¢Þ1g5wêÛÒæòy¢ë´¼î…†è“óþ©‚¸zNjáÌ©96Îs‚µ3©TNì‹ÙòÆKÔ;çŒØoÄiŒ’“Яóoñ£œÜ3µ‰©Öòùs$Ç÷2SG¾¦>mö‰~â€Îmå½r ò—R)Öµ06ལ{ÛeWÀx×Ï^aÃØyThþ{“Óâ¼ÏLvœÌk’ŸAýQ€½;²[SF Œ\?ß Œ‚Ær2‹=ó¸/uGÖº2†Ï1‘“ý›0 •ܪ âla® “ Ù0/Mì¯k«;¤þt'h®qŽå‹I]Q„ùir­Â÷‚ä>dÔÈ÷ñ’Šˆƒú/M5ä÷;ÍÑ9‰ù.òD¹nRg©Yº°üµ¤ô)FRæ6üFäýºkƒ¸vP.] /à7öɺYö§ž(ƒÿÿ“©©|_óõº‚Çfpl3ÿnÖ^ÒútÖ»‘˜Ëô {÷²_¨Ñ¿#_‡5 ”Mð}'À÷œûüšìßÍÚörfÞ('sWŸ§eÌ’Yô…É“dOÔtÜ ßf†ç ¦Bþªç€ÿ5À^Rä;‘7Àã´FùÿþB þþ±ÕÄŽê¥ À¿YP×|ùû'ØjâG•³ nÿ*ø› Ëce«‰ŠåŸMó_›Ákšx¡úøGJ:®ÿs ¨ÇµûüM 6šXQ½Táý'æÍ]²Rñëxœ †BŽå÷<¯‰j|÷[Å3 ¬Î•‘‘÷´“òÖ«Vªð>žõš>ÿcNå791oÕ ¥Ü¹2Ž?ýä|T_p ¯q-øÃÿêX¿Úÿq¡Fé¿^qÆÉ3 ŸçZuîÿC¹_tL®Œ|ùÍS®L‘zsl(»Cø=e5释å¾¹d¡=‹XS®èI#‹žœ¯á±yŽ9U¹™$ß>O2QX"""²hòôY):wï›èHˆˆˆê“9sæHÑ~Ù²yCBƒ!""ªRô©>W,Ò§… ‚§Eå,ˆªéjEÃ1þ§O } C áj4LCT.eœ©)RA‹©^µé «ý«ž±Êj¡†«)LL‘Zhc¤¿üv„ÝpÁKFŠ©ú/Ql̰{K„ý Ú2!¥Âý Sc„¸#½É†#¼!oGø=Ýdo‰TµUñÐã¡ÇC¯®½j›Õ¢nîmÚ„ÃvDDD¿s)5!"":A>;#ú¹¹¹7Î[fœÃ$JDD¿kQÞ´tÙêЙQ%ÑãßÏprÇ)Žm›¯ÍÌÈžm€ý²éošõúSœêON…«ÿ  ëÿbœùÍûwèvñ_™²ÖÕ2hÃŽS«Ý2P“¢oÿ I×;¬…üòõ<ÍÏšý"{7< UÎÝV×UK?¬› ëüµ_·ý÷^/x¨nÖ¾é½;ƒæœ5ò1óE¾ø×t}.ÿGLøäõ[ ¼æé(˸è&㯃'<“0âgÙ£\6mI¢!¢8êÒ#€ññ ¡s‚$õpn³^3·Q$=/}T_¿w'€^#Kò¦eÐÜñÏÝwGD”X…ù]zäté‘£eÍ3(B“hÉö§¤w¸ @ñ œœ59¨Ì±mO6Ìž àèwOê3uš¦Mü¶¥ªssJ—ÛõéÃß> I·0ýÑCêÓM{Vâ{¢?oœ§ÏoÑû.û¿¬6òٲϟõé½ù8½zt÷çsõé3Ü `×ghsÎ}~úôgœ àÇOæè%Û º?4àèi]R]§!1lù *¶.Cѧ¿]5K›è:,xwóʪyKþÍÚ7.«ÚÚg_ö÷Ëç¿=MŸîwUÅ›»þÍ)úÌ£øìª]âœÑOéÓZtИ§|¼ø}þ¹ãþM´k_¹AŸ¾`â þûÒõÆC®{qÍ ×iÓ]ÿ€žŸh,0ôÆW´‰UÏNÐg»y!€•Ï\k,yÉ­¯j+ž«Ï¼tòbËç1–9õu}ú]­?:=)ú£‹1öÞ剎‚èD£çQýWóòv>âÒ°cUÍè4-£Ó4G¶>¡½Ú¸óôƧ7î2@QaÕ‰»I×;L2hÓw6íygÓžÁÃ’-ƒ¶è}—–>|U•`Zö™Õ²Ï,û¾¨JE­rî›A[÷¿÷Œþ÷øßgZüämÝßvÐýv~<'RÉèe_87û¹¶®¹G›Óù¢‡µT^ Õtýã_´Ë¢ß¾—±-ƒv¿d^Kæ(øwÍŒ7.› ÷ÈÇ{_ö8€/߽ݼü†¥Óä\ùdΕOøü­©>k €þWÏïõüþW/ÐJµ`À¨ZúütÉmz ¯yz –A_»À ±Ïœ;ö½zsÑ®{åçO|þü‰ÏøïËUéóÂë^¼ðº¬yñº!׿8DKŸ/LÒ ½ñå¡7¾ `õsP™A‡Ý¼PKŸïÿs¼^òâ[]rë"ÿ~z€O0ü¶ÅÃ'/ðÞ‚ª„:bÊk#¦¾`Ù“×è3/›¶$I2¨fñC#Ñ HOœÑ<7¸'zRûÛJ¶?UüCE÷"½ÃdóO£­Ì:cO4¬_¿y\ŸÎì>£ÆuÆÜiÏîõÕrg›÷íúìÁ]ŸV\ÈÔº¡š#äÎyUÓö¹ØŽÄØÞæ[¸<?Æž¨ cg4™;£õ‹”R1ŽýQ¢˜Ò»¡ú¸®‰Ú^Õº¡ú•--ƒ6î<¿†Ï¦§v»ÃÞµ0­Z± ­'M´îo˜Ç¦„£uCƒž àçÍAÈÃ0¬ÚºænZ7ÔR6í~ɼêÏ>I-ƒµ@a솆4ö™gŒ$£á·-z°K=R‘Gïc%Š ãuPãõÑH çžÔ¾â̘Þ!ªG2Û“?wáRhýšè™ÚeÑOì÷,‰EJùêƒ×%Š ;‰Œ·Eb¿'š‘=õèwO‡sužÖ¸óôß¶ü#hD÷”®·}û÷H7eö¸óPÁ£+ï-2ÞX¤k~ÖÌŸ7Î3çžvö¬°Qµêûç½ ½±¨u¿{v>×8œÛfÀ}akh;pöŸ<`Îmwîÿ…-iÔað?¬›ýýÚª:M>ßÒiÈÃ[×ܶj¼±ÈØ'ê~ñ¼Í+g‡s{ ¯áÞ¢³F>¶qÙŒ¯*ï- {c‘öA}¯x¢ïOlX:-ÿíŠÿj7õ»jþçoMÑï-Ò®†~öÆä Ý×<ýÉë·ê7 óÌǯÝbÎ=ÏpoQîµÏ~¸è¦V}Êeð„çOx~Ý+7¬}¹âÞ¢ &¾}ïuõs· ½ñ!ðÇ›^YõìýRè°›F·~Û«+žWíÞ¢)¯…-9rÚ’eOŒNª‹Œ´þèµ÷½—è@ˆê·ÐNgù¢° ¿s÷¾[6oàè#< Ù乯| vhËÃvo‰°T[&¤TµÏ/JL¢T]tÃ˨ַø½ÓòèøÙ+Q½‘››[›Å™D‰N(Ì£D–}+‹Uü>Q¢”ráÃÑïBUOô‹¥×š”#¢¤²8ÜG·Œ·O,œ3<šç­üŽÉÓDp8—¨ÞBèwê2qÕ%çÕoöžÞED1Áž(Q=&„кžZgT»«ˆQ¢:Þ(Q}Å|I”pL¢Dõ•1ƒäkãºRJóG}Q 1‰ÕKìƒ%&Q¢;£DuI”ˆˆÈ&ÞKtâÐ;£ì%ªL¢D'¦O¢ºÄá\"""›bÖuoû!ý‹¯u§§‹Ö­qZ+¤§#%>_ZIIÚ‘#øå°ÜòŽoþ³zv;tí5 š5­ý‰ˆˆ’A­’hÚ—[¼¸(íä†èØÍš¡Idd - R¢¼Ç㤓–&4𤧷ٹ«ÑS¶šqýÄXEODD”@ö“h£E¯·ø`­£];œvZEmØ.øýPUHIAZ9ýÿ“·é‹¯Kþú`ãÆbÕ""¢„°ycÑ)O>ÝríG޶mѼ9N=éép8PZŠ_Åž=ر?ý„}ûðÛo(+C ‡.ÒÒ‘ÑóÈÑ´ëoÙõÓÿbÛ""¢:f§'zò’·šo؈–-ѨRS!%JJPZŠâb;†¢"CQàpÀí†Û §^/¼^mf™ÇÓ鸯èö™{æ?~úé-cÞ$""¢ºa9‰º·lmöæ;¢eKx<ÚµO¥´Ôï÷§––¢¨EE8råå²b,7=nw™Ûˆ@ªš"å—«[IÉÒnð—›49% #""Š7Ëù/pi×>UÇöïŸërý5==PP€M›°c‡ÿþâC‡Ž>\zð ²o¶o/Ù³çövížhÛEE8~\øýRQÊÎAÛw®\¼ÄëõÅ£aDDDñf­'êYµ&¥è7GF?îU”E}úœsÓMŠ/ 1jÁpP>ß/ÀÓÆõ3Æév¿™’rõêÕÒáPN¯¢¤¹\-ÞY¾)§ONß³ãÓ:""¢8²–Dݯ½)N( JJ ªK†o>vìà¬,ýéO¯)ʰgžI(@*ððâèÑ]n¸aRn® ¼™™™×¤Iß—^RÜnEÊRUí£ÊV¼ŸÝ1+#£aZGDDG†s{÷ùýª¨ªÏëEi)JJúîÞÝÐã)œÛºu—™3ÿsÇÅ€pû€×ÇO8ë–[&åæjkº";»ÍÞ½ÇJK>Ÿ”iB`ã¦Â-[ãÓ:""¢8²’Dó>ò9ŠÏç-/W|>ø|Ùo¼ÑfêÔ­”¶iÓ}Ö¬õ÷Üs8¬ž1£çäÛÆ ¨×Pú¨lÔ¨Ÿ–,éдi Рr ø}Æ\»Ö ø…pP¿”Š”À+ÄIBxKJŠKJbÛ0ýœ 4ߤ¼þR¤9ú‚ak]‘6§° ¿ÆEBÃ3©Ð|NЪM¶Lu†2©Ö$òƒ Ú>æïT4sLšýÛT!›.l&Œ«®q/ OØÆdÇ 0Êíc¾"Ì÷–×XãŽdµÂÐÍ+·º·›Ï1ÆiRCLÎ$Æ’A;F4‡Ièö :fÍ ›¬%Ê=<ì)¤an¾¬²D½ÅÅNE…”T ÅáP%(€´u뎌whùŠn·¾H9°mÀ€òõë]Úç^EJHéüRú ¤ ”{}±þ´hØwÔä¬Z&š9ºÐ9&‹›f²Š GÓºè[ö؈T­ÉF6iHØŒåÃ6Ç<°ۡÆÀ$æ(ûO‘j³—il¼³&ç²h6cè´¥Yj]í×T RsjÓ“ÊÍã¯/g’Ð#ÎÒ>Z§É¾Zã;eéÌö\aÞ “’ak³ÄBUÓÓýE¿AJ¡-©ªRÕ*Pü:ø‚öª @J @á|£G+ë×;€ªB)„OUË¥ô>!JœÎ€TU±½ &§Ñ˜¯(¶F³ŠhöóÀâ¶ITæ'¯èë¯e„Ë£a‹™Ÿ,l[›½w69ÕØÃˆT&lUÑïHqe²ºúx& »"«»z-Šè—µ·ŠømF IT4iâ?\$TÕH@œ€”Òül˜:µïÈ‘™©©¨ë7pʤI_5¿ÿþ4@J©H©HéÓ2( GÅ! âÒ¾êô¿8rHײë$æF³ŠH­³XÌÏÔ&QÅj+Eæ5IAA&0cÙ{g“–1ø ™‘~­±ž8íHѳ}|YUgM«ûmhT{xü wçºÚž¡uËTÕ+¥_J¿¢8Uu?°fâÄö£F nß>t©ö dß|ó÷wÞy P€ªVdP)½€”Rq¹œ)ÎØ5ªõî4dI¬ZÛ©n¶y-cŽrˆ"Ò_ÜV×n¬'š¿â“¿5Ù…Õ¯JF³H¤z,‡OuŸo꒥ΥÞm­Íêl/½˜ \Yè‰z²²|+?R )!¥TÕt)+¯ºªïøñWôë§—,8çœÔÌÌvï¾ë½š6õOžü¹×Ûnþ|·”^)}Bx¿”)À~À•æñ¸=–â¶'Ò¨QØ÷>´°É “±†Â‚üÐ C._-bµ-¡«ˆ¦6ó½<4$“òÆ™´%R…a·R¤ú£©0Ò“÷"ú:-©ý©ÄÞh'L·†É5§èßt“ k¤Ÿ‘ím^Û;’y<æ/… Ï$þúx&1‰ö˜ðeB” ‘¼$¥¯g÷·OéÖµslÛV¡Õß‹RDd.~Gw½>“$<Ô„`né²Õyyyz¢ÎÓZ¤qzé®Ý* ¥”ÀÎY³z]~¹ñ‰ ›FŽÜ•—çpð½÷J®¼Ò·dÉ'Ÿìz7ož6wîųgû/ £À6!ÎmÕò´ÍãÐF"¢ˆâ×;¡ß‹_…6i|#À ”å@«U«Z Q^ùâ—ƒÿ¸|¹ P+?÷rdåÊ—]ö¿¢"­@gG,[v(ʰAJW“S:fu8õÔ&1kS,„:HH$D'Úxi\íz}&Ix¨  Ö’hÇ‹‡–µ>B”¥@ùæÍ‡ÆÓ>ºáâ‹·ø¡~!!@GÖ®Ý9fŒ¶ø»íÛïúúk?P8,å*)Ûµ=³k2 äEÉÚW¡htÏLåÆÉE‡OUÝ@Ùwß}6l˜«Aƒïß¿à«ü|‹¤Š” °wõêõ&mß¾cÇøEˆT`•” 2OíÓ§wǬ0·õ%9ËI´eï^»']Ûè¥E‡…(•Ò®Zå<€_+!¥Ð’¨ö™@ò.T^À¤¤,ðxuï:ðœ~O]ÜšKDD[¯‰úM¾ùÀù¹' ¡ Q€P”eÚ0/P”å•PÕÊ2~ Mˆ)ßq8:eg :¤cV‡˜·Šˆˆ¨ØI¢†Î{hÿEº‡>  (Š+3hIeB-®œÐ~$àâs)—8Ù³®¸|Ä j^QR²<œ«B\:÷þ5=Õ»èõBx¥ô_Py®6®ë<Àa!ÖI¹-5µGvÖe#‡_táù;ü ˆˆˆ’žÍ$ Àáp\yû”5]:½xIÓo N ¥ž85N@¿ ±øÂáhÜ4sHï^C.Ü¿__·Û“6%„ý$ªráàNÙYëò>þô£O…[——g©R   8&Ä`»”ÓR7nÜ?«CNßÞýrú´9£uL¢'""J Ú&Q­Zµ{ÍÕ»ôÛºuÛ¶¶·{ïÑcÇÊ˽RJ‡Cx<žv æ¶>½ýÚfggµ=³ÓYwÏš'""ŠŸ$Q‡£í™mÚžÙæ’‹‡Æ¤B""¢ägóî\"""b%""²‰I”ˆˆÈ&&Q"""›˜D‰ˆˆlb%""²‰I”ˆˆÈ&&Q"""›˜D‰ˆˆlb%""²‰I”ˆˆÈ&&Q"""›˜D‰ˆˆlb%""²‰I”ˆˆÈ&&Q"""›bó¥ÜD¿]zä$:„ø*,ÈOtDõ “(‘5RÊD‡¹¹¹yyy‰Ž‚¨ža%²lËæ ‰!Æ–.[èˆê%^%""²‰I”ˆˆÈ&&Q"""›˜D‰ˆˆlb%J"]zäh?Æ9a§‰(ðî\¢dÑ¥GŽþ1Mãt¤9D”pì‰%… YXÔe%JBL¢DÉŽ”(i1‰ÙÄ$J”삆v‰(y0‰%ó‹ Ì£Dɉwç% c¦ ½ª½Ê‹£DI…I”(‰„Í&¯Qbq8—ˆˆÈ&&Q"""›˜D‰ˆˆlb%""²‰7Y¶tÙêD‡@DII”ÈšÜÜÜD‡@DÉ‚I”Èš¼¼¼D‡@DÉ‚I”È~R“ˆŒxc‘ML¢DDD61‰ÙÄ$JDDd“(‘ML¢DDD61‰ÙÄ$JDDd“(‘ML¢DDD61‰Ù”`Μ9‰ƒˆˆ¨þçw^¢c ""ª—þÓÌÓXÀ©/IEND®B`‚vlfeat/docsrc/images/using-xcode-copy-2.png0000644000175000017500000010115512236612215017534 0ustar dimadima‰PNG  IHDRâ0%ó: ÿiCCPICC Profilex­—y4U]Ç÷]ó5d.™2ÏCæ9cÆRdÃu!¤™•™’¡%¢d(Sæ©D„L‘2FfïQÏZÏzÿxÖûÏ»×:wö>¿ýÛëœï>÷»~P’Ùp€'ÞÏÇD[ gqé2Žh`  X oçàKP52Ò‡Bþ¥mØÉ­a¡“\ÿôoÓ>ІÀ¡Z—?¬rÂöØì„¯ùü ×vpµs„8bA3uˆK!¦pùÃu'lÿ‡ßp€ƒËÉÚQÐÔxG7<Dß!Vrtòu€nŸìëèèëà q2Äžž^P~Šfˆù>ÐZŠEˆ¹NÞ ÔCí2”W¢Ê“ôÏ\”«&ï渡:híCîæ6M~¿+]¿¯³„øït025P“ÇÇ›«~Þ¬œrœfœîý>#>37›6§9·=ÿpÁì+òëóEû%ª¥æo„eÜòÀ÷›?ÄÌ­d®ê¯ÁÖj×ñ¼_6s^Ú¢ßÙÎøuy‡ugf·t°/{?è>L?²;9>þ[KÔ(ÑÌÉ9ÒFrIŠ ,U: 5mä©}z<Ós;ëY¶Ç8ŽXÎ=.gî^y¾B~Œ€§`¿°¸HŠèЏ–D¾ä¶´ŽLŽìÒYiù0…v%e•DÕub uÍëZOµçutuôõK † xMM5ÿz‘ÄBèÒùËxËD«'Wº­mQvöòñNÑÎy.5®ÝnSW7=ˆ<ñü^ò]o g__¿þ±©×r‹ƒ*‚Ÿ]¯ ©m {sãmxËÍ–[-o"›n7D½Œ®Ž©¼Sû0./>#!91&éFr@ŠÇ]‡{—R ÓÔÓe3„29³è²‰³sÖrgî¿Ïkϯ+(S_RìùЪDÿ‘|)S9¦|»bîñГ¦¿Wf?zæ[eó\¯Z¦†óù‹ÝÚÙº¾—u¯ ëã_û7X7j7‰4Ó7½YxÛÛò¼5«-¬Ý¡Cû@'Eçz×pwuOZ¯_Ÿi¿øvàû໡¢á0H}ÑÌÈôÇ£qc6Ÿ$ÆÑã£eŸƒ&u¦è§æ§«¾„ÍèÌÒÎNÎ=š',È,}m]ŒYÒÿ†ý6¸|÷»Éª}+±«š«Gk5ëW7Ø66à ÿü´±Í¿ÝÿË{‡z§rWwwn/x»_x yÐrh|8utõhë8ø·þ¸ BiŽrE‡¥cʈHFH—Éá´”¼X*cj{ÚèSYtô¯ºǘ¾2o³ÂÙHØépìÜœ§…¹D¹ÅxÄx…ùøÏðð³ Ðb÷„–…ÇE:D«ÄrÅoKxHšHIKÓKïÈŒÊÖÉ¥õ‘7TàWD)N*Õ)§¨¸©ª©1©m¨wijk™h󟃟û¤óL7VÏA_Þ€Öà‡aûù£ cS!S´é´ÙKóÔ ø‹ç,8-.\~jkåtEÑšÞzݦ˶È.Äþ‚ƒ°#‘ã”S­s¢‹³«¢­ÛòÕ·î™xO <#~Å«•éíé£âKë»èWïŸ`{M<8Tt]7„9ä{èë°„WÂ…ÃnößÊ DªÞ¦¾=Ucq‡ÿÎaì`\q|`‚~"GâvROraJÐ]£{|© u,­*=>Ã9S5‹%k'ûCγܤûžyzùü$ßô>)J*öyx¡äì#öRTérÙpy}EñãÄ'A9Ušé™ Ùròxò- ŠnJ9Ê2,36‰ IBµMíM½BãI³JëC»}*”M—LÏB_Á ÏÐËhÇø‹)‘™¹…ÅŽ°²i²-³ßÅÉã¾r¤qjpnŸ.ç²åfàæIæ=χå>“Åo' (°+øN([/¢!Ê*º+öQ¼V"[ò†”‹´±Œ¢¬ ÛYjyŒPØWÜUÚQÞS9RC©Sh0jòhIkŸ;g¥ãý«=Ôkðå<ò@Ó|³óý‹B¶—Ò/÷Y_Ñ´Ž´i·#¶?ïá8ã,ìêÚw•ÓýšG?ä~Q„y-ßrl@àµÙ £àæ‰ÐÒìáY·è#Òo3FåÇðÝ©ŽSÿ螌LypO5u>=!S.k)'÷¾Y>¶` 0­ØºDàÑaÙûŠÊ'I•¾Ï®<׫Qª•z)^/Ñp¶IëÍÅ|[\GeçXIŸú@äPß®‘ckW'7¿$ÌÉ.l/u}¾ú|£së×®øÁ­ßú#1 8 Ô €8P :ÀŒ& »‹4Ÿ‡¾x=ø-ø+øBშFì •ÑÈaE@µ Ðt7Q Ñ2Æ󒘛8•MBò“”@ºFæK¶KA¥x@)MÙ‡u£ÂPUPSïÑ”Ð^8E|ª‰.^’~ƒ¡š1I™Ãüž¥ˆÕM›•} 7Àñ˜3þ´'—1·,/ï.ß·3üƒ‚-BMÂM‹¶‰õˆHÌH®K#ddEåtϺÈG+”+ö+í¨œV5Q‹P¯ÕXÑ:£í|®D盞¨~°AûùSF.Æ ¦´f^æ½nI—~ZZYµY‹ÙäÛQÚ‡;ütrsžrµpt×÷èÄk{µ{kùtøéú÷]3  ¶½¾ê¶}‹&¢à¶HTcŒáÉ8B<1-™/åõ=ãÔ…ôë™Ø¬’…ÜÁ<—üÃw‹x‹_—=š+ ¨À<ÎúëLeÝ3­ª¡j«š¹Z÷ºÕWÞõë øÆÅf›7Ã-­ÏÚ™;n¾›éRéÎîYíSíOb¶|Ÿù¡ï#|TlìʧˆñGŸg'¦©¾pΈÍ*ÌiÎë-|5\Ô[Òþ¦²,û]èn…z¶º¾öy½sãùæýŸ‘[îÛF¿¤vXw‘»‹{=û•ɇ^G†Ç<'úÿ©—~×$ê^^>8}ußÃÿß§‡?TGýn'%™ÞÜê©¡‹:u^Àº| 3¨ ÍÿÔj'ñhÈÏr­O¨™§à¤û¯æçÕq¨{‚|Ü\\ýpªP¥ê$ˆÓÁ; âÄEEeÁš2 ¡ÕªKt pHYs  šœ IDATxì] @TÕÖÞ30 *¨ ¨Á 5 •f jù¨¨›ð÷ðQ©iÊýÃÊGÝJ¯×_¨ÔŠì¦fBÍÌW’I )ä HAå5ÀÌ0g˜ÿ;gÏ3 ˆ:[<³Ï>kï½ö:ßYûqÖ^G¤×ë‰-Ø$о%`×¾Ù³qg“+q‹Å`SÃ--cs%`L-"Òbbs«·ÑÛ$`„© …§Â8_‡ÅDþª-b“ÀÍHÀL…€ããæZ+Ÿ.dÂb¢À·I Y¨S!¼h\xD¹Oi}¼ÍâÀFl“@“¨ƒ)3!MâÂSm’…VÆ'6Y·À&+%`€©&qœò)æZ M7[É„Ì&Æ%À”ó§ˆÐ€tF£R©ªªª´Z-M(qJ½d<³ýÚ$Ð:ÕÖÖ¢$säQ€Ò£Z­.++¥T*•ÉdbqÝP¡u¸°•b“@£¨§My°‘j^ø‘ÉàÚ‘#Gi©w”n‘4š€)¤†`zéÒ¥‘#Gâö€ !¾;5‚æ1âèÑ£]ºt±ØÆ»JJ·BÖÂÔ¢ô‘ˆ÷“xoŽUý†î’t¢h¨±w›”ZEóçχeܼyó UkaÚ¦D:÷ÀômjVVÖ–-[°)´¡;‡ô~ýúEGG<¸\*þãû#ÕŠ)#z"^vñØ–O¿¼H†,^ñ\Okyo¼øf_}ûí·ßxã óllob|¥gré¥dBÖð)óÇî]Õ!“Gô´lhÖpÆ[~¥u¥qòäÉ”””ñãÇ83a@…]ì­p«a&b.Œµk×b7sp„¿®VGô¤ª€©¾ZKêÛŸÀHd@³yvaÊß©Ógk”ßß+ï~ðÇ×þýj_—J5ôÅ-Û½{÷©S§vîÜ)d²É¸)©OÍí:ú+cÎQ3–-Zúâ˜Þ.Æáoeê¬hõüû»·Âý–{“ñÖ”Ç -ð÷ß§Œ!Ï<ó âÖ6»!=",ܨ½²²N®®¯(Z1£¬­Tª©™fZ|™Åì”Kz¬u5P/fɘ²¿È /y:ØAÏt ©,Å™ssº†Ž;\ðÌ€ÖA4Œ°aÇ ¶CBB`eRkó¤Äè«YþMæ‚áîÅEçv. ›<$ù›Ó©£»™ßà ¢K𔕠?·ô´•¥Áñ:vìX£Bæ­ý|n@C²3¨CY©,øýÆ¥ßK N]/¹¢¬†Ç.À[Ÿ@V?ïÕÿ›5êÿÒ¯ÒÄŒÍ11›3`S@jáÒ¢,éÅÐïÈŸaž®Ï%þ^ÃTݼƬ£’(½:o]Ì(.Åcáæ£j¦r÷¢Ðyu”Ϩ…Û٧ᦠ›FxÂq“ò’M7!fOuºrB\:ÉkíºtüÒ¼@Nÿkw&®\>º™¶daR:Í(qÀgÏ2.uVüî«èL˜²í1“7gq-«ÌZ8jaÍ;HóŽš5kòäVj8åÁäØÊÒàJïß¿?/ÆY³fM™2…žš?¸B[Gùæt°©sqv¹bë<÷¥0Xà£bJáp[?»ûˆ1áoÿôäöiRæ|¢#­©=‚Q´§lòЉ;ÿùfÆî`wIÁþ·&/òÈ(.õ<»­çȸ!ùëû»û£?ºôÑæ·„Þnœ9uóC¯îøYÔÃ;Ó_¾ßÛ±~5æ [“£Û3gÎPJ¸ÏnV‘ˆY—xÕZ-µïµzÔÆÏÒoL¼4yѶÌ+ÝþšÛsì÷]˜áW+‘“÷£wn9˜ùšìlô°¨¸G×Oò*É>ŠÉ[²®æâ™‹Z©`_Èã‹ÞLÎ|a„üàžš¶£„ív¬i[óiZY„`Ä^žÂcæÌ™'NSØ}´mÛ6kaÊc˼90I6Oda*7 ³ yÑÓrMvVÔ½L&bEWQì„‘+tªpÈ=“_&K§½tzÇNòÏ·ûˆ/þ —k¨¤ÆÎYîFܤ®Žb‘ú=2ró?ßÐW$äLEå¿´Î]÷Îÿñã—Ëþ†½«VSSë,ïEˆ‡¼³½¾VyþÇ7ßþŽtqbY­¾Þíá%ó&ú³ñæ0ÇÙähž”žWôFjk=ñ•_:ñ ªØ“øÖ}ùBzߨÒúˆUyäõ7Nè'ÖêG¼KÞøû†Vë†ç£6;ÃNa!¤ó'R ùçCݪªô!ã#ÉÿªpÕÂíi¤ V_BÁ­) BàNÏ € Ê8"ªµ0m„y‹+ß8È…:8|^p¹GViŠegÇ¥‹×Ï”î.Y÷ÞâW_Ÿ/Ÿ‘¯ŸH¾øöÇó‡7<õù¯µv„ìÝ€R`o£^‡=|NŒŸ9ùÉ¢š:ýy™—˜)?ýyФ¯&îŠPxmûOdÐ2LpÀhj´ð)5äùEþÆ¡8#víf‘mžVX¨Žƒ©^Ç]~dä»oÊÈo„D=2õq†™:åy)ð‡³HU¥bõn%‹I= Ê%4;£.ád$uF—¥«©Ö`EM%†¾¬š[¤MoFD™zúé§1è_¸p!JNNN†Å«Ío¿ý§Ö´!=t‹Uâý!‚IKNõør`ŸîЉ!WIa'"/ïVr`Wq@?þ>QrѨ¹+æM‰ù‘<~`½;º4î ;6ÅŠí%9Ïkö÷N˜KfýTºbÒоRmeÈþ>}˜y3¾WwòKtÌ,™£SLæ*+ÆH:õòwÃè ˜×± &𢋤W/H¡ªèâ5Òµœb3Eÿ&]{y9› çðáÃTˆ(äƒ>0ÙxQ Ð LŽH· %F'{¥7Ôj·êŠü=«'ÿ‡LØ÷¨Ÿ·2œèœ¢Wž¾¿a*+4ZF¤ÃØôÛ~~86̵êìžDòÀç^¬`ôäØé¼)=œ¿|%ò ™ Ò1®=„¼ô¯Ý}§v¿þö¬82r'8vZç´•¥Á1…1/ï¾úŠgôf§P(7À1MëÓ_±mc ²ôÌ®ûá€3drÞË[ŽpÃS8váË?.~lPPøÕÑo=˵Ý9º}uáÇÏLþ÷™9^&%jv}kBkKƒåòСC–ä§aÒwH Âh€10Ll‡g»ióðÛo¿™§ñÅØç‰*.¡ÓG݈¤Ê688üù¯ª ŸöÚûô߯¸†½oÿ†ô÷&¤Ô+AäÐÉ]n¯­*©`‚.î.vˆkˆÈÑÝݹº´DÍöz"©¼“£·8:ËÔ¥¥5öNnNvÕâ$³×ë4*©©Ò8¸v×j1‰«Vr]e½jˆ£«› )»Q-íèêáBªn°5Ú¹z¸‘ª² 5«¼…ûátõÀãÆÃnDL…W±žzß}÷ Sø¸e)‰ÝÐ2#Q-SSU©¬áê”Èä®ú* #vt©K•"w•KìíDZU9,޵eåÕ¨[âÜÉI¤Ñ`š!ÒÛ;Øc·8$SSëе‹ÜŽ0'gF˜’þ9«hÝßV–Ǽᦦ¦âÍ3^ý¼óÎ;p#òÒK/á%‘i¿ÖPK(Î,^²MÒá”zƒ_“)Ñ{;¿tþøÜ%C'Ý“sªK•¿Y Ìkì¶}˜²"ã St ã-C¨,½^Ï{"ÏÐ\_[Q¤Æ9aÏàMc5½¾¦¤˜7À>S—'ˆ’’k׌•˜þb;5^›áˆÇØôšaømžÌ¦˜µ‘M+櫯Ÿ‰Q– ڦ¯ª¤ãˆÒR >ÙvÙ‹ôE´¹È_~ƒk±‘…è.¯ùµ¡´áÿ·ü-]kmUi°L£·@ ì£˜TaùÎé­…©¡áf?˜'Žt¶Ä_ÄüÉ¢›ç|iÆ·É]ž¨´Äi`¨ïÙœœ¿7•÷ž ]ÎçmfÄ4£ñ¼å%6ÎXLÍg¸ØGn"a9¥$$°7¶ExѼ]õ©D¾oåü¹´¬ªÃ¥«§¨ª¤RSOå ˺ùø-•Æk¯½)6¬íô‡ f±U¸=pêÓ0£·HgLÌ:û{úßòõ'¡ü¥!C{ŒÔç^ãÅù E/x2Bjs¥t3‚@G‚±:¬OaD{›Ã-’ÆÍÂäqrssql g½Í‚ºÝÕáá:{÷žåçî‘Ò-’†µ0½ÿþûºÿ¸¸C86DpǧxJÂ(mþÝ#¥[!VÀØÂ—îx,ÞdmR °¹Ò°¦wg‡.”¬-Þ†à—íÚ[Õ6 4!L›ír{€­ÓowÁÆC°iÓ&d»Ü$`ƒi{¸ 6š€­ÓoB@¶ËíAÖÂtïÞ½í]w§¬…)Þ釅…Ý2²µº¹øî»ï°ù_O€>^¿á;8"ÀØæÔöÖs0+AÀ+LÐãm3ÖæaJŠ€êà•lÚ´i|½¶±)/ [¤ýJÀZmŠ˜Ò6©K‹K"Kånòf”Õ:aJ‹K‰ÜÓ­y»ð™Œ¯wT 2ªWó²µËwG)ìžu«pe‘^ˆ·f@ËÔ¸ò¯÷ç yãKžÇŽo¿×¢Ïž¤5#Wþ3½Ïkìv.²õDñŒAõ+Vÿþ¬Ûžµ1ïÛûœv¨Û˜‹U#]*÷Á‹ÊυúÙz’Ö¼²°„?}÷Ýw©/£·ÞzëŸÿü'ŸÎG€+!½07¦tÐ`Ìyeç·¾zèâ’!]¤êÊë9™¹öõIŒ¤·â·òt 0º·¨¢Ó¦áÿHÍžzÏzµhÙ=¥oìúc~¨»š!b©‹Ö^½õÐo^,‡Zñ@¢ñÛŽëå³´Š0ⴾ܋ôB05C£wG•üñÝÛ„lÿjéW;¤Û9¸¸/È£¶¦âô—3žÛðõG/»º>òKIMõß¿Ä=‚Í|zè"[BÅ/‡¾ü[ =ýé#Ï}ÊF+N/~äå¯S> åHã¾üýPiÉé=Gž£ôlcpèø!û¾Œ;5Ð˘Ìÿ2p(âÞ½‹èNvà,?iéÇyl¹ZlUÕ1,eÅ߇^æj}ùÓB.kÉéC38ƸDÛ¡¹€T#0ýù矅WQ¸Eza¥-Ô¦3~"d¥ÂCˆx¶jµª|ÏŽeyÝ?:ñçÒ.޹ïø=|rùŽó;BKÓ·}tˆë‰KuQŸ?s^Åé2µ²ìȬ‡[eÞ‘O7éíûýOYöGÍ ¨È½/wË›;ÆŸ¸t KÕ ©žV§oK:BÈ‘Ù1+wÿþN¹ÙÙ²}=øÑ¦–Á `×—[dòš·1?ÔM§üõhæƒð0b¯Å“ÎùpÈô¨ã§¿\yÈí«è€Û‡l™âwlËìl»t ¬êF¹iBÑÚâJÀ"ìøgÏž±í‘¦Cé…ØjLᎆ¯©¦ª–0:csãÏoR.˜9±s ¶Ô½’ôʃØPv1m= øæÉ¡bÎsÈÔ·V|sìì˜ 5µ¤¶ÅDSË>slTWSÊÄûc—üˆÇ^ o]¼Q1ºë@BæÏyY¼4vÖ˜FÐ\H^¹¸Ï£ßü{ä”ìü ÍksFM˜ôüDcsjP ©­b´UÚª-[ޝW7 ºššª‹¿%2üÇW¦;žßKö ¸®Ñôì:p&™?óe—wcgM®_'ßt[¤i f‘://:õÐ#²Òó[•Îç5ÞW>¡á–Áø‹½B o|yºbîHà6Š3½ùå·³&{JìI`g9Gª#@–»LJóIìÝ 6%Û¤ˆ”‰‘&!˜:²QyJ6MÛ‰%.Q2%oûÏÓB^ÞòëëùðµkË‹߈ ðÿm¼â±1öñ"2[ÑC&á[£W1󩨣‚Õ  W¯»OQ¾ˆ°›³'FNéJ´“'¿áÕŒD½›1hÒ¶ÿ¼5!dÑ–_óâqÏ×m‹X!ºñ½B??¿1cÆÐ!)Än‘é| üåSŒ³uQLˆ!qÓÿgýϽØEJĸåîb±D¬·'Ù„Ev‘÷»ÿ)òÒÇ?ß85°ò\êëÇȦûIDgE$;÷JU[Öü o“‘ï²Ä:q'r,íXžâá~•ÙÇÿMȽ;W]Ë­ìì˜kŒdϸÊ$™=ÈVÀÕÐïíôOgãË’¼òéÑýàæžÿgàÌ1ýç‘GÞ\ýÌžïíYbUY_Îõžsš¥Ü–ñpOÙ™mëF¾¸+|zòÇC Erçæ¬ÿ(;r²¢w6ê‘Q%?,Úr&ꃠÎ\,î 6»ÖåÒ‰]ÚÔɃ0,`{¿ž™¼T1Ùû 6רÕSbüy{ä‹?p…L_½æ>Ï:õÌ¥ÙVJ q˜£Ârp',Ò×Ý;ø±Òë üÄXÜ]YV¬Òxéèìbì^…,°q¦²R%!©à‰PWVaŠú‰KWÝØ3ˆ©K]IŒ^¡¥..‚¬u¥«ËŠ•Z"wódKÆÔ²Ñ'¸.›iŒe]²2òÇÕ)dÂ4ƒí¼I ìÙ³Þ €3¼,…³-¬›ˆ«W¯Æº©ùËR”ú_–b¯ò¤I“øŠ,€¿Z/‚*ës'Ž]{˜'ÖOA>ÌŒêÓ¢à ÿì=ê“ZÈZWª†Ê4K¼¯5þkZ‡éyã¹mW-I@¨-ZDI–/_n‰–õ`*¤çiÎÇ›S‹ã\¾ ›Š8øµâ¨XÎyœº©‚l™Û… 2­çƒÚ£àˆÑ*=Òý¡B¼5¦ÖWÜJ©ÃV[¸{%€É“pþd"ˆfÀÖV&™m§6 4$¬á7tÉb:t'` …ŠU*ªM…xkLah±[¢MæÀÈÇǘÁïœ0S‡cÄa{ŠA'Ž€&@‰ï/üõ×_æ%<úè£|b3`ÊçiAä÷?2wýÝßÞ^Ì>,Z5£UiUUµŒz€»jÔg|>°¡Ï(¶ .[–ö xeÄÄ@—Ëåðܤ£4à*PËëN®ÏÇb7ë לÿf uÍ3[Ÿ‚o˺È]eNÎÎrWgø¾…ujgw™s§ U݇Šóâ“jÖ—f£¼Û$p›´)ö`»V‹Q¾Âå€Çˆu”+©+ª:uê„óR«™&ujÉ™´ßT…tÇ}ª¸”±s×·—HàÜ—¦wg_|¶j`ŠÒ¾û#`âCÝëVEZµü»©0|û÷ö%иõ4@Ñ&%%ñb ÚÔ¢*M+hSÔÝPà™@ÄÁíh 'ptr”±¶ÌxWäææ†7Øþ‚NA˜Å<~õøË¯œ(æÒ‹¶L|ê;xŸ¯3,J[?Ô\}yù+Ŭ½KuÒ A›2ah ·V|¿o^ÍÍjSLÍðO‹ð‚šœ:u*_¥Dl¯åt,uu­Nã@Ý?÷3¥éßÉÞÍíZŸ>NÔ†ö£__ÑU] ýÿ7vºÂJm§ËôØ»NNïo]{ñP2”cÌé¡”ot¦o(øv™GrwÏ{,%üäæHëj2/àLÁ+%¸Ø†Ñ†¤x#…ðã?ZßΛզPà ¹>5ùª„‘=–EX}n[ì7t‡›O÷nÝ\Üäý…rQ^~¾€õ’¤yS“2KhÊ™í¯¿¾ýŒñjÕî7K%gg† z};>4ÛßĆ©»)½îÊæ×§r)ƒÞÜž¡#š}ožÄO ™úæ÷°5´tE߯›G³Ì««„š?v|’^ÄyÚ×]Ùþ&WìÔ5™%¬¦Íý~Í›Iiû6qçmέ"šKß?¶<•üº<Ìœµ\•…Úïô$è&´’FhÜúFß,LQ°ô`R%¾„nòåYLóé“TKÄzGÉ‚Mů>âQÁÈ$N®R'W™«[§.¾õ q¾¿óê±V‡ºÜÏâ¿ Â8?8SÒÓžCË&ùùð©øÎ{Ný™¾ë©å3׿²ø±2}uúŸÛöúŽø­iÇÌ=y~Ó·[_oI1ꎼ¾ä#ŸÏ~:v2ýÐòñ|ElÝEÇ¿+aw傿Áxé˧þüs×S3ÿw/ÓVìXýrªË¬C‡vÍI}ÿÇ Ž=ÇòªzéÛC['ú[ªª~#ï’³~øaß¾}øÌO?ý=Š—øÍjøÍvú´2XÙL¨0 IDAT¥àÓ¼iFžæŸžÁí«*öË;šâÚ÷çº}{´ú×¼š·ŸðŠßU"±³×{|6Ç„õÕãw/WgGÍ¥´ÕïþH<8#=Õ®á clj~N¦½ÿTpwWгß0cŽúAWrÿ¡ ë2ÕRIê–¤¦’ÌÙ´z6>L éÝŸT²âÄgtzþî,kõ ¸›Ïyä|¡ ¨lg ‹O‰¨µ^ ­S C ÅüA+Æ$&0ãäíjçßÅ^1@Z¦Ößïç°ú ¿K©]—ÏÒ. º}+œlß›–wä£iÿþ‰EIÀäÉ‘@Ñ‘ð NBTN|Ræ#%Ug·›ÿÒûŸ=Ü¿sò›‰!0”¦ÁÑ}à“±>Æ 2’Î^„¡fi}£‘´Þ/šððq“ïwW1NYØ`Fýý=Ý9*†pQ`×ZU­S°˜^¸pK¸XTºçž{,0©×ïû‹ýl܃²ÔóÚ=¿hH­¾B£ ’&ý\]ëHœœå¦0%Ž£ŸyeùS/§’Gw½ÛÝB™l’ãqsHìõòˆàÞŽºª @'ÿÌôðS g²CW6HåèÈ+Õ,:C×öh C/¶ŒoŸÛß™)*çªð:âöͯ…ËŸ| ·=©ªhpÜ)óò%gÙ†Úº|^„èôͤø«MFZ ¦Xiœ šG(NóбÜpú‚nÙdê×'µ©©§µ#ü¢F8½ó²GW «îAasÈû½2“NÐ%ø´lÖ2TâõÀ‚Ï^_ýTxw¾=}ý=æßObÃ}ÔÿÑ9öÿuæË»Ó7?öØ+áO=¾!ü­ôõ‘f²`Áž×Mœ:â#rÿëÛ7O«™CgZ'h~ŠûçƒáAñlE÷Ç¥ož.ðÃG½‡L'Ï…z?nWútv{×Ý>ýôSÜkó·PÖË¥fÑ^^&ÈB-ÿýw¯^Ô¨¾ÞÕÔ´ƒe}ÿ‘S^ûÅ Ùs_kÜEµØÖŠÔú-³\žû¢¢» ézéóð°±õrZ}¢ÓTaUêìÌ­zaƒsâììHðÒ˜‘:;²Éì.0±#µ\®´b±e "fKn,hª4ÄY`1Ùíx HðööÆôh(Üèòòr¼ÙÇ)Ʀx}ŠTVÜ‘ˆ/ê‚4¼â!Ë¡©VÓ¦TÔ1J/×ÎñËßh;Ù‰ííÁ .usÒ¿¸½ÚN'Xìi‹ƒ½c}ä°ç\aö~¼Îq`Ñuuù•£ê’=†~`h-S˜’tlÈQGÐLÆÎíUC§ŽòµðS”‘´¿æ‰™¡ 5Rwéþ©BßÓÅ)?WEÂk¯»7£¦X½ví` PBqbÖ¡*ä‚®¿cÃô»Ïç]-Ñ{ºÛ{º‰‡ –:ÉÄ?gJï×ҥýôŽ}7¼§­ªudjìÅåµÚ2{™À8KýwDô´_¢ô½ÔDzáÿQêG¹¨öO›¥9^Ò8LÕ—÷GÏ‚k´†`ÚH!j”¯þ¥dT/fH^þKI\¨Û¥ýÓ4Çõw7L) Ñ‹/ÂØ£¨¨¨¬¬ «§X–²Oß¾}a®ÔµkWŒ(š Û£6…ÿS™³Ca‘¾às¹jxÔ”1kÞv©dD #Õit•e׋ ~©sÄx{φîƒ^£"vKƲqé í'³éËW©^³šòX&a—ý¶<‘x…‘¢.;ÆÎäv™–Étå¼ HÃÆòwçtëX:ýý÷ß1¯X;wîLßH¡ë/((8xð v“Ž?žúäiR^¾7™ç6àý”–Ñ3:½²âF‰Ò¹¸ð¯’Â߯ýµeÍ[¯üߦ«6›»²¤èzMÞ%÷&ËŒ#õåÏ^M¸ÌÁØÑƒ”]üna;”\¶³˜!x§¹>æQf$E&”šÀ&0ù 1l¶ ð'¢ÓÆÅéëEá+óéӡΊ ŠÜ[hxTàøXÂÚÔˬ‰‹gMÎVC•+3PåÝ #Ñ×gdd@_ÂMdÏž=ÝÝݱ…¸„%?<›¯°:ÍÉɈ›O{„i•J¯R³Cl„ëWs®üù^éß)å…?ÕT]ÚÿKÅÇ].•vsuë€zuÁûbJhr¬þåàxõŽàèJVMK¹%¯({OŪi¯ì¾0àðäù«²XD©¿õ˜8ÂÍ$7wšç{î¹<•vÿÆgøÏ„¥Å}u’Euþw3ÇyóÝSp ©ˆû¦qôÉŒ›uiä–¢¢ì5q!¯ì¾qJ,æ S±Ñ Vèëqľ7ÇŽ,QAׯ–Ä_/­=ÂÀ«PÖ^¾¢--×UWUŽÊJ¦àª&ç\•‹“³³³ÔÑNÑW×ÕÓÁ ~*› š\üó¨`_Ï€ ËÌ‹×åÁQKIòæc¥DylV²âÍéè¶ÍCþ·«ÈšUs|¥bÏ€‡f(8Cyðò¥dɪ„”~6-qÁž(‹ø&šÅšã+¢‚==¢/ I…JóâïôÌ“°’ˆåRÜ/@ ¨+]Û^¡P¡e1@hR¼2h’òö8ÉDR'1züªªÚR¥.û\¥Lj/w{ù9Í~ÌÃÓ£ºov‰•=J''øÒhèýÔ–ˆÀõÛÃÂ÷¹+‡»õe³ÂU5†¸N¦òýÜ¤ïÆ„mÙqdnöxo˜°šåäÌ´¥«pÖdû® À(Ʀ0> Rѳû ]ÕXj‡ ‚MxïßäÆ÷ö¨MémÛ‹:¹Ú;HD÷ø;÷î%ë⎵aÑð !FK+˜’ò&zTŒMwïÞÇöÓʬo>$ኞˆLš–1?yËÂ0‰<𰤵iÝÎŒB"öFæoø¶˜a.¤&Æf²cS±ÿÄMai±³âÂÖŘb˜£ÀØÔÑ5ó“Ý9¥`¬ôà’ý-+]ùùCWFa •‰©=&õ€&n!´)Ž@**vy`O²Ðñ~C²h0­bºij F}®ð&i_oø OXùêƒéåûŽÖ\©Úëþ÷…mã7¢ð\½qr³;¦B®ŠsK“ã'@â9â…¹„„­›ÀÍÍ¡miÏÏ\ýäüçðUBäëv„%Îò’Hú¾u‚ŽM¹ŠÜ¦.Çf…ÅQXA`øwzr†»D$rŸ•Ÿ½j‚ânúÁ ú’.9—XŸ¢o¡G:`ŠI]CmR0 („&óÝJ‚ aQ9§ÿ—åéŽ`¢«ÕWVéJË™‚k5U©OïaþÇ„FîÒ­¿)Òàd}—ÈGä1û´1p$­V–j%nrªA"J¨[$p<_ŸÉåcK0ÑwI2M;Y‘̽cª#°Ån»x•D'R-kÀ‚ºqãÆÇŒÏZFDDÀ`Ö\tʲZî]½ŽÙ‹1Q¬Õ©µz¸F3pà¢gßk0€j–؉êf‘…Ç>Y’¼à¼ê±2'3¯kSÆÐæõÚRZW<(é · ¡U´å‚TVVÖÚµkaÈÉ õÚZ•ÔjÊuZ%ÑUè4µê ‘]¥½¨L§RêkUzFEj5µ5Z™_]T%7`¡z½.žäÁƒÝØgP¾u„…¾pk>kcJr¶ÆÌIÈâjTn›žÅÚÙål[³~gB ¬ ×ÃN¥0}[$Í&š“ëFiQÐÂô»ÒÌ™W³%¤ˆlÂ)T Zw›ÍBkd€å>¦†cs3_^¶Vuª%¢‘} i‰^[«Ç6)0gbÿììµ¢ZÐÔ=þ.ŽK õ‘ĬO¡fõ…{—†F?W¡UåEžŠö›Ÿ‚ Õç2Ë 6Q×3ÓÊ9½­Uæ&Ο–ÿàñ¢ƒÑn…)>¡³ºn9Ï2Ekúɘ½‹übVâC,™ sCŸßΡç×iP£-À¥I‰m SÊÍÕ«W7nܘMOõ„:hñq3hM½N]«UÕêTºu­¦ý|-S£cÔøÄ„¾£Utý;6¯ÔEjÅÉkçG«¥Ìoß|¨X³*ÜW.–úÎ]·Ž$î8_bu®Ï4déw¢†yºÉ/ûž¹‹Ÿæ&•zz{ËIþrêû¸eË6ïN&É—›vzD[r×SÚUò+S Ån³dÓ6cS»uëöøã÷6~lRµ©¹®¯u‚e´=†¥N&á Ma(Êö#z§ íí4:ŒêØæ/Ö—Œ™ãúyú«CYÛfƒM4lî`sjТFË 5Œâô³¢Þ(Yh­E1‘Sž óªÖF=»º›mbVOä Ÿðèvú “7x¥µ) ºðiÊ… ò§°ÝS×huÚêÚZSƒoóTãÖL «SÇØ´–ÁQ?uu=;60„✌ㆌ'ÝÝÜFFÌÍœOŸÊï6Ä’Ù³9€f¦f–2ÊÃëçÌŒÙù_ÿ“ù0agŠV£Ä¾SäÔ|×@òûÑí£<µ-Ò¨èº)%i¥Û¦˜é/^¼xìØ±°H¶ݺ^SÆÎœe­®²¶}=ü UÕÖV×ÖTè ~5>|ªÇ`@àóþêÏñ>®…È=´b鎗†yúF­N^zNÁ¦¹N;·4s}º“^P$G»K\ÿy5|Á¸&÷¼'çX·j𯒮^/œQ‰'¬ÊÛ$õa'E®o³uúa5…Ä(i"ƒ¥ËmÓéc×A#ë¦èÓí«™ ÆÞ=:;R9°]=&Nèûõv:n  ÇìÑ^¬1¬ósm³[û4ük¨áißhí6ùTmœR¥•ðÖwRÿ¨SZ•REØ”wæQ± ŽI=%oø<½v.²É Q¾1ŸëŸÞˆ1C]9r[´A pƒ4©t"Õ2°¶LaÅýúë¯7Ân­Þ®R C}‰ˆƒ)ÆÜ VÛ0`©™r"akoÓþz‚˜56:"ÑÔ@”MjP²† fÙÌ‹iªˆ»ý:—orÝ´ `Š[Çsoñ6³ô¡ãå„XÕµ:H=,bKlàU©p EÕj³Øk˜6ÎâØÇÞÁæê•G<ˆhŽÀ7ÚŒ€-«cm¡½J7 ¬µ—& j0õòâ6špj;í€L¡h S bxö)vùSk"í¦Öðm£éàÑ ¤6—áà-ÚfÝÜ›ÚnéP¨OÚï·@ÒvµSmj3‹n·°k.c<4ùHsK}ÛÀÏV#LߤYt ¤`Ërë$Àßë›Q¨mÓ[i1G’dyØìøåÿ» Ü¿ÉRc†vð[™±VBJô‹±uá¼2¢ƒT •‚µ¹MköÀ¶¹X¤§fÑøâ*][$€Ytéuö¯¬ôFYÙõÒë×Ë/»Q¡,UV—)+Ë*«K•%eeB³h…Wùñ{Ϋ*JòΟ Œ×÷Ô:O¹«º‰9[#Eá[ëÛfÕÕËäl…‡`Îß*qé?;3ó‰Žô`ÕµÃB  ¤HN¡Z€Ô¶)mP«›E£Ø ¸‰ôò«(_ÿa‹wŸ‡?Ó·v²FP…é[Ã!0„ð…‡ )`ÔéÛVÒ4QäVàÛ’¹´r[Läú””e\æ…ÛÒ³Rh–Ƚ¹´:g[䜄Ô²” Jõ…mÑÉ$-Z& Úš¥dò÷Îá\Wƒ•„Ã…„Éy10šd…L³5K}õàò G(æ<›ÎòÐŽÄ îZ€K“6µ%LÁJëšEÛÆÛLùÏY–öɑҽ>¡Ñœ×ê+EæŽöYšàÂbzVÜ–ãy*UEÁºIØbÑ\Zy-y~ÄŠþïœßÿá¬PÅæNç‹ò¶ÌN^òõ€ÔÜ\Z«U&'ÅŽKYÁ޹ÉÛÎHý§ˆ‡…K|vÑÁ'åŒÄgnRîÜñu$ö¥o•â€eâáâ/9»è½'™Šâ”Äb¶!–x6/ÜØävú ˜¶Š½iÔJ·ÕÌ¢-Þ¬Þ®W~û†5χû‹‰|Ôܸ0òáÑ e°˜&swÌæ+•ʽ}=MéuöR¹dé¡ýÏ{û|HAÂŽÿwž¿§oÈÐ0ÖÅ>cÑ\~—ì™÷=Ãްv•zzõ& /Ov³«Ô{ð §KÛÖïË%ăà‘êꉭÞ=ü<å¸l4ŽÍ·À3”¬yáÛÜ^ofÝT؆vS˜E¿ð ”3£Y4lLY>ÖäT Ó*SÅšœÖâ]¿F§­ÑéjìíªÌÌ¢Q¹ÂóÓÂ&†8V²ÖÑ|*(°×óí Ldk7ŸòæÒÀEggŽJ"a­8³jƒm51šK?5'îdfölØRa°›6’_ F !kë÷¾«È€°Ia¡ä†EkYðJ6RÆÏìUóÂù<í2B×M)kt Ð6Û¦­kö»R^VÂ0êÒ⬄9>«HÄ{3ûŽŒ dþ·YØŠGr¾KH#³CûvSçÄ;³ÐÃ2Å…†mx›K›ÊWlÉ\Ø4îàé¼û‘Ìrn0«<öAY;sT ö † ¬6•9uÁfÛ257V1BÛÏRö!1+œ¯¥}Fxhò‘ðÙ–0mu³h´ú,nœŸD"s÷Rìé²)»d7¶ê‹}£²wÄÏR°.£§Û‘¹>@L¼'¬:°F1Má%I¼f¶h.]ß´¡O6öÌ–Ì¥q7µ6Þß3"È‘Z'¬‰'ND¥rz+2çG'd‰ýÇ®‹Èç%‰ÄedÌf³È3{Õ¬pc%íô—Ÿ?ÑHËÀ*‡Ϩ-–3á1³|(­OŸ>aaµBhrÝt×–™c•ãCÖ¦fѨ^o'¦fÑp3ì*×ü¥öñèmV±Å¨fΆ\šÀÒ™=çÌ¥­*Ñ@¤VZc.­†¹¶\ÊŽ*øJ¥’‘±#R\¢†bÙK< .·ßèÎ;óóó§OŸx@+,,”Ãî—óº#e}Μ9ðÕì2Ž:øšDäìÙ³ã&FñÍ3›ñn]ä–šE7ƶ™™3ˆMÓ¬1—6«Ã:si)ošÍW"ô•ZwYX¾)Âk ÀQõy“ë¦mSH·qÍo3‹î´ŽEz£iwo]ËTmS˼SmfÑFItø_ÚÝC•ò+ShRãJÊb›Û#LmfÑoUGLäÑ)ìô[ÐöÓ4Ö¥ÝJ€®›Ò~¿YzÔæ-ºÝÞÓ;1š|¤l§ÚÔfÝ‚{Ù>³ð“ý(T¾EmSžuža¤ÍÌ¢ñÁÒ¤cAODù_™ ¹²Å[ ^ƒÞ¤½iÀ´Éåý›ð-0‹VÌÞ±å}|,¼ÂU]Šˆžvüq½ ¦ÍZ£¤¼>N¡¨Zm4ŸéÅ6€)X¸EÞ¢Q2Þ›Ç8¿`°öëåÓBé7§2§0ÒŒ7m0vü,R•úŒMùšÂÊxNµi pi,ÀðÛ–ïôo•Y´§—Ü3`,KÈ…e9 Ãcvî\y­Í(%Lá¶e/Ð ·6XGŽáì”ãf§Wî}}i¢ÎŠ ŠaF×w!ýË©zÆÎD™³Ö`íÌy—6óÝz ±ß ö¦x‡ÛŠÞ¢j!¥Ì?üÎD˜“Nêk_›–8måÕ“yÿ3@¾w‘Ϭã#ÎWh+òäFžŸÂšGÇûŒ>÷Ü!•VµñY¼D® &J¼iØË<Ç&Öw!=h`=cç£ K’&åiõª’÷ûÙ|þËÖZ7mKmjl iE³hÖBj´Ÿ«ßèê5; þ3Y,a·ØÿN°¯·\œKè5«ž÷—‹å¾áqëÂ7­,ümQ¬Š%K‰l¤Ë7u!-®gììî7”U“£W¼Llß4åï,"tÝ”¦ð3*!5ñ¶›špÖŠÞ¢Ñ9¯9^²x˜qc&kÃæl<²VÌR‰¡É\ç^£RUÂr^˜p%5˜WkoÔ]º®gì, ˜©*üßOÖNTx-MÎ{g²o]¦»;ÆC“´@m¬M[Ý,º³Î‰¹‰<Ä}§Í&ó?ø–µŽVfmžŸ6{ú(OŸÁ$-aWÔ¦n\a›²9S3óuþú'B3¹«© i†ŒIi~Î5ùàgVlÜF¾Ï¹jRóÝ|ÊÏŸh¤e`mK˜Þ ³hŒMú’‚)Æ ž¼13¾`kíª8µtÇú™þD:xåŽøÄY ‰Äý­Ó2Ð Ÿ´bir´B"óË _CdvljêBšŒ•—ÓÞöã|RǦÍþ`v±œ»ý—eÇ[7Å­»EÞ¢‰4x·ÉױؔÔ:°È¯HÕ/b­˜^ a,µB¯ZPª•°¦ ´þQïhUKU ƒÑò˜êJK«ª<|˜ètz{{Ú h.]ªÉËC¢Ë¨QΣGÛ»—å›dÜFÐA$ÀOö›¥POœ8!lßm‚)0Zžœ\ýÛoPŸ²Aƒï¹GÒ³'øÐ^º¤ùë/ÕŸVüôh\#"lHÞžŽç5h ÖM£¢Ø}ú(ø¾M0Uîß_}ü¸tÐ —±cõZmõ‰5ܪz|éÀþþ•ii•ÇŽ‰œ;O›ÖÑï^¼*N¡¨ZåiŠP2zl…·P0sn(P499?ü éÖ Õ^½Zºm›ê?tååøS:…Sí•+¸äàí 2uNŽou–Áä‚Ö³¯:m¡ƒH÷ œZ‰K“6! H¿Ym e¾jÕªòr|Ï4tíÚuÑ¢EHE_¯+R…¢V£í]]GŒA¡¯Õ¿üR±gÛ¬Y P;bi@[–4ð󒆈Å'"ü.Î;8ÒŽÁd­5zµ5›Þ°[p˜¶xÝ¥!r³ÚÊ>€,6pêÔ©4½êÄ ‘Dâ >u ó'çáÃÅ]»–íØQ¶};"N¡¡HÄ%ØI$U¿þj,M,wCË»vÆëU7w7îTjêmÔêú¶ÏêüÎÎ9(<2¾Ä³X“fµÑö9(f+|ð™xpVæ¤lš9·ÑFl¿7+¯›¢bªJQÂÍÂÅ)Šªÿ ñ÷÷§ U¿ÿèàë«9wNÏ0Ò  ªƒѹ«ÿú ¨U½N‡K KÜh0õ¶ bm}Ûç¥~±çfå©´?Š%$­B c¾ü¥>£Vž×ëK^‹~~[N}β£ Iá{´¸üQ„ͦ¹Qñ7Pžó IDATû"]7¥ÙèÀÊ"øô­S”‰7õ|õ2™ìÑGåOu*•^£aŸŽšÌŸØðZ-{Äsƒôš6]­1ŸÑbÄÜÛ2Ü) lŸÏSÛg_©ØÍì ÁN&ÿć„œú~òeïîN&É0D5‹ý†Î…3Çè•[/Y]3,VoKl¦xhò+  0¥ÇÖi—.]ÂÃÃùê'Nœü)–î™ÒRÍ… ЗžV§§;ãˆU}??Dp ;ôꦬ kU|F‹soË™ÑöY,óÀ¹Á–O˹a& çà6rÆœ'£¢âNžÌ~n›EàÁ9`fBAæžþg?PxÉRò9j®PÛáæ%œÑBhÄz°Òîž[¦à0XéÙ³g(†›‚  Õ«NœÞ{/ô¥ò‡´ùùnsæàåž=µj5.@]TbAVó¨oËõ‰ºÏ&K¢W¥feì\1?“t‚sHÿ¡KaæügU`0‚¢«œ5Ö53ù99²ÁV|”„QvÎUn{^ýBmg-“J  %PÕheQ”˜[ ¦èô1g[?þ¸p‘ <ÉGÖTUUüø£ÈÞ¾sdd͵k7>ûìÒ‹/âïFRRÍÕ«HaBÿã5ÕÕ®£G7Ú ¹¹·eÐ lŸ¥QÏo ?3NrÔëø‚H9ë7Ü7.ï@×ù£%àO$y| ëM\`Ô\œöz k+-S$Ï^7#¤µÖmÇÝq ƒ\ÑV!$h}ë)L[s$Ö¿ÿèèè=z˜0IR÷gŸ½òÑG’¤¤Î3gzΛW}äˆ:;ÖöFŽ´st,KJ*=}ºû?þÁ.T™ipªÀ´Ùw ­juéÌÄÇÃÛ2VÕêÙ>K¼žþ`wÌ„”¦‡Ç’Ü@êž ×¾WЃ{f±·À¨y·~6ëJZà6Ú„Ûi‹$@1Ú,\òõP#)”€ì­ ST0`7ìã«2Fº<ý4”èÕ]»4/Ê~]`=JÕñãʽ{K/\ðœ:dÆýòËBoË|† ß½ÖwZ"ë£>“(–&ÏÌ’AÎÇ)yQ³Í¦™`+F²¯›R6èh¡•aÚP ÅÞ‹IºtÉÿÏJΞuزÅA&Ãò>zùšÊJ¦¶Ö÷Å=££AÖP Ö§ûGý§¢è-%–$roO\Z_Œ²$@A†‚„¾•å uðm‚)8wéÒ}Ñ¢NãÇ—îÛwùçŸOžaˆÐ¾=ÆŒq{è!§{ïµ’{+ÈÄrO<­Óm!¡ë¦st `eµmSÊàˆ?Ÿ%K†Yɬ¬ƒK€‡&±²A¼&}«Íô­¬ÛFv·I€WŠ-P¨r!ܾNÿn»=¶öB¼mÁº)Í‚l0µaéÖJ£HN¡hM­”ŒÛ©6=uêTbbbo{j©Y°w™;wnù:«€¸(#åPÕ¨Q½VzáðGŸ$] ÁËâc|[½Ýœ§é!ODõ2Ûï/`箋RŒZ‰Késµúí2©ËÂ)l¨-¤rI¼ýÊ[o½…ÝRÁþºZÑ“ª¦új-a_gÔ…ëׯƒLè£îš1vyÄ4õ/z¦…ïöýýÒMKúËU¨¿ÕÛ­þž¦‰Ò÷"•ëDòò_JâBmo³ØN¿Åë¦m S 8š4£ÆJJJ:¹vºv¾BDð.XÌ(k+•jî­Ûr>”––ÙÀ¯ãØÁĽÆTœ!ŠÄ¸˜aVj;&'R81S3غ b‡±d,DŽ˴ìL¦k3Ökï`m~¶.ìô9)5} 0¥ÇÛ=Ó»MšQÓ(+•¿ß¸ô{iÁ©ë%W”ÕÕU4à[ÀJ.ÔokñúÈ õé0zfCFœ9 4|[£“If¨L4_Y&êà 1Öƒ¶Rz&ßèëY“p˜!ê/‚žÄ*dA1Û,›¢OGÖU„ ÕÇÖ¦^†ý kAH ´EA Ó¹O¡çl[³>eçJnûLäÚ¥©¶‘á;ç—®›Òö@æÖ7 ¥E–Û STÙ¤5hìííå.òÎ^®n]];{º:»È:ƒ««+Þy"899LÐlÏÂ=æ/ýž“óAlÒ#ú¯Êk‚(öœ/Z?³_áÞ¥£c=Îkõ™ £C_ÉaÇ ’ás“*`}|]bì¿2ÕÒG—ž,Ý“}𽩖#Ã:ž^ÕûP^‰ª¢hãT¾"¶î‚IExF@ãë´ÖÖ™ sCŸßÆ´ÊÜÄùÉæe.H^²ãLi}mKUÛÐAyhòk‚J—¡ÕÇhÖðÀšQ¿÷Þ{ü ÕÄŒE.rZ–á‘âZyMvVÔ½L&b‘UQì„‘«J¥BvJüäb2âÁÒg†ýþYY³~°<7•^!ò®^Ø©âãé&U†á4 û$n¹ñ=^ü—«>'rïáƒT?lMÈ+ÊE`LÚÕ«7!ݼ|à¦O}!eþ«;HW'¶¬êk="V¯ˆ”üŸé;Œòe Þ@§=Y>0ù !aßÇ-;®:c쬽7Œ\ìù|^82Àz‹µ(hóyï n(½ÖƒUhYß60¥fÔûöí£·ÃÄŒš½uR)”%"|#Ù!î‘UšbÙÄ™Ãqéâõ3¥»Kâ–>÷î‡Ûh9Äsì–²i{ÊÙ=«æ&çA,è„:NJj1#ꩤ:êÉ—œüdpʛઈßqhšÂCAN±9´ìޤ^÷½×{¸ •xøRÇÓNÜ ×@dá‡uN9å©0¯jmÔ³«»̨_ÑÝ‹–CM¶Ù¸À@ÛB19‰e ÖM…ín˜‚ƒðððŒŒ ÌÖÍͨq ’ב<»§z|9°OwÅÄ«¤°‘—w+9°«X1ð,O NzuMôèˆd2;󿾂taT:9™¸§jãÓ£¤Œ²šùÜÉ=è់%IOȤ´²NèÈË«0.•C×öAH_¶Œ ÏŽŠ,×–r µ>s4©ù_˜ &ÊRËC\dâ ´ï¼.Ÿ×2Â)U«&Ò2?å§_¸ÔcSÊP#fÔ  059:Š ¯Tž¿vYD´9—Ï~7®pÀ«2Ñ=¬räƒçðÉ0 [ó Kù+uï «­ë:ÚG†g]â}FEÃbÃÈ*‘hü†œÙŠ´Ðˆ­J±ïì5q£}D–÷šŠ'¬:¿®÷*…» EÌþòJçM³=h] ÉÛ$õጱ]߆N_ÈÏšÀ@»A(×qß¡bÂî¾¹Œã+7|aÖŒ•-ŒµZ-=ò—iäâÅ‹}úô knMMÒŸ9sÆ¢‰êo¼áèèHgHh*}þReþüWÕ„O{í}úïÀW\ÃÇÞw(ñ÷ï²(in`X;hÓhöœÈá0šQ*ak 'Ñ?ªÕØ¢ÂE-¯†ãi£µe Â:§nÒàZmð:ÝP)-}çÎùùù3fÌèܹ3T)Tcaa!&¾ÎAûàH4gάüÀ{xïÞ½q—7FƒÈÙ³g'L˜À7ºÍ:}ÊEŒ^¾|[ÐH<6<£ˆHôÞNã¯?>w ÇÐI÷dçœêY;HHc}ÜÔÚ’­5/Í†ŠµàxÚŒÔ Wð€Üy︅¾•ÍdyÊ6†)χ0‚g›þ† 3µõ;u&ðûŸ6u‰¼>h‰ÓÀPß³99—•Ï Ÿ(Ìk‹·7 ÐuSÚò3*k˜*©öS¬ÞkÉJ»BûÿÖï‡Ôí§Jœ>q%¤Û#/?5}Ä1Ö´ÙFÓVà¡ÉG¬ä½?OÙaÊ3gyßü™§ÛRÚ­ G)@›«P%‚Êu0˜Z3NŸ> âZŸÅFÙêà5h ÖM…0m³©V—ˆ°@ŠQ¤ðáU[ü¶I€W¥Â)U«Mò˜òáѦøŒ4Œª,¶ÿ·ß~£Á“íîî.|פ¤l7)awßÜ¢ð¡P>KÇ€)ÿPò|›DŠ‹‹±ö†uV=66p×AàâlòbȸdÓƒº´žTeX:¢ë¥¦×oö\hÝDYje±RÅ1ö“m˜ÂŒl<Øðî kÊX1ã°¢¾Sâ`òN®AF!v,ÉÓuSžˆb—?¥,?a­ôèÑ£˜(c ‰X8çi:@§7«W¯nÜ’ŸâX;''zä¢ôà,“áÏ Ò± n•9ëçˆdî^>^^î®2‰(2£õÞe¬‰âCÖ¬uvZ!/ô†"ö®É\½8NÂ×óVˆ ‘ߺtõÎhŸø“¬QCajBxH"‹8i‹vÿ ŸµéM™ùY³~Ý4//…ž((( ÚJ‡C›Þ¸qãã?ƧxñÆo5ŒB¨û…8jkuø/âÔi-f—œ&¥:•S§„RÔåac…+]ãKOÅ{J¡ÈÎüq±[ë98í?›5fëá­³Ù“†Bá'—,H>ÿÁdeaNžŠËØí­LÏß»tZ榊ÏP‰Vâ»xÍ–´‰Ÿ+”?·ë Iß艪Ýôu´1½Á_+×M333»{{÷ìÙÃÙÉY¯‡-<îËèÚ”@VVÖÚµk<ˆ~„O¤‘Zlúô8â‡= Ê%qØe/°g Ð±íçƒ2ëÛ8BöìyE¢Tîq:µƒñ5aÂø0. =ˆý§'ÏM^»ë‚ ­±(B/ó‹Ô@3ìæºwïKSju4^:LÑ<Œ`0[úàƒrss…­¥¸dÑȪÕÚZ¦Vƒ·Ã558eXزpE¤V_ßy¬aÔºa¦-ÎäùøˆóÚŠ¼¹Ñ£ç§°øP^Kž±¢ÿ{ç÷Ä8+T±¹Óù¢¼-³“—|ͺoáì§]¹¥¨({ME\È+»¶Š‚¿Õ{ßkÉ"ÛØ±ÿâ=ñI±¡’ ˜” :BÈó =>á@…^›w(2z´ç{U{.ó-T[]‘–ÄÙšøË61Ù.Lñ»2O¥¯8Yºõž»ü„ˆ%¡Éyz½ê£z6ÝhçÙ½$ì¡ìCbL½&`ÏOïaI®/7ñË´h¤!°:´‡O¾þ}===ÝÝ=L í`0¥Ü_½zuãÆÙðég @ §Eé{f'áÏQö‡ûW_›¼æ€¾I`ò©¿i¹Xî·.,qóQV¡æ’¥‡ö?ìí?ò! ;þßyþž¾!C¡h8CTM…bÍñQÁžžÑ‹¤Bn,g"nõo¬EöqXd¯ÚIåªzuûOX¡*8¹Fq<"Ä'fkœ\¯"ŠUÿŸƒ¾£¢7)ÈŽ£çëe0˜À²,­ö¿ìë-³æØÔdý¼h]8–†\ß'Ä/[•Dȥ먵ëȹ$1bòʭLj[}ûAÁ¢z½º„'˜Ûì´j|ʃŠ©¬ÂÂh¼[·nîîn˜‡”•• _“Ò«¦hÒ /¼È·Ú’G*‹W®Óg9sI,Rù,ˆôN2?ùÝtöÏš3K þ¦)k OéÎÎÜP^"aÑÇ©^ϰ)gÞo¸"¬§.ÎS°ÙOFÅlÉÌÌ`6–z/þüÔÉM‰Ñ;/2 ÷¨ƒQ²Œ `tÀ­pÏ€Ñ_6>E`j²„ÙSž„¯ì˜“'3Ÿ\J£T™{žý`œ—dY=ÿØZ-Jçño¨È䲈&з&—ëNJŠÔ&×M±DêììŒOâ©BbZVƒ)ÖÒ°ð¹páBºfÁËC§~èÕÙÎöð\„Æù°|DÜ“Ìqã—e²÷›Q—fìÝ›Ïô6›Ìÿà[v6«ÌÚÈ zž‰|ÜÊH›E[Ã%zwß}wÊ”)æŸõá³co˜°#€>¸]Šâ ”SZR²hñb>‘(K‹ÕøPZýEuΜY&§«ÚS¿«0\Õ†¼—‡ydmS1`÷Π>š¯Giñ¦`´qŒ‚àÙgŸ5×m¶ ~%½‚éÂ4”åS©ï¨`‹W䃃›~B„9ù{ÇG„W­ŒßA’µ²Å·ˆ ºÊ&KK²å'û7£PïXÑÚ,M-aæv§ñ”N¡€T ÖæòÑ‘fúÍj:}Úï7+—¸u%PR¤ —B[€Ô;¦<@ùHëJßVš• m.MÊ¿C:}›Y´É}m'§€)ÖM¡JorÝ´cÀ”ï;’þMšE7T¬I:Sœ‘ô“ö‰™ÖúH5ÉÞ¶§Å)?WE2_ m‚¯›i5Na§ßD}–.w€NËò·Ê,ZG£ Yƃ„T²–Ìk2úU]Ú=ëgá›E¡H•Y[¡Ž7H‡+…T­‡ý ©-“Ÿ‚·åp 1¢ Ôb¸«†5¶i#.Á4ûàÕ†ª‡³7¶Lúê‰#âEÑx«*O§ë¦ô¬òéÍŠt˜¢=Ô,úÓO?…ùŒÅæá©5¾/…Mûv¦¥øcß¡²¯Qé=šd‡a‘Fk|WMˆKÿÙ™™O4¸0(Á»¡F^ý°W{òв¬KŠ›öe&6f Ú~2{à…’Ií-;•ö M’œcXp* ÇŸ3òpTŸßŸH¢{²îªŸ¹‡müPÃNÕ€=i˜ÂÑâŠ=i¨z™©×j3#c¦¦~yhò‘¦rX¸Þ1`Jou³hsy¨¯\¾á{_YCã…)©Û8¿Î¢µ)õ­€K3àmzíaó}#½}|=F?À• §Ó—?{5á2ûpVÕ{÷ÜD¯ÜË*pSÕ´Ò˜;×ãŽÆ}ºZ¾Ò`»ÄšBGî-4>Nb¿ˆÙä“ýgQÆ©4X’ÄŸÿÄñLÊW$þ!O£»jõ…mÑÉ$-Z& Úš¥dª¹(tT“ Dq(@¤(ÿnëBp»-ƒµ(Sçl‹œ³~'ët;<]©N];‡»* IàÙ¤…óó'™I¥Öœv$˜¢=­km. ¦¢8%‘3ìc ?Œ·gÞù¢L˜bD|mèD®&¡{ȹ5‡2g˜¼yíÚ9’ÅÒ=sƒa#UýËÁ?ª8t±VÕ'všw¾ ó‹ä¸%gXœš¸¨† *Mœ¶òêɼ‚E“ K‹ûê$[mþw3ù}”eéÐis3—¤+IaÚ‡a[vēģ…¤tÿ’´u“ðicƒ»jS?ÔŽ>™qÓ„ŽªÍ›/L©q$™q/Ì+)س¦bVÈò <+““æ¯Ì0¯èë 9ñþRŠu¶Mcwf× ¢xP¢CCá@*«°"ó¸9Mƒ)mR«™E›Kˆ×'œ¡qrÁçáþžýîhìëqÃv?ÿ_êÒû2Ï”î}ú –ùý7Çò=\È…›è‚yáþÞýˆ›W ÕNi[>ÿ9gl‡+´nî¼|)Y²ê,?›–¸`O”Ð2Ðç>Øæí>š~0•L˜4fÚ©ÇÒ|Af‡±¶¤|ø¡ÆTYS@U{zöƒ£ê&ú”Á‹‚5µ]“¼"Ê×Í{B4 wαvÕlbüþw¢|Y+éàáý/íÛ¶þóŸYC-Á €£HN¡ÌQÈsÜP¤C´µÌ¢Bih¹#¬wÓyÛgîÞÈ»¸’Ìã¿Õ3%6›ç‰‘Qó~Øä‘8.áX]2—³»—C¬‹j‰{ßS.?RQ盚·n&£Ÿû‚$oLض!ŽÌ_Os‹½ƒ–’´‰¡³<â‡{ºõŸ–9-tZæÜi&ã`j´Â‚£j!‹Ä  eeqÃ@¨èd¨M™1Gâ¾ê ›4Ê\øtRŒ¶—&¼t0˜¶®Y4d§¿¼¬„QèM©„寒¸ZÿŒ;W<°jwÑšKú†Žõ$š[\¤TžÉÁÄFV§ŽŒ$ÆÁ%wÎíÄb]T{hod)„¿bÿ‰›ÂÒbgÅ…­‹ 0}”|ÇdzûcÂÆÀ¼{8çzvÁ” *Þµ°Ø†ã7Ê î1jXÖ5}ÈWûrØáGÖÁ/™Ô®™Vž;’„¯¾ÄÎìZuDuY›¡V±7íH0m}³hÖc9‰ç'‘Éð×G>e'ƒ ÷Q`hlÜ2ÅO£%ž‹Ož'q~Q Ü0Ö@ÏýdŽóquõ Iü¹¡Há 1±ªÆ% .ªô\inS—Ç£îÅQ,"MÂà±³X”òDzÀØ ˆ?bXåëú¡æM³AofñOËf™çáúHb&ÛéE ºyk&®˜U|~)«ØqÕÈ”\±&ŒLô‚³íÄÞ³KB£ù…-:$¹°Ó§•5ëh3‹n–¸Z›Ø’‹ja á!{þ¡Ú=Ó¤3Ò4o?Ôø.¢ß+UJÜ„öÚšác[«gLààlÎcx³hØøßè÷a U_&Mz‹¸Ï;g3‹Ê·M㬩2ÇLŸM:l$«³^‹M[sòÿÛ»°¨ª}¿QÀTlF|P2æƒ|‚~çHV â­+Ú•Ó9Àé–njz’ºpа¾L¿®W,ÓRùNjG°:ä ÈòA ÚÐÌ( ¢0:#ÌÀ rk¯a³gÏ30aÊ”ó^ÛqÙ9L­²nj'¾ƒÝ9°³4k­›ÚL¹!Nsfj'-º£Õ¢Ŷ@l£!MZÉ„ócï{LšS©³Jùü!¼–‘x´ªhãR*ã¼TðEÞWÉLÊR½èˆhò sg=Áñ?–Ô»±Ù1ß•Ýî⸴릶SØÞº´h‹Ô¢+‰Zôž©;qˆ$S™¼èô«O ÏNXuštºº#ïE3sgí@;ÉNßš–¶kW*«þ¬g+ód,]~2uížyÅÚuÕÇ£ v\Ï= K™Ã߯äQ‘hªÒ`s•eƒòséB?ZPŠÔž¸nj5Z49¼dT‰Í«E'žÙŒC$s߆,êµ{âàçùöÌFu:b“3Ù(-%~X ëÕs…·MˆG{ùW•üBLRN)#Øåw¡dja"†×™¼ ¥†A]yE1Êõûm.ŠmÌô¯ZôÂ… ùJ¼ì)=rR|¿¤N܉>"Ô‡»8³ÇOªQ-zyaÃq®Yµè~î„ÉWGÿc¼ï]’^z‘‰Ø;Ë Ä@§ÿbì²e“rLI:D<ú¦&êß_s÷scDc«Ë‚þ±cc¸Lº.£ø}žt£VS©Ï¶…ÿ*™ O!;‘ðIDATmá~'ßLav4¥ÜÊ ÀÌ/ŒuúÖ¥E[¤ gzúÒë   &¯ÿó¯EÈ“£×flNo„#Ïø•|Š0/\ï5!­(Á²Rв [·…2ßÝæ?3,dž|ïÏÜ9#Œ‰55†s#ÝZU"g†õ3+ð“èt?‡N~§ß†RØL­O‹¶D-CÍʼ/¨„ôåu‰sÙ¨xòr¢OŒ"ôΓhÀ?æØÊCÙX<º4û=?O47žñÙK6-ÏOQ2ñåXùŠoè‘|Fµ#ÒI:e-앺8E¥ fù&Ë6GŒ5ñ{á§ÓÉ~ºnJ3mC;J´NzlY-Ó©«Ó*©ô«=?W%0Ö_鯳$xCzÃJZ´(hCVÃj•J IæÆbíuæ•=»—`jÞ——³å{¿6œ<‘‚âÒâøYyÄgÓáŸÝx@C4}yª6ö#5—Ó²Ý K>ƒ˜tSÆ\¢±É·y® mØäˈ…Ék –„g¯øÕøçÂ%Ð%šœ§ Å°˜vµh9ó ,v9gMѾølÙ™Œ±m0=÷ˆPÆYxÍEdÄAqey¹äû%&ZLÏÍW~Ž›ží*7Ù×· m:§o0…}[ý!v<-ZüªrЭHQÀ(•¯˜¡0n5x¯'°‰‹|ƒÈ—,º—ã*®ë¦¶Óî`{ÓrÐÜ)‘îPÄîW®)åO¡h³jQaí¦Z´E8è È´5m.å±¥™¾ è-_R´ƒݲ:þ.`J§­ÜÊòäFæçoŸ0åÊyÌ·ˆ#¦-À¡“ßé·!};éô´è6Ô}ç?N¿ƒÌM¤Øš2 ™SžîÞšbdaòM,XÀ…“ï“×7°Ÿz†A g.Kˆ":æä¹‚Ç!å EsìšOÚ‚š4}xBÚ ö³ÐægÚÝaŠ7‘ÉdÆß~ž0a‚¿Ó® Å%A#ýµêÕÖÕá.ÉF>1 ñ@ŽŸo-šo «ûau¤É!•Ö ý«å©ü›3fµ˜âU###±³ÏÙ’nÏ=÷w i9 éăÏ㟢ú[¤Iå?E´h‹X󈬩©Á_ ³ RAøtGCþR°"3T«9kUMuoÍZ;-ˆ†……9r„&Îj6eÃv#lWâ EwZ4À‡&ç,PwÔt¬8&D›OÄhq0~mªÈf|¶Ñš¢ð€)^žaÆM™2Eð:õ:ü>ulçN{x‚[òâ—ôùÄÁRü´h¾5¬ëá.]ºT\\|çÎ[·nµ¦ð¬p¿ÿþ{ÿþýÔV³¶˜¢wÀœ oŽã%ÆÝÅ!éN€GòQ(â¡~:`1JþXÄA‹60‡5/P_XT«Õ¿ýö[QQ¶)4Q4¢µµµ¸%—˽½½¡ÍÛjÆ6 Í‡‹/>þ8>C t7nôòò‚iè€ëù¹xÀ7~ÊŠªªÕkð-¡S hÑì}¨Ðsdeœ,Ù2Þ“Ù£\(¤E§†yeþ¹0}qÛ)§D2š—Ã^› E“ã-©ž²¢bB‹6rš‚0·%oWüjx®Ë(Zg|ÿý÷ÕÕÕPˆöððèׯi}ûö±Õ„ŽU‰¶ ¡Ñ£G—••1u(ÁhNlO-šoX“EŒîÝ»GÎæa ×çnY?ÖLõ×tØÀOúÅ$Ækr6 ;hÑÆ†k>=Ð Ø) 4ŸX=EK ‚8Ю†~~~ÀqóÉèïØÆªÕ×pТ™nF‹LÑdÒ>½¢¢Â/èÍÐÑk4´²€l``àðáÃ165g e'0mÇíà E[jC  'º{©TJ{s —èß1… ¯ˆƒiD«)Û-L´èVë¾£# ÉD_O·LWøé¨Í'.áGØ9¯áb¶©bÙ-LM½¬#¬ ,@{€•â…‚i;jNSŠB;` =ÍÙ³g±brýúõ7nH¥’¿ýíí.¨O»Î¸¤Ð:©ß¢×íñ0­+©);öù¶C• ¥ÿà{ž}”Y‡=B1È{ô€¡ø/ìåÜ¿·k?‹lêˆlu ôH˜V}}õרî—Ô<¬z Òjêœo–ôÙøŸO^ž}î|î6gN}Ÿ'*îiÜ:©©:;tâ&½Ýuå‡öœzò¥¨áM+Uºüûª'.˜îÛd\IºŠü=Çê^Z<¥™H-$ÂÞš´`:/Ë»ù‡~¬5ÝÄâ©qÖöb3»PV4÷w»—gçœ,¹q‹i¨Ÿ$ Ÿ&’v{zÒŒÑÁ1ƒ‚Þùô£×ª§<¬ëïìêöH{¿·›OSÖš1‹Ê‰zÓ™“ÓOD¼L}lQtÎmòåôXLô‰æ#µˆég—ãÑ&±é›Ç"åÜn!;û»Õ[Ó‹WÔn}]Ë+ÊîèJ«C¢æÏLyÏã¡ÛT¢úÚú‡÷ïÝ-;ç¤)ruÖ+ˆ ÷¦¾â]g1³ˆ_4n_^á ¶mcåÒÚ®4«Õ<ÃÂEÊT4s»OÃR¨‰Ø´žU- •ñ¾v¯/›]ÿ×[ST(¶«´º]}ƒJYY¥ê{·üRUùù;—v¦üýÿݶ5ùÓS±IU÷êŠoBìÜTýkJ¿ú¯ÔRÆ0»í;Štä–\ú˜*?u|dªÂTŒ®$5ŽC{)&›ÈíÜÍÝâÖøýsMAÜøÈHÓM]“Ø4ÁsmÑ.}–Iù®¶w×aZ­nPkôku÷nÝúí#ÅCÊÖUß_Î8û„„2+>ýö®Nw5k{¼\/éì¾-4;>:!ts=AjŒ7—>žòéE L‘³÷fåhÓ®ñ“6ÒaZ­\[§ŸyŠ ÅŒ_} U—”irr9Yw«fâðIóïr ^΃»&T¤%ϼŠo6…nž7–ebÖC{~Ýí]ù??a9I±yèöh©‹KÀßÏÒ±)›Ñ€o'âˆÖš(¬ ÇiLs68ïE/l9zEË “ç²!öüÇÆhÑV©ŠîZ_ô?ݺQ ñÂÆóüì!«ëtewêªkE>#&ûÎ8ã±Á£ÍÊÇðÁ¢Ð¨Z¾Š´Y‚­PiÅä«QM.?5lBæŸÕé‹Ùõ®¦pžOŸ¥B!|–§‹½‡¦$hʆÆIìéƒq‚> ¤º_Š }ùáΟ?oW´h«Ø~Á²÷U÷˯ÿžWpþèÙé§í%228tÚ˜i³|k‡y‰4«f‹í, xLSðf|vJÞ7-&¦ÏRøl³ÙØü þÏØæ_Æü÷÷–M¿ç£ã¶˜ÿTgÄf(Õ‚s‘o÷Σ‡Â´W d|•"¬Ÿž8…ÚÀqÝí-à€i·¯"G¦Ë`Šƒ 8Æå¨‡̱@×Àç_QâÎËË£'ëÿõÕî½bæ‘s^ÌÇž,`˜R¨™i—üü|ćˆ¤öpäàܹsö”ÖøJÛgf  |ä´ŸJÈN;ϱ7¼ûoÇXÀ 0Å©Ö>ø,­–è(!(0nÜ8ù©§žºqãšïIéIï½;B‰hò—Ò…`öoØ–|ƒ»{a’ªÌ‘”;6oGê X¦H±²²òóÏ?ÿòË/ïß¿/È€»FOŸ>-‡§Ÿ~š ¼réâ’½’ÂÅ“&9’ ç<àþ$f^Q+1F¨ÊˆÕïrwÛçÑìŠt c?Jk2ðûñARY®ól2}G ù°Li~ÐrÊÉÉ1b£'Nœ@xHHW8V;È9iT]áþ !’¡#<ˆhÜ]êQ2ŒÔÏ[aýú/Ò3˜ŒR5£9wð&vÿ’ɾ"‘ØÛWbzWÇÙkØ@fà`©„lûˆ‚BFß<’¶e÷øaà þó›Êf"Sg¿‰±Ì'á1I»J7Ó96=ïðYf±çàÁƒ¡B Î WèäÿòË/˜Îœ9˜uå¾ó×̾õsVøúúb"•••URR2tèPîêA§úÜô ÄuZÂIûÓ6K ~qDäü—C¥5Ú¨?}0̹:rßUðn"½v†¶’Ü%Œf½Så/õœ JÜ›´xÎí,‘ž½kÄwnŒÏ˜ÈtÀâÔ² ù;6®•Ic2е/ø òçžux,¶€•[S0µ Š¿jÕ*>FQ¨Ù³g5êÂ… àwám»¯iÄS_öÙg1£:zô(4…Ñ1cÆÞm[ÅÝ;: ÄFU* ¹’õÒÙ>{åòý±ñfÝEû0%“‘Uâ çG¾h#zAÛ7(ÀmÝÝrýp5K^¬Ó”lyiŠœñdOqº ôa²T#GÕåŸ÷0L|üâ ÏꋸfYÌ›¦§!ç’ThÃdÚÊf"S]IQ‘[ÐÜ Ÿí‰`˜¢ÛŽÑi“µÚï³&Lƒ‚‚Ö¬Y3kÖ,áºÀnˆnH…Ž5Ʃл6jÌwvYgœ©:û­@/”ÀM–±dó‹ìžPß~ìY‚hÑèÁ?üðÃùóçGPè4aÝ '„-çÍ›‡»ÇG ©Kè¡÷Ä·è’wváSàXÕå¦rɸa¹À Y(H1Î"¨S©À ÃïèbnÖ:ßY© GƒŒzØE·£EƒŒýÖ[o¡iµ"$ •{R:L`j‰'âV«·A(îŒá€a¹4N¢if½ßH¥3ƒïl˜ƒ0GãÜ!m³€aÓÒ¶4 ¾Ž&“®ªb„O<¢Å`²ùmÍÙñ\°€u`j‘©èCL­ÌùÞŠEé;"ÛŸº¦0"JÁju¼QGXÀš3ýŽ(Ÿ#M‡`ÎnM¥?^ËûXS[;òéuCFÎÔ>|Èôêå1H´÷¢SGµØ‹ÀЀ!Žïh ^‘zh„V߸³az=ïcINSêøFçm‡=¯ÿþ°G´bñ¸wßèç×j‰lÈ9…,VÖáA Þ…þmù¥¬Ó雓â¨\¯®Èr«íí®q©,;êòãw^÷*ªkÆi4çV­ª,.n¹¸Ýç®înþ®´\v ûª{•„C!…&Vx¸f~ÜÅ% lµÜÿððWeûâØVIEND®B`‚vlfeat/docsrc/images/liop-patch-layout.png0000644000175000017500000002544212237004745017563 0ustar dimadima‰PNG  IHDRô-7j/1 pHYs.#.#x¥?v IDATxœíÝÛ±·¶…a¸jå`—÷ƒˆÃPÎÃOÊC8 b?¸ÊYhS†An4·91ñuÎ.KZ‹l‚ƒƒ Ø—·w?ÿè–õöúÿ¿þùWz3*½Io@¶¾·~ÿóÓ‡_K~RãÖnºÓ¹õåØú £ßyëùßOîú äê_Ómúª}m–ߦü_ø×øa” óÕÏ´n½ßî§ïÖñÃøôÏ¿ùù×ú­¯ÛîØçÍúï×ócŸù×ú­oŸÅ›²÷Èã­¯»›[¯ÛÌßòi~žm}ÇMO·&ÿZ_µƒF=ö×Ý+øàÁÖÏùðÚôfiéö…>ÝôúÜOÈŒ«êÍ¢­´éù„” ÙýÖøü`—ÜéýÖ ~f Üß¿ýQÿ^;'ñWjMδ–ôÿ‘>ŒüðéútRþ>åå¶~Dl½•º»'öØ?ݼÜÖë_!Ô•ûS™/°õc·~ôÛÅØ­ýÊ!9rìnýœ)Z ícï× ¯˜~¯_ä¹úWÕɹ;ŸNªï]òSyûýêýTÞgMADá^ºõ“óSx_¥[»¾.âÙ²¶ð,÷ÚÀãW­ªPÓ9Ý@õ­U6¦¿³öÇÐøµiSß·<†ö¯{]—w«ð\AO‡ë¼n﵇­I§µ%;2<5j¦0§””Îs ±õrØz9l½œ7%³Å:‹½ô|‘™êéú¶ù°¡-“Í·ôæF;ÜWË]kIN±Ç ÿÎpÝc~.û…ϦK`Ó%èÝôÛݽmzØVÿ·ûzõÜôº£z‚°­óöò~zHë4GhÚôê¹ë£ÕÙ!G#5Ž\áèy(R—§;Œå¼Uù^SÙÌ ®lGØš¯¢žþJ¡x[Žzl×ÿ˜id;{4ùøíÝùgFìà—L0n¿õ¿(¶åÃ^ÂU¾›My¾LÛþ°ä.e·eâZ¾úaEû°¦\¿#ßä” Ìׇ²y Åå¦ëÙÝçŠöQ—ü†ãé!h冖óiXê>&G{Ö3ØôajÞ’”—ºÓ?ꕽ®ü UÑÌ1µÒÑéMÞffác†V=`¨ÛÑBó·¾ÛÁ6“·»óqBÓ”?ú6ýQ2múÓW”–M¯h‚ÊMïÞ9·ÖthM»–!èsÇê_”Üe0Üwác(üV¾Ä#j®§q]ß݆4 ÇÒÜ`Ó%°éØt lú…¡j¾È<ퟒ2·ä§¤§^ÏϪ›þz~V~™¾ûùGñÅè ­šöÕ1î2wŒ» Æ]ãþX—=Û÷ǺìN¸Ì¸çO´kù82n/ÍuãƷש+®nÐ{ ´{¾GúÕ¯—“÷ÃaµÝ?<§7ßccºÃ¡OoJfÜãG>•"ý ²q´ç½ïÉ»ˆ¿ÊvÍO@yð'{—sp?ùËIeh¹bnǦɃßq¶3jÜÕ¼pìNʬôQך=¥|Çørþ"”®aÚÓÿ*¹§ÔÆã®?æåò‡âçg;WÏYzñÙžçLÚAþŒCWÏG뵬SKzõ{f{çt8ÑVË-H©ž¦·ãæ¯,:èîz¤Ê?ùȇCäŸ~¤ª÷uÞñô*½az^8Ãä Ï$¿þ>΄/ªß`ÅN¥8ÁœoìêXÎûu‘gÜe¬:î·'þSnÕqÿëë5|Çdj¨UÇÝ­ü©Í-=îKcÜ[•ïÈSq…Õ ‘wõ'!òîët¶¢jÈ{³Íy±³üì<ô’ßó¹]‡¾ý!wè÷݆^þRÁ>Cßëaö<Ÿ˜í¡ï»oVÏyd~Ÿž¥uPýçïÆFÐ.ˆ£>7…OqëŽþÐ>~^}zL=&ìf;c`•æ™yØÛ¼õµñ9ÊPòœn‚o²Ð:ÙõÈÃý4ˆuLÑ:ðÕíWÿzê°ÿ–øXÇ{ªb¤T n†êq7Œq—Á¸Ë`Üe0î2wŒ»Œ·U&¼Æ÷VóöK5#^ÍŸî0ƒýôrNŸ«7éÏ.YO:ŽrEuÃ7îÍïó¸×5Z|÷E§4Ko¾KÏhóùz6ÒÛ°£…{f] _5kuŒ» Æ]ã.ƒq—Á¸Ë`Üe0î2÷R}Oìĸ—òçà×~ “ÈûòwŒ» ÆýÄéYÝoªï±kŒû£o€«¿NH¯Â ÎÙß2ôJÇýp„Í£¡¬8:Ç+ÄøJZé¿>ºÆ½zç¡ØéájW·Y}¡ˆòK¨œÒ2îãv¸=lSäôÂÂã>ó˜Ýpظ‹F¿Ë W½Ø¸Kíýr:úíæ]W¥…ø¡òþšc½F_ûõ†š¼üH5f¿eF?û:Ïâ#î’ŠOR>véOjì%1÷2—›,?‹ËäÝÍw%1¿Õ~Ž(E=£mÐó‘ìuŠ¢ÛàOº®¹…×nÜòÛ{8î ½Ü£÷ؘðúÌÒƒî…Ç—*âzò9ƒÝw3ƒî¾–FãПþzçq·4èîëÛã»ï݇¦÷Øtè{Ž»±AMoòßUZÖß§©+êéÍ•nã¾JثǮoÑ÷÷U½ÑmÑëZŸÑ¦:¶·EŸ¿Ùø_;ŒûraOG§ü™Èºžy7<ôÝ=soD˜:»½Èz8ýónièû¾—ƆôŒ¥¡ô(Fõ»¡ºýßW×ú “ŒÏ¬8ôsŽà>l¿8ÏLÓR2cþÞëâ<£ÍÜÂyŸ›4wÎüWäÔÏ«:;G$ ³× ]þ´ŽàfȬψ¾ø/¹.&2úâ#îɯGÆ£ï†ÈèÛJ~ܽ0}HÛpZÆ=HŸ€ÃßçÅ¿õ×”ËÔ×Q7îA:d·«²šú@︧VÓ+»%Œ» Æ]ã.ƒq—Á¸Ë`Üe0î2wŒ» Æ]ã.ƒq—Á¸Ë`Üe¼YZÔ^y—±ö¸«ÝñïÖÚã¾è »ÕǽÑáåòôÕ#p^·…„ѹ¦°ÙÓA”9ÏZØ÷Ê4ž‚ ±?î:1î2ÞÆ’Œ Ö ¦òsª×ÿ.Ü3+~X ¼ê¸¯8èÁkËWwÍGe–x{÷óÒÛLò¥fÖ}½…ÖžEOwl„¸c#Ä!îØqÇFˆ;6BܱâŽ!~øýÏO~•ÞŠ#âŽ!fÝwl…¸c%sâŽ4dÝwl…¸O’?^OóØóÓ_—šÛ÷z%Gœf¯¾ÙѯCsÿúë–ýß<½Í^/â^$à¸+‡”ÜìéK¢b{|Œâÿu#çÙ‡è—ßQ¯M"î'Òëi›ldΚ“ÿ™”oÜù³‹êè· îŸÕE›üÕ­ÒU²8è¾Fß¿ðÜÈ·—}ãž‚ ‡Ôþ^Ï'He}¨íâ®öZ”£…Çû ÖÕK=´ìüЇ{|Ýû¸ Ø"îqÄwKyês’>œ´~ÙÎÐ{·÷m‹ü‘Ìǵlá-w߃q'åuÒÜ0€>Á…!î>¹2÷pþjé Y[¦ïÛ= î£×F q§ÎóªÛ1œßðß¿ý1m>Þøöš_;î½DcDâ²ÿåメî2 Iwgh¹ÙUãμ¥Pljo({w7òÝ'!±–›]/î]Výan¿®úýê[ñJ^)î]ÿ,„=ç|'zP1·Y#îÌÑuòA¡—Ú†ò^ N‡”ˆޕռê¸tÍÙzýñéÒMݵü˜Þ¸“õ.:Öím}–/ÝHÑwÍãµ¢öµÈG ‹þre½@«oçôÕŬwwønò‘ºtŸøö‰ñ]ÄÈú Õ¡©þÅ«åù¡÷~»ö¯%î]‰¾…j~ôþ6…ïB*âNÖ5ôÍ¿Oü»ïãcJJ¶äѽþ¼|ÜÉúdi˜†îââBÇÿw¹íÛ(=òC8îd}¾ø;ÿÑ'– Bâ?}ÝûàêNËWÙ+¾Ø’Œ;YßJÜñ/°ÓWÈ2»ˆ‘u£ç-yqâÝ÷'ÛÈlRÇm–lw²>Ómhæœo#$>^«ÉïPÙ8í‰ÉĽäd¢èë6ÎbçoÖ'þô¬«‡³Uv'w¦1s´„æ}Wûqöð»ñ„)MþÞû’iw²>Tß zËí\ýîaøy;íÎ4f(ÙO¢øÄŸþ“‘vg3ÚAe¦4#È«ŠzNZ]ájJ3μ¸Sí}-4oуv_• gfð#L;ÕŽSÓæ3“â΂L‹¥'èª0™Qm‡ úÌù̼¸3“©`;è±9óÚ™w&î%˜ O@»ËÛa‚®qŸ*>·køÞ OCܧ:\þ…ï“÷©)'ô“÷©É&è“wldFÜ'ï\™º0ïÝÅd!îfpw¦ïÐ`ö¡ÙLß‘šÖ†Lf iò{þÔýÝ'vŽ%pâ laþǹهfSðˆMNÂìvg‰žH ÄNxMÁïLjWP¸3¥ÙœànÏb'¼&ñ˜Ole†ÄïIöˆák3ñ±u+âGoɯ»Sð›Ϻ{8T™ÄÛ¦!ëN<î^| émAzž\qw|rµKOÖž¸;oŽª {ŠâîH¼! ³î´ÅÝE^¾ÁB!µOŸº¸{Ôü¢ÔÝSw%Þ)>Äô?Yzãî¾?¨æA„þ {ªãî1›×,>…·ì–”X î¡Wh¹§c™¸{Lè•Xô)X,îŽ+H[zØ×‹»Ç&[kŽ~eÕ¸ÌéG³4¶ËÇÝ‹Cï¬<7²L¦‘¸{‡޳õTMc©ÎLÅ= ÷OÅGQ+›qÈ}ÞnÃb<îAš{·Ís|°óì÷ ~‚÷yâ÷y¤yÛÅ=v}g"D<µuÜc‡@¤'ÀQž˜ôåª|ƒE÷siVNÏ5?RW›A¸K÷RWyšy"4b݈¸·" !îØqÇFˆ;6BܱâŽwl„¸c#Ä!îØqÇFˆ;6BܱâŽwl„¸c#_âÎÅÚ!nBß8:L¸@Ëë.˜Ì@Ìükw̽Éã@ÜeÄg5Ûy>þœÜwa½²žæ&sËþ‡ã_9½›cõ‹ÜÒÛ²—ט¿½ûùGéÍ&¡Ý±‘Ïqg óüÔ‘vÇFˆ;6BܱâŽwl„¸c#Ä!îØqÇFˆ;6BܱâŽwl„¸c#ÄÝüðûŸŸ>ü*½9Äݼ²®<ñÄ=)O¶wÌ#žxâŽR¯¤º‚•–üÑîöÝ^¨Cí9Çãì&5þ1ñÙËqï¦åâ3™ßñJ(I¡ÿ™Æ°†_W’{â^oDg§·yø›.éÏÏ¡»=½G÷}èE^Äý™«ˆ÷êà«Û ÷Û+ý§‰ôÃÆ÷Rþ&Ókˆû½ÓˆOžmÇwoOøïŠíIwN݆ ß&¾û;q¿”¦\ÉÊÓè×åÞ?¯H_i©[EÜOŒ˜.’F¿¥ï'Ë´û W qÿf¡”Ÿ ç^ù£ð‰wÉÁŽq_èÃ\Gqèß}|ÿËǽ¾·WÜ÷iô+‡¦×03'Q»Ä ÇBèOWofæïô›]ÇÊL‹=g/©C¶^£qú)vÚÇÖÓ{ 5¬»?FÐci€®æ6sŸß'žoUŸ!ë±LzNç6² 5´û=u›žxn#>nÌÝK‘õTaYÆ5ïÿ[ð»'&3÷–ØQd¾G¹ñ5ïGòÓ?ÿöŠÝÓÛ±ƒƒ¸SêW*âOlº$¾å:~n6w²Þ]<±ùÔ6ªÕa ¿Ø+ñâÎ&¯%%abS=¼½~úßÕ–;Y-žÊW"¨ÄÚq'ë·ºÌÂT~þB ‡fAÖgò‰÷ñýîdçá™Z^«Æ¬êM%‰oùغdÜɺ”oË5»ËwŸíœÞZuâ׋;Ywµ\3sf¿E»“u%þúï»§x_§læÔJq'ëÚüýÛ¯'åõ¿n…¬»…âNÖµñhñ¬?šA­w²®œøij ï}¸“uü|=þ£`â R{ÜɺN!ë>ja¯œê¸·\ã¤EþeiRý¹kTÇÝS>‚»¹š´–&Gß]Ýë;Ó˜.úN©ó·öîã{Ù)ÍíÇV¥q'ë ݾrü”Fó5ãNÖ;꘼ƒ»ûNâ+¶½vǺÚ€G]Ü©öî4œ¸½NË–Ÿþ®®¸“õú&¦Ä—I|óˬå€îÓI¼®¸CưJ}l=\7óð(Åjçiv{ÍÞ}|ï>Ì;…Aø•«3v(Š»#ëÈd½ñ3k¯5íÎþ£†XÉçÚÆÍP½îÎ4f‚ÂôôÍz(øÓ‹ŸuÙ ƒû»£ ‘æzþ‚§H>îTû4Ó®BÓrïå[XñXä㎙Ò|Lx„)MÉ©UË7f½oPíóÅùVòÁô‘Ï"†j~Rþ{Ζ,J>šêÔ=ɸSíÛ:½œêÓiýz“ì#.øÃÇÖÂùÉ—3 Úi˜»‹Ì©h÷­M^š ç‰wÉy;®Ø9¿;Õ®Áüvç3ùŸÌd}¥S¢²‡Ìd}¿ßéµ=ù/¸®*j”œö•ÓaÇàÓû±%qçCêL|ØY|ÚÆ„WÚèínY]p»‡>œýÝß`ü5¾Ó '‰—‰;Õ>A¯]ÆÛ>ýõôÖ ŸfÇ©ÓôJOœûÛ[>üŒ¶r˜Ì TÇ/>Oç3Ä™ ¼«=ÆÆ}Vžwf2C­¸7ï©qK¢LfŒ0“uÏB»c³.r*ÉÙqgâÞÝŠY—2/îLÜ!ëå˜Ì`#Äb毾O;w¤f~Zw&î½ðÁ´“™•õFÄ}&³>yúNÜ×`2ëó÷5ØÎú´O«óâβ Ä͈;Ë2P‚É 6BÜ5âƒé Ä]²>q×eìÏ\z'îŠl˜õɈ»"d}4âæ|ÓDܱâ>UÜaœv¾IqçI |â+®›Žv´ûTáld]q—q8Ÿ?æ îSÅß§L>£qŸ)κÈ9´0ïÐlžWñð92í>—EÜ¡‚µƒ÷qÄ!îØq‡0N« Aܱ‘q—ºˆ&p@»c#S¯ÍÄwŠE»Cžµ«w§,_› 5ïXUg nj»ói²˜Ì@ØÌ$î3~Kܱ‘©×fâÓ*dÍnw>­"69 Lf Cä­~jÜ™Ï@–@»3Ÿ&3 ub)âŽÌŽ;çF„ Ú³ ž"S î¬Ï@ŠX»3ŸÙ™ÔSÏdSɾ±ËĬA»cñë8ˆÅ¬˜O¸Ý™ÏìC¼ÚlÜ)xL&?w§àw ¡Ú†¸ÓÇÉ(©v'wÇ ÉÇÝ£à­ÒSíNIÜ™Ò`q‡UªªÝé‰; ´Äöh«v§*î¼% ³îTÅÝ‘x ¦+î°Agµ;…q§àW§6ëNa܉Ç0ãøåh®v§6îìH³"åYwjãî˜Ò¬FÖæ¸;¿ŽUÞŠUÇÝ‘ø¥èŽ´Ç= ñj-1ñˆ;[5[(ën‰¸;¦4Z­•u·J܉×g¹¬»…âîH¼&+fÝ­wGâuX4ën¹¸;/mݬ»ãîH¼œ¥³î»#ñVϺ[7î.J¼[ü9X‚q^8î.úŠšÊFÖÝêqw$~°ð}¶±]>îîë3ÁT¾;cYw6âî1•ïË^Ö¥¸;&6˜ ºg*îŽÄ73œug/îîû©¼3ú´ b~Ä ÆÝ£æ±]êÙ¸;j¾L|èŒù!²w/®y·Á3úÈ&¥Ø»‹jÞ1·ùj· {[ÄÝcnãm5{9Ø(îÞΡß9èÞvq÷¡wÖŸ~‚îmwï0§w£@Ðc[ÇÝ3úÙy <¢.ˆûièÝ‚)!åyÄý;!kå>=Ëšò –BÜÏ]åÞiJ)Џß8äÞ‰Fÿê\™¤¼q/•æÞŸ+gÎKÄ+÷Ç9ˤ?£âœÆä»qo•¦°Ëé¹ ÷Ľ¿Û¤²›šâŽwl„¸c#Ä!îØqÇFˆ;6BܱâŽwl„¸c#Ä!îØqÇFˆ;6BܱâŽwl„¸c#Ä!îØqÇFˆ;6BܱâŽwl„¸c#Ä!îØqÇFˆ;6ò9î]N¿GsŸãΩõ'ãrR˜Ì`#Ä!î˜ØÌDÜÅø ožõɯvâ.#½öü¶ü Ì =q—ñzv™Æx3Ǹ‹!ëó§sÄ]^—z{z#áç¿ϯFqþ ž¸Ëë›õ’©ð!Ó‡è_½Ò{\n>FÜŒ‹HIRÝ׈gþõÑ}-„¸[sÈqøãÓh¦ï‡Y.뎸ÛÚ=þc‰C¾WOö)ânMûZ~ü€™ {ÄÝ”òt¦?þ¦äF}w ZIVüÄY¸QÙ}²îˆ;¶BÜaÙaªövú·€ ‡/ݾšÍΨ0Ì'þˡٴ; û®Ý‰‡Q‡}Œ¿}T%ë°çjVff›¹C9ˆûl‡]¸0Ó3YØõŠÄÏG» ëRˆ»€pä›ô†lçíÝÏ?Jo 3–ÝÀŽð!‰ª`åQî`åQî`åQî`åQî`åQî`åQî`åQî4úá÷??}øUz+F¹ÐèÕìô{ Ê€R¾Ù©ø:”;Õ¨ø:”;€°Jóå` Lá¡Ü¬„Š/D¹X«4·(wKb ŸG¹X…r°³ V<åyZ»Pá¦ê|h\£jó[‡-9lçá'‡ö»ª7Ê“Ô5¸Î–tw'󯲨b~XOmå¥]ÿÍ )¼¿AUCD¹£³G%®¶»o•lùéPœþåäq¸-¸xò«ª°*„ío¯Š×üÎG¹£II•¯Ûà®x:h"ï×(Ò¿Ñ6í%mù–UýE¹ãÛ*ß¶Ç),ýûmº‡¢ª%ãqÒ–¯X§Ò?P”;ròmN•÷•Žg<þésÁø7:4{¾âÃR•þZ÷(w|Gí7{:ŒyfjÿôÙ‰WÕÃ7m´¨¸ÙOû}•©úåŽËB§ÍµÉtý£5œÓHÜ–;ƒñZÍáï Ê}Sº…]ÿXÉ$tÛCöO?¸¬;”ûF4섇qâ§òªè?•=Ý{NáO¦ÖÊÝ8 }O·E_’­*>þLÅê–ÊÝ&:Þçb:+úò/cͯҤKU§§XXn(wSØ[±´Ngô·Óy«SøÂÝ`ÂÛÛZ#@¹/I:NÝ6QIaË›©øŠ=Öãf_e(÷U1IÇ•§ûe?jùå&°±–=ÖçfÐ?”ûbètäµ”Na˯Òn±."Åolúßä(÷eŒ>Ó èU7%-¿JÅ÷=¾ôÐïNñPîÚ1U‡ Û–W;w*˜ÃCV[ñ”»Rt:žÚ/W-ÿú{mí6áT0é[šÂ79Ê]–_PaZ³Z>ÄÕïM/[p3ÏðuÚïNzb”»LÕQM¤P|>ùWÅ‹lŒž7ê™ÂSîò˜ªc]éDþÝë?º¿ûcBÁÉžcýªÇ•Lá)wIÔ:Ú‰—ˆw˜È¿ûø~hÅ뙪_¯xÊ]µ“ÒŠÿÁuîwUµ~»#¸JC¹ÏÖrõ` qÅwœÂ«ªõrRSxÊ}jÝ)Y“9/Ç·T¼ò‹—ÎÍçW<å>µŽ…‰¼_¥yýoá«`Ñ©zÆÌUÊ},jðⵚWÁ]U|¸’±Z¦Má)÷Q¨u õ÷o„ÿ8T||‰;“µ›Pñ”{Ô:p%t™¯r_ñ§?°ƒ¡«4”{Oìà S×ô/·2n O¹÷A­j=þK*¾ ʽÖa€rW³õð÷;W|Ç~§Ü›Pë@¹ÐÚ§õýú£AýýÛ~¿ø _S§ð”{=š(tØcýª¹Âî’_úý?éeX.ïRñ”{ jJè9Á않‘¾TüG´†K‚ŒÚ>ÅŸ\Êý1š(Lùù ÈIDATÑx|éëÅVi–˜ÂÐ2…§Ü Ö[‡ëG·ˆWitNáç|lª«xʽÍô¬Ì : SxïéM¹ß£Ö¼Ñgøòýþîã{§éD˜C·äô8÷d?QÊýÍý'ïÓNÜX}jÉE¥CzØ‘ôö§Üshv¬br¿w\XDÏ~þhVÞoŸqÊýµŽåÌéwñs¬‡%øÑ—i͘ÖìùÑÎÑJ¹Ÿ Ù±¨¡ý.^ëÁá2~Ý/Óš7íÔ%ŒNïúªâ)÷#šKÑïzj=&2…Ýì%Sõ¢ܿC³ÔÂz¹Ðïwþ½˸OE®÷ŧ(÷ohvØÐ~fSõSq¿¿þãÓ?£ú}èÍŽ¸eÊý‹j6Ô­Ï,TëAÚï®whöÑCM¹F³Ã¤Gý¾b­‡~ý±ã¹s½OŒjÊf‡e·§a½PÚï®ùëå¾ox“ß>w/wš;‡5þfÝ©ú©«~wU³ï^öÃÛgþŠ%m]î4;¶uuê’Õö»{Xñ½Þö2·3agù}ËfLºêwW°JÓ¥ÖKökœðiÓr§Ù±ßYñl=]¨±$ßïîì"ݽj]ÏJ׎åïÏØ×Í¡t:îO¢P¦ßS탠ªÖ½íÊ#•°‰Âº9|Ë7cËf¹ê÷Ó,uý^±¯{Ë A³c³ÈðÃÆ&ò™ïWÓ•™Ó[¸…SõƒÊf‡m]öX·×òq¿{å'\LÿrÄI`٨ܚƌ˜EÆ-ï–]±ñÿîë3‹ï…G{-4»”;_¢Â¤ ßøEoä—MýPúåj\ññ.FkÕº·E¹³ {D&’iÑ;]xË9ÝžG;Ï|Š®SßÅágÚ¶z8ûåN³Ã=§‚9]¡Îük§wQx_éâ{†ýDí—{@³ciú×|óÛVqÌTzƒ½þíä=¾»E+Þx¹³Ôô×z Ûÿhq&h<µ¤ãå0mÇŠlÔº*g‚§ð–Ëi;¥gaݶòÉ»·VÅ›-w¾GÅŠ˜ªOP7yVyvÌ–{@³c Ôºˆ§“÷…Ø,wd°Šu‘YZãä} 6Ë=°úž ˜ª+auòn°ÜÍ¿!cuÔºæ'ïËP‹Z×ÉääÝr¹Û{¶°(Öu²=y·V*¬ˆ©ú*ìMÞ­•{`ìyÂr¨uÈ2UîLÛ¡µ¾Ã+3¦ÊÄÂúêŒ­ÌØ,wKÏôcª…l–;0µn€Õ•;ånòéZÔ:”³SîÀ,¬ÛfiÙÝ`¹›yn  Su¬Å`¹}Qëæ™\v7Rîöžh@­c]FÊ舅u@¹ß0U‡”;ðµÏÌ3”;ÌÊ¿JÿRë0ÉZ¹ÛxËE;ÿ{ø¦=†ÿË¿ûãUëï>¾ÿDf`‘µr<ßæ¡Üãý©^µþ¹ÓýTýÍ›(wXv¨x_ë¯ÿãÌ£Üa\8ÿ  ÍžG¹ŸˆÏ/æÈ  Í~‹r?Ç  Í^‚r¿D¿ÚPëå(÷œÃ¼#O€šýÊýSx@Íþå^„~¤Pëu(÷R,ÑóÑìÕ(÷g˜Âs®¶Ákí)Êý1¦ðÀhLØÛQÂ#Pë½Pîõ˜Â}ÑìQî­SxG(ç¨õî(÷â)¼£â'øâtʽ›´â‰)A­E¹wÆBå>ßµ1j}&Ê},¾kµ.rŸŠÇ¶¨u)”ûÚOQî8qè‹|×§?F™*wŒ6ÊP¶ ußQ¾Êƒ‰*”;jTÔýÕ/îã¶Ä½‡Qîèã´’Ò:³½v\X߇ µ(w tU^§%XÞŒ“;ñie§(qÌG¹C@¾ìnË´ºmÛkú õ m(w¨SQ”[›š† ”;,(iä×Å}Pî`åQî`åQî`åQî`åQî`åQî`åQî`åQî`åQî`åQî`åQî`åQî`åQî`åQî`åQî`å}+÷_þ÷“àvrÜ2fî`ÐÛ_ÿüûz§zý¯ô–c‘sܲÿ(˜¹€A”;ðe™ÕÀ” %lLÏoQîØWèô^êüÓmþrÇvÂÄÍð ·âgßä\žrÇFÌOÖPÇïW"½QîØÈa²æ(úí–æ,U<åŽM…ZWØòCW 7_ñÇŧj¸žŠÔÒ$rÇîT½¼}ÕÚ¤Óii(îôNC †_ ?¬ð±Ü¢›ýåh‘–o¦Ž+n<¿ò™Âþ¾e…úð‹›ô¬Ê»PÞ#§sáÃÚQ‹üÃ÷}÷{fnÞ>mWû\¨Ý° ”; TºÆ}Zñ#æÂWõ¯ufåªPî€j·“÷9Z2[§ÍU¡ÜÒ…‘ð7ñÝ{ºWLºÛ¨cn¾ÊÐ"­ï«%øÆ{Éÿ}úKœ÷ƒi(w@‘ÌŽ‰ƒ Ýù‚(w@™UK­[•+÷¥SÛòŸðNÊó €~ùƒÞÒ£Ó`!§û˲æv„}®ÞŸÿ™D8;L RGBUniwersalny profil RGBdescGeneric RGB ProfileGeneric RGB ProfileXYZ Zu¬s4XYZ óRÏXYZ tM=îÐXYZ (Ÿ¸6curvÍtextCopyright 2007 Apple Inc., all rights reserved.sf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlÿá€ExifMM*JR(‡iZHH , ×ÿÛC     ÿÛC  ÿÀ×,"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ûd[)ppsC[#Ò´öT‚ÝpzסíÑñ^Á˜­jAû¹Óv¶¼‡op}ª3j_XL=‹1 ¿Ì8¥6㞦¶|ŒX~"›ä‘ïRë ö ìa<LP´ þUИ‰#éUåˆ@ÅBÄ$K Îpۜ䌟¥7ìÞªElÉH°–Ü1ž(úÂè/`̈ ²A«ÑÁòcëVà‡Ú´£iÁ­#ŠVÔNƒ>jøß{ö->ÎÓäâ<å†~éÿë×Êk‚Ý%{²æU…$òöÿ"¾•ý¤‹Ä>S»Ëh&Þq‘€ÉšùoV´’óUûC„H³Âã$_¯züKŠy^o^]íÿ¤Å d±—Ôé®×üÙÈ^êçQgO‘7c®~¿çе§LŸkÒ6{’8>¼Õù42RªÎ8ê£ œzÕ94×µ#æ, ð1€=yü뇚 $z*÷<»ö”·}gà–…>©´³|¹+±”'ŽÁŠgñ¯$øU?ŽáK­ñjø_û&áŒ7ÈÁ|ÂiPFò8 Æ¥}ƒ¡øbÇÅì£qk–¢Úi.Ü¢Rf'ã'+Ð<_¡øCIñu£øGÄÞ#Ñ-œ›½BÚU’„qÈ¥YÔíá‡' Š÷0yÜ(aa…äæ}ú->Æ(¹MÊç凵ÏéwªÞƒU7×$414ˆëòŸ(ü»AfQ’Np03Ÿ¶¼öÔ|¦Íul°ÞÆ’4\ìÈ À¾~f ½zn§ð^Óá§ÂMûGÖ4«Ý*÷溊—)tÙgˆm'#¡by8Ír2¡¶Ñ|é!eŒ³ymŒg§Êä3FeÒÇYÒ¬Þ½GB‹Ž·8ˆ•šFŒ’¼sN*Âéñ3 Eß6 ùFAÍu:o„5 zå®ßÍÓ-ˆÊ³FDŒ?ÙSÛ§'ס¯E°Ó4io<×ÖHŠK\ÞJ¡ÛêzœŒ ñ«ããhë.Èì+îy¶àGPt’é¤Ó­ îÁ2¿¦éøõô¯gÐü£éŠ$ŠÚFŸn ÅÈ9o§oÀW–ë?t›y–×öêÒŽ$¼™ÌqŸ÷r7ÜàzV]¯‰¼M®Z–¼¾š wáà·ýÚÜòXþuË^Ž>´o?u2UJ\ÖZŸLOáíÄ˪j¶Q…j‘ð:9ëŽ+òÏ⻬¾ ÔÞ!•mUrH3åÖ¾ »µ6°3‡$•y÷çÓÞ¾aø¢¨>ݱt/öøÊsÆúûÀGíš•ïËúœ…W'çØçð­í>ÚîïP·¶µI'½™ÄqD,ÇA’@ÉÀÉóXŠ¥§PªÌÌÀ(Ç$“€>µõWÂ2- ÂÚµÖ¥qóéæækˆÜIu!ÜÉdÈfeoÏÆr¸Å}ìë*prg:.¬ÔQ‘áÏ‚‰s¨X\ø›\<Ñß…½Ðî´ùá»x°’aa¹RêNÊœú›JðwÃOé~ñ ¯¬ º}oPµ…Z奺T•XB„le(ØU9KÁȾ|ø…ñcÄ^)ñu¶›§Ýi6³ÛÂq=Ô òÚ$…~R[ŠÀæcß|o¬jVžmBÛÄv›­åŽ6ˆÌÇ0Á„‰cÚSŽ@ÝÆkÉ­,D×3•—m´=œ=4tJï¾ç¹6­á-?Æ&?ZèvŠC©_Ç­i±L,Z%K‰<¥R²C£‘òðÎýdž¼}ûAêþ&HÔuË^êu ôøb ,¨ÑÈñZÛ0"M­äǕ粫`‘õoÃ/ÙN'øumq¨Aö•ýŸ—s%ü\J¨Ò™Y _•·1$ž„^5ñ/áå÷ÂÏ}‹á½ô~¼Òµïtx¡rf‚[˜^ ‰ ‰y;AW, YвŽG#ÄͤÛjþg °”“µ“·‘ã~;ø+à?ë+áÿè2i:ýþ¡X^ÞÜ?Ú¦…ïÍwq¸$ p#M¿*¢±Àpȼ{ðÆžøm¥ØoÕü=eâ[Ö¸ò#öqe‹K6ÚQ™P•S¸s«¡ø¡¦ørïTñ©n4ûk; i:ž¥p—‹s$·öGn…¥k©Œo½Û6ì^â¹{íGÅún£™¤ÚøwÃVÛ-t;}~x..äûMþuh¡L¸,òâÀŠè¥‹¨šæÕ-¦qÖÀÓ|ܺ?ë¡ùÇ<§”\ᙎNð‡•ëŽP{ÔRy “ ƒåàä(äœzgÛÞ¾âñ—Â'ÅÇHŽ[˽6êÛA’ãHP³1j·ÖVÖû¡B²m̲I#Ë<‹J(<-|a¬xÄ:óÚëz}Í¿“;[ ^&¼ÈuG# W<ý¥{tqª®¶t¤fE3"€¬@Y@åøàÿJ¯ qÉ0Ïa@Xƒ²JÎäƒýi£~>FúgùVÛ˜­ýcò˜Áõ…`µ’i›l1¡glàI®Þóš̈́E¤³y¡ëæBCŒ?Ò¹ZÎ; j–“·—–Î’>ï¸ ‘Ò¸%¤pýQÅÚHñ¿üO±Ð|w¥Y¼Ð¥ÀŒ2LÛ‰!÷6Œä׬[M åšÜ[°– Èëцq_’?¼FÒüC–(¦¹¹û.™fT¨eŒ‘Žã'¿ó¥ŸíyñÇÃz”n™âwµŽÏ[šî+{‹UtÃDcû;ƒËDß´‘†ä`W‹—æujÔŸTg’(ÓƒŽìýýdÀiÁïŠo•Ѐyé_Îõ§íiñâÃã—âéüqªêº¦› °$û4±Êá^5H'¡ÆWpd>þÕ¿ >*ø^ÎA®ZxgÄ.±¤úV©jïà†…á…xN“¡s*U-žV Ù÷`ŠíÉïšú~ÌXéžÓ§Õ. ž A'–fRmÄ"žrØ޼Wðׯaø4Ý+Âþ2¶¶°aöÖ£g ßJåË~Ï8‰Í·tg'5Çkš®…ý©%êê~0Ö”6ØWû c+Ž1‰JàtÀ÷=x¯ÌhUÅbj^<©?¼é¢ã#Ðuω7¦+ˆ´ /±ÅÔÞÎ2íÆ>T<ÄœzWÏz®¥¨ßø‚KZî}J}¡wNÛŽ=¿»¥C}ãðm£Ž=+Q"áöBÙrFr-ÁãŠnŸw§jvï+Xx¦†›güx¬±'O¾êp í]¸<©á£~[V›“·B}:›UL’WwW<ë^¿osœK°HA\Ügþºâ|+¦ Û‰n¢´Ô¢N²CˆÎ1»ûÝñŽÄf»¹´Ï3Å–,¼ŒðúõÇ©iÊúB\l÷V÷Xˆcs0ÝOo¥|µñ:@|ve " èr íÿ–žµõ„z\9«3àuQ€käïŠd¯€¯ãmþш:g̯¡áj¶òýL1Ëá<ÃáÕ¥Þ­ñ³Ã–V677K~’…-FòH••_†ÛN8¯¢üMâ©dƒÄÚeý–”/­ä‘/l¢YR-åKePÁA.  ñÏ$ùÀ;x®j 9lõ Ò-®dŠBY–<4¸#Éþö9i Z¸ó.ü;â7†âÁ¯ º‘õÚù®V÷…óÝe Àyvèñ*óEa>n¦\š•••óéK‡µ=ì£È–jˆ™R«?Pw’ ã%Xt×l®í¼A¡ÚÅ5¬SÝ˹®™T2…›'Ëóøû«ÏS\†æð¿‹´ÈüAý¥ªÁ¿˜Ð@Skþí¶(g<ÅNÅõPEk¥ûøãU¾¡w¤Å üZZKt¬X£~cCÈqŽƒ',G5ÍZ<ñtâ·G} rIN[&~ù|ñ¥ýÿìû¡j½ÎŸyÕ·†X>S P¶ÞÇ9éÅ|íûf^izç†ìÞ;]+W›O™Õt놆½•Q™"Är¥@™RÞY­6’?ìåáÿ>Ýþר»µRÄ|Žw)çî®'úWŽþÙZ¦ŒšÜVÞ!Õ ¶Õ/fMI—LÓ¼¨.DXI^uTij9j¡IÜ:gåaR^ÖÕôgÖbpÔãMÍuGÈ^‚Ö¿ %»û^—?†ã¶“VÑRÐ>¢³ÝM$E!c#)Ýä¸ÒE'ç¡Ð´k/ˆzuìww~ƒK’ßì×—vz©¿žFòó €vŒ•‘D™X">T¥ßׄñ7ˆG‡µ¯j)¤x“FVäØ%ÛÙ¥žÓæÇÁ‹|rÆYƒG½pÛÈà1UéfÕtOx†Úm'ȰÕu &}3Q¸Y­%ŠÍÎèÒRÝ‘¼È|îÝ d_CvÒ}úŸ5yâ)Z/xÃEñ€,.Íc©·‰ ²%½¬J!I'jÃØò4G{I#áÆÔ®ÅþøñKáG‡Vêåõ ?ÃÖe4+­.ê=FÃXó§Q<ˆ`‰Dr¢•C؈$3W§\ÙxTð®£ëÖþðWú¥à»–{æ¹ R ײ’Å›%JˆDqª»±nÔô\Ôü}¨C¡ø³þ[kYL·ö~!¼-msÁ´^Ä©0ÜG¸2¹&6Ú«Îq›¥^Îñ3¯…r¤~{jWšgˆ¯´»ä–9í. “8*ÊNàr=¸öÁèEd|«òäL×ÑŸ´£)øŠ—F·áËß Î¢ÒÖ[¼vR°óKó‚Ä´¯Ÿ™‰lÜ@ùäe€@ú+Ý…^h¦|ÜáË&ì;VÓ?h«¿M6Ÿ§x^GÈ‹‰%„ò‡š›M¹ùD€í9äžxª°xOã=ï›eâxP¶–à,·ðLnŒ$¨8+ €ØÜG^ÝkÍ|ÿ"ýµûË]?]Öµ‡ú¬ØÛcâ}*[?Bà9ê8¯¬ü;ñ‹À.²ŽçÃ>+е˜œSiwävà׉õÊ ò½=OeûI-“^Gç¿Çïø'®£ã»+‹ï†ž4‡D¾6Â¥ë–^d pÑèO$0ã¥~Cøçö ý«¼ñOÑ.þk>!šþ墴Ô<9qí¤ÒfÇšY có* è2N3ýY'ˆ-%`w¦ÎA¬gÇÞÑu³®é:l­G=ÀF*2IÁíÁ?ô¬©C A7Mî\êV›JKcùR_Ø?ö¾[«uàT£d~öËvý¢µô¯ø'÷í“.¡s2üñ“ˆ‰…æÕ¬a*ý°EÁ!‡P{Wõ0|uá8®ï£}gMì&?¶3JÁæ.äÜǸs×¥0üHðSÛøbuñ€ðøÄ~‘o®¨æ&˜-¹“3ásò©=o,m%ÑŸ,ï±øã_Ù«öÀ¼øk¡ßøËáî« Ò4ÈôÒ‰«Y³¸T“P¸  3’ükåí{Á7ZN¢mü[â_ iÂÁdÓì.ÿ´n÷ß9P~²qŠþ–|kâ?‚¾ˆñ‰á{ßjz·‰®9Mį& z„Ê@ÒÂÚu;ó˸Ú£gM´“ñ5ç%QëùøgàWÆŸ…ͬÛüHðì~Ôo°2ßEr—+`ì¦68Á*9óÒ¯ë:.³cfÎèÍ*˜l!E~‚üpø¢kôí-ìï"³°²ß;§Ùî<Ã’†-”# 9#¯5¹·ÐµÝ+e½Ì3À1•Çâ3ê+ò$̾«šT„cxi¯ÉC‚Ã{z mëÿüü¾¶Ôî&rÖÒ#'h8ïÏ¿ÿZ¹Ï|ñ÷Ä>­áH,VïOÿa©»G ËÀ`C†Bw€È#"¿CŸÀzEåì3ÉdÂ3„Bpn 8è¹ïߨs\ÿÄÿè?|ö›©,þÞÊaÒôËwPd ‚Y¦ysÁ< ±¬0•™áØÍε´(²çž£ÔÕÊR•6Ù54‘ïvòàà까õÏüj†–² ‘2z`ƒúÕ±Ž84¨ãb ‘‘Ï\½*iŽ‘c6zcÜçõ÷¯•sÕ®ìî‚0õ9íôèI %Ôžsƒ^_/À?üIøO6¯h–šF…=Ò=µåÚ3µÈNR5å—ý£éšÝñd—7Z]ÄH%•éžß©¯Ô3N~i°¬ÛÃñÄ‘¨   ྈç*0Ÿ.îß©¦ UGÏ´_øcðºóáÄ_„>6‡Ä:T¶ZÁ´·,Ò+J˜ËFÑ7,§”$ûè~ø^×ãGÅ_jOq¤éÒHÉö­´áp² Œ’<¸”«N{€7×ëŽ<£ë¾¸·¹¶†S$e ¼LCï_”¾<ø}㟀¿ƾ´½½Ò¢”§Ù#Ï>f>ëcÄcOC_ODª{²ÝìÍñ™L(ÇÚQnËuú¯Ô÷Í'ö-Ô5»(u 5½ÝçD;J‘ù\/! rÁz Ø8 שIû&øCTÕü9uãm_P×õ5ÂßÊdÙöЧ…eˆüO#½u_ ¿jë¿àIuhbž @×O3±1Æ#ÏÏ!r'°«*øÃà½RSÑ|oáÄh5yuh—Ò{ˆÕI«6x,q Êñ‘šñ³ Õ!ZmÜíÊÕ'+Í&ŸÜ}G¥éúFöt¸‰m@¶òãò@ÙoTP1Èâ¿9?h«}J÷öÀÖ$Ôµ­}|*t4‚ÀÂÏ"Z{àtY$X×g$ìbT¨b=kâ'í;á›_„zµí‰Y€Òío­® ™Øìųr¬ˆXvÀ žEsº¿Š¯>+|:Ó´›¹< u¤[M 隤:IÖmä´–-©•%Gó>_;wg«‹ í)«òißúìz¸ÌE*忽¹òŒš¶‡i¢x¿KÑ<3¬øÿNC<:Ìâm%3KÉŽæ-«‰¹_T1R1ŠÊÔ­|X,ìš×M¹Ód’þËJºû KÇädë•8Ø%”:Ž“^ð…厧«ÝÛÜ®§á±âCÐâÔZõ&”Ê]„k˜"fŽf”¦@*€çWûBÚ/Š:ö”£Äó}…e·GÌvÞj$“}–âäÄãˆÝäªrÁ M{ž·^{_{>qRÒÏñ9[¿x|jzå½ÿ‰5kOëD×jÔ´x´Û;Õ’P|ˆÄ¯½Ý ±v+y‹Ð:-95Ù<â;K›oø¦ËÃ6ZC¥A “M>œò421gˆçò™\/¨ÐÞxkR¸µÝ/Fñt&[]?@ÔmÚÞÞ=F=‘%¥œŽÏ!q<ŠÛ À‚˜ÔÓu=kÃ:Ψx2î{Àeïb—ĶP¥ç#¼¸.¯I-XÊYÇ棂 ô©¹oýÁ0’‚GÎ~,²Óôo‡ƒJѼ1coc}agw>·©è²*D$‰”Ml•˜àƒÎ8pIó;ÿ¬8 Œñ•ÁÇn;}+éûýSJÑä{(u_ê±ê.Ò»xŠDû<ÊXåªÎù N3´×›µ‡…d‘žKmå‰8$w®úu”[‹9å”ά#R2Zôìz/Š~8üQ¼Ò4Í'ZÕ´ÝOH˜ÍZê¼Á#ŽO-Ì™.9Ï=k¿ðGÂýNÇO¹ñEŸÅ[O…‚ İÒbxîäó0Š?˜F®‡äô®,‰A¾Ò´ÝYа†GtÊ©9Ú2: ¶×÷qEÛè«d(W™è0Ojù,f>s‚¨ÿà-B^ÇÚ:ÄßÚcáö‘æi¾xÒÖɰÖïTzo*À·â>´_þÙº¨Ô¯äø­ðæY®áÞÙêo< ¨! %[…övprs_$ó]ZÉ ËÜX¨V*–>cƒ…ÝÉÔâ¨Úa¥F¶ÚZ6 "ò÷Ì©:óÔNqøÕæaùµöÍ7å§ëoÀôçR:5§Îçè,Ÿ·‡õmPë:g‡ãÌXÈ&á„Lcß·t[¶ð]Ï+ÉbNkgBý·“RñW‡´­n´‘R-Cì rºb…Ûº8¢†+ò€qÒ¿6,´:mFrÂÞò¶ËäYŒ·mÇæj…žƒ§Kw:_YIk”ˆ%‚gºç‚Ã#¨´¡†w»z|ÿ]LÝihÓ?z<ûZ~ÊÚÖ©Å­|j›Ã2é·Ì¡uÍ94ÈïOÞûEºÛщ'w ž£5¹¢~ײlj¾7è?ü+âëÏêZÕûYÏ5ͼ‘ؘD2Êò4Ρ 989¯ç³ÄÞŽëÃ:}‡†¬âµº†âInµn%Ü# ,ErT<‚0Oz·c ZZ|"Ô´«"×Sñ%ÊBÖzÌ“4m¦È20|ÐWåà`ò8ßàU8ÉK~~fÚNMJçÚ_¶ÇÄ?ƒv_¶ Ï…~Ol4í7O„êWVs$¶­u ßåÂÉB&ÝÜ‘— |7©øßH,«ks<‡<–P=³Rk¾Óõ=#Á¶ÚW…ôëK·uÕ®b‘ä»—R“` 1ÉùÏ< $ÐíÝ—Éðç…íöÈ2Û·cÐü¼©ô®ÈUÁÓK—ô8kA·r/üeÖ|!¨ÞOáýr}9¯ 6÷‘Ç/îî#';z0Ï#Óœc&ºËŸÚkÆzžƒ¨h×ìm¥ß‚.­1˜¤ä„I8sY1Ú|ª±h~S×rذþ•z6¾‚SKðÀbxÙ€?ñÚçž3ÿåÝߪbÒ²nǶ|ñGŽþ%É£YÝk>&ÕVh`±¶2¨BN þ,N95úÑð§àõ߃|%i¨ø²êM[ÄS®÷ 0[>èï ÿäö¥|éÿáµmKEø½y¨XiQ_Ãya ³ÛDwòef˜£<àqë_EþÐ_4ï†ÿkðw„. Ô> È„Nùß’T«HæR§* Ü`ÃxÇ2Æf¼òÜ%;Z×~©=ú$zv©ÁJæ?ƉzOë tÔë,¼„Ioc/)d²ÜËŸ»Þ~øQšüØñ}þ¹â?^ëÚæ£y©jWO™%œÇîŒ`*€pJÓ¸½½¾ÕgÔ5+©ïïne2Oss)’I˜ž]˜òO¯ùŸ¨Oö”HáVyî`§‘_Yä”òêvZË«þºW¬ê3ŒÔ>'Ü|!»ÑukinWU»™ _g+æGd³>w$ÖmçŽâñõûk‹©Íª—q ’LôÚ”ò=kñ§Ãxóö€?`¶6ú"Á ¤zÏú¨¶«3¶Ðw¹ˆã©íšö|µð—ƒ/]ïdÔ/å`òË"\)# ¹ÈdóžOå÷ˆåÔ(¤¤½«Ko3†4«NM%¡ó¥ñ?Y´ñ¶µ‘Ä+vÂg1”+µ ÈÎrTžÇšôøŠï\ðdz´ð, ùi6rm÷³Æ;÷®Zïá´|CÕõMJE¸³7ò˜­Ld+e²7ŸN[è uï A£Ç(°@,‰ä/Œcʽldð“ŒU5¯s‘9Å»Þ%ΊT’\·'•cÂebÔ¥u]€Œœ\•¬ Žpå[ºd¢;©2=Àäb¼ªÔ­—SE'&™íz‰{ƒáåýàIüë}î̈ìw²(ÉÏ?翽pZL›Ùçb¥êy8öÍkuË x-·ËŒÛòö¯™­‡÷´=*nÑ*^ÚM6¢ÙMñ,m$€¶?¦˜¯Õ9otè<§/˜‰#ÁÁŒoùJü®Ö~Ó§ønùçdiæMжáH,F{d÷¯Ô?µé:ÇÂ].Øc»O*ß© Ç=¹÷¯¡É½öŸEúžžR”§+®ß©çºÜ’ÄÆ]Ó~õàV%ý…ž±lm§Š)YÓ2+à€xÇÓšÒ×4=Nɧ“N–k»6ùͬÒnqþëzqÑy´ž(±Íö©&´‘Ъ,Êcçî“ÈçÕì:üßÐúº\õ†¶<ëÆ_³G…$Ó5ëÛSm¦+Dv]„„F XK•Uí;>ëƒ_,x{ÄøKö{›K½liº¥Ô©¤_˜$TwhÓËbÁTœäƒ ðGµh§ˆ|6÷vúÛéö:Ž©,2øŸÄ1+\¬d|Î$´ÈÌ0FìÊ£¸í«‡JÚî|m*ò¼•®ÖšEx_â^µâë=/Að‚×þu´µ=AÊOo’mÞ¯0ò¢yZF˜ Y›$*<Ö¼a£x~o i–>6·Ò$¼kÛKÔãšTšVm±˜áy$F‰°Å£7(ET{Ï\O®i^oì»KUÓ庵µ –Ío»,òÌ̈Îâ Åv©¼±Åøï[½Ò¼I¬h7׫¢ióÇ.© #+]ÛÉÄ$2¸Ç›çœ0³–Éf®:teÎìþ_×ü1ÕZ¢QI£Å^ñE–¤j†ô;Í?T·d‹M½ÔÕÚkH|´YwHÁpdx¦“$"—ܫƾðgľ!}JçÃí¤Û=µªMwqd–xc@Ù_$#ŒÎ<ÖûàŒ.OÒ| à?Š Òõišž·¥·ï¬Bµ³FÃÊXÕ²©1åðÄlœcè .ïN[v²K¨cœœŸîŽ ÅsÔÇ:K•-O¢Êx~µíj½VK¯ÏïÑ“Þ&øw&â–^Ë®j2Éó³ü¨ª ØŠ;(ûd’y5Ân¶ˆlbEç…kì?Ú£J±Ó¤µ×4ûëYPÑïï_Ÿ®·œù ÜžAÅzx)Ê´9ž§kOª©Â6GÙ1AlÄ T$vòÿ^­ÇöM˘â$çëŠþÿáÿe¬Éøeÿ‚T¥±Çì¶ðá˜#¡þÆN+çeÁUü½<Á?€þnBÚƒ¼yl òZ6ü±Oil£áãµyù•‡ÿ®¿¤ûþËd¶~ü3'çFNkñ_öÄÑ~x[öÆÕü%ðßÀ¾ð^¥H–2[iºzijN4²ÜŸ1@>‹^fcà ¹U½Ý¿S¯ŽúÌÜa•õ>b–çL˜â&± NsŸJ¯)²ù³=ˆ#øA?áPÞO§€õ«Åµ³ oi4É!…2§)qŽ1ï\×À}v/~ÛÚW†¼`–:ÿ†®`»‹ìzŒ¢Ò‘m÷£4±F\ÊÄ I c"rÞ©‹Rp¬í©xìjÃ8©Å;ö:‹y- d³Ý”ìÝšËn 5›9äÇ…z'íK¡Úø'öXðo‰<¥Zø~áüO6›{}e§@å~Í,ˆVfw9LŸ” þNkàíâ>¿iâë;­Zþ]OM¶¹Š{›C#í¤ŠòG¼ׯzôeÁX‹ÿ~?äq,ö¾êÇh<Á…ˆ“ÐÈþ•X¼™Þ @99ÿJþŒ<)û'~È^*øu x§Iø ð¦m;S°†òÎTУæ9P:ãðjßoسöP¿û>ü+®…ÿ=Mt. kþ^þyÕ/å?›(Նɯq€}ø«BC»sâ2§';Gô¯é~Å_²rçoìùð¨}4ë„øû>~ž kÞ=ñÀÿ†:~¤ÁæÎÑèòJÄíHbAËË#ˆƒ–fR—IÿËßÀŸí˜)ù1ð'ãM߯‚?ít]òx¿\¸´K¹e š¬R«ÊÙêÃwȸûØcÀ¯#Œ\Ýjò_ÞOsq,%ÌÓ¹yY˜ä»1å‰'$û×Ü^;øsá{Oƒß uóðKÀßµŸÛ_^ßèº%¸aó×ì«9ƒ2DT> ]ûö’1\—„|<©ÿ k~ð×XLEG¹¥k¾öI# ˜•Y©t>_º™^&R1†Ûzãù ʇQ´±¾7weŒ¡••FxP[§Ð~5öRxÂÇæ?‡4É ä8ü2ðÕ´Íá-he£•^ß!ÔŒ>Äë†O-¥"õÐo†|ð‹þÄZ”ÿ¢¼ÖâÒZöî+@…äÃcnnYWsœb¼Öí|ý+@˜v‚T~ó$žHê:{ׯ§Ãï¤aÃúh‰DgŒp洓š+3±Òí‹1É$ž1ëô¯ýVÄF¤¤ës]Ý_§ÜwRÆ$¬ÑæŸ5ß„þÐõíwÁ#ľ:‡Teiš%dŠÚHãd?7˘Žbsô¯|wgkâjºÔpÛÚÍ©jrÜtPà*aN 9Ç8¯«uO…Þ Õ¯®šûÃ:UÓÜÄ‘Ý#'ÎD$¢¿?0S’3Ò³¿áVø'M·›û;ÃE¯˜û¤Ù,@À$ç'Šì¥’ª5]XÍó=ïªùk¡‹”e¥´>Õ<9älUR޽¿YÖútð† ʪ:îãéÖ½÷㆓…¦xb]4Ñe¹¹nZÞ5Ì€"•pÚB°Ê’yk–Ï9ÿHÝ ZŸðO‹_ |Výu{ïéV*ñ6‘âYl®.®â_5bx¢žÂB¾:uÍ~„ÁðSá<´“xÃeÇ ýœäzÿ} ¶ui©6ޥĸe+Æ2_qùÿ ÃLm]®4ÙçÓî2~kiÁžÞ_+úW=ã‚·þ"ÑΑ/‰ïììf¸V˲œäœOZý%ðgÃëø´êÓfŠßÄ0[´‘±Ѯݱðr0'=Ms>äøÓOÔ¼=¥G‹%¨ŽK[F%Úà1#lyËnLçh?w¥rÖÊaì½¥¶íêzø+öµ•?ÎßðOÅ{oØ?Hƒâ$š‚\ê×z4 X_HJ3mûÅÔ‡`Üã×"»Ísö[“PðuΘ|A©Y#ª¢LÉ ¯F\0Š/32mPNÜìkõ+ៃ’þÇ]ÔüM¦Ë5¼—Ko¥Ûß+Œ¡‹€@Àç硯>7üMð¶•ñ#S›Ã·–^ð®”ÚK¿0EÄÈi2Ùã?*ã¨ïZ}Z¼©)ºŸ×ÜsWͲ¬5iAá“óOOÌùCQý‘[ÄÞ/Ô5ÍKÄ:—‡Åí¼p >Ô ÈTT #I¹¥bWs3u$€ªøÓöX¾ÔáY§ñ4ŒÓÙÇÜw–ÉqÛÄ¥Rvi2V]¸i ÎÜ“žŽÚÂ0è·Z¬~=Óµ á–ÒíW$Žzž½«ÿ…÷¡\ë£P>5Õ-Ù›äI´ù¢‚í#×­qÕö´þÝŸAÒÎr©«GÚë¯üOá¿Â'ἇÂ:Õô»‹9~Åyg#ÐJ™ù —Ùù@ÈÛŽ‚¢Ñ¾øÂïÄ:¥—мkujm/ö"X ·ÌOÎI9`ÜàŒõúÕ+ˆ>—QmCÂì¼zóyóOýæ=ÃùerK ‡õÇÃèoíãßÚk:ô©-[R–9üQ¥ÜÇ©ÜÊÛwElðyJPœ©|¶@ãš9{¯y:‹Ìöiqž hà (ǦÉ~gKñËá€|/ð‚i.nç¼Ôå [½íãÈä“Ûq8ü+ó°è¶ #•bWwFE}©Eñ÷ÄZ¸Òõý[Gñ[^ùbîúïO›ÊEr¥v*g€7•ú÷û#þÉ? ø»ðçÀ^)ñ…õýýÝï‡mö¤ „!m€¼_)`Ä —nدc/Âû;Â2¿¡òùßPÆÎ/ÙmÞÇì¥Q^ññç5â¿ØøSáþ·â=JU‚ÃM²’êyàE-úð?þ^þ%ë7ž0øù©x‹SžI®ï/®oî]ÛwÎî[ô ¿p?o¯Iá?Øö×B·.%ñ6®–.ËÆ"‰á×?íÕ~„×à´Ånµ9ÜÛ!$žýN?:ø>$ŹbãM}•ø¿ø™öíþ‡“ŸÊø„»$~—þÕZ;_~Áž#ÕUà–OÙΆ 8ÜìI¦ )½Rh,F푹 _’‘HcÔ¢r/F 8>Çó¯ØßÚÏûoö(øéö—·Ôd°0ßGs$‡O–KÁ‡6ˆ¸,ç²µH ô¯Æù×ÈåŽ}ñ_G5fxPw?¬ø&Å?øXßðJ¯éWÑ^k^ žoÞ€pë'u©#ý¨<}+ôF¿žø#ĵøïñkáÅÆ¥¶ßVЭu‹+zkyZ Oýs’Gû¾ùýóñŠt¯|8Öø{áOÁ/øÂö1éú>•e´1 ÀÂ(QïÛ¹>ù94ñ¿í™g^/ø*±ÅÀ £ ñŒWȶö¬S°òq_hþبÇÞÏüøÜü~:ù"Ê’€nî+ÄÆFõYÑ {¨_:ÚÇM–êòâKhS|²ÌáÔ“À¯Ÿ¾!þÔ ¼}öMPøÇ\Ïï,4Y„>ÒÊHŽ3ìN}«âoÛâ^¥â_Ú3Tð-…ËGáÝ Gm<1 yqµdvg r…Œ‚qœcäxá¸UU¶.:/~Uµ ’NL§Y­Ó›oÛ«C›RX®>ëºu¸8yMä2°¡Açéšú[áÆÏüK¶-¥ËöyÑ{ ä+¡ç ŒõÇ?JüP²³º ,O&$)$Ÿë]‘©x›ÀÞ+ÓuÝ*It­NÚ]ö³¡ee5¥Ë´6ópn·Fs€QNóž Wæ™[ÇR8ÁS`r:z×í‹.îìæ¶Ò-îmmŸ[Ón¬¥k˜Õã1±ˆ0eaÎTž9Å~.|HµþÇø…y§ÛªÄ¿—µ pÎ:W^]*|Î x­~oCÓ“‹On‡UàXÏü lNÙÿ¾~¤iZW™àÍ# ¿ý?ž9Eü«ó;À6ùøbÌF6'ìkõ¯ÃúoüRzHÁ Öp“ÿ|/͘Þvõ:pÒåŠ<³XÓXø·L·íT²œžÜ?Ò¿<~/xRÇÁº·Ú÷ö…â\º,Odcy#•š`á# ’¼õÅ~¥jÖ ÿ Î 9[ß>Å’¿-?i¹­eý¤¼‹xš±é¶Ð;3î23gÿ=yæ·ÉáË‘ôýÌçÍ/%Ÿè~ÄÁ1SÖ¿²¥}¥ ºý׉&þß‘ÎÆ5E@ì¢2¸õ,M~°ZH‡O7Ÿ¥~DÿÁ2t½;Ný†5­fÓiÔõ_ÝI¨K“òýV“ðEÝõjýkk»m3Â&òöXa‚Þ$òÉò¢"©fb{?A_I‚_º |KøõyáÿxÒÛÄ×zŒw6Vvw gtöá–XáG$Hb¨ÄíÉìkéøeG¶! "ÊúUÓQÙ3{4|qûQÙxþÏöKñAøs5ôÚÅ K››(d»º±VÍݽ»6‘â'o ð@#9¯æûã×Ä›ß^Yxb×ÃZÎo¦H³ÜÇzÍi!rŠHU$õì+ú±ñûšˆµ·œDfãªÆA>øšþJ><Ùë´gÄÝ3Wµ{-[MñDº}Ê.á¿ÉiÉôtÙ&?Û¨ÄCß‹hiû¬ñ­Cê*“A™H*¡£Ëg¦wz ·’èonï‰,ÆÉUÎc¶?¥qú7÷>1Ò`´Šææêk¸¢‚8â.îìáUUFK1$I$^ƒ­é:¿†~2ø—Gñ>áÍXÌ“=–¥ZÎ`ùr`^EyÙŸ-L=­ªÔôryòâï¡z}Jét†+±¼´b»ÁÀýk¢ðGíã‡5Ï ørm)nõ뤹¶¾ŠA$š_È#p@•°ÜN:àô¯7ÕµKx¢ž(ï- l ~ýxãë_]~Ç_±»ühy~)|S–/ þϺ=Î¥©Ü\}5´Œ°šîÁŠ(ö“,½€*¼’GW‡\­´zåg)FgEû~ȶ?äÔ¾?|vºƒBø%£¼Ú•ííû,ÛÍ —¸-'mWæó$|匓ûû;þÒº?Ư†¾.Ö<'¡é:?ƒ4OáÿE1ólmííšJ¢=ë.å@>T(9¯ÆßÚïö¾°øÇÂ߆SÛxkà‡‡]mllct„êÒ[³$sá‹P¡LQ7'ï¸Î}·ÿÔP¿°§Š„r®Ó㻣€›±›+É÷ëô"½byKCÄtt?vé®ÁW&YZÅì:v}¨N“km$ò@QKO¥vÉÙ]˜ŠŸðPŸˆ¿ð“~Öúwƒ-nž];Â:aóáû±y8ÄöÜ©åŒöÉ¯ÎøU›Ažd;+>9Ç'5×x»Æ÷Ÿ¾.x×Çúœ$úÞ¡qu–B»P°Ú¸>Š6û…®[NOàk™X’+H~œãÕù6?ê×^ïúüÓ04U§Ù?ñ&æ8¼  Ù£>ß´Ë3s¨GþÍ_.Û\Ëm »·`“ÀÂxÏûQãŸªŽ•ôÅ«ƒ Z<%€h¬fs‚{•ã_:óä˜×ÈWóþµúE` ûÝþ'Ãç.ø¹y[ò?c¾84^"ý›¾8ÛÛËŠ®n|$šÌ—¾d$§–!•œ(ùU£) ósÈ5øÛ6>Ñ(#cÓµ~Ëè×ð•~ͺd:™›C‡Ä_ š‹,Q¥îtæÌ  ¢¬›QH HqŽ+ñq\äùHsŸU½Ê‹DxôúŸ]~ÃÏÂOø)×Â\^Ïg¤K­ 'VØ~Wµ½_³°öD­ÿÀ3_ÑüJo/ü;ÄGÂ7VöÖ¦æÖå­×ÙËaVÝ@ÌÒ4¦1å/Ìàðü§ù²šx/÷[¼±ÜžÝã$2ÈPŒsÁHÇzþ¨> ëž+ý°u†~-ñŽ—ªh_|§ÙÞ6Ÿ"´CY×E¾É§“‡‚2ÄFœûÊ1Í×Sâßø'÷€~+ë´•¯Ž<óhÚ“rÖ¾!ÔoT4Zš“ºKb„ °,ÇÌ£p9È?Ð2«¥féú6—¤¤ë¦XZié4¾l«o@íŽXÞµ)F6ê9JçÁ¶üž>–WúWÊMhÓ Ä¥Øú2•}[ûbÑ Ì,šs­ó0ŸL{ ‡ãgµÔ>sF´ò[M*ÒÆ©÷P úW;ãOø«BÕ,މª˜–XÕÔaR& ¤à’3œ du5ìŸ|s«ëpYØx’È<Ñtwpxd=GNª{Œöt••Û=|S§8ºJ6-~Á¨Yø/âFq#=´:…µìžˆdŒ£íö&0~¤šûö{aö}à›±¯–þxãá÷Æ/XÆÑ¾“­<¯§F©–†ÞÙL·|ùûq製}pë¾Ãi^3žÕÉ^7¨Ï™ÄR©BIKª¹óÆMB×D¿ðÅÝ÷ËotÉÀc”ƒÃç  üyø©p/¾*_].ÏÞ0s³îüÊÜ×ë7í+á-CÅ6~ŽÉüB‘[[Ý‘¤@’ÈQÞä1(äñÏù1ñ#cñ+R±”-ÓÛÉåfkª Ú¯ Bœæ–®Ç §'-v=Cáä¾é,GKOÔ×ì&…d†´ÎzÚÆ·È+òKáêøE¢o¶éŒc,kö7O²/áí9•+\÷EgR4ÙÕÚ+Sо´⥚©%Æ—.}Æõ¯Å_º%ΑñŽþK‰x¯&im¦ÞXÈÛ³Ü>˜¯Ü›«V?ìËt¹w{åÖ¿hÉôËýGO’Êk{Û¨o.c×;£Ëž{{SÃÓTå/1W’”ú7ÿ½ñ¢‚¼<è&°Õ#¿¶O"áTrí¢=~ÔjÛ!,΂D@d0Ï úô¯æóþ «¯Éiûcø‹ÃbR[_ðòB"9ò.Œß‚ÈßDÚµá¾HDl~#·jõðÁ®ÇœÛ±ù™ÿ'¼×t_ÙßÁº÷ƒ¯õ ]Xx¬Im¥?Ù¥³o³È#dxðTï`pr í¿Ù«âôÿcÿ‡ž:ÔãÔõmohÃJl„…àÊsŽ„ôòüYðº~Á:έëZm†µs}Ƈg<ág½–Þdyêì#'8è |]ûþÙ^øCû0Ãà/ÿÂe{qa­ÞKoý‰¢ÍxÞw2©Ü¼Ì0{—%J»fÕ¿÷×:|°kË•LŠþkñ'öîýœ<]âï‹Öÿþ–ºŸS¶M/_Óm´ï?&3+Gt˜–ØJHÇ XÎxÁ÷£û|KpžøÆÄ<è| pÒ9é’ì8ú úáŸÄ¿|sø}q©xsûZÁåY ºÓuhZÇU Ú¡fÞ¨ßÁ&0Hã¥UjФmËŒUõ?5ÿeOø''Їм ñkâ&²[KŠ{MgGÒ4ÆÛ34rÇ42\3ò 2bQžÅ}•â/Ùãâ†hˆÚßÃÏÙãàïÅ=7Å¿ö¼úÏįK5ø¸tÃÅIm/•œí@ýèäþµuŸÄwXøuñûí67:ŒÓYÙÜx«VÓ䊑™#fFxÎÅ p qÀàߨÃö°¿ñÊGñ?ã¼5¤¤þdòè¾9Õ/¦»\}Ôv+_7RÀœg8¬•'È”–¥ÆêZxxWà?Ä/ø¶-'â7ìÉû2|1ð|ŠQÕü;*jZ“ÿ, Cf‹1ë#´g“‘µãí?ödÖ~ø+ö^ø3©ü"‚i¦Zx‡Åk W0(i,ã·hÕ Â2OÝóÄÿ¾ |RøE¦é×zoÆŠç‡n ·†âO_ íä6Ù›‚?+g’1Ö¾8Ö$ø¦.Y øÁñ¦Á·˜øyñŸÄZî¡?ƒg’ñ¯¢k·0Y¨›ç/-£  »¶ƒòã°¯¥48ü\-¥›RñÿõÛÓ.ï´êšõÅÌŸt ¹v'ÓÜ׊øÓÀºæ·ãi5 ^â]nåЄžêW•Õ¾ÔËäàzgÏC4…LCIèLéË•\þÊ;WÈÿ¶·Ä%ðìâÆ†Q£­Ät›\> UŒ¬>‘«~uõ»}Ã_Œ?ðSMqñ‡Á¾†à›M3C“Q¼‰[$òlBG¨HÏàÕéçUÝ,,šë§Þ^UGÚbbžË_¸üÑ•~Íðõa µþÊÄcŽ£<~U™¤0‹ÃÑXK­²¯óük[P`út `nƒ 8Ï ®rÖf’©ÜÁœŽOõü«óx'(KÖçè3•¦Ÿ• øÃ6ÝR>FæÓvœÈiN?AÚ¼&šî ¸=ëÖ¾.ÜñÄ;·yP[GÓ¾ ç^<²@Ù<õ¯Ór¨òá)¯#óÌÊ\Ø™¿3öwá$º‰øðP¿q­ésx.+xtÝ?MVœªDÑÃdpK6A@èp1øÛ¨ZI§k7z|‚A%¬ò@wŒ7Èìœûüµû#û(ÚÙjÿ±íNú;¹õ6K»H¤7Óm„Etëò(`«•8ù­­ø÷ÄŸ¶ïÄ[Flì4ÿê¨]Jçe¢ÝHæFn¼¡{’xèqíV…¡y~óG;à»(|9á[ŸˆÚÍ™ž iͶ‡lùCuy¾ )ÎO?6{­FßðIo‹rø÷öñ„õYÒ]sÂ>$š2|ÀKÛ]ÿ¥Bvö ^DîWóoñ Æ+âMr;Mƒ´Ð"Ѭcʤq̘þóòyÔµ~ŽÁ"¾%Iáoø)%Ç‚'»H´¿xr{O)“™.ìÏÚ`9Ï÷äc•ÈjPtR)ið/í’î¾:ð*¨Èk+ï¸ëä‹ ˜dsü«ëoÛ%±ã¯÷•Î?ï¸ëä@EÊõ3XÎfr“Lüëøå¦X赿Šì¤ˆËg|bÔ#CÿM×,ü ^¼wP±·}M±LrK*¤€#PsÉõ¯¬?kO´üãDýâ¦^ÈùeF2EŸ@U¥ü«ä-TÛÿÂyw¶÷7hü¯’ãäÇoʹ9-+W€¯ ÐM«³ì‹•ðî¥ðïJ‡V³Óî.m Œc˜3"ãý®=qŠô/ ¬EÙ™'·L`õÎ|Ýá½_v“žmõ½UHFµ@ÞXì¶ß§ëÿµeƒJ»…ƒÃHT—ïGìG·5£vjçÒi~rkšéMÌÛ-csíó>=3ògéí^¯"¢Æ«Á9Î+™øejö_t…˜2=Â5Á\rœ¯þ;κ§Œ4å²J©À­ÒO¡ð9†)ÖÄJWòûˆÿk‹“ü(Ô|si¦.ªúµì,tÐì жï”|Üœ`×å_u(õŸj¤X)râQ´ð *’?3_¡ß·w‚õø‡áDLEüˆu3žƒs@Zù Jø©¢‹RÕaðTo#ÛŠÖ–Ý´µvü94¥Ìv? 7ÂO Ͳãþú¯Øë4XY¬D}¾QŠüåðÁo é6NŸ<Úm¢*‹ÛÅû6ø-3&¤Ó\}²Ynî$FeÁäf–q_®iá»H’k©™žá£*ÎÎdrbíÛ=€òæ­¦ÚÏ3+(±ê3ÆkÁâÏ ×[þ†øy)Üù#öašo€_¶N‹ãyü7/‰JÙÍ¥ýš;ÁnP]¼*g U(ðG žköïVøçáo³yWz^½m#n$Ʊʃ Œî ==+óPðí²ëzhµ ·2ŸÝ?Œ6Wõ¥ý¥>(ËáoÙ«ÃÿÙZ̺î· Irðáe6Šœ+Ÿ¸_zE¸r<ÂF¯?+Í1“W6t`Ñâ߷Ư |vøµàø ^Gð¸Ô-õW½Hâ…îfòvyR*À$R‚xçŽkå_†ßþ.|Ó5ßø@uK;mDÂÚ†ý.;å,€ª•Úăƒƒ€{t¯¥ôú'‚4[{]kF²}jæÝá,fŽ3·LdñµT¸¿ïµùÕª[]øÅZ¾•æÜZÍmu-±ò¥(J£°ÁçåÁüs^αgº9êF0>˹ý¾?j;H£ó[2eÀ8=¬ëÍ"; 6Kñ|Åk[mÄNclÅHìFÓÎAê+½= MÚéŸÓ?ÀŸÛà¿Ç‹ào Mâ­'Äße{˜-µ3ìéyxó<·eܧiÁ ñœûJ."˜ &1óÿ  ñ&½ð«âÿ„> øsÅŸ]Óu§ƒì:Ÿš@$ a°m‰º9ç³Ô ýèø3ûdxÓÆ õËðZK߇zn¦lµ}KÃ~+R»±ÚWÌm(Þker1r¹!JÑVIûÅ'u©öü‹þø‡Â7Oå[êpbÖm ì‘Hxߨê+ñûÅ^¸³žhfˆ-í­ÃÃs<«)*GàA¯Ûoìµï Úk=ݽþ$"æÎxœ2˃‚ê8ÏéÖ¾ý¡| ¯Ž£ñU‰_²k²æQ„¸UÉlÿ¶¿ªŸZùÞ"ÁûJj¬z~GN§Càˆ¬C)CÔ­zw…ןô/ßYéßj‹F×ÛKi è‹æ¶×Œsÿ³)xeŒ·ä36óó¿ö^™–Çn0? ðr*1–&J]ë»#öjwÚ¼ŒÁUFYaÜ×óûKüE—âoí‘ñÅêð\êbÆÁz…¶€ìÿRßð*ýïýª¼{'ïØ'âOˆ­nVßQþÎû“–Á\ºÀ˜÷ÉÚ¿˜ûyšãS’IT”7¯·Üp þy¯sˆªÝƵÿ/ÈìÈ©¥Í>ú™Ñ_î:„0‚böíYâ.d˜FrËZSH’k÷°VTíÛè ôü«'GœÜÍxÄCÛòôɯŒ\Ê›±õ®tñ¯ƒ¯õoꚤ׉oi.®öñ~ä»·• D·P1óãð®p|6µ‚Õ®/5«¡Às ²Œdt;‰9úW±ë·q倅ngt c,\)ÿÐErw²ù–j‘ªÌH%±ßõ5öt1µù#¦ÇËVÁQR”š»:o|nñïÃO†±ø;ÂzìVº=¼òÏ—M‚I™å}Îw²‘ŒòW˜ë%ÔüW«k÷Ú­ÕÈ»Ö/çVšý¶VP U*á1´eŽ 9¬ÉеìÍ´/ ÃŽë6Õ%›Q1R™¹àî*Óq³“Ðò8)lC&¥C ah× Èa$­ƒÔg¯ùÅz÷ÃëCÀ^!ÑðŽ£mâÝFÿPˆO}n¬mlÖ"%’‘¶G,¡@Bp $ñƒò©%Æ´¢ø”|á_y^~µäV)#ÝØH¥™ÅÌd“×–ÿë׳éºRÜ^”dä>Öô5ˉ§ÊÕÏW/›_sÚü)®é–-8]BT‘NÒ²ÎX;kÖ|+q.­­·’ÑätÍцy?LWi†ã’2UŽMt^:ñ‰ðÁÛ¨4æK{ë˜üˆuÜÃú“\±Š›²ZžÝJÓ·4ôHúgà·íqáD×´_‰Z­å¾‘oâ9ìü?«%Œ“…¶ó\"NP¨¸\Œm Ækëm+⎓ã-íðþ8¸¯œ&ÒŸÍÎâp1Óš÷=BèC¥K<’*D;;1À’Oa\SYÄÖ¨KïGˆH¥ˆèkãxÓÍ??ÐôòÊóXò˜ì?â½ðÔ„+m¿ÚAldm,׃_~ÔööÚ‡Ço†žÕ ÔdÐb»‚ÇRt8c†{øÈ]Ãæ]èØ ÁRZûòîÚÖc}$-$v×±LU¨l7=¸'ñ¯–?k=#Ãú¨Ð5=/UÔåŽTkRï`wXË¿|S4©òì ¾8 u¯˜Êhû&äÏ];ÆÇ—x»ágį‡v:‰ðïµ½)KÙè¾!µ7ˆˆ¸Á;ŽqžÇL`ü)ã;r/ë7Z®‡SW¸o·Xµò]?šŠ7Ù,ªI‚ÈZû.ï^›öŽø‰á xgZ¿øâ ;?+ÅÚƒë’A§<¡‚­½œ íšY[s,€Ç$m>ñ[áM×Ë޶¸‡Ä^¹¿0Á©\…”7˜3"‰ íi;ˆlü¬½}.3æ’Wk±ÇVøIÁ:UÏì¹kâ=ÅÖóÉïåû>M ÀËC$¹ÞØmÀž9§ü.ð|¾+øÿ¨Ø_éW2ÛY=ë­Ü˜M’¬yt  byÆ@-Ò±|sð‚ëÃ>Õu½'Ä7CNXJÝÀPÄfCÆÁ°€Ùþë Vg„ü«ëòë뽡ȋ õÕ´ÎËpÛAt;H;J•ÊÁ涣̓jWý 7µ‹‘é>%ñOÅ©¼¤7‡ÿ²¼)©Í{m%Ÿ›gº(Ú@TÈ¥ˆ‰s•oJúëàOÄŠŸþ9_Úx“[ð.…'‹¯mÞïM¸²žâqqE”$ )2Îð’Iòÿèò|6ø[>‡yñ;Eð§‡. NÒ[hp%ÝÌ{Ë#Ç€£åâ½cź}ÒþÅß £±[v]=¿µÚÖæà¶£sm=«Ú†¬ŒeS•ÎÝ ¨9¬åÏoÓ¯å©1¤ú£ô§àž'ø!ãµø1ã­sAÖ4OÉs©øçG³’ X›Ì3]i£Í‘ßåßæD»ˆÙ¸( çÿlzgÂOhžºðV»â‹ßË$Ö7·C §˜K;.ðªÓžX üì¿ýµ­ìÿc;À~1ðwŠu¿ˆþÕ-çðÞ½utº{DÐ:¼RÊÑ?š§`òÜ E88¯ñçÄ ÏŠÞ$‹Ä?5ÝZßÅÚ¬QÍÞHm‚C &%·î¬L2QWïy95í`°ð¯®É£)OÙ­7>«Õ<àŸÚM§è:”ò^ÂâD2Ú¼bEÇ 1ê¾ÅýŒìÚƒ\C+´Þ;’Fläý™¦Ž=8¾*ø]ðÖÛà µím;­D[Ë5®§wx^ä³®By@EUÀ ÔžµöïìVÍqð7â<‰opðÿÂ{0ˆç‚¿ÙÚv1í_7-îZ7å·Sw):iËs­ý©üq¬~Ð? ´OèQivú²ßêmaqöß)Ì`+’Ùî@¯‚­ÿepßFãÅú""ȯ´érö$œýÎ+îˆtøYy^´³[¦Ÿ$ÇÝÌîÁQWÔ’kä±9“¯7)jÙôJPP†ÇÁÚïìÍâÀZ†©ÿ †{u‘­šiòG%äò°Ž‹à;»*ƒƒÉé^[ã_…>'øB–Çź‡…‡Û%D·K Un¤–GL…y ò }qño㧇üñá«iíÆ¥¨OöiàÔÒÊö5Qnä ÜæFÛŸùhS°5ó?íGðÚf‰¤Ai®êšïÅmwQI®­ìîQ-4[a2—E,Y¤!T36KoaÅ*tå*‘GË&ïnß•¡ÊéUªÔÜ=¦©r«ß]ztó&ð쩯üOðZ͇´=(æ–?³ÜèóNÅÄ›÷,«Áví]u¿üÿÆOap§âß„¿{§þ»—'þ¾?Îkì¯ÙsÃxKö@ÑcÕæû<²Jì$¼—EU<û=«èÛ[R+½:â=Ø]Òç=ç­ysâ,E5hÊöëeþGFw”S†>¬hÓ´SÚíÙÛU~§ä»Á8üi<ÿ{Â{ç×9ÿÒŠþ •âùfó?ápxM0Hðí×OOøøé_±ª¢HT t~ñã8­›M6Œ2«6qò–éøV3ãL|“üùö5);ÿ™ùI¤ÿÁ+«nŸ• XxËV~hþп5_ø(¦¿ ÜèšöŸð—Røkq¤kšn³fú”¢îi”ó ±„Ú¶Ë ';–t8^só‘ÿ‚.xÜ‚Çoò1ÿ"¥ßÿ%×ì?ï…ÿj¿š¾n°è¾)þÉÕØ©ZøC-µÁ2–öÄû’{š÷ì·÷Zý3+ÆÎ¾ÜójÓŠ›Ðü²ÿ‚4xîÎþ—㯂FêÁO„îˆàÿ×Ýw¿ðIŸ[ëòÝ·ÆÏ4.c_ ])ÈŸå_¸Yoîþ´e¿»ú×tää¬Ê¥RTÝã¡øãgÿÆñí«|ÿü#(ø¦®GþÜמxÃþ #ñÅÚôw3üuð\± Að¥ÑÛêIûW'ߊýÑËwõ£-ýßÖ¢+—cJ¸ªµ¤ÏÀë¿ø#ï-Ò)>;ø%QW_ ]ý»¨‡ü³ÇÁWã·ÀQÝò]~ûe¿»úÑ–þïë]RÅÖnîG¥Ðü Oø#oÐ’>;ø#ñð×ÿ%Öå¿ü+âM¾ÍŸ|6ô#Â7`õÎãó­~äM«Y[ëöz\ÓÃýÜrIo>Unò}»×?QZ;‰þþ5t³ ôÝã!JŒ%º?<~þÈ<+à¡øßâç…üiöpÊö=âÞuN›$-;ù˜ã pÝŽzצÇû4kñ¡ð•èå»°È1ÿר9oîþ´e¿»úÓy…vïÁ¼%.ÇæÿÅ/ØÏâwŽôit»/ŠÞðö€#o6¢\Hóœu‘„˕ݹ®‹Ãõ-kþ%–Þ#´‹ì"G=Æ‹w•B…ÈÞu€[Œó_zÞ3 "ëŒ~å»ûÊÒ4k 8mîm­¡¶Ä»ŒqªîàH<“^n6ŒqrR­­Žºrp‚„tHù¿e™w/Œôdä—O—9ð:ù¯öƒøocðâÂÞËÅþ7øIg¤Ý¦Gñ7ˆæ4‹° MÃä<ägž>Rkõϵ|5ûQ~Éþ(ý¡|wc}¦üL_éh/a$ ¢-Ô¯1‘™eY|ÕÚ»‚»Iû¤‚ʰÉÝGñfŸXŸsóë^ÿ‚qøÂ_|âoüVд(5EòSK‹ÁòjÇd‹²Jdi­ØZBªÙ§®üWÿ‚p|eøÝà}2ÓÇ?´†¯5->s-œ–þºKHIBŒVp0Åp7$`Ç÷³økRø¥¡xbÿKÖu/ §†u»Í:xrÙžK9©™|¹ ˜K(}Êù\×ÒP§—]»~bqéšìTb­bI;ŸŠZçüëâæ½cekuñ¿áÂÚ["øC¯^EM¾kfó’JƒÀ'< [_ø'ÍÏÂï øSÃò|GÒukÍoYN‰aЦi®î¥W’IßtÜ*Ç’1Ϙ«ö•Ü$lí÷@ɯÒ’Oþֺ߉ò²øwÂhz;#ŸÞê32¶¢åOºE·[¨-8­OÕéö-Wšê~AëßðLoüGý¦.¬&ø…áýIÑíÖÞèO¤4âá ß­Àḧä è0PçÖ¼M¬Ü¥¦“¥YK{{3œŠ%.çòñ¯¶ð'ˆïc»M;H³¶ðߌ5U}Zõ/JJm¯nå77 æptŒÂ¶08Å%‡‚VýAÖ“wgÈ^ýÀP¥Æº4ÔêÁ?fž·×¢êìy·ûü`ðÿÅŸ ëÚo‡|=©éÒj‘Ï=®xû4£_8¸Œ²nçr£ƒœ×«Í¥\GãMON×5Y-œûu ÛG3ùŽ>ò‚Ã…>ü•õ‰~=ÚjÓIká+™x;¯¯¢1GÇð©ù˜¦>µóN¼Â]\ÈEÃJΆbIfaè9ëךíÄf²Æ*pª“”t_3Õ༃9ÁSÄb*¯gë-nÝ»#Õ¿á)¾–ã“YT°X;häl¬H£åP €¾˜Á8äæµ¬õ¨.¡.º™!7M»«FØãrœd~yìkæ Ã%þ¡q-¬±Ah€¬ÌÎÌÊÄ`>zöü½kèÿØê6omu§HäÂ…Òb ’Á\d†À$c¾Eqâp\‰ë©ëÿhác;Fšû¬}ðÓâºZKg¢k²ÞivÛÀ·½Ã÷Xõ+ìr+èŸüUðö««eÝjVQß³âÛh`&gŒóœsƒÏµ|»©é¶šö†.â²zÄ ºKV¥Ú eœ× 0zW®Ea®x2yü3.™®éŒ³­º°ÜïÈÉÁÏמàWŸ<,jSz|Ï›Çe¹~;ô䔾ïSôìmؤ•`yÊšÝE¡ø~Yï#ºîyduUpy,ÄÒ¾!ýŸ>:KâXÿá ñ„ð§ˆ-þ[k†l-ÊŽƒýêú¦þÓûFÃhuYy}~Uç õþuòue<=d¥Ðüï>Éjá*:5Ö«gÝ=š«|Lð‹,µkÖhÑêVSE5…ÚŒÝÛÈŽŒª˜c'Ê 8pxÍ~vü6øÏâÏÙ×â6¡ðâÚÕîbñ§ƒuKˆÖG¸±•ÿÑ·ÊH!6ƒ²ðD¨Ç ×°üdø_â+ÿÏ?†fº_Z(›Lž5H¢¶Xå ´¹pü¹Ã)ç‚ÕðÅï|SñÿÀßøIüW¦´^1ðÈ{MZ{çËsO2HqùBÜ)a‚ãÚ>÷"¯ ô\'Qr½<ÓèÿCå+à¡OÞGî?ì÷ñ"×â¯ã$´–ÊXô„´¶o²£…F>q(K}æ^…‡çè>™¯ÊŸø%­õŠÝëÖÚäo`öþ[³4mÛ Äžãc±ç$U«ö †’¥„¯këógÌcTUg˶ŸQEì¡EP\¼yàï‡?ï|UãŸh^ðå iÔµkÔ¶‚2zì@Üz“Àµªjú~¥Ëy¨Þ[Y[GËÉ4@ÿì+ã‹ÿ~øÚÂÿÁž#Ñ´ox)•d™îÙÞáOËû¯%Ó`çælžx i6[ðoíðöŠý¥<7¤ü&ñå·‰üQáûyµ ‹›H.!H¬œ •Ý$ge‰rJ.I*kìÈð!Q‘œs_‡:ç‰þ |Ñ~øãá}µ·ÃHµBëB±A $I}k ó\4q©c*ˆÔ9ÜØù (¯½¾üxñ?‹>2é~×4Ôž9­Y$žÊÐ:A(Vu’yÌ€ öƱš„åÌÓZ•¯síJ(ŒÑV"µïüîÿë‹#Qéßòµ9ÏîWÿA%ïü®ÿë‹#L°#û"ØžRcþùr˜ÿêØã$ }5†caí@Mð’bÚ_ŽíXm|u«§Lp÷&aúK^y¨ØØ[ïní­!Ç4¡ë_'ü@¿ñwÅ;JïÄ6Z$C}¼vZ§ï!ÀŒíù·ÎÔ¹'€81˜èж—fu*¨Ÿq|EøÅáoü×õÛ-[OÕ5KxzmŒre®®åa´#×t®ƒØdö¬¿x‹Àÿ ~xWÂ÷¾+Óµ M¤[{»þÞßJÆK‹‡=ù]Ü’ˆJüàÕu|rÐ4MÇ÷> ‡Dµ]eí•}Ú.ßtvð JÍòGçÌ[\G‘ÍzŽ…¬èqøk]Ò>&Mâ]T™möBS圀C( Xw žõÎó4šV9Þ"}ÑÓâß©Gæ“’¬&SŸ\“þ? äøHt¼žŸ¿ù£x§V´ðL w¶³©ÞrÍâ«!F(bY[ïtNAÎ7®¼i,ú ¢Çgi# -·‰¯%e õާ=TsHÛádýmùdüUñG‡üQâü8‹WÒ®tÿjßk× ºUéö;n$=D“‹XH=D_EÁ,-k$±:°Èd ƒî1Ú¿t˜ü ©|D¹ÕüJ¾&mm‡ØÛYÓ5²g‚/0ʪ‘72ªï˜á›Ë'hÏмi⟆_.ô=kPÊ=ZËP‡"WL‘Â5Ð^‰s2ù€[‘¹rvŽaÒj×*¦ú¡tTò¥Å¬sÆC£¨eaЂ2åS×riìv+o‹ Š$bÑ!$Xà( LqŠüûøÉðZøyâ‹|'Óç¿ðã¶ýOÃÖhÒKhÄäÉn€ñ“’Tr¤ð1Å}ÇkªE*«E<2+}ÒŽÊ· º&²Èp Ü ƒõȯç\.>¦nÊéè×F~Ï„¯V…u^œÚšw¹ù;¥|Yµ:¢Úê‡ìºŒµígc è@èÈØaøŽõÞÜx‚×ÅšD’ÀO˜ÿ$qù„WÓ±úÆ¿Ao4xÁn¬¼Eáïø™$O*ê;»Hf}§ é¸vïé_3xÓötÐ4ÅqðßZ¶ð}¼ìÑÜé³Éö»@d "‹wmÑäœn— CÀb½zòêµl¢éÏÏUø‘÷´Эõ};Ä´çÒç•H‘¡å¥*~潎€×Ñ~Õu;'MNöÿ^·ŽBG–ÑD½ò †\ž½{}OÅ^6ÔüIà߉WºoŠ´›qqjV?ím*W’º€Î6‚„à k¾ð_£×àÖÚ•®·8•c–ÙçdhÉé… ASìÏïâ²ÚÒ¦¦ö¶é_ñ92ìç.ÄÔq§5¯wf½S>õÇ–Í¢Ú°ò/^FÚ³³ö`_oB2z +ÇZµÝjpªÙßÛ˼Ó/uaÜ•x½†«w•«C6“æÇ¦FdkhdØÄž:–㣚ò{߈vz5é–÷Z…±óa·;ʰã“Ǧ~•ãPÂËŸ–:ùÖk—P…56ùeüݲ55Ó.,ÚûE g¬ÛOö‹;˜›kò7ydCøàWØ? þ'|"¹´fxüEaÇrˆi0²ƒŒàõ8üðïí áØüGåêSÅ œ˜`V@]F>F`:zjö_|T“Iñòx‡Ãºˆ’w˜¤pg)2YY‡¨ä~uåçÙ%iÁ^šÕm 5ÂΔq s‹÷{úzAøóãlj~|IÓ4¿]]ÜøJçPÛ¾Ua$#*CË–@ÜHã¡ã5Ó|K×¼Oâï®­ðçHºÕ¤ÖcKDf‘Æà† !-å•#æVèrµÓ?„¾þжÕõ1îÍ»mþÍžfìó§ÌÆï`‡Ï#¦+™½ñ®ð YøVúÚ$ðÖ¯_³ ñX&38'ýLê6‘´€=FO‰KF.›§IûU£Ogÿüß—Ô£9¦Gÿ‚døSž Ñ~2hž.Ò›Eº’m*úÖÓ` ‘I ê1Ž€Êíí·Sú7¥üBð†·ñ_Å~Ò|C¥ßø³ÃQ[É®éPɺâÁnUš"öÞ•õÅ|;ð‡â­—‚tßÚ⯊m%š×CÐt©µ[}%ÅÁýÃߤ‚1ÀÎA8ã¯<õù÷Ä5-ö±ø—ûL躶·ðßÃ^/ð¾›g¨éZØŽÞfkA0Y¤=Jr©Î-@dxµ,9OFÕÚ^§çY†¢¯&–—µþG²|dÿ‚¦| ø=ûAø£á¼þø‰ão@½6Z΋ml¶‰:€dŒI4ÈIBBž1œã85árÁf|sâìt>/—̈š÷ÄvP À1é×Ç5ò÷¾>~Ï×~=»–OxJmrW'U¼Ò|úÛ\¹†67à‚Ààœf¼ã>—ð_Ų¾£ñ Úֽ,ãS‡N°ŽÿÃqéñjw–F¤+€¨¯™mCÔpkÛR¾¶<ùA%{Ÿ¼>ÿ‚Œ~ËZÿmµ=wÇ7?µS›­ĺMŵͻí0FŽ` Æø™”ãƒ^Wâø*_ÁføÙáÏü7ðÏŒþ#\jWŸg—SKC¦ÚAÃÉö¯0P¬äª…جC´æ^ÇKÔ’F’Î÷VžÚÇÙ­/Y^1ÙX1ÇOÀ×´x#OðÖ³ñ÷áÝ”ž××Ã$X/Š-õëÈ¥‚îðnûC®Ð[<† ±œ”çpȪ3?\çO¼¼iž¯®ÆövöíÉÜ™âRX*›r{HöOÙÛÆ>ñ†·¨ßxoDðõ¶™"g¥6YY9¸*¡L l òAǸ|Kû,õxuX|)ứMe6›i42+ Þ€ Nç-·Uär@Ó±øëñ§ÁZî¡ãÛ  øJñUø×bÓëI¾»Š7ÔçV™íÂL6C5¾#c2ðà)RÀ`~âþÈ~¿ Eá}[â÷‚4}Ç—ñ$êÑÀC,ñÀ²D¡¸eŽRÛNv¾@95ò÷ÀÇ×¾0þ×ÿüâÿE¥é>ñ¥÷Чµ¸ÓåG¹kM%BLRDÍ{ÒîØ ÕõíiûBøà†¬øcÄË-αâÚÜXAÍ ¤#*;·Fãý‘†ç* ¸Ñöš$ˆ<’$kêÌ¢9á•s±È=QþUù®ø3ö“øññ6#ðëö†¾MÚ[D =ýËœ¬†IX§h8Ûƒž¹¬1áßÛóölÓ&ñN“ñJý¡|3j|ÍOL¼±Spñç' ¡0ÏUbFxVéHØ«Á"è¦þF¾qøkñª×]øÓâë7P@ñß•ÐOd‰!„Ÿùé¹K õ¥Wýœ¿i¿þÒŸ/uí 4={N&ß_ðýä¡®4ùH89~'Á*ø‚¬Qó™àe-´íQÐíîßS½–}6e`i¨,¤ß/ƒšóqõ¥ BÝÎlLç¥ôäH ëN<¡ôÅ|ˤx“âÖ‹c x~óU€( —I渂@Á¸÷Ü}ë²O‰Þ!·‹Ãÿ¬™Áò"b?U®þtT10’<ëã–«kïÚÿÂeii Õ#Í”Ú`aîÚ[Œç®âN3í_x‹Å–7„gƒVÔ|6öï§¼—ÚÅóÙ"òÁfƒÆpOá_¥z§Ä?jºL–~$ø{âë‹o7{Ã6‡ç£2ŽþG­~T|fЭtÿ‹²ø+Âsjšïƒ|X×Všµƒ%î‘b¤5Ì(îNàK$q•Ë'˜F:cç³7U4÷ßÈʯ+Õ3{àÞœÚwt/êÞ6¼Ðd½¼mRòòÉiñ$l«UP~X|¸†zm'õ'Æmcá·þèyN©,>#µ–êy4ÛˆZÞÀ•YâŽi 6Ü2OÀéßt›5#±øyà½'PM9í>ÝŸ,wj#0pÖ*y>µÓÝ~ÒZ–³ðâo ßxwÂ7ZEň³™5)X¬±l w–` ǸçšÂ.„©J ­¯‘*¥º–|Uð›Àº×ÃkþÏZÕLj|QáÉi4¦Ôd—íVÄ–ÛHdà2žHdô?møCGiþiRx§ÃZ%ž¸`k-bn{1Âà1%F@$€H¯ËŸê¾0ð<Ú…‚¼S 6sÏ#ÿˆìDvêä3.°ù˜d±lŸ^Õé·¾9Ãg$Ò번U€&?i¬üA$dþUÛ…©J7•¾HJ¼bïÊ}×ãßø:ûà÷Š­¯ô-8$Ó&/*[$N„#pà¬A×É^†ßTðÂÛ¦˜\[u»XÙ‡-fÖAÙ?Ü zâ¸û½3ãŽt ÝÆ:¶ð÷„.Ÿþ&77þ#´¹>W•c‹‰ õ 8;ú׊ô›ˆžð'‚l®g0Ú¦‹¤Y$lÏok+«\ÞÎ@Ê„k*ØgÝ$›v)!ÖœjÉ4´ÿ‚š“NÖ>íð!¸?<8.Ék§Ä®OS…Àý®¶³ôËsi¡Ú[Šc…TªôkB½ªjÑGtv?œ—ø©M®^Þ_\C¡éð,´Í Ì[BXWqÉ,NrW§@®WVñn§7„`ÓìQ³¼ÔàÒVÒe¼·¾¹ŒÛ\ê&íâ{­Ø,ª,@Ûƒž¤(À­{íHj‚×Zׯn.#-¶ŸÔŠÒó#3ur­Œ‚~\š÷íGÀz ¤»t›mžç \ÆÈÇ*l‘޽ÉçSçú—‚´ y£xã¹ÔZäï‘-Ž@sµKƒŽÀuÅuª˜zºÉ~Æ2­üϾ¶¿ºÑdÔüKp­cöpÖï a&*®ß30Ïš„q‚=Žkæ¿ìxOö¢·¸—ÂWÓèóÜÛêVqÃ+D°Dï¬1°8Üx +é/Ü]iËs-Ÿ‡'¾hà &ŠxÚÇ!JŒ±Êœ‚ v¯4´Ö5ÛŒÖu&=0Ü>pˆ‡„•p®Ìyº îr1]q¥*t¦ãµ¶ØéÀb¯‰‚—W¾çÐ_ð›Ø‹ÝVD¶±ÒÛRÚî&h•FKL8Ì›Xä´€½MpÑé·^2Ö¬àm?Áþ'Ñ7çXÒÒC?x–^ ú7|ûף雼_y¦ëWÉo¦O,p¥Ö9 ‚¹Ç Ž£ OZ×ÕuôÓt˜‘ç2­“O,ÅÏ*‚3æôäú×3ÀaäÔÒWï±èKˆ35û‡U´¬ÝÑGÄ^ð^Ÿ  5ï„úbéÖjÒ%ÞŠ#*w> í]²î,à ŽJê¼+à Ãòi>)ðšêúAóVi´k«ÝÑ2£t¿Õ°…=Òk¤´iý§«[ئ¶Ê-5pÃNƒ»rZr2º.[§Û,<[â]7ÃÖQèÕ­-ÔC¥ÙÝy‘r[ÌܬK 8?Ê3߃\šqpM¸¾îÿuÎúy´°•)ÎÉUM?vÊ˪vݿéè>ñ<:WŒúEÔ¶“Ëm)Ž]²:”ÜB>GU9ÈÆà>î+zçÄzn©ñC{¶³mycçÅk¯ÃðVW’2Ü1S–ÎxMs>Õm5}KNÐáÞµ¥x£SÔØÞØÆ&]ï˱|åRÑ¢†u•õȪ~4ø7ã‹éì´kÿM{%þ¯ýee¨Â°Ã¥Îçríd) Œ®æçîrAãåêeôèE*­^é§×t{œ[ás)¬NêKFŸ]7>çý†õŸ x¿â·í'‡ô¦°±Y´x¯¬å*ñ‰ÌwLp9\íhÃà`¸cß'âø(Åœ~>ÿ‚”ü"ý›´;ë½Aº1Þx†e¹?8˜´²NAÈc½¼†5#nâ=>±ÿ‚nxÄŸ~)~ÓžñI²þÔ¶Ô´IÛHd@i)1U''qéÆq“Šù;þ ™àcÀ_ðPï„-|È4ZÙ4»Ëö,±YÍxœ;/ÌA;>@øIð›Ä–÷‰>\|Gñ¤z<© Ä“ZO§é÷ ´L 77Jû‚¨e´›\\•#éý Äž:L·šGÀûíS‡E†-1‚^HÞëÄ0ŽI¿xû›{[=(ÉÓàÅ?[éÚ4—_ mÌK$Z6štëç‡O…šI>Ì \„©¨ÂíP[×G£þÌ?´ÏŠÞÒþ 'Àø"%-ÔzuÒ,vËX¢Šãvï-K"Â…\a…}Wáߊ,|#š§Â·¼ñKÙD%¹‹O·#¸ ‡eª͓µz2y¬-~óöø‹á‰¼'ះ7þ³Ö‹ù—–VÄ\\/Ê%U•Ú@Š7/ ‚21‚3@Ÿ²”·¾ÿ‚ºkVŸ¥izµ…¿å·ñ>©§^Ï{»R²@Й]Ù¦øÝe ‘#î׌|ð¶³ûLÁwþ(x³â1›Ÿ†Ð‹ûX¶3@—ÒH >d{ÂPTd¸)_©Ÿ²ÀOüø Öþ8Ô¡Ô|Kp…#H Ž8ì`Þ]bbH.øË6O¥|M>¥gû,ÿÁÅÿ.¼`eµð?Æku "ý­È‰fU qìüÌ’ç;dÙÁð§Å/Œž?øÃñö=;Å ,%ñ öZ|VvIc{nVCçeX2»†lbø;sö—Âx¢ßâvà¯ë7Þ ðίaq{§jú„h×1ͶҺ…2)½Y”p3Ö·üeð»_½ø”|_à=[ÃÒ®¾ù»ÒoY¾Ë&cUE*Ùæ*.á‚¨Š¢§‡ç‹æ“ÝšSÃFÛ³âøgO‰ŠËâø‘’þ9Ôféß‘W[ökñ´ŒÎþ*w‘€É^?#¿(kî+§êtÊú¤Š¡ýœ£ ¿a‡Æ˜ÈerKª¤õÏQEz­%(œZ7Øã~è÷¯ìówñÅv«öÙ žîõá†!WتĖo,€x##Œæ´¼7áŸB·Úþ°!ÒõI¶Ÿ§ÛÛîKecÃð '#žœö%Ï^¼å>[év{ØŠ ÝHîßæ}a§|6ҧ𕥅߇ôý!u+ÖWW2$·O»H0 P9ƒc$޼Šõ|&†ÓÂZzê¶8E2^Gm#aNätò¶à‚~é} EWÍbñ•›Jûœh§©Ì~Ð_| ð›Äüoâ­sQ·ðχüYÕtÛ=!ÊE5­Ì.ñÉäê¥sœÎyøëöí—âÿÆŸxcÂÿbð®†n…冡ªjr^j25¢¼¶ìñäŠ6®T'Ÿ›µWÔeYN—º•UÚR·Ýs“VQ¨ÔtØû×þ YñoÅŸoÿhøÞ{;ŸÝ_èÐÏ-­¢ÛÆBÛNT×…q“Ó­~Šürømà‹Ÿ³ö³àOˆ—ÅÔT‚V)¡‘yI¢‘²Dl`r WÝÓ„a«#¶ÝÙü÷x§öSý®þxÇ[ðïÀ üo®ü9¸¸-¦·©hhñœždŠiÞ"ǻƩ»©\æ±ôÙWöºø¹ã­*Ãö‚‡Ç±K%®ªès<‡<ù0%Ìp+଑…Uˆý¾øCyá¿tŸ‡>øëGðí€$ªi5Ô­ËÏ3›¬É+žY_¦+Òãÿàï$Ç÷ï4£ü€>4ß.6ü"ñÂã¦/´¡ÿ·TÂé¿ÜOü*_dŸúéü—E(øÛ©…|%ñÖ?ì!¥ÿòUx?í ø/ö•ø'þ |øŒžTâëHÖtýWJŠÿHº_»qo!º;\wÂ(¢€>ð‡‹?oŸ‚ÞðïÃÉ~(øCN»ìC]Öt› ·€çošñÔºƒŒ…Ç5«>¥ûtü|ø…§xcÇ> ¾øCàIœhj¾×4­GPTÏÝ…^éR6!ÎQˆÇ8¢Šýbø#ðGá÷ÀÙÅ|ðóE›JÓÈ’îþæîQ5ö¥tëûË›©‡úÙ[ž€½›J±¶³ÑbŽÖ-£qæ2ÅPY†YˆÉäžæŠ(L (Ù?Õ5R–À|£¤|ñ\·æ¡ñ{SÖ­e±2ÜÇej“» ·š(£Ç–FP!UÜÝ,?ˆ×ÕÉ÷OQXУkN¤Â6¸ú(¢·((¢Š(¢Š(¢ŠÿÙvlfeat/docsrc/images/using-vs-project-properties.png0000644000175000017500000006377112236612215021624 0ustar dimadima‰PNG  IHDR+¿Áx pHYsÄÄ•+ IDATxì}`Åõþ$Kr•ÜåÞpÅ`ƒÁÄ”˜Žé`¦¤@¨~IHè Bï5=$´Ä´Ð;Ø`°ÁÆàÞ{•Õ¯—½ÿ·7º§Ñ¶Û«ºò³zóæ½7o¾ïfvîöιlÉW>F ”!Ⱦ“IG(ŽÁ;*p,ÿnøÌ0I#P’´';2Œ€ÖÙIh§žý¬¦:‰¢Ó 'õqD‹£'UhЍ׏©.R©ØêÚ3&µy´:ÆH¡cb«E,¬\l“£ÙÆ‚ÄLMZkëZÔ ]QM¬-ª*iŠh(Zßvj bÒ´ÖD=D1¶U¥/ê³0/‰Âßè!÷ ¹õjëzkQ5’ú§/ªA¢ZœÚ÷ESlË*Q.j[cIЫšvÅö¥vmDÛ²8E«íè„ð8Ü/ÎÎaÅ;B!GPœƒÎ@È9§Ëëðœ3î=˜ŒY`Š:©ˆ ¿ZàRêpà_¹(DÂŽްÓŽ(aGØÿÞœ—E ŸFÐI‰8Ô;ªÞ—â =öŸ9íÂÅ••åee%Ž(—¢ç²ã)LP|0Œ!`@§@ÀQÙZqx›BÞ²];·ÖÔôíÖ­ÒIÉÉÀ(ÌNnX1R4­àZó8TÝÇ^…sËêÇDuq­SŸÖ:åòÞï@Œ>“nH9RGØ0ï÷h~ä·udEÓö/ªƒó°óÔšúa@'Ÿß©ÒÉsO$àvú]³Ï™îÞûðoV_ûØÕ™ê¼7*+1Q)ÅïöªÓ˜Cp©û¸«ãð¯}¬†åCÑsß_¶WÇ/ÕFyÕwòÿÅ7YìZt/Äš)¿‰)âüݾð°|ÈoqÞ¶à.œ‡üàw[¿ÂMqœ¯^ÿÙí²Ó>G¶+ÊUöå•ÜLÆŽÿB^ñþïH¹ï jwp,{Wí¦8&žx·–¾scLçØÿ¤{H†ðÝ[¿–‹“O¹O.fYþò¿×È-znë˺¬„,xuø¬'>áJ!ƒyÏ_áˆ?)ŠÖg:yüÎêˆòü?þò–^xÖáO?³”º,¤™ª_U·nå‘°ßë³Þaµ}ÅÕn×&É€QÑfzшŸØú¹wÀhÔôÛqn ݾ…µŸÜ6ú(ÕF¬þè–±ÇüA¯_ù¡Ê¥ñÇ©,ZùÁM+Þ¿ Œ\špü]@nù{¿Ã¿}Oøãò÷T.Mœ¡¾|€WËÞ¹q¿ï\‚€½±¥oÿæû·£aŒ'¢¾BE3mŸ.´Y?¦ó¨ÈÅlP¨”fg/šäçG‰d¯tòúœ%xÚùïÚ½Óz,ìítõ]g«3•§>:S=÷ð­«zûåAˆG°¸×ªlî:Ze¶Xãu£N£òѲê1±Òk^…¾µUã[_<šV<Ó9ª÷½–äÖ9jâu¤!¡néƒ$÷Ùÿz’åÙ©vÉý¤ïwÀ¯ ïþ¶Ý‹eÍm/¥»©¯²²;GQd!ȳӖ/[_ïQ5ôЛ7Ï¿°CÕA¼ù u|?ìœ7}Þ6ÖGq+4Ù9Æ{gt¤·]ÁŒ¶»ä ùNU‘ÿö uÕpÀi÷/þ_»åÔÓÕµú¢×Ôµú”3üæµë:C½¾ß¼Úve>ó!hp,|¥mÍ2õ,u³`NÛ˜ùÁÚÆRÔ\{šÿ’öŽƒf'a*æ(pIžæ>§ÎTâøáOAøìß—Çê_:¹pG¤*+¸]zèwkŽýLµk×ö~!_ ˜ØÅ‹½æUêlÛcÜ5¸œÍ+mZù¨`TÕ„kE¸Æ4.¤:¶ÆS{j…¶-Á¥ÞQiëÔ®©‡àR?¬úœŽ=ßÞ¿çÛû£PÕÿÀ(µß·kñ½5SZ…ÅžÙ«W4^ÛiÐÔßb½·múšcð~'ç°5Ê¥¡Ób«>ó ÃWI…÷e6~þûó~ŸMFEW§&´Øʸg1AÑzO?5!Âwo¶¢j½Ø;ð´û1-,~ý†E¯ß ßE¯µRHpé ™Þ¯_½îëW®£p†`‘HuÁ•]‡œ­²H½òňZ|ùŸÖWm,ö—¢«>çü—´/úQóèbO}·¬-м(—~øc•EsŸûÅÜÿbz”Q(N¿ðiØ}ú¯Ë èäö:#J°¬$Э‹ógxx×®Ý.W Þ‚r†>ÄLuÀ‰ç yÀú͵k¶+x?ŠÌK˜ Ä¥~j"K!È”Ðȳ“ÆXë—µ¾2¡Ø{?ƒÉÊÐ Ê=Òefc¦ßñuë­ Mm»[0³—õb‚j#•\“åÙ)¦³ûwݧmÛXï ·1G«;k>n›è°ÞUã0#µ?—°ä3ç{{‡X)ÑÅÞäSïÃõmtŽB LM±HÆ1;µ du‚2¸Ü _V)ÔžTêõƒ(©4qã.ö4öÉ èäò8°ÍàP<ØÁ«,×ôëê‰-‡ðCwª3Uey¤SdÇoß>bjðƒ†¦nɵ /1;d‚KÕT80;†í%Ö{Qr4´Ô(ÅìU&ä§z <¸BöÇÜi7‰ @*,ö¢­kO›Äªïð[Ä줭ŽWÞçÈ;DÖ~*î¢ FUQR©ÅÕ·Ý;in ÄV„¸}Š×T׋ى¦ š HFröÃb‚‚æ«9ׯ]ìe¨?[s.O‰#ˆìš£ìšS²÷Õ.Ío÷ð¼×Ãýþ¥?ÒÌ¡Ý}_vi|ûš³†}Ü|ɺú*9-qãMÜ©IöÊ_Ylë!ÿÁ‡´í†Qw0)YÏKdÙ!‚¼‘…èÞ©õö©ý]S L=óay^B¬ôÄb/‰hér1˜ðnÒ_ÿô¾GéÝÐèÚ^§ j õq…º†B¾²²Jœ¯8Ûqæ‰?xáùu•®>·+¡l°Û'y±‡{'Ü8a‚ÒÌK¸kÂ>„ÙVDïý®ÇíSÝ÷­»òV僽rÜ>É‹=ºw"!àö {å)nEPLšš QIåtb»bC‚̰ *îzoÔoÃæž¼Wž–r¤!{"Ü>aO›{´WÝ(wŠÍ=Ú+ÇF9&½4Þ;цÝ8>šù nŸäÅž<5Á@Ц&hÔÅž˜µ¥@ò½“¸}ÒïFs±WN[{å¸}Â]“Ð`+B׈ÉÇñ¼“x@CþlUUU¿þ}ûÐwà ^}ô¯é[ѵ*ÄöËB¡P°¡É·zSóòù/íÞ²™š„жàˆj£EU­–Úîì4E½›jÝ–®*ÅŠ­®ÑpíN“öÅÖXÑ@1/üm5j­ÛähÒ±fc¦ê_ü¯þ‰ýbÚXA £š¶UISŒ5ŠY¶‚ÕZŒyÄŠjÖÿ¥?’*ÖJ«Šú,4žúb«&Ö8Ší£hŠÑ¶tY5èÄri-~£ÄVDÔ'Ñ-õO«qìú7æÛÚ‰YÇL[-5ŘV ¢¶"Û—¢YǪ£-NÂÎ`vB³8<¾ðöZ_­»¡Ó¥´boii‰Ó©`»\ y#!ÏɧµjcýÚÅo5×7 {>3Œ€)‚~þy¶bôýŠÍ›WΗ]éFceq" ÎK…ulEØé sÉJlSl˜ÎNÖ@ìÙjf ¦S–€æfŠÓ½ê^}{öê[ pt!`L'p©ºgŸH$’®f8#P Ó©ªº7s©.?÷1½Ó)QÒÛ GcŠ:)­Ë¼W_(Ì<ýT‹¦·÷è;¸kÏž›>¿ø¡Wú|Íõ-݆_*Û°œ}Þz罓O<Á~»X€h~nϾo‡X&ÚÁì'iB§öwM=ª{55ÔQr½†NÙ»ü‘ªi?®ì}`Yed6U\öé÷!o âñG<±³/àð#ÁPä›»¯}¡iåU}wéU½ùó@Z¯·¢¥¾¥ëðKìGHÑr뮺W>Xäõ«ºuž<~È´É£-~ùUgÔ†BJ0¨á@ ä÷‡ñ/l µ·ß6È"U½õvS(öû-äó…¼^œƒ>Äô†š›}ô²”ë%ú–-÷ìÞ}ÐÁê7çþÍ×¹½þÉ“”#Ê‹©\‹A¡DÑ£ÇõêÝÛÐØ¦rá‚ùˆ„Ÿ…¸ß¤êêž6½¬;HAöîݳwo­ß﫬¨ìܥ뀚ÊË©6i!ìܵÃëqûü¾5ƒz÷é[ZZ*G3£SëbïôSO¶äå_y…Øa?sTP=j„£K¿áG”—î®üÎ׫[0âÇ¿P$€!¥ Ž`HùfÉšHdˆÜ¤M¹÷Ð÷.¬ªæ|AÚºEOÕw?gÙÜ5ŠW”΀Ç'·~ÁƒÍøqÍøÛ‡çœ8eÚä‘nÿo¯Ì«êÖå™ÿÌ{ø·ç:‚H]»v[·ÎÕÕz¯?ô£‹çõp4£* 7ÐkÀ¥!ƒG/_ÞÐã =úØÚº=ßÔî­/‡ìk¦6ÕÕ½6lØàóy+**Ü®¦†ÆÆ‡X»Pð~}Ûȳ}ÇYxðÁS{ö´KÄÙ±}ÛæÍ›D@ŸÏ?xP ä@0øÙܹ]:W–”” p»·%Kíd»jÕŠ¦¦ÆNe0*ðræóùê÷ŽŸ0±S§” V®P¿1& á*nÛ¶uݺ5#FŽª©i» ftjÛÓk¨Û#  óÆÏî©ìs@ïñº <Æ»÷óÚe9[7l9Ñå¸|—Wñø •°WÂAôŠ|í QÒþT&íðp竦F˜zÒO|RüWY½ïî›—÷…¬5rŸacÔo&{ðƳqFò]:—ûƒ þóàRjÖÌ<]»:¼^¯Ã¡¥¸äò]À®ÍïŒyŒYÊáw]b^Z±b¹ßºó꼄W¨P ìr5VõªŽDùôÓ8tzã­wÑØ©'Ï›>ý×åAGEµ{÷']{× =ðHG¤ÛÃÇ×(áHXq„€[ …Á°ºÒ;ó¢;"‘ÿ'»Û”7~v¯†´¥¡­ýŽºHQÿèšÀÙíu#¦ÐÖÍKûïßsÈЮ0+Q‚%aÿ«o¯Q%ÃG·›ëøçÇ!¥,Á+¨ñKè„Q:UË-¶rÉpƒ'ãêÕ_˜E /ý¼„ç /n[¾tní^¥¢ë>¡P“Y3=¯¬¬Ø½{WuUUss ^¹1¦ãºÀW‰öº©¹%VÊË;Ep "‘AûoÞ´~ã\kµïXþUW·ë;5ª6mÞÖ»WO,2úõ퉪ºw«­kØS[G‘5örÑ0[±NÙ¸i}÷n=êë[\n¯×‡«zT…BÁ— ?”Þ¿_C_9¸µŒEQ}C¢=§³¤¹¹¹voµnÝZÌ™X^†Ãa3:µÛÙëÕ§]íNjlíVG×=zà)Í6u­œºiþ_Ü}f¯q/?ùðñ!Ð Ã]*YºRý%;4'AOÚˆÒí/u.Z´øž‡&ƒE½Övr,:hËéŸ —äZ‰(‘ÁƒÕùDp tš9eÛœ…¡K¿ ñ_(ŒÕ}(üÌí×Z·‚Ûx<a&ÎÄ%—'€Ù «Ž°:W·ÃV¶ï}¯~^ÂýRÐliq+ÎJ´àö"ˆß,ˆ™žZÁŠÔíòìÚ½kÏž½X_uíÒ9® |1ôq®êÑŒª©é‹|úöéEa·lÝ1wÞ¼CÖ»W›’j…@£vìÚäÕÿ0UEÔ Øea-ž&nu{ëëë°¥Åå,)?nܨQ#qE>ýl.˜ Î‰æÈkR5.FˆSÞ©üàƒêÒ¥ËúõV¬\Y[Wß¿_ß5kV£+ÈÁŒN­¯Á'Ÿx\Ÿ~°€ìÙ³jØ>G8"ag`ݦ]‡÷=½¢á»»ï[yâ¡Ï`”ã_töÀLÕDö5NÔHë÷•ïXôŒLÚþ“®[´Hýµ\ßEAF[µ’k%¬„!IYD* ûÍ[Jžó¦n3züM¬¯Œ'%2ê rtvjÕµãRt±çö¸ÃŠÕÒ×Cs¿Ôâ\sí’Í>èÓ{|ÍàÁ u+A§`Ðg–™žòìÛ·ßÖ­Û¶mÛ›–~ýúŵŽ`L Ñ׼„ÁCŠ d9|ðܹóŽ8ü0³›ÑB :­75»Ôãê¡Ò %è­S2«U …ËJK;•wêݧÏ>ûŒêÛGýBE^ƒ"x7ÊÛ8QÍÇü@,qÛ‰˜ˆ·Ç˜NvZ †P “3.}ðy‹ÃÑSQª±¯€õ* Õº.ï<÷x ¼Î½øj}ªÐê€óûý¢VÃ%Ý€Ûã ‡z4(`À‡æB--HC0Á¥½MÞFŸoÐà±î¯Û£Nn^Ä ©kwò’3=ÙTUUaìbôã&jðàAqí…£º¶‹Dz÷ªVÇ EinQɰmû.œ«ªºc,¯Y· 6ŸÍ7óŒÓ©9Y@ð¾€ôË;uòµ¨J(qîY]… ²—F6«—Øþêä(++ÃîCEy¹°D›Q!RZfºPÿ×s/É­\øãså"Ɉò#çhLõî]»t©,/æ+†J0D¿ŒéD!Þ~÷CÈ'Í8–4ؾmÙâpL9ñÐ1%N'¦guº©“Ò çýbÚ³Oª³“½«ñCþÐX7äZé2òÚw?Y}`ï£ûq ç˜ëzôÇ\¤¨‘LPê¼$x‹¥”œÉvZQ_ƒ¾’eÓº]Þ`SiÁe,‚S}ÅT°Aéw(Þï—Ö.Ümú…$ØÇ+øgL¹ä§ =Á ȃÕî—pV…@àä‘ñ» >Ä‚üÅç„°dq8ú¨\jôÖ5zw»\ƒ‡ nn\-–y~6%|Î6Tn·kƸ‘2xPíÞ½«W¯n¨oèÅJß8ΌΠ‘í;wcÔªK4EÁ=»sàÒÁkúõÅM˦-¯Œ"µ(q°3.ø¨ŽrhFŠZµJ½ß­X¹îÍ·Þ>åä“lô¦ ¢bêÀË^³ùƒ>:óÌ3`›¨è´çèÒE½=6<Àb”—à("üêKÖÉÐÌ›÷9:í:5c:¡wrÃ}ûÚ½üi=üˆØ¸ L·<»ï/yƒœo:C+AõÞI¥=Þw‚FMDÙµcsÍÀa8Ö ¤ á¯Kœ—}ãh¹P%Oõ[:îûÍöw|ˆÏößY¼ø»c\-µ]Ã8q[ ¡Ao‰3°t[÷þ½•’@‹#„É!z`Ô†ÝaŸ7èñlÛY÷Ïy#.¹âXÃV` &ø|˜£Ç9¥¶wI¾ÞÙÁQ¡±¹Ñ9:áb´Ã¶µ­è‚øý‘?8Ùèõír»À¥ÎJÝÞN±y ´ 8‚^³ fz„w¹\ß¿CßíñbmRVZ‚áŒe_ïÞ¦7<”ÆP¯žÕ8‹£©I6oÝWeÄÄ|ŽbuUwL-f9F‡Ÿ:öTŸè-™˜â¶gÏ*èGòÚëÿ;íÔ“©iY0 ~ÌÑG‘Ba¸ Ëææ&ÌWØ…ëß¿¿™/<ëìç^˜ƒ³… "lÚ¸ ¯#µµµx ‚×±Ç-Ú¢¦Í褢ƒãøc§4ÜÔrôÀ|¸qæ(Ì®¿ýQÏèŠK „"M {pm0€êì»w’}c1Ô¿;¶m4«f¢\¡^¤pßo «Œ ;À¥¨>‚mhf¡¬[Ák‹ômÞŠ(U‡Œr9<.õ j0‡„<á€'ˆŸ;àñ<ÿ¥wŸ}†ôî‹KÒ†¥[؆ðxB.WàÃE·¾¢¢SçÊ ¿ÿLM1:G€KôíÚÀè}zôtÆ›]O—§Êãñ¹ÜX%úýÞÎaÿ2Xš¥a¦‡ËæÍ›1‚±É‹ÔžÕÕ{Ú¡ÓöîÝ»dÉ÷ãÇ¥„Í„/¶û¶ÚýÕ mèà`nx¢¤ «¯Ñ9Ç0^¼Õ)€cÌb±E $EÁî¹ÊGð,ZµfÝFÔÎyùµ3gì˜ÃÞ0¸FIfkÖ®ÃÇà!êÍ)5Æ¢8ëÜ3­ `†8›6mF̾}ûPÙ+à³}ëò‚ÚùÆ XDâÍ{æ4ÒìtÍqêd"ˆ¤.ÃâÑIÖ¬èš1:©;;Þõcïþ-=Î¥29:©íʽ2 ¥×«3u0´hc¯CÃÎ`Òw¼‘ ;úßë¶­ß¹fK¯Ì´hå ÞððxðÖ“ã­ç:èðþô×gËËJ{êÌ3N,Ñüþuv2˜ïqkäñøßø¸õ­…òrõU8N©®`×ä?/ý³ fz¸`×kÿý÷à ž÷9Þ¢™¸pá×*Áýx£?háG“8ÿ„,Îóç aõÚ b^ʪݬè]%¢-°E=«e÷ž½pWUÑ©I¸v–-@*Eëš3ÖMêýn$RSScßQG."ÎæÍ[øŽ;«««*+±ÏÑî0£Së‚äãOçÃüè#mç„ý4O}0ð"WœÔ#ˆ×÷è[L-õ 0û~í¶€:¼Û4ßVHPâÆ «;u [I‚`ª7lJÄã3]ìÅm Lݹ·n’èv´Ô£cA¿ z15yAކ½ oléݹÏ䃆XttÂJC/2h\:èðã»T”UV”uëÚ¥Ùã®pâ## c× 쉫sÞÇ a¿.'ž|Êȃî¸ëIäûÂþ¥ÐŒŸ IDAT[¸[׊ŽwK ”••b(|ùåÌ{Q:™¦„˜†Gô†AéÖ­«¸3Q÷åÄæ¢]´…) …WæèNF”XòŠRQQŽ» ØöÔPIe[ä7nDü±cÇD7äÊä圼|ùŠM›63óž&Ú½0 6zóÆÕ²ç©Ï^:{VÈTž~§…f§K¦©Ãúî{ï–-!§ò€OÖlØÞ ~d ‹Š@wm>|. à–ç@0ìö15ÛäZÁe\µµj|ÏM‹ßxR¤—yCež@…;Pî –{ƒÝÖnUκätëøÈ7úàÒ¿>ÿ<\¿âÞßß\YQºmózÐiùâ/•ðŒ@D:e«Ù ‹=ì7,\³+hK‰Óqç£YÇ?õä²9¯,ijÚ9©>nt޳ϬĮÖ‘Ñó~ÃkÐ…Rp  1lõ:ö¨nÿ{scw¿Ò¹Ç¹«¾÷ÞòÍûþ€«$|pЫÞ/Y8R( ›šþýššš¿ÜØ1˜ûõísÂqG G /ЬŽ8ÌøÓ^03‹Ö£{÷©O‘ãÌ7ÿ«¯UN†q •†î={Vãªì»Æ1TbWÆ0²ñ—*ãC¸†QdåÛ_m{ö…9²FÈ/>òK½’5Y@`Á7K9h¿,4ÔQMä~g'ý,¦GpÆÔ3¦^£×ÛñÕ{±&-<ø9ÞÁäé”–ËÏAÒˆÀ”Éãs|´¥ØÙÜï 1p£ˆž—–צ »3…Š€a û¥®P¯(÷«°¢Sy¹ú¹,>FÀ&íè4ç5õaA>4"páùgS´=o°Lµ ´£ús￵²@'¹ …À¯/P?*Z<‡ú9s>F -¤J'÷Ú'Ò’GZ‚d?jÉié ‚¤= ub¢ t¶6æZC´‹=‘|E»Ž¾RSkQ„#Ù˲…‹\%· =…’mrGN´ƒ Ù'dœ"&g øú˜Â@¾(zÞ«4VtJ×…”q·ir^öãç‹e—06hx0—h,%¼Ø8 )Š\$YXÂF£ÑICõ‚l#dœéŸÆ^£'{af]« %E ¢©¢ZM|˜™iäVS…%M.‚ä”jr¾CP²šÄ‹H‹à#à%Ɇ©kje{’Ɇ4 ¹iX ÙÒÐ]6 Y/ ¸¡’HH°ÎD_K¹ÊGV欌. a¤gØ—œM;£‰YÑIF*ûWZ‘ÄõÓëí${‰A {ɵBO6rdƒ5äKMè5ú*¹!ªM]Ð7mØ0“!ZRJd×’\ ^ˆC§‚ì¿õ(]¶ccŽÆWm4ÉWcLút ˆ/7jÖéål-r1…d›^ £*á{§춸fâB¦%$B‰ÑIƒÏ:$â[”£™É†î”- †fö•¢uŠ&9%û¡ ÌÒjv’áLJBˆÈziÈŒ4Â>.ŽÔÅ¡D!“(jš6lH¸“¥ÒxÖÇ—5Ô®È\NU²¥¦*Å 3-½ñSìlº·{ŸÙË£aDòUìÀ¡c§i|Ȩ¨>³—O‹=;×mD éÄSSŽnÚ<¦“aXÉt Ú­ˆ½ßÝÛÙpÓ†À½÷Ý_`=²îŽ–Nø¾Lk®e3ôt2þ 3Ö3Œ!Àt"(X`RE@O'^쥊)û-::Å~EFFdÓ¶íŸ~µ0\ZR —8;Jü¥çéÇÛ«ºJ6³ßz罓Oñ„ã4f\dòŒ~™ô³/^uÈ7JIȉ¯­WJœ%ŠCq>þa‰£Û€RG)~ÇS)uLŸ4zxMo‹nã·4µ`4òùì³Ïž3gÎŒãÕXr‘È ôt2Xìá—¯•Þ3Âêïò)Nüb¯RZâ ;# ÇL?ß]Ž®~øÝÚaý{ZôY¿g(æ%ÐLðmllÄ/L?ÿ÷•çøÓÎïÝË*,Y²Àt8z:iç¤q*kêz<úÂ÷×ÌÚŸ2Ž8ðSíJIiiDq:ÊNkÂaƒ’Fg41/á»fQý ÇþùØ/®¿Ý DðK{Š÷éÇŸ¸ùúËnºó¡Aæa51¹Èt ¶èäŒAæ2>vêMÞýÍЧj”TÔÓIÌN­tŠþj¬ø# ¸ä‰„Õß'ÿÕïnÿ7_÷›Ûï:t…bÈMôt2Xì9ªf§§ÿx­Y7V|ÿI”îÂE¿Ø³~™Zü¦7ø6aßIÅå’7òìܹ뾻n‡û9gŸúåõ‡¥ù`r=´K2d/&ÌNàŒUgœeú)ˆìõUbvš·dot¹çÀoº”ýŸû ö°q¡¡}°ÞóÜzã"a7x5ñðëôî™F G°E'õ÷ÌmÌN°±ôú*1;Áë„im ¹g^YuýÃßÿá'ýÆ ÂïH»A'GØeµ|0¹€€–N&9©<³ÓÂõaüVpôg_ñƒ¸øÑbœP áo—GþýI(à¿áÒ&qÚ©Åìä÷«?PMG£+tõ…‡]÷à÷ý¢×„Áøæ(£¨šF ‡ÐÒÉð‡æ±QŽCì샟s¤èQ(Áoª¢?œî F|~ü¬º2ûò«¯»Øà­X}d1;y£túÇÛ;sÚ¸NMîÀŸx ×>¼õý{º`ɇ->TéÝE|fr= öJ°pöÕÉä ž‚óÜ^ÿýý†@Çyç]ÙðwÖôJ1;¹ÝêÞÅ' ÀÙí ^u֘ƆïÞ³ó–þç+ް/ÒJ'ƒÄ¨]\@ÀèG 6Štƒ¥ý!|ùÉ›ÁP؈\wÅ¥˜—¼~u¬cjÂ?zæ*?ôàí[7´¸=¨}òÕ - ®f·G-^4c¤C íwÌ£Åa3VÉœ@@O'u×Asœqü¤ù÷;KCaÇ´£ÔÙéÍ×_yøÉ¿Q„§œ³áÂÌP ã—:;]vÚp/Üìö»Ü?ðÖ‡CÁ>™‹*q˜¹Çêù/#ÐñèégMå÷ùƒ!å÷_Wç"¿rñì‹hR‚à&0;‰Þ7·¨·F7>ù…˜—„röqÃqûÄ3RÇÎ ´tŠ(qèäóz¦Ïü¹u†A •ˆÓìòø¡+gŽƒ¾>¡~Þ¨¢¢L ‡Ì\¬[çZF £ÐÒ)îšêçg‚Öé1T–””‚M'ýäI ýáP,Â9¢€KaC릹–è@ôtŠ3;%«áÊ Ê[²ŸYLC3cÖ3Ž@–è4eòxæF‡_lN Óèéd°³—é$8>#Pè锩Å^aàŽ`,ÐÒ‰7Ó,Àâ*FÀ-ð#Ö\Ë0fhétÛm·™™²žH;î¸#Q—¼¶×Òɺ3žó­RÚÃãõû‚J0ÜÛðâ[ÂA¿§)ô†‚rÇÓMú¥ï¾piX` Äèä‹téÑkxiØQî{¡š¡@0Œ4ü¡ˆß Â~<þ¦…Ÿ»iåÇm`-x¹ƒŒHŒNá §¹Éq–í®sÕ7ùݾ> ©üÁ³OaõKÔø”P0*ïl÷K-å+át:õÏíÊÉÉfaI‘ÓÛ4O"gC_CeÁStÉ‘4RìE&Ü£SĽáü“ÇW–wŠ8*UÖàP??®&†gÁ¨`Ø EaGKKý%ŸÖë3Æ• eÔ›JqùÊr7{Õ‰LÈÞ¾±µ¥¦VS´×Q+›qd3\8¹h´XU‰Ñ ¯Þ½«*õXUxj#ˆ‡sÃ,üðˆ®*Çï4–éº ñP“Cö‹™ÈH¦«#™H/]¹å]œÄèT]Õ]ßC<2—ð”;þ9p+…³·mWBïÑNC#C¾®2ñH–0ÓhNø ]Ž&ž‚{ Ž"Å‘5ae{Q%Ç,û Y–ŠcQ$w +k ËîÂgYI c* c¹(˨E9šl dœÑYŠ˜|NŒNz¼ð ¸eŠ2ªu½'¦©°vfR]Å5AÄ•/‰,ëî²^¶'™.0id ÙБ‚èkI#Ç${Y)d¹Šd ¢×è#ØÔècRpJÈ0†@EÑ„¨’…ž"‹"Ÿõ¤F'pI‰„°ÒÃÿª€Û'|µ‘ú!î«t]ýÕÒÙ¦_!FÍ#L®Õk¨–ª¨kT¥ÈR£Ït1nb"ŽJ/ÓÝÏfü”~jzkóêç_Óåë=T¹ŽT¿{W¯?Ÿõߥ»wºŒÈ”Íž¥Ðƃq&5-ªÌ,ᢩʅ"u$7Óˈâæüì.½»áéHÙÎp1¥‘HÍ’nõÛo.ûô¿»\=Þ­q|·×ïìiúõÿqÓʜƊ ‡&ì[Ú‰F6 KñSr<½{—Q÷$é„—×翸ÓÙgg‡kGïÚA=÷ /?¢ä»9õ|«j%û»6UVôýáEšÔqH#^ÅàJùEQÖS­p'3Ù†”?iAVÖ˜%£Ñ£¨II¢©¢TÉFo ªH/ 0÷2ëãÛIO´(|!S”†MSCE+$C'ÀŽ86Ö®írϹoã&÷³“Ë»ÖoðnÚã®ymÙ}¡È_<еë‡ÇÙ2²âJÈÈ%I {ÒèaCz}X ¢©.²£Æ@8j mô–šàš r‘dD4³³…™¦Êº(Ç×X¢J£Ñe_–‰ÑI,ù1Å8KºSï<áµojÏ®¹le§=›š×íhqÉЊ†»æUv;âÃë›å4"€Ñœö9!¹€Éy¥Šœ •vïØr‰§âº‚WÝOéòÏuÞ“—<ײ¾eÙVߘKïsÄÆ`ç÷›‚ÃëöxÖÖÙç+r–M,îü×@Ó±Dí…{r^𦠲˜~{ÝÏð€øßâÚ>Þájèܪ:yå:Uÿiçrßw;ºž7åæÃgN–,0Å€@Âåò,§Ø÷³ÿ›´Ïsüñ¢V°Žô:ŽôÞ9ó£ÃÇpiô9Ñ¿!g|ÔsÆ¥?|ß9å]ç„wœCßrö}ÃÙõ géÿð ÷¬{K‹Â>SgYÈwœË–|µï¤C–·=Á£¸}|PåÒØ‘Á°‚¯5÷”¼÷Ÿù¿¹¯»¯/òE~‡#>¸ïÓ ßþ‹@\ê²Ïù޲Eþµïì[ÀÄ‹ï…ç·mGýëù9P@Ub‹=t¥B¹µ«7 ˆÛ§4à«”½M!oÙÎ/69šÂwì£é¨>± X÷Ú'úž¸¼­\pR×ÑWF"…üzQpW̪C Ó).ýá’êóNœ¢¦ã¹'p;=®ÙçLŸ=ó?ß·úÒû?ööû™½I)c´™½xƒi0ƒÎB¦"¹§Q›K{Ø4äPˆ€-:É÷Kš\m²ëy«áXѹR-Kÿò–^xÖáO?³žbì^ñ~Ó´béÊUrvf§äzr^È- G žäËï²-:¡“†´± ™—ãö_Ú¦ÜÿnÈÎÚ×ÂÞNßõ>ìçðÞ ^áµm6QÉbvÒXf­(æÃt5'˜–®h§c°K§³ôz½%ðÁ2u¥‡¯ô/+UÛ]÷Ü}GIwÇýø=i§_]ø9Ü?åÌc©9Œ6Ü;ɯî²Lf ×,ü ¤¡/¼„=)…—l& ÄÙŽ‹ÞFÖh"‹*¹uaÀ÷N2ìy-g‰N¿OiÙâpL9ñÐ1%Ng(¢~±ÄQSæc^zþã4 ?P >³{'Ù ²¦ò…ŒBOƒXV’—&Šr}­ÐÈ6†a •šh"ˆFÉÅÔøb´ÙœdGÍ,J!ËÆBÖ¸è Ì4I;Š€fù˜5Çú\F :¥ÒŽÆ þ@ Tî™Óè 8¼Aü4µãšãB‹'áOüݧ¡žäÕÒ £M¼ï„Q+³"•d2á{ÁÑjGp\vÙe8_pt;YVªÒqÝ}ßÁIRšxÏýEñu‹ªO÷e‰Nh)ä©F¾@䊓zàƒ`Þbj©o@Õ÷k·áÛZ °(¡ÙI°N~ɇF¯D[²²¦u¹Vk 4@˜Ç}DoÚb@àêk®Ý´K§„öÄ <õÙKgÏ á·¨Ÿ~§…f§K¦a|÷½ê¾¹áA³j5ƒžŠ$ˆšb¢JJC‡Š$È)‰éˆ|Y(NlÑÉðM§„ðºêÂø÷ø¿Þů»ŸspKPýîå0Î|Âá Oèécbì&4;é#dYãv5ãG}pC;ÌduY‹_dÄ׿FÍ[ÏíKÊòÕgÍš…{Î,÷‚›K[tJ.´¡×¥W^c¨7Sʳ“™ ëA «tsTB=ÇìFåþ9º£PÏØ¸ÈÞ¸ûJ}ј³W€¶"ô‹=±Œký-„Ø1[顊–|¼ØËÙ+.'†­±³—ÀÛ¸²rÒ\Ú²qíËÏ=,ÿÛ¼~E t¬Ë“/}N üþ©¶Ì_÷ó¤ÿÙ­#™…|D {tJzoðëùoyä¨SN‹'ÍxÂ¥ ¿x7ïuʇc|üò®á|ë/NÁù’ŸÂùÁÏÇùüëÕ7gþüûKqæ#ÈÞ½SÒ³“V>þŸ™h=°F‚fþ'o~þñÿ°t ãûÑqD¿ü­¡¡ù—7Ý3LÛ_|´ ¥î¢ß<ñ»¯xøw"ÔÙWß?ç±ÿûûÝ¿À ðÜkzñákŸðÈüêÉgïýEŠ ºWTvöûðÀfÛ¡×´Õ±”,Ù£SÒ÷NJD™yFô¡Ãh'#%žÒ€Çö8CnGÀñ»ÃwÈç {Ü÷¼V®ÁAÃMQcœÑâ?ïÁS·*'¯ýwWp ÂÙWÝÿßÇ®é‘ë~õŸžwŸµšßw6Îí§J±†-¤gÚY²·ØK~vÂ/±aú ûðOqÔ•êZ§o·Ã»Kqm¹¶›66oXýaðJ®‰þaÛœÇURiŽ«ïü·Fc]‹Ä?™Z²‹Íd–Ó…@öè”ô½S8öã6%Î@iÐï ´8ƒ.GÐö»ÂOÈçy\¾Æ½>OKS‹Ë&.ôÑx²OB¸‹3Å1||§Œãêg;ßôƈîÕý/ýÇ oÙÍ /VÿþýqÐ\ñâ¨3ïR¬1ˆ_IáI%dYƒÀ(Š)4®¦dNIÏN¡è''"¥n§âv†\àR$ä—Ÿ+äm ãŸß…ß÷MÍúŽOhÜCÀºK¤Œ)ÚýÞ‘PŠ˜†^B©oT£ñûU:=6ÛÛÒ¸{{­oçúïüa04œ×HšW~× šP01:=ìÌB0¦ÙL“!Ó‚@öè$f'ë³a—ð£ Xæ•©?#…û%o$äS|ÍŠßöy˜š¼Í!¯Ÿ­uûÊŒèD<@ñAqXh¨Š„˜“ö‡ ÈÀLÀƒ)¨4tÔ£z—†Ž͈}&ÜwN4¯ÞÔgÔØIÐcS±Y(žèªhª¸˜}²·!f'ë³aÿCؼ J#˜š¼‘@só’Ê¥(‘0Aù| >§îó»› f'Ø2µ`ž²¡ ”dcf`¦Ç“)‡ŒÜ¾eý ¡û¼{gdàÐÑ[6®ˆ GÖˆÖáe§-aãAž_]> #ßwËUþ`äïÜò¼ö‡ý~åžò•7ž{Êço[ŽÚ NkèuÃíß{˵_së_¾cæE×¾ü÷GN½àŠ×þùä]1çïOœ}É•/ýõq£uQPHc£QŠ")IÐxq1-dNIïìeâƒiÁÎ~`0ˆ™çίÁ—³?ußí~ä¹?=ä (/ýåqo üÜŸpVž}ê1ŸŸ{öAÍEËìÑ)éÙ)aK0§P08óâ«”pŸðHЕÍó ìÑ)éÙ)Ÿà4Éõå'oLè “0¬Îuò`g/×!Œ—¶=¢¾®³í€SI 4ÑSì,þÆ‹Çõ¹‹@ÌNxÞ ÏhÈôƒã‡š kXfrìÑ)é{'ñ¼S·ÎjªJ¤%ìÞýΧïBfFåÂâd²G§¤ï:üy'/– ²G§¤g§Ÿw¢ÎÛ›ˆ\X`B {tJ~vŠ=ás奯#öŒ†âmV?NŽOÁz\›6-q8NÒwžX„}’õf¬aRG vö:äy'Úƒ£HX Y>S EŽ@öè”ôì”âóNú &`š±"¦P?5§7Ð!3!°²ØÈpïp­Ï†è§ø¼¸!†âÇtÚ9‡ ìr@;ölSðdûÞIÌQfgC¸S|ÞI zðG®a‚l£©’½Xf¬ÈöìdamZžwI4ŒmÉÊB%’Å#Àõ–zÆ…‹2Ùžä¶mÊézÞI0 g!ˆÖ!C R‰¢Þ@ÖèÓF­øA4}UF5òXOñÉ „J1BF{š/Á³G§¤ßwÊÂóN‚Eò5‹«ÑÈîY“‰)òâd-ó‚l({tJzg¯žwÊòСY‹H¢ÑÈܲ¬A¶dŸåÌó½¹<¸wÊwˆ³œ¿ ˆ„Ä Q”5YÉ,̸J@ÌNú¤YCÈ„Ñ+IÃBvàÙ);8gª1íh¢Ó\ASÅÅŒ"³?ïwˆUœžï”öKkÁ´´·Åó ìÍNIã’–ç’nÝÂs”E-W!Ù›’7•çä/fœI©×è“ÔØkŠz{Ö3yA§´ý¾“¸Ò‚EòU×h*ÊqX.rò€Nü¼S‘Ñ<ê~Ü;åšœj‘#Àt*òÀÝO'L§t¢É±Š¦S¡ z£Ð:–ýɃ­ˆ|€±#s”ùÃVtä•p8˜N‹ª­óó¶©"˜V¦SZáÌn0k.ѬES–FCEdM6ÙíA¡µÆt*´+*ú#3d⌅¦0áÈV¯˜NÙB:ëíÈ“h\¯ÉzRÞ Ó©`/0ÍEÄ%Ò0¯2tÕy£›¤õ¡ ^c+¾w*øÁ§ƒö§*óÓj IDAT)1ÛP8;¯ÙÂÅþp¤à¹#$”<ÏN¹sáÒœ‰<ú5cB_¥ÑP1®cš“αpšîÇÍŽé¢Ü5Ð_lFS”{¢¯Òh4EòÕëeIcg£È¹&P/ì'Æ‹=ûXå½e^î¼@Ÿé”—)=I&ñr›bÃÙo1Å„Stg:¥ »3m0Ú°`‰H¦Sв;#Іө –`:¥ »3mðûNmXäôò+¯æ]ΖðYgΔ{Ät’ÑÈ3yÖ¬Yy–qÁ¥ðûä>1d4òLÖ\Ë<˾Óå{§B¼ªÜ§B€éÔAÀs³…ˆÓ©¯*÷©ƒ`:uðÜl!"Àt*Ä«Ê}ê ˜N|4«ÎW¯±Cr^v"§Ý†7ÊÓi¶Ê£Íΰ·cfÖ ;ÍÙlÂN(³4rSÏtÊÍëb7+›×n8{vÄF³ÖÉ n<²4 7BNðb/§.GbÉA() ÉÄ?Q¥— -e3Š©ÈUB–5Bi3E­Ä#ÂjÌ„o‡œyvêسÚ(FM¢a*ÊU$‹Z*’@IC£‰CUzAv'G½Y\&’”5qݳcÀtÊÎÜJzGž!“ë!ŒbZÄ!c²Io¿(lÒÓ)ièòÆ‘fdlgÔf³crnqÛÕ$/ûjªâ†Êß;eØl„ÅÒ¿`›5œ#Î0½„:‚r¯å~Éz3Ù0t)yvJ’G3QÔh ,1òÈ@c,jítÃ, ¡/5gXKJa¦I‰j!Èq C£IC6î(™éÔQȧ­]1¶äp¦KY#ËréIMhІJaC–$c:kôT$AÜLoP6–e2΄À‹½L Ê1‹¦S‘^xîv&`:eUŽY¤0ŠôÂs·3Ó)¨rÌ"E€éT¤ž» ˜N™@•c)L§"½ðÜíL Àtʪ³H`:é…çng¦S&På˜EŠÓ©H/¹OL'<“5×2ϲ/ÄtùÞ©¯*÷©ƒ`:uðÜl!"Àt*Ä«Ê}ê ˜N<7[ˆ0 ñªrŸ:¦SŸ•fé¹@jM¯¡*RG€é”:† a’tð5ˆ5ÏtŠ!Áö$ñ"Åo㶇0ßJ¸äâoÐý8Ðkò­£“¯Œª ˜NvPÊ'yé5ùÔŸŽÎUF/n.¼Ø‹ ;âUÉ L';(å¨ M>$äh¢yž–ý¯LâÅ^~_jùJÛÍï>g7{á¸-3âB”g¸ü^é5yÖ¥ŽK7!.!M¦SÇ]«”[Ö\l*’@-è5TÅ‚I€Æ÷Nf`²žH¦S±#`†ÓÉ Ö3 #ÀtJ2v`Ì`:™!ÃzF a˜N CÆŒ€L'3dXÏ$ŒÓ)aÈØ0C€éd† ë„`:% ;0f0Ìa=#0L§„!cFÀ ¦“2¬gF€é”0dùè€G64Omäc/r?g~@#÷¯‘i†2C,ž&€™E­it®H¦Sâ˜å’ñ„9“ —…é” W!Í9Ь%“ mˆ¢¦VðØ¨¯¥ä4ÑÌB¯ B ^`:Ú%&bˆa-8 3A/“ ¾²lF²Æúâ9˜Nù}­1vEˆ$(’Ò°oúZû¾6-£˜N†#$o”‚ †ÈôÐ÷$•Z}4h4å”4U†î…¤äòB¸šµF‰^*©Ã©ÔRYÊD’õf²'ežò÷ÚµË\0 g™Zò˜Ö©ÔFÐ$Âè[o—q!˜Ny|U5㕊$äN&]KŽ$؉ÙÞL–3Ì_™{ù{í8óœC€é”s—„Ê_˜Nù{í8óœC€é”s—„Ê_˜Nù{í8óœC€é”s—„Ê_˜Nù{í8óœC€é”s—„Ê_˜Nù{í8óœC€é”s—„Ê_˜Nù{í8óœC€é”s—„Ê_˜Nù{í8óœC€é”s—$ ½üÊ«šhzÆÀº˜¢»Ž i‰cj‡Ô2:öt6šÊ蔇µ™l3W‘FÜd`pÖ™3ñÏfØü2ãçòëzåt¶DÁ™œÎ53É12ƒk¶¢ÒÀ%-CÖ´¯×h ÌŠä(SE“ÆÌWèÍ"wM-ŠÐ‹3ÜõµÔµnfCä’锳ÚE´*†š^C ÑØ6òY¸Ó ¤ z EÓ ä%G3Œ@–zÁ—ŒEÓrQ–õ‰eHÃtʰƒÒ~OȘ_RÆÑ×Ú÷µÐÐ,CJ¦S†€ÍFX1iDBÇbZ2H( 0¦|DÖR©5ì u@C—4*yg/`v@(Œú—\óp'ʲ&š†$šZ¹(‚È![GH¥Vß4Y©‘ #$¡äÙ) ÐrÚE?šõ›! /¤ÑGŽ8 AèíS©¥˜r>Öõy¦]ã\¶ä«}'²ü»=çµwo»í¶´·Q /»ì²Ç}=u»š#Ši;ÌäŒÕ2zŠc£!eùê³fÍ ø}Å€aþöñêk®8p òçÅ^þ^DÎ<ç`:åÜ%á„ò¦Sþ^;Î<ç`:åÜ%á„ò¦Sþ^;Î<ç`:åÜ%á„ò¦Sþ^;Î<çà·qsî’ØOˆÞÁ´ï–éE@óÞ4Ó)½ðf5ÞáÍj{ܘÍ;ìL'Bù£Ð\ËüI¼`3å{§‚½´Ü±ì#ÀtÊ>æÜbÁ"Àt*ØKËË>L§ìcÎ-,L§‚½´Ü±ì#ÀtÊ>æÜbÁ"ÀtÊïK[QÙ™þöµ†zûJŠ/BÙ([Ê2šÖõÉÀ€þék 5qc /›f†MÄUòûNq!Ê]Œ ¿Ï›Ñü²Ð„YþÔ5›9½YÀ,è™NY9«MЫ/ /¡¡¢ÈÆÌ µK}ör@Má.Îp”-Íâ½Fõ‘á+冄LU4ÙX´ž®3Ó)]Hv@1¼DÃ4ª„%I#§HJaFƲ d˜‰Á'dQK¾²’" × Gý™BÉ^z3¡! 2婯’5"5jÖPÒz¦SÒÐå„# 4ìd¦7£w}²>ÙËfIÈ™’`­Í2QËtʪÓΘ“™#Ÿð’e;}ÐDZãeÓÆNG C%íh-!%ïì%W> n$”qÄ„ò´iœ6#›™ñìd†Lèåá"˜€3)5™*²™è§Æ‹:OzhôõqÈQØ w˜i,E(ØP|ÒÈÌd9šÆQ_¥ÑPQãhÖVBz¦SBpå–±á€Ð+õtC£Ô©Ÿ†zY)ËÖa5–¢ C¥>Ž^c樷Ôk,|aœÊÁ‹½TÐcß\A³\æHb¿“L'ûX±ešH#Ò*•N2RA}v0ÚÁÁF ˜N© Ç¾Œ@;˜Níàà# L§TÐc_F L§vppH¦S*è±/#ЦS;8¸À¤‚Ó)ôØ—h‡Ó©\`RA€é” zìË´C€éÔŽ‚,ÐCÙ»œê”ö;î¸#§òãd,y’#ŸµÈ¶ª´tºí¶ÛŠ¡Ûiïãe—]–ö˜v‹rä ;9ç‹Mòb/_.nœ<Á+š¬ ˆä£Ñ% H&Ò{Ñ ‰B¡ ¸"_¯bè§,½Fs¡5^šÚb.ÊÈÄÅ¡é„>Ÿ{Ö)qzîõíÿÄñAµÿi¡xà‘§5ú,&úšÚ©æEÓöU˜tÊ‹‹”¹$i.Ê\EÙ>žñétÿk]0äð#Þ@Äãxbg_Àá F‚¡Èü†ØÄ×étF"›Æ©˜ýýóp‡ƒá ?ð…üÞ@Àð»Co(è ýJ((âßwÃÑÖ ]~Õ O?þ€µM‡×¾‚*;<ÕüJÀ>—Яøt‚Qÿš¾.o8Št F@*(*UÍ”o–¬q8Zé¶X ÑF¦™,S´D¯«~ü¤ƒáÕâò7ºü¿|ä–ÌQü!% ²,éM·­÷ê#ƒ?¤Ìq"ÑºŽ®:½R£‘mDOõB ˜BÕ&¶è´{Wmƒ;âò)./ΗWñø •hC ·¾Ì§…ˆ™Íú9¦Ã/Žû–>9¦rì9Š¿þ²5rÝ.Ùå——õ—‹ób.9›]l^S4ó%3âž™b+ ö;nL§«>^¼è{ŸÏç÷ù‡:øœ3Ô—v°G GŠ#Ž„ÂJ(ì†Õ•Þ™ÝápbÖ$ÍW2Idâ‘,,aF³˜ é>9TpIiX9áà#ýăB¸üÊV͘1c(Hž Ä¢$†Qžv9íiÓéë…ßßÿ)ÑØ‹ËO?ðäÉS§8íØè¤DÔ3HŠ,]¹ŠrLEA™²L.² óMÖ§"Ë\Bÿæ÷¯-ŒüÑúˆû‘õãfŒ]õÈêòkÛeÑÜÓ?(vöÀ"0JœspgÏ¢ UÌ" plVÓÉÝ⪾°õøâ‰kƒ;çî\»òÎÇ–ÿvð¤†&o—Εû÷ŠvS(—<6óKÅLÏ¥ÿ~QvÚ»y¤>âŠrÉQëìܵóë³Þ?å…#ã¶E³Y‚QÏÄf*R²P´Óɇ=;%àÝ[¯x¶G\["æMƒÏ¸øç+6î\¿sÇÎ-»§Nž|ذØËeàz5ÿ½‡2©wiõXÌKàR×ýþèí{„{Œ_<ó¸´yÕæ×?zÝ—°¿×6;¡ãbÉwYt½W‹½\¾”ù’›ñ‡Œü>_¤q;¸¤¸¶„›7íl詹úÈc:îèÉgž9cÊ1Gþï7í¨Åî˜Û—AFaŠ#Íd20Žºjë‚ïê—ÎøÝ®#gœ ³±Çœùé wzOpédi^Â>ž¼­gS£äÙIH1Mf'¯Ï½öÓ½;6¶´Ô)A×æÞ³'LU]ÞUÁβÃ1jä°)'¿y÷}{‹÷>yÄ‹UΤ¤u ìe½p'lF‘“p›wèe[þ}kß™7í±ƒ¢f‹§`gÇŽ|ý§Útt©&¸†Q´QÕ·n<Ú‡£rêSšq1kÓ©¹©ùÖ¿tòù†5Á@p쌮õ ÞU‚G÷ª~/¼ð¯NUãåD ™ QR‘Š@½Rjdr7ÂÑíÇ3oÚ…}¥Ó=dé—/CïŠtžÜÿ‡޽êï Ÿ¸Ä½{Ni^~å՜ʧ“9ëÌ™r¯m £ Î:âæ¼}ÔñÇ:"<Çú­Û—~1wÆäð-wþMŽ•Sò±ô=ö€KMSr:îü²¸´uçžšqUã.úlÕ?25ÎÕŠY³fåjjÅ’WÀï“»j‹Np¸óâ“.»ãÙþ£ÆúÜžUK—NïöÁ¥LþøÊ¿ÈáòE&.mÜÙðÜÓyÉ%@­¹–ù~çi—N€à™ÛfÇ€8êô™ïþÙs';ëù'rþéóæïÍÓ\³z{ÌFK+óp^Ê ‹,Qãò¸ ¼þê›|gĪOžÿvÉ–¸Æ¹iðìuý™K¹yiò7«$é„¿öÚÿ^]‰3ÍïOr•ìÌKØ“ŒJLPÿE=Šª† žÅßœ‡4E Åž>ƽ÷åèS@/½ü¦>Û\ÐìÞ½»¾¾~ìØ±H&××Õ66µŒ1E> ”蔳ýÏÙ‡Û»wï¾mûö@ P^^ŽG›š»w¯ÊY9±DÐÒ©È¿·$QøµïÒ¥KIIÉÎ]»†âq»w×Öõë_“h¶ÏYÚÑéì3f$˜¨ô‘ƒo%Ñ“ì©2¦‹ý¥ F:£ú˜]ì¯l“crçΕXïUõèÞârƒ!°+Åå7s5ï*ŠÈ00Ô§Ø.»ëhG'}5kÒŽ@eE¥Ûå©Ý[WWW4véÜ›I·ÂTIºô:^2[}K=Õ—ÆôæT ÑzõêåvîÜír{ª«Ôï‡Iú0ä’ö!_rv»ÝËW¬ÄöƒÛãÁz¯¬´ ìÞ½“Ó)_.¢YžöTñ½“>é×oݶ- y}^¼ÛµKWì@0yÒ¨Q#¶mß‘\cXÂñQrÐeÈ«Ý씡68¬@ ¡¡q¿ý&âsE_|ùÕ~ûí»hÑâ ¦ª`(hý¢Â$€Ò0 E1I!‰&ØÅ>L'ûX¥j©~T/iqµ@(ïÔ©²²â›Eßb/:!'=IìhRí û!±‡÷vÅ?#÷V]¢ïÿ&joÑtUUTV~µàëï¾_†·§ñ™×šš~oãN9`ÿ<ê§j@œÙ ãžö'dÙ""W™!0hà€¦ÆfŘ0nLI‰³¿¾Çw}¢ÜÌ‹õy„€Õì¤áx%fq$Õ Y®"Dd%ÉT[ØBMÿþGyÄÉ'?|øÐÂîiÑö.ÎìdšÄàB2C²&”™^cVÅØW£á•«íÃD¸}Â2OQêI‰ŠJ öYÕRV~°§€ÍÁ.XÍN9˜.§Ää2L§\¾:œ[ž!`E'¬ÇäÛ‹•[žušÓe2ƒ@œ{'™Qt·#+EV¤6DBQ¤Zêi„éY`ò8tBß G¼^)kdY cG“×8ròŒ°Zì1@Œ#é§“~"J(¡Â3Æžxô0øb0úJ0þb°Â¸îñ{…ÑÏÜéŪU«ðÞ>Z>tè°nݺäNbœIêhéôë_ý_êA‹0Â/¯k÷ÓO2øn½;¶ ~¼{ð õ«‹Áà·ß}ŸEÅ;¸˜£†Þ­+SK†-ÏdA-Rù< [é‚KýûõAkø<ùö»%ÎÍ[vöîU…í¹ÝžaC…Bá¥ËVL;ä leÄí¤A=Ú~M0ýmwÄM›·õîÕÏ;Õô諸w«­kØS[W^Þ _§œ6ò³ƒú‡2 ÂŦ¥¡;+ÍÀí1ª˜Nfø¤M/€F¸pXÙ±kúUäøO}ôI¥¾ƒt»’k¸Á*©pà¤.ûÂÊî={a,ª05y<^×nج`_ÚhˆAEÁ(2€@2â‹Zû ±¥!z:i{}ú Ü»§í{Åö®8FL¯2ц í •éÍÓ"hŒ¯þ€‘ …%_UUwº¡©**ÊñÅFdcG0ä€F©)"¬¬‘e;-²5z:L;ú×upLÄ­ÝÝúñ™¾ýÉE•^ „Ì\`@^¢!„"cÔj"ÚS+ä "Efú¢hNèåørX›òÄ}÷]ºl™ÇëÃJ/ øÁ¾½{aéWW×`3›å ñé´g×6ÊEÇH@ä~5ƒ5˜ õj­]È]„,š0´‡Rr‘0& ,… |I€L½h jûOÏž=8üp̈ ŽO>ûÕ×Kl`üA@K'ÃÄiËCÐÐR£ö‰zi‚¤·H}I(lr^fM9ýTaŽÅvÎA´è=VVnJÍc}Šhé„ûdëˆÂ@6³Öȵ²Z‘‹²™HÀLc]+ǤŽÈJk™jõEKTà/K±üµ×ÓI»¡é^N¡gQe¨Ù±mcÍÀa8£V–åhqƒ6dѨƞÚÒ7$‘e²Ô@/( Œ€!ñé4xè(òܶe½g4ÚPz 8aF6¢Š|e(õ.²Fø’4š&¨V4!§!ì…^„Ò˲;d‘%i!P( z:i{[6­!±‚†ÖB$“™¾ îdF¡„Re2 ¶ ‘e*B FI)4PØPQ“¹Sü¸òÁ˜! §SœÅžY ,èiÆÈB[Ü#Z:a«)‰(YpÙ¸nEÎæ–…îsy€–N´.Ê‹ì9IF §ÐÓ)Gg§œB-¡dðŽÒæ-[^úïË'Í8~Ìè}°o "`íÊï;%„dî3RºFkVÆÿph³n݆%Kð«í«¯¼ügûï·oì¨Ö¦ñyXülî÷K—ýððCSʆ;1ôtÒîìu\†Ò2梒’Ò‰',üæÛyú¼~ÂñÇàûÀD÷ÀÚõþö·g'î;¡@:\”ÝwIz:ñb/Íá´´tÒ¤‰Ö`Rúfñ’ç_š³uë–‹f_ЩS'pé_/ügþ—ßyÄ´3N?)Í s¸," ¶µtâݳL\‚žÕÕÕU=®¿ö|ôéó/¾<ï‹o:•W5ý‡:÷ó¹ŸzØ¡§ŸzRçÊÊDÁ¯¨ìLÙú}êãR|tâÚiéÄß0ž¹ëQVVvÂqGOÜwüOýõíw?~ç½Ë:9÷=æÂóÏÁL…m‰$š&Z$'‡]RD@GK§Ûn»-ŸÅé~Ùe—Ùé8Ö{øýöóΙyëwãyÁΕ]®½òg°ÉgÇݦ ÍZ‚`rQÈD<¹ ÁQ”«ôî6(B3AíwE!Yîòž=µ=ñç`0€§Ù›~uã­éM@PLÀ?™-¢(ë -5ÉØ±Ñ¸s‘é”Õ«.ÝxËï7oÙvÈÁÞõ‡›‡ZWWÿÖ;$†»øžPR’Ʀ@ ,^IG³Ùh!™1²w5ëë~{ËÖ¬Ý0yÒ¾×\}ùðáCï¸õׇ6í…çÔî­K.1Ûh|…Ò°Jci§˜ÞhvZÌ_¦S–®öÄú¯ë7l1tÈ•—ÿ´ªG.;ãݧŸ^rAÍ€þ/¼ô2¾Û(éT0â1‡èÝ •z3Y#Bá,+…œD4}ÂÖ0²t}~³øµ×ß-q:¦O?¬OŸÞ­´¢¢K—.×_sÅ·ß~»§vO*™'F A¬Ð YA¶cidž² ÝÙcD2¾Ññâ%¡ wÒ~sÔ+++¨LPýû÷=jút,ûõQÊþ¡a I¡¨h!È’™Æ]¶aÙ¦“!,iVâkþ?î˜úúºã;¶oŸ>ô #Ñ >6qþ¬³?ôøTlšÛæpYD€é”%°Ç}Û-¿Ãç÷Ä¡iïð–––$ú©M.v8|ïÔá—€(xvÊøµŒ=ŽW®¶½;ÌQêÒNq¨'%**%ü‡¯÷2~M2ÕÏN™B–ã!L§"¼èÜåL!Àtʲ·`:áEç.g ¦S¦å¸EˆÓ©/:w9S02…,Ç-B˜NExѹ˙B€é”)d9n"Àt*‹Î]Îü!£L!›…¸òó|š§*²Ð:7¡G€é¤Ç$Ÿ4Ä"P‹ä|ê@aåÊt*¬ëí ÍZ‚`TD%QŽ”E•™e╾.1Ò‡enDd&¶÷3‡IDATÙ¾†Ü…@EtN–s£¯9—Ó)ç.IB aˆ {" Ф´eÇF¸Û·´h®Hª˜Nù}¡‹4#^¦–a÷`O6_½=Yê«X£A€7Ê5€äe#ކʤ{˜ÞhI§‘ËŽ<;åòÕI 7Á(œejA6 !ÛR¶4‹FÆ,0òx hÆ7I}“‹$“ ±!½^Èc¤²•:/ö²…4·S0Šà"s³…Ó)[Hs;E€Ó©.2w1[0²…4·S0Šà"s³…Ó)[Hs;E€¿ï”ÇùåW^Íãì "õ³Îœ)÷ƒé$£‘gò¬Y³ò,ã‚K7à÷É}b:Éh䙬¹–y–}!¦Ë÷N…xU¹O„Ó©ƒ€çf ¦S!^UîS!Àtê à¹ÙBD€éTˆW•ûÔA0:ø,6›ÜS´Éye±[¹ØÓ)¯ŠÍœ4#^S´Ħ‚Ó?û.v,3š¶ÒhÃï;¥ÌEÏç‚$[ôÙŽ…{>V1òñªYå,¿Øk4U‘ÞBcÕF´NJœ¡Ð„EѦÊÚ8n»¹lÀtÊå«“dn2[¬eM-q ,’ {„#Â⟈ ¯’5"8¥aÑV^T1òâ2e*I1âmF'cý$XG Gk³¨e:ÀEL² ò,agÄÛ$>›¤õ¡r\Ã;{9~ *=;¤Íëóì”Ç—¯úòµždca)k zMtdGœõU 5Ž!¦S],ƒTõCPÖ™4$P ;a×Ro`¿ _ ’/öòâ2å_’òYþeŸlÆL§d‘c?K f±쥶’é¤E„ËŒ@Ò0’†Ž-L'-"\f’F€é”4tìÈh`:iá2#4ü¾SÒÐu¼#me‡_þÚÊ¿iK€¿¶2mP&HóU‡<;% ¤¥ßWK¶|µxóƒýÌÒÊVåOoýÜ–e ›®9ùˆ©£™#žô˜¤ªÑ¬ñ&Ž­þñ#Ã¥%¥Áp‰³S Ä_êp>ú×Õ»j½©¶Äþ‡æ¨ÿûùÑšö™N@Ò_¼àô‘WNýF) 9¥¥ÄY¢8§3r£Û€RGi$RJϽ¸xÙò]éo›#f¦SÆñŽ8Jïa‡Ó•D"Ji‰3ìŒ43¡s´írõ|Þ¿½å팧 d¦S†v8"NeM]G_øþšYûScgà Ö*%¥¥Åé(w:¬ —­n$ò¦SƯš3¢6!s Åc§ŽÐ4ìt„s÷·¥uѽö 2è:úJ’Ó% >…•åtÅ/¼8L§Œ_S§S³ÓÓ¼Ö¬±ß¢(ŠY­…>kòH†«˜N‘ˆ:=avg¬‹²ÎÊÀF˜Ch& œ¨%у”dAA¯±ˆ`#Í‚5a:eáÒ†ÑFÜÙ)]yÈL9#d†ŒÑ:É$@Iö"=¹JȲ&]]Èß8L§,\;õ½r1;-\_‡ÂápPý? ©'Ô†BøÛåºË§…þÇþ¶Ø~N͘Æ= 6ƒP²·Ž ·gFtL'‚"S6Êqˆ½`0ð³sŽ-…‘@0©·L¾`ÄçW|eöåWãûŒ…³õÐÏDM‹¢(8¦©²Óº¡gÝ“]ö¹Â°*Ç•L§Œ_ ì„ÇvöüÁ äƒ~x Îs?xý÷÷ÿYnþ¼ó.”‹Y–dd{I0*]9ç)£˜NéVq>Z°QTKûCøò“7ƒ¡°?¹îŠK1/yýÑ * ÎNVQ¬“‡8Í4è…ÆÐ†Ú¡Zr' l„R|S°ãt:ónŽb:¥xÝã»ßxï"2ºù†cBaÇ´£ÔÙéÍ×_yøÉ¿Q„§œ/ãÊ4ÊÉR£ÑaW£1 ¢^’žrH—Œb:¥ëêÛŠã÷ùƒ!å÷_ÇD„›¥‹g_¤ ÑI g0³“­„rÛ(ïÅtÊê€òy=Ógþ<«MJen&‘I³˜_Œb:¥ùò[‡‹n‚'°qg­HjóˆQüø`úÇäõ?™žþ ÅŒÂ^_Napã'èóa:é1IU󃇥‚ýuä£;x”.GÓIIªši ûϳyŽJGŽ0 óÒ¿âp#:ñ½“¦èÚ­7½ú¸é“n¹î´Ô‚©wE¥éºNÜGýÿö® `†ùZoÛôµ+º‚ &«%ÃìT†41ªˆû<«Ó¦SöwÝ–S]ý„¹sª#¬NaÃqœ×™Â0öK$’Фý®õ>cÀT›vŠ™¡­µ˜DÌRJï]e/y=ðEæbÏc ´.éfIhYDq B; ’ð€~@ç-Úé­Rl—©€í—Ôê’™L¦°h§)¹Ø8Cï¥ ¼8 Ú)NKfZ¦€Õ% –A}J|ØQ¦–EábVIEND®B`‚vlfeat/docsrc/images/placeholder.jpg0000644000175000017500000012445012237004736016465 0ustar dimadimaÿØÿàJFIFXXÿâ¸ICC_PROFILE¨appl mntrRGB XYZ Ù  acspAPPLapplöÖÓ-appl descodscmxlcprtä8wtptrXYZ0gXYZDbXYZXrTRClchad|,bTRClgTRCldescGeneric RGB ProfileGeneric RGB Profilemluc skSK(xhrHR( caES$ÈptBR&ìukUA*frFU(Vaeobecný RGB profilGeneri ki RGB profilPerfil RGB genèricPerfil RGB Genérico030;L=89 ?@>D09; RGBProfil générique RVBu( RGB ‚r_icÏðProfilo RGB genericoGenerisk RGB-profilÇ|¼ RGB Õ¸\Ó Ç|Obecný RGB profiläèÕäÙÜ RGB ÛÜÜÙAllgemeines RGB-ProfilÁltalános RGB profilfn RGB cÏðe‡NöN‚, RGB 0×0í0Õ0¡0¤0ëProfil RGB generic“µ½¹ºÌ ÀÁ¿Æ¯» RGBPerfil RGB genéricoAlgemeen RGB-profielB#D%L RGB 1H'DGenel RGB ProfiliYleinen RGB-profiiliUniwersalny profil RGB1I89 ?@>D8;L RGBEDA *91JA RGB 'D9'EGeneric RGB ProfileGenerel RGB-beskrivelsetextCopyright 2007 Apple Inc., all rights reserved.XYZ óRÏXYZ tM=îÐXYZ Zu¬s4XYZ (Ÿ¸6curvÍsf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlÿá€ExifMM*JR(‡iZXX @ @ÿÛC      ÿÛC  ÿÀ@@"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ù¢Miv ÖÑÁöwVˆ>ýßh þ¯oJ¿u¡Ü¼çì‘8TfÝ0ŸbÌ »ýÚÞ{7“г5»¤É0±þ#°|¶í I´õVŠÞs惲VÞ68϶êüºªöp6ŒùÚg7ŠÎ‘&µrfYÖ6Ÿ4V]ݸÙÍihÖ¶–¶H.nYJ2¯„;@ÜVæœË:I¦ÙXMÏb+‡•@“qÿ¬ý*WɈ¬E¶¢0GOݹ0ãÛ̯-Ô÷ÏMzæŸmu§ÊöqÛ¤7æ<§§Žxãû•cálÇö½"DŠà\‹©ÝãWOÞ|Aêþ˜nÎkzuÒ务xãñÜeØ`ír›>m©¸ã¾*æ‘§Æ.ÚgšÒYÎ|¸Š2xþ Žý«e^ÒaÈdÿcÉiy3º=ÂÃ",ždÊÇœ4sŽÞ»écÒK;o¶:?› ´Å\ !ŸxC•3ŒsóݾҶꓦ¨›`–x¤™®÷ЀA ¤ýÿîc¹g§[¬†êmöoK|¯ÌŸº•¾wù;e‚×+©Ï#J~æ†QŽ˜íL.É‘"nçË+ŒÕý>àj(‘]´Šéƒ¹Fà Æi]Kz$þÏG-ã!L¥²Ïïy•±ear°ÍÀESûq¿.sšéN \Òh·¤B÷¡þÎUódŒîþó(ì=êÓøGÏZÙT¥¼°9*ùãw¶j¾“=­Í¹Â™#¯Sézìu‰gŽÈ7î*2™í‘ýêãu!-AR¹ÊD³ ©žmžL£jF«€ñöïZ£OóÌÆÈAåþôºùœùƒèrŠÂ5,@%ŽÒ[ØS¥Òí"x˜‡yX‚:‚Vs”*0öÌ·¦XI<ÛZûÔ*•=êõ†‰¥m‰äòÄJ¤ ¸Ù†ëžØ¨mt)¬.€y!%9 ÕÉk¢mMÞBnÇ™:+‡!óÎᶦ Þ™„×>¥Cà”·›3HYL…¡ o,¸Ës[IáÕ¶n jFÜ(sŽ~½«GCŽÖîR³Ë™£ Õ>_˜ÒÙΖ—Ñ=ªsýóéZ(Îs÷ÌÒ2çЯµ&wdX w¾A¿zÈÍ_m/Q‹CŒßÉ/“ò†L3Ø×Yc{jò«Vãiè«Þ´~òÛ\¬ØíœwÿWYÉò;N¥Î_G³šîêC,K¸f'råBªóµûqü5“,:{»Ü\\²Í„ ÷@þé­ë¹¾§c•Æø–ÝÈ\î…˜È0ÿ T3Ù ‹å*ùîìàdÈq×þSYtÖ… 2ÎK=YU”¢‹Æ*7ÿ^?Z½eo=„ )Hæf°ÉS» Íliâîñ»ÏHô¦iw&îÝb¸>Kªå;¸S÷·vÿvš„'Nä¥} ×wLp&¿Ö£á‡û#îÔ–6¬ƒý6)¡Œqµ$âL÷©„_m¿t¶·™›iØcLm_â|û šÕ†(í¥u¶A±B—ÛYÏ£7lú×%*ò6þ±b–Ú²µâ “ûÄ|¸“xÜÿvºûhRÙCÚ…˜HpÊñòë\®—pË+çrså*¨ÜP·ƒÛ¯Zé-õ\Ym¸d‘€Ø<¨÷ûf{{šô)Á·Êy8…©²/`‚ÒÙ ’<±!“Ò©ê°Ük3r–ÖäÑ¥Á¶ÄgžÞµ±`@÷6yñ¨Ê?Õ’z©ÿj¢’wÔ4e¹›€O˜#êOñãþšôbÕWËS¡ÍÈQÕ´¹¬®`Š5ûK+Q…ç;îó>÷½s×öê±47•¹÷&ÑûÙÔÇÅíÊKrÄÆŸ¿•öíqŸ”{}k[·–{pÎæ(ÂÆ ¾ðrØäÒÅU‚w­?wCóÕ-õ¥Í’2*3ž@”œw|Ý=9ô¤ÑÃZ1X&‘4 ÙLGÎJå¹çni‹:évËå Ú#¶Eg‹s2»a•GqæH]±’#óµ"5;‰vÇœnú oZ³g-,³‚7-/„Ú^ÙÓìâ%L‹±B[°=I;ø«i1]ý£Ïeõ»ÈñßÈD¡I³ôbþçû;A-'ú Q÷ª ¸£†H|ˆÞfþ>l|¼ýkãoÁ[<â+õ}NæóN/0_Â0úÉÜWÐý¬<#ñ&o/ÃÆ‘rÓm1ˆæ@b¾â=Åyx¬&/ ¥JgGÕ×ü»g¡Ùé« *œŒù—æ þÉnÙéšØÒ4˜5 Êø–LoÚ}3Ú±t_­å²´b9 šA‘þX¦{n«št‰ynï<+ ¨Û×nÃÒ¸]GM53³‡Eû_Ù¡F”HÌz’£¨«ZT“Ûd]D¶ÐÁ¹^W‡þY6Φ’i(ðÄB±V“˜ˆÿëSÃc5íÔQ^4§íî G¸’¯o­r¼Té§q¬=Kêlº+®ù¤s}ÔOâ÷¬n g±¸YQ¥€@X©ÿh£Ö´n4) Ò9¢ʼn<Ãþ©Hç ïUõ‹o§Ï©ç¹ÎèWplù»ý+ 3ž-Z 'Nv1|ô†iD1¼±ËÚ7Rì€õ>”ÛV´Ôc‹ÈßpYP¡ åȘo˜bŸ6„³Çvo#¾Æ\´{ÊìøzÑ<¾U‹µ1CJ£Ë9 Ïz™Îlì§NÛ–ìõ9ÿ´Ä‘€8–"77±cÚªÇ,‰|c¹Š1*^ýœ"ò/͸ãÐù†µ<8Q/Rä2´Û £³ÁHí/wãSÜyöoí/³12&6 7ËŸ›{/$z¸å¾ím>b'3(ØÈëné$±ÜBÙÜ9`ÙRõ\ãŽõ³a$÷ŽÖ²%¤ 9‘”¸.7ǵV}½¼fáU'„™drŒ„‰>P¸&ãü9ù³ŠÚÓt(ÓY¼†A"Ôࣘn_õ,}ÞÏãÿ-+JQ’ÏR¡^;?/YÌ#x‘#PÛ?z0ï÷ÙÇ—[º]‹\ir.¡#ïüŸœgå<?ªÑCXòlì`dxÎfdùxÿ‡ëÚ§µÚgɱ(0ÌKÅòB …Ú$ï»§ã]ñ>Àóê.}Iõ«i µ‚D–1*Êì;ˆï35…Ó$P™"häiv«uF+çîÍiê¶_½Q¨4¸)¹cÜzníõ©<#iå4 wƹ}[HŠ 23*.Y‹|»ôïô¬1\ëÞ*š?8o¬p«ÌìU--ÔGäá·lïVìtÖ˜§Ú¶²™Oï<¿–^:ÿ¼*Õ®žÐÅö«Ø¤H­Ó"4÷äþ+FÊØê_dÜDŠ»ÊŒ¢)C½HîÌØ÷¯WÚc6 íh²ß."faç†ûÃß¿üµá°–+©Mi·Fò%ÆÌ0*ÀŒc½]¶ÑšÊÎÔ[’I¶âHãýámÍ…,‡ ©ì<9ˆvOnÇk¶¢d“ŽƒýÊÆr»4: ðŸ†äû4“yDÆawFù÷¼g5¡¤xb5·yÒ0Róˆn…‡<þU«¢ék¥à–,!Û³ý£ØU‹}Yì¥{2¼$‰ºïÿÛ\U$ï ÔîÊ’D‡UDLc\ÜV(+ïÂÍ/Ù¾Ê!dûHi@NJîä6;bº+m-îâŠ$-3‚IvÜåSäÎ;ªƒÔšl¿b-˜_k„Ú§pm§v6ÿ e|ñF™—â;ˆ´ÄciŒÉ¸dz¿‡ü°MÍàÕ7Fòp·"»›ýy聯¦ÉhîîJö¬{Ï 0’âk¶‰¶¡iÆÑ÷†¯]F1æ<Ú𜜥œ¶×îl%>WÊØ¦sÞ®Ãã†íÐ 1–Þ¿ÆúÕcXÑ“NfI%Þ6Ê6G>ë:kRó2ï%He{×]ãSs‹žP6´ ^Öæú6•œïH~²gû¾âº[IuMæ+¯ ›èXË%¼ÞLƒàùIö<×—ýŠH‘^ß!CÀÖ§‡ük¬xjdD•H¶qôÍ[ „ì¡„}ÙŸV|ÿ‚¡xóàmÌ6þ*šãÄZ"L3mx1$}Î$õùÏ5ú û4~ÙÞý¡t;yü5«È’³;ËkpÈ.-þ_”2¼tjüf›Ä0xŠ14‹»'—`3î;Ô^ñæ¹ðÓÄÖZ¿€u+«í>Exe†M¬§ïÚ¾o3᪌/rg£ th»ÉsÀþ‰t"o,á]4yþi_ïg½u ³ûFŸn×q\æE•X ÈLÎ+àÏø&¯üÝhXÃßä´±ñ]šyêñ «©(ã*‡å-þÂôû¾öðÕçØ®-nd˜",#¼®{²ÿ¯Éó %|®»¡\îÿx‚©Lžó¬‘À²Ëo,Їåf`~èϵd\ß\\YùÄ‘£9ª¿Âk® yhbò¼µ·pÁøýÒ±÷õ¬ÝKE®cÖÙ”Ëþ¥”Æ 1éÈéÍ,,'Í–u.Ô&rvz[}ºG¼œÉ®JòØoz·m4:… ‘HwuPö\8åa[·ÒGe+ZÍ:¦mª71ÿxö¬K:tfgýÄNøòNi¨Ë©×ÎZÓ4Y$Ö tdO4áuãÞµàÓ –D1Ç$OÊò‘¼¿l»½*r—º,öêdd xŠéá´¶6U¼~lŽàˆüϼÝç]®ñG=J†5Ÿ‡Ò FÒKx%-ÛÎ1‡ÉbçnD¾Ÿü´®·Mø}$ˆÍdU¥C»ǹ–c× ÛŽõzâG–Ú9Ì£÷–óžÛv×O¨[-†‘+ZKݬkÇ÷2¹É:šœ.¥aw¤]F.#¤ì]Û¶¯ñ6;㓊׵КçÌžgB“(€»=+nÇE“P³•­cI ÿwÞ’-*V±·k#‹É©^ž@ã^"­RŸÅðüzlšâíçËýÜxLŒ¶1ØzÓ¼?jÚ^›ñ²Ÿ,º0s°xaô`zƒÞ6‘q¤/,„Ûàƒ3ÆØŸL Öß[`–]סx¼5Ëæ´Þ[Ý:N¤qùWw$RZ4ÊZ%!󴞆º]JÆS`‚ÚT sÆÑÖ?oøõ¬?YG QÇ›,ÀrT÷¢X‰Ü)Ó±ù÷{÷0†‘íÖ?|±·Waû°?ÖÖ­¦YØ]Å2-´Qθ‰Kùà’ã ¯n<ºÎ´¾])­#xbч—w”¥L§kv'aj͉‡RW}Yc–FÇ–#ÿVWaëþÕ}^*¥*Ð9h)Ô.ZÆ%[ß6(¢‰˜Ð¦Å.G®kRÖÍ%·ß"ùì³;2c?Ä+>-5qŒùŸk ¶qѸlÿ³×ð­ï[[»\Cx²¬­"9 7PG9¬#ZW5g¡&Žu+¬V¦X_Í@9^o|uÇzŽÇMMŽlÄ&bŠÅ™7‘Ï÷;VÔ^M´òge‰£BFFL€ÇãTnõWI&/úÈUSÍ;dÞÝÍa: „42õƤ²¥³‹Á6ßóä—AµuÌAQF]€N\ƒ!Ã{V°HYã–+´1+ÿuÂÌGýü'þPiÖ²ÙÜÜ"1cYpGûNõ͈på7§Î\‹K“U6i%@ ¿nõ¡¦©ÞS6GæmÙò–ÇJ—OðÌ‘ÚYGe+ì’8Ÿ8Úpx®£EðºÛÅæ¿Ë¿–q»’ÃæÍaF¨oV¯²‚1ìü4Ók6ú~£ x’Neºçñ®{ãÏÄ[Oƒ? ®þËž+ø«v—f…ss:!¸’ ×½ûUý„¼]«xFÕ¾nsdªñÂÊ ‘Ã;/È>Qò¹ëóWê§…~éú^•ÚEŒ’ImÎçÈzHÉUùùûÊâ¶,>¿†´ÂÖ–bþZJÂH×Ë]ÛˆÀÎ~˜¯Îq¼k_Sž+—ÉŸSG%ÃЧfϯ~ÀŸôVyoô Õ’êYYÒÎÒO©þï~•æ~/ý’¼{¤I*\ø[ZŽGRûy>`G·~ýø—àÌÖͽœKøÊ³òC8ÿ–cù×™ø«áiŽáa}#™÷ydÚŽ Úzÿ«é^ŽÄlE?âF Éð¦ðÔ?ŸmcFÔ|?q5·ˆíe‡f¸S‘Y³Þ¤ë'š›$•È>œöú×ìíOû1é^-Òï'“Ã¥Ÿy´¨D@È21ï~y|jýaðÕôâ(šî;C.¶ ~‹q¦7$£Ë>ÇÊæü3W.wRº>}º||¥ƒ‚xe±ËqM‚ÕæM¢M»~aò÷®‡Äž]á©!¸®~âÙâFqÏ ÿJûzU#=b|¼á(T2H†&”;”ÃzÖ®™(¸FK½Àà>ãgÔâ³àT&´Ô|%u%ö"ÍÑŸ™†ü¿i¿à˜¿·õ·í?à‹{nábñ6Ž¡.íÇÝ’^$O©5~$‰ÍQrn^¬=ë¶ý›hkönøµ¦ø£Á—rÃ%›…t *ó)ö##ñ¯âLŽžq‡i|iØcÃÔ·FN“ëVZTV¢0ÓÝΨþJ ì|û±ßÍQ]R{í1XÖe’m¡ä]˜ÉÆÜW•~Ë¿´f‹ûO|0ѵï ÄZ]F R$ùƒ(så7¼OæúŠöKo ßϦGzY^ÝY—’¤ _ˆÓS¡/«Ôݽhûí£˜ñ¯‡®å¾¸žÞÞÕ–69”uA· ªÖ¾ ›Lg,f y¿x|ŸÞyŽdÚ¾¸ó0ßzMûÇ޲:†I"TûË”zþ5Ÿ§éŸlC%Þù™RR ôUÜ+Ó©‡ŠG=:ó{œºé?h}Ë,N³FXåd©aËcÚ­èúL¯5¼¶ò4J— 2·Žáù9ö­û ›½QVÅcòXndþñôüjÖm¾H² ²ð:ô==ëVöeTµ3ùäg‘¥cûÙ0¬Ïòðk ÒóR²?—lØó?y÷ýEhÒS(Ó±-7™Ç–½•¯¤ø{νVŽo³¤ÐŸÝʰ=k—Sœªtù7"ð”7Ë„ŸsDž•Ñ[ZAk¡;ÍÊøIG$âQPNŸ3CnJ¯–D¥—¶{qš­☮ï'Š7t_–¬’|Ç#{×,W4œ©µSÜ)i×j—öû‹:Ìxñçmÿ UýJÌ\[°/q J ˜È2€öÀ¨µM:(oÑÌPlh_Ê…m§øŽ~ðïO¸/s¥‘(Hà^^O3ýiþçãÓñ«ÃÐ÷$*† Ø 4Çò$ Ãâ AÙÜã½cøÇK‹R·` .Αpí…å¥=½«{U²ŽK“+|òëqûÏõ)¼a¿ÍsÞ&»[%0êÎÐ0Þ9\žÛ¸üê*PêkM>…ime*1Iä¶>gRR@ªÌ:y{MOuoqæ{hW|oÿ- –Ûæ·F=½vÂÆ%ÓYô»(\H¦P©þ¨ùWíl-øÕ}!ÂÝK¨½ÉÜ»-£WáסŠZšágû²ªé?Ù–ŒþW0ä ³ƒ?Çôï[ÖpÇ5¢=ª– ˜I“oËü8LÓó6Ÿto¢yDûwç8ýߥlXé2¼n³¡²ñ¶\`…àd×$+rhUEí¢ux‘[ÌùÈÝû¾Ã­b\[µåÉòD¥ *äã­oZ$w²_YÛîbDàüÁèxüêdžîµYd”ª‰a]³¾~rÞù8ùzóé]”ýó û3. :ên’$1J7Ÿ¿.ª;ºöi ÓE Æï&õó¼Ž+¦½†×¼™ä>VÐÑȽ5“ È4=fS2ý¤Àf;$ÀO1ÁÛžûc¬ja§Rf²ÄA@Öð*C¼ wxÚÞ8üÁÝbˆ3øVÕæ›é–«,²´3(bm$õíõ«°i‘jsÛÚÚ¡’+dÉ>ôù¶pïœþ•¡®ø^Úí'š5ƒO™åid È$ã¾+×Ãeར<ÊÙ¤$ùg»>fý³ÿhûO€~ÖµHÇ$RÓÌþv„Çü_69¯É‚¹øùñâ9¢?lf¹–iò脾Håÿ•éßðW¿Ú_Qø·ñ6ÏKµ/…¬ÚÕ—åþÔd ¸ÇüòÛ•Û5?ü«áÚÜ^K¨C;¬Ó¿ÎOaž}e*ØùE\\¾9nzõÜeÄô©VÔ­¢º•ç*sÖ›‚Í$ë×Õ­Ù^Òö5X%WàÇ" 9ÿt³þUù'å±ÀWúÅ5ñþg¿…©íèò>‡¦iú™‹P»…!Xmá‘ßÍ•0Î ïÚ©ÛU![Q&™ˆJ«¼F-ûöòsÛ¥rú×Ä;ŸÎ4©ä*×D3/ÝÔÕ‡Ú´ò_À…Q”4ÖÅGRáÃ#~x¯—Ãâ}¤\knk*wjPÙž‰¢k–÷’âÙJ3DK¶Îbr߇Z5-6-BÎ1 4SÃ(Á=#÷ÿz²ô¯Zé³ÚùÀ±@·ÿ“Óó¨|ã{»=Ëv=l; ûîÅa[z|§O±ö'c¦éÒÀcX3‘ŒH2ûJ={ÿÛJ“R³œN^páRáIÙ¸ŽzR5ÛØè¿j3áXÃÁœ4ŒNê±­kåîY¡i ìˆÑ2¾VAüDökÊ‹ö‰UÔ£§< ©M³-sÝ¡ÀÉížÕ§áûÕ@[xn-‚HêFö?6NcX]iCDI&RC$f]ŒZaß¾u:æ7|¹SØÖ¦Ÿ­$¶ÅâD 6DòÛA r9íÓ­jh6–ÒéÁ8>lò†tGØÀÝüUîàªÁE³È«¹æúþ„°Y´6à4“ÂæBIï\%öˆb²“'1Q¹`}½zÿˆìE²Kf¼KnÅ–Bü†¹-gÃqE¦–cyÛ&5êØî=ëÎÆTöŒôpúŸZM šj%º†b÷à±Ý÷•~ûH0ï1B€( ÷ó÷¸¬ËïÙhqÜÁm5¸žâ@2¾wr£¸ÇÞ¬ üSº›\DÕÕ^9”Ê$oÝ?7²üýkÒZOcžó§¡èz¼6é§ÆdI!‘ÑŽGÝl0ëíY w²ÉEƒy™å”ÏÞ\sùV߉µ›]kEc‡Ë;W#!‡ðÿìßV¹°&Í\í] cžµÂÔ*´vÓØçôBQ¨L¶2±,H-Ýÿ~GÔV¦…¥É{2‡yZß-û£•Rx?ÅÓ¥gÇ£È5m‹mtJ/ÍØ­å™$zs]&‹ ÷Z6û’^gHŠÄ¿0Pþ!Óë^”áÉC…{øZÓZ’K™nSåùóÎ3ÓþÚV]‡‡.õe¿û/úC-ÑcJgA]6¥àû[\ˆ‹Qtÿfùs3NÄÂzç¥tÐ|7OÁ,ÖѦÈõ*V,‰ŽæÜ¸ïŠã›ö#„‹F›5±Oº— s+Äξ^B—-Çá_=~ÛŸ´Eœê>‚é£Òímc¸ÖïL›T(dK]¿Þ;cwþê‚¿òÖ¾ŽñWŠãð¯„/u4Ý3Am%áÝ¿!T§Šüyÿ‚€üY½Ó¼4û·Yu] ‹¹C»³¯'c1ìÍ ;é{ÙF2¾5ýR›Ñ•¾Ÿ7¶ŸMOšn_ж¿~$Ù6‚£ì6+$Qʃåœníô¯¦à—~kMÀÎŒa¹‹~Âv€¯8ï_ü@¿FÔ Ž,+§o•“Œ~!V¿Tÿ`ïÛAð«J¹h"¹û=´b(â`dʬnN kêxÁ,»'Ž}£¯†×Ö³'Pûóà–™‰c’ò]ŠBnçëí^Ä5‰æñ Á òãáC„'gc^;ðéî,tÍïaw.`ùcMÃjîù±&zùz/…µ¼ÜÆšú¹òœ|‚êc9=3ûÊü:¶ó‹ò?L­5ÔÙg–êo1¥TØc ÃyfÆOÖ?›ý½µwÃúßÙ­§³³“ýB"¤ž Ä—ÿ!Õ•µ„a£IÖï ž˜ŽÒÝëøUhtž’7I£ïá0[âÖ©(Í£™¨Tع©\É‚I¦<í*€}ãé\G‹õÛ‰å™ãHU‚•cù³â®¾þò§’9bK–Ž#(’I2¨ÎßŠçµ TjFr¤rùÿ,ýâ<ÖùMs{5}NŠjyŒ‘µ+ù^Ÿ.|Ý€û¦¼âg„šúIà‡hÜ òz¿0Zú+Uðˆ’ýÚC,†o-›’ƒvsŽøó+–×4˜¤Ô[íE ’¤#Äj:dÿµ]§ÈÕAUæGÃÿ¾›«WG„¬¬IeÛµ°=½|Çñö_-g!XþT‰ÝÙFÙWÚF{õ¯ÓŸˆþµù¥•¥WÈäÂ’9Ü+æÚGE´´µ¹–ÈP¥‚ãp#1Í}¯gUpÓTàxY¾]KMÊGå‡ì‰©ÜÛŠ%\è~:m^õZM¶ÖhpcYöÿÊ8þ*ë¥øw¤i·Ÿð[É›$¾jÆñùÎìò>JÄWä•ðÓö®]Ï^xBŠ‚è}yâßí=I.5c¸–àÄШ@Nì·ñ}+Ô< ;ÜlY!¸#‚U 0ÿ¾ö×È_ük}©êb}J2>ÒÉ$$“ÊíefÙÃ7¯ﯤ¾üBƒAÐî&¸”Q†Ðï’§2s\¸œ#T’0­ˆåŸ´=kÅž,YßJ³µm×7·‘‰›ŒàIÞ´ƒ5æÞñý¦¦Óêk²Ag˜àu껺‘øyu[âgR;û2Íæ³ó¶7U#ÃÜW Ãs?fylï'ê{Yu)’æØÇRÇ‚?wÂËqÏJÝðíëÞ_¤†)"eÿXdàë\ß›èõ 5Å”‡Ë†Õ™ðPE§¡þÿ§½w–:­µµ–Ô¼XVR£{ü[jò«ÆP©ÈÏ£OiNó«é‘ÝÛ©ÃGq)¹ò¼wÞ´¬®`´²EÕRt’ÑwQóg®áïO¾•.tû6°hÒV¼ÆÆpqòš¯eª¾£g:j3,¤Æexût;}ý*#‰tçî5=ýI|@-ÂÚˆ#Ê6Ï”’8ÿÿZã5½J4˜–\ò|ÌÜ•½vé’Þ[Æ'2H‹…Tc‚Ëè `ø’8<7ᩚ’xŒ¸ßç}{cúTU¯4ùŽÌ§ã¾¯â+«hRæÆóÍœwS½É;SoÌ:a7sV ø±ý“¨ÝÛN‘L¶vª=Ë€YŸ¸ù2kçÿ|JŽãÃwMw$rÊÀDÂ_,,‡îƒíœøSÐþ.XÚê{¬ÞE¸ %Ú=ÂC¹×i?ŘÅ}Õµ¶ãØÏWÝ\»o| øÍe¡_Iãitë]5-á.ü9v϶+¦øyñ¢ÃÇ×im › }ïoãEî¸çn|­üU±ñ¬¶\_ñ.KVMÒð|¸×-"vÞ ÿr»? øÖXt½?S¶ŸÊY xd#îȳ £o¸òë¢y\(ÇÚ½Ùç,E{¨ýƒôWÃ6–ºÕüêñÊÞzà•߀½úÖ߇¬cµžö8ÌW“Ú NQ1¿¡ÿkm|“û)þÓÏÄÝ Iñ‚|þ ŒyFE¼²)”õ +ê+MJ8µ‹‘mŽGD•~\K)VÈ*{ ׊öð©3¶–"‹“:ËËy|JH‚ÝÌJsŒ#ï]†ô«=Bù­µ˜µî÷ˆ êNõÚ í\>‰d—ºþž‹s{fIi†õVõ'°«ž9ÔF•¯y—÷¦Ù`hÕg_õ™Èä³^^"”êFf´êÓGž~Ø>0ø#zÓÀ![Ûø´èð†[…ÞO¶ÚüYÿ‚ˆêÇPñf¨ÚI1²”HD?òÌ9Vÿ¾\×éüâKÁá=íe }Mã‰[•F0Ê¡_þ™©@éþÕ~\~ЗŸð•^O`× s%¶P6ýŽOÌç;Iëëø;/ú½UYõ:*bÝl< Ÿ|c$RjÛ­ŽwF„„~E¯×ø&õÜ:çÃ=.êÊÞ)­ímR=Øéó §ï7\æ¿ 4ø×ãdž.5{kï xKE$4wZÍï•4±ÿ zgøª†¡©ê[—þ/‰^ñmäRnû=…ï—$˜€wüÄzw¯ÄeõTœ&õGé¯0¡8©û=ÏÖøIRëL¡้Øåñ€ù¶÷õÅk\ø–)-î%–Vá €¾•ñ‡ì_ûIj?ðÍþ—â)%7¶ÊŠ'•¤èà/qâ¯MøßñóÀ~ ½”M%¼*®Hn¨J0ø+ä±j´«<<·=*XzR¶†Å¯Ž?¶f›à{›‹}:é7ÄvÇ »ÛÞ¼zÃöΟY¼’Yîù3¡ýÛó·#;½«ó£öý¥uŸ|EŸû1Á’öbÊ|“·'Þ½›àÂ(æðdzßÇÉá›6ÄQ§úC€À’=}}n§ÂÓ­ˆŸ¼þnþ‡“G:–*³Ãѧ¢>á_Ú“O»·µ[ëÂDPòäöªzïí¦]Y>ÙÞVWr`ª·÷½«áŸ‰ß¿gKM0Øé¿¼^š¨Ê4‹ø÷tƒŒ×Ï_~.kžÓ&¼øSãuñ>ˆÊ2—PŒúzW¡–ðUlbOXŽ9ñ¼K Ò³ô?Fþ$þÒvw¶ñ¤„†@ ´Ü‘ž•ó߯‹§_Ò®¡ÓŒ ©®wgSÎ+âHhëš¼WWSÌ×2)y`IÝùWОøâ}ÂVך”GÈYLÉ÷½ëÝŸ SÈjWž§„ø‚y¢p¥Lù_âûºêŽg2@m̼žÞþ•ÀM™Ó•Éë·ï öŸÚÁïi~ »£aR ¶3ž£5ã·‹†bŽÅ¢c_±eˆÔÃAÄø,¬ùŠRÅónÃdp*õŒIqU·…?çŸÿ®‘`@ÊLƒ'×­D’8Ù¤›T=šõ0–h„Ú‚$±N}kè¿ø&&ºú_ÆÝR —eµ»Ñf’á÷Ë4’6cù_8=ÆÙc\,@0' ÏZôÙG[ǽ ™[Ⱥ• ›joÝŠà ¿Å÷zw® Æ—µÃN%ÃÜ|ÇÚ:‡ÄÏ_Ãga5»“'‘$¡¶Eåo߆“¹ÀûýúWº|9ñ ê¯y‰Ö)l¤ÃDÑyqÄYƒ1ÿk IóWÎkß êâ[Cm<|ªò…Ê+7÷G#ê>¿Ç] ~,‚DÕXÉs::#£8Y²ç?|ïÿ^ÕùÍ|/¶\ˆÛë¦}‘£\èSi±]i—1Üý‚á\yO–,VHÂÊ=ÉÀ­­X}ŠÜi—p³6ìbLCüÞâ¼àŠnâñBCg¾ýo‘Æ¡µ>gfø¶áÎ=«Ñ4ô¶Ó X…ÁŽèÜFò#}Ðw‚ØÇû5ÅS õxØáÆc}¬9&}àízÒL²ÌSÏ,s1nMÄ&Gû?%Tø©9¹ø­ ®Ý‘ÝE ©ó¼¨ãñ®ZñÍÇ‚´èukE±Û.Ý’— v|¸ã¿zó/ø^·ZïÄ]:ûÇ—¤µ¥Ì’…UÞ%—x!|ÞøÃß§]õçÃæåQvg•M^hûÁ®¼%aca¡¬1n^F8 “Ûý]{…¼T÷þ…¯ZFI‘–0£zGÍ´úׯþ ñô>$¶°“N¸ó+]E&voÝÁö¯«þÎ·Þ Ó¾ÐJ´‚}Þa'¦;æ¿<ÎTðÒ\çè9{„½ÃºÑfiô‹RЬò7Ë÷‘Gaï[ZÔÚu†p]ÏËèèÕBÇT’ÇM†'Œº€T!;nô´ÿÿ=Ô°š$‡äÚ{Ÿö«ÏוJ5hæwº.‘š,«ƒ%Û“ÛÓi⸟‰údÿbºŽÆh#¸C7VúVõ爣†Ñ&²Qʻʓ÷y=3þÕp¾8ø†·L·wÝÆÈáûÌÞ'õ¯^·¿E.Ç5*·“±üßkÏ 1ÿb'œ¨Œ†mý +Gk irYËjÒMq¶XíŸø•K`ÿµÛþ[?õ©<;ðñ$Ñn¥ ¨…´È nM²ynL}kϾÛ2Î õו —ØC1SŒçðÿÙ+ö¬&ôe3ƒ‰»÷ODðýÚ[ÚÝ=Âîæ·2Hƒ—U±ÝøW»øu¬ô/„­p„!¶²óa–EàªÞ5ó]Ž«õ½Ý½ì… eæâ4ù°¨WŸÎ»gøoªø V´žwi-­Û–Ø^CóÐW™ŒÃU«(ö¸å‰æ§È{ÏìÙa¬üLøõá[ÿÚ Øü9¨Ç&¤Åø·‰YB“Ÿs_Ùø–Âßů€ƒöt‹æt+C¹ˆÇã_˜Ÿ²í:ßþkwìÍ Î³âЛt†//sóô¾‹øûSŧY#x^í’]N¶Ã;IûÈ’TÌyúkÀÌébaˆI¯s¡YuM]žïñ öÆðÿ„¾,YéÞ$¼\Á e†_1ŒrF‹´ƒÂ~ð¯=«ªø“ñvÃZ×ÛEÒ%OR»£™–4‡#Ñ ¯ËkÏÝ|ZÑõëýFâaq"¹œ?"D QG»+¿ý™iãφt/L² Ŧç§™?]€WgölªÑ“{¢+K’­ zÿííàˆ™÷ýO^¥9ò*Píú™_³×Áè|ø.ÇÄvVúœYÙ·0$ùgnáÞ¾ÛðÀKOè|5ª<k”]™$c§ý´¯SˆsW‰ª¯&½|¯ ?Þ£óƒö‚ÿ‚9è¾%øÛ¬øJñ&—©ÜÉ}Eš%ŽY;C DÇÉ#±¼ßOÿ‚fxCÂwmkw®Þj—w…ƒP[(ÝP>fVûÙ<`Wë4ß°'ö»%Æ¡â_|ÄyžWôö4ß þÄÞ ð¤Ïb/5;¨‘ŠÝ^—r¹×]5Ì©PT§^N)v8keYv"§=:{Ÿ~ÏßðK¿†¤7i³j7 °4×M¹K÷—ýÞ¿…v_þXøgÃRA ÛCAWÙQÅ}'âË?!ŠÁ̘L`»³ßÓÞ¾cý¥~ Cu£_±¡h¸ÉÂîí“Ù«ÆŽiŠÍq Ö¨æz«.£‚ ùù“û\–Z´ÈìžfóÜþï5óX—ÎÕ@vQ¶Â>¼W´þÕšÁ¾ÖïQvIæ(cmÇß&¼ R¬ìÌvÀ õ¯ê.¡ìðTù»‰gsO.Rþ¨„1bK!f ó}Ü  "”J¢Qƒ×'©bPnbšxܹ,Woñr3‘ïÅVŽoß` rW×§9¯£<'¹m­¤ÏšÐ+ýk¨øGx-þ"è`:¨’úÝXõÀ.s\îŸ:O"ùÄÁãÚ¤¸„i·±½‹6ÈÈxûm=kžª”¢âT¥©÷~½¤É¹0¼¼óJЕ‰·FÁp@2 ö­gDµ¶Ô·j×ÐË/4‘>匫«žÍÅpvUíåŒ6÷y§t-ÜîÅ÷™ÿhüµÓiÞƒO‚(ïgynX±;š nxoùOø| OÝFQ3—¿#Ñ~Þêë¬Y'‡nÃ,j$Žm…r[‚NÁüä}kÐ=Ol •‘¢øZ-Mî% Î…³è†þ&ìGLÿÓ:ÎMFx-íÛLí[hÔÆÄ€ûQÛq€ýÂ?Ú©t]^ )ç:=Üo™(‘&|g$l*02U3ÆÓþ÷zæpœQÅ*–g¯ü.Õ›Ã_b‡q{; µî@­"«û»ö~Ö⺀[IÈÛv–' ßî׿ÅÄô²¸ÒáÔo4ãwþ¶+&ÓS‘¸z_]~ÉßoGäêK=½ÍÃ)'ï¶ôìׯgÙuJðæ>‡(ÇÚGÝ–z-¥¹'í ÑDŠ@y3µ#5—›9UŽ5o”u¹¯=³×®¯tÈÌR‡[ü²#åÔg¡êý®«Í¥À’êiå‰vy,ÞXHF>À×ËÑTíʾ3Ó¯ï¾s¢ÔZÌ %Û[¸*ùÆsïÚ¼ËÅ:ÚE#¼öÒP loÜ7zÕíböíô±ê *)“t)ónMã#=¸¬InWR ‚xYã\«+å£_Fü<ºéœ¡V„Ò~Ëß?š }U¯o“NÖ \ÚÀÌË¿îOåÏü º=4™ïÐÏ$Oj‘Ú“/É»aYzŸƒ!½´°>—™eg%‰ù‚ãºíŒÕR½ðφHÐcpò'šÒ“¦V]¥G̪<þ‚¨¢ãh4äEãTi¶—·Ë0Tÿw"íÉÜïÅZðî²@–Qžgñ3È$BQr{c5…¨ ›µi"ºaJí £ûsXºV§$Ѱ¼Ì‡÷lW hÊzÖô°Üðå3„®mézµÄ²Cq=Äð}¥çurªLöÊíèZÅmZöÖìË‘nPZBdwĆÐ?מhÌÓ_J–ñ±>K Y·6>a’H{ ³á¿\ørÎÚÎ^[ y'ŽhÎÖIØ€O¥g[ F’Fª´èÅ(žÉáÏÍcðÎõat‚âëtW“r  ¨Áík“øWâÉeý ´½H_´Ç~d”ÆÙ‰f8îT1öÒ¹;ÿÝZi³[@d[k»2"(¾«žßZån|P4kÆžK‘è#Èòåá`3´û–ãÞ±Âåܼ빵Z¼é½âˆ0x«Võ)í–KËé˜_Ëòó+376¨EükçÿŒF [Ç7¯¥Mm2ÂåâVØAoàõj†÷Æ›;pùY]¥ydgÞÅË}áýÓŽõ™&¨ë4lRÂGÏV+žI?JõpYÕåtv§´‚‰ËjVÒZHLÔð3Ž>µû]ÿÊøqâŸI’O’ÛÈ)¿wÌ1Áí_ŒýâÌ¡-ãÚ!&0å¹ sŠý*ÿ‚/üRû'ƒ¬4æ•cŽÚcž»…|—‰9bò¸Oùd}OU ÁÑi¬Ôïµ{å]d¼Ï’,n»÷›s“]eõ®,¦¾7JâG2Â…òF§$tú×áïO[. tˆ¨/{8ÊžÇ÷}k[_Ö#‚Ð4mf&+‚©÷¢ÊÇ÷~¿Åõ¯çšòqV?O«B§?¸MàýãRÕ™ÒÒîu*7†Q÷¹úf¸ŸÚ²ÖÞÎñXÉ·´ŒG,ddo"Œ~5Óü*º¼ñ ŹQ¥Ž9Ad•Ú»× ûLkí¦_?ÚÞ9äx1ØT‡ª°ª>Ñ#–u*JNò¯‡6VòÇ2=ài-%_6&;&R¢DAàŒ«×Õ ñ1Ðt5@‘#Fˆ7’‚"§ûÄw¯‹l5«¯ ø¡f6K¼—1©n2O§É_SxVîù­à–I–ÝšÖ&Ü~hÊç³vúÖøèÂéTœ¥KÙÌö] Å… ž$k„$‘|ÆM¿ dÿdŒÖ»ã’ÆFóä1‚‘»v󞻇ëXöúÈ‹Fº+J—<0Iò þö;×ã/Ç‘7˜Þ\È þ¯6¤}« -8{çüjñÈ´†Y¥¸dFÞÂ%|‘´›ñßí!ñ4\i—¤\²DêC㫌r½oãïĤ2l¾8n~:WÆ´'Äti”M >r£!ÃÆ;×Öð¾MíkFVìqgÙœ(ÑqGÊ_5Y5=vae‹sŽÛŸûæ¼âHw! nƒ¨Åu>?ÔÆ©¨HÒdÉe%v“øW+óePÎÈ?1ü+úsOÙQ„OÃñsö•›&² ‘$°#*Kh–Ú?²—…°û°Â¦‚3° µ‰ÈãÇÞ¦júÑÏ€ß /üGð‹I¼³Öôt}BÂÖá ‰d¸f&2@qd©ùˆë]l^X­-n|Aedg¹eFwžÓ9.Wå;ŽîØ_¨ë_|ø¿¨x;Àš{è“]ÄúTnotÈÑÈ8àoÆpkÔ,þ6M¨êV÷–·±ï¶™g…I·Œüæû¹o¡¯ƒÇeøi7 Y‡*÷«¼!û.jöv·6:–‹=гT™f?8-¹Œ¸«÷ÿ³F«Ây[E´‡gš¹–7ÊÁG\·OƼwÁÿ·?ˆ¾Ìö:ð³“|Gl®¸ó@qóm2(8þñé]û~Ö“Gd&K ^Ñáb#®ð~•åÖÃã £y˜ã%Jqº:›¯Ù³Åš^õ¹žÊe»rF·ñ¦S0xéëY‰ûêözÅÍâ¬{fÚÈ«z„ßîqR/íåa…ŒÅåF˸ˆÜ ®ù'wa[0~ÜW:oˆm†£1IJnÚ "‘ÊŸöˆ®iC¡î#Üÿ¸O ~Ë>#Óš‹N´¸t@kˆòA¯Tð€üYàB#³ÓV" ˆÈá3Û"±ü'ûbh7ÎF§Ó&YQ•Äa•#©=vÞý ,u‰$6ät;Ãų{W•‹Ž/“TU:”iðGüUicwÖø_+d©ýâF×Ewñ:çL³gˆÇ<‹¶0:à›ä6,´í2;™Ûî†gRFæ’½jj?¬íîa’ñ›4M Èœí!Áâ¾^¾´ß?³=œ>aBäæwšŸÅ–ä³Î‹) Àa˜W;ÅIùŠ[ìI›÷¸Î?‡>ý+ËüaûJ6A±"“&9ËÝ9qóHwv_õ\טxëâ}Æ©à±sx"gS${-òœóùQ„ÈgÏÍ>§U<ö‹“Œ6?.tíVÛÄúŒ:u£¢EvÁÈX÷í•P‚S𓚽§Y%¦ž¡_.ew›g·¾ñï½Ú¼ÇL¾¹°¸²m9Ç˸2`דÿ®ïÂfçJ€ß²Áæ®Ü±Ã9'¦?…}»×î5°þÏÞG/4Œ»Í;횺Ú[«Âc  N]›ç*Q»»U®´ H.­þÈ’[˜€mˆØwˆ[=¿‡šµ©ø‰cñ˜ò„’E,ªõnp ÀsY×zÛ%F™dC‘£}÷Ãdô­©Bv1” mmÅKáÉ$ŽßÊ@Éå*(1,ëýá—rOûU‘æüÈ­QÙ6_•‰Só ŸÃrGwyoÙ즹F*­:—ć¿•äñÎO÷ª…ÜP$®Â4å•…™VÞF@AU9FýÙ'y­=•ýÑór‘jV &—l¤C±"%›ìÓ69éò¦+•Õ­’â†Ú7“y Œ…½ù×A«G,ñ[Ɔfȧ|ŒÞhéÏll¬ÍRÌÓËíeܸ•@ B†2ç+«RÓ¹Ä0ši“#(ËÛûê´,u{w½¹Mf¹€ˆ›Ñ±ÁüñT Ù·‡i#¸&©ßÃ爣٘uoLö¯O“ž(ê§?dŠ×ª$¸ÆrûÞõõ?ü?âƒøcĆž]²ì­Ž gšùjú'} Ç·øwW¤~ÊÃè_-nÙ5ò·'ÞÉã~•åg¸8c0)¾ÌïÉñSÂãéÕ?s>ü^+ሞ7*ð¦ ÈýsÚ½ ÊÒïÇE£P¿kŒüÑÿkã…棦é°HÀ³LcU1¿,29ßÞ¯¥ÿgÏŠqiPYNX¢%B)~¡÷qú×òÖo…xdÜ7?|£_Ú.q~þÒשáÿŒzLú&£o8h%â;øö²Bÿò×é_~ÝðU‘gâY!ðœq<&O-ž6Fíߊýý¢¾xsö…ø?w¦øÿIqĬöòÂû&´r§kB{ à“_Ž_?à¾!¶ñµÛËst4¶¹+ ÜuXÁ#ïwá+ÞàêY>.«©˜Ë–K§Cçs÷Ž¡I<=ç»-[ÿÁEõAoaemr’Ü>È•ç'ü¼w¯ØŸÙçU‹Äß |=s¬¬rÉö,ÍÖ6ò£ÿ®uùmû:þÈ/€unüAåOq© ÝÁ5ö·í3càM-6Ì#GXÐϵuqRÀb$©å´ö3áùâ('S÷>žñg‹áÐâhí:Iòÿ¥xÅ¿Aiöƒk#…e`ÙéœÊðïĉü—1F#‰xi±q\ÏÅXÅ€”ï'ptN7Ïÿ²×ÇÑÂÞV‘ïNµÖ‡„|xñ„ó\L-ØÈÓ§d˜àñ_'|dñ4÷6sC2J^Hðd#nÑßæï_Q|G…-,ƒ^ÄñÁS¹zñ_0|j‚ ¤¹Ž=‚EwHÉB ²~ïú¿ B”b‘ðyõFÛ>uñd¾[3ÆÀó‚}+ i÷1lhó‰õí[^ B×#ÜTæ²v—* Pq‘_³Qþ?:­?xe”†V/+d˜éNÔn>ÒÃîàò `‰”"c!OõÍ,âFl ªNæ«”ç”ÆÅ:¼e¤Q‡\­]Ò¥m#ï€wç§¶+:Ú! *â êÝ¡/*ƒÁ Žz⬃Ð<¨G2NËçÛ™`ój#dtÎY ü¹¯OÐ|F©§Äº· ¨Ymw¼!Næ2o÷Æ0ê=«Í>%´Ú».´(ü’ÊÇ\0ù¹|qךö›3N†Í z³,{š1m|»ÀåÀq•CÑHÆÏš¼éÛÔ“Ä·‹$rD‹qù|ŸºÃÕ½ë;AÖåðî¹eu§¾ÙíåY?ÀÿJ†íÃ^±gWýÑ»¡ªW°´w[oUÆ8?…Z:q}Ku}ûŸ¯Ÿ²7Ä{?ˆþ Óï-ÌEÕ•Û$º‘Óþ^ãÞ%ø„–ü&Õ³.žeh¦Tâ>F*ü¹ýŠ?j‰>ë ¦jîÒr<§i1·=y¯ÕOÙ¿öŠ·Õ ´›H1ʲüÊK#á·Œsõ¯ç~,Éq9&.ui«ÂNêû²ðöi‡ÌðŠƒ~ú:;/KîÝ×o¾+Ç|q¨Éw{#\—|å‡ðþ8¯Ùøw.ö²‘ù¾möÌóÝaQ™L¬Üƒ…Ûœ~5’§lþcE€zÔâ´5‰¤d‘vNîæ¨#¬ÒŸ?Ëló‘Ûú%?…9{ň„qÚ9ŒmfÉPzã½Sš†M»Fdg­I4ÅÜ«ø ;J‚Y32 Ü*ƒò…ûÇëZ"Hv—%{Ö­E FŠc À—>ýj¡“æùN¯¥h¤aAmpC›©õ¥)t~ o³k0Mn²J±1Ý·þYœuü+èí;J´T"X¬íeŒ<²Yܱož_¢ðÊð/Ço6ª œGûøÕƒ` )Éã5ô—‡´¸ô_Ø^j—N·“ÛWŽxЧ©eWÉ{M|Öqˆävé7Z§ˆ5^5.£KAK‰ƒd$e#bÌI”3"¯\xOPŒÉ%œ÷R-ŬAK9ÝÄ€O?w€k•‹Ä1ØÝ[ý¼#_œyv‚5*9A¹X™›s´—85ÛxvÝuiUm£¿ yr®y˜™°à $ä|ÀÚ¹ûüb¼Šµ¥MG±ÅR™¶×o,q鶨Ësl³[ïyw|Ì)× Ö‹,z¢Ï´Ì±±Yb¹Ù •ñÁQý¦aëšêtÿêßìwñ!wf ,sÈb..óÀ\Œ`Ö]íÛÃịÍ)ËZÅz {—³PÛö‘¶²a‹}ì{W4qQs²1pŸÙ*Ã`öJgyÖêi9|ÅxÜ}¾o/æ®ÇÃ^%1\Ù.fдÁScÃæ4Ãi †ÈÜO®FÚáOˆg»hºŽÒ'´wbeó7ìDVÚ«´Ç¸ícWã×™màki­|Ü) ®ó²’§‡hÏÕlÿ˜ÆkSÓüq LÓÜýªxb—2¼× ™ þ³,ßC[úWŽ_Gû kµ²Im"S°Òr]Rßîƒô¯"ÿ„—Q¼I _³¬Jå[ìöÏœù * Ÿ,䳟½ckn®níܰ}¬ñ+²ÜK?)*…lïÁ<P𰯫:^ó=³Tø¶Â念á±I‹ªÁmvC0f˜Tõ]úW ¯øêÂòÀÉá5¹ßå–Y¤‡ÈJĉó1láô\µyŒ“êÝÉ.¥èÝ·>虚C—Üòó[Aã–¶í³onŒ‘ÄD°…IdÀŽh‘Tr»Œ˜ù¸õ¬Ö=„¬|d¯æYÂ×·Lü‹ÆöRBô=½Ï~•gK²û5ÛÉ&-â\Ù¥}ë¼nªÅžÌƨ‹î\ƒÑG?•Gè—E-ÌŽ$\pßÁ[‘_{Ëü§¢oè×Â;üÌï0ä†GbÙþèþñn›¿‡9­ß ørk©-ޤÖçeûA˜íV,0wB7ÝûƸô¿d¹3Z\«Í62Äîh€çØÕ¹¥´vº“=úÜØ—2òâÎÖ@‰Ol0Þ¬g:ë Z7Š|©®Ù°ã&H•‚àõ'#açž­[ø*ÛU¾µtºò„dT€äS»+ÈÆüÿv¹ GÕ®|EmöY¥šRˆªŒ™!~O•†Gîuï[w„uËˆå™ ½ˆÂ’n™‘Äq…r œf¸kRk^sSªÓþG¢Ý[Åqªi©e.$ubnäœñ•û¿t¾ø["Ü­êÏetÒ¶ßÝ£»aòÎ3Ù;\¶›ð·[ÖÞÚÒæú g‰¤BÓLÁË ùòòW'0QùÅox?à~¯e«¤¯|±”+µ^Âft(6ŒÀç­y˜‡hÚ'•øÿÀ¶šOŽ54‚t/orUbH¤ ‘íFÉÞªz¿¥y·Œ-ãŽàˆŽ<éë^ÇûFxA¼ñ$½yLÖæuf·hÊÆÆ~÷+Ææ³7fäM+æ%9]½Ia^î[ïÂò:š÷laC¢Í40Kľ¾†¥{2¬O›'CW&Մ̘fh×ð“Þ£ƒR[U‘IW—imÞ‡Ò½EÎôdòßC"Gx'e]àçƒé_DþÅ¿¶•×ÁÿÁeâ§‘´Ÿº|ý˜ŸJùÒêÿÎfle³ÓÖ˜·¯o2°}¾ßÜ÷®LÇ,£™ÐtkCÝf¸m| oiHþŽd?ŒZOÄÁ¨ióÛNgL†…z¦{z×Э«h–¶/-É‚TˆÐ¥<Ÿ°ïíï¨þÏWPéþ »4²üaò-ò~ñë憎àªZ>©áH †¥™\ù¿>Ýù^;ý+ùLjx ÄþâÔÏ×ò¾#Áæ8tçS’¡ô¯ÆOiºv¸ ÐäóÙ·ß„-³ý+Á¼Gâk /Q–I'@ej©;1„fzþð׋øÓöþÓ…Û=­È¸.2Û;äùÿâíSâÒÒèìmüØÊ‹©Rq“]y_ã*Ú3…‘–?=¡Fü³=ÿâ·íe £EÇ1Ë>HÅ|Ýãߊ³kº¬ñùÁ î3ÐaÝ^u©|B¼Ô•Ú{‡ó$þ&ê1Þ²îL<”lcëPGi#Ü)W.ÍŸø«ÓGËÜlýª_/•ï•íNŠ2àmÜÄ’õ÷§-±ã;"g4ô¹TUU‘v1?ð#VA\!¾Q´gæúÕØN@P>n£ Æj }óާßÓÚ¬Át 9P¹V;zQË!—ƒ58ìµ-8Æ£!Fð_þn¿‡þÉ_Sü×ôí_LÓ`’ÒæâÌÙ´Ç{¬~I,áA,f+À‚6õ¯Ž´¹¾ËfX»£mvö$ðkéo‚ZÏØþY;Oöe¶ù$HÓÌiH23Üàds_?œa9â¤jçwáÛYu^o>ÑìÖo&Õ¼­ª¥C>Ò­»1€Wڻ߅Ú%Ư§˜¬.Z#áŒh$ž§ Éü+Ëfø—¥øoJÝ2]\%͹ŠG Œ¼Pà g­?áÏÄ·û#\Ù˜âcqgîp›K´\‚¼.G#ØùÞqõòÍvøyy¨øàÖ™c†cäš4VÆTÍ•á¥iéGQÔ¢:,WшŽÈÇ€Ãn6¨#Ÿï`×AáÏx‹TK–Šwò^`‚vM…ó«6S6þ{WŸZµYD¯pãôßë ­@.¢ÒneE%š{¼1kœoÿmŽvó¿8®—Eø_âFœÛÙGa%½°/•v†0¨MÜž6g×y¦xsZ°¼´oêÖÐIo,‹åA.#^Fg ¹‡Ü##îõ®©µ²ƒokªÝJ²ðY Ü³‚_97wQ\•ëMDt×9Éx'ÁúÝüo%Îqˆâ$·ùƒ0)ÇgW¤Rñ'Œ]I<ƒn¡`+&ÒâUÊ„nÆ?0çŽ.l´U´ŠâêåÝþ`³AžQÂ|¥˜ž€ÍQÓµËÉ5™±,«,/µ RogR\n)ƒ¿nÌìÁÆ1ƒ³âÖ—µ“:=O6ý³|1q­ø].æGi´ÉänÀG¿ÇÏDJùƒ_¹–Âi<Å@_FÞ§µ}ñ6ñvŸqe©\ÈË W{•‘¢Nv…ÜFY ›}ûqÆÚù'â&•w ë¿bÕI3.Ç`øHܧñÀ¯£É*^ϰªncêWQÍ©K4@î@ ü8#5Qa[rò,€Î#nçÖŸoß*U·oÆ7{Ñy¦ù…T²FØ?} yʯ›.aûýéÑ [·ÈÃÖ¤Ô#Xä1á£#'ëNÒîÚÀ´–£ ,mïdbµj苉 Îû|Èd| ýkOAÕïMÈ·°d!ÝÃçkâ?2e,Ÿxšê> Å_t©aíf½‡x?Â…9üë—Ô)9Zö*ƒç’K«'kíOE}·P\©s¸áoqR7Œîé]¢"ŽíÀ5÷7ÅÙ†ÃRIdÑ-XmˆW§˜ 3~•àž3ýœŽœ“OkitÞKaÝ£ù€ÿ ùlaqO•Ç”÷±™u|3³‘à×~%»¾Ú!=ÄŒ«uªéÅùÌçsÀ$d×W¯xm-ÀØûbcÆ6çð«ÖÞ¸–f‡.\áJd^Õïªô”y¢yJæ´Ž[IÑÜK¹@x£8lü§'Úµ¡ÒI´ oyI%”{¿é]߇| ü‘ùvó’ÌÆ5Q÷˜•êÁµ´·/o¿.q¹%VîrµäbóŠxy{Ç}#š¹ó䞺»s-Æw<@®wd`ô‰«éI¤|€2˜ÐnÏV9¯¦|sàWÐ A¹o)^&*¡Âa³Œ»õí^ñ3@:}Ü~yEyIr‰ÔÜíâ¯/Í2Dâ0¾Î<ǤÌzJ±óÚqQMÉ*îåÏËZ1@óbüŽÐ={gÿª·v¦ ®¤ÞÃZúòžL£ÊUAåÍû΄Uè,|È£ùˆÎ)&·Xå`¡·ð~öqíVmìöÙ3N¿+°w½Ÿ)1ˆ‚v•]#PèG €~Uë ¼E}wy'ÚûÚ²²‚"V6ÀcåPr¸ÆÕÛ£vB“ÅymŒ")Q×c€à`öæ½“àæ·‹á9¯bºódd1Ã|¾i?ívÇ­pæå¦>SÐaþÜñ´„í–dO²¬RȰ$8%IDùN7§—ÛvkoÃÞk]"8µÝN9ù±[Dï<»ƒóÿË5öî;ÿË3SÃz…ä< Î. º¶J‹lùÀC‚¿ÃÏñw­ ÁÚ·ˆ&—û28§Kû´ˆ#²·ÏœãåO¯Þ󵫪pÜÎp›6ìtÛ»Ë àƒS–ÜÉ´«­»Æp$½7ľ ²ðý©Ô_P´º’â#4Q ì”l;Ž 'Óþ>õ_¼øQã+-&ͬü?qåάå刉\¯ ßòŽ:dj:·‰U£kÝ æK›Ø„ "Ú9¨;[ÊÈÙ&Ex±­Ï;Âf 8ÅLã5E]k§×ä€Àž}³–’2À’ßD݇üŠªÙëçÃÖ~vŸêSÛ·oÄ1‹<"ûÒ§lû3·nsÎíÉBñÃOhë$Wúu¼7óH„‚HÆ€ä’:’ï»X~ð,ö67qk–vÇ”;<å…âù»Œ—çØ(÷éÑÅB¢÷…8Ê—7š‡Ð òK«¹3‡bÒG™ÉŒÆ6mØ#nñÏÎéW“ê¶öÑÏ4P$*û®<¶ó‰ù¤,Ü•aÏñ^›ð¦×ísIp® “i‡y “ÆäßÈ÷¬Gø7ª=ÉY¢@Ó9™ò=Ê£ ~˜ÿ€V•1ù/qÂg9¦èæÿUžw’ EbGŒ6À„ªß"·%q³'Ò·|®ÛøVòêãZÐËwk²4ÿž£Ì?…uz_À-V!¸»XâQV3°ŽB>ucØŒýj_øfâ ùÞÕ¦3¸É"9SÁíŠày¦{“™·Ô§Q|Ïé¡iV±Í-Ü¢faž pÊG9ùÀ}¹g褵]¤ö¥míŸPHíÃ=ÁXÕË2LîÚ¿ßæ¹}{GÖ´¿An?ßF è‘ù‘Fd,ˆÌ{H6‚ßìíª¶3Ôg×"ƒPµ²_yÓÇóÔlàí§WÐN.¶°™‚=%dŽ(„ª³$[Ä™‚®áÎ{U«IãšúçûYÒäܨܻ»'bûˆ?NGÔWx›Æ:„¾"ºm"ídž xŒqFá*<þ#¥eñæ]T°þ׳Ùkr-䘒RHȆEqÉ®Þø¬ã†œµÏ]ñ”KqgÖžYÅ*ÎeÓ0øȸê1ÿkgYÕ´æÕ­ÿá¾´™_nº,É‘’1¿§Ï\÷üM _èVòÙËdêò†DAzÃhÚJ£ÈJuçïÿÀj·ˆ¼Menš{<óÞC*;ÑËDЏgd`W !#ÖSWøÈ‡1Û¦¡i¡Ã,ú…ÄV²|Ĥ0žrîÜÂNsR§ˆòæCeq.ðˆTû+ìË¿ðÊßMÁ¨ë\w…|U¥jö~\wöí§Ü"Iíß‘"ï\ 8Û¼Ë|»N= R½ø™áÝ3ÅæÓĺƒO;)äšåÒÚ;+1Äœí~[Œ6ãÒ¸êaùïË¢5eSÅz÷ÙÍÊé³Ý5ÒÄ£,R8#í€ ¨Ù’»OÅ_?~ÑÏÿ‹4awÈÑ匱ì.½Šûnß]WŽþ"E¤|N“XI‹Ø¤rE-#™ eN l®F_Ž? óŒþ9‡Ä><[­ ¢ª$ŒÍóòÌzún¯W*ÂNŒã(‡µç9ˆn¤±™ä¶ÆBíõÍ:ñg:™’}¢VA8?ïsý* ¹Œ»‘í“æ}¿­#j-xUî÷‰`Y»mì+é•Éæq™Žé rO;[ŠExÞ-„m$àJcÞyœ¯ÜÜ1M?èÒ8ßÍṲÚc¦‘XäÛ8ÍYÒïe°Õb¹‡h6ä޹ÎjMÄÌ2ïÅw?þ_üEÖa·d†²å~P;‘\¸ºÐ£I¹ö*9Φ‡ë§ìËýñ3áF“©\$&KË8Ü瓟ý¹Ÿ|S²¹ŠÒRH3•†¸¬ÏØ£LŸÁ¾‹H¿!ÖÑ|ˆ7 —Ûó(ǺäÀ+è#¢XøžèËz6¯Ø¼²†]Ø'»ü?ZþlÍñSÁãjJ“÷/¡úΊÄQ§ ïcáßþÏè^{d€+ðÆZä´ß‚­,³EcmooÁÈA&òo—¶kí|.¶½º¸Å°º’Ý>E•þQ‘ž?ïår3ü#‚ÑmTB®û¶‚œîÉýáÿ€¾+ÐÂñUZtÔfõ8+dUŸôÏ„‘é1Ÿ³Â%¶e(X®€3þõzO„þͧhöäZ5¼,$\±ìyà×°xcàì“jVÒ‹dž4Y>YcÈo˜pEu/à{{8 ªµÒL¦X÷e%9@sÓݯ;Ä’¯´Îì>Mȵ>rñ·ÂŸ ùsŤeÕšü '©ö?=|¯ñûáôz&©u5üvîk#F©ócúé_£ÿ~¥—ÛtËXV9Ñ"òÄh»‚¡u‡ÞË=|×ûI|:‡ÄVÒáfk­A£‚dÆÕBY~AÊïÏá^ ñ£‰‚{3,Ë'½6à~~^hÓÚ64@åA%‡ž6ÿZƸP¥£Ž6Þ>ë|½ú×k®Y5†¹yÎ~ÏY‰iW8P~¥«%t o/"šDʃní,·µ~íB½áÎ~uR—½cµ³ó 2ʧ%Iè9®‰t‡·Ð<èž0†aœ6OJ–o t[ƒ L¥dc–Uá1Àüë±Ñ4xõ„×Rܪ›‹y°ˆ6ÇÑWœÿÒ¦¶/g£¥‡Õž_«âÌE䜄]Ù+Îw5o|-ñ¬šlßaIaH¯dW * Fàñœñ‚}kœ¿µ2ÊÑ«·ÈI+î?ýš¢Œöro±"1RFr~ë¾pU¡Êp;ÆG×~ øÁáÏ è–öwV³Nñ‚­;  ÙÉd •ÇÏÚ½sáÏíEá«{xâ’71ÛÂÌÒ …Ž5!ÁÇÈžÕð€¼œÌ²[ÝDÊ‘pämÀÇ"»é÷ºÆ <‹ÛX£T-4Ò=Ç $úÍ|Þ;$§V7‘´+Ι÷g‰?k+SžêÏA¼±µÓ‰¢Ì‡,6|Ä€Ç>_R*_|JÓ®´XnšìZ„‹É@P®Ý„–Û“ƒìÀúÖ¾AOM5›ÜA>nÕÙhÍÁLnù¶ãëÍ]ø-Ö¿âË­:éÖQ”»"yü*¿Þ$ñŽõáG/£B”¥Kh—õŸm&ä}•ᔸø³<1éæ4u>jï!8í,ÁˆÝ¿¨#¯Zë<;ðƒÂv7Û¼Y·˜­çE=Äa<Öù”‚¿0äµóÖ©û]¦›¡ÜøBÂÈé·šzÀϨC*¸*>láÂìç¶+Åücû[øãQñóZëBÎ7ò–‰J( $rÀìæ¹!—âñ²n’ˆU!ŠÔZ ¥®¹ã ˆ<¥O$Kså«(ápÝ]ûûW´i>·k¨N©wfnaWÞQ74ª[¶zñ¿Ù7ö›µÓ¼2—7X’Et‘*ÈŠBñž:žüW×kÚRYÚÍ©i¬Ãæh (\må›åæê¼úWÀq>qÀâ#‡ä÷°ÈòÌ6*>Ò{žc¥j>ðl²I®\ß;›VIP Š6e†#þ.j‡‹i 6ÃI¹Oð…¦¡ B>ÕódêqÎß\v­Åk­m¼‘µ ’Iþ²Í7tÄW”üV×µøª÷@ð½ÍÑËùIµŠpÆî4håò™¶¿>Zûó÷èéJ¬jG©r„ŽGDÔ¯t¨%»µ`»ˆÁÁÐçÖºÍ3ã^·aäèuûÛ3]•qa…Lñ×Ò¸},Ëx ²a$¶ ÏÌsÀÍA«K-ŒBÞæ2­ “ÙÀ¯j­VÒG5΂ nçHÖÌúúÌÓµÇÚ$v”¡•þø,Ó‚*o‰š«Þê[®ZVÚdyÁå‡Fœ­Ï¥svw’\Ú¤j ²¬„*Ÿzê¾![åܼ2u‘cFhÓ©;ƒPãTˆÌ}^k¥6³Ü/Ê6«g{>{ÛÏêî²j% là3î±”Ùf"Mø÷pËééP»ì·i#ûÌßßÍtFRæ‰E…µßpÉW@ èi†'‰Ž&L®ïJ’)\Äaç=G­Or<¿Ü«”Aoö\³dþUwe¸´gGjQ†Ýy¦´ì´náRÂ6¸–\ùVçÃO‡ß¼Em§hq.nÉè£<±úu¯ÐoÙ3öÑ|+¥A« u}Ztó—ûµ´ ]J°ê¹ÿÇ«ç3þ&ÂäT¹ª¿|õ2¬š¾g/qh|×ð;öÔµ;Ë{¿ˆh¶âIµ©}Îÿ^Ãúû/þÅZV‡$&hcÌHêñÌ2±‚¸zçevÿ ¿dß±kªúɽ™‚©Ýü§â=£’8wQ^ñgàOð›mÎÎ;Ƙ/žŽP´ y¥ceª|²n!˜…ÙÁ¯Â³Þ1ÅgäŒýÃô,¯"¥—ûóçv_³ý¿„uø"L’»”7q±O·ßðq]§„ÓF‚&S} ž¹æšÂi/Ä_”´‚%`Ì$U1qÂN ŽÔk_ -dð±|Ù..¦ó&ºùKÌŒ¯!üØÿYjöWÁÛ&™àb’Bb*‘ÄC#«½Ÿ_áü+^Ò¤[9eÔRñŸ÷ Èß6ìÉ¿øT.{ « bjE¢éÅAãÏ ÇâÍÙn£¸ <…Ÿk¸1Ë»Ók•Ø,ëÐd×Ï_´§ÂWŸÀ°G¦ÍÅä—ŠòO, ŒÎêÑ~pî÷öÛšúÛ^¸Õ4&OìÙEœQgÈò‘ÙCùì€z! /ÞȯžiÏE០™4¸VöûPU±„¬¥£B§Ìge@åg–n6u®ü¦½UˆJ=ÃF“¤ïØü¬øÙðâm]½¹†ÎXôüàl‹ˆÁäÿ´>ï5çÖ7rÃö©Ò{&B¥¤\Øàƒ^ËûAxâïkVV÷ªÛHTµ¼¼\3 þ•æZs{§K§ZÚÏp'™Œ¤ó2ãåí_Óy^&§Õ`ëocòlà nÕ3¡o¼Ÿ .õ™ ŠÛ™Û;ƒ"ƒ´w?~±íìn4ßD 㥼‡xEC-xÅz¿Žü:|;ð"+#,É%¼VäÿX9Þü+̼yÍÇÐò+ƒ$’3°PÓg“Ô€j¸‹|³ýµÝI]ÃwLÚµmw2Ƈy>œj½Ô¥ãÜÀí½ZúêSû'‹(ð¤ñ9†Ú`Gš<€r§øzzñ]õ„u™tÛÆÒc¹xJH$”(ynkÏ3knÑ]亠d!ºs]ïÊ:ºjOgõðù®g_ ›…3¢ s~ùà ýŒµ‹Øå“ĵ³–&YYRU¾`1³Ž”ýoöÔá¿‚M6îKè!`³*Û‘ Éà¯ÉÒ¿I¾ x"Ïâo‚Yðœ6²X•w/<Æà‚U€MœŸö³]Yð6Ÿá¸Ùtë{hYP†RˆHûÄŠø:üqŠ¥QÅ-Oo’G¯|ð›öGŸM½qz5k[M˺ß~ß0ï^qƒýkí xNêO Ees¨^ÚÚÀ?Ö<{Š"¯<ìã½S×¾4ǧÜÞZÇw”VîÁž >l…ê=ý+ñwÄ]KŹMnõmÕ·Q¹¦\™¥|†?ŠÎª©ât>ƒJž[K÷S÷Ï6ý©Õ –² xÃbSµf˜ž oí^-ãó‹ñÒ\LûQ¤o˜³ÏøŒWeâ=Zkß\[Ïm±§w¨Ë:î®_WðìÚŽ¤÷šƒ´dF'æ 8{W§–Òö\µ%# Îñ剃á¨E¥ô2Ë 9‚L€£«nlçð©~!«gn›SÈ\}ßõ›™¤ý7VŽ•{‡X‚É(‹ÌÛ÷~aŸý ½iÕµHÈãå8]»ˆ lƒ ÏàksÅÒCP¸Œ³ìaîS@Ñ'šý'h%ѰyIûÆ+gU²Ú‘K¯ú¼nS€žJº²´EF'ªZµ…Â'PHôÍ5]dR«¼gŽj}jàÝݳ3ýß”œnÏãÚª‰TÜœƒéŠé‚БöÈYw#à†Ú¥jYÁ%é6B“óÐÜÕmI’ýÔyyN[#ø…z§Â¯MâýN /JµDinb>l¡ |Ãïf¹qxµ‡ƒ“èuah Ûéé ˜Ð*3Dè®Ò2‡•G—ò·¡ìkÁ¿`‚ø^ÖÎdŠÚÎ+á‰yC»’îíò…ÝB¯??ö—‡¼)rºI›iœÚ©PQøýkùWŒsª™†cRMûÙòÌ¿êxjqEðjZY,²\lwŒï ë¹{¶3Çzê¯|=·£IÜV»ds=ÄFIåÝ*òSÕG$fŸ ZÉeÇ䣻÷[3“ÊîÇ8Û$ÕØéúbÛÛm#2„ °à€Gݯ”„çÏyO›Ü9 /Âñ\éL˜Y•$VÛÌiV|)fù€Ç—‚9§Má4q¶Ž6•˜4`;Üÿ²JüܵøÖγ|ºkN¶a y“—ÇPÞÆ³'¾•mîî!‘r‘Å' x}+šu:éÓœ~ßLŽÂUûl…íåÌ̤eo—hÏzÖ‡H½–H#XZÖ$‰@*±«4JÛâ9+GÍ;Âzli½V`Çi x8ýßÉ÷¾jßÓlbIUíÐ1TgóLnDÛyÆãÓ´©KQשØÌÖ¬o!±…˜E4Vñ,‹æ#àçk{`×!®Ù¹_Ù^#^-ݤ²^\ %(ØHUù‹ÛßǶ¾Šø¡ih—¶7;©N.]’L8 HÛõÈÇ­|ÉûHx¤øhÛZFlä;üÙT2 ä+p2|Í¿ÄßveS¨ñ1·s®¥½‹¹ù§©x8øSÔ/ílL®×ÁZÐI™aaž@î\ïo¹ïµÏá}Rx4h¾Î¶rIö™AU}Œr7cž þ•ßüføƒ ·ÆÝþ’î ×~ZìXˆ=û¿wñ¯=ø™qöµ¥ÇÙí¯ådŠp¬Þ\œ’ÙîÂþ5ýA–έHSç†èü·R”仇şºü8ÒÞÑäS²HÍ#¾÷ Š2ÙïûÎ+Ãþ xœI i.ç[ “w}ȸ¯Zø§>~};ΖöJ…—©}ÉŸø+çÏ^­ö©1Mß;€>˜¯g ÂÅÂëù™áæu®\ê‘L‚£.KuÈéW/ÃÛéÇe$¸±cÐ.;Ve¬¿'–\¨<‚sŠê|9á+ß]Êm‚Á(œ|ª;ws“^ýV©{Ò<º.U}Óû£Ñ¤šr‡rdRHÏ Ao¡iZ’(ìñ3Ìà”áÉù6ñžkñ,Ó'”*N«Òìúl9Óå‡d}-ãúŠ4¹­<;©f!#ÚÌ|ÑY03Ôâ°“àýÖ¬öZ}ÌÚ=¾XvD¸“oL”+ðŒþ'CªÍ®^ÝÜM¿ýÃöy 8u“ËäÈZí>MâÏŠpj~"ñ¾¡¥éÂEŠE¹k‹˜#$…MªÙÉ8¯žÄáëPZUÛó;hU–&M³Vý›¼Kák9ÿ±Íý;ííçkc®£“µ{jã¼Sð§TŠ_²ÝhÞ|–¶sG Ò<¥RH¿»^C Àæ¡ñgíâø~+ÝéåìvV7µÍ£:”R@õù+­°Ð.|Wsauñ#Ä:µÜ,EÕÕÍÅï›æ¡;vDŠˆöŸúë]´jb°‘S¯5©”éÑ­îBÅŸü1.‡,—÷Bä}¡gËFy ù}>t¬ë}'íÚÆ¬·S &R…e.e^áBdŠõX¼;¦êw°M¨ÜEj2X vLr#·GÜë\„Ú6—¤ß—ÔîÀ±eù£‰^y3—ÈPÌw É:×è1ó©7ÜñªÂŠä Ó¬´Ÿ.ÆKkk(Ô"¤·_½‘O LŸÃÏ—ò×{y`ÐܬÖw2¤^hó™×äRÊDëð N+ÛÕlû§>UbÕ½´º•ÌÍ|‡ŒÇ´¯aÞ£–}KG} ÏÄš_‰QŽí„c÷FS÷³þÖ9ÿ¶•¹·ÓÕmn”ÎZ>%b_¥dèrè×gÊ,±³•ËÍm&¨b÷R+a[åvÝÃ#?L­sý£J‹ÚA3šñ ÞUÌ­p³b$,çËýÛ€2@Æjš„Ð\¬vsù×E†àNÄ\ýÕˆ×ß̯B×lƪÛe0ƒt¤åWËaÇnŸø} q)ðÐÔ5G€£y;2L¹ô¦ª.}Nœ9æ?5¼Ñ§›O¹¸‚0­ó!S¾@Ф{±Å|iûg^^fE‡eU–ò lg”Ò0ÌbFîwc§½}§ñ‡C6ÚiͶhã{Éå1è¸?ë>mÿJøÛöÎŽ nÜ@ÚÙ-Õî%º¹ŸkƌÇnÄ—ákè2 ÁãaÊGðGìŪk×bMRH´{k_(Ë%á+»pãh“ì+×¼á_x64û\óꮌI ÂÞ@‡–äŒ×¾^~Í~Ò\.´uRöê(n–9®ö}¬ã <µù›åÏ\bºøG¢hzE™ðO€T5¼1Ë÷Pg؇9‘Î0ÛøòÆïïµó˜î1Ž2?Ò=l.AR†§Ëþ7ñõÿ‰-ü'`¶–‘F"o²[yíq;nö'ð â¼Dþ.º³Qo¤k2Bÿ(ci´ü½6WÝZ7ƒ¼eu¤5Ÿ‚´‘aÝ¢ªý’HqnY°Gsê>¢¼#âÃÿ‰Ú5¡ƒTÔ´È YAk»í¯8ßò`aIÂç¦ï­veùä'Ër}ç6?8ë9ŸxïMÔ­®Kë+»xÉ —h>¸ùk/BñÖzÂ_!Ƀœ†tñÏ_J÷¯‹–^-³¶)¯êÚ ° <‘-Ø$0èpÜׄÝÅö™e—UˆMûÌo‚E!yëŠýˆXª)Èù:ñös÷OZømñªÓÄ>T0Ô&Óî€Û ²NdDùsòƒé_Mxcㆇ¬ZÙÛø÷N¾½ÓôøD7S6å û¦B­¸áeëÔu¯Ï[„ŽÒG`ÄðîÃáÅ™¼%8Ro>ÙˆØÎ»Ùtǵxù· ÃïÓ7Âbù'ï§~ýª<¥%Œš†¯dŽïˆaoÌø| vÍz×€õo‡^$KðW‹-µË¹ØL–±ê+?–Iç#È?êúW妉ñ²ì»_¶XCså¸6ÝÄd½«°ð/Ä QšïIðüx²C+LWÈ1*õÁ{!úWÂcxI(?wSè)ca¥Ñú‹¬|'ð~›äÈš+$ñOyd‰Ë1,?Öƒ#í•Z·?Ã/^Õ­¿¶µ),¯ae·÷"2ªœªª÷SÓõñ?†?kë kN–)„öW Æ>ËbdŠ;™F>v;ùŒƒÖ¨x÷ö„¼Õ- "f—S±f‰.¢œymµ~n|°±ñï_/Ĺò͇×pñÒÇËß>:k_õ d›P¸ŸFgp³I“±Ú[°œ{W»\ÞÇ­¾£®ÛªÛBìmäšïË^˜õþµòŸ‡|9/‰oöݰ³´¶#|ÍXèW'ƒ§ƒ^—wãXµ;™Ñtÿ¶ØEp[¡Ë•Pp6©àzb¿]ÍrÚ5j©ÓÒ]O–ÃK‘{ǨéÚÝO&•·´»Ú¬ßëÙ]ÛösTüWðêñµ+yµ8 z{†…DŠÎ£ œí»zâü7.»á;)ï¯n¡²Šdò¾Êÿ"(c†*½Ûi;G÷s_Dü?ñºß„àoZ‡Hm¦ibI…;‘ÿ×ÌãêTË-*Ræ;!J½$|óâÛøFü9-Ø0Gwy{þùU¸öÀJùïÆ>+¸ñ5èv•ŒhÛ'oOjöŸÛGâ-®Ë¥håEid?|&~UÙ¯ŸDeøþñ¯¾ÈhNTYï-O;MÒûœü©´÷>µ4ì±¢áºËf¢6ÒËó¼9é‰ · F ô¯xäC&WI‚®O–GN§5î²Âé¼Qã­=pvyªÿ"1d8ÎzäkÅm!&þ7ݼ€W¾~Íÿ›áljÒòu2™K‰³lT9ÀúIÿ¯>•Gƒš¡ñÙžŽT©ûuí;Ÿª³ßÃ?ÃJ—>'´·×Y줅¢šË:™T:Ç,Xà˜$'Üê:×Òüo©Ù‹Øä“O°†òQ˜\͸‘ö)WW, î`AùDQדþÇ'Lñ6ƒkuor· :î“*AûʬzëÿM+ë¯ éï§ØZG¢Ä&û=Ø1}žXãv¤¿}­Çý³¯ä,Ó7Z¥*ŸÏÜW$(/f;ÃöÆ-RæÞÊY¡E–F äFî‚¥‚“Ó…U_/bƺ%£‚ÎMN >Ñå‹eûQʺß–nÃriÖ¶Ö·:TWn$0±q»|rÅufgó3žÕ”o%ZŽÞOô¨f‘ÞvmPÀs‘ÿ,þ}¿ïW7ÊÎ^kd[ó%šêæHbÌÁLnû¥„´{Ô×J·1¸¹–Mª ù?^ÕÏ]ë±\ß_sA"ì™zžlèë$¿fòÎÿ7¼_þº9ìhãìk[thÊê*K0Æ¢ûÕÍOM’YÚ(`óäàˆŸº?•Ie¢Gq¤HKÇå9/&~÷œWE™YB!iŠ|àÿËCü#ñ®˜{çŸSìÑÆÁ§eÜ9ò ûñE#+‰|ìï º¿Âÿ´m玣}^{‹x´è®LQY»£lŒ»æ4d®ãÆ'ž•÷ŸÅ­5uW½¼†Ù"tºböÙÀ<P:Ÿjù/ã‚ìšÖ[ïÛ}ŽÞ&Šî't>\ $¬œû½Á~þ cšú^ª©bœàz8ù§Cß>T×~M­j(nì¡‹I³]®m3nêdùSf>|qÍQÑü áÍÄKw4LñÇtþ\18ÅQ{å]9÷®óÅwÇš‡Ù< ž ’Cr‹µcfo1ÐF>VùØs÷«ªð'Âý#ÀQE«|],o›*Ü,m)qɺeFò9¯Öe™N;Tß²??«xŠœ°ØæüâêÚ«hžÐõ‹·2––4‡È…±÷¸ãwûîßd­vë̾øµ©iÚ[Ç€×Eo$»d Mä¾=XëšóŸÁEt5ÊøOÉÓ#…—Ëk{uå*]€Ø¿½9ß×¥|Ýñþ /âÉ%¾„m¬ÒÎCÊÜÿt| }y®y6kœéJ²OínÍ¥™a²í%;³ïûO|!ø#¦J_íö¥ ¿Ëe‚t}¸ÜcÞzöùkÆ>&ÿÁEô$ñDÒi°Ø´‚ñ4 M#ãF-pwõ`=V¿< Ô.¡šcVäÚ9ÿk½U¸’Rq<óóÀÜß/á_wƒá¼. ES¦‘ó8¬Ò¶%þñ›ž#Ö¤ÖoÚõ ‰ãÎIx{W?!>yòåFEý?k­Sö~-oÖ{.Ë?i$`#³3Ê”í~õ~‡üÿ‚Šø[Ç÷:|CTƒ3›kˆ6²{€?ֻߥ~8xkÇW>šmáfHä£O9Q$;ÇŸ˜>dMÙùsÇ­™uhuÍe/ô›ÉígMï,¶˜LÎìT# ÂrUI;úöOÊóÞ ÂæÕeWi÷>×-âJ˜Z~ÏtC>øÑ¥ÞØÝIc#Mö€¢ópxcŸà2qX_"üÓá};W·Õ-ôé%ÛixL!]€ç”a@Û‡ÌÝ+¿Ñ?à«×%Õt‰¾%Úñ§L@î‚&EÁ|€ *nÚ…˜Î ~w_Ãìu sQ÷Ñô4³Ì#÷§î3õ_ÁuY§’à$²™Õ5pÜ’?o™Õêž°—G¿žKä$0çiè_Ì?ì׳§üïÀšÄ6­q«%„ѼeEÎQ!N>vùO?Ýæ¾©øûpø/Åú-c«Ú\%úD‚æ&Ü€ f^üó·¿™ŠùœfWŠÂË÷ÔŸÜvO±K÷,õx¼`š~‘,AeÊžFËlß$®…F?…TÆŸð*èôù›5Äp Xe2‚×ñw0?ím5äó~Ò>Õï.E¾´w0´Žþy†X[’£¨éÞ®é5±Õ®,¾Ï}ÙÈWŽ(àq!Ddy„ùƒæo3 רëUJ4ÒwV<ùáfþÁèßÛrÞ]JfVgÝ + fÚ»sëÅEâ;³1L²I1â Æ10å×ï Æ¹]'ÇúsB!¿»"4‹r+ÀŒ:zÆñ'¬$‘cºdÄ`BÞc;ž¡ûµÉ9Å»Xª89ó<Úô÷ ,ˆ¶“Ú¤hžj¾YÉ=w¼ûÆ¿4ohë=âµKä™ü³æôTÇÌßõÏË^}ñGöÐþhmý½= ¾†F´qö™fŸhi0ûP*Ÿ/ÌÁ Ý+áïÚ¯öÊ—Åz=Ì^¹{[r³G=Ì#²!òÿt€$¬›XÓô®¬¿%«™TåŠÐ¥ƒ§y½OSý¤?i{K¯\C£CÓ¸*#•„GómF2p&¾Gøáñb߯P}«Ä—V—[<ðÅ&Ó»k&üÝZó?øYúö«â;‰t=ºv–ÐJnîîbŽ(YœíæsÉ'?u:çšñ¿¿ôí&Õ!Šø^.òD†/(Éëå§ðàlÁï_®d<NH#˜çõ+]Äí<}ûWY˜-2ŠŽ>KHŒRºŽÒL@Ø*Ÿ÷«É¼aûHj:Ð)k4ÖîŒì© ¤7Þþ'îkÎõ;Û½f7‘×ìvð&»¸ÎÜ—ï×¥T¸¸·¶S(å<¯ñäu¯Õð9 µòUsÕwf…Ö§qâ]AÝçy§”œ…Lwg<~&£ººÒü9mY_RG))ƒþÙåӊɹ×$[1MDf(ú{ûÕiífÙuÚ y@mükÚ…(­Âr:²f­ÿÄ[ÄtvÖqȆX>P@va¿û§çük&]Vyä ÎÌ\à†‘°~•sBðÌž$½hÈ€ Ìà £ÔŸJ…ôÏ&ÞfDo,É´3üÛˆî¥oM+Dži..'ep¦ê‹ËvlI÷›“ZÚŽ”ï¬4D Û´u8\æ³d_±ÄÖ.­÷[­W71R˜º•}øA“DIóHÇF/Í+*ÄÅÊífù:Y3·¯j²"+~õ21Æ7RÈD1‡fuômò¢ËnÉ¥Œdùð9ö©(žÎÌÉó%—¦ïCRÚ!I„qgyüµ\L|¶ ë¹ô=jÑH¥÷"¸8?íS‰H÷o…7<òhoÜi@-ÂÍ·,=}r~÷ãzÖ>¶¹ÒçHÔ5ûhwpX#qùW—|ñïü#~;¶3\¼V·LV@å*Ü®}²+è‹Ym´nÚ+9ŠÁ©[£Ç¦åpi`{uÏü¾;6¾«Šë©öYT)æuû:mªø~ëû2éÓÆI“[쑾˜ÛòýkûÃÒiZ}±¹¼‚dXÙ‹4ʲœ}á^ûgm§j·«õ‡›lªIKyü†ç×äâªüeð‚¬>_Ü·…õKI#³‘cío3s˜m»9ç·zñhfòæT§ ÙËW/¼\»x÷[moÄs¼¥^!ò«»(:~¼ÿÀ«5#hm—o.H¬k°Åo¨J,’U‰äÎÙ:ŽjÉ4¡qŒÕú=(òB*'ÊT÷ä5s±ÕAÎInŸµF°gG €7ü'éS t·úq€7d}j;J·˜p}j@$ÎÑchÆjÞðžœ×Ì!ı¬¬Ñ»'ÞXÀË‘ødÖE¼~XbnÈá½=ë§ðTHúXòdX’wXHv¹ä+ž¶‘4†‡_ jÖsYÅrˆ¶ðîÌŽñ!c#!HÐÊ#ó >›kSþÓ«ZMyH§³O¡|Ìyp*US# âµKï싦´ !‘¤foâo—ùqÿ«×z¤º…¥I&™m'WÝ.|É .yÿf' ø×•<73R5Œô-ÂQ6™¤ÚéZmÌaïfû ’Ø·lfqó!#*1Ùë¦ðæ­袰±{dŽ%‹ýW7=›Ë6H wœ˜ÂüØÎ+Ë\€R¼ÃᯈÝ&Õš —Bá\A4€F¬¥J) ð€GœÀ{×®øföïT[èô{e·žK‹+0¬ÿ¼Ô.¤ŠE¶‰ws²"C¿ðî ž+ÊÆQö>ê;ðõy×¾K¢è\w¶òÜiâˆCÃ[ÈmOõ˜1‘Žd|lÁݺ®Ú›½M6…­Þ„cga°¼²ïäºHÌ…B!„×-â«ÈXéöº5Z]Kdó.D²G -Ô¯‚ļ¥ö¨|¨0j{™G‡¯eBÐÏÙÄ+Ó·šHår­6æýÚ¬XÎJã+¿#†Xoh¹¦uÃöQìPüPñ…å¹m3Ås‹3Äæ2۶ȱf@œ(þoö±]M¯í¿ñ?@Ìšðžò(.°Ì®%EŽP¤¹ÿž÷¾‚¾sÕ¼a}¥i-w§ÜI,–òhÚMŠÌ0Y¹É‘þ›ª; ;«{+æ³·2@×,ìâÜ2¶×ÈLªÎ¬:*´„6@Âò*5~:kî;á›TQÒgÖ:OüoâMŒ®§Ó¦kùÉ;Î2Ud`¡T¦'åøsZw¿ðRϤÜK¯Mg`BöÒH’—òË;F4TÀ'_öP×ÅRøÒ=GWµ¶•¥Y/1rK^<¢ÙH$ùÀ³în<ÖRxÈ Å°+FÛÇx–7eÚéº6šör]í¤c»GúÉØ‡ÀíóW~ÁY7IÕâ Dt¹íž/øù⌺Ôgím$ׯöú™.vÿ·^sñcâgü!ëvž=Ô¢ÕuG„ˆ¬cæ‚× ¸ W…Ç÷k…ñ'Åø~éWšwÄ”^^Fb¸¿1"^ÜÙ#*çÉCè{×’^Ë-¼í>¸²8fóZ/› zýÞç޽ܳ §œ±[#ÈÄæµ*½YèšEï‰~3J×ZΧ†Ÿóšy]¾Íf½0#õÇzä~ ê~Ð/|Ÿý³X¹Ïï®îÆ#8éå¯qšç¼OñûYG´Vk{ì¶Sµä|Äz×=±›p•·sº¾Ÿ ‚ä–¾ìO6uùÍ+Ý~mM³u!mÿtcj ôPHÊ…çÜÏœ1÷íUí›ÎTèÉ«¶FñQ»žqÓérò&Øû C<ÈŒv…É'Æk¨Ò4”Öo`ûb»Ú[©¸“iÆïïãØ¬Ûy4ˆäJU~Qœ¯ñþ¬•Þü0ÑQ³{‹ÑåÛ-¥”ðV-Û›¿ÊŠåÄÏ’<Æ—ux3À³µÌMƲ£db,¯.mϹGû9®6xJéÑyÅH™es»n?ñÊÓñçˆÇ‹|Kp-Y£¶YvCO‘Gʸö\š«¬Zý†;5 ÜÁƒò¯ßÿXF¬èÒ•8ûßkRŠZ•ÂCâ&Ý’ã!v¿+ÓéXwQm#¾ÜóÿÜ<{ûÿð¤juÓºW>°-¦lKèŸØ¶t[tj +Ý=1¼O[=îöðAë= Þ…‹è¶Ü¼ó{£³-0e[â[Õé]Ó:sÇ÷ÖðÑ9p¸õ¶e°›ϲÀc1þ, =#ϲð ¢L÷ÓïGx¦ágYèx =#ϲõõ¶¥ó·pÃÃÛÒš±óÇð¶DŸ7¡Çâæ¹{k8æRŸe7˜½gÙM]z¢ oKgÒØ³¬»-íˆnKç¡x– \ÃϲðqÓÂÝÙ#êÐÞÜ lKg«zÛŸò7a[›Ù–ÎaµUw½à™úÆWìl•›uËø,c~ð;¾*}æK—.ýËŸ}|öR 9ØŒÄá¶—bý¥jI9æï>óXUUÿø[¤ªª¿}æWꉷÞöŽ”egø«§ÿUUU_{þ][jسç/6··ô;/Óê1û™_©ªêÖÛ~¤ªªö8Ÿ¸/\´ªªŸýÑI몪꯮ý|UU/hþâ÷¦ªª—û{:Óÿ×'>Ô¾û îŸÚ™©>÷;VUõÚï}0eæÏü—÷·ïÞö¦‡¶Ð#Ø:ÄÔñåìù‹gÏ_2íE†¦td=Î÷kÏ¿kRˆõŠ7ÜÿŠ ÷WUõçO}htæÝûÖ7}à[ßôªªžùèû–î ìZz껣!¦ê×c¾ü쇫ªzáë~¸ªª¿ûïUUõ¾åíy¾ô̯Ô%™/=óËÍįºý¹ÓL_üÔ/5¿úÌ;›Ûsý«ªÌÿýä/4·_rîÇ›ÛízÌçÿðçšé/û'ﮪê/ÿàgÛ|}«ó¿ëªÌw¼·¿®¶?¿úpUU¯¼ø“võáW^| ªªÿù{lþúªïz_UUú»7•F¾éÏNþäã?ÝLüæúSUUýñÇŽ«ªzÍ÷}îcǯ9-Ã|¶®ÊÜýàg¯UUõº»«ªzöÉ£ªª¾åÒOWcžùíçÍíß÷\ß>õ›´ç9óýWUuã#ÏW˜ÎÞó\Jû£ÿüü¸ë~ftu°)MþH‰#í¥êâM§‘!sê1ísëíï¨Ìÿûôs™æEwÜ÷¢;î{Ñ™ûªªúÂG›¥^|öGƒ!æ¯?ù UU½ä®{ɹo‡˜¶ÏÿáÏWUõÒ׿ûe¯wUUÿçžÏ4_÷m?ñußöÕé¥ÚË¿ý=£!¦ñgW~îÆï}°ªªoüξñ;¨nN0¯úî÷Ów¿¿ªªÿññTUõ'ÿ@UU¯~ãO½ºN0ÿõùDò¹·í÷>øÚ»LìIßmo~èö7?tû÷=TUÕ§ëê4ÄÜñ–‡ïxËÃÍluˆ9{χêsý‰û«Ósç[¹óbXĤSkfNYª[yáë~øËÏ~¸®ÊT¡bLÇ—>ýË)ízLÐßüÑ/6·¿æ®íb£]’™§%ó îoÆ÷¼òâOVU•>ܧÑ.É4^ó=GUuÓ6Õ^{÷ñg¯={娾ûºK?Ý_ßg>ú\±ç¶7=Tw§]UÇ—Ž:ÍÈ1”¢}^i4ʬû½ë[oGûgýêó¢;î«VÕo„Í‹ïüѪ÷ ƒ)^úúwßü3‚“½â ÷ßü»kyõªÿ‹ë¨ÇT§;§1·¿ù¡jU}ú·ÆMs:©ªªjµºó­4ç•>ùïeؽ©_Sš::8p^©S%c˜¤SUÕë.ÇçÜ”;ßúÈo}d7뀾ö`—”™«Þy¥øâóë1·ÞöŽ/=óËíóJ_uÇ}/ºã¾/~ê—:§–¾úì;¿pýÑ¡q¾_s×ýõ'¡ê"óÒ׿ëóøóý¡¾}_ÿíïù‹ßÿ™Äq¾¯üÎþì÷>Ø õ­ÇùÖþô¿=W)©Çù¾úïÿ“àæ¡¾GÖ^ó½~îwlÆùNêIí¶7?ôÌo¿ïÓ7ŸZºã-üÔo>ð©ßüÉöÄ3ßÿ¡¹¿}^él«S9¯@ ú¥—ÑrÎêúµ«gÎ]¸ñôS®Ü–z´ï«¾ûýë„uþ‰mKUU«ç¾²ô\1f׉¬Ó̙︷ÅÝÝá:‘á£!ðÈÅ÷ÖðÑ9p¸õ¶e°›ϲÀc1þ, =#ϲ𠢌ëDºNäà¶t&=Ë\'rè^i׉üçoxQú/ó^¹r¥¹.ÁŒ¥îzÁ3õ]×%(Oû{×õ—® ÁKli©š3âUßõ¾Nží¹ñ1k·tÇ[>ø<‹ºtéÒΖjÈ1Àt®D½Õ¥Y_— âùzÌ'.ÿЂý`›N¢w¡Tê1@©ä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(Õ-㳞Ë?±tHutttãé§–îÅ|6Ø”ÑWƒ3ç.ì¬3¬éÒ¥K=úHÊœrLØ•+W–îãòÌ9Ø`}‰¯Eì9“>àÉ1ƒž|òÉ¥»pp&½Ä¼ýïÝ^OvÌÁûjÀTr yI,üo»'À²¼BŽ!; ¿@Í«£|_ (•³°Õjµ¥™wÖ¥Øöƒî â=ñìù‹K÷âí(Ç”þ¯V«ÈktûOSsÉÉÉIÓ~|-›urrr°ï:‰‡âRí¶HkñUwúÖ™rÈû¤~îOz8{þâõkW¯_»Z%¿Â¤´¼¾x§…¢ß…#&iïˆú1KY¤™³}{Ûhs#ê·ŠulÞo\ð)7ãN?b³=¨†lã8j³}XÖ·ûS6Þ¨mêÕ q]k¶¼Žåÿr´ i9æ0àöÙö w}£ý·yq¾Ä÷}éï,™>:¥?C§Ÿ¹¹~íjçÅkö]P:Yð`k·Ð.«Ô ö6˜ùAE¡6øj7ôѬ½_qi¿¼4] ÎÖÿ¤Ôþ·¿–x›‘žôWÚü;us‚Sú 6w;›¹rÌ~<ÀÙÅýWê”D2õÃëÐ"ÁÛ‘ÏÊóÖžƒöoOŒÈA¼]…ž®í?µ©r=Ø:(xÀTÂ&BÅ{·íWƒˆ`¥62%¸TJãSÛêɨI›ÓO'õæ;³ÈgÅu¿w½ðF }VŽ,,½ -ÒŸœ’ÒTæ¶šîãUðà >];Sò?ØÖYWUl,¦t‹|Öß¶öælcüJp§¥¬hÞ<‹<:Yÿ~Ì6à©{¹3øqWíø‚ý1˜‘E"ˆÛŸ˜Û·Ë}³Yÿ‰1ô1nƒ*¥WÙl›"İc{bÚ?ÞïfE‰Éäá(ã{×ÍPðEöÚIˤ¥†^å#Ÿ•‡¾ñ‘^˜é´6u‘½7§?™#šthìÁv8¤È¤\±)ÙnÎbã|³Ý#;¶Ôë~¶ï7.]»=Û~г=¨(Té¯{öî–íæ,–c²Ý#,èíï|ïÒ]²àÕ€DYïzA=úˆëÅïÞc>²tà`ƒ¾Ã|5`9&àèèhé.p(lëc|8fgl°K—bé.°ar áÒ¥KKwÍ“c8ÆÜì¥2®KÐ'Ç¥’c€RÉ1@©ä Tr P*9(Õ„ßñ3ˆ$:::ý™Z‡÷¾íž”Ù¦ýÞ•+Wæô…C’þKS‰Ç(‡&ý³îäßó}òÉ'§.ÂAÙÆƒÞpï¯n¼ÍCð‰Ë?tæÜ…¥{P}þ/ÿ<}æöƒÿâî»ïNœÙu €­{é×}CÊlÇÇÇ“š•c€]ØFÁÞ÷•`Ž/?û᥻P€Õj•8[3çêÔW:£Áu:0ÛŒÝùkÿFÊçí«Evסþldcã+Íj?ìØ‚›¿±zL¤ttt4ô§öfŸœœlª3‰¶½öÕjÕ4Û¾ÍúÚ1â…¯ûá{Rûò³nw£s—DõSrê3e—KÍk*øR³ì«_PgC:oKó:lsRSCÝjêää¤~O¯eƒÛnjƒÇÕÐ*æ­¥ßÂf;™¸Û·a“ç•‚y%’orxkßYÎX|K÷Iþ)!óîíLýÒ¶ãƒ?q¥ñ&õ<ýý²y¡NÜåîjÀ‚kÜÒûñì;ûjRS»ÜØÝ<|³×’ÃÛîÆme|LÊžŠOÕÍÙ¶:}Yi¡Jxì›—˜þZ†šêÏÓo!Òfp C!¦©ÐÔmß­oǧGZΓÒÉx »Ï:ý8>¥31òq³ÓNä]!å“kÿÉR…ž/eÓ‹"ýçf“#=½Ñi*Ø`â“=ýƒþ¤’~çu©­F—­ƒ`oûû*ØÔècÑþÐÜÿÍ>ζþÆFzL¨ýÎ÷wQäm¢¿ŠõwcçÍ7eñÈÛV{âR%™¼Æù¶·¿ºÛpdz¤…ª÷øÅûÒTpžöÄÈÔoÙÚᦹÝÄ‘ÎøôÈ”ÎZR:oa—Q¦ÿÂÝy)ì·‰/Iñ·„y0<ŸƒCϵàJã\Ѽ§gpECW:{oÞJ#ï鎴\=(3V±©Ã¯ßÕ©=‰7˜ÞÃÑT—Þÿ”ƒ|F'›D’¾®öÄæöìÃ`K6<ηޤöZ}viê—©v`u*r $¶ÐL‰·ÐŸÆëÛðåg?\ÿ·kÙ¬ö V•ð999‰ÄšIMuž,UèT„fŸôŸû‘0uw¥w¦YûО ¾+çlè¨KÙØ´û¿½ƒ<˜„æ­+Ÿ§á†ë1ý‚D­:ð»”õ_¦¶0ôq#a¶µ–y ™dÍϸ׬týµ/û¬?iaú<Ý/&*ecó±íƒü¤užhuå³ûÞu{W›“^¡­3î¤\emŤ‚e¿B<Ú·zØoäæ$42 ý¹yÆÞh&-ž¾»f .÷µwFø+wc·gñwœüÖGÿþïÿ¾ªªë7>õÙÏýqUU_øÂ?öñß×ÚVÆÇ¤Ÿ1í<]ƒ¯SW½f ñ¦:Sâ«;é&ëÏ¿©Þ”þÚö”y”xŸ'¥ë÷s¶æÃhs·?¥™yÒaigƒö¹?gdíK=×Röóš½ î–Ñù«›cA§\ÑßÉñmêÆÐ£3õ°™ôðõ·+¾±)ÛŒÒ{|oÌ^pݘ²®KM=±ðãï~à#¿ñë¯øÊ¯ü÷ÿá?¾üå_ÿÚ×|óg?÷Ç|øç¾ç7~}ROj›Ì13†¿ßûƒw;7†¦GZˆÿiÞ £‹Lêéú! 3¥¹Û¹14=ÒBdžøÚ'µ°)ÇóÐôø+TÊg5< mÒ³cÒÄÕé÷™#‹D^":=šs´©ô=ß_iæôžGÖÕYEp†ÄéñnDfHlj´'£¯¢£;ÔÈŒoÇkâá±ÙÝÙ{)+Zóëe/{é?øŠ¯¨ªêÖ[o}á _XUÕ ^ð_ò’¯™×ÚÆrL†c_HשR*±*°ƒÝT½­éŘªª>ú‘ÿTßø‰wÝWß8w׿ö«ÿvÞª·r^éøøx/cÍÞˆþ)|S-oÕFVZnÏg¬b^åÖ,ãm»'ûjtcÿõ¿ùw[ZõVrÌ^†`ž+W®l©eõ ð‰Ë?´tJµ«ËLõØ£LšÿòãO$ΩCΜ»°tŠtãé§ì: Dé9f+¿“áïöûg+9fÛõ˜ßwöÏÆÎ+Ej0‘X3ãki«›/½¶‘ák¶¹í/×mc“`lr|L0¯DòÍúoÉÛxGŸ×æÎr†³ñÔ8ô‰ùÛÊ8ß‘7úFý×à›Vó{;ÁŸÐîütãêôò`ÁùSÚŒô$¾u“šêÏÓo!eRºWºÍÆ‹”ö~—j±ü™\*¥ñ©mõ$e[Rš Îùaò¡ ïÒþ™ìÚwûévjbž‘nظ ó]ݬ™^Ÿ]Zö{Lí·™~×Ô4¹hEb Í”x ýùyìóêô2:M"iOéß­Ba´ÓB3%²–àRì̆ë1Co½õЙL~W&±~3ÉnÎnDæïœ~Z³3%ê?”ñÕaî%€=³•ï]§ðùuÈÔÝâÔFí¤¥¹»Ùª¹Yr|LPB§\?¯à”ÄùÛg…65l6ØTgJ|u)Ý;œA¾mÁŠKçìž°Ç6™cf  ¾gÝ팭n~_¯o ½Çï›íɼ­˜·È¤îí½þ£<ìR‚éÐ"ÛH·lÄÆr̲c_¼»Ž¡‡xRvŒ§áÈŸÒÓ-;×÷®g+ë-¤¬Þ@¶ç Y.J”WŽq¡l ]^ç•2ùrsãé§–îB©ì:`¿å•cŽEúΜ»°tŠtãé§ì: D—"qμÎ+ebüîd.¯“>>&x'à ä•cë1íËõùš £RÂî¦æÙàŤé À²òÊ1)õ˜¡‹ÿuÊ3Á‚Mžªõ ÀS„ÕÍö©')­Í^Qÿ¹0¯€¬ä5Îwöø˜ÕÍ—°î\Á žœ§s-ž~kd(ŸGgã==óÙv€äXú·c¨i¿?Oû]!‡øÌ,3«q‰³N‰÷d¨ñöÝI ŸÚ·jઙ{ h9Öc†þí˜qçÈ'°%åÕc"Ž_Ç8812Os·ê]+xhY`—ЬÇlÐhgÒ²À.•WÙ¬Ñz̤e€]Ê+ǸH$.¯³ûz P®¼rŒz .¯£¤Ë+ǬYñƒ.pP–ÿÞu¤‰5íÈ2t Èø @é–Ï1Õ@^‰ä›¡ëW§Ìrík yWJ914D$8yå€t¹ä˜ÕjUcšµúìÒúßcZJ¼ ä/‹ñ1ÕéPÜþ)¡zèÌú¿+Ó¾|Rð¢ÎF@qr©Ç¤;99‰—LFgöC.õ˜ZbE¤“Tê»*‹ï]ÀÞË"ÇÌþ2M†f˜:ÈÖò9Æ5•€yò3û{Iª)p€òÊ1j3@º¼rŒë]éòÊ1ê1@º¼rŒz .¯³ÁzŒŸÂ€½·ü÷®#5˜`¬éüäë ÀÁZ>ÇTy%ñ“+¯óJ3Nu.UÝo¡™Ò™¡Yp­ËÉ¢³Á+W7·G'ÅÉ¥ÓTJ:5•úìÒ¼ï1õGÒtb h¹Ôc† $õЙyßcê\[j€=“K=fKê(Ó™hL ì‡\ê1µÄ’IDRæoª2“–ò—EŽ™4ü¥“Bê»í‰)Súw€â,Ÿc\S ˜'¯ñ1®¯¤Ë+ǨÍéòÊ1ê1@º¼rŒz .¯£¤Ë+Ç쬼¢äVºã5À~[þ{בL0ÖÔi }ÑÇjÊèu.V¸H° ?E‹X>ÇTyeç˜68\.rEŽi$&ƒö¥Úè\y ië¦ýv§½‚`;£mج¼rÌšÚ¢s-‚NB N:ë”’Bâí¨ÜÀ6ä2ηxÛ[Ÿ]êŸc ŽÕ©«n/e@.!—zÌЈ“zèLÊ÷˜:õ©«î÷¤ÿ' +¹ÔcfØxÈè§r–K=¦¶Nzhø·TpØo3C¼oývúS€ÍÊ"ÇLúŠu?4S"ãsÛÃ~ãÃx#íǧ.(ÍÀf-Ÿc\S ˜'¯ñ1®¯¤Ë+ǨÍéòÊ1ê1@º¼rŒz .¯£¤Ë+ǨÇé–ÿÞu¤Œ5Á+2V½«L/ÀÔž¡¶ÔoºD®¹ƒî¹n%ûaùS ä•­žcÊöJÔ¹õr–EŽi¤¼‹7…–ö̉é(h·Ó¿Œ@{ÊP¨ ]»`èZýyÚÛ;Z@m­=OʦÿÚß½§¼rL¢m¼ËcJJ¨j/Û_°¹™2µcýÖ‚ótrÞh†–€lå2ÎwµZÕUæF­>»”rŽ)«ÂêÔFOi­?O§Ò3©?™ìFˆË¥3T¨‡ÎtÐäâcÍŽ š·ÆNÅeŽ@Vr©Ç¤kŸé¼+ÏHÛC“rÃèÈž”Ö$G.õ˜ÚÆ#ÅPI£?½3n·?%}øp¿©È<‚á,½µà<‘6;Û•m} ‚²È1“¾bÝ~¯0H›>½2‚w#7†ú¼©n¤¬q´ÍÑ™ OËç¿á Ì“×ø×WÒå•cÔf€tyåõ ]^9F=H—WŽQÒå•c ­Ç¬s `¶å¿w©ÁcÍÐ%„¶'þ3qÛøEàീŽåsL5W"ùfÇïñË^ËIˆ€!Yä˜Æ¼¸Ð¹ld§|ÒžÞ¿Ñ™³}wh]ÍíÎÅ#koþmþÔ¹(AÕÍ £½wöX^9&Qð]¿Åìx*êü5}ÁþlÁƒ]JT‘6#-;÷ÀËeœo3T¶3f¶>»Ô9Çtr*ý‡ŠH3±ß‡ØMI[Z5ì·\ê1ýÒE­:³ï1µÏÎį+¹mZË"}€åRÙžö“þˆÝ¡¯ í®À\¹Ôcj‰‘Èé¤ô“MÙ" 6'¼F»7éTWp©Î”öÀš-À~Ë"ÇLúß`vIŸ¡3ä6¾`dñjàlTänÕ)šg´ª{oùSèoø‹Ëk|Œë+éòÊ1j3@º¼rŒz .¯£¤Ë+ǨÇéòÊ1›­ÇôÎÎÜÀ>Yþ{בL0Ö¤\ç9ñº‰ý_Ÿ]dÕ›µ|Ž©òJ$ߌ^çyÒoé&Î ä&‹³¦ÎuûQJ?Ôoªê]Á Xj_FÀ`7ŠÌ1“‚BüjÒ£M“MÊ`Ûr绺Y3½>»Ô9Çtrjýq»MSÍÝþU!û½Ý–5{¤È¥3Tè‡Î,û»2“ê+íSK 3°U¹ÔcòÑ^ÓH/´H0°¹Ôc&é j‰Ÿ`Šÿuô[ÜíŇÒI3OÊÌÀ¦d‘c&ýŒoÊ­;co#ù#ezänâ ìÌò9Æ5•€yòãúJ@º¼rŒÚ .¯3»£(¯3»£(¯£¤Ë+ÇìA=&r '`³òÊ1[­Ç¯ß”(eÙÄf‡®$5£K³—€ý°üïÇ´m»³ÎU©G—MoÐoåÀFP=¦¯¹´us7½FÒž­ÓÎÔÖúMõ–pÖ¬è@é«Ó×WÚU–`ÅeÒ…“:­Mm*Ø™È8L{Uú·Ñ”4‚—C*4sÖÖ/4M5w›ŠN;¬(·@Ü^Õc†þmÄ ñËCî˜Z ŒÚ«zÌ¦ì¾ R—d‚ÙEI†ìU=fíFñ<ÑŒM‰$Œø_ÛúêÓèšf•ÖÕcúï÷ýIía+Á?µÿÚ™Ø{\¤3½ÓZ¤3Á9‡z "¯³¿ç ìL^9&“ñ1@òÊ1ê1@º¼rŒz .¯£¤Ë+ǨÇéòÊ1¥×cüfìR^9f«õ˜à%£õ¯e=uñuÖ>{½°ßë÷|ãW´N7cY?Xw@õ˜¾æ*ÓÍÝÄzI³àÐ"£´gê@°}Á€ÆaÕcúšÂL»B“^­ .\|ôzIÁ"S€½ªÇ ýÛhÊÁë •C&õd(õ¯—ÔñWßN jIDATuÚaE¹ÒíU=fèßF¼˜Ñ¿R㌞Ôeö²3–€ƒµWõ˜MY³"ÒÔZRf f%H±Wõ˜u´ÃG<[¤TMú¥M†N<®¢™G媃ªÇôßûû'’ÚCX‚j¶mÏ94¥¿øÐ<ýçê! ¼rLé¿ç ìR^9&“ñ1@òÊ1ê1@º¼ÆùÏK$ño<ýÔ*Þ™s–îl…z Pª¼rŒñ1@º¼rÌþÕcΞ¿8:˜'¯³ÕzÌÙó›ÿ›š3¥©Äµ´›Z'âˆG ¼Æùn»sýÚÕúÆÙó›ÛóŒ6•Þþš=€ƒu@õ˜ ~!¤3%±LÒi¡êHÒ+.ý¦†zìùhû°7«ÓÑ.¥Ô·ûÅ•¡bI“Rª)MmªßÏ*TR×àÐìU=fèßFSȼåމ©ï^¿vµþoýHÓTs·©è´ÃŠr tìU=fè߯hÅ¢ž¡Ž ‰…™ÝPk€¾=©ÇlÖâ¡!x†«¦$=©ÇÌÓ>+Ô®Ä4w›ú‘bhÎÑõµÿ4ôÕ§Ñ14‘®À¾Ê+Ç̾¾RŠ”oG÷çIÿNu°©ö¨—ô^v¬}wt°¯ò:¯”íÏòÊ+Çd2>(B^9F=HwãcΜ»°ñ6€Å©Ç¥Ê+ǤË+ÇìA=fµZN6bùñ1‘L$Ö´ÃÁÉÉÉèZV«UÊlë¬.}ÖÖì¬åsL5W"ùf‘7þfCkO1R lD9¦‘òœ§=±¹Ý”=Úw#ªN«#UB(鯱ӱI§“Rú–Ò+8(yå˜ êÇ`A¥¹Ý„†Îvƒv×Þ 4MTj7•Ò·`¯àå2ÎwµZÕïîÍZ}viÞ÷˜6;ÀöäÔúÍÆ›ZZs-°÷r©Ç UAê¡33¾ÇÔ?—Tвz Ê¥“nRE¤èL $q¹Ôcj‰±£e‚çh:cPÚxƒ#TF 5˜ÒÃ`;é}›Ñ[8Yä˜Ã_úïèC£zƒS†fîßjmhž¡Ò›Ý4 ¶|ŽÙƒßðQÞø˜C£Cä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(•”JŽJ%Ç¥ºeép¸Ž—îe“cX̽o»gé.£Ë?‘8§óJ@©ä TÎ+±˜ô²!É1,Æø‚ŒöŸ”JŽJ%Ç@ª³ç/ž=qé^ð<ã|ÉH'%\¿vu©ž$ª;Üîg Û#Ç‹ýH¥÷ ,r ¹kiê”Ð/Û4SgHl¶?gboÛk]/³CÖšXÐí‰3f¨§Ä—êw`ªxkFÛ¬I=†µ`†_6EŽáµÇâì>U8°)Î+¥R!õØØþP•öÄMU2úëZgÎôî·1¡¿„É1d$ø¦ÞŸØž¼=:üf'õmFkLå¼P*9(•”JŽJ%Ç¥’c€RÉ1ì§ÄŸ‡)Kg‹ÖÙÀuöÏR;6}½ý9s>rîäOŽ!#õ›ëúo±CWŽÜK36°½¶·–ÙÖÌgìɼխه½?ba³ü¹¨ß\×l$þëv{iï7p{C¾‚¿ßß¿@{J†š+Av¦Ä›ŠOïÿ)r7x)ÊÎôH Áy‚ê LÜW ÚŠö~KY$²®bg]ÁÖÚ]íì‡öR‘]7ÚÔP¯‚=ßȾJ\¼¿½ÁýÐï*ì%9†\´_|û¿îy½N¹šAú‚ý• ¶YõÞ§G¦tÖ2°ó’öÕè6ö»\dÍu¥<Sš È®‹w82OdÊh?SöÕèâC=LlöCFR^y78:5ò6o3lu]³Ÿñ¶·þ øc±ñwâN‡‡j›]éfI'PÉ1gökwðÿ¤À.߯¶½®]¾Ï­³®È¹¤ímBJË‚äÏ÷•(ÕF 3òFUD…i©Ç"8¾jhž¢íÇV@‡z ¹HÚCUÓןmh©ÎÉH#‰«Žˆ¬kÒ<£ NÚ3ñÙ†ÆsŒŽ)®†²¡&5ïÕ¤Ϙ§3x¨™8ãˆ/>uKaï­®_»zæÜ…O?5:ëåÇŸ¸råÊ“O>¹ƒnQ®O?•rD]~ü‰{ßvO|ã÷€˜!å=¢Ž%Î+¥’cÈ—Ïñ{Àƒl•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(•”JŽJ%Ç¥’c€RÉ1@©ä Tr P*9(Õ-“æ~ìÑGn<ýÔ–º0É„stt´½~p€.?þÄÒ] lrŒJ °GGG‰©cÚy%Øå=Ö'ǰ å=ÖçûJ@©ä Tr P*9(•”JŽJ%Ç¥òû1ûììù‹Kwa»®_»Ú™ræÜ…Ez²—.]zìÑG:p“r Àž;99Yº [qéÒ¥+W®ÿ´¯¿´¹,ÝnrMŽØû÷&çB³ÔŒJ%Ç¥’c€RÉ1° {üݱ‡+ç À|Í{sóýç³ç/o—¥9 Ý„ÙêPrïÛî™´Ô™sN.Ç]å¾÷°cñÈRîTnÏ7h©\2•xgTç ¹~íêÞTb‚=ïTž‚›¡y Ú—âÞ·ÝsæÜ…ãããº$Ó>g44¥½lÿöVÉ1@ÀÉÉÉjµ*èÅ—¬”b"ú­3¥³Õ妺¦ÓÜ8::ªÿÔ„›þ”βծ*:r &Ê@ÛŒQºû4°·NêzLʽo»§Ž5;+ÆTr !Ê0O¿8QºNq%q©âö@GŽë»ZK¢:Öìlxï]1'''ûô™’ ªÃJs78\f‰~­k=/hWµTÓ¯@Ù”d¶Ó»õ`„ª CÚoùý#¤ÜªL'Ê\¿v5%ÜtöF|çä¬_Gi*4M@éOiÛåwä`œ(Ã`|‰üµñíª632O°ÍÜtBIs·Õ[¦œÎ”ÝM©!ÇID8:Js·__šsÇ?Ìñÿn- ÊNÖIEND®B`‚vlfeat/docsrc/images/lenc.jpg0000644000175000017500000003777612237004736015142 0ustar dimadimaÿØÿàJFIFHHÿá€ExifMM*JR(‡iZHH ¨ áÿÛC      ÿÛC  ÿÀá¨"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ãmãYÚpg>•öÂÿþÄ×H<¶¸å'®~Sé_hö§PÕ­ ˆŸßH± w$ô¯¿~5Ø/‚¿b»›p<¿²iE›Ø”5üýáVOWþʲõì@x‹‰ä£OŸÄ~3þÄ·ßnÿ‚hWYÊÉâ >£$ ýÒÔ|,ž.ѯ´ë– Ü7¦s_‚ßðOû“?íÍá)üÒë øÆ¿~4k•ŠéþÑ÷Xšþ’âHëB ~U§Èü‚†!Ðn¤~$Õ•µø%½™º”Ç­LªûŸžq“Æ?Zù×ö•ýžôÿ†~"þËðàº} }Ñû[þÒvŸ |8ÖZ;¤šÅÌ{aUl˜‰èÇ·~•ðŕޥñÅ!¯u+ç;ß©,O'ž•øqSÂOê8z­YÛ½Ïêÿ êçy…Ìñ´#­šè‘«û/~Ý—³(—Â>&±ŸS°÷±4gYlç?øíIñ×ãÍ×íg®»‰ì,ôÎ`ˆœÜsúW/ûF|?¼emm¨”{››Hçfã#Û­u_³GÀÛ߉ÿüA­èG}ÅŒ®†…±ƒßèkîsÎÎ_ÓÌ\¯4®×_¸þñĺ¹‡×Âä“iFúívuÿ³_ìé üJ3ØëZ¤Þ‡Úˆ[–í_@x{þ í¡éÚ¥­Ä—“Èmˆ`¡"¾[Ò5mCÁž%ŽóJWµ¼·pCW¸#ßkî/Ù»ö…´ø±áÈRr±ê“FO$Žãò¯Ë¸3û/3_VÄÓJ´z¾¬û>ñ³ˆ1”žŠqq\¶kNç£Yé«£i+ áR(¶;ã¥~K~Ô`·Æß³žeüˆO\ô¯×{Ä7NGqžx¯ÉoÚ£N’ÛãW‰EÂ)¨ËÁ럗¿¯ü+J8Š‹Ùmò?ñúR¯—áêÔw^Ѷö½Öÿ¡æ©%ÅúÁn^æe !\“ŸaÚ¾…ý™¿`Mwâ¬ÑÞøÕOÒ7ÿ¦¯è:û~µÙþþøi¦øjÛĵ; µ’ç÷W³8?_Ò¾¹±ý¡¼aj°éÚæ“qŽgPùÅ}ñMl;–FWî“>3‚<>Ëñ1§Îñ1’vq‡2×µõзðà'‡þé1[øbÆ4tPF;s]Ìp ¸p½{f¼ñ¿iÏGÞ ÒÃwÍÒÿþÔÞPwx“J\ÿÓÊšü—‡Ìq³ç¯7èÏèœ&a•` £J¤#ÒÉ«/Äô5 íáW¾*T%”dçð®;Áß¼/ã]E­<1­i÷³‘“sl}+kÅ^6Ó¼bn¼Iw °™d" ôäñ\sÃÕU'ÌöVÕüNŽ6…jN´*'»º²õf¼Ñ_”pyÇJç¼aà›i³[xЏŠTÚVDjÂoÚcÁl §ˆ´Â´­W›ö”ði#wˆt¾éåƺi`1”fªBR^Lâžg–b`ã:Д_Necå¯Úkþ ¯Ã\jߤÎN÷´uÌlÙZ+ê ?hoHFÏi„úý¥qøóE}¶ ‹s¼5KÙÊVëf~o™p 㫺ñ«9n¢Õ¯Üüõýž<8þ/øÅ Xª–I.ö`kî/ÛÒCcû!ø¸©Ûäé²,cà.+âÙ¯â3|4øÓ¡jMl×+Á^58ëVÚ—ƒü-ak}h $¡à}kÕ"¶wµ‹çskö\çÚq—Â’¶›Ÿ›EòUR§Þîûh|)ûHü6ñŸÅÏíô–ùï¥ßo ƒÏÛýkèoÙöZO‡zLߊbI5{…Ü¡€!½Æ}LÖe‰µ{X¥š6>[:çoNõ®Î‰@«€ã§¯Êrî Ãá1Õ1•Ÿ2½Õ÷?XμPÆfYU,³ M$Ôšê~yÁKtVŸã,)!¢±I8*7 ð;t¯Uÿ‚Véa| â¸_žköR:‡#Ô|Ú¿û|é^´×´ Ÿç /PÄ.®!k©&uÆ"‚Ü`<§xÆòÇ~܇€µ[áÖ‰§ésùšmž¸Íol‚EŠw™Ksr‰‘¹NÅ8\õäWî¸þ0ÂÖÉ–[>d¬û3ùk-ðú½#©¹Þè÷ÚÌôÚïöz³´µï CŒOo¸)|nÁèÏ×B“„l‚{ç'ïø(¾‡g禧§iº«›·ó's|Œ(È Œ ã5ú}àôö¿CðÊßGy­cŒü/úž#uá[è¤u6WAä4-‘ùÕcáËð¿-•Ñ#Ò_¢ jï„ÿ4‹yn-tÝáœÅ=µÒ«(qÁÚþzŸJõ·Ã¿]4>M íÓ––QëCý+¹x­NZý_ñ_©Âþõ—üÆä¿ðOÏÏØ#GÕ!ý¦tVKK¸× ´eW{WÖðU6êûöyhô”¸’4¼‰#Rwc·ãšú@ø{¡è×qÜhze´äd2 V­=oC³ñFšÐkPGx6RšžGÜ)¢©x£‡kÞÃ;üˆ~b6XßÃþ ù…ðÏÇÑøÇÖz•ÕªÝÈM„g†#šýð‰¯.âµQ4ZMõ¼r <áÈÒ.›IÕ¶Àb,b2™Q€ã Ì1ß¿¥pKgª=„ó=ïþ “ü]ŸNÐ<6,Ž­¥o½ÛÊ5ŸÈ7!= »y@‘ýÞ£¾Q×?isÀ·>V¯9¸×,%kešgó>ÊÁƒ®ÁýÓÎÈ<òqÇ+?í—áoXþÓñu¬³Îö’ZÞÂ׬ΠÁŽx%(A •ÁÏËÓü÷ªüZ¸ñ¿Šî%K™e‰d2yL¬àd.d qÔc·Zä®ÝV¤™ÓMÆšä‘ôŠ~=øßƾ%¾'Ô†£mic¥B–Ác±˜t8ŒñÅex7S:—Œ?¶.‚ù°‰'€+nyî1µ]Žà9tükÁ¼wâcÂO¤ŸÚD\!w±>NHÈÂ{uü;×¢ü-Ô®$¼ŽçYnTÞ#v#ã゙‚³ªú\Ö _Mާ\ø€º ²A iŸL#Mºì01Æd9lúC^c¡|L¸ñTöqë–ñYÌe3KäËÄç£'®/âçÄI¡ñ ô:Dê±´¥Ùƒ$nÜžJžr=…Yðü=áÝ,¶§Üê2){‰3—û«žƒÓñ¬ã «•)ÙØö/êzBø[LÑô g‘æÍÅüÁJÈÌÀ©ˆqœ`ç=8⼗⥊å¶ðµ¢éãV¸Ž8¡ŒÝÅ@_êväýkgKñý–¥¥,¶Q[ÚÝË"ýœÆÌòùáýÇêkT×5˛ˆðì:ƒ=êk¬<´õçsЏÆÌ¯øo¯xŸÂ¿´Ûx_Q¹žÆîÔÝ^E$Ÿº‰òr™îÜŒï£æ÷[8ªa,®‘úßÂP»Ú¬[dŒ×9 |CÒ•Éj~µµ˜Üj×öªb—r$r(/¡Éæ¦Õ~'jëök=1œ·‘²áñ¸H¤’WŽç8ü+_‡÷ŸúMí£¬JÛ–22U­U¹t gª4t ÉüAâ+‰|;ûŸ²ŒÆA,z޽ wþø…¬ÛYÉ‹mšðDÞ\O‚7aì3Û޹υ~ ¼×5o'GWÈýâž…=øëô¯J¼øe¦ØêV··3M„3ÉÛ1/ì3ùV*(ÊÆ°ÃÎjñ9Ï|GÒmmÁÖÿ´ÕQyŽko¾}7Ï×Þ¸3âvñ?ˆ~Ñm %¦à©r@õ¯}Ôô{-~ÌŨZ-ÒH# ˜(ÈŠá>!~Ï–1ªøvyÊH÷x8CÜcñF´eî¶9aªCScOñ¼°iözxÁ “ÉPX­zŸÂ/éºV«q©Ã,Iu䲩–´¸!ãŒú׈éö1Ih·6³2°ÆÕ\ǾsøV•–¡­¬-•Öl§‘8!ÀY#=:fµqQÛqFwVgÙ¿ðN¿Œ~(‘õÏèrn³¼ˆÌß½H•ˆ/´œåË/ž:Wé·ÂM"9<-g4úMµ”â4 ³Ÿ3åÎxõ?~bÁ=`Ò|ºËÜÛÜÞëú¤ñÚÚÙÛ‚eòÁ ¾l¸ü«ôËàÇÃÝCÃ^ÒN­ª^\É ²C2·D rº‘ŠôpNz_QbjB•êÎÅ7³i­|=ku Ñun¤äâ'aI휟ʊô«¿ƒöW–÷Âì7Ú¯î>Ð'#æˆöPŠúIã0íE5ªÜøXàqRjZ\üˆ·ºß *(Á”ÎE}Lÿ´Ž­àŸÙ>Û[ð,ðE¬]]E¦,î¢Al‚pH®á׎y¯•b¹J„>há Ÿ›9ì;ZÄøññPÐ|þеÛ˵{e‘RH—ì“©b!ꯕúšþ{ðú½JX™¨ìAñÅ(TÃC™loü`ý™¼MûJøCÆ:׆|[&µªéGËG¿…B^F?š„¶cÝ“€ —µ|Ïà__xFÞm'R¸¼yaWŠX¥˜Ê …$ä0§úWwañËǺ…á𬺄¦èöqÙÀ–;c3¢÷S¸ç¾yâ¼÷ÇÔô}2[¹m[»¬‚”r?3cœ7¿TFÖ§åðVé¡CÄóCâèaÔRg´ŠÆ@'ˆœ,€®C #ó®:ïÇí’,£o><ëÎTÇÖ¦ñjêš/‡#°šÒâ)Ý„‡z†^{b©i6öz‡d}B&ŸRr] ž¸•M;½Xç«/Ûjúdˆ›ä’Ò@øc÷íø tÚÌöúÕ®¥Šø·Û´rñÔWh^Õ–{Û½FD´ûFv#æÎq‘ž?Z[ÝxVĤ·ĪÊÇ’¬ÃÁéÜÕÊ“›ºdóEnjÅVúDp^ßCi…yfb‡{w¯(øñxŽÊïSÒOÉlñ Ã nrÙÿÐEyv¿ñ/Qñ1ê·;Â7ã§A]¿†µ gøo™"åî¦ódnrOaÏ\sNXgMsHžu'dz'£’Î;X55ŠE•T,«ØžÆ¾€Ò>E.iVÎ~ekG]û&§£ÛÙêÑÆÅ¯PÆG'åvGÆ:Žåî+Í­S\ÿ„ÂãTÑ-Zyî~_.Xø˜xôÚ+ÙþüñN¿­ãØ TŠ2°B „üÌß÷Ñý+Î­Š³»zž® ­’Ðí> x#N[뉵ÛS0ÜÁ±EÇàf|Oð .Öf³†8–xÉ”“ÆOÝzö9>Ùê±Áÿ6ÓG‚Ñp÷Í>çáÕµŒ.-"o,!2>óÐÿ:âúD{1Ëá(ZHø?Æ^ ŸÂwm’V/3SÓð®G@’âÿYò¯˜ˬ²!v šú›âçp]äeÜìH,3ŸLzU/Ù×öj‡öøt{€±Úéš{Ï3gŽBàËÅêO@H÷°˜¯nÑòù–_Å~ÍÞ7ñÇÀ­MïÝã·\ô¯×Ù;â–·ñk¬QÛ2òÖrw¹e$œ|׿¿ìëð—YÑü3~–·öÞ½2è—`'˜†y#+Ë ò±ù—§MÞǧ_±÷€¤øiðîÓH»·6‚ÊÒÝ<¶9em™`Hãï8ãŠúŒ¢ÝÏ‘Ìï.Vz°ùã;Ô.9àçT“¦Ä8ïEnœSwFpбø›,>B– ’N2`úd Ô_~ê*ø} K¡ZLº—ÚãµÓ.™Õl¥Ü¤´2“÷ œáÛØyæ§ž`bmçåd~uè_n¯aý‘¼)cáK¾Õ<ãy‹ï–1Þ2ÎdàöØOšüK"㈙û/?ÜDø'Æ~%ðVë/ˆK&—«Û\=¸Éí¤l‡k/ÍÃdçð¬/ü]Ô%Ó„må¡yÇÎÝ0~õIñOW½Ñõk»?B©q¥Ìöì‹`ÇrI'i8ÏOBkÊüã©5¤[m(ÞR@ÈSÀïÍ~©s»•ÎvVC¼Añ UÕn–v/ ÛÛpN3õ¨¼¯I \Jú„RÝÎô„í>ÕÏéú4÷zöÑ3¬ˆ·Õ«âÝ}®<¿ì˜%ŒE€Ä.õ$ôí]JšZ#™Õå²d~&ø‰ªj× ƒ`“å#«îk7V×§Ô£5-°YB»#‡ø½iþ[½KZnRD2KË9,}ÉÍtº¯‚ßâ?‹¥ºÒpiöJ±F1´JGVçéMÊ4•ÚËšG3§øVÞîÛ,ŽÌØåTC]o‚¼&¶w‘™éœD’\ûvþµÝXx>ÓCÒb¶ù®ÀÈ;šìþü&k­n{_˜ãg™ƒ×Óô¯>¾54õ=:?i%cÖ?fŸ‡ö%½ŽK‰Ø+¯Ê§ž=ëëO |#Ó¼Mj’j–Ö䀣?r¿~ Jµ{ý͹r00{“Óa —òtÿ:øÌf"U%h³ï08Xч¼µ3ô¯ƒZ…ûÄÓà.6 Öí¶‘lKG€¥8¥5¯Þâ#† ÛæãùÔšNŸu<Ø€™ˆK9Î1\rS“×Vu«%t2ÿJÛ©µUl(ç‘XÄÆl8ðØÉÅzId·¿’ž,8eϨ¬íSÃV÷0¸ ‘Ÿ”ƒKÙÎ.í5”–Œùã‹qª[È–j‰;[©Ç•Aû=x#Ä·´'á2Éi©ëdØ=Ña¾Þ)„®ƒ<°§êÞ6ð@‚ù²n3Åu±7‡ÄµGƒä™Ž+Æç8aû·éùW©€­ìêEw9³ q• Í­O ~~˒ǧhd6ѯãÔä{†´ÞÏBW±ÎòOC¸zWÑb â&à“׿ùþ•¦#3(gÜ} 9$TÖ Ç•<Šý0䊱ù jÏè:Î3+|î=hª .Ò9$÷¢·„T•Ù“Œ¤ïsñby•i9ˆ0-ê=ëÖþ9]éŸ ?eÏø²Kûä×­&Z¡“(x‘CBùŠqî+ÇurÂXÆC)×?ç5wöîmOUðÇ„ô¶Ao§ÛøbKë)%;Rv ¥Âç¸Ú8ëÍ~3Àɺó}ÙxÖ¹ŠGç×ÅïÍ©x‡R2»Í4¬YËe‰f$“ž™$“øÔÞð宓à;…¼1.©*¬¨Ä|ʼÿ>?*ÉŠÌj×öój¦@U‰`Þ~0·¿J¥â—»:ôªÎWåŽq× ü?­~¡Hüº÷Ôw‡¥KKÛ™uXdSp˜Vîã9kîßÚƒàF™£|-³·K[m'lEšMe”œÁ‡QœñÔ~5ñŒ¼#ªxÒòÝ>Ó=Æ›mº8ÜŒ3Œ‚'§¥y|±n£÷Oo7É©ÑmSBÉc¨£Zù·("ݵ´¾ý¶5‡zÿŸqáä’ÝU±8ÁéÞ»_…³ž¡«_Æ÷6Î’òþDWÕ¿d_ ëºp¶×´‹I‘†Òd—Ï¡=+IfXZ_nyøl®½_†Vg–xþ m¤éðÅâjŒˆÍ¥Ägóñ^£áø,¿ÁÿŸ/ÄQø§EÝË™m¡úÇœTŸ?àŒþ ñ•³\ø@>•u·‚òŒûµóGÅoø$/‰¼®þÔâó·r)þG?¥d§”båïÅŲ†qƒ^ì”—â}Ùð·öþøãWóâ#+Ø6îç·ÞºþÙþuh~x†ÄÛ‹s–´•Ì=¹ŽüZütñoì{ãoùÆ÷LQ( ˜¥ù¿&PGáXß ü'%¿ÅMñé¾Ò4Û«èmîN払K€FáÁÎk£û(¹Q©™Ê³œÂ2µJvù¡Ÿ¾7j—w—ºŸ†¯¯.-¬¶­ÁŠBë?ÝÞýqÆO¯¡®GFý¼¼Màù$‰î⃺å[hɉîå\¯íûªÍák À_ ,ìtM*þ÷Ÿ`˜´×æLm#½Äƒ‘ÇÎkƒø ÝéRǦÞâ ¥ ‰l•nýIæ±§ƒ¥ rüJ†>µj¾Í/¸ûÃàïí2>)hŸkÕ"ŽÛó|Ùç¥zÿÀ_ˆöžø« ^É4²ê0¢–`3½Â~¾e|wâ;Ÿ‚ºmαáË –æeŒ`È—!²8^Ç¿ó«?³ígâߌžñÄO\x{Eðþ­o;G%¤· º¶ð$ŠWa¸(ÇÐ×-»Ú×Uc·cØÅ楇• +ÊÇô4×±ìvF@…˜¡$W=j”ó™‰ÞðH=Ðú×Ã~+ÿ‚ÈZ|:ðýˆî›Bñï†&—„ú%½î`âÖè2ÌAcòo'Ž3šûvÖñotËiâI¢Žê5¸T”é½Ca€È ÈÈNõöÑ’i#ó AÇtG2*œŽ´Q8$(ª&çâv¤ÙRÈpSæç#Ç&¾Ðøëû"EûUþÄ:n¢Eñ–œ’érJÊ¿62Ðï$c~ëŽ+âÙ%I¥ yÌWêŸìùjOÂ-!›·†ã¡÷¯Èü><«#õN:©ì£KÌþoü]ðoÄ¿|~Þø«¦êZ&±¦,‘]AuDq>[ÆÇïn\ž ÏÆx·Y–åäHÝê<fóþƒ~ûÿÁhg™¾)~ÈZ†±áÝ* íwÃÓÅ|&†{“l¼Áæ1ùrH>œWóßâ )õ=Jsg#*€Ï‰r8>Øâ¿M²ŒìÏΚЗúé×í6¿å.W̑؆ÈÁÆÏzú÷þ !ñ:ÇVñçŒ|+®•ÚºG¨Ø`ã÷ÑîUå_Ý£Y[¬:–I§UXØœçú~Ué_²V­sðóâö‘{§?•yk8tlõö8ìk Æ’Äagzü?ŒúŽ:œžÇéwí¿à‹ßŠw‡fÐ&L·‰£ºR6˜HaÙé‘ë^ð“áN…®üfÐ<=¬Ü‘eyxVêuq¶1°íÁéÉÏå_T|.״Ϛ܅¶«g¡ÝI´_Y]ªÉþ¬ªÄÐñï]?Ƈ>ñ„~tÚU¶-˜òâÔt‹o.V`GÌÈ3œã©¯†§Qч³{#õœj¥ŠµHõ2,¿g­7C²Ž D’ɹI–ãŽqëÒº xz=!¼˜ÒhñÎsžµàïý¶Þ{[h® &8MÀÛ$ˆ£ˆè=±§ëòÈòý†*¤«·c\×¾§˜è(JèõK}Q!² 3FXtÇõ©$‚ßT¶ýêÆç·þuç¶šÄÒ„%•É@\€y5zËÇCOœÇ,L èAÇO­4äæÔÃø›ðÃÅo$Ÿg !8 ýUó‡Åߨê ë‰<‹îdGÏÍ1‰AÁáNHÏ+ë3ãÈoVI½sZ‘Åay¤¼š¤K‚Ù]øù½ëzuçF܌ʥrÒQ?1ü8Ñô7ž÷]Դئcº0"Ž¸ÊžAçœâ¾¿ñ¥½¬2´–« tF“‡çÇb89ÍxoŒ/4[Åh÷)e=Ýã„p-T*!êIîzW|1“Ÿ»7±Œ2ÊPn¤›:¯€ t:Óoî- ¼Ñ<: ¹ ì¼» ¨UœžÇpÆqOø«ÿ=0µÖ¼Eû:øæ×ó\]µßöF§jÞEºHáÙVâ6 ,3‚zb¾˜ø ðâÇÀ¾Óm£ðZª+ã©sÔ“ß ®ÿÇ> ·øƒáÛ½R¹Ô­,.ÕVâ}2ᡘ e'ù[Œðsô5Ó‡ÄÊ59–‰œŽ] ÔœcñG>§æçì»û0ê¾!ý§þü0ñÝÊ^Jšj×öQÃm™¤Š.ɱ®;ãúŠý}ý“¿áJk­Îé@e™xäª÷5ùmñÞÃ캴ºjÆ$¾YH•†üŽN@xé_°äø‰U£ ’w? Î(Bž&p‚±á6Þ^±ckÒ¨žü«CMñ/ü#þ,´¹¶WGWÈ ðÆ>¹ÍXÔ<%¬½·(ä™\’8ÇãTmâƒ^ÔV8Q–VeU$ŒÍ{Ó¨ªE«hyïJ¤{÷>öð oã/ØßÙÊÐÝC+ÄpÀãÿ­ZºíEão…º‚Ûx†õ{@ÁrÀ{úÖwì{fòøJÒÖuÞÑ€¤–^ÛâO‚¶Úü"O³‘¸u¯Äò)¸³ôŒiû8ê]ðŤøÂ«öìù<£# }±]U©º”º)ŒÚÃ=Ooë\w< ÿ=Ç”€ì?6:c5ßiÐ-Ä¡§pœl×›S•iŽ×Vû—<>á¶ôÝ3ö«ðî§ÿÄãA×v°ÿY-±UQøŠõ)ÑæŠ’.3u=Ël]Òÿà¡Þ7ðV”¶ú®–× ªã˜“ëçØ×©~Îµ×ÆŠzŒÁ^ñ&¥ku#ˆvXLð3Wh]€»$¶2§Ò¾Õ~!ø?Å—R^ÛBÖ"3<ä.Fa>¤ß“_o~ÂßµŒü]á«)£øG¼ Ù%–¥Xî‹l(ïd`2ÒJåÝËq“ÇzÑ•89Õºg6"¾&Ÿ¹M-WSìO…:7Ž<1ð÷G·ñU¬ê0[¸òcbrUˆ=Fq]­§üE§‚.4¸äÙÁA#õ¯?ðíYç¢Â]jðyl»ÝvzŒñר®ûÀ<5âIoyªÜI©Û_½¸.Ê»”`ñ뾇 ›Rª”SÑ™æYF"çšÕ¾‚]|GÔæ;§Ò.A=õÿ+±±·Óµ Ío+ˆ 0ç4WL³ÞŒá–[$õGâ c8,ÝjÄ6p9 c4ÉåieR×kû?|¹øéñ -O•aUS,’’>EZü"•)W”a ÏÝ1U¡‡„ªOcé?ø'>¯§§„¯`Öä@¦ä¾ÃŒž?|õÿ3ÿ‚uÚøƒ_>5øWw¦[Øé3I©_Ç)Ù(Rb¿ÞÇî û%j_ äÔ—ÃÚä–P”“IÄbVÎÞO<Õß þÍ*ñŽ…w¥üGñÖ•}eqe$7hÅA(ݹ<ã¦kôŒ©ÏF4êhÑùfdÖ;)ÐW¿mOÇOŒɸ»[2ÇnÕ=ò6Œâ¸Ï„žmÆÃûÁœúvþµôwíÇû"x‹ö]ø…o±-ž¥¥k÷ ›{nà«/÷Ÿ”€G\gšç¿g†ßgø©sÄkº»‹‡“ýz×¾ñ)ÒsLæúœ½´`ã©ô×ì§ ¾†¡'˜ÓŒž½úWÖ³Š}3!IÊóþÕâÿü&’ð±òÚ7ü£¥{…Ï›Ÿ`ùZõUVåsìagÆöIi.è”3mÆ:ú뜋Ä^D{'Œ•n¼×¡xÛBûu™urGÊǵx¯Œ._B2+ïV\îbr¦+ iMØÙhÍSĈª±Û×¹}GÇ.&)æà޵ÁëŸÞËyšPë\•÷Ę®&"6Áo¼s]¾ÆÛ«%-Ï]‡ÆäO´JX“Î ]ÔBºGQ×ëÚ°£‹©NV¾‡}*ª›wGÄמ!Ó֛đËô3¢ÍÑá¢;1´{5úÎOÚküųÎî~éüs_|x¼Ô,®4Û&Õ!ŽIUîQI`1È'ŽI®|Wî¨òSWô=Œ§S‰RÄK^íßñ'Ð< -í#ØŠ¹QÐu««¡}šcå/N½±]·ö+ëD{;«YFÑ“ŠÀ~ âªëú+!.‹òàÃèkæÜ%Ñõ1©=ÌÝMþ„é"䎂¼Óâ?‚ ñŒ¯œu¯@»¿v2$–Ç_§­R½*ÖeYcp~ð?y}xëJ-ÅÝ6Œø³ã»½.Y »°ž};WŒkš]îŸ+sÀ8Å}Éñ3Â+ª$¹Œîlã8 ŽØ¯›~#øH®ßÊ.Ojô(WrјWÃòÝ£Ãgñ=í‚ùw`ç ç¥møgã ÆŽê"œ†ÇŽ Ç¥Kâï̪Ì9Àâ±¾þÏÞ.øçãû_ ü.°ú¥Ñ2l’aQÆ¿yÝÉà ­zŒ'£<Ê•'Es­ëÞý®$Ñü•Ô&@7À¶ {ÃßÛjÞ;X¾Ëuç)c”'vÑý+ƒÑàŠž?‘SþOøfÜ?%-Ä“`Ì£‘^Çð£þ‡á=$Cqñ3Æ>"Ôø­ìY ýJ’{t"‰`éMÙ-LáÄ*š´µ*ëßµ‡Þ[…¦ûdRAä+/›9t`W«)m¹ô=y¿„u -kà¨ð¯†m‹]ø›N{y¡•e»á×Ìc œŸLQ^ÕûW|"ø}ÿúýŸµŸü3Ó§¹ñ$?LºÔ.šæt–_”²$.ÔÞIPÝö¯Žÿg¯ÚŽý<=i¦øGÒâAmrT$ð¨NWwñrsÏ]Üô¢xW‡ŒlKš¬zšµ—C×?`F¸ð µÇ‡|K$bóKÝo) ±SÊz`¨Sø×ûM|RO‚?µ”z®§n÷Ýé«ÛÓfFCÁ®gÄ?Õ¼â]OžÕ짆îáem9«ºŸ-ž9Ž˜®‡Çº?í‹ðµn´·Xõ½/÷˜|û£ë·ô¬ãBÕeQìͨÕr£KâWüÈü{ãÍ/ö´ømy¡Úݽ¥Õ«››HòB—=zQ^C§x&ëÂÚŒé&K9ÑÎâ:Ã8úQ[*nEÙmMûËSÞf˜Å:o›w?Jú'ö?ðmÏŽ~ø¶çPÕ5[m3L…Ú ›fÙpÄÿ!_5^K†6y¾Ôý–´ÁàÿØ3Å:àGÔ ¥ûË‚3úšøŒ¥‰m=•ξ)šŽ–[6‘ñ'‰|IãkhîßÃÞ;ñLS+7–>בÁ ý¥>#&€‚÷ÆZÄÓDÅ]¤}Çʧ[¯µêª‘¶vù³îMs"ÑÛBÕ'xVrGô”±õq8Z³‹÷¢Ï®†J‹–I}öØèœƒé_øÄ—¾)¿{­b÷QÕndåî/n^frIãæû£ÓÒ½çã:;øí!ÁäU` ç×Ï×áK4(’DŠ00§ù××ð¼g[å;;Ÿ!ÅS†•4âüŠñëš–Å®©}fAos"ã鵆?Zìüû`üMø[j(<@ŒÇ| º’›ˆúß‘¯;‘á1 ܶ~G±„â,f[Þ>gî–â=âVŒ—ÞÖ4ÝVÍÓr=¬ë)#ßi¯2øƒá„S+R¤çv2?:üŸðGÅmáþ¤—¿õCG–20m܆?Q¬=°+é‡ðT½rÖÆ+_ŒÚ}¾¨#ùí¨Ù6=YOž?*ùÌG ÏÜ©JèúœÐÅ+W‹Oð=ãÅ~·t‘IV‚H­düý±åý‰5ýbãHÑ"ÕouèÄ7›åÉHIÂq»yÏÐW?¦~Ô¾ø£lfðÞ¨©q'Êa»"'ϧ8^ÞµãŸu±¯xÎàBé*B -ƒŒ÷Æ>‚°§B­%ûÈ´tV¯KZrº>·þ ±|ŒMÏÐlâ;Îp^G^~µtÁy] m‚nƒ¯¶Œc½~zIÏŒS£·Ç^3ÓÞ¶ŒÒwG—õ­Ï¦?nOø(?¶ö— ØÜéZ:-ËÍ–¸óMêÈ…ç^1áËË(nO“| 2:`gùW$¶ønX`:Ô¿cGŒ•Hò;ã‰×sѸhªHö«‹ /è©©Ë„)•Á#=1ùæ|§k?õ)€ê†BT»ž@ï½z×§j7ÚLÁôË©à%OFàžßÖ¶4ˆwÚ,‘®³ºåX’d¾õÛCц*Ò»GÑ?|/Š#‰µ¢@À·_˜óÏ4W1ðÇãm¥‹FñȸQXU§7+£Ñ†&œ•ÙÑÞÎUCdíÁéÏ·Oƾõñõ—ü*¿ø&V—mîæ¾[«æ¾ðí§öLjôËX0Ísu#¸9#ðí_vÁNõðOìÙàï¡UfHU€>йþuñÙö4«â_Ù…¾òxŽ¢ÄVÃá—Y¦~}O!G„ò •`[¿´%­ä fDR{zf¹ëɳ¹ ‹ÂŸÆ»oIo{ðN;Û¹‹—ÌÏúWG©b!RšÝÛò3ϪC :UdôŒµò>vøÕi.¡á+ˆlg†Þ}á•wdwÀÏÒ¼ãÃZ²†V¬¤œîB™é^¿ãŸ¯ˆoXF–?”rsô®o‡j:À½ñ\·!Ê[¬˜ߎ½«õLƒòü³–ÿðOÍx‡Ã9­¯¡ÇÝØÜZà º·GÞýÙ䯩B!dQW¢¸*AükGP×.á×ä°½[4ŽIξb éùçô¦ÞX¤Ów HŸÂsóW¹-Ï÷ÔÊ»ŠGb*¯®8?eÝfÝð!Énã*è&Ò^$Î1Çüò‘IZk²ÃþÔ·0ÿ´ƒäý:~5 s3Eq#/” ôña)LÊFt–û¿•t-£[ÞÆÒVp¸r?J«}¤ 8ÌŽ@ èGçAJvÐæõ‹Ö³‘#´v—ðçØÔþñö¨m®rIbr?ɸf¼¼gaÄ÷ì*àðýãYG<6w-Çloå¯ô=Ö®p§8rÍN¤ã+¦ÏTðïÄû-bÅŸPíBãs“»yöŸÿ]uöñ¡ äî*@`[¸5óêt÷¶Iãeemû ë†Æÿ€ž+ßü;¬[ëö‚]>EuÜ0AC‘ƒ_+›à£‡\ô–‡ÔåX¿jýœßÞ\[@Ï–à:³å+SâŒH@BàñùÔþFÑó ù—S[M z…©b0*Ü6y_Þ”õµ,Vû‰*8jìvŒÀ`p:ÖRªâa} i|3ò“´$÷Œ‘ùÑ]´UŽ´V]’ÜÕa‘îÞ øíá øÂÛU‚ÓWwÓæ@³+!S‘¼)#ò÷¯Mý¦?à£íE&–|{¢Mé¸-'hÁ–çîÖ¾ ›Ä’‚Dnvgå¨ÄsîûçšÞŽG(¿vgß×Ì0Τj:rŽ×NìúŠ_>E-‰¨»*ððàúôJá¾;|^³ñŸ…­4?X˦éQ±ópÎÒ9ÆN:μnÖúãS¸Ž ì2ç¥jÉpâw2¶ ª½Ï¸¯g!É!†©Î…ãÞ$…|Õ#J+›v‘Mb’ÚÖ#Ì–F;Ô½8J«zÖúc‰õY^FOâ-µAöÏZå¼Mã›»)^×ÃPIu!bHpªÝë ¼'¯3ÆLÃæ[x[äSîzzWÛZÚŽÙ>¥Û‰´/x¹®Qf»»ÎÓ;¥u'LŠkU8»ñŽEsV:eÆM&mÓoE_›>栗ĺž”§Ïä ö [—žO4ýžbÜ7O¡})áRnX2tÎ3ù†²føž²íMNœö"©ÿÂOçLN‰t$BFè%8'Ói`xÝùþ4Z Áw,$*ŒîQ÷ˆÁüsúWuÅ £øos£ø†Î &\zu HFØ7b“+6³×ššµÃ].£+[2HPI™Ü$FFG½t'JõS½Â{:Zð hMkâÍ:åâ{x'Y ÜÊ«žO={W·[üQÐîk½Ä/Ý$SòŸl øìó,9Âxx·è}nKšÂ¬góIù²äZWîß zŠ´,‚§¨>i¨G›IÒMýáŸþµ_K`ªFÞG­|•HÕ§&ªE§è}] S­iBI¯#)-þ\'^ôV’¦à¼zÑ\r¦x¼ŸêÓñ¦QE}ó= ŸÆ‰«áù ?ýsjÓ½ÿôÿ®TQ^Æ]ð£ò¾0þ;þ»•ÿ!iÿßjÒÓ¿ÕÿÀW°÷>=“ÿU{Ÿ¹/ÒŠ)¶<·Æ¿ñú~§úV›ÿéõ¢Šc:ŸÿÈ*÷Çô­=sþ<¢ÿ®áE€â®:þ5Õx3þ=ßþýh¢€4ãÿ†ÿyk\ÿ’‰qþêÑE2¥ð¯…~â¼)ž.ÿ‘œ}(¢°žæ4÷:/Çû}Wú×¶iñåÐÑE|go/ë¡ú|ÿ,¨¢Šø}Û?ÿÙvlfeat/docsrc/images/using-xcode-dylib.png0000644000175000017500000005106212236612215017527 0ustar dimadima‰PNG  IHDRæ®­æí ÿiCCPICC Profilex­—y4U]Ç÷]ó5d.™2ÏCæ9cÆRdÃu!¤™•™’¡%¢d(Sæ©D„L‘2FfïQÏZÏzÿxÖûÏ»×:wö>¿ýÛëœï>÷»~P’Ùp€'ÞÏÇD[ gqé2Žh`  X oçàKP52Ò‡Bþ¥mØÉ­a¡“\ÿôoÓ>ІÀ¡Z—?¬rÂöØì„¯ùü ×vpµs„8bA3uˆK!¦pùÃu'lÿ‡ßp€ƒËÉÚQÐÔxG7<Dß!Vrtòu€nŸìëèèëà q2Äžž^P~Šfˆù>ÐZŠEˆ¹NÞ ÔCí2”W¢Ê“ôÏ\”«&ï渡:híCîæ6M~¿+]¿¯³„øït025P“ÇÇ›«~Þ¬œrœfœîý>#>37›6§9·=ÿpÁì+òëóEû%ª¥æo„eÜòÀ÷›?ÄÌ­d®ê¯ÁÖj×ñ¼_6s^Ú¢ßÙÎøuy‡ugf·t°/{?è>L?²;9>þ[KÔ(ÑÌÉ9ÒFrIŠ ,U: 5mä©}z<Ós;ëY¶Ç8ŽXÎ=.gî^y¾B~Œ€§`¿°¸HŠèЏ–D¾ä¶´ŽLŽìÒYiù0…v%e•DÕub uÍëZOµçutuôõK † xMM5ÿz‘ÄBèÒùËxËD«'Wº­mQvöòñNÑÎy.5®ÝnSW7=ˆ<ñü^ò]o g__¿þ±©×r‹ƒ*‚Ÿ]¯ ©m {sãmxËÍ–[-o"›n7D½Œ®Ž©¼Sû0./>#!91&éFr@ŠÇ]‡{—R ÓÔÓe3„29³è²‰³sÖrgî¿Ïkϯ+(S_RìùЪDÿ‘|)S9¦|»bîñГ¦¿Wf?zæ[eó\¯Z¦†óù‹ÝÚÙº¾—u¯ ëã_û7X7j7‰4Ó7½YxÛÛò¼5«-¬Ý¡Cû@'Eçz×pwuOZ¯_Ÿi¿øvàû໡¢á0H}ÑÌÈôÇ£qc6Ÿ$ÆÑã£eŸƒ&u¦è§æ§«¾„ÍèÌÒÎNÎ=š',È,}m]ŒYÒÿ†ý6¸|÷»Éª}+±«š«Gk5ëW7Ø66à ÿü´±Í¿ÝÿË{‡z§rWwwn/x»_x yÐrh|8utõhë8ø·þ¸ BiŽrE‡¥cʈHFH—Éá´”¼X*cj{ÚèSYtô¯ºǘ¾2o³ÂÙHØépìÜœ§…¹D¹ÅxÄx…ùøÏðð³ Ðb÷„–…ÇE:D«ÄrÅoKxHšHIKÓKïÈŒÊÖÉ¥õ‘7TàWD)N*Õ)§¨¸©ª©1©m¨wijk™h󟃟û¤óL7VÏA_Þ€Öà‡aûù£ cS!S´é´ÙKóÔ ø‹ç,8-.\~jkåtEÑšÞzݦ˶È.Äþ‚ƒ°#‘ã”S­s¢‹³«¢­ÛòÕ·î™xO <#~Å«•éíé£âKë»èWïŸ`{M<8Tt]7„9ä{èë°„WÂ…ÃnößÊ DªÞ¦¾=Ucq‡ÿÎaì`\q|`‚~"GâvROraJÐ]£{|© u,­*=>Ã9S5‹%k'ûCγܤûžyzùü$ßô>)J*öyx¡äì#öRTérÙpy}EñãÄ'A9Ušé™ Ùròxò- ŠnJ9Ê2,36‰ IBµMíM½BãI³JëC»}*”M—LÏB_Á ÏÐËhÇø‹)‘™¹…ÅŽ°²i²-³ßÅÉã¾r¤qjpnŸ.ç²åfàæIæ=χå>“Åo' (°+øN([/¢!Ê*º+öQ¼V"[ò†”‹´±Œ¢¬ ÛYjyŒPØWÜUÚQÞS9RC©Sh0jòhIkŸ;g¥ãý«=Ôkðå<ò@Ó|³óý‹B¶—Ò/÷Y_Ñ´Ž´i·#¶?ïá8ã,ìêÚw•ÓýšG?ä~Q„y-ßrl@àµÙ £àæ‰ÐÒìáY·è#Òo3FåÇðÝ©ŽSÿ螌LypO5u>=!S.k)'÷¾Y>¶` 0­ØºDàÑaÙûŠÊ'I•¾Ï®<׫Qª•z)^/Ñp¶IëÍÅ|[\GeçXIŸú@äPß®‘ckW'7¿$ÌÉ.l/u}¾ú|£së×®øÁ­ßú#1 8 Ô €8P :ÀŒ& »‹4Ÿ‡¾x=ø-ø+øBშFì •ÑÈaE@µ Ðt7Q Ñ2Æ󒘛8•MBò“”@ºFæK¶KA¥x@)MÙ‡u£ÂPUPSïÑ”Ð^8E|ª‰.^’~ƒ¡š1I™Ãüž¥ˆÕM›•} 7Àñ˜3þ´'—1·,/ï.ß·3üƒ‚-BMÂM‹¶‰õˆHÌH®K#ddEåtϺÈG+”+ö+í¨œV5Q‹P¯ÕXÑ:£í|®D盞¨~°AûùSF.Æ ¦´f^æ½nI—~ZZYµY‹ÙäÛQÚ‡;ütrsžrµpt×÷èÄk{µ{kùtøéú÷]3  ¶½¾ê¶}‹&¢à¶HTcŒáÉ8B<1-™/åõ=ãÔ…ôë™Ø¬’…ÜÁ<—üÃw‹x‹_—=š+ ¨À<ÎúëLeÝ3­ª¡j«š¹Z÷ºÕWÞõë øÆÅf›7Ã-­ÏÚ™;n¾›éRéÎîYíSíOb¶|Ÿù¡ï#|TlìʧˆñGŸg'¦©¾pΈÍ*ÌiÎë-|5\Ô[Òþ¦²,û]èn…z¶º¾öy½sãùæýŸ‘[îÛF¿¤vXw‘»‹{=û•ɇ^G†Ç<'úÿ©—~×$ê^^>8}ußÃÿß§‡?TGýn'%™ÞÜê©¡‹:u^Àº| 3¨ ÍÿÔj'ñhÈÏr­O¨™§à¤û¯æçÕq¨{‚|Ü\\ýpªP¥ê$ˆÓÁ; âÄEEeÁš2 ¡ÕªKt pHYs  šœ IDATxí] \TÕþ?ÃÌÀ 0(  ¸€¢.`šKš ´¹”¢¢•KÅë¥þ+·JKS{Q¦V¯ÒW>—žZ‘½§f¢•Y‰f®™¨ ‚+ â²Í0Ìvgæÿ½÷Ì\†™ËÀè((sôs9÷œßïœßùÝïüîïžû;çŠÌf3©C$,¬Ccn^'¬vˆ´=µÍó-òµžŒGnÑ€0dmÁÇç3T¾ÜV ÁB[OÞ£›Ó€=dm¡Fó¶Gô!xJû¶å½9i<\ Ôªjå1g‹K»¼í)Z·c¡ýñ…µvï!ðhÀU TAÖ‹vyœò%ŽÚ%-wÌ»*‡Þ£ç°@–"¨‘çOižžêt:F£V« ƒ-eỡUü©'ãÑ€{5 ¢ D£Ž(¤Uô¨ÕjËÊÊL&“L&“ËåI•yv¯@žÖ<p® TÐQtÒ ÐÉCùÊÊJ£Ñ ‹‘aÆy»žZn“ªŒ%W;°¢%*•ÊÏÏBxÀz›®„§Ù:jÀ t¼5EÞ¯8…MÅQ¯×K¥RPÖ±]™G·IUVðØ¥–Hå€ëååUdQ8»ÇŽ+,,¤–þnhhh·nÝš6m wB$Õ4v(%éͱÃmÁ/K,‡…†Õ¥÷š¤ò”7L ˆ5 †OÀ(ò©´ Gœæçç·nÝZp  ÇBvvvFF†¯¯¯¿¿?Ž(„û[QQI†îÝ»ÇÄÄÀH ¢¶:»Üe—"Ò°ìj4Rwv¸.þþ~èc¨T«Á^kï‚#ò6d TYY@‡&Þ²òÀj‘jlêéÓ§Oœ8£Ö¢E‹àà`߸qãÚµkׯ_G,ttt4PëØe?yò$eoÞ¢y³à "ß(;øQUvtÍöÞ<8(’Ý(F×…× ³;Êã)ià`g h‚ Ö¬ÅÊâÂS°âèä©K©Tž;w.<<˜ƒ…£S h `3bp(…²FÀ~öìY€“ûÊ¥ ¬:|8»/´_ûùóç«z÷’0FÆd4KÄ’fÁÍü|ýÐ;%d·ÆsÚð5`±²v`Å©-^)dQ(8ž .s0¢0‡7îæ <@xBdAAAŽ-Ðrаì"°µ-È€<‘È ì-[¶tž››‹Þ-ìèÝÈh*µ¬üf~3ø Qv öî(§¤k ÊÊÚ¡–z¸@!RM#Ê,à ð¢ÄÈà - °I“&x8lÓg“··7}D¼Gî¹æaqÔÍ|€ÞÝGDMFb&ê¦òš‰TA`!È€lGvÛ’‹éc'èv–÷jAÈÕ»>ºãõ½ÖÞ¿BË0õqù¶lÙrüøñM›6%&&Ú Yk^@KÚã“ÂüÏÊÙÿ©¹³æ¼<°­¿µÀöoEúødíÎü^-ÜsÉl›¾•¼;µÁÉA-S±eVŸŸy­Ëþ37°¿Œ[N+â0±“ŽÈÛµW“~h¹1{j4–âßDaòònÖ¢ë+ß{‰œüç–LÔ\Þ·†Ždfê!Ê( „S´}.W:>eË5Üd˜² “‡¯ÉâFV‘5³ÿÌ .›·›òö?~øp7 œÊ`wt³6¸Ö;vìÈ«qüøñ#GŽäOQÇ_³ \k)DCŽˆô÷ó`kîKaYY!(=L=0\=¨ïÀà„…¿>³aŒŒ9·rÖ¦¾{–˜ö³€U•Ÿ¿iÕ¦·ßÉØÒ=HZðÛ{Ãgg•†œYߺ߂nùËÚ¯^É«/­îÄüµ²í£ËÇZóØk›:•ôø¦CS{…ûTïÆQດ høÔ©S”¡Æ.5)@Ìn¹€£Ö` QíÍ“÷_þÕ¡â!—ã†ÏZŸyuHàéI­}óÀù§"MRù8yÓÚÝ™¯ËÏ$÷NZÐyß²a¡%Ùûð`ǶlÔ_8uÁ%üÒcô¬wÒ2_ê«Øýù³c6–°·£ºŒÍu7kƒ€.¶¯zo¯¹|#!m‹Õ†–MysÇòÁ$sßצ·. øíÃCbÙöñJ:w8·Ÿî¨V›{<’Hþ¡A­Àåq2†:W¡awjƒlUˆßP € *82T« ….@ÖÉ@Æ@!öúã°j VJTëŠäCÆ=ˆª 7N•n)YúÑì×Þü˜oŸ‘w_6„|³mǹ?>{öë?¥ZbÙ+cÁ^R³ë}à?$qø3=ˆfÔØå¡¦üä×qÃæ¿¶jóˆØÐ O€ÁÀ0J`‚Ñé Ø£«Û‹³¢ˆeÄŒ$ ¹ Ø¼nÏtÇAÖlä ·ÍÛÛïÃwää/B’†ŽÌ0£F¾ÜRÆ0ìÅO¤QkX{\ÁâÓŒx)eg´%œŽd~¸•õ•:¬ ÑWÀUf7ï¹MVöVT$(ÔsÏ=‡‡„™3g¢å´´4ØW¼RݶmíhÆŒX”êdk²(ìï0‘ìFu¼Õ·ÛµˆÒã¹Ò„(Ê›—ìÜ\Ý¿f”\ÔÒüi#'ï £w. Âmψ+Äú²xübï¤Ü®vâûO"ã-?¬g{™¡¢ dOþAÈ´qßo<ò-nÞ,™o;<V(Æ›H›´‰ „‡Á%<²€&ºÂ ¤M»P(B]xá: kŠÍʙ IX›P?{ýüñÇT¡hä“O>±[\U ÑìŽ(ÐcT@¼Òb­6°R™¿}ñðÏÉà_žˆ W%’œSøês½š¦B©30"#|Ùm?ýþø”øõ™í«ÈC_‡²Š1“ý'óF¶òûöÕÄSd°ÈÈ´Ž%ä•ni?ªÅ…ã~‹8ÅÙ‰ãžS7kƒ ~¯Ãÿýï¶‚¢ªW¯^nxüB£¸މBÖîè#ñ¾rµâÜõË"bȹ|懇¯tzMî ðØ&ƒ,&þEBú¾õ\k†}ÊIYÛÊQàNJs†€>³6§„>Õ·S»víî‹•£f¢ú>Û—,ëÑvâ—çFÅì5yS¹94ñ­ÇÿùÔCÑ/m*×ë4•øÑÒT©Ñ±.`ù™­C‡nUqMç"»é,—­ä²´˜+°î¿ÿ~L$c»\‘·[þB,f…R Z2â6ôÏ ƒºt‰ëÕwøÞÐÅ¿Ÿú"Ò¬Ñ øsCÊ;O÷ÅÐÚuŒÝ€±1 ÐYzjs/lzÚcxÞÔµ3ûâ9hæÔ³Ÿì—pmÀ[1Ä çÚÔ|è¾ ‹¯|ñüðšøÙTR¢e=îÛ“Ü­ VÊ={öé-£U"\@¼¸¢ ðèN½mÂòƒ²·rÇô×_a¶Ì±ü›o¾ÁzWx´¨‚c€.‘I—æí}âŸêÁ_¶ùù¹‹1¯$ zà·Ï}4xkµDÞM‚bƒºDÉ:ŽÞþAþ^ÈëˆÈ'(ȯ²´DËÞE2E3. ññ“kKKõbß@_¯Jñ•‹ÍFÆHôjw@S‰É€ÀJw;­Ö ñò ô'eÅJXoŸ€`¢.f{ô $ê2¥–5ê¶ k!±éíÎ;~øa¬ÄÄã£m-ækxàÛ>/¬%‘O Ff%21zu…JÏõ)•+¼Íj#ññiKU:¢PHÅ^"ƒ¦N©¬¼}KýšøbÉ)QDf±·+衽É;¬™Â‹0GVKÜ9òпó±váÞ¿nÖ'v#NOOÇÛo¼fzÿý÷±åÊ+¯¼‚Rû÷ïOHHèÒ¥‹ýÏÉ(æ €r»rl û ÇÙî¢JÍá¾\Rw¼p Ç>ÃîËÎ9ÞLåÐS|ÝÖ€&¦¬ÐzÂ^‡fI¥7ÔØáPD°c7w?VjqNØ3ì¼ßÎlÖ—qžt â3%|{6YRrýºµû¿XbŽ×u8â'm_gq׋ه1²eE|÷Õ™U)¶ÐÁØÌê êk”–ÂYeÇ%™ épÁ_^ÌØJ„FŒ——ôNüÎÒÚƒÿþí‘Û:—ëVm°Bã.‚DÅ^ñ¼…)E|@ …С ¥­8ñŒhÒ'-¾Ï^‚ÛÃøåË2¶¥5{º¢Ë¾ûDœÉɹ¸¢ü‘ðQ0ó<¯‹{FëùÍ·è\ˆ È:>)cï;%ض#¨%[Á¼u,¶•ŽãªN%Šx/çÄœ² ˜ÿ°‘º¤BWíV`ÛÖ­ço«6^ýuHh‡ ƒÞ½{ Ž— ›tã. ³j™¤³f9zèâÎ|ó˜Œ(Yž­îÒî~kå]ùþüJkB­«ZºEà 7ÌyÁ¾Ãévkà Ÿ¹¹¹8Öp÷½ÃJ»ÓÝᇠ¤¶mÛG¡»?+OãÑÒíÖ† ÅüBMXÀõÀÕ±&‚{¾HÅ/¶&¼Òá7-ÝVm¸d_é¸çqy‹ôhÉV7­  Û8oú¶Zö䂸9Á† ŒGj×€²µëÈCÑ 4àq ÔåðS»óû•ÞÍ=7w^Û¶°À…?ýðÃé~Pï½÷ÞÛo¿Í—óàÊ–Þ¶œÏó× K +óÕ%!Ýv~mÏ…7º5“i+nädæ‹«“XIoÇߊ“[ן •MV<ø÷ôìQ÷±QëUÉÀ®­}kó±é}‚´ ‘Èü bíº=…²$‰QÄ/Å®bòäÜ¥x¨uo WD^L®™ÛÕ`%Ç~XHȆÿÍéà…r/ï€NÄ›ôÊ“ß>õÂgß­ž0ô@‰¾òâC± iè—{.°-(Mí3õ¯.{òË¡/|Éf•'gúÝÖÕ}8ÒßþÅ~¸¶ää?_ /Pz–Çš¼[Ç»ö¾´³™ºØho¿µ‡Ö§î%dï„Éïn9ú÷Mr³³å­ÚóÞ©£°ùÛµòh…^8pôcͪ?÷e>ŠYÄXn¿‹Ü”.Oø|yàêcÿKŽž±¡ÛÚ‘‘û×NØøÐúK;ãÕÅåö}ÚªÙ“wªAògΜ±ä“–C‚ôöØâ¨]ƒ,¶ôá{Õ«M$š1Z‹˜âßo½Ôwܦz,'|5õÕGƒ±¸ì®e$úûgzJtÆn£FÏÿ~ÿ™ƒõ&bÒƒQBt&ö·ÈfúrP®z¹#vèûäKä½ ÅÊa ™>qªdΔñ£ñåR¾sr>mfâìv;÷}ÿ¯~#³ó•ºn×'ö<}ß¹!-­#Ò£bR3µA­7°Ýù~uز¨׫/üµŠw|ñî!Ÿs?“_:ÝÐéZ‡uG¦›êÿá”ñë÷YÕ»'W«ÑfË•——[ûÐC¸S²°¥ç—c¡Ü–…æ­رF¨Ól|q›‘·¾=©œÔØÄÆ$E³ÞùvÛøá!R1‰iªàH( ’Ë(ŸTD°P;xŠH™eR"%€¬›5¢§a!¹—Dêt>£KÚúÏŸÜcêÚ?ß|¬%ß»¡¼0æ­)Ñ‘]S¶¥Ä>90Zœ""b[É¥ü€Œ’ BFŒ{6)ÚjxuèBÄõ+Å*\´/"ì‚õ!‰cúÃðáo…¶ƒ ÑIft¶þó÷÷˜µöÏüÇøßß·'S ÐÍœFFF8º°P» =Ê[௰c•@‰mÍbO& Æþß²ßW¿ÓLF$¸üA‰Tb“lÂ"«ì;ôz–¼òů疊©8›þæ~²âÓRÑÉνªŽ Ìš>x!é÷!Kl”4!ûwíÏ‹}¼CEöÁòßð¦êë¹M»N˜ý‘ñÀæµ¹Å󥑼LЦM²§}qä©ûôžòßÉ ž~eA¿ï ·!û F³±Jf£Ä‹*› «X"Qtx`:!Îêÿþb ö­À‡žE—Ïæúw}tö§­Nn˜[¬“FÚoxÃËàÉ8ÑÞ8©Å[à•ŸÃÂ=5®¼‰;ÊqÖ®#uµ&¤Þ;»;hú –X)ŸK¥r1éÌvÆõÖaá¡/Çõ:…%yõË}OuÀŽ>÷½üÇ ì8 }gñó۳IJ¾>ñ$K¹>ãñÖòSë—ö{y×øØ´/ºYšäÎ;M\¶:;qxlî¬ÿÐþ%?ÍZ{*铸¦\ìo€`Ño—Q`µ²¾Á„aÁÛöÍÌ´9±ÃÃßb¹ú/Þ½urÔ…ý^þ‰kdìâ%„T™m®Ìs¨£œCxµmWB¾êÚÙP»°\{í® ¯(+Òv7iêo½ÛtÀe™Š -¦™d6?mE±-ÑÏg\ƒ¬ Ì·uK¿¾*÷IÜ^·Ô‡¹Ah¦´îrÐXáÝÒ#]+ˆ7× [w!n‚R¦€›ëIWxð²}öªI®Ab55ä)÷hÀNx_`Wâü6…¡Å̵²‚xs ²ˆhtÞ«§Ö£^x~jÙ²%0'ïºðAl¨ƒóÄOðy>ãdy¶›È=–¹ùbG±XÂþˆ ZÆ 1hÔ&FÛ)HÓ¿“>!YÓ§4o¢/KCÐv¿ÄC@ h"/`‡L x¥ µ@0oS9¿“éìnÄNäwÁGvÒJ]ªðÝaE€Ü×ÏOà‡}ˆ]Û4Hî×伺EÏž=ñáf|J¯.íxh¹Å ,©0à¥à‹kÞøy±›‹DZ¥ºI“&øp3î©ÕÖ–œÚõ—&ú±-på”—26mÞv‰ÄLzel öå«[S¸ë‡cÑCk!0ÓâÖŽAcøn®;b_`Sqéi‚NMMåGO­l&¶äçÿWU–ï+ 9jJ¼@Èx{³· š¤¸[øøúÈÙ¸l¼£Â÷œðFË}pã°eqÌ_;8õÕÃE\yáÚ!Ïþ@bˆðCD¬û“þÚÔy¯±±8•©]º¬ÈD0£'Ý^ ð¾c7?|=m×î}ù¯ºÁÊât„Ìç¨Q£øî¥±³…øÁi+MF7Ý^zô‚ß)MÇ&âÀÀëíÚ9}ÈóîÙ~ ɨ>O:þcÊØØ:ZAcî´¸'Ú|dlǺ1ˆ%=ION0ßǶ~o ¶ÂË1“»eÚ“[ެI¬[OŽ Üƒ%x•…­ÏœoÂvìØQ÷q"^Uîç}¥Ðì+ #_ÓÖ³v_±ŠÊŠ‹¨Õõ³#{v lÙ.¨ysÿ@…ÔÛ|¾\”—Ÿo3Œ’Ôi£R3KhÉ© o¾¹á”µV½å­'ÓÉ™q=º¼¹“)ºŒ ïàÛ]ºŒÚBéW×¼9Š+éòΆ #ÑýòèIʨ£Þùñ‘ÉXøãÒi”eZUG ÔÛøŸC…Ü—ŒW7¼Ã5;jIf ks\òNê®_VpŒÓÖ䪉îÒOÎK'ÎëaÎw%Ðû½^;…„QÒ Í»4hpw@½b"ÓvÝGEEÙ}•Óôf"³tÆŠ¢×†+¹Ô7@æ lÒ,¢z#AÝ{5]üé6jÒ˜ûUÊÝ»ñ~N_Ñ‘t\±}ÏÜa…{?}6¥éöã'm~vÞ¸rY,‰»]|èĉýëßܘ²î´Îgà$ГWl[÷ú#BÓ¸÷£„7V·üê×ýGí™÷ßÛwáÁJؕʠy4E6õø‰›Ÿ-÷Ÿ!˜A]°qñ€våZ IDATÔtÿñ{ölž˜þñŽóJŸÖüçtõʶ=ë†D uU}äì§Ÿ~úå—_ð1Ÿ_ýöA. \­Áǥػ²Ú1"fðYr>œ žªãç„°„ýš†ýš’®Èôñ¤Àmû*ÿÌÓ/|:4es‰ÔKl$b| Én†þ,žrX™›½õòêÜŽ~—ÿ´ø5%MBƒ|tGv~MH¯ÍŸ-%eð1Ψ´‹‰_h\{Ýž- J À€˜|~ ÁÁA¡~>ºK»¸ƒs…šâ°„™S–ìûšŒùøÙî-@Ï~¯Žý¡TOÆ+ !½ö|¶4S{>¤wcIôdâŠÅð! ]ÛŽ¤‚Õ(>ÔŠt bE«Þ@c>:t(¾( Zö&‹(U©®»BDxÚV™ŠKnƒ,ÜÖØØØcÇŽQ!ºwïŽWvÁ…xí1>ÓàÕLÛIV¦5÷Šô^ütðÅRFæÕì«]—ˆhƒz¾—@6ü¼+oïê1ÿú•E“]ƒ—$ ƒÞhòŒ¼¥Œ¨Ïlè=*å•¿z¼cÓŽä4ËÄ}ÓäÔù™)-­?XFÚ4”Bô,ˆÏ´ò°Ð$$<<¼W†ytäÌf6úïÄ1œëÀecOr«|å"™¯_Pud! {þüyLc¢ê¾ûîØlþå4ûyàÊÓ϶ГY©3'ÅÉR¯4ù_?…=d‰Ï€ç_÷ìÔtòÄæ[´Éùt{x"™²W;oD÷¶>Fµ0Ê?µ^À¨ÇºK2YW—M2nöZ8—~°Á;¦¶© ÛÆ¿6Œì1¥£SXÎZÛzäÅÍŸWæ=óP[1Q+kôSå¡ä ûY[À«Žã$_[ÇŒD,r'd1{…ç-X{aP…ÀÆÉóƹÃå0´ß1He^pÒOúFz'õõ}ÿ{U«0ˆÛ ¸ø‰äãӝޣúR|v¸ÊšY: }hÆWo.~6¡wž°áвûzíE¦$tYÝñ‰‰OtüsÜÔ-‡Ö<ùä« Ï>›ðYÂ{‡–%:€IüÐŒíoÎ2ªïj4ÒëÍ kÆTλ)í4¿.xûÑ„¸¶£^ ­+±‘‡Ï†wœ@^Hèòñ‚͇ƲËÙ{úòË/q­ß~Õ]/j¦¹H_ìã-r-Ä;4ÔÎ2 ôxñâÅ6mÚ8V¤ïÚ]Öþï9å¦ož’¿ð.HdÂJ ©Pk^;Þÿ…o”-üIØ¥¯â9²×¥Ä¨Sc‚VæçÇͤáa çÄÏχà%6#óóa‹Ùp.+ܤ´ ±0 ‘°-;K:µŽø E|:cº‡ê€„ððp<šãÁÖ º¼¼‘8…/‹W¸ÈÀÌaF…ø¤2(Ag×DÕØîɵyÝÜœ“\½˜åN+Kµ-ˆWZ¹›J%S¿74ñùˆÅ UÍ}Í/o¨ôaƒ1öô¦“ا:ŠØs®11b6šØyûvm×…îJ-lú*ñ8Ž"ña1€nÂppèK¨ZÇ=êù÷UeWrÏq?dkê›.ám°7%žÿXË›Bxo3Z îÍTS›žò†¬€ŸÝ,))ÁDÖ|©Ô²b®ö jeAP—(š†Çö ¿s Þ³á•Z%0`@­4‚Ƭ× Û¹sç›Vx'Œæ¦Ù=Œw/€­cû ÷Œ³³µÄË Ù5È 6á)ôh@P¸é¬H£þþþôñ þ ¹÷ ìÉppl¡¤ÂþÙfÉûÿ¸; ‹pŠÃ‡#â?\<‡†††¼õÖ<ÁAz ލ« DÒÁMêÈÚ…x×úLl;¨»²úüʂ߾X±µ¸TÕüF€2}‡ÿƒÍׄ…w lõXHÔh/IS±wÕâpÛáyòõ«þ ó˜”ŇŽa\¹YöÙ€fW%l¨µÆóVV””« Z½äR¾Ï/kü½ü}®!Oxä£OçÂÚò«û´%‡[õüÄ2ræÊÖÔýÝžN²Ù ›ÉØ´AÝsTÿ÷¼¾˜ÂŒÔßôOëS‘“F¸ª^£l÷/ÊØú»:.©ß~#̯²˜g½~ý: €Â bö®-÷àÞ,ây¯•˜C‚Ä!’Þ]e¾rÉzõ"²fŸöŸ}dP›|½Xâ]n2”‰å6AdÚ‹#’ÇH2·ÑŒ•?ø¹ÊÜß_óÛ˜ñºƒ%Î!«½ü[òxl;Wd4¢EûÚ%ýÛ0KEŠò% ú^úmÄÝAsã†,E$ðz៖••avS]˜>jß¾=B©ÂÂÂà-Pd×ñWÝ@­,Ï[p¹¬~0iäÀ% ý+ÃÈŒ:cEÙ¢‚¿DÚo ¢ ØÔ¢Ëë4C$ÞƒÈ 6/ë²áH6},‹ÅŽdµí'e_1Ô# '…5TûtÅŠ pûÉÎd¸Ýdñ±Ncå»÷ný˜š=zô(žCܦM›Ò7ap vïÞUµ<òÝרîꈨ;óm¥¤ñ¼ˆÜQ)‹KT~EWN—\9zýôÚ%ï½úïË}¶Ò»%…7ôy—4Ü Y´—¿zmåeÒ>Á¤ìÂ3ãØÇ€Ä¹›Š‚ƒÄe‡(*ce\âÊR‡Ø&åd–-.áéä]>CÑ¡e¢„wóé/E›59.ñç+–Ÿ !Úý+?H¿Ì†¢±ØÖ嬳tùnºl| ¶þ@FFì(¶ælݺuPP–R£X¡€e]DÍæääÐuWO…,Ï‹‘ܸ–sõÄG¥·–_ùU¯¾ôÛåOý/•6l°†6ÃûkÁñVØ} ¡H>dјÔ~kó ³·+yuËùN%¤M_”Å¢K»-eJð¾Bm¤/ˆœrö…<á·å‹çB:=¿kÁÿްÏÿá³U™ ½«^Ç0;S ¹oVŸ–™ Æ_ê·¶°0{‰rAW·4FÌ‚È>ØZ,ìC$*ü±Îæ±’ Ó^°ÁÀ®ú…Ë(dBÄó^¾j(-7Vª+MUSpM—sVíïëåçç'óñŠmo ñöÅÞ µ%].I9øuR÷ˆèÁófÌ 7Ý“æ´5ûK‰jÿø´ØwÆâÖî˜ò·-"KMŒIB¢{*–‹‹TtŸ7‡¼±h'!¥_Y5c{’ Ö‰® vÉÁùIÝCB¢“gÏ ©WTŽÍßë%xÆÂì$¦cq½S$Lиô=° C ë '©îÊh ¾,Ï«V›JUÆì³r™Xá/ ôðdpHpeûVìZ™:&ÜušøZüPkÜbø³kGÄ,ÛŸ°Lz÷Á@¢½ìУ©„Kìk¯¢/|CÚ/_¹>{™”ýH8Bp8¹s™% ?o” x…/‹à鸸8 wì Cß ¸ÈÁݺuÃbÄ!Ôº¯Âje©|ˆçm ö–Šî‹òkÛFÞ,óТãümñZªdJÊk¹ë—ݲåö^®ÊúþS’ÛÙèaÓâÓ¦Œ˜ž¶vf<‹JY˜&[±tSÆ"iù`<™þÙ¶"†9Ÿ¾jJ&ëË"I¢†¬ˆß5eü‚ø¥“£íñÌQÀ—õ ÈüÏ–œRVºû›OÉŒŽÂÆØB~oþ¡3¯ö‡)Å&S\BXYZZ¬^ÁÚlÛ%Ôª‹ YÄóêô–—uØÁS\Í]Å.cùÚ݇ÊÙ§¿ZÙ³M¯mÇÉ/¶á3¨->²&Q±g礥 †i$$¤ïK“‰_:,š{Ƈ¦Þsí?ÿ7ãó?®¢±tcüªñ¡Riû÷S_–ë(pÔ¼,˜„™6á'AŸáN<$‰‚Æg¦d/l¡hLðø;J§±€QÌyÑ·_È£ Å£­»bj°uoàöPÆõNB<ïż¬ Ì6£É\¡6––3×õj¬eÛÞQöIЬyGûþeÝÓÌ»¸B>£˜ü‹a26øÖªJ Ò@µ• ‘%­¬šlðï:ÝœÉñ±-X~-]“Ò šR•ûÖé×|_—Îî"#ÞdyðòŸ²ËBÏgºNÞD»,-¥¼„ó†<µ j€ÂVV°–Ö²o̽KâeŒÖSÕÀ58bA"ný¶¶¶Ž ò¯æBБ6\_öø‘_‹.ÿÄ_VCãz<ÊŸz2w‹x¤ºä°:]Ã…,ðÚå>nÛ³‰ˆ¼Nœþ‰x ëäJ6à*þ 2ÖѾ:ŽÐ?r䈪œÛô̱ú”À¹q"ýï?/FpwIÞQoÛX©*Ûšš,âÎÀʞ͙֘c+³ª¨ŸKT`†©áþ$må½Çóü…æ371`¼ì]öÙRI3·îÉUw9ðêùÃ?9rdtt´ WYIîˆÑÏRÑa&DwëÃhõfF­7itf±Ÿ !^&™ŸikÚUhÏðtû7ÒhAüezwîÝV'wÇ5À›'úvsÀ…•õ󓛺z³BÅÅÅ_|ñ>s:bÄÿ:ªQUVlàbŒŒH,Á§É¨5˜±¥Œ„Á&8fö} Øê ÄKTõ4zeÿÞH›qNóI”D•“™V[`·c¿ž÷j€(ujqÙn¢ ´£­4”QÖó$WVVÖ|€u Ð"Øl¿nµôRˆªà²îf@T>¢‡IcÁ7ß6^JÁ$‚™5‘^$Ö‘˜ &3\XÄË ìŠýï%6ˆL ©úÕF=1;%>µOKéäe[ér+?Ïé“|pgžÒ ÉK<ž9}+*•g3Ë-±[72w•söÜ Ê]5}Lþ£ w'^ÙÚ²Ïø°µ±;OaÁ’ræçY‘S|ßÅu2gæöyq‡|^^O¦F P¼ÞF[¤ááõY*Ùµk×–/_žMOÍpZ½ ø¬©Ù¨54&£Æ¨×štðLŒÞÈhñy³ Þ-Üvy±%É¢æ§+l\²júà6£”ùëûOc—,JˆPHd“–.%«6ž«·ªmåtJ2gçûI½Cç÷ÿHȤÙÏ÷”ÉBÂÃ$ǧ„ÿqÁܹk¶¤‘´ËuÚDÊ*Tcþ ÈÒ[(?ÛmP»¤°²HõæËÚ‰Û¼yóÑ£G·µ~pÔ sª»a6ùbí——n,ÁÆžØ}ÃÁueï5f#g%Å^:#¼ˆj kf›KN êóõ¡×z²qÚ–ønÄ "fÖb]­Q-:ÀÅÙíØj^µmt·ÍŒHùl|h¥!éo‹›{ꪩ¼æ©¶ŽAÍä5Ö²±Åƒ{ý[Y¡áS¥3gÎäñ ©o¨ÕŒ†J“IÃèñ½¥J|è”ѳ¶yø²&G-þk+õbÖ°¤¢œŒë¢øŸAýFLÊœNUÕŸM!&Äp`ÍLÏ,eT,›8¶²ó£ú#äÓ•›²Ð´ª-¶9ƒ¤¥çÄ (¹{$]FËS{2N5@çe)ÉMØW¾m˜X¬Æ©gÈbÆ`öìÙƒ B´/2¸õ›ueìS£2+L&øØŸIm2UšôJ#Ã1¨Ä‡pÍpl¾Qpí÷”˜–Ћ(¨rÎÆWz‡D$-N›s6–- svNæ²$ÜY: {)6-9Hðöµ„–@m,%°!|xÞÎ¥‹ÆÄ"Ø3 ô¥SÉàEy+SZ²ÁŸ¢€Ñë=޲jÉBc”‚ÏÔ T Ü#ô“Kõæ`e…“yYÜ÷Å>•Œ’‹q×g=[‘7ëà¡ þÙËÈù f<…Š%:Ë;nœ]'o1<‡}I´ø2‚5š;pøûé†*AÊG Ê¢’Ž4* aKÞŸFUÔurúqeE$L3&Mn ÜŠ˜üµù¹åð+ªÚ±!÷dkÔçȱ¨¥a7\8Ø<s£õYD§¿ùæ›ND7™½*TX€ õq…¿Î`6þëÔ“åÔâWì…% Õî6”ÛÞÕD¡}€+[T£–-lŽÍÔÖDc¯ç¯2ujZ \Wõ‚ô[÷õYˆËDPtìø½ç`9!uºýzË‚ñ6  ôZÛ>~Ýjépê ²Îµ9èÉ÷±Xˆî¢#~ H'Ž?Ɖµ½žÔP5€‹Ñn£v#k  åÁÚ ë9½ 5ÈÂèÀ¾ÀÜðâSó§.e(d]ƒ‡¸!k€G*P몜wÙ.ÞžoW/pƒ¥XaV©op+ö•°áZYOˆwƒ… «‚ñ0å3®¶`K_oÅoÎÉn1ÄÛv„ž|½k€¿Ön1´õÙÛâ1QÞ#Õz•â'¤ÌûÇŒ„¨Z'`­ àoEÆŠ¤Ä<K2îÄ&êÔµ¸7=4—=â›îÉŽ‘†xãk¼ØŒÜ®Šž"Ä»ôû¿¬´¸¬ìFéeÈ—+U¥ªÊ2UEYEe©JY¢,+³ ñ/B R¶ŸÓ(KòάZðpû‡Ò«v-ìêNæ¬K%¬«CVÕ/“³»5sûÝÿŽ23Ÿ¾›~dUãÈ µ¶_·‚Úzƒ,œÛC¼Ñ¬[s††âXDTïÙ[Îa?Ù÷6±ÁZW­K€òfþq…‚G{hý»´L”¸X ýV­Ÿœ¸lëÖ¹óÌõ‡²¶R–ğσC ô[›³>qâÊôM²­çUÚóëc’ÓÈ®d¹(n]–ŠÉÿy"·¥8DYùÇÂ伓LHZ¬\4y]–öÚîyŸí¥ò9ÊìØ8+CNP/¤»ŒÚ ®ž! iÜâmÛ5qiü®ÿì-½òsË>Ƀwž3˜•{s´œ“#ú{ü‚µó4eÁÒaXt#ú­ºž6}ÄüŽœÛžòéø>±kšœ+Ì[;!íïN°Ž¡ßƒ*-uÊé +Ø8)mÄúS²¨Q;S}“’]¸ûé#m9)µWñàR2å•m*IôÜ)ØJ1-»ð£§ceÑÖUEì@„dvlÜ:äúuK¼,?¼ú‡,Åm!ÞüÈl3m®þõ=!K^Lˆ’EÿI âɧûΗ!ú›LÚ8¡w„L¦±óë«âºrÉœ=¿=ß=<ªßc±$þà§E…DôèÏ~ ýÆÌs ¶€,ü¾Îñ±>ˆÖ•…„¶%±¡-CØE¿²ð®]|/­_¹ì—\B‚ ~^a!XþÜ*2Djkpo¾€Ì0¾ŽÛµÁåoe^Vp0 ²ñ~饗bbb¨”ÖoÄȲa‡lȬ²j#£fCfMˆ=Ð z£Q/öR;„x£ ~W6Mß?¤‡OéÍ—‚ë¹½½m ÙÞ­Á³|è70ÒÔ£’JÙh.DÜ'N¬¡ßÏ$M\p$3{‚ŵĀ[É /KÊZ71¨ý"Ò)~X|RÌ.5°@´´l¥"ŒÌl­cãœR­ó²›×Žô¨´?·ñF÷f/ ñÆöÏ Ýî¦ÑÉëë$£µ Ù¶ppe6QÛì9ú]§-DZU]B¿µ=WÈXσï„Q©9ëÁ"¡ZbÉZšeÿÉlSÝp³›6mÊÏÏ;v,ÂùSÀìÊ•+ Ä-s_IÀ‘Š>qâDìe¬¤¦:ìï‰Ì™3g’d7¼zûRøm ñ¶dµS‡mÔÚ—Õ%ô»Z£ìIÝB¿e|˜9߉í^µUÕ¶íÛËg[wä>jVÝ5/kÿìqÇtàüîà ñ¾câvwD/4u ÜÒW½AÖ¹ôžoçú¹‹j©KËÏvAxçËùè(d=!ÞÎ/Û]TË#ÕÖ1¸iù=»xß´ê<Œ.h€ÎËRßÀ%ûêÙÅÛ-{Hݨ¦|æVo Ž†ä ñ¾•ëÚ xùIƒ›0´Ž©7ÈòÃp” %õâئî{:)ÂúÚVP?ùŠxòcÎ5»žó)ÿìE3·Üz†ìíñ†/ëcµ£((±&Éðå™)ãÙHï€Øãs6.Ed]ßݘ²j|¬TôÞI¸4)†ÍŸ“–+•Gæ&,AP5ëËÚoíMl·U—w-Œäö Ÿ²kÂ'â¬í4ö¿<@ïîyY\ÆÛ´‹7‘ußb÷%4¶$½ 8Š®óÓͳ؈lëîÜX4߬™Qj²¯´ÐF%½oÐÌÑ€ ØÓ,…ö[{+¶˜5–Àí®_›'¬v !¯êºQæ`Y)job^vãÆŽ:«_¶ÞB¼­ ˆÈf÷þ¶V[ÿòØÖî¯}̵Md¶}U5¾ÆyBñÊûuWBdd¤ qý@¢ð÷ A±\Õ9£ËÎÖçæ2×®aÒðpïÈHŸ˜ŸŽïÞ«â‘܉xðñ'ĵVÝQÈKKÕ{öTüñ1Íb1½Sè.]Òçå¡Ð¿¿ÄÖWµÊî!¸K4ÀO¸dh>,8¾;Yàµ<-­ò¯¿`Vå]ºøÜwŸ´ukÈd¸tIwú´æÄ 寿‚&`Äj/Õ]ZÈ[Ö›˜—MJb÷1@ <èqzç «úí·Êƒe]ºød6*Ös³nð d;{GEUìÚU±¿Èϯé˜1wéåñˆí¨m¶_ÔÜ:Û•P2Û#Üóö !Û5%*„.'GùÓOÒæÍWõk¥ë×kŽ3–—ã¿æøqœ®^E•wx8È´99ѵY–0AüÐø·Œ}ÝêIw‰pÝ i1j7&p9&7XYüE‹•—ãcˆö),,lÖ¬Y(…?€kd±±& øõí+‹ƒÑv+Pnß8~<4gÏ‚XͶ%‹ùº¤„!‰òðˆÈ™³óv÷ À¦krwy»žmû vÎÙ›ž—^í$Bkn°²0øØSÉ®iz:jÔ(šQ>,’J}¢£µÇãÙËïÁ%aae7–mØ€ŒoŸ>(Dð9hõŸüví*ÁIDATZ[“(‘а¦xÅÈÊìwÁµ¶z·6%³—˜€ýÞ³Øðl­5Ž;nò:ìuh·³¶*g«%>›ÛÎÛ*€çï­jà¦çeÑ15±hirdÑtlll4µ‹6ìÑ£GTT-P= [é¡;{ÖÌ0²¸8õîÝp´§O#sk6Q±ÄN“ý.Ø 6Tãž9åìø§úÎÚò}+G¤&l7 zõO|¶Sõ»\Içe)õêØ…,ˆys Ôº²h411‘¼(r¹œ~×™–5³NÇö¬×ãÙ‹Í0 ûß`` åz=[®Õ‚˜oG0㸠6¶°´‰ã>Gã¸#d’À¨AOŬ–aòJÈñ?›;÷Ã-i$í<ÜÛmIdÏIØ@3ùÝu—‰¼j‚Ý{ ]ÔS>SÇÇä6È6kÖ,!!eÈ!Ø–‘?Åk¦´Twþ<ì(ÜÙÊC‡üôÁ„ÈHdp @{·i¦¬ ó_<£`ÆqlŽÌÇ-‘ãÜhà¶Ç& ·ÙpâSŸIJZpäHö X›µ£Ç­,ÈÜÞñÌ'±¡ò­ù5רçpëìh#4SwàZ}ª¿hÁm…L€,€‹LëÖ­ûÀ=µIŠ>}tEEšÃ‡e÷ß;ªúé'C~~àĉøŒjûv“V‹*h AlÃê˜Ø»:QX÷ ääEéY›Þ1=“4Á†œQ=ç dû„:¦;Rl˜‚]„` ÍäçäÈ»ž¿:^yÎ5nibõF=g7§ ÀZ V³ŽMQb»£;! ÇÏ[qôèѶ“pO1`€N­VîØ!‹›&&ê¯_/þê«K/¿ŒÿÅ©©úk×P(ÂÄÀŽúÊÊ€œIḠ6èmâ¸eIËÏ­H8õpl}¡Ç—`ÊÙ½Ý#äí ›>@ ùDÒÑkÙßm´‹v½ÃÆ}ËcÓ&,}ª‡»æ$œŽ£qTpÐ+Æj Ö}ô”˜®›Ý¶Ž;&''·jÕÊN <`µøÛß®®^-MMm:n\È´i•{÷j³³ñ£Ã{ß~ý¼||ÊRSKOžlñ÷¿³“_vIÖ=Ý&L;bð|ƒfÝj›IIÁ.Øx%R-Ž[úÜ'[&BHé¡„)ä)ÎIE$¬4>ÂÝR˶ْp›í-æ ìß6ÛyÛÉà9½) P¼º„Q¾Ì…`¡ùvþàÖ8N†GôIEND®B`‚vlfeat/docsrc/images/using-vs-additional-libdir.png0000644000175000017500000003643112236612215021330 0ustar dimadima‰PNG  IHDRíôÎdg pHYsÄÄ•+ IDATxœíÝ[¬%ÙYØñµÉÄšd0`l0wì{ºgºÀÝæ:-Œ/<ñ`)"RxÌ‹Çà;chcÇ@`€±¢HÉ R¤DêˆV m }0ôqîcαDZ @LÀ`ñ¸óPsÖ¬³._}µê²Öªúÿ4ÓÚ§öZ«V]ö®oµªjwr÷ŽhÍëÞð¶{Œ1.])Ý€Œ1÷tœí À`÷ØW/}ͯºoìvƘÝÙÝ«óÚ›útçõY^½x“ÏÌò¬ª÷äO·ƒþÌÏ¿·ó«…Ër¾~°,îBÇ;ï-ß.ÑñDwçºÒ»,gŻػ,çºÞ·qÂe‰u>±,~/›Ò/åöÞÿ+1ãä²D¶ÅeIwZµ,ç»ïo¥ä²›ÈG,˜6ì#&í–ÞfŽÍS\à`ÿ ÖAÐnl»yýO¯¬Þ˜<ÏȲÄ;_ oj¸,Þÿ½Ë~¬b '—Å￸Ãe‰lJïOñ#lyÍGÌí¼·6zvËØ^:`YbÍ X–H©!Ëâu"ö§ôKÔÓ~ļÿ½„Ë’˜4›‡žõT÷âK›%À´îé/ÐçG¾óËô…¯]»ö¯~öfv-‹8LC9ÜöÆÍ[ãkuTqÌßòIcÌ?ý¶3ÆüÝS¿ÒM¼ïE¯×ÔÍðWÇÿÚóU—ß4Sû`/_µ¯gºÏ˰|Ìß}òWŒ1÷½èÇŒ1îhÙçOž0Æ|ÅÅ4/cÌ_ÝýycÌs_2  ù‹?xŸ1æùßùVoúÿúÈ{Ý?¿îÊOíÌPŸùwc^øýïÔþäý)÷ϽüÝ3ô€åtAL¾\¼|õâ嫽¡Œ[%5ÅSõ8߯ºü¦çNš•ùÚ—¾ý뮼ÝóçGMØìT¾í~æÛ~àgŒ1OýÖ;J÷€¥Ù §û³7ˆ1a>拟z¿1æÞû_kŒùûÿñ¤1æŸ|ëë¼2ûÔ¯t)™¿ýÄ/Û‰_öâ§O3}áã¿d'~ù…7Ø×sò‹Æ˜¯x0’•ù¿ûûú9—Þh_»ù˜Ï}ôçìôçý³7cþòÖmäk¾ã™Ìÿþï]Væmá¼\~ç1cÌ×_ýÉ?»óØ×¿ìQcÌŸþþ{ì»ßø]ï0ÆüÏß;—ù¦ïy:qòÙ¿ËNü–ïýicÌèÀó‚ï»þ™¼à, óé.+óðÁ§¯cî¿v`ŒùÔíëÆ˜o½ö.ÓÇ h^üƒO÷íã|Ô-sá•cNo½ÝN¹øêÇ»ôϬ‡~è}½³`*6þЄ#n­.yã5’’“y:ˆyê—1÷½øõ]óÿÎbšg?ðȳxäÙ1Æ|þô [ë+.þxôÔÒ_ìŒ1Ïyè'žsénãúÜG»€æÍÏ{É›1ÿ矉i¾úÛßòÕßþsvF©óüï|kocýÙ§s3]ó /{ô^ö¨9Á|ÓwÿÔ7}÷OcþäÃ?c΂˜oþÞŸþæ.‚ùÝg"’Ï|èÀmü…ßÿÎ>üNeOB/zù»_üƒïî"˜Oüæ£æ,ˆyà=ðŠgRJ§x»1æâ«Þ{ñUï5ÆœüÆÛÌYóà«ð‡ÞG(bPÓ±…5µü|̽÷¿ö‹Ÿz—•1±dŒÇMÉtÜ|LÔßüÑ/Ú×_ùÐOôvÑrS2yì(w|Ì×_ýIcü-i|öw# •|ßõhk]J¦ËÄcî¿ö®p~Ÿüí§“=v|Ì L'NJÆê¢â@+ÜóJ½¡ÌØë®ï{ñëÝ›ûuA̳xÄìÌNãMwj)¸ëj¿ç¾äÍþÝ úÚ—¾}7¢º§KÆœ»]â8ÝàsvKÄ.ˆyñ¾Û˜]—Œ‘uÉ[ÿÁW?nÏ+}ì×ßJ(XÞÐË”†ŽŽœWêÇE2ƒÜÿðÓ§œºQ2 xðÕ?x6V€å¹ƒ]4…Mp^I®žŸ¹ïE¯ÿÛ§~ùÜPßyö|áã¿äZúò‹oøüÉ©q¾_ùÐOüõÇ~Áõ‘yîKÞô¹þüù¡¾o‰öêk¾ã­ñïSŽóõ|ÃËýÓßêÛóíüÉ{:SÒóýæïùéÏ~ø]îy¥oùÞë^k/øþw~æwÞiÇùêIçE/÷S¿õŽOüæ¹SK¼â=ÿà£ÿà¹ëÆ/¼ò½§x»{^ÉMÆÎ+Z¦^zÓ9»“»w.\ºrz|Äs"£OïêFûvƒ|£Ë¢ö˜{ÉRdX–§§tÑÌ…W>>-,ù$2žÉs"µ1i·ô6slžâûÛ<\A»<'Ò!ωŒÿ‘è|r©z—%ÖÌ€e‰”Z÷s"ÿÅKŸ­¿3ïáá¡}.AF­‡žõT÷'Ï%h{ÝuwÑ55ˆ>:`¦Zâ˜ßø]ïðÊåºÿáƒ)š1¼â=±ß(”tíÚµÅjYÄ1`Þ“¨g­eUý\Á3ù˜ÜøÑ‚ýÌc¯˜´Š| hq hq hq hq hq hq hq hq hq hq hq hÕ=ýE¶çÆÍ[¥»­ëׯŸ•îE>v6`*½ß.]Y¬3éÚµkO>ñ¸¦$qLÜááaé. Ÿr/¯;0žòÛ éŸ=Û1èqLÒíÛ·Kwas}żî o›¯' cg<›ý6ÀPÄ1¨‹2ñ{pp0wO”Å·4ˆcP¿:| ×+€VÇäØívöß©œ°5 jî}Œ}[vñòÕ‹—¯–îÅ-Ç´¾õqÆÎ¡o|¿ßï÷{3Ý‘Àm‡£‹G¹+–Úiå'{Ëv»™ÐBotîØÞ”ý~ÏΆè>ûƒ¾.^¾zr÷ÎÉÝ;Fý £i3úZ_Ýk¡é£°`ðøwEtÛLSÅ–t_1G›ãÙCE¶‘ÕksÑ\ƆÖï±uîT‚%÷wßî^‡S&ï ЙêÛ@9¯‘-Ïѱú¿Ž Çls»?d…/ëÔ»î¯Usþ÷®{0g?g£ÅRG‘°¼¦ÍÞž˜ ¢Ÿ“»w¼/¯ì ÝPtÝÙ¢.ÜL,é¢ÙuÄûFX=Ú ×`~ÈR_vîaÆÅýz±] )¹ÿ†s‘ÛzÎÔþ;tq¢SŠöOo1—1 ŽYÇ^xG1”h-MãCÛŒö¤¶#ûÁ›c« ;Uôµ‰}\Ý·Ü*f¢-Ü(½ÛHΔxPjÓG[°!”ÜC`rs¢™ZaJ´–¦ñ¡m¦zÒkÐâ„ÑI·8ÑÎù­8öºëõmà†¸ ÖTuLš5º—wªèÎý¸zSÞÙR‰™™æeúâ$`&E~ëÏÍ]œ9ƯDWšfFyeŠlªï3Ǻ–½Áu~kOuóN[LÒ·ñÆ0R?ãÆìTš^ÜÙ–Ù|u~°b+ b\ÊŸ÷ËÌHÙ™J6G×]Û¡àEÖÚÞ![ÇÅë;2Ewž²;UŠrg kõÏJ•WžO Û!ˆÁúœqV`¯¸èJK]o5ùYGNoÖEHºSô_úaH$IBywMoOê仓ìlÞ† ·lo£VôÝè^„à nÐ:/”é~êd Í C"9HÊ»§°ÇÒÄjšÎ±äv^iõ8ü˜º‚#:Q¤¶·ÛÛŽ<ßð…¦'«§Ù©Â’³~\SH3}èXàT]Í>©œШðc~'x¯£CëÂS3B;ò|éž jMhD¨ž±8B?Ç<>¦õ ÜJ>‰ÔÈTôfá­A»V;Û×£‘Œ\•¤+¦Ríâç[í©Äf<ºv>sïT›Ýi1“Ö¿ Vvt«vqŠÅ1Õ®ôº7¼­tTo(U}ÝuAO>ñ8Ï‹_Þ“O<^º °³¡m~ qLÄõë×Kw[ÁÎcÇDðã‹ag–tãæ­Ò]ÀĈc›píÚµÒ]Àôˆc›À˜›Ujã¹!âÐ*âÐ*âÐ*âÐ*âÐ*âЪ÷á6ˆPº~ýzïmjÙ‚×üð«4ņÝïðð0§/Øý¦”û(`kô¿ußÏ÷öíÛC«`Sæx`Ð…KW&oÐ;=>b'–¤cZEZEäØív¥»€’Â`]Â…¦Mï¥MwKšìyש·®_¿žzËÝS÷ûýTQš{î»ÝÎ6ë¾ÆxvÛ kuè:–÷¾L÷û=›!o¯ºF¿‹Â=mÐîgKf|Ñ)ç.„ßx|Ö 4YcñŠßÔ°.g_Ò5Y8@ %³ÎõëŽÙÞ‘Û}7cÿ « Â…. í;92Ëy%M>0õqÚ ÿÔLZPöÊí¿¦©°LØ‚Ðft ÞžÓýh3‰”»·“„[*U^î€÷'›oSvNœa©@A¹º¼*^uû®}ÑÛ¥è"„݈öJóöÍ›WªÁÞoÂhƒÑ6½E‹¶†µš23^ôëÀûXÊÓ…LßgÛ+£i*ZÆèÍ.,¯é²yG”î…°ÎS±uª€pzM{–gá‹Î ¤z¿¯z;¦üJ×”Rvჹ)çcRvwvI8ÇTŠÙS‘‡¾;En!úûfб°½#|—Ÿ}[M±Ì=ÇÞr—²¿è†îÞaEߘ’aŒÅs;&ÎǤRšÝÐaÀo)ããô¡-DÍìgµQ?¶Ú… €âä.ewräÒyy‘©æÅ¸Š]w:ñÙ®¡‹£OáÀåí9õHV¶?#Ïøý³ž]Ú5&%3ɼä‰6†SVÄšÌ2>Fù!ôv;÷¼¬¾¡Í‘ßѦ¼)òìöΈ¼T›SõvS¢«=üóÖ¿°í¢å³{‚uóŽ&8©1Éþ)ÌÝkÓm9Õ%°‡oySz?2ú˜&õ}+|¯gÕyKÍsS¦Œc2†¿ôæ?ó¹v• DÞÊ+Ð[eP÷ ]oòÖÉØšÂ”ÔÅê¥Îž‡ez'Ê{‘·§ew)ã‹.£n곦ÿJ”—TùMÎsƒ&‹c*ûËÐç?Æ4‹ì.Urb«’n ~³Œ©ðº¤Ið¡jÛÓÒ¤îžéT]ªäÃRI7P¿Yâr3`³Œó=88 ”Á„NJw[ÇNÔi–8† ÓºpéJé.`ÓNØ %ݸyKY’ñ1 UMŽánÓÀLx^IÈÁaMÆ=mw3<ld›sß™wŽE^Ö lÖ”ãc¢ñŠߌ?üÌqôy¥âÜÇTØfžÀ‘ÇD@É»ƒmê#/L·¯U5Ë8_Þ¹½C¥}Ëýâ0çïò$<øÔ}vZX^Ó¦Ðyé5½Ó¶×‚f4ÝkÚ|ßò$½07v-`rÅ☨è aJ´–¦ñ¡m¦z¢YMSÑ2ѧº·ñïÇÞ¨.\«½kLûÚ‰úò©hEô'ü:’[Ë®ÀL>ÎwwžÞ]*{“û¥öp$Û`öÓ=Â.õe½òûÜBÂuÕé&îΞ·W?¦.Ê zR³È(­ŽvEw¹pû†{¯²"€”‰ó1©Ï^7t¦’ûÊ(ó7ƒŒÿÒÚBøýh6ó3nPbÌ%ç®ÂŸÅc6J¸kyóÝx ­uÙIÐhæuâÎ[Rì¼§BRòŽÍÝë‘釛vo”ÍMűc”ãtÃÌj^;Ñ)ÊòÑ€`ä·L´)oŠ<;M÷l!sãæ…ch!Ð$îlÚ䛟v@†)㘌á/ÑcvêO{ ßMÅšfSMõö$o)òª êÞºi†M†¦ÔÇÊÑ@“¸se„=$u¶1õ&Z@ÊdqLÙ±/¶C…¡-B$ª™"ˆu†FÒhEjGÊØ©U×u×ÙÚúØ·Õ[¤=@q+‰c€å¾@q³<'2Êzuåc*¹Á jsz|Tº Ø:vB NuÅ1„2]¸t¥t°i§ÇGì„À’nܼ¥,Y×y¥ª‚nì@åêŠcôãc¢Oq›R×y%e>†»^Ób>FxÈŸ÷Ù衽2Æ9D‚§ ÞSк&ó1!ïÖÞ §»Oš>Ü€|ÏZ±e`MjÌǤþõ¤0BûaïÑ'äc¥Ï´¥vF\@‹jÌǤþõd—Ê¥…ï¦ÞÒ$ð•«+Ž!ôêŠcÈǽºâò1@¯®q¾„2•î¶Ž¨S]qÌ„A ·d]“ —®”î6íôøˆXÒ›·”%ë:¯¤|Þõ’ÏÁáæxT«É|Ì’ÏÁ!©@µÚËǸܻ™…Išè3½×avÇ›bÿÚ'gS¿p­c«å-Å:–½~ƒ¾Ø(@ž&ó1¡¼Ç‡Ï¸žzíµÆó±KIm—ùfT6'7(éèVÖe0Ù ©Ç‘†Å2Ö*ÛªÆ|Lê_©‘ퟮ5Ó\Lé f$eç›^Æ"ìîÇP\ù˜Ô¿2¾‹7+úû8̦¤ò+š¼Kï,¼,צWRè•0£hË2Û«°M¯@ª˜2÷°YÂF7↋¦ÃZz՘ыæ`ù…´zaî-ü}¬™bÎv!Íok¯˜[Ñm*Õ¦ý3ÕHoÏ…¥è%,û eDа)Ýך Ç ©1Ó+üݳ=¾Ø›~ƒh¦¤ =`BšoùåÇWÔsÌ}ªÞ2crò¦áë˜I{ù˜½#:](NÊØ?ÍùC”P•”HHíQcèÛ4÷ $â“6%™-`>Mæc&¤E¡©‹¦Í‘¢Ð·¹|‚dþ²;dHÚf­‹i/3­Þ|Ì ºXÆÎ-С½vŠ·¹£Ós)¾~½mf”´e䙆‹)Ì×k\Ó=MkÛn5yS†k2µnÝÍ @cëù4'z_{Å„ZB¡Ÿ…<»°Š¦ŸcfäþV×Ï%ÌSB³Ãôþ)à§0ÈÖó1ÊÄ”B>@á €Ê‘­ZU>†ì÷Z•î¶Ž¨Sù8FÈÁa;ê0»ô@C.\ºRº Ø´Óã#vB`I7nÞR–,ǘD¼"Ä7½y¡@ê-r94§®ñ1šk;{"6¢®8VÏ»=cÁžX•tÈPKcoaéÝ˲;»4þ:&÷Ö™š×¨ÙÎQº/~gô]Êî|U‹¿A#£hÂØÛšÞká]¡˜7]n“çm¡]UŒ1gCqÃOx7tfü}eÜÛ’Fï[ÊÙ¨VTµ¥Ju†ýv#Üí«ö×[EÙ&ЊZò1z½¿øa±5áOÕð7htŠ[·÷7«>"ÔŠÎT¹š™ÊË«YF¯3Ùo/ ×­èÆ »à MBáÔ7[ªØ®/ˆñÚ䛪%ÓQþ2ð>oûà±½a ;‰²¼o^¡X÷Âîá”ð…}-oz;#'ü¼C—¼¤©¹ 3–WXÆh÷ Ô»ÿ˜OqLÆð—Þïå³Üô ¢SeŽHÅ{WÊÂf'ÙÓ¢ñGF;3uoõ¢‘®W&cçœ)ÒÄý@»ÊÇ1|¸;ì÷{ïOe›ÞÏô {;ÕŒ8°MEÞÊô)Ö`}ê“}]Rño ¬†pFrÅ»¹©Œ<£- XÑœÜ4çO#Fómš6†”ÏǸÈÍ Wxœˆ~_‡¹t!»s‘ÿÔt¦ËâñAoI¡ÃÞ[y#4•#ЫwÿñJê‡"¥¶‘°ô Úd7@‹V’ÁvìÂD¡Œý3Ú¬æOMg¢¢3Õ/‚~ xoE§ô®í?ƒZ“÷[Ó·„-ë -ª+Ž!`ÝöU^ÞL2íª+Ž!ƒID•éI¶æ: ½hr®¬ª: RW3a>¦Â_<`ZåÇù 9˜hX£¼«Öäôø¨t°uì„@ÊÇ1&¯(Ï1ÄlÁ…KWJw›vz|ÄN,éÆÍ[Ê’uWÊ`Ÿ$}š‰qN0ylÅ; ¦TE>f61ÓûÔ%À:Ô’Ùg§wg—ò®c GÒxÄ Zd @£–|L*¤è†Îä]Ç´?ÿÐ5¢–uXì´sÌ(õ,I†®7Ä{jÛ («–|ÌL¢·œâ—nÓ»÷F©›|pP½Zò1ƒ ú¡l³2¹Øšòç•\y¡Œ\±†£pSó©Ø1wÙˆÞ‰<Ä[x×QoŒ3 K3;ÍQe·Q®$J©+ŽÉÎÇÈÙŽÔxí0>H ­UŽø–›Æí]ïÐõŒfIÆÌ'ºc ºÎ+ea`ÍfÙÛ4s€ ª+ŽYG>æâå«¥»°!e‡»VÆ nìkoJ´Œ;1|,`UãcRÿz¼ñ1šá2a7^aÀ E¬*“úדq2H(ãek†öd[U>FÖ! h¢"•âvŽ¡•ucè',"¼íÎVÊZU>¦WʸSRI¹Lox„ɹ÷ðÕß(eÂ[ª¸óå|PP]q̬×+u¢HêÏp$oÆŸXFøt÷‡²ûÜD¯¤û@ƒð­ð‹ÞŸ¶@4¸±{1‰`(úô%Ô&úNž¯QW³ŽûùbyaLàM‰–ìD3+n`1æ°}þŽÐ&‡ÀF‘¢JÙÐø¬Fô™JúA3B™°Hˆâ‘ã@%ÈÇ =Þ9 wâ º½Ï”T®®8f¦ñ1܈s•¢cŒ.«ßûcZ>õÃIR2@êŠcÈÇ`R¸G”.ªHcRÅ¢ÈóõJ†stf*†èwÓb| “¥»?ã¾åN±ÑC´˜P%Õ ¯w¢×`o£åQ'åÎ`äc°Zü>€ÕÛP>&ï&°^ Ùu±¼ª~WÒ X™ºâ˜Yó1ö´BÞ,@mê:¯´Àý|;Ñ›«†SlÐÃíVË:=>*Ýl;!P§ºâ˜%ÇÇ„1J8E¨…%qå<Ê:=>b'–tãæ-eɺÎ+“ú¬R]qÌÈ|Lê_°JuÅ1Ü?kÅÅn0‡ é$ÂØn·Ú„â˜Ý‡Œ‡ð „Úx_l ¬ åcÜ»‰xwä xS¸ÝjUìF)˜äÈëÃȇ}<ÊÇ`ż\Z÷9ü¡,\Ko‚+ðå¦4Ý0Áé$·µTR]ªÔ£Ú”ÔÞeß-Ñ)`£6”‘ñÕÓ.û¨H7;¢<Ü”ÛTM¹'1£9<7"é­åµíd 9ª-‹n ƒöô¦=¢o¥b/Lš’û­›’W õÐgéÌŠ| Ú&9öŽÞÂá»îƒ·„¦ÂŠ©y :¼åÕ˜Úâò1)/·!g\äŠÑbyÝ 1ÓN!5¨+Ž!ƒ 6¡Ò›çwKvS¼Šú¦¼6£uÃÙi:ïÕòÒEyÄÜØ(@)ŒÆZ&o–ï>¥èŠò& +³·¤¦©TekÙ}HÍÈ;ÅvJ­mÖ/îIO?œz;°sÈñê:¯Tíýc°÷ÞÿÚÞ)óÍk¦ö¿ø©÷w¯gãÜ‹³ÑË*™©òºKå…wÝ1‚6HŠNÔÌ èµ¡| V£;xß{ÿk½„D˜¢p§¸/¼ÜLX²·µÞ }м«ÌµØ•­«Y'ƒ:3rµ¬†—Zr a$Z&Ú¬0Qž©WÑ+ï6(áÒ¥^x3Ц—H3c>äc°6-aœC¯7Åò² ^I/½!LÑk¹ÕåwóD›ê^ ©[¿IDAT‡G*ÕMƒ[à¦B)™ðRG7Èpó%»ó—È3•“Ñ›få¥I¢3r÷°¼ö€ uÅ1Ë\¯d˜*åàE©wm”04VÛ$œot õCpTöÆû÷¿Ã‹œt©–ÜÄ`ZuÅ1äcÐ+<Ó±ÀqTÈîTÕ¦gò5Mçt'𙄽(и§¥&iŠ “c| ÚÓ Žéþ+Ý—i’1Ê0nò8ÉmpÝ[AêâÝD*z&hr“ܹÊmÄ»ˆÒ›(ˆÜ!ˆë¿ùÛÿðÿ`Œ99ýø§?óÇÆ˜Ïþ úðïåµF>Æ—w†eyc~£S¼éÞûZÙ~(ڈв¦ÍAóÚ·C|Ü)ÜLŒÜõzª(¯Ys@„a;Q¨;m•„õ ï°Ao|ó£øõ_ûÚ/ýÒÿøŸþóóŸÿ5/|Á·|ú3üžÇ~îû~ý×2Z«+Ž™u|ÌÂ!â¡™¤Fªö^V–LÕuÿÔ”Iý©ïRôÏT®E˜(7(¿¶Cs_¨Ô˜\“ÎÐD¿1Mìf*Wñ‹°áãÔëÞr‡±YÏ{ÞsÿÑ—|‰1æ¾ûî»÷Þ{1ÏzÖ?~Îs¾2¯µºâ˜¹ó1wJÈÆç€Ðoà¿t/Þò¦Gº—zð?üê¿Ëk­®8f±ë•ÜßaþÓ›²‹Ý**Ìî„'ÈS§ÉI®Bc³ÙŽu(òÑžd¦|)aÿæßþû™Z®+ŽY~|L4FéMÛ„WFoœÐñZJ°J‡‡‡3µ\W32“úW®K0Q¿ÜøÑÒ]ÀÖÍñœÞâ.\º²ÊåB…ž|âñAåoܼ¥,YW32“úWFµ~.])ÝlÚéñÑ*wµ.V@Çlôþ1ÑF$fh˪ò1½¢·xêçÞ`J3%e’ÛU@6÷+®Ômf€©l(³wD§ ʼnBû§9ÿÕ ÔÅä‹­G–­÷ s¿‚ø:Bë¶•™PogP]èyç‡Þ hdõAê¿Àž»5fˆ^ä ” åc¦Õ›TÙF®Æ¹·‚ÝÖu¦LØ ´Ž| Ú&ÜoÐ- W7‰›jÞUþ:—[ ;?¨Œ»8ƒZÖß VjÓÛwSSÌ| V"šùЧýÃêÞóq„w±OÀÙŸbéNZ&¯e¡KÑbHa‘Áj»àéSïF÷vl’2SÕŠVdä‡ Üܬ@ ò1X­ýD£R&ÿm½wŒ)3U­°¢M-Ô9¬§B¬@ ”ºâò1˜ÖT¡Œf.rè}ëÅ‚‰Ò XÀÂêŠcæÎÇìÊòyýÁ¬mÄ0”‰V·Ãcýa±?„ͺ­í¡-î”h™Þ^åÕŠVìm.V PІÆÇð²ÞF´þÞ)ÊêB±ÔŸ©]K&†N‰.ÂøZ©¦ø¤ô´‡˜Ï¶ò1÷'©}íýZ _GÿÌû±ÆØP>fþbÔh™ð‡µ›ù_Û²÷›2r£³Ï@¶UåcRÿZö‚‚. ÙŸ¿ÙCWFH«d’sXU>&õ¯žM«Ý ,ãôø¨t°uì„@êŠcòB™ìŠÑ+f{/ÖåüÑÂ.\ºRº Ø´Óã#vB`I7nÞR–¬+Ž™ûz%ûZãpÏ@i†×€%­j|ŒÌ»áfÇˬ„Ü?½w…`uÅ1ÜÏE´>v»õþ@¶ºâ˜åŸ¯D¥9»à>¼KV:¯v¯qßó—ZÃ[-k]L uÅ1äc°°¹YïRÿ†¤ît U©+Žáy×È&ÜmY®•ª®|WùÓÜ eR]õšZ&£–²óa;Ñ)aS[¤ ÑÀtM 4dC×+aÅvçÇkïb7_–…åwçî(¼›ÝÕÝùCÛ)e2Z¤·ee­µÊØåL‚| VÂû<þDZy­¹!NFôvµ·oyýZ+£óÙV–¨hñ\!°Jäc°á˜'<*‡™‘å‡&o¹ùNÙmsùåOáèk¹ä$ bŒèr®9_- é[^ÿ‡¦d–‰-VÁ’j°­|̘aïNU.ïàáþÐ7N2ƛ⊾%”s¸ ›ömPÿS½Z«7ð2âÇDè³7/ýLÛµ…eê´¡|Œ÷ìŽ “4öO¯ŒûVø®;]n0,í¢öoJXF®kÿ ì­e¥öa³úÞ ý —:µäZÊÎ+Ûú-Ü®p‘Ý×ëXF !ÛÊǤ„ßéá—ÑþüU*î·¿[]Ù`43Ô{h®UåcRÿ.à MȬlÇÈ ³lÌš7wâl•XU>&õïR#oe˜O]qÌÁÁA^ä¡©¸OÜ^lb'–tãæ-eÉUш^SºòÂ7Uó^x×b„W.D/܈ÎÔ›»vÉذºâîç ôêŠcŠ<_‰ä ÇÐuUÙÖø¬€7ªzè ëhuoô’;Ñ›n+Ê7 ŠyÓSå‹‹Žñª§{Ít¹€<äc€¸èÍ ½QMîD/&†G¾hùâ¼sÀP!ò1X //2ôr09ß}+ú¤ ¯Ø˜4†é #¤h•Aez;¦²ä–×ÊnÓ袶¶6€âÈÇ` ܼˆI§IÊt—çp¼e4A'ºÔr#òŠžù¥éÞv°6€‚ÈÇDŒr¡l3ëÓJe ôÆäN”í§Þ’okäNß=ýŠ’ç5S÷šî*[^@YÊÇìÎË›Ñ|ÜŽEûYaŸëa ‡yˆ&Ž%Ñ~z‹.cöŒ&YQst¯]¬  ”ºâ˜îç[í±Í~ýÙ?Ý454¢›uÐ L­ðèto¢f MÞÜ£Ã\Æ¿¢R+üd-Œµ,¬®8fáñ1a $úÖÜSd„2û3·³?çáþé–ñŽ%ÑêQvLjV 'zg„‰Âµ›;l9lS¿Ô©Žiªý”»·¬   mq?î ÷ÛÇË‹ìb&„SÌù_ÞÑ)ÑZÈ=Ó;EYØÛ7zÛÌ.–z+ÕŒ¥—K¿¢R%õÝ[7yñ·¶6€‚V•Iýk9©ÔûKzÂZ@cUù˜Ô¿“È‹~øY†™°k€YY>fyÉ•ì” §ØHYU>¦×N})7’fþÆbÞ;]˜’ªåÍÑ©ö3:q NJw[ÇNÔ©®8æàà /”ÑTF8z/²‡sŽjª©Ø® —®”î F7nÞR–¬ë¼R%÷óM¨+Žib| ¨D]q ù WWC>èÕÇzuÅ1äc€^]qLÙ|ÌbOà1L¢®8f| O;`5êŠcôêŠcæÎÇtwý÷à=’Ú{+U&|uªLª©®ç,ŸqŸÂ(DnïÙÝïiŽ^³^B&±ª|LêßAl¶Æ‹<†¦RȾ0·UåcRÿvltbÿT>y1/•²¾Ç:P›Uåczír1}”Ó‹” 3YU>&ƒ7æw’2ÞPb;ž†€€im(ãåWìŸÑ$MXØ--é5mS“ JuÅ1Ü?èÕÇð|% WWC>èÕÇzuÅ1äc€^]q ù WW³…| w‘`*uÅ1 äc¢ª.ÈëF%½  ÛºŸï„O˜IåÝ *ÊǤ‚/=ãþ©™.´ ”:9²¶c[ù˜÷,k÷±öOåtaJƳåHÛ`V–Iý;·e2%äcð¬*“úwV¹–<ä`ð¬$£Ñ™¯ýŬc)o%ù%/”Ùï÷„‡&<’Ëh:0¾Ÿ¬Ï†ò1½Ã›bÿŒ¾ ¸¸qFªLª?šƯÖ¡®8¦¡Ûò€âêŠcxLЫ+Ž!ôêŠcÈǽºâò1@¯®8†| Ы+ŽY,SäÿÜ¿€i•¿žƒ‰†5]4à= @yW•ð™‹Ê*Ñ>XÜÓ€"ÊÇ1&¯ÌqŽiª€Ã{Þ5(¢Š8ÆRF6§bÿµÕms>kâEn'¼ß´ÞŽõ¶¦UW3’@x7ø÷"¤èôÔY'M"·Cæ€9Ô2Î×¼õFàvg—ÂsLÑ€cw&cÖn-äЄZò1©'ÝÐÍuL^þcè¬Ãž„o€ªÔ’É0yާ5«%Ó=¸~ójE‡ýÚrßÂvÂ)`ZUÄ1ƒ.±c;EŸëû•‡ñ íËÓ{+Í0­òq ÏTyêÃó•€^]q ¹ WWC>èÕÇzuÅ1äc€^]q ù Wþºk! k¢Od4ÁS¦£`r tJÝÓExräÝ㹕€u(ǘD¼2ë9¦jŸD][¨YqŒ¥9ŠÛD‹[Ø›¨@ÛNøwJ*dbÏ.H=ë ,ã.oo©·5·ŒfѢ€:ÕÇ(Íq”†)š Ê­V´¯…)C;¶-ãÅy½ýIÕ ZµŒóÝív]VÀ¾ètg—4瘪J!ìÎLR]ÓZXÆËô êO%«Y-ù˜T :ã  ©ÿÄÇÈŽ¥NåÍÑ˸ŒéU©%£çžñŽÊÑÃÜÁР¸¡wd¦5"ÀvÔ’éLR¤RátoÜn8E?|8lJ(ãˆgúÖ¢e„6½åª6¿@TqÌ K¬ÝcmjÀ¬L>bWaÌ4kÖ­–|L˜ºètCg渎É=;#?Wrn^®¥HhQ-ù˜ù¸CL»©K–ëÈUK>¦£Ìˆ§“ô'›¼bBE{«·{ƒNuEkySÜ5-°nUÄ1ƒnã]ô¼!·rE¡ºIœþ g­éLªLoV €Õ+Ç4z_P\]ãcx¾Ы+Ž!7ôêŠcÈǽºâò1@¯®8†| Ы+Ž™6ÞΎܰ&寻r0ѰFóœgåsûÏõV3;0­òqŒIÄ+B|ÓûœçA÷ÒU–µ©ë¼RÞy·–}†€W@ù4é°©°úÎáÍbèìÀUäc†ô¤!ùiÒ½MyÕ½gSÀÜjÉÇØ†—ÉèÎ.yç˜ögÆçèÕÇzuÅ1+ÈÇpÓ*ݵƒšÞû×…åÇÜÙE3;ý,¼Öx´$yÊÇ1&¯ñM‘ï­õA Q “¨"ޱ4ÇøhïñÔîÃMìÙÑ·Ìù' è»Ñ½ö:6èt’¦oš^°)uÅ1 ÃhBžö¸Vôà$o^7¦4}‹ö €-«eœïn·ëŽîöE§;»”wÓ´l÷gÆ7+7µ;3r.¬^-ù˜T¤:“qSx.©mõ€‚jÉÇè ʈ4’@VK>¦£ ;¼P&zŽÆƒâàŽPé•jPÓÃh;ú¾eô€-¨"ŽÉþÑS£z£SR…éÖReR-è›ê]4Ð)ǬྠˆöÆÇl ÉRˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«ˆc@«î)Ýl×ÁÁAé.ÚFƒb^óï*Ý@nܼ¥,Éy%Ð*âÐ*Î+¡}Ú€(âÃø@ãcÀúÇ€VÇ€VÇ %/_½xùªfâbsŸ¤0 ã|Q{ì?¹{'¯îÉÝ;ö…7}²^s¦ÌÊ •¦ZäŒê /8tˆc°©ƒè’×"òn¦]¨{½|7ˆ`AƒŠ¸ {H6AÖ!51•†q§»µÂ)auo¢~¼FÜyu]’ûcË„Â5»ÞÂeæ(OÌî§f0ãcP;{€Œž¾Žˆá»^-ïÈêMì¦Dc½h á|å2ãÙÖ¢kÀè®1¯˜²Ÿƒf#‘âæ¥dB›e ëæÍQ˜éø–åY0†ÀäˆcP /gн(uÌK%iq.¡Öª7 {âÉݬևóJ¨ §BnnF(Vy¶ƒÍ `äcP;ïÄŠ01ú®7àCyŽFnß#4(ÏkÐ\ò:Ð;Ç.¼ðV‹·ۊ΂A¾f²;¹{çÂ¥+§ÇG½Eoܼuxxxûöíº…viö¨7oñœH¥Ê-09Í1¢ K8¯ZÅy% vdb …| hq hq hq hq Öi’û²¬Fê)HsÏeÉês“»7t›ïYZs[ñ'kÝ‹Vº 3"ŽAEºï‘1ß&ö©„ãñ¸îCÝ) w`™Zóq÷·¡ÇÏzd Cg7ù'«xH×Ü—FåÝ[×]£“è½§“ô«kèJÐW‰>,S¹†®“ÞöåµÝ;£T­p°µ4U„wõ»wªÂ [0:koúЮÝý¢K1ë—F¸Ã…í]«©žËz;XÆ®.‹v¯Ä1¨…ûd?QÑ/ÄÔ¯5÷O}ÅèSo7äêÑyyo -GÛ Û”;V´ºÂö£S¢Ë¨lD^„Þ–Ãnh6rm 3ÕôGXTu·JoƒúÝÛ•·~ä]E3¯¡mÊ;ÛÐBÞ—†žf­êKöf:hÅ6„8Ñ|¢„ïJYXqÌçvP7F~;xßP“tisZeäwkøýÞÛŸ9¾Ê3Ú”»-üw§DcÄ"”ûpžÞdª9*×aï^—Q2ZwP¯VŒ8ÉþÐF´¹ÙÚeº1’Þi~O(cŽC«L²Üêy¹„²”œv÷žÏäë\³¤K®Þ½.£¤P†ë•ЮI3ã¿ Jÿª=îNnÂl–µâµ—Ú½W¼ÈfH¦dÌ\ôÕõ{ÝÖöÏ9A-¢ß¿^îô$CN‰ ‹¥jiÊ(û£ïgÆ|õS¼éî†A+!EØX©Y Õ£µ„®ÚyäÔoʼZÊ®ŸiƇbüòj:¬Ùõ$,9ß—†fqôóÊ땦«©¦F~;Ukwr÷Î…KWNz‹Þ¸yëðððöíÛ t í:=>ÒìQ7nÞzÍ¿J.Óî¸36_eØ5lñYûPÃn‡æÑ…%äc`åæ>ºw/Ö}Œ'ˆ©q êÅ·FÓØ|õ˜u[Tµ¡çëLU‹ ã|@«ˆcP£Ô8Á9†ñ§†ée´³äU-^Ñàö¹ªþ_L<ÕKØmùªØ â´G>rLrt‰V&vçÎG9kû³Š/ƒH7>ð‹pŠ;=l$j¤.ÚJm¾°¼[Xs=€ù0>í‘Ã…I‚‰A׎Ÿ:'çïï^IëÝ(Lti/<žjÓ°‰šÇ "Bbß»£—w#÷þöæMôÚéMêD+†7;‰Î.ì¼÷nج{.Q.”W@hJ.<Õ¥(ƒû¯O¸+mh›©*aþÆnh•Ôt ŽA-.7,÷¦D&}$‹Ö FB@ÎT¾kVj¢×ÃèrE—Bî€&]‘j*:y--œžð‚^ý©aß X*DƒªM5ò`ÌèÝe]ÑDÎP“Ô(;ò#íyo mjªFT‚8U+;Ä!uÂhnyóR&™èÉ|¼þxÃxÉ—ÄõJhCÁÄLÁCc=¸±BÙžxºK‡ò.«mYd ƒZ„ׯžLñà´“ØSÓ”×ʦjŒläåÞ•;0è`ͺ³þ£ME‡1…£¡ÇŸEßÕAUÈñœHLlÂçDbMÆ\X4·¼.Õ¼D@ëôωä¼€%dä9–tqÈí˜/ž¿;A Pç•,Ä»º»c.\ªpq€M!ZEZEZEZEZEZEZEZEZEZEZ5ìùJO>ñ¸æÉØ Ç\¿~}¾~`ƒnܼUº €¶ ˆcÈÄ€\¿~]u ;¯L…ô`<â”Az0×+€VÇ€VÇ€VÇ€VÇ€VÇ€VÇ€VqÿX³‹—¯–î¼NîÞñ¦\¸t¥HO–qíÚµ'ŸxÜ›¸ÁE¶ˆc`åöû}é.ÌâÚµk‡‡‡Ñ·Öz§Má±t\äq ¬ßúr

    These instructions explain how to setup VLFeat in MATLAB (at least 2009B) using the binary distribution (it is also possible to compile the library and toolbox from source, including running on earlier MATLAB versions by disabling some features such as OpenMP support).

    One-time setup

    Download and unpack the latest VLFeat binary distribution in a directory of your choice (e.g. ~/src/vlfeat). Let VLFEATROOT denote this directory. VLFeat must be added to MATLAB search path by running the vl_setup command found in the VLFEATROOT/toolbox directory. From MATLAB prompt enter

    >> run('VLFEATROOT/toolbox/vl_setup') VLFeat 0.9.17 ready.

    To check that VLFeat is sucessfully installed, try to run the vl_version command:

    >> vl_version verbose VLFeat version 0.9.17 Static config: X64, little_endian, GNU C 40201 LP64, POSIX_threads, SSE2, OpenMP 4 CPU(s): GenuineIntel MMX SSE SSE2 SSE3 SSE41 SSE42 OpenMP: max threads: 4 (library: 4) Debug: yes SIMD enabled: yes

    Permanent setup

    To permanently add VLFeat to your MATLAB environment, add this line to your startup.m file:

    run('VLFEATROOT/toolbox/vl_setup')

    When you restart MATLAB, you should see the VLFeat greeting message.

    Getting started

    All commands embed interface documentation that can be viewed with the builtin help command (e.g. help vl_sift).

    VLFeat bundles a large number of demos. To use them, add the demo path with vl_setup demo. For example, a sift demo vl_demo_sift_basic can be run using the following:

    >> vl_setup demo >> vl_demo_sift_basic

    To see a list of demos TAB-complete vl_demo at MATLAB prompt, after running vl_setup demo.

    vlfeat/docsrc/vlfeat-website-preproc.xml0000644000175000017500000000177212237004745017350 0ustar dimadima
    vlfeat/docsrc/license.html0000644000175000017500000000037312237004736014541 0ustar dimadima

    VLFeat is distributed under the BSD license:

    vlfeat/docsrc/using-gcc.html0000644000175000017500000000175312237004745015001 0ustar dimadima

    These instructions show how to setup a basic C++ project which uses the VLFeat library and the g++ compiler. Our project will consist of the following simple file, which we will refer to as main.cpp:

    extern "C" { #include <vl/generic.h> } int main (int argc, const char * argv[]) { VL_PRINT ("Hello world!") ; return 0; }

    Notice that the extern "C" is required for C++ projects. Compiling the project is straightforward. From the command prompt type:

    $ g++ main.cpp -o vlfeat-test -IVLROOT -LVLROOT/bin/a64/ -lvl

    In this example, replace VLROOT with the path to your VLFeat installation and replace a64 with your architecture (a64 for 64 bit linux, glx for 32 bit linux).

    vlfeat/docsrc/figures/0000755000175000017500000000000012237035722013671 5ustar dimadimavlfeat/docsrc/figures/mser-tree.fig0000644000175000017500000000464012237004736016270 0ustar dimadima#FIG 3.2 Produced by xfig version 3.2.5-alpha5 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 4125 2475 5625 2475 5625 2550 4125 2550 4125 2475 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 3750 2100 6150 2100 6150 2175 3750 2175 3750 2100 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 1 1 2.00 90.00 135.00 2175 3300 7200 3300 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 2100 2475 2700 2475 2700 2550 2100 2550 2100 2475 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 2100 2100 2925 2100 2925 2175 2100 2175 2100 2100 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 6750 2475 7050 2475 7050 2550 6750 2550 6750 2475 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 6450 2100 7050 2100 7050 2175 6450 2175 6450 2100 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 4350 2850 5400 2850 5400 2925 4350 2925 4350 2850 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 2100 2850 2550 2850 2550 2925 2100 2925 2100 2850 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 6975 2850 7050 2850 7050 2925 6975 2925 6975 2850 2 1 2 1 0 0 47 -1 20 3.000 0 0 -1 0 0 1 4950 2625 2 1 0 1 0 0 45 -1 20 3.000 0 0 -1 1 0 5 1 1 1.00 60.00 120.00 4875 2850 4875 2775 4875 2700 4875 2625 4875 2550 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 2100 1725 7050 1725 7050 1800 2100 1800 2100 1725 2 1 0 1 0 0 45 -1 20 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4875 2475 4875 2175 2 1 0 1 0 0 45 -1 20 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4875 2100 4875 1800 2 1 0 1 0 0 45 -1 20 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2325 2850 2325 2550 2 1 0 1 0 0 45 -1 20 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2325 2475 2325 2175 2 1 0 1 0 0 45 -1 20 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2325 2100 4875 1800 2 1 0 1 0 0 45 -1 20 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 7050 2850 7050 2550 2 1 0 1 0 0 45 -1 20 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 7050 2475 7050 2175 2 1 0 1 0 0 45 -1 20 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 7050 2100 4950 1800 3 2 0 4 0 7 43 -1 -1 0.000 0 0 0 14 2475 3000 2700 2475 3000 2100 3375 1950 3750 2100 4125 2475 4425 2925 4800 3150 5250 3000 5625 2475 6075 2100 6450 2100 6825 2625 7050 3000 0.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 0.000 4 0 0 47 -1 0 12 0.0000 2 195 4920 2250 3600 Extremal regions are arranged in a tree of netsed regions.\001 4 0 0 45 -1 0 12 0.0000 2 210 540 7125 3075 $I(x)$\001 4 0 0 45 -1 0 12 0.0000 2 180 315 7200 3375 $x$\001 vlfeat/docsrc/figures/cell-bins.fig0000644000175000017500000001054512237004736016236 0ustar dimadima#FIG 3.2 Produced by xfig version 3.2.5b Landscape Center Inches Letter 150.00 Single -2 1200 2 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 3900 102150 60 60 3900 102150 3960 102150 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 4200 102150 60 60 4200 102150 4260 102150 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 4500 102150 60 60 4500 102150 4560 102150 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 4800 102150 60 60 4800 102150 4860 102150 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5100 102150 60 60 5100 102150 5160 102150 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5400 102150 60 60 5400 102150 5460 102150 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5700 102150 60 60 5700 102150 5760 102150 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6000 102150 60 60 6000 102150 6060 102150 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6300 102150 60 60 6300 102150 6360 102150 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6600 102150 60 60 6600 102150 6660 102150 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6900 102150 60 60 6900 102150 6960 102150 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 7200 102150 60 60 7200 102150 7260 102150 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 7500 102150 60 60 7500 102150 7560 102150 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3750 102150 3750 102000 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 4200 102150 4200 101250 2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2 5100 102150 4200 101250 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4050 102150 4050 102000 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4350 102150 4350 102000 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4650 102150 4650 102000 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4950 102150 4950 102000 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 5250 102150 5250 102000 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 5550 102150 5550 102000 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 5850 102150 5850 102000 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 6150 102150 6150 102000 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 6450 102150 6450 102000 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 6750 102150 6750 102000 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 7050 102150 7050 102000 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 7350 102150 7350 102000 2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2 6000 102150 5100 101250 2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2 5100 101250 4200 102150 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 3750 102600 3750 102750 4650 102750 4650 102600 2 1 2 1 0 7 50 -1 -1 2.000 0 0 -1 0 1 2 2 1 1.00 60.00 60.00 3750 101925 3750 101100 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 4650 102600 4650 102750 5550 102750 5550 102600 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4200 103125 4200 103275 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 5100 103125 5100 103275 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 2 1 1.00 60.00 60.00 3750 103200 6450 103200 2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2 6000 101250 5100 102150 2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2 6900 102150 6000 101250 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 5550 102600 5550 102750 6450 102750 6450 102600 2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2 4200 101250 3750 101700 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 6450 102600 6450 102750 7350 102750 7350 102600 2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2 6900 101250 6000 102150 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 7650 102150 7650 102000 2 1 2 1 0 7 50 -1 -1 2.000 0 0 -1 0 0 4 7350 102600 7350 102750 8250 102750 8250 102600 2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2 7650 102000 6900 101250 2 1 2 1 0 7 50 -1 -1 2.000 0 0 -1 0 1 2 2 1 1.00 60.00 60.00 7650 101925 7650 101100 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3750 102150 7650 102150 4 1 0 50 -1 0 10 0.0000 2 135 225 3750 102450 $0$\001 4 1 0 50 -1 0 10 0.0000 2 135 225 4050 102450 $1$\001 4 1 0 50 -1 0 10 0.0000 2 135 225 4350 102450 $2$\001 4 1 0 50 -1 0 10 0.0000 2 135 225 4650 102450 $0$\001 4 1 0 50 -1 0 10 0.0000 2 135 540 4200 102675 $\\Delta$\001 4 1 0 50 -1 0 10 0.0000 2 150 825 3900 102450 $\\frac{1}{2}$\001 4 1 0 50 -1 0 10 0.0000 2 135 495 4200 102975 cell $0$\001 4 1 0 50 -1 0 10 0.0000 2 135 1230 3750 101025 left image boundary\001 4 1 0 50 -1 0 10 0.0000 2 135 495 5100 102975 cell $1$\001 4 1 0 50 -1 0 10 0.0000 2 135 225 4200 103425 $0$\001 4 1 0 50 -1 0 10 0.0000 2 135 225 5100 103425 $1$\001 4 1 0 50 -1 0 10 0.0000 2 135 495 6000 102975 cell $2$\001 4 0 0 50 -1 0 10 0.0000 2 135 1755 6525 103200 distance to center of cell $0$\001 4 1 0 50 -1 0 10 0.0000 2 135 495 6900 102975 cell $3$\001 4 1 0 50 -1 0 10 0.0000 2 135 1305 7650 101025 right image boundary\001 vlfeat/docsrc/figures/mser-er.fig0000644000175000017500000000664712237004736015750 0ustar dimadima#FIG 3.2 Produced by xfig version 3.2.5-alpha5 Landscape Center Inches Letter 100.00 Single -2 1200 2 1 3 0 4 0 0 47 -1 20 7.500 1 0.0000 9750 2250 46 46 9750 2250 9796 2255 1 3 0 4 0 0 47 -1 20 7.500 1 0.0000 12225 3000 46 46 12225 3000 12271 3005 1 3 0 4 0 0 47 -1 20 7.500 1 0.0000 13350 1800 46 46 13350 1800 13396 1805 2 1 0 1 0 7 48 -1 -1 0.000 0 0 -1 0 0 2 2100 2475 2700 2475 2 1 0 1 0 7 48 -1 -1 0.000 0 0 -1 0 0 2 2100 2100 3000 2100 2 1 0 1 0 7 48 -1 -1 0.000 0 0 -1 0 0 2 3750 2100 6075 2100 2 1 0 1 0 7 48 -1 -1 0.000 0 0 -1 0 0 2 4125 2475 5625 2475 2 1 0 1 0 7 48 -1 -1 0.000 0 0 -1 0 0 2 6750 2475 7200 2475 2 1 0 1 0 7 48 -1 -1 0.000 0 0 -1 0 0 2 6450 2100 7200 2100 2 1 2 1 0 7 51 -1 -1 4.500 0 0 -1 0 0 2 2100 2475 7200 2475 2 1 2 1 0 7 51 -1 -1 4.500 0 0 -1 0 0 2 2100 2100 7200 2100 2 1 0 1 0 7 51 -1 -1 0.000 0 0 -1 0 0 2 7350 2100 7350 2475 2 1 2 1 0 7 47 -1 -1 3.000 0 0 -1 0 0 2 4125 2475 4125 1725 2 1 2 1 0 7 47 -1 -1 3.000 0 0 -1 0 0 2 3750 2100 3750 1725 2 1 2 1 0 7 47 -1 -1 3.000 0 0 -1 0 0 2 5625 2475 5625 1725 2 1 2 1 0 7 47 -1 -1 3.000 0 0 -1 0 0 2 6150 2100 6150 1725 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 5625 1725 6150 1725 6150 1800 5625 1800 5625 1725 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 4125 2475 5625 2475 5625 2550 4125 2550 4125 2475 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 3750 2100 6150 2100 6150 2175 3750 2175 3750 2100 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 3750 1725 4125 1725 4125 1800 3750 1800 3750 1725 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 1 1 2.00 90.00 135.00 2175 3300 7200 3300 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 1 1 2.00 90.00 135.00 8400 3300 13425 3300 2 1 0 4 0 15 47 -1 -1 7.500 0 0 -1 0 0 2 9750 3000 12225 3000 2 1 0 4 0 15 47 -1 -1 7.500 0 0 -1 0 0 2 8400 2250 9750 2250 2 1 2 0 0 15 47 -1 20 1.500 0 0 -1 0 0 2 8700 4125 11400 4125 2 1 0 4 0 15 47 -1 -1 7.500 0 0 -1 0 0 2 12225 1800 13350 1800 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 9750 3000 12225 3000 12225 3075 9750 3075 9750 3000 2 1 2 1 0 0 47 -1 20 3.000 0 0 -1 0 0 2 9750 2325 9750 3000 2 1 2 1 0 0 47 -1 20 3.000 0 0 -1 0 0 2 12225 1800 12225 3000 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 8400 2250 12225 2250 12225 2325 8400 2325 8400 2250 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 9750 2625 12225 2625 12225 2700 9750 2700 9750 2625 2 2 2 0 0 15 50 -1 20 1.500 0 0 -1 0 0 5 8400 1950 12225 1950 12225 2025 8400 2025 8400 1950 3 2 0 4 0 7 43 -1 -1 0.000 0 0 0 14 2475 3000 2700 2475 3000 2100 3375 1950 3750 2100 4125 2475 4425 2925 4800 3150 5250 3000 5625 2475 6075 2100 6450 2100 6825 2625 7050 3000 0.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 0.000 4 0 0 51 -1 0 12 0.0000 2 180 735 7425 2400 $\\Delta$\001 4 1 0 47 -1 0 12 0.0000 2 180 945 4950 1800 $\\Delta A$\001 4 1 0 47 -1 0 12 0.0000 2 210 1350 4875 2325 $R_{l+\\Delta}$\001 4 1 0 47 -1 0 12 0.0000 2 210 495 4875 2700 $R_l$\001 4 0 0 47 -1 0 12 0.0000 2 195 5055 8400 3600 Discontinuities cause multiple extremal regions to coincide.\001 4 0 0 47 -1 0 12 0.0000 2 195 4950 2250 3600 Extremal regions are connected components of level sets.\001 4 0 0 47 -1 0 12 0.0000 2 195 4665 2250 3855 Extremal regions variation is used to compute stability.\001 4 0 0 45 -1 0 12 0.0000 2 180 315 13500 3375 $x$\001 4 0 0 45 -1 0 12 0.0000 2 180 315 7275 3375 $x$\001 4 0 0 45 -1 0 12 0.0000 2 210 540 7125 3075 $I(x)$\001 4 0 0 45 -1 0 12 0.0000 2 210 540 12525 2025 $I(x)$\001 vlfeat/docsrc/figures/dhog-bins.fig0000644000175000017500000000520112237004736016231 0ustar dimadima#FIG 3.2 Produced by xfig version 3.2.5 Landscape Center Inches Letter 100.00 Single -2 1200 2 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 3750 300 75 75 3750 300 3825 300 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 1950 300 75 75 1950 300 2025 300 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 2550 -300 75 75 2550 -300 2625 -300 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 3150 -300 75 75 3150 -300 3225 -300 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 1950 -1800 75 75 1950 -1800 2025 -1800 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 2550 -2400 75 75 2550 -2400 2625 -2400 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 3150 -1800 75 75 3150 -1800 3225 -1800 2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 1950 -1200 1950 600 2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 3150 -1200 3150 600 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 2550 600 2550 450 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 1949 600 1949 450 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 1348 600 1348 450 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3149 600 3149 450 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3749 600 3749 450 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 1 2 1 1 1.00 72.31 144.62 5625 600 602 600 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4350 600 4350 450 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4950 600 4950 450 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 2850 600 4050 -600 5250 600 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 1650 600 2850 -600 4050 600 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 1350 -2550 3750 -2550 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 1350 -1200 2550 -2400 3750 -1200 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 2550 -1200 3750 -2400 4950 -1200 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 1275 -2475 1425 -2625 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3675 -2475 3825 -2625 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 1950 -3000 3150 -3000 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 1875 -2925 2025 -3075 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3075 -2925 3225 -3075 2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 1950 -3000 1950 -1200 2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 3150 -3000 3150 -1200 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 2550 -1200 2550 -1350 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 1949 -1200 1949 -1350 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 1348 -1200 1348 -1350 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3149 -1200 3149 -1350 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3749 -1200 3749 -1350 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 1 2 1 1 1.00 72.31 144.62 5625 -1200 602 -1200 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4350 -1200 4350 -1350 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4950 -1200 4950 -1350 4 1 0 50 -1 0 10 0.0000 2 135 645 2550 -2700 $2\\Delta $\001 4 1 0 50 -1 0 10 0.0000 2 135 705 2550 -3150 $\\Delta=2$\001 vlfeat/docsrc/figures/liop.svg0000644000175000017500000005142212237004745015362 0ustar dimadima image/svg+xml $\mathbf{x}$ $\mathbf{x}_1$ $\mathbf{x}_2$ $\mathbf{x}_3$ $\mathbf{x}_4$ $r$ vlfeat/docsrc/encode.html0000644000175000017500000001047112237042456014355 0ustar dimadima %tableofcontents;

    This short tutorial shows how to compute Fisher vector and VLAD encodings with VLFeat MATLAB interface.

    These encoding serve a similar purposes: summarising in a vectorial statistic a number of local feature descriptors (e.g. SIFT). Similarly to bag of visual words, they compare local descriptor to a dictionary, obtained with vectonr quantization (KMeans) in the case of VLAD and Gaussina Mixture Models for Fisher Vectors. However, rather than storing visual word occurences only, these representation store the difference between dictonary elements and pooled local features.

    Fisher encoding

    The Fisher encoding uses GMM to construct a visual word dicionary. To exemplify constructing a GMM, we consider a number of 2 dimensional data points (see also the GMM tutorial). In practice, these would be a collection of SIFT or other local image features:

    numFeatures = 5000 ; dimension = 2 ; data = rand(dimension,numFeatures) ; numClusters = 30 ; [means, covariances, priors] = vl_gmm(data, numClusters);

    Next we create another random set of vectors, which should be encoded using the Fisher vector representation and the GMM just obtained.

    numDataToBeEncoded = 1000; dataToBeEncoded = rand(dimension,numDataToBeEncoded);

    The Fisher vector encoding enc of these vectors is obtained by calling the vl_fisher function using the output of the vl_gmm function:

    encoding = vl_fisher(datatoBeEncoded, means, covariances, priors);

    The encoding vector is the Fisher vector representation of the data dataToBeEncoded.

    Note that Fihser vectors support several normalization options that can affect substantially the performance of the representation.

    VLAD encoding

    The Vector of Linearly Agregated Descriptors is similar to Fisher vectors but (i) it does not store second-order information about the features and (ii) it typically use KMeans instead of GMMs to generate the feature vocabulary (although the latter is also an option).

    Consider the same 2D data matrix data used in the previous section to train the Fisher vector representation. To compute VLAD, we first need to obtain a visual word dictionary. This time, we use K-means:

    numClusters = 30 ; centers = vl_kmeans(dataLearn, numClusters);

    Now consider the data dataToBeEncoded and use the vl_vlad function to compute the encoding. Differently from vl_fhiser, vl_vlad requires the data-to-cluster assignments to be passed in. This allows using a fast vector quantization technique (e.g. kd-tree) as well as switching from soft to hard assignment.

    In this example, we use a kd-tree for quantization:

    kdtree = vl_kdtreebuild(centers) ; nn = vl_kdtreequery(kdtree, centers, dataEncode) ;

    Now we have in the nn the indeces of the nearest center to each vector in the matrix dataToBeEncoded. The next step is to create an assignment matrix:

    assignments = zeros(numClusters,numDataToBeEncoded); assignments(sub2ind(size(assignments), nn, 1:length(nn))) = 1;

    It is now possible to encode the data using the vl_vlad function:

    enc = vl_vlad(dataToBeEncoded,centers,assignments);

    Note that, similarly to Fisher vectors, VLAD supports several normalization options that can affect substantially the performance of the representation.

    vlfeat/docsrc/vlfeat.bib0000644000175000017500000001376112237004745014175 0ustar dimadima%% This BibTeX bibliography file was created using BibDesk. %% http://bibdesk.sourceforge.net/ %% Created for Andrea Vedaldi at 2013-07-12 10:15:57 +0100 %% Saved with string encoding Unicode (UTF-8) @string{bmvc = {Proc. {BMVC}}} @string{cvpr = {Proc. {CVPR}}} @string{eccv = {Proc. {ECCV}}} @string{iccv = {Proc. {ICCV}}} @string{icip = {Proc. {ICIP}}} @string{icml = {Proc. {ICML}}} @string{icpr = {Proc. {ICPR}}} @string{ijcv = {{IJCV}}} @string{inria = {{INRIA}}} @string{mit = {{MIT}}} @string{nips = {Proc. {NIPS}}} @string{pami = {{PAMI}}} @string{siggraph = {Proc. {SIGGRAPH}}} @inproceedings{arandjelovic13all-about, Author = {R. Arandjelovic and A. Zisserman}, Booktitle = cvpr, Title = {All about {VLAD}}, Year = {2013}} @inproceedings{jaakkola98exploiting, Author = {T. S. Jaakkola and D. Haussler}, Booktitle = nips, Title = {Exploiting generative models in discriminative classifiers}, Year = {1998}} @inproceedings{perronnin06fisher, Author = {F. Perronnin and C. Dance}, Booktitle = cvpr, Title = {Fisher Kenrels on Visual Vocabularies for Image Categorizaton}, Year = {2006}} @article{matsumoto98mersenne, Author = {M. Matsumoto and T. Nishimura}, Journal = {ACM Trans. Model. Comput. Simul.}, Number = {1}, Title = {Mersenne twister: a 623-dimensionally equidistributed uniform pseudo-random number generator}, Volume = {8}, Year = {1998}} @inproceedings{vedaldi10efficient, Author = {A. Vedaldi and A. Zisserman}, Booktitle = cvpr, Title = {Efficient Additive Kernels via Explicit Feature Maps}, Year = {2010}} @article{vedaldi12efficient, Author = {A. Vedaldi and A. Zisserman}, Journal = pami, Number = {3}, Title = {Efficient Additive Kernels via Explicit Feature Maps}, Volume = {34}, Year = {2012}} @book{lindeberg94scale-space, Author = {T. Lindeberg}, Publisher = {Springer}, Title = {Scale-Space Theory in Computer Vision}, Year = {1994}} @inproceedings{witkin83scale-space, Author = {A. P. Witkin}, Booktitle = {Proc. Int. Conf. on Artificial Intelligence}, Title = {Scale-Space Filtering}, Year = {1983}} @techreport{achanta10slic, Author = {R. Achanta and A. Shaji and K. Smith and A. Lucchi and P. Fua and S. Susstrunk}, Institution = {EPFL}, Title = {{SLIC} Superpixels}, Year = {2010}} @article{shalev-shwartz10pegasos:, Author = {S. Shalev-Shwartz and Y. Singer and N. Srebro and A. Cotter}, Journal = {{MBP}}, Title = {Pegasos: {P}rimal {E}stimated sub-{G}r{A}dient {SO}lver for {SVM}}, Year = {2010}} @inproceedings{shalev-shwartz07pegasos, Author = {S. Shalev-Shwartz and Y. Singer and N. Srebro}, Booktitle = icml, Title = {Pegasos: Primal Estimated sub-{GrAdient SOlver for SVM}}, Year = {2007}} @article{lloyd82least, Author = {S. Lloyd}, Journal = {{IEEE} Trans. on Information Theory}, Number = {2}, Title = {Least square quantization in {PCM}}, Volume = {28}, Year = {1982}} @inproceedings{silpa-anan08optimised, Author = {C. Silpa-Anan and R. Hartley}, Booktitle = cvpr, Title = {Optimised {KD}-trees for fast image descriptor matching}, Year = {2008}} @inproceedings{muja09fast, Author = {M. Muja and D. G. Lowe}, Booktitle = {Proc. {VISAPP}}, Title = {Fast Approximate Nearest Neighbors with Automatic Algorithmic Configuration}, Year = {2009}} @inproceedings{beis97shape, Author = {J. S. Beis and D. G. Lowe}, Booktitle = cvpr, Title = {Shape Indexing Using Approximate Nearest-Neighbour Search in High-Dimensional Spaces}, Year = {1997}} @inproceedings{vedaldi08quick, Author = {A. Vedaldi and S. Soatto}, Booktitle = eccv, Title = {Quick Shift and Kernel Methods for Mode Seeking}, Year = {2008}} @inproceedings{arthur07k-means, Author = {D. Arthur and S. Vassilvitskii}, Booktitle = {Proc. {ACM-SIAM} Symp. on Discrete Algorithms}, Title = {{\tt k-means++}: The Advantages of Careful Seeding}, Year = {2007}} @article{koenderink84the-structure, Author = {Koenderink, J.}, Journal = {Biological Cybernetics}, Title = {The Structure of Images}, Volume = {50}, Year = {1984}} @inproceedings{elkan03using, Author = {C. Elkan}, Booktitle = {Proc. {ICML}}, Title = {Using the Triangle Inequality to Accelerate $k$-Means}, Year = {2003}} @techreport{lindeberg98principles, Author = {T. Lindeberg}, Institution = {Royal Institute of Technology}, Number = {ISRN KTH/NA/P 98/14 SE}, Title = {Principles for Automatic Scale Selection}, Year = {1998}} @inproceedings{lowe99object, Author = {Lowe, D. G.}, Booktitle = iccv, Title = {Object Recognition from Local Scale-Invariant Features}, Year = {1999}} @inproceedings{matas03robust, Author = {Matas, J. and Chum, O. and Urban, M. and Pajdla, T.}, Booktitle = bmvc, Title = {Robust Wide Baseline Stereo from Maximally Stable Extremal Regions}, Year = {2002}} @inproceedings{jegou10aggregating, Author = {Jegou, H. and Douze, M. and Schmid, C. and Perez, P.}, Booktitle = cvpr, Title = {Aggregating local descriptors into a compact image representation}, Year = {2010}} @article{dempster77maximum, Author = {A. P. Dempster and N. M. Laird and D. B. Rubin}, Journal = {Journal Of The Royal Statistical Society}, Number = {1}, Pages = {1--38}, Title = {Maximum likelihood from incomplete data via the EM algorithm}, Volume = {39}, Year = {1977}} @inproceedings{perronnin10improving, Author = {Florent Perronnin and Jorge S{\'a}nchez and Thomas Mensink}, Booktitle = eccv, Title = {Improving the fisher kernel for large-scale image classification}, Year = {2010}} @inproceedings{hsieh08a-dual, Author = {Hsieh, C.-J. and Chang, K.-W. and Lin, C.-J. and Keerthi, S. S. and Sundararajan, S.}, Booktitle = icml, Title = {A dual coordinate descent method for large-scale linear SVM}, Year = {2008}} @inproceedings{shwartz13a-dual, Author = {S. Shalev-Shwartz and T. Zhang}, Number = {arXiv:1209.1873v2}, Title = {Stochastic Dual Coordinate Ascent Methods for Regularized Loss Minimization}, Year = {2013}} @inproceedings{wang11local, Author = {Wang, Z. and Fan, B. and Wu, F.}, Booktitle = iccv, Title = {Local Intensity Order Pattern for Feature Description}, Year = {2011}} vlfeat/docsrc/wikidoc.py0000644000175000017500000000245512237004736014237 0ustar dimadima#!/usr/bin/python import sys,os def usage(): print "Usage:", sys.argv[0], " " print "" print "Replaces wiki documentation with documentation from html files" def wikidoc(pagename, htmlfile): f = open(htmlfile) doclines = f.readlines() f.close() starttag = "" endtag = "" doclines.insert(0, starttag + '\n') doclines.append('\n' + endtag + '\n') wikilines = [] if os.path.exists(pagename): f = open(pagename) wikilines = f.readlines() f.close() startline = -1 endline = -1 for i in range(len(wikilines)): if wikilines[i].strip() == starttag and startline == -1: startline = i if wikilines[i].strip() == endtag and endline == -1: endline = i if startline == -1 or endline == -1 or startline >= endline: print "Wikidoc warning: Didn't find tags for", pagename startline = 0 endline = 0 wikilines = wikilines[:startline] + doclines + wikilines[endline+1:] f = open(pagename, 'w') f.writelines(wikilines) f.close() if __name__ == '__main__': if len(sys.argv) != 3: usage() sys.exit(2) print "wikidoc: using", sys.argv[1], "for page", sys.argv[2] wikidoc(sys.argv[1], sys.argv[2]) vlfeat/docsrc/vlfeat.css0000644000175000017500000002141012237004745014217 0ustar dimadima/* div, p, ul, li, ol, img {border: 1px solid red ;} */ html, body, div, img, dl { margin: 0px ; padding: 0px ; border-style: none ; /* ie again */ } html { } body { font-size: 14px ; line-height: 18px ; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif ; background-color: #f6f6f6 ; } table { font: inherit ; color: inherit ; } h1, h2, h3, h4, h5, h6 { font-weight: bold ; } a { color: #004fdc; } a.plain { text-decoration: inherit ! important ; color: inherit ! important ; } b { color: rgb(40,40,40) ; } pre, code { font-family: 'Bitstream Vera Sans Mono', monospace ; } code { color: #BA2121 ; } code a { font-weight: bold ; text-decoration: none ; color: inherit ! important ; } .clear { clear: both ; margin: 0px ; padding: 0px ; font-size: 1px ; line-height: 1px ; } .standout { margin: 1em ! important ; font-family: Helvetica, sans-serif ; font-style: italic ; color: red ! important ; } .clearfix { display: inline-block ; width: 100% ; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* Sidebar */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ #sidebar { float: left ; width: 180px ; min-height: 100% } #sidebar ul { margin: 1em 0 ; padding: 0 ; padding-right: 1.1em ; line-height: 1em ; } #sidebar ul ul { margin: 0 ; } #sidebar li { list-style: none ; /* for buggy IE */ margin: 1em 0 ; padding: 0 ; font-weight: bold ; } #sidebar li li { margin: 0.5em 0 ; margin-left: 1em ; font-weight: normal ; } #sidebar li a { color: rgb(40,40,40) ; text-decoration: none ; } #sidebar li .active a { text-decoration: none ; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* Header */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ #header-section { background-color: #183a60 ; } #header { width: 920px ; margin-left: auto ; margin-right: auto ; padding: 20px 1em ; } #header #cse-search-box { float: right ; margin-right: 1em ; margin-top: auto ; margin-bottom: auto ; } #header h1 { margin: 0 ; color: white ; font-family: 'Trebuchet MS', Helvetica, sans-serif ; } #header h1 a { text-decoration: none ; color: white ; } #dotorg { color: #AAA ; } #google { float: right ; width: 20em ; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* Head banner */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ #headbanner-section { border-bottom: 1px solid #DDD ; } #headbanner { width: 920px ; margin-left: auto ; margin-right: auto ; padding: 7px 1em ; color: #5a5a5a ; font-weight: bold ; font-size: 15px ; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* Content */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ #content-section { background-color: white ; } #content-wrapper { width: 920px ; margin-left: auto ; margin-right: auto ; padding: 0 1em ; } #content { overflow: hidden ; } #content h1, #content h2, #content h3, #content h4, #content h5, #content h6 { margin: 1em 0 ; margin-top: 1.7em ; } #content h1 {font-size:1.4em; margin-bottom: 0.5em;} #content h2 {font-size:1.3em; margin-bottom: 0.5em;} #content h3 {font-size:1.2em; margin-bottom: 0.5em;} #content h4 {font-size:1.1em; margin-bottom: 0.5em;} #content h5 {font-size:1.0em; margin-bottom: 0.5em;} #content h6 {font-size:1.0em; margin-bottom: 0.5em;} #content p, #content blockquote, #content div.figure, #content div.p { margin: 1em 0 ; } #content blockquote { margin: 1em ; font-style: italic ; } #content pre { margin: 1em 0 ; padding: 0 ; } #content div.highlight { margin: 1em 0 ; background-color: #f6f6f6 ; border-top: 1px solid #DDD ; border-bottom: 1px solid #DDD ; } #content div.highlight pre { margin: 0px ; padding: 0.5em ; padding-left: 1em ; margin-right: 5em ; } #content ul, #content ol { margin-left: 0; padding-left: 0 ; } #content li { margin-left: 1.2em ; padding-left: 0 ; } #content ol li { margin-left: 2em ; } #content dt { font-weight: bold ; text-align: left ; } #content dd { display: block ; margin: 0.25em 0 ; padding-left: 2em ; } #content dd p, #content dd ul { margin-top: 0 ; } #content .centered { display: block ; margin-left: 2em ; } #content div.figure { margin-top: 1em ; margin-bottom: 1em ; text-align: center ; } #content div.caption { font-family: Lucida, Helvetica, sans-serif ; font-style: italic ; } /* for buggy IE 6 */ #content div.caption span.content { display: inline ; zoom: 1 ; } #content div.caption span.content { display: inline-block ; text-align: left ; max-width: 40em ; } #content div.box { background-color: #f6f6f6 ; border: 1px solid #DDD ; padding: 0.5em ; } #content table.onecol td { width: 100% ; } #content table.twocols td { width: 50% ; } #content table.threecols td { width: 33% ; } #content table.boxes { min-width: 100% ; border-collapse: separate ; border-spacing: 4px ; /* margin: -13px ; */ padding: 0em ; box-sizing:border-box ; /* avoids exceeding 100% width */ } #content table.boxes td { vertical-align: top ; background-color: #f6f6f6 ; border: 1px solid #DDD ; padding: 0.5em ; } #content .boxes h1 { font-size: 1.2em ; margin: 0px ; } #content .boxes ul { margin-top: 0.25em ; margin-bottom: 0.5em ; } #content .boxes p { margin-top: 0.25em ; margin-bottom: 0.5em ; padding: 0px ; } #content img.image-right { float: right ; } #content div.parbox { border: 1px dotted #333 ; padding: 0em 1em ; margin-right: 10em ; } #content div.parbox p, #content div.parbox blockquote, #content div.pargox div.figure, #content dd blockquote { padding-right: 0em ; } #content ul.text { padding-right: 10em ; } #content ul.text li { margin-top: 1em ; margin-bottom: 1em ; } #pagebody { background-color: #eee ; display: inline-block; width: 100%; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* Footer */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ #footer-section { clear: both ; border-top: 1px solid #DDD ; } #footer { text-align: center ; padding: 0.5em ; font-size: 0.9em ; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* Mdoc */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ #content div.mdoc ul.breadcrumb { float: right ; width: 100% ; margin: 1em 0 ; padding: 0 ; border-bottom: 1px solid #aaa ; } #content div.mdoc ul.breadcrumb:after { content: "." ; display: block ; height: 0 ; clear: right ; visibility: hidden ; } #content div.mdoc ul.breadcrumb li { display: block ; float: left ; width: 4em ; margin: 0 0.5em ; padding: .2em ; font-size: .9em ; font-weight: bold ; border-top: 2px solid #aaa ; border-left: 2px solid #aaa ; border-right: 2px solid #aaa ; text-align: center ; } #content div.mdoc ul.breadcrumb a { text-decoration : none ; color: black ; } #content div.mdoc span.defaults { font-weight: normal ; color: green ; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* Toc */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ #content div.toc { padding: 14px 25px; background-color: #F4F6FA; border: 1px solid #D8DFEE; border-radius: 3px 3px 3px 3px; float: right; height: auto; margin: 1em 0px 10px 10px; width: 200px; } #content div.toc li { background: url("api/bdwn.png") no-repeat scroll 0 5px transparent; font: 10px/1.2 Verdana, DejaVu Sans, Geneva, sans-serif; margin-top: 5px; padding-left: 10px; padding-top: 2px; } #content div.toc h3 { font: bold 12px/1.2 Arial, FreeSans, sans-serif; color: #4665A2; border-bottom: 0 none; margin: 0; } #content div.toc ul { list-style: none outside none; border: medium none; padding: 0px; } #content div.toc li.level1 { margin-left: 0px; } #content div.toc li.level2 { margin-left: 15px; } #content div.toc li.level3 { margin-left: 30px; } #content div.toc li.level4 { margin-left: 45px; } vlfeat/docsrc/ikm.html0000644000175000017500000000624112237004745013677 0ustar dimadima %tableofcontents;

    VLFeat includes a basic implementation of k-means clustering and hierarchical k-means clustering. They are designed to be lightweight in order to work on large datasets. In particular, they assume that the data are vectors of unsigned chars (one byte). While this is limiting for some application, it works well for clustering image descriptors, where very high precision is usually unnecessary. For more details, see the Integer k-means API reference.

    Usage

    Integer k-means (IKM) is run by the command vl_ikmeans. In order to demonstrate the usage of this command, we sample 1000 random points in the [0,255]^2 integer square and use vl_ikmeans to get k=3 clusters:

    K = 3 ; data = uint8(rand(2,1000) * 255) ; [C,A] = vl_ikmeans(data,K) ;

    The program returns both the cluster centers C and the data-to-cluster assignments A. By means of the cluster centers C we can project more data on the same clusters

    datat = uint8(rand(2,10000) * 255) ; AT = vl_ikmeanspush(datat,C) ;

    In order to visualize the results, we associate to each cluster a color and we plot the points:

    cl = get(gca,'ColorOrder') ; ncl = size(cl,1) ; for k=1:K sel = find(A == k) ; selt = find(AT == k) ; plot(data(1,sel), data(2,sel), '.',... 'Color',cl(mod(k,ncl)+1,:)) ; plot(datat(1,selt),datat(2,selt),'+',... 'Color',cl(mod(k,ncl)+1,:)) ; end
    Integer k-means. We show clusters of 2-D points obtained by integer k-means. There are k=3 clusters represented with different colors. The clusters have been estimated from 1000 points (displayed as dots). Then 10000 different points have been projected on the same clusters (displayed as crosses). The three big markers represent the cluster centers.

    Elkan

    VLFeat supports two different implementations of k-means. While they produce identical output, the Elkan method requires fewer distance computations. The method parameters controls which method is used. Consider the case when K=100 and our data is now 128 dimensional (e.g. SIFT descriptors):

    K=100; data = uint8(rand(128,10000) * 255); tic; [C,A] = vl_ikmeans(data,K,'method', 'lloyd') ; % default t_lloyd = toc tic; [C,A] = vl_ikmeans(data,K,'method', 'elkan') ; t_elkan = toc t_lloyd = 10.2884 t_elkan = 5.1405
    vlfeat/Makefile.mak0000644000175000017500000004212612237004745013165 0ustar dimadima# file: Makefile.mak # descrption: Microsoft NMake makefile # authors: Andrea Vedaldi, Brian Fulkerson, Mircea Cimpoi # Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. # All rights reserved. # # This file is part of the VLFeat library and is made available under # the terms of the BSD license (see the COPYING file). # -------------------------------------------------------------------- # Customization # -------------------------------------------------------------------- # To modify this script to run on your platform it is usually # sufficient to modify the following variables: # # ARCH: Either win32 or win64 [win64] # DEBUG: Set to yes to ativate debugging [no] # MATLABROOT: Path to MATLAB # MSVSVER: Visual Studio version (e.g. 80, 90, 100) [90 for VS 9.0] # MSVCROOT: Visual C++ location [$(VCInstallDir)]. # WINSDKROOT: Windows SDK location [$(WindowsSdkDir)] # # Note that some of these variables depend on the architecture # (either win32 or win64). VER = 0.9.17 ARCH = win64 DEBUG = no BRANCH = v$(VER)-$(ARCH) MSVSVER = MSVCROOT = $(VCINSTALLDIR) WINSDKROOT = $(WINDOWSSDKDIR) GIT = git !if "$(MSVCROOT)" == "" MSVCROOT = C:\Program Files\Microsoft Visual Studio 10.0\VC !endif !if "$(WINSDKROOT)" == "" WINSDKROOT = C:\Program Files\Microsoft SDKs\Windows\v7.0A !endif !include make/nmake_helper.mak # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32-bit !if "$(ARCH)" == "win32" !message === COMPILING FOR 32-BIT MATLABROOT = C:\Program Files (x86)\MATLAB\R2009b MEX = "$(MATLABROOT)\bin\mex.bat" MEXOPT = "$(MATLABROOT)\bin\win32\mexopts\msvc$(MSVSVER)opts.bat" MEXEXT = mexw32 MEX_FLAGS = CC = "$(MSVCROOT)\bin\cl.exe" LINK = "$(MSVCROOT)\bin\link.exe" MSVCR_PATH = $(MSVCROOT)\redist\x86\Microsoft.VC$(MSVSVER).CRT LFLAGS = /MACHINE:X86 \ /LIBPATH:"$(MSVCROOT)\lib" \ /LIBPATH:"$(WINSDKROOT)\lib" # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 64-bit !elseif "$(ARCH)" == "win64" !message === COMPILING FOR 64-BIT MATLABROOT = C:\Program Files\MATLAB\R2009b MEX = "$(MATLABROOT)\bin\mex.bat" MEXOPT = "$(MATLABROOT)\bin\win64\mexopts\msvc$(MSVSVER)opts.bat" MEXEXT = mexw64 MEX_FLAGS = -largeArrayDims CC = "$(MSVCROOT)\bin\amd64\cl.exe" LINK = "$(MSVCROOT)\bin\amd64\link.exe" !if $(MSVSVER) >= 100 MSVCR_PATH = $(MSVCROOT)\redist\x64\Microsoft.VC$(MSVSVER).CRT !else MSVCR_PATH = $(MSVCROOT)\redist\amd64\Microsoft.VC$(MSVSVER).CRT !endif LFLAGS = /MACHINE:X64 \ /LIBPATH:"$(MSVCROOT)\lib\amd64" \ /LIBPATH:"$(WINSDKROOT)\lib\x64" !else !error ARCH = $(ARCH) is an unknown architecture. !endif # -------------------------------------------------------------------- # Flags # -------------------------------------------------------------------- # Debug info is embedded in .obj and .lib files (CodeView /Z7 option) # but in .pdb files for .exe and .dll (since the linker does not # produce CodeView output anymore). # # CFLAGS # /nologo : CL does not display splash # _CRT_NO_DEPRECATE : Do not deprecate `insecure' fscanf, snprintf, ... # __LITTLE_ENDIAN__ : Signal little endian architecture # /I. : Add VLROOT to include search path # /MD : Multi-thread run-time library dynamically linked # /TC : Source code is C (not C++) # /W3 : Usa all warnings # /Zp8 : Align structures to 8 bytes # /Ox : Turn on optimizations # /D"DEBUG" : [DEBUG] Turn on debugging in VLFeat # /Z7 : [DEBUG] Embedded CodeView debug info in .obj # /D"NDEBUG" : [NO DEBUG] Switches off asserts # # LFLAGS # /NOLOGO : LINK does not display splash # /INCREMENTAL:NO : No incremental linking # /MANIFEST : See DLL HELL below # /DEBUG : [DEBUG] Generate debug info (.pdb files) # # MEX_FLAGS # -I : Include VLFeat # -L : Add a library search path # -l : Link a dll # # ======================= ABOUT THE DLL HELL ========================= # # This makefile compiles VLFeat to make use of the side-by-side # deployment model, redestribtin the appropraite Visual C runtime # library with the library and executables. In Visual Studio < 10.0 # this meant including a manifest file, while in version >= 10.0 this # requirement has been relaxed. # # References: # http://www.codeguru.com/forum/showthread.php?t=408061 # http://mariusbancila.ro/blog/2010/03/24/visual-studio-2010-changes-for-vc-part-5 # http://social.msdn.microsoft.com/Forums/is/vcgeneral/thread/ca9177b2-2d02-42d8-8892-c6a25e6cfadb # bindir = bin\$(ARCH) mexdir = toolbox\mex\$(MEXEXT) objdir = $(bindir)\objs CFLAGS = /nologo /TC /MD \ /D"_CRT_SECURE_NO_DEPRECATE" \ /D"__LITTLE_ENDIAN__" \ /D"VL_DISABLE_AVX" \ /I. \ /W1 /Zp8 /openmp LFLAGS = $(LFLAGS) /NOLOGO \ /INCREMENTAL:NO \ /MANIFEST !if "$(DEBUG)" != "no" !message === DEBUGGING ON CFLAGS = $(CFLAGS) /Z7 /D"DEBUG" LFLAGS = $(LFLAGS) /DEBUG MEX_FLAGS = $(MEX_FLAGS) -g !else !message === DEBUGGING OFF CFLAGS = $(CFLAGS) /D"NDEBUG" /Ox !endif DLL_CFLAGS = /D"VL_BUILD_DLL" EXE_LFLAGS = $(LFLAGS) /LIBPATH:"$(bindir)" vl.lib MEX_FLAGS = $(MEX_FLAGS) -f $(MEXOPT) -I. -Itoolbox -L"$(bindir)" -lvl libsrc = \ vl\aib.c \ vl\array.c \ vl\covdet.c \ vl\dsift.c \ vl\fisher.c \ vl\generic.c \ vl\getopt_long.c \ vl\gmm.c \ vl\hikmeans.c \ vl\hog.c \ vl\homkermap.c \ vl\host.c \ vl\ikmeans.c \ vl\imopv.c \ vl\imopv_sse2.c \ vl\kdtree.c \ vl\kmeans.c \ vl\lbp.c \ vl\liop.c \ vl\mathop.c \ vl\mathop_avx.c \ vl\mathop_sse2.c \ vl\mser.c \ vl\pgm.c \ vl\quickshift.c \ vl\random.c \ vl\rodrigues.c \ vl\scalespace.c \ vl\sift.c \ vl\slic.c \ vl\stringop.c \ vl\svm.c \ vl\svmdataset.c \ vl\vlad.c cmdsrc = \ src\aib.c \ src\mser.c \ src\sift.c \ src\test_gauss_elimination.c \ src\test_getopt_long.c \ src\test_gmm.c \ src\test_heap-def.c \ src\test_host.c \ src\test_imopv.c \ src\test_kmeans.c \ src\test_liop.c \ src\test_mathop.c \ src\test_mathop_abs.c \ src\test_nan.c \ src\test_qsort-def.c \ src\test_rand.c \ src\test_stringop.c \ src\test_svd2.c \ src\test_threads.c \ src\test_vec_comp.c cmdsrc = \ src\aib.c \ src\mser.c \ src\sift.c \ src\test_gauss_elimination.c \ src\test_getopt_long.c \ src\test_gmm.c \ src\test_heap-def.c \ src\test_host.c \ src\test_imopv.c \ src\test_kmeans.c \ src\test_liop.c \ src\test_mathop.c \ src\test_mathop_abs.c \ src\test_nan.c \ src\test_qsort-def.c \ src\test_rand.c \ src\test_stringop.c \ src\test_svd2.c \ src\test_threads.c \ src\test_vec_comp.c mexsrc = \ toolbox\aib\vl_aib.c \ toolbox\aib\vl_aibhist.c \ toolbox\fisher\vl_fisher.c \ toolbox\geometry\vl_irodr.c \ toolbox\geometry\vl_rodr.c \ toolbox\gmm\vl_gmm.c \ toolbox\imop\vl_imdisttf.c \ toolbox\imop\vl_imintegral.c \ toolbox\imop\vl_imsmooth.c \ toolbox\imop\vl_imwbackwardmx.c \ toolbox\imop\vl_tpsumx.c \ toolbox\kmeans\vl_hikmeans.c \ toolbox\kmeans\vl_hikmeanspush.c \ toolbox\kmeans\vl_ikmeans.c \ toolbox\kmeans\vl_ikmeanspush.c \ toolbox\kmeans\vl_kmeans.c \ toolbox\misc\vl_alldist.c \ toolbox\misc\vl_alldist2.c \ toolbox\misc\vl_binsearch.c \ toolbox\misc\vl_binsum.c \ toolbox\misc\vl_cummax.c \ toolbox\misc\vl_getpid.c \ toolbox\misc\vl_hog.c \ toolbox\misc\vl_homkermap.c \ toolbox\misc\vl_ihashfind.c \ toolbox\misc\vl_ihashsum.c \ toolbox\misc\vl_inthist.c \ toolbox\misc\vl_kdtreebuild.c \ toolbox\misc\vl_kdtreequery.c \ toolbox\misc\vl_lbp.c \ toolbox\misc\vl_localmax.c \ toolbox\misc\vl_sampleinthist.c \ toolbox\misc\vl_simdctrl.c \ toolbox\misc\vl_svmtrain.c \ toolbox\misc\vl_threads.c \ toolbox\misc\vl_twister.c \ toolbox\misc\vl_version.c \ toolbox\mser\vl_erfill.c \ toolbox\mser\vl_mser.c \ toolbox\quickshift\vl_quickshift.c \ toolbox\sift\vl_covdet.c \ toolbox\sift\vl_dsift.c \ toolbox\sift\vl_liop.c \ toolbox\sift\vl_sift.c \ toolbox\sift\vl_siftdescriptor.c \ toolbox\sift\vl_ubcmatch.c \ toolbox\slic\vl_slic.c \ toolbox\vlad\vl_vlad.c !if "$(ARCH)" == "win32" libobj = $(libsrc:vl\=bin\win32\objs\) cmdexe = $(cmdsrc:src\=bin\win32\) mexdll = $(mexsrc:.c=.mexw32) mexdll = $(mexdll:toolbox\fisher=toolbox\mex\mexw32) mexdll = $(mexdll:toolbox\sift=toolbox\mex\mexw32) mexdll = $(mexdll:toolbox\mser=toolbox\mex\mexw32) mexdll = $(mexdll:toolbox\imop=toolbox\mex\mexw32) mexdll = $(mexdll:toolbox\geometry=toolbox\mex\mexw32) mexdll = $(mexdll:toolbox\gmm=toolbox\mex\mexw32) mexdll = $(mexdll:toolbox\kmeans=toolbox\mex\mexw32) mexdll = $(mexdll:toolbox\misc=toolbox\mex\mexw32) mexdll = $(mexdll:toolbox\aib=toolbox\mex\mexw32) mexdll = $(mexdll:toolbox\quickshift=toolbox\mex\mexw32) mexdll = $(mexdll:toolbox\slic=toolbox\mex\mexw32) mexdll = $(mexdll:toolbox\vlad=toolbox\mex\mexw32) mexpdb = $(mexdll:.dll=.pdb) !elseif "$(ARCH)" == "win64" libobj = $(libsrc:vl\=bin\win64\objs\) cmdexe = $(cmdsrc:src\=bin\win64\) mexdll = $(mexsrc:.c=.mexw64) mexdll = $(mexdll:toolbox\fisher=toolbox\mex\mexw64) mexdll = $(mexdll:toolbox\sift=toolbox\mex\mexw64) mexdll = $(mexdll:toolbox\mser=toolbox\mex\mexw64) mexdll = $(mexdll:toolbox\imop=toolbox\mex\mexw64) mexdll = $(mexdll:toolbox\geometry=toolbox\mex\mexw64) mexdll = $(mexdll:toolbox\gmm=toolbox\mex\mexw64) mexdll = $(mexdll:toolbox\kmeans=toolbox\mex\mexw64) mexdll = $(mexdll:toolbox\misc=toolbox\mex\mexw64) mexdll = $(mexdll:toolbox\aib=toolbox\mex\mexw64) mexdll = $(mexdll:toolbox\quickshift=toolbox\mex\mexw64) mexdll = $(mexdll:toolbox\slic=toolbox\mex\mexw64) mexdll = $(mexdll:toolbox\vlad=toolbox\mex\mexw64) mexpdb = $(mexdll:.mexw64=.pdb) !endif libobj = $(libobj:.c=.obj) cmdexe = $(cmdexe:.c=.exe) cmdpdb = $(cmdexe:.exe=.pdb) # Visual Studio redistributable files MSVCR = Microsoft.VC$(MSVSVER).CRT !if $(MSVSVER) <= 90 # VS <= 2008 needs a manifest too bincrt = $(bindir)\msvcr$(MSVSVER).dll $(bindir)\$(MSVCR).manifest mexcrt = $(mexdir)\msvcr$(MSVSVER).dll $(mexdir)\$(MSVCR).manifest !else bincrt = $(bindir)\msvcr$(MSVSVER).dll mexcrt = $(mexdir)\msvcr$(MSVSVER).dll !endif !ifdef MATLABROOT all: $(bindir) $(objdir) $(mexdir) \ $(bincrt) $(bindir)\vl.lib $(bindir)\vl.dll \ $(cmdexe) \ $(mexcrt) $(mexdir)\vl.dll $(mexdll) !else all: $(bindir) $(objdir) \ $(bincrt) $(bindir)\vl.lib $(bindir)\vl.dll \ $(cmdexe) !endif BUILD_MEX=@echo .... CC [MEX] $(@) && \ $(MEX) $(MEX_FLAGS) "$(<)" -output $(@) # -------------------------------------------------------------------- # Maintenance rules # -------------------------------------------------------------------- clean: del /f /Q $(libobj) del /f /Q $(objdir) del /f /Q $(cmdpdb) del /f /Q $(mexpdb) archclean: if exist bin\$(ARCH) rmdir /S /Q bin\$(ARCH) if exist $(mexdir) rmdir /S /Q $(mexdir) distclean: if exist bin rmdir /S /Q bin if exist toolbox\mex rmdir /S /Q toolbox\mex info: @echo $(mexx) @echo ** bindir = $(bindir) @echo ** mexdir = $(mexdir) @echo ** objdir = $(objdir) @echo ** libsrc = $(libsrc) @echo ** libobj = $(libobj) @echo ** cmdsrc = $(cmdsrc) @echo ** cmdexe = $(cmdexe) @echo ** mexsrc = $(mexsrc) @echo ** mexdll = $(mexdll) @echo ** CC = $(CC) @echo ** CFLAGS = $(CFLAGS) @echo ** DLL_CFLAGS = $(DLL_CFLAGS) @echo ** MEX_FLAGS = $(MEX_FLAGS) @echo ** BUILD_MEX = "$(BUILD_MEX)" @echo ** MATLABROOT = $(MATLABROOT) @echo ** MEX = $(MEX) @echo ** MEXEXT = $(MEXEXT) @echo ** MEXOPT = $(MEXOPT) @echo ** MSVSVER = $(MSVSVER) @echo ** MSVCROOT = $(MSVCROOT) @echo ** MSVCR = $(MSVCR) @echo ** MSVCR_PATH = $(MSVCR_PATH) @echo ** bincrt = $(bincrt) @echo ** mexcrt = $(mexcrt) @echo ** WINSDKROOT = $(WINSDKROOT) @echo ** DEBUG = $(DEBUG) # -------------------------------------------------------------------- # Build rules # -------------------------------------------------------------------- # create directory if missing $(bindir) : mkdir $(bindir) $(objdir) : mkdir $(objdir) $(mexdir) : mkdir $(mexdir) # -------------------------------------------------------------------- # Rules to compile the VLFeat DLL # -------------------------------------------------------------------- # special sources with SSE2 support $(objdir)\mathop_sse2.obj : vl\mathop_sse2.c @echo .... CC [+SSE2] $(@) @$(CC) $(CFLAGS) $(DLL_CFLAGS) /arch:SSE2 /D"__SSE2__" /c /Fo"$(@)" "vl\$(@B).c" $(objdir)\imopv_sse2.obj : vl\imopv_sse2.c @echo .... CC [+SSE2] $(@) @$(CC) $(CFLAGS) $(DLL_CFLAGS) /arch:SSE2 /D"__SSE2__" /c /Fo"$(@)" "vl\$(@B).c" # vl\*.c -> $objdir\*.obj {vl}.c{$(objdir)}.obj: @echo .... CC $(@) @$(CC) $(CFLAGS) $(DLL_CFLAGS) /c /Fo"$(@)" "$(<)" # Link VLFeat DLL $(bindir)\vl.dll : $(libobj) @echo .. LINK [DLL] $(@R).dll $(LINK) /DLL $(LFLAGS) $(**) /OUT:"$(@)" @mt /nologo /outputresource:"$(@);#2" /manifest "$(@R).dll.manifest" @-del "$(@R).dll.manifest" # *.obj -> *.lib $(bindir)\vl.lib : $(libobj) @echo ... LIB $(@R).lib @lib $(**) /OUT:"$(@)" /NOLOGO # redistributable: msvcr__.dll => bin/win{32,64}/msvcr__.dll $(bindir)\$(MSVCR).manifest : "$(MSVCR_PATH)\$(MSVCR).manifest" copy $(**) "$(@)" $(bindir)\msvcr$(MSVSVER).dll: "$(MSVCR_PATH)\msvcr$(MSVSVER).dll" copy $(**) "$(@)" # -------------------------------------------------------------------- # Rules to compile the VLFeat EXE files # -------------------------------------------------------------------- # src\*.c -> $bindir\*.exe {src}.c{$(bindir)}.exe: @echo .... CC [EXE] $(@) @$(CC) $(CFLAGS) /Fe"$(@)" /Fo"$(@R).obj" "$(<)" /link $(EXE_LFLAGS) @MT /nologo /outputresource:"$(@);#1" /manifest "$(@).manifest" @-del "$(@).manifest" @-del "$(@R).obj" # -------------------------------------------------------------------- # Rules to compile the VLFeat MEX files # -------------------------------------------------------------------- startmatlab: "$(MATLABROOT)/bin/matlab.exe" -nodesktop # toolbox\*.c -> toolbox\*.dll {toolbox\sift}.c{$(mexdir)}.$(MEXEXT): $(BUILD_MEX) {toolbox\mser}.c{$(mexdir)}.$(MEXEXT): $(BUILD_MEX) {toolbox\imop}.c{$(mexdir)}.$(MEXEXT): $(BUILD_MEX) {toolbox\gmm}.c{$(mexdir)}.$(MEXEXT): $(BUILD_MEX) {toolbox\geometry}.c{$(mexdir)}.$(MEXEXT): $(BUILD_MEX) {toolbox\kmeans}.c{$(mexdir)}.$(MEXEXT): $(BUILD_MEX) {toolbox\aib}.c{$(mexdir)}.$(MEXEXT): $(BUILD_MEX) {toolbox\quickshift}.c{$(mexdir)}.$(MEXEXT): $(BUILD_MEX) {toolbox\misc}.c{$(mexdir)}.$(MEXEXT): $(BUILD_MEX) {toolbox\slic}.c{$(mexdir)}.$(MEXEXT): $(BUILD_MEX) {toolbox\vlad}.c{$(mexdir)}.$(MEXEXT): $(BUILD_MEX) {toolbox\fisher}.c{$(mexdir)}.$(MEXEXT): $(BUILD_MEX) # vl.dll => mexw{32,64}\vl.dll $(mexdir)\vl.dll : $(bindir)\vl.dll copy "$(**)" "$(@)" # Ideally, the DLL should be linked to Intel compatibility library libiomp5md.dll that # ships with MATLAB. However, there does not seem to be a clean way to do so without # the .lib file. This is suboptimal as it casues two OMP libraries to be used (vcomp and iomp5). # Possible work arounds that did not work yet: generate the .lib file from the .dll file, # redirect somehow vcomp to iomp5. #$(LINK) /LIBPATH:"$(MATLABROOT)\extern\lib\win64\microsoft" /DLL $(LFLAGS) $(**) libmwblas.lib /nodefaultlib:vcomp /OUT:"$(@)" #$(mexdir)\vl.dll : $(libobj) # @echo .. LINK [DLL] $(@R).dll # $(LINK) /DLL $(LFLAGS) $(**) /OUT:"$(@)" # @-del "$(@R).dll.manifest" # redistributable: msvcr__.dll => bin/win{32,64}/msvcr__.dll $(mexdir)\$(MSVCR).manifest : "$(MSVCR_PATH)\$(MSVCR).manifest" copy $(**) "$(@)" $(mexdir)\msvcr$(MSVSVER).dll: "$(MSVCR_PATH)\msvcr$(MSVSVER).dll" copy $(**) "$(@)" # -------------------------------------------------------------------- # Rules to post the binary files # -------------------------------------------------------------------- bin-release: echo Fetching remote tags && \ $(GIT) fetch --tags && \ echo Checking out v$(VER) && \ $(GIT) checkout v$(VER) echo Rebuilding binaries for release if exist "bin\$(ARCH)" del /f /Q "bin\$(ARCH)" if exist "bin\mex\$(ARCH)" del /f /Q "toolbox\mex$(ARCH)" nmake /f Makefile.mak ARCH=$(ARCH) bin-commit: bin-release @echo Fetching remote tags && \ $(GIT) fetch --tags @echo Crearing/resetting and checking out branch $(BRANCH) to v$(VER) && \ $(GIT) branch -f $(BRANCH) v$(VER) && \ $(GIT) checkout $(BRANCH) @echo Adding binaries && \ $(GIT) add -f $(bincrt) && \ $(GIT) add -f "$(bindir)\vl.lib" && \ $(GIT) add -f "$(bindir)\vl.dll" && \ $(GIT) add -f $(cmdexe) && \ @echo Adding MEX files && \ $(GIT) add -f $(mexcrt) && \ $(GIT) add -f "$(mexdir)\vl.dll" && \ $(GIT) add -f $(mexdll) && \ @echo Commiting changes && \ $(GIT) commit -m "$(ARCH) binaries for version $(VER)" @echo Commiting and pushing to server the binaries && \ $(GIT) push -v --force bin $(BRANCH):refs/heads/$(BRANCH) && \ $(GIT) checkout v$(VER) && \ $(GIT) branch -D $(BRANCH) vlfeat/COPYING0000644000175000017500000000252512237004745012010 0ustar dimadimaCopyright (C) 2007-11, Andrea Vedaldi and Brian Fulkerson Copyright (C) 2012-13, The VLFeat Team All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. vlfeat/.gitattributes0000644000175000017500000000007312237004736013644 0ustar dimadima*.manifest -crlf -diff -merge *.vcproj binary *.sln binary vlfeat/README0000644000175000017500000001330712237004745011635 0ustar dimadima VLFeat (Vision Library Features) Version 0.9.17 ABOUT The VLFeat open source library implements popular computer vision algorithms including SIFT, MSER, k-means, hierarchical k-means, agglomerative information bottleneck, and quick shift. It is written in C for efficiency and compatibility, with interfaces in MATLAB for ease of use, and detailed documentation throughout. It supports Windows, Mac OS X, and Linux. VLFeat is distributed under the BSD license (see the COPYING file). The documentation is available online at http://www.vlfeat.org/index.html. A copy of the same is shipped with the library in doc/index.html. See also: * Installing VLFeat permanently in MATLAB: http://www.vlfeat.org/install-matlab.html * Using the command line utilities: http://www.vlfeat.org/install-shell.html * Linking to your C program: http://www.vlfeat.org/install-c.html * Compiling from source: http://www.vlfeat.org/compiling.html QUICK START WITH MATLAB To start using VLFeat as a MATLAB toolbox, download the latest VLFeat binary package from http://www.vlfeat.org/download/. Note that the pre-compiled binaries require MATLAB 2009B and later. Unpack it, for example by using WinZIP (Windows), by double clicking on the archive (Mac), or by using the command line (Linux and Mac): > tar xzf vlfeat-X.Y.Z-bin.tar.gz Here X.Y.Z denotes the latest version. Start MATLAB and run the VLFeat setup command: > run VLFEATROOT/toolbox/vl_setup Here VLFEATROOT is the path to the VLFeat directory created by unpacking the archive. All VLFeat demos can now be run in a row by the command: > vl_demo OCTAVE SUPPORT The toolbox should be laregly compatible with GNU Octave, an open source MATLAB equivalent. However, the binary distribution does not ship with pre-built GNU Octave MEX files. To compile them use > cd > MKOCTFILE= make CHANGES 0.9.17 Rewritten SVM implementation, adding support for SGD and SDCA optimisers and various loss functions (hinge, squared hinge, logistic, etc.) and improving the interface. Added infrastructure to support multi-core computations using OpenMP (MATLAB 2009B or later required). Added OpenMP support to KD-trees and KMeans. Added new Gaussian Mixture Models, VLAD encoding, and Fisher Vector encodings (also with OpenMP support). Added LIOP feature descriptors. Added new object category recognition example code, supporting several standard benchmarks off-the-shelf. 0.9.16 Added VL_COVDET(). This function implements the following detectors: DoG, Hessian, Harris Laplace, Hessian Laplace, Multiscale Hessian, Multiscale Harris. It also implements affine adaptation, estiamtion of feature orientation, computation of descriptors on the affine patches (including raw patches), and sourcing of custom feature frame. 0.9.15 Added VL_HOG() (HOG features). Added VL_SVMPEGASOS() and a vastly improved SVM implementation. Added IHASHSUM (hashed counting). Improved INTHIST (integral histogram). Added VL_CUMMAX(). Improved the implementation of VL_ROC() and VL_PR(). Added VL_DET() (Detection Error Trade-off (DET) curves). Improved the verbosity control to AIB. Added support for Xcode 4.3, improved support for past and future Xcode versions. Completed the migration of the old test code in toolbox/test, moving the functionality to the new unit tests toolbox/xtest. 0.9.14 Added SLIC superpixels. Added VL_ALPHANUM(). Improved Windows binary package and added support for Visual Studio 2010. Improved the documentation layout and added a proper bibliography. Bugfixes and other minor improvements. Moved from the GPL to the less restrictive BSD license. 0.9.13 Fixes Windows binary package. 0.9.12 Fixes vl_compile and the architecture string on Linux 32 bit. 0.9.11 Fixes a compatibility problem on older Mac OS X versions. A few bugfixes are included too. 0.9.10 Improves the homogeneous kernel map. Plenty of small tweaks and improvements. Make maci64 the default architecture on the Mac. 0.9.9 Added: sift matching example. Extended Caltech-101 classification example to use kd-trees. 0.9.8 Added: image distance transform, PEGASOS, floating point K-means, homogeneous kernel maps, a Caltech-101 classification example. Improved documentation. 0.9.7 Changed the Mac OS X binary distribution to require a less recent version of Mac OS X (10.5). 0.9.6 Changed the GNU/Linux binary distribution to require a less recent version of the C library. 0.9.5 Added kd-tree and new SSE-accelerated vector/histogram comparison code. Improved dense SIFT (dsift) implementation. Added Snow Leopard and MATLAB R2009b support. 0.9.4 Added quick shift. Renamed dhog to dsift and improved implementation and documentation. Improved tutorials. Added 64 bit Windows binaries. Many other small changes. 0.9.3 Namespace change (everything begins with a vl_ prefix now). Many other changes to provide compilation support on Windows with MATLAB 7. beta-3 Completions to the ikmeans code. beta-2 Many completions. beta-1 Initial public release. vlfeat/Makefile0000644000175000017500000002724412237042135012415 0ustar dimadima# file: Makefile # description: Build everything # author: Andrea Vedaldi # Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. # All rights reserved. # # This file is part of the VLFeat library and is made available under # the terms of the BSD license (see the COPYING file). # VLFEAT BUILDING INSTRUCTIONS # # This makefile builds VLFeat on modern UNIX boxes with the GNU # toolchain. Mac OS X and Linux are explicitly supported, and support # for similar architectures can be easily added. # # Usually, compiling VLFeat reduces to typing # # > cd PATH_TO_VLFEAT_SOURCE_TREE # > make # # The makefile attempts to automatically determine the host # architecture. If this fails, or if the architecture is ambiguous, # the architecture can be set by specifying the ARCH variable. For # instance: # # > make ARCH=maci64 # # builds VLFeat for Mac OS X Intel 64 bit. # # !! Unforunately MATLAB mex script (at least up to version 2009B) has # !! a bug that prevents selecting an architecture different from the # !! default one for compilation. For instance, compiling maci64 may # !! not work as the default architecture is maci if both 32 and 64 # !! bit MATLAB are installed. This bug is easy to fix, but requires # !! patching the mex script. See www.vlfeat.org for detailed # !! instructions. # # Other useful variables are listed below (their default value is in # square bracked). # # ARCH [undefined] - Active architecture. The supported # architectures are maci, maci64, glnx86, or glnxa64 (these are # the same architecture identifers used by MATLAB: # http://www.mathworks.com/help/techdoc/ref/computer.html). If # undefined, the makefile attempts to automatically detect the # architecture. # # DEBUG [undefined] - If defined, turns on debugging symbols and # turns off optimizations # # PROFILE [undefined] - If defined, turns on debugging symbols but # does NOT turn off optimizations. # # VERB [undefined] - If defined, display in full the command # executed and their output. # # MEX [mex]- Path to MATLAB MEX compiler. If undefined, MATLAB supprot # is disabled. # # MKOCTFILE [undefined] - Path to Octave MKOCTFILE compiler. If undefined, # Octave support is disabled. # # To completely remove all build products use # # > make distclean # # Other useful targets include: # # clean - Removes intermediate build products for the active architecture. # archclean - Removes all build products for the active architecture. # distclean - Removes all build products. # info - Display a list of the variables defined by the Makefile. # help - Print this message. # # VLFeat is compsed of different parts (DLL, command line utilities, # MATLAB interface, Octave interface) so the makefile is divided in # components, located in make/*.mak. Please check out the # corresponding files in order to adjust parameters. # Copyright (C) 2007-13 Andrea Vedaldi and Brian Fulkerson. # All rights reserved. # # This file is part of the VLFeat library and is made available under # the terms of the BSD license (see the COPYING file). SHELL = /bin/bash .PHONY : all all: # Select which features to disable # DISABLE_SSE2=yes # DISABLE_AVX=yes # DISABLE_THREADS=yes # DISABLE_OPENMP=yes # -------------------------------------------------------------------- # Error Messages # -------------------------------------------------------------------- err_no_arch = err_no_arch +=$(shell echo "** Unknown host architecture '$(UNAME)'. This identifier" 1>&2) err_no_arch +=$(shell echo "** was obtained by running 'uname -sm'. Edit the Makefile " 1>&2) err_no_arch +=$(shell echo "** to add the appropriate configuration." 1>&2) err_no_arch +=config err_internal =$(shell echo Internal error) err_internal +=internal err_spaces = $(shell echo "** VLFeat root dir VLDIR='$(VLDIR)' contains spaces." 1>&2) err_spaces += $(shell echo "** This is not supported due to GNU Make limitations." 1>&2) err_spaces +=spaces # -------------------------------------------------------------------- # Auto-detect architecture # -------------------------------------------------------------------- Darwin_PPC_ARCH := mac Darwin_Power_Macintosh_ARCH := mac Darwin_i386_ARCH := maci64 Darwin_x86_64_ARCH := maci64 Linux_i386_ARCH := glnx86 Linux_i686_ARCH := glnx86 Linux_unknown_ARC := glnx86 Linux_x86_64_ARCH := glnxa64 UNAME := $(shell uname -sm) ARCH ?= $($(shell echo "$(UNAME)" | tr \ _)_ARCH) # sanity check ifeq ($(ARCH),) die:=$(error $(err_no_arch)) endif ifneq ($(VLDIR),$(shell echo "$(VLDIR)" | sed 's/ //g')) die:=$(error $(err_spaces)) endif # -------------------------------------------------------------------- # Configuration # -------------------------------------------------------------------- VLDIR ?= . LIBTOOL ?= libtool STD_CLFAGS = $(CFLAGS) STD_CFLAGS += -std=c99 STD_CFLAGS += -Wall -Wextra STD_CFLAGS += -Wno-unused-function -Wno-long-long -Wno-variadic-macros STD_CFLAGS += $(if $(DISABLE_THREADS), -DVL_DISABLE_THREADS) STD_CFLAGS += $(if $(DISABLE_SSE2), -DVL_DISABLE_SSE2) STD_CFLAGS += $(if $(DISABLE_OPENMP), -DVL_DISABLE_OPENMP) STD_CFLAGS += $(if $(DEBUG), -DDEBUG -O0 -g, -DNDEBUG -O3) STD_CFLAGS += $(if $(DISABLE_AVX), -DVL_DISABLE_AVX) STD_CFLAGS += $(if $(PROFILE), -g) STD_LDFLAGS = $(LDFLAGS) # Architecture specific ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Mac OS X Intel 32 ifeq ($(ARCH),maci) #SDKROOT ?= $(shell xcode-select -print-path)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk SDKROOT ?= $(shell xcodebuild -version -sdk macosx | sed -n '/^Path\:/p' | sed 's/^Path: //') MACOSX_DEPLOYMENT_TARGET ?= 10.4 STD_CFLAGS += -m32 -isysroot $(SDKROOT) -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET) STD_LDFLAGS += -Wl,-syslibroot,$(SDKROOT) -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET) DISABLE_AVX ?= yes CC = gcc endif # Mac OS X Intel 64 ifeq ($(ARCH),maci64) #SDKROOT ?= $(shell xcode-select -print-path)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk SDKROOT ?= $(shell xcodebuild -version -sdk macosx | sed -n '/^Path\:/p' | sed 's/^Path: //') MACOSX_DEPLOYMENT_TARGET ?= 10.4 STD_CFLAGS += -m64 -isysroot $(SDKROOT) -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET) STD_LDFLAGS += -Wl,-syslibroot,$(SDKROOT) -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET) DISABLE_AVX ?= yes # GCC 4.2 need for OpenMP does not support -mavx CC = gcc endif # Linux-32 ifeq ($(ARCH),glnx86) # Target compatibility with GLIBC 2.3.4 # 1) _GNU_SOURCE avoids using isoc99_fscanf, limiting binray portability to recent GLIBC. # 2) -fno-stack-protector avoids using a feature requiring GLBIC 2.4 STD_CFLAGS += -m32 -D_GNU_SOURCE -fno-stack-protector STD_LDFLAGS += -m32 -Wl,--rpath,\$$ORIGIN/ -Wl,--as-needed -lpthread -lm CC ?= gcc endif # Linux-64 ifeq ($(ARCH),glnxa64) STD_CFLAGS += -D_GNU_SOURCE -fno-stack-protector STD_LDFLAGS += -Wl,--rpath,\$$ORIGIN/ -Wl,--as-needed -lpthread -lm CC ?= gcc endif # -------------------------------------------------------------------- # Functions # -------------------------------------------------------------------- # $(call if-like,FILTER,WHY,WHAT) define if-like $(if $(filter $(1),$(2)),$(3)) endef # $(call dump-var,VAR) pretty-prints the content of a variable VAR on # multiple columns ifdef VERB define dump-var @echo "$(1) =" @echo "$($(1))" | sed 's/\([^ ][^ ]* [^ ][^ ]*\) */\1#/g' | \ tr '#' '\n' | column -t | sed 's/\(.*\)/ \1/g' endef else define dump-var @printf "%15s = %s\n" "$(1)" \ "$$(echo '$($(1))' | sed -e 's/[^ ][^ ]* /\.\.\./3' -e 's/\.\.\..*$$/\.\.\./g')" endef endif # $(call echo-var,VAR) pretty-prints the content of a variable VAR on # one line define echo-var @printf "%15s = %s\n" "$(1)" "$($(1))" endef # $(call echo-title,TITLE) pretty-prints TITLE as a title define echo-title @printf "** %s\n" "$(1)" endef # $(call print-command, CMD, TGT) prints a message define print-command @printf "%15s %s\n" "$(strip $(1))" "$(strip $(2))" endef # $(call C, CMD) runs $(CMD) silently define C @$(call print-command, $(1), "$(@)") @quiet () \ { \ local cmd out err ; \ cmd="$($(1))"; \ out=$$($${cmd} "$${@}" 2>&1) ; \ err=$${?} ; \ if test $${err} -gt 0 ; then \ echo "******* Offending Command:"; \ printf "%s" "$${cmd}" ; \ for i in "$${@}" ; do printf " '%s'" "$$i" ; done ; \ echo ; \ echo "******* Error Code: $${err}"; \ echo "******* Command Output:"; \ echo "$${out}"; \ fi; \ echo "$${out}" | grep [Ww]arning ; \ return $${err}; \ } ; quiet endef # If verbose print everything ifdef VERB C = $($(1)) endif # rule to create a directory .PRECIOUS: %/.dirstamp %/.dirstamp : @printf "%15s %s\n" MK "$(dir $@)" @mkdir -p $(dir $@) @echo "Directory generated by make." > $@ # $(call gendir, TARGET, DIR1 DIR2 ...) creates a target TARGET-dir that # triggers the creation of the directories DIR1, DIR2 define gendir $(1)-dir=$(foreach x,$(2),$(x)/.dirstamp) endef # -------------------------------------------------------------------- # Build # -------------------------------------------------------------------- # Each Makefile submodule appends appropriate dependencies to the all, # clean, archclean, distclean, and info targets. In addition, it # appends to the deps and bins variables the list of .d files (to be # inclued by make as auto-dependencies) and the list of files to be # added to the binary distribution. include make/dll.mak include make/bin.mak include make/matlab.mak include make/octave.mak include make/doc.mak include make/dist.mak .PHONY: clean, archclean, distclean, info, help no_dep_targets += clean archclean distclean info help clean: rm -f `find . -name '*~'` rm -f `find . -name '.DS_Store'` rm -f `find . -name '.gdb_history'` rm -f `find . -name '._*'` rm -rf ./results archclean: clean distclean: info: $(call echo-title,General settings) $(call dump-var,deps) $(call echo-var,PROFILE) $(call echo-var,DEBUG) $(call echo-var,VER) $(call echo-var,ARCH) $(call echo-var,CC) $(call echo-var,STD_CFLAGS) $(call echo-var,STD_LDFLAGS) $(call echo-var,DISABLE_SSE2) $(call echo-var,DISABLE_AVX) $(call echo-var,DISABLE_THREADS) $(call echo-var,DISABLE_OPENMP) @printf "\nThere are %s lines of code.\n" \ `cat $(m_src) $(mex_src) $(dll_src) $(dll_hdr) $(bin_src) | wc -l` # Holw help works: cat this file, # skip the first block until an empty line is found (twice) # print the first block until an empty line, # remove the `# ' prefix from each remaining line help: @cat Makefile | \ sed -n '1,/^$$/!p' | \ sed -n '1,/^$$/!p' | \ sed -n '1,/^$$/p' | \ sed 's/^# \{0,1\}\(.*\)$$/\1/' # -------------------------------------------------------------------- # Include dependencies # -------------------------------------------------------------------- .PRECIOUS: $(deps) ifeq ($(filter $(no_dep_targets), $(MAKECMDGOALS)),) -include $(deps) endif vlfeat/vl/0000755000175000017500000000000012237035722011371 5ustar dimadimavlfeat/vl/svm.c0000644000175000017500000020622112237004745012346 0ustar dimadima/** @file svm.c ** @brief Support Vector Machines (SVM) - Implementation ** @author Milan Sulc ** @author Daniele Perrone ** @author Andrea Vedaldi **/ /* Copyright (C) 2013 Milan Sulc. Copyright (C) 2012 Daniele Perrone. Copyright (C) 2011-13 Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @file svm.h ** @see @ref svm. **/ /** @page svm Support Vector Machines (SVM) @author Milan Sulc @author Daniele Perrone @author Andrea Vedaldi @tableofcontents *Support Vector Machines* (SVMs) are one of the most popular types of discriminate classifiers. VLFeat implements two solvers, SGD and SDCA, capable of learning linear SVMs on a large scale. These linear solvers can be combined with explicit feature maps to learn non-linear models as well. The solver supports a few variants of the standard SVM formulation, including using loss functions other than the hinge loss. @ref svm-starting demonstrates how to use VLFeat to learn an SVM. Information on SVMs and the corresponding optimization algorithms as implemented by VLFeat are given in: - @subpage svm-fundamentals - Linear SVMs and their learning. - @subpage svm-advanced - Loss functions, dual objective, and other details. - @subpage svm-sgd - The SGD algorithm. - @subpage svm-sdca - The SDCA algorithm. @section svm-starting Getting started This section demonstrates how to learn an SVM by using VLFeat. SVM learning is implemented by the ::VlSvm object type. Let's start by a complete example: @code #include #include int main() { vl_size const numData = 4 ; vl_size const dimension = 2 ; double x [dimension * numData] = { 0.0, -0.5, 0.6, -0.3, 0.0, 0.5 0.6, 0.0} ; double y [numData] = {1, 1, -1, 1} ; double lambda = 0.01; double * const model ; double bias ; VlSvm * svm = vl_svm_new(VlSvmSolverSgd, x, dimension, numData, y, lambda) ; vl_svm_train(svm) ; model = vl_svm_get_model(svm) ; bias = vl_svm_get_bias(svm) ; printf("model w = [ %f , %f ] , bias b = %f \n", model[0], model[1], bias); vl_svm_delete(svm) ; return 0; } @endcode This code learns a binary linear SVM using the SGD algorithm on four two-dimensional points using 0.01 as regularization parameter. ::VlSvmSolverSdca can be specified in place of ::VlSvmSolverSdca in orer to use the SDCA algorithm instead. Convergence and other diagnostic information can be obtained after training by using the ::vl_svm_get_statistics function. Algorithms regularly check for convergence (usally after each pass over the data). The ::vl_svm_set_diagnostic_function can be used to specify a callback to be invoked when diagnostic is run. This can be used, for example, to dump information on the screen as the algorithm progresses. Convergence is reached after a maximum number of iterations (::vl_svm_set_max_num_iterations) or after a given criterion falls below a threshold (::vl_svm_set_epsilon). The meaning of these may depend on the specific algorithm (see @ref svm for further details). ::VlSvm is a quite powerful object. Algorithms only need to perform inner product and accumulation operation on the data (see @ref svm-advanced). This is used to abstract from the data type and support almost anything by speciying just two functions (::vl_svm_set_data_functions). A simple interface to this advanced functionality is provided by the ::VlSvmDataset object. This supports natively @c float and @c double data types, as well as applying on the fly the homogeneous kernel map (@ref homkermap). This is exemplified in @ref svmdataset-starting. */ /** @page svm-fundamentals SVM fundamentals @tableofcontents This page introduces the SVM formulation used in VLFeat. See @ref svm for more information on VLFeat SVM support. Let $ \bx \in \real^d $ be a vector representing, for example, an image, an audio track, or a fragment of text. Our goal is to design a *classifier*, i.e. a function that associates to each vector $\bx$ a positive or negative label based on a desired criterion, for example the fact that the image contains or not a cat, that the audio track contains or not English speech, or that the text is or not a scientific paper. The vector $\bx$ is classified by looking at the sign of a *linear scoring function* $\langle \bx, \bw \rangle$. The goal of learning is to estimate the parameter $\bw \in \real^d$ in such a way that the score is positive if the vector $\bx$ belongs to the positive class and negative otherwise. In fact, in the standard SVM formulation the the goal is to have a score of *at least 1* in the first case, and of *at most -1* in the second one, imposing a *margin*. The parameter $\bw$ is estimated or *learned* by fitting the scoring function to a training set of $n$ example pairs $(\bx_i,y_i), i=1,\dots,n$. Here $y_i \in \{-1,1\}$ are the *ground truth labels* of the corresponding example vectors. The fit quality is measured by a *loss function* which, in standard SVMs, is the *hinge loss*: \[ \ell_i(\langle \bw,\bx\rangle) = \max\{0, 1 - y_i \langle \bw,\bx\rangle\}. \] Note that the hinge loss is zero only if the score $\langle \bw,\bx\rangle$ is at least 1 or at most -1, depending on the label $y_i$. Fitting the training data is usually insufficient. In order for the scoring function *generalize to future data* as well, it is usually preferable to trade off the fitting accuracy with the *regularity* of the learned scoring function $\langle \bx, \bw \rangle$. Regularity in the standard formulation is measured by the norm of the parameter vector $\|\bw\|^2$ (see @ref svm-advanced). Averaging the loss on all training samples and adding to it the regularizer weighed by a parameter $\lambda$ yields the *regularized loss objective* @f{equation}{ \boxed{\displaystyle E(\bw) = \frac{\lambda}{2} \left\| \bw \right\|^2 + \frac{1}{n} \sum_{i=1}^n \max\{0, 1 - y_i \langle \bw,\bx\rangle\}. \label{e:svm-primal-hinge} } @f} Note that this objective function is *convex*, so that there exists a single global optimum. The scoring function $\langle \bx, \bw \rangle$ considered so far has been linear and unbiased. @ref svm-bias discusses how a bias term can be added to the SVM and @ref svm-feature-maps shows how non-linear SVMs can be reduced to the linear case by computing suitable feature maps. @ref svm-learning shows how VLFeat can be used to learn an SVM by minimizing $E(\bw)$. @section svm-learning Learning Learning an SVM amounts to finding the minimizer $\bw^*$ of the cost function $E(\bw)$. While there are dozens of methods that can be used to do so, VLFeat implements two large scale methods, designed to work with linear SVMs (see @ref svm-feature-maps to go beyond linear): - @ref svm-sgd - @ref svm-sdca Using these solvers is exemplified in @ref svm-starting. @section svm-bias Adding a bias It is common to add to the SVM scoring function a *bias term* $b$, and to consider the score $\langle \bx,\bw \rangle + b$. In practice the bias term can be crucial to fit the training data optimally, as there is no reason why the inner products $\langle \bx,\bw \rangle$ should be naturally centered at zero. Some SVM learning algorithms can estimate both $\bw$ and $b$ directly. However, other algorithms such as SGD and SDCA cannot. In this case, a simple workaround is to add a constant component $B > 0$ (we call this constant the *bias multiplier*) to the data, i.e. consider the extended data vectors: \[ \bar \bx = \begin{bmatrix} \bx \\ B \end{bmatrix}, \quad \bar \bw = \begin{bmatrix} \bw \\ w_b \end{bmatrix}. \] In this manner the scoring function incorporates implicitly a bias $b = B w_b$: \[ \langle \bar\bx, \bar\bw \rangle = \langle \bx, \bw \rangle + B w_b. \] The disadvantage of this reduction is that the term $w_b^2$ becomes part of the SVM regularizer, which shrinks the bias $b$ towards zero. This effect can be alleviated by making $B$ sufficiently large, because in this case $\|\bw\|^2 \gg w_b^2$ and the shrinking effect is negligible. Unfortunately, making $B$ too large makes the problem numerically unbalanced, so a reasonable trade-off between shrinkage and stability is generally sought. Typically, a good trade-off is obtained by normalizing the data to have unitary Euclidean norm and then choosing $B \in [1, 10]$. Specific implementations of SGD and SDCA may provide explicit support to learn the bias in this manner, but it is important to understand the implications on speed and accuracy of the learning if this is done. @section svm-feature-maps Non-linear SVMs and feature maps So far only linear scoring function $\langle \bx,\bw \rangle$ have been considered. Implicitly, however, this assumes that the objects to be classified (e.g. images) have been encoded as vectors $\bx$ in a way that makes linear classification possible. This encoding step can be made explicit by introducing the *feature map* $\Phi(\bx) \in \real^d$. Including the feature map yields a scoring function *non-linear* in $\bx$: \[ \bx\in\mathcal{X} \quad\longrightarrow\quad \langle \Phi(\bx), \bw \rangle. \] The nature of the input space $\mathcal{X}$ can be arbitrary and might not have a vector space structure at all. The representation or encoding captures a notion of *similarity* between objects: if two vectors $\Phi(\bx_1)$ and $\Phi(\bx_2)$ are similar, then their scores will also be similar. Note that choosing a feature map amounts to incorporating this information in the model *prior* to learning. The relation of feature maps to similarity functions is formalized by the notion of a *kernel*, a positive definite function $K(\bx,\bx')$ measuring the similarity of a pair of objects. A feature map defines a kernel by \[ K(\bx,\bx') = \langle \Phi(\bx),\Phi(\bx') \rangle. \] Viceversa, any kernel function can be represented by a feature map in this manner, establishing an equivalence. So far, all solvers in VLFeat assume that the feature map $\Psi(\bx)$ can be explicitly computed. Although classically kernels were introduced to generalize solvers to non-linear SVMs for which a feature map *cannot* be computed (e.g. for a Gaussian kernel the feature map is infinite dimensional), in practice using explicit feature representations allow to use much faster solvers, so it makes sense to *reverse* this process. */ /** @page svm-advanced Advanced SVM topics @tableofcontents This page discusses advanced SVM topics. For an introduction to SVMs, please refer to @ref svm and @ref svm-fundamentals. @section svm-loss-functions Loss functions The SVM formulation given in @ref svm-fundamentals uses the hinge loss, which is only one of a variety of loss functions that are often used for SVMs. More in general, one can consider the objective @f{equation}{ E(\bw) = \frac{\lambda}{2} \left\| \bw \right\|^2 + \frac{1}{n} \sum_{i=1}^n \ell_i(\langle \bw,\bx\rangle). \label{e:svm-primal} @f} where the loss $\ell_i(z)$ is a convex function of the scalar variable $z$. Losses differ by: (i) their purpose (some are suitable for classification, other for regression), (ii) their smoothness (which usually affects how quickly the SVM objective function can be minimized), and (iii) their statistical interpretation (for example the logistic loss can be used to learn logistic models). Concrete examples are the:
    Name Loss $\ell_i(z)$ Description
    Hinge $\max\{0, 1-y_i z\}$ The standard SVM loss function.
    Square hinge $\max\{0, 1-y_i z\}^2$ The standard SVM loss function, but squared. This version is smoother and may yield numerically easier problems.
    Square or l2 $(y_i - z)^2$ This loss yields the ridge regression model (l2 regularised least square).
    Linear or l1 $|y_i - z|$ Another loss suitable for regression, usually more robust but harder to optimize than the squared one.
    Insensitive l1 $\max\{0, |y_i - z| - \epsilon\}$. This is a variant of the previous loss, proposed in the original Support Vector Regression formulation. Differently from the previous two losses, the insensitivity may yield to a sparse selection of support vectors.
    Logistic $\log(1 + e^{-y_i z})$ This corresponds to regularized logisitc regression. The loss can be seen as a negative log-likelihood: $\ell_i(z) = -\log P[y_i | z] = - \log \sigma(y_iz/2)$, where $\sigma(z) = e^z/(1 + e^z)$ is the sigmoid function, mapping a score $z$ to a probability. The $1/2$ factor in the sigmoid is due to the fact that labels are in $\{-1,1\}$ rather than $\{0,1\}$ as more common for the standard sigmoid model.
    @section svm-data-abstraction Data abstraction: working with compressed data VLFeat learning algorithms (SGD and SDCA) access the data by means of only two operations: - *inner product*: computing the inner product between the model and a data vector, i.e. $\langle \bw, \bx \rangle$. - *accumulation*: summing a data vector to the model, i.e. $\bw \leftarrow \bw + \beta \bx$. VLFeat learning algorithms are *parameterized* in these two operations. As a consequence, the data can be stored in any format suitable to the user (e.g. dense matrices, sparse matrices, block-sparse matrices, disk caches, and so on) provided that these two operations can be implemented efficiently. Differently from the data, however, the model vector $\bw$ is represented simply as a dense array of doubles. This choice is adequate in almost any case. A particularly useful aspect of this design choice is that the training data can be store in *compressed format* (for example by using product quantization (PQ)). Furthermore, higher-dimensional encodings such as the homogeneous kernel map (@ref homkermap) and the intersection kernel map can be *computed on the fly*. Such techniques are very important when dealing with GBs of data. @section svm-dual-problem Dual problem In optimization, the *dual objective* $D(\balpha)$ of the SVM objective $E(\bw)$ is of great interest. To obtain the dual objective, one starts by approximating each loss term from below by a family of planes: \[ \ell_i(z) = \sup_{u} (u z - \ell_i^*(u) ), \qquad \ell_i^*(u) = \sup_{z} (z u - \ell_i(z) ) \] where $\ell_i^*(u)$ is the *dual conjugate* of the loss and gives the intercept of each approximating plane as a function of the slope. When the loss function is convex, the approximation is in fact exact. Examples include:
    Name Loss $\ell_i(z)$ Conjugate loss $\ell_i^*(u)$
    Hinge $\max\{0, 1-y_i z\}$ \[ \ell_i^*(u) = \begin{cases} y_i u, & -1 \leq y_i u \leq 0, \\ +\infty, & \text{otherwise} \end{cases} \]
    Square hinge $\max\{0, 1-y_i z\}^2$ \[\ell_i^*(u) = \begin{cases} y_i u + \frac{u^2}{4}, & y_i u \leq 0, \\ +\infty, & \text{otherwise} \\ \end{cases}\]
    Linear or l1 $|y_i - z|$ \[\ell_i^*(u) = \begin{cases} y_i u, & -1 \leq y_i u \leq 1, \\ +\infty, & \text{otherwise} \\ \end{cases}\]
    Square or l2 $(y_i - z)^2$ \[\ell_i^*(u)=y_iu + \frac{u^2}{4}\]
    Insensitive l1 $\max\{0, |y_i - z| - \epsilon\}$.
    Logistic $\log(1 + e^{-y_i z})$ \[\ell_i^*(u) = \begin{cases} (1+u) \log(1+u) - u \log(-u), & -1 \leq y_i u \leq 0, \\ +\infty, & \text{otherwise} \\ \end{cases}\]
    Since each plane $- z \alpha_i - \ell^*_i(-\alpha_i) \leq \ell_i(z)$ bounds the loss from below, by substituting in $E(\bw)$ one can write a lower bound for the SVM objective \[ F(\bw,\balpha) = \frac{\lambda}{2} \|\bw\|^2 - \frac{1}{n}\sum_{i=1}^n (\bw^\top \bx_i\alpha_i + \ell_i^*(-\alpha_i)) \leq E(\bw). \] for each setting of the *dual variables* $\alpha_i$. The dual objective function $D(\balpha)$ is obtained by minimizing the lower bound $F(\bw,\balpha)$ w.r.t. to $\bw$: \[ D(\balpha) = \inf_{\bw} F(\bw,\balpha) \leq E(\bw). \] The minimizer and the dual objective are now easy to find: \[ \boxed{\displaystyle \bw(\balpha) = \frac{1}{\lambda n} \sum_{i=1}^n \bx_i \alpha_i = \frac{1}{\lambda n} X\balpha, \quad D(\balpha) = - \frac{1}{2\lambda n^2} \balpha^\top X^\top X \balpha + \frac{1}{n} \sum_{i=1}^n - \ell_i^*(-\alpha_i) } \] where $X = [\bx_1, \dots, \bx_n]$ is the data matrix. Since the dual is uniformly smaller than the primal, one has the *duality gap* bound: \[ D(\balpha) \leq P(\bw^*) \leq P(\bw(\balpha)) \] This bound can be used to evaluate how far off $\bw(\balpha)$ is from the primal minimizer $\bw^*$. In fact, due to convexity, this bound can be shown to be zero when $\balpha^*$ is the dual maximizer (strong duality): \[ D(\balpha^*) = P(\bw^*) = P(\bw(\balpha^*)), \quad \bw^* = \bw(\balpha^*). \] @section svm-C Parametrization in C Often a slightly different form of the SVM objective is considered, where a parameter $C$ is used to scale the loss instead of the regularizer: \[ E_C(\bw) = \frac{1}{2} \|\bw\|^2 + C \sum_{i=1}^n \ell_i(\langle \bx_i, \bw\rangle) \] This and the objective function $E(\bw)$ in $\lambda$ are equivalent (proportional) if \[ \lambda = \frac{1}{nC}, \qquad C = \frac{1}{n\lambda}. \] up to an overall scaling factor to the problem. **/ /** @page svm-sdca Stochastic Dual Coordinate Ascent @tableofcontents This page describes the *Stochastic Dual Coordinate Ascent* (SDCA) linear SVM solver. Please see @ref svm for an overview of VLFeat SVM support. SDCA maximizes the dual SVM objective (see @ref svm-dual-problem for a derivation of this expression): \[ D(\balpha) = - \frac{1}{2\lambda n^2} \balpha^\top X^\top X \balpha + \frac{1}{n} \sum_{i=1}^n - \ell_i^*(-\alpha_i) \] where $X$ is the data matrix. Recall that the primal parameter corresponding to a given setting of the dual variables is: \[ \bw(\balpha) = \frac{1}{\lambda n} \sum_{i=1}^n \bx_i \alpha_i = \frac{1}{\lambda n} X\balpha \] In its most basic form, the *SDCA algorithm* can be summarized as follows: - Let $\balpha_0 = 0$. - Until the duality gap $P(\bw(\balpha_t)) - D(\balpha_t) < \epsilon$ - Pick a dual variable $q$ uniformly at random in $1, \dots, n$. - Maximize the dual with respect to this variable: $\Delta\alpha_q = \max_{\Delta\alpha_q} D(\balpha_t + \Delta\alpha_q \be_q )$ - Update $\balpha_{t+1} = \balpha_{t} + \be_q \Delta\alpha_q$. In VLFeat, we partially use the nomenclature from @cite{shwartz13a-dual} and @cite{hsieh08a-dual}. @section svm-sdca-dual-max Dual coordinate maximization The updated dual objective can be expanded as: \[ D(\balpha_t + \be_q \Delta\alpha_q) = \text{const.} - \frac{1}{2\lambda n^2} \bx_q^\top \bx_q (\Delta\alpha_q)^2 - \frac{1}{n} \bx_q^\top \frac{X\alpha_t}{\lambda n} \Delta\alpha_q - \frac{1}{n} \ell^*_q(- \alpha_q - \Delta\alpha_q) \] This can also be written as @f{align*} D(\balpha_t + \be_q \Delta\alpha_q) &\propto - \frac{A}{2} (\Delta\alpha_q)^2 - B \Delta\alpha_q - \ell^*_q(- \alpha_q - \Delta\alpha_q), \\ A &= \frac{1}{\lambda n} \bx_q^\top \bx_q = \frac{1}{\lambda n} \| \bx_q \|^2, \\ B &= \bx_q^\top \frac{X\balpha_t}{\lambda n} = \bx_q^\top \bw_t. @f} Maximizing this quantity in the scalar variable $\Delta\balpha$ is usually not difficult. It is convenient to store and incrementally update the model $\bw_t$ after the optimal step $\Delta\balpha$ has been determined: \[ \bw_t = \frac{X \balpha_t}{\lambda n}, \quad \bw_{t+1} = \bw_t + \frac{1}{\lambda n }\bx_q \be_q \Delta\alpha_q. \] For example, consider the hinge loss as given in @ref svm-advanced : \[ \ell_q^*(u) = \begin{cases} y_q u, & -1 \leq y_q u \leq 0, \\ +\infty, & \text{otherwise}. \end{cases} \] The maximizer $\Delta\alpha_q$ of the update objective must be in the range where the conjugate loss is not infinite. Ignoring such bounds, the update can be obtained by setting the derivative of the objective to zero, obtaining \[ \tilde {\Delta \alpha_q}= \frac{y_q - B}{A}. \] Note that $B$ is simply current score associated by the SVM to the sample $\bx_q$. Incorporating the constraint $-1 \leq - y_q (\alpha_q + \Delta \alpha_q) \leq 0$, i.e. $0 \leq y_q (\alpha_q + \Delta \alpha_q) \leq 1$, one obtains the update \[ \Delta\alpha_q = y_q \max\{0, \min\{1, \tilde {\Delta\alpha_q } + y_q \alpha_q\}\} - \alpha_q. \] @section svm-sdca-details Implementation details Rather than visiting points completely at random, VLFeat SDCA follows the best practice of visiting all the points at every epoch (pass through the data), changing the order of the visit randomly by picking every time a new random permutation. **/ /** @page svm-sgd Stochastic Gradient Descent @tableofcontents This page describes the *Stochastic Gradient Descent* (SGD) linear SVM solver. SGD minimizes directly the primal SVM objective (see @ref svm): \[ E(\bw) = \frac{\lambda}{2} \left\| \bw \right\|^2 + \frac{1}{n} \sum_{i=1}^n \ell_i(\langle \bw,\bx\rangle) \] Firts, rewrite the objective as the average \[ E(\bw) = \frac{1}{n} \sum_{i=1}^n E_i(\bw), \quad E_i(\bw) = \frac{\lambda}{2} \left\| \bw \right\|^2 + \ell_i(\langle \bw,\bx\rangle). \] Then SGD performs gradient steps by considering at each iteration one term $E_i(\bw)$ selected at random from this average. In its most basic form, the algorithm is: - Start with $\bw_0 = 0$. - For $t=1,2,\dots T$: - Sample one index $i$ in $1,\dots,n$ uniformly at random. - Compute a subgradient $\bg_t$ of $E_i(\bw)$ at $\bw_t$. - Compute the learning rate $\eta_t$. - Update $\bw_{t+1} = \bw_t - \eta_t \bg_t$. Provided that the learning rate $\eta_t$ is chosen correctly, this simple algorithm is guaranteed to converge to the minimizer $\bw^*$ of $E$. @section svm-sgd-convergence Convergence and speed The goal of the SGD algorithm is to bring the *primal suboptimality* below a threshold $\epsilon_P$: \[ E(\bw_t) - E(\bw^*) \leq \epsilon_P. \] If the learning rate $\eta_t$ is selected appropriately, SGD can be shown to converge properly. For example, @cite{shalev-shwartz07pegasos} show that, since $E(\bw)$ is $\lambda$-strongly convex, then using the learning rate \[ \boxed{\eta_t = \frac{1}{\lambda t}} \] guarantees that the algorithm reaches primal-suboptimality $\epsilon_P$ in \[ \tilde O\left( \frac{1}{\lambda \epsilon_P} \right). \] iterations. This particular SGD variant is sometimes known as PEGASOS @cite{shalev-shwartz07pegasos} and is the version implemented in VLFeat. The *convergence speed* is not sufficient to tell the *learning speed*, i.e. how quickly an algorithm can learn an SVM that performs optimally on the test set. The following two observations can be used to link convergence speed to learning speed: - The regularizer strength is often heuristically selected to be inversely proportional to the number of training samples: $\lambda = \lambda_0 /n$. This reflects the fact that with more training data the prior should count less. - The primal suboptimality $\epsilon_P$ should be about the same as the estimation error of the SVM primal. This estimation error is due to the finite training set size and can be shown to be of the order of $1/\lambda n = 1 / \lambda_0$. Under these two assumptions, PEGASOS can learn a linear SVM in time $\tilde O(n)$, which is *linear in the number of training examples*. This fares much better with $O(n^2)$ or worse of non-linear SVM solvers. @section svm-sgd-bias The bias term Adding a bias $b$ to the SVM scoring function $\langle \bw, \bx \rangle +b$ is done, as explained in @ref svm-bias, by appending a constant feature $B$ (the *bias multiplier*) to the data vectors $\bx$ and a corresponding weight element $w_b$ to the weight vector $\bw$, so that $b = B w_b$ As noted, the bias multiplier should be relatively large in order to avoid shrinking the bias towards zero, but small to make the optimization stable. In particular, setting $B$ to zero learns an unbiased SVM (::vl_svm_set_bias_multiplier). To counter instability caused by a large bias multiplier, the learning rate of the bias is slowed down by multiplying the overall learning rate $\eta_t$ by a bias-specific rate coefficient (::vl_svm_set_bias_learning_rate). As a rule of thumb, if the data vectors $\bx$ are $l^2$ normalized (as they typically should for optimal performance), then a reasonable bias multiplier is in the range 1 to 10 and a reasonable bias learning rate is somewhere in the range of the inverse of that (in this manner the two parts of the extended feature vector $(\bx, B)$ are balanced). @section svm-sgd-starting-iteration Adjusting the learning rate Initially, the learning rate $\eta_t = 1/\lambda t$ is usually too fast: as usually $\lambda \ll 1$, $\eta_1 \gg 1$. But this is clearly excessive (for example, without a loss term, the best learning rate at the first iteration is simply $\eta_1=1$, as this nails the optimum in one step). Thus, the learning rate formula is modified to be $\eta_t = 1 / \lambda (t + t_0)$, where $t_0 \approx 0.5/\lambda$, which is equivalent to start $t_0$ iterations later. In this manner $\eta_1 \approx 1/2$. @subsection svm-sgd-warm-start Warm start Starting from a given model $\bw$ is easy in SGD as the optimization runs in the primal. However, the starting iteration index $t$ should also be advanced for a warm start, as otherwise the initial setting of $\bw$ is rapidly forgot (::vl_svm_set_model, ::vl_svm_set_bias, ::vl_svm_set_iteration_number). @section svm-sgd-details Implementation details @par "Random sampling of points" Rather than visiting points completely at random, VLFeat SDCA follows the best practice of visiting all the points at every epoch (pass through the data), changing the order of the visit randomly by picking every time a new random permutation. @par "Factored representation" At each iteration, the SGD algorithm updates the vector $\bw$ (including the additional bias component $w_b$) as $\bw_{t+1} \leftarrow \bw_t - \eta_t \bw_t - \eta \bg_t$, where $\eta_t$ is the learning rate. If the subgradient of the loss function $\bg_t$ is zero at a given iteration, this amounts to simply shrink $\bw$ towards the origin by multiplying it by the factor $1 - \eta$. Thus such an iteration can be accelerated significantly by representing internally $\bw_t = f_t \bu_t$, where $f_t$ is a scaling factor. Then, the update becomes \[ f_{t+1} \bu_{t+1} = f_{t} \bu_{t} - \eta_t f_{t} \bu_{t} - \eta_t \bg_t = (1-\eta_t) f_{t} \bu_{t} - \eta \bg_t. \] Setting $f_{t+1} = (1-\eta_t) f_{t}$, this gives the update equation for $\bu_t$ \[ \bu_{t+1} = \bu_{t} - \frac{\eta_t}{f_{t+1}} \bg_t. \] but this step can be skipped whenever $\bg_t$ is equal to zero. When the bias component has a different learning rate, this scheme must be adjusted slightly by adding a separated factor for the bias, but it is otherwise identical. **/ /* @section svm-pegasos PEGASOS @subsection svm-pegasos-algorithm Algorithm PEGASOS @cite{shalev-shwartz07pegasos} is a stochastic subgradient optimizer. At the t-th iteration the algorithm: - Samples uniformly at random as subset @f$ A_t @f$ of k of training pairs @f$(x,y)@f$ from the m pairs provided for training (this subset is called mini batch). - Computes a subgradient @f$ \nabla_t @f$ of the function @f$ E_t(w) = \frac{1}{2}\|w\|^2 + \frac{1}{k} \sum_{(x,y) \in A_t} \ell(w;(x,y)) @f$ (this is the SVM objective function restricted to the minibatch). - Compute an intermediate weight vector @f$ w_{t+1/2} @f$ by doing a step @f$ w_{t+1/2} = w_t - \alpha_t \nabla_t @f$ with learning rate @f$ \alpha_t = 1/(\eta t) @f$ along the subgradient. Note that the learning rate is inversely proportional to the iteration number. - Back projects the weight vector @f$ w_{t+1/2} @f$ on the hypersphere of radius @f$ \sqrt{\lambda} @f$ to obtain the next model estimate @f$ w_{t+1} @f$: @f[ w_t = \min\{1, \sqrt{\lambda}/\|w\|\} w_{t+1/2}. @f] The hypersphere is guaranteed to contain the optimal weight vector @f$ w^* @f$. VLFeat implementation fixes to one the size of the mini batches @f$ k @f$. @subsection svm-pegasos-permutation Permutation VLFeat PEGASOS can use a user-defined permutation to decide the order in which data points are visited (instead of using random sampling). By specifying a permutation the algorithm is guaranteed to visit each data point exactly once in each loop. The permutation needs not to be bijective. This can be used to visit certain data samples more or less often than others, implicitly reweighting their relative importance in the SVM objective function. This can be used to balance the data. @subsection svm-pegasos-kernels Non-linear kernels PEGASOS can be extended to non-linear kernels, but the algorithm is not particularly efficient in this setting [1]. When possible, it may be preferable to work with explicit feature maps. Let @f$ k(x,y) @f$ be a positive definite kernel. A feature map is a function @f$ \Psi(x) @f$ such that @f$ k(x,y) = \langle \Psi(x), \Psi(y) \rangle @f$. Using this representation the non-linear SVM learning objective function writes: @f[ \min_{w} \frac{\lambda}{2} \|w\|^2 + \frac{1}{m} \sum_{i=1}^n \ell(w; (\Psi(x)_i,y_i)). @f] Thus the only difference with the linear case is that the feature @f$ \Psi(x) @f$ is used in place of the data @f$ x @f$. @f$ \Psi(x) @f$ can be learned off-line, for instance by using the incomplete Cholesky decomposition @f$ V^\top V @f$ of the Gram matrix @f$ K = [k(x_i,x_j)] @f$ (in this case @f$ \Psi(x_i) @f$ is the i-th columns of V). Alternatively, for additive kernels (e.g. intersection, Chi2) the explicit feature map computed by @ref homkermap.h can be used. For additive kernels it is also possible to perform the feature expansion online inside the solver, setting the specific feature map via ::vl_svmdataset_set_map. This is particular useful to keep the size of the training data small, when the number of the samples is big or the memory is limited. */ #include "svm.h" #include "mathop.h" #include struct VlSvm_ { VlSvmSolverType solver ; /**< SVM solver type. */ vl_size dimension ; /**< Model dimension. */ double * model ; /**< Model ($\bw$ vector). */ double bias ; /**< Bias. */ double biasMultiplier ; /**< Bias feature multiplier. */ /* valid during a run */ double lambda ; /**< Regularizer multiplier. */ void const * data ; vl_size numData ; double const * labels ; /**< Data labels. */ double const * weights ; /**< Data weights. */ VlSvmDataset * ownDataset ; /**< Optional owned dataset. */ VlSvmDiagnosticFunction diagnosticFn ; void * diagnosticFnData ; vl_size diagnosticFrequency ; /**< Frequency of diagnostic. */ VlSvmLossFunction lossFn ; VlSvmLossFunction conjugateLossFn ; VlSvmLossFunction lossDerivativeFn ; VlSvmDcaUpdateFunction dcaUpdateFn ; VlSvmInnerProductFunction innerProductFn ; VlSvmAccumulateFunction accumulateFn ; vl_size iteration ; /**< Current iterations number. */ vl_size maxNumIterations ; /**< Maximum number of iterations. */ double epsilon ; /**< Stopping threshold. */ /* Book keeping */ VlSvmStatistics statistics ; /**< Statistcs. */ double * scores ; /* SGD specific */ double biasLearningRate ; /**< Bias learning rate. */ /* SDCA specific */ double * alpha ; /**< Dual variables. */ } ; /* ---------------------------------------------------------------- */ /** @brief Create a new object with plain data. ** @param type type of SMV solver. ** @param data a pointer to a matrix of data. ** @param dimension dimension of the SVM model. ** @param numData number of training samples. ** @param labels training labels. ** @param lambda regularizer parameter. ** @return the new object. ** ** @a data has one column per sample, in @c double format. ** More advanced inputs can be used with ::vl_svm_new_with_dataset ** and ::vl_svm_new_with_abstract_data. ** ** @sa ::vl_svm_delete **/ VlSvm * vl_svm_new (VlSvmSolverType type, double const * data, vl_size dimension, vl_size numData, double const * labels, double lambda) { VlSvmDataset * dataset = vl_svmdataset_new(VL_TYPE_DOUBLE, (void*)data, dimension, numData) ; VlSvm * self = vl_svm_new_with_dataset (type, dataset, labels, lambda) ; self->ownDataset = dataset ; return self ; } /** @brief Create a new object with a dataset. ** @param solver type of SMV solver. ** @param dataset SVM dataset object ** @param labels training samples labels. ** @param lambda regularizer parameter. ** @return the new object. ** @sa ::vl_svm_delete **/ VlSvm * vl_svm_new_with_dataset (VlSvmSolverType solver, VlSvmDataset * dataset, double const * labels, double lambda) { VlSvm * self = vl_svm_new_with_abstract_data (solver, dataset, vl_svmdataset_get_dimension(dataset), vl_svmdataset_get_num_data(dataset), labels, lambda) ; vl_svm_set_data_functions (self, vl_svmdataset_get_inner_product_function(dataset), vl_svmdataset_get_accumulate_function(dataset)) ; return self ; } /** @brief Create a new object with abstract data. ** @param solver type of SMV solver. ** @param data pointer to the data. ** @param dimension dimension of the SVM model. ** @param numData num training samples. ** @param labels training samples labels. ** @param lambda regularizer parameter. ** @return the new object. ** ** After calling this function, ::vl_svm_set_data_functions *must* ** be used to setup suitable callbacks for the inner product ** and accumulation operations (@see svm-data-abstraction). ** ** @sa ::vl_svm_delete **/ VlSvm * vl_svm_new_with_abstract_data (VlSvmSolverType solver, void * data, vl_size dimension, vl_size numData, double const * labels, double lambda) { VlSvm * self = vl_calloc(1,sizeof(VlSvm)) ; assert(dimension >= 1) ; assert(numData >= 1) ; assert(labels) ; self->solver = solver ; self->dimension = dimension ; self->model = 0 ; self->bias = 0 ; self->biasMultiplier = 1.0 ; self->lambda = lambda ; self->data = data ; self->numData = numData ; self->labels = labels ; self->diagnosticFrequency = numData ; self->diagnosticFn = 0 ; self->diagnosticFnData = 0 ; self->lossFn = vl_svm_hinge_loss ; self->conjugateLossFn = vl_svm_hinge_conjugate_loss ; self->lossDerivativeFn = vl_svm_hinge_loss_derivative ; self->dcaUpdateFn = vl_svm_hinge_dca_update ; self->innerProductFn = 0 ; self->accumulateFn = 0 ; self->iteration = 0 ; self->maxNumIterations = VL_MAX((double)numData, vl_ceil_f(10.0 / lambda)) ; self->epsilon = 1e-2 ; /* SGD */ self->biasLearningRate = 0.01 ; /* SDCA */ self->alpha = 0 ; /* allocations */ self->model = vl_calloc(dimension, sizeof(double)) ; if (self->model == NULL) goto err_alloc ; if (self->solver == VlSvmSolverSdca) { self->alpha = vl_calloc(self->numData, sizeof(double)) ; if (self->alpha == NULL) goto err_alloc ; } self->scores = vl_calloc(numData, sizeof(double)) ; if (self->scores == NULL) goto err_alloc ; return self ; err_alloc: if (self->scores) { vl_free (self->scores) ; self->scores = 0 ; } if (self->model) { vl_free (self->model) ; self->model = 0 ; } if (self->alpha) { vl_free (self->alpha) ; self->alpha = 0 ; } return 0 ; } /** @brief Delete object. ** @param self object. ** @sa ::vl_svm_new **/ void vl_svm_delete (VlSvm * self) { if (self->model) { vl_free (self->model) ; self->model = 0 ; } if (self->alpha) { vl_free (self->alpha) ; self->alpha = 0 ; } if (self->ownDataset) { vl_svmdataset_delete(self->ownDataset) ; self->ownDataset = 0 ; } vl_free (self) ; } /* ---------------------------------------------------------------- */ /* Setters and getters */ /* ---------------------------------------------------------------- */ /** @brief Set the convergence threshold ** @param self object ** @param epsilon threshold (non-negative). **/ void vl_svm_set_epsilon (VlSvm *self, double epsilon) { assert(self) ; assert(epsilon >= 0) ; self->epsilon = epsilon ; } /** @brief Get the convergence threshold ** @param self object ** @return epsilon threshold. **/ double vl_svm_get_epsilon (VlSvm const *self) { assert(self) ; return self->epsilon ; } /** @brief Set the bias learning rate ** @param self object ** @param rate bias learning rate (positive). ** ** This parameter applies only to the SGD solver. **/ void vl_svm_set_bias_learning_rate (VlSvm *self, double rate) { assert(self) ; assert(rate > 0) ; self->biasLearningRate = rate ; } /** @brief Get the bias leraning rate. ** @param self object ** @return bias learning rate. **/ double vl_svm_get_bias_learning_rate (VlSvm const *self) { assert(self) ; return self->biasLearningRate ; } /** @brief Set the bias multiplier. ** @param self object ** @param b bias multiplier. ** ** The *bias multiplier* is the value of the constant feature ** appended to the data vectors to implement the bias (@ref svm-bias). **/ void vl_svm_set_bias_multiplier (VlSvm * self, double b) { assert(self) ; assert(b >= 0) ; self->biasMultiplier = b ; } /** @brief Get the bias multiplier. ** @param self object. ** @return bias multiplier. **/ double vl_svm_get_bias_multiplier (VlSvm const * self) { assert(self) ; return self->biasMultiplier ; } /** @brief Set the current iteratio number. ** @param self object. ** @param n iteration number. ** ** If called before training, ** this can be used with SGD for a warm start, as the net ** effect is to slow down the learning rate. **/ void vl_svm_set_iteration_number (VlSvm *self, vl_uindex n) { assert(self) ; self->iteration = n ; } /** @brief Get the current iteration number. ** @param self object. ** @return current iteration number. **/ vl_size vl_svm_get_iteration_number (VlSvm const *self) { assert(self) ; return self->iteration ; } /** @brief Set the maximum number of iterations. ** @param self object. ** @param n maximum number of iterations. **/ void vl_svm_set_max_num_iterations (VlSvm *self, vl_size n) { assert(self) ; self->maxNumIterations = n ; } /** @brief Get the maximum number of iterations. ** @param self object. ** @return maximum number of iterations. **/ vl_size vl_svm_get_max_num_iterations (VlSvm const *self) { assert(self) ; return self->maxNumIterations ; } /** @brief Set the diagnostic frequency. ** @param self object. ** @param f diagnostic frequency (@c >= 1). ** ** A diagnostic round (to test for convergence and to printout ** information) is performed every @a f iterations. **/ void vl_svm_set_diagnostic_frequency (VlSvm *self, vl_size f) { assert(self) ; assert(f > 0) ; self->diagnosticFrequency = f ; } /** @brief Get the diagnostic frequency. ** @param self object. ** @return diagnostic frequency. **/ vl_size vl_svm_get_diagnostic_frequency (VlSvm const *self) { assert(self) ; return self->diagnosticFrequency ; } /** @brief Get the SVM solver type. ** @param self object. ** @return SVM solver type. **/ VlSvmSolverType vl_svm_get_solver (VlSvm const * self) { assert(self) ; return self->solver ; } /** @brief Set the regularizer parameter lambda. ** @param self object. ** @param lambda regularizer parameter. ** ** Note that @a lambda is usually set when calling a ** constructor for ::VlSvm as certain parameters, such ** as the maximum number of iterations, are tuned accordingly. ** This tuning is not performed when @a lambda is changed ** using this function. **/ void vl_svm_set_lambda (VlSvm * self, double lambda) { assert(self) ; assert(lambda >= 0) ; self->lambda = lambda ; } /** @brief Get the regularizer parameter lambda. ** @param self object. ** @return diagnostic frequency. **/ double vl_svm_get_lambda (VlSvm const * self) { assert(self) ; return self->lambda ; } /** @brief Set the data weights. ** @param self object. ** @param weights data weights. ** ** @a weights must be an array of non-negative weights. ** The loss of each data point is multiplied by the corresponding ** weight. ** ** Set @a weights to @c NULL to weight the data uniformly by 1 (default). ** ** Note that the @a weights array is *not* copied and must be valid ** througout the object lifetime (unless it is replaced). **/ void vl_svm_set_weights (VlSvm * self, double const *weights) { assert(self) ; self->weights = weights ; } /** @brief Get the data weights. ** @param self object. ** @return data weights. **/ double const *vl_svm_get_weights (VlSvm const * self) { assert(self) ; return self->weights ; } /* ---------------------------------------------------------------- */ /* Get data */ /* ---------------------------------------------------------------- */ /** @brief Get the model dimenison. ** @param self object. ** @return model dimension. ** ** This is the dimensionality of the weight vector $\bw$. **/ vl_size vl_svm_get_dimension (VlSvm *self) { assert(self) ; return self->dimension ; } /** @brief Get the number of data samples. ** @param self object. ** @return model number of data samples ** ** This is the dimensionality of the weight vector $\bw$. **/ vl_size vl_svm_get_num_data (VlSvm *self) { assert(self) ; return self->numData ; } /** @brief Get the SVM model. ** @param self object. ** @return model. ** ** This is the weight vector $\bw$. **/ double const * vl_svm_get_model (VlSvm const *self) { assert(self) ; return self->model ; } /** @brief Set the SVM model. ** @param self object. ** @param model model. ** ** The function *copies* the content of the vector @a model to the ** internal model buffer. This operation can be used for warm start ** with the SGD algorithm, but has undefined effect with the SDCA algorithm. **/ void vl_svm_set_model (VlSvm *self, double const *model) { assert(self) ; assert(model) ; memcpy(self->model, model, sizeof(double) * vl_svm_get_dimension(self)) ; } /** @brief Set the SVM bias. ** @param self object. ** @param b bias. ** ** The function set the internal representation of the SVM bias to ** be equal to @a b (the bias multiplier ** is applied). The same remark ** that applies to ::vl_svm_set_model applies here too. **/ void vl_svm_set_bias (VlSvm *self, double b) { assert(self); if (self->biasMultiplier) { self->bias = b / self->biasMultiplier ; } } /** @brief Get the value of the bias. ** @param self object. ** @return bias $b$. ** ** The value of the bias returned already include the effect of ** bias mutliplier. **/ double vl_svm_get_bias (VlSvm const *self) { assert(self) ; return self->bias * self->biasMultiplier ; } /** @brief Get the solver statistics. ** @param self object. ** @return statistics. **/ VlSvmStatistics const * vl_svm_get_statistics (VlSvm const *self) { assert(self) ; return &self->statistics ; } /** @brief Get the scores of the data points. ** @param self object. ** @return vector of scores. ** ** After training or during the diagnostic callback, ** this function can be used to retrieve the scores ** of the points, i.e. $\langle \bx_i, \bw \rangle + b$. **/ double const * vl_svm_get_scores (VlSvm const *self) { return self->scores ; } /* ---------------------------------------------------------------- */ /* Callbacks */ /* ---------------------------------------------------------------- */ /** @typedef VlSvmDiagnosticFunction ** @brief SVM diagnostic function pointer. ** @param svm is an instance of ::VlSvm . **/ /** @typedef VlSvmAccumulateFunction ** @brief Pointer to a function that adds to @a model the data point at ** position @a element multiplied by the constant @a multiplier. **/ /** @typedef VlSvmInnerProductFunction ** @brief Pointer to a function that defines the inner product ** between the data point at position @a element and the SVM model **/ /** @brief Set the diagnostic function callback ** @param self object. ** @param f diagnostic function pointer. ** @param data pointer to data used by the diagnostic function. **/ void vl_svm_set_diagnostic_function (VlSvm *self, VlSvmDiagnosticFunction f, void *data) { self->diagnosticFn = f ; self->diagnosticFnData = data ; } /** @brief Set the data functions. ** @param self object. ** @param inner inner product function. ** @param acc accumulate function. ** ** See @ref svm-data-abstraction. **/ void vl_svm_set_data_functions (VlSvm *self, VlSvmInnerProductFunction inner, VlSvmAccumulateFunction acc) { assert(self) ; assert(inner) ; assert(acc) ; self->innerProductFn = inner ; self->accumulateFn = acc ; } /** @brief Set the loss function callback. ** @param self object. ** @param f loss function callback. ** ** Note that setting up a loss requires specifying more than just one ** callback. See @ref svm-loss-functions for details. **/ void vl_svm_set_loss_function (VlSvm *self, VlSvmLossFunction f) { assert(self) ; self->lossFn = f ; } /** @brief Set the loss derivative function callback. ** @copydetails vl_svm_set_loss_function. **/ void vl_svm_set_loss_derivative_function (VlSvm *self, VlSvmLossFunction f) { assert(self) ; self->lossDerivativeFn = f ; } /** @brief Set the conjugate loss function callback. ** @copydetails vl_svm_set_loss_function. **/ void vl_svm_set_conjugate_loss_function (VlSvm *self, VlSvmLossFunction f) { assert(self) ; self->conjugateLossFn = f ; } /** @brief Set the DCA update function callback. ** @copydetails vl_svm_set_loss_function. **/ void vl_svm_set_dca_update_function (VlSvm *self, VlSvmDcaUpdateFunction f) { assert(self) ; self->dcaUpdateFn = f ; } /** @brief Set the loss function to one of the default types. ** @param self object. ** @param loss type of loss function. ** @sa @ref svm-loss-functions. **/ void vl_svm_set_loss (VlSvm *self, VlSvmLossType loss) { #define SETLOSS(x,y) \ case VlSvmLoss ## x: \ vl_svm_set_loss_function(self, vl_svm_ ## y ## _loss) ; \ vl_svm_set_loss_derivative_function(self, vl_svm_ ## y ## _loss_derivative) ; \ vl_svm_set_conjugate_loss_function(self, vl_svm_ ## y ## _conjugate_loss) ; \ vl_svm_set_dca_update_function(self, vl_svm_ ## y ## _dca_update) ; \ break; switch (loss) { SETLOSS(Hinge, hinge) ; SETLOSS(Hinge2, hinge2) ; SETLOSS(L1, l1) ; SETLOSS(L2, l2) ; SETLOSS(Logistic, logistic) ; default: assert(0) ; } } /* ---------------------------------------------------------------- */ /* Pre-defined losses */ /* ---------------------------------------------------------------- */ /** @typedef VlSvmLossFunction ** @brief SVM loss function pointer. ** @param inner inner product between sample and model $\bw^\top \bx$. ** @param label sample label $y$. ** @return value of the loss. ** ** The interface is the same for a loss function, its derivative, ** or the conjugate loss. ** ** @sa @ref svm-fundamentals **/ /** @typedef VlSvmDcaUpdateFunction ** @brief SVM SDCA update function pointer. ** @param alpha current value of the dual variable. ** @param inner inner product $\bw^\top \bx$ of the sample with the SVM model. ** @param norm2 normalization factor $\|\bx\|^2/\lambda n$. ** @param label label $y$ of the sample. ** @return incremental update $\Delta\alpha$ of the dual variable. ** ** @sa @ref svm-sdca **/ /** @brief SVM hinge loss ** @copydetails VlSvmLossFunction */ double vl_svm_hinge_loss (double inner, double label) { return VL_MAX(1 - label * inner, 0.0); } /** @brief SVM hinge loss derivative ** @copydetails VlSvmLossFunction */ double vl_svm_hinge_loss_derivative (double inner, double label) { if (label * inner < 1.0) { return - label ; } else { return 0.0 ; } } /** @brief SVM hinge loss conjugate ** @param u dual variable. ** @param label label value. ** @return conjugate loss. **/ double vl_svm_hinge_conjugate_loss (double u, double label) { double z = label * u ; if (-1 <= z && z <= 0) { return label * u ; } else { return VL_INFINITY_D ; } } /** @brief SVM hinge loss DCA update ** @copydetails VlSvmDcaUpdateFunction */ double vl_svm_hinge_dca_update (double alpha, double inner, double norm2, double label) { double palpha = (label - inner) / norm2 + alpha ; return label * VL_MAX(0, VL_MIN(1, label * palpha)) - alpha ; } /** @brief SVM square hinge loss ** @copydetails VlSvmLossFunction */ double vl_svm_hinge2_loss (double inner,double label) { double z = VL_MAX(1 - label * inner, 0.0) ; return z*z ; } /** @brief SVM square hinge loss derivative ** @copydetails VlSvmLossFunction */ double vl_svm_hinge2_loss_derivative (double inner, double label) { if (label * inner < 1.0) { return 2 * (inner - label) ; } else { return 0 ; } } /** @brief SVM square hinge loss conjugate ** @copydetails vl_svm_hinge_conjugate_loss */ double vl_svm_hinge2_conjugate_loss (double u, double label) { if (label * u <= 0) { return (label + u/4) * u ; } else { return VL_INFINITY_D ; } } /** @brief SVM square hinge loss DCA update ** @copydetails VlSvmDcaUpdateFunction */ double vl_svm_hinge2_dca_update (double alpha, double inner, double norm2, double label) { double palpha = (label - inner - 0.5*alpha) / (norm2 + 0.5) + alpha ; return label * VL_MAX(0, label * palpha) - alpha ; } /** @brief SVM l1 loss ** @copydetails VlSvmLossFunction */ double vl_svm_l1_loss (double inner,double label) { return vl_abs_d(label - inner) ; } /** @brief SVM l1 loss derivative ** @copydetails VlSvmLossFunction */ double vl_svm_l1_loss_derivative (double inner, double label) { if (label > inner) { return - 1.0 ; } else { return + 1.0 ; } } /** @brief SVM l1 loss conjugate ** @copydetails vl_svm_hinge_conjugate_loss */ double vl_svm_l1_conjugate_loss (double u, double label) { if (vl_abs_d(u) <= 1) { return label*u ; } else { return VL_INFINITY_D ; } } /** @brief SVM l1 loss DCA update ** @copydetails VlSvmDcaUpdateFunction */ double vl_svm_l1_dca_update (double alpha, double inner, double norm2, double label) { if (vl_abs_d(alpha) <= 1) { double palpha = (label - inner) / norm2 + alpha ; return VL_MAX(-1.0, VL_MIN(1.0, palpha)) - alpha ; } else { return VL_INFINITY_D ; } } /** @brief SVM l2 loss ** @copydetails VlSvmLossFunction */ double vl_svm_l2_loss (double inner,double label) { double z = label - inner ; return z*z ; } /** @brief SVM l2 loss derivative ** @copydetails VlSvmLossFunction */ double vl_svm_l2_loss_derivative (double inner, double label) { return - 2 * (label - inner) ; } /** @brief SVM l2 loss conjugate ** @copydetails vl_svm_hinge_conjugate_loss */ double vl_svm_l2_conjugate_loss (double u, double label) { return (label + u/4) * u ; } /** @brief SVM l2 loss DCA update ** @copydetails VlSvmDcaUpdateFunction */ double vl_svm_l2_dca_update (double alpha, double inner, double norm2, double label) { return (label - inner - 0.5*alpha) / (norm2 + 0.5) ; } /** @brief SVM l2 loss ** @copydetails VlSvmLossFunction */ double vl_svm_logistic_loss (double inner,double label) { double z = label * inner ; if (z >= 0) { return log(1.0 + exp(-z)) ; } else { return -z + log(exp(z) + 1.0) ; } } /** @brief SVM l2 loss derivative ** @copydetails VlSvmLossFunction */ double vl_svm_logistic_loss_derivative (double inner, double label) { double z = label * inner ; double t = 1 / (1 + exp(-z)) ; /* this is stable for z << 0 too */ return label * (t - 1) ; /* = -label exp(-z) / (1 + exp(-z)) */ } VL_INLINE double xlogx(double x) { if (x <= 1e-10) return 0 ; return x*log(x) ; } /** @brief SVM l2 loss conjugate ** @copydetails vl_svm_hinge_conjugate_loss */ double vl_svm_logistic_conjugate_loss (double u, double label) { double z = label * u ; if (-1 <= z && z <= 0) { return xlogx(-z) + xlogx(1+z) ; } else { return VL_INFINITY_D ; } } /** @brief SVM l2 loss DCA update ** @copydetails VlSvmDcaUpdateFunction */ double vl_svm_logistic_dca_update (double alpha, double inner, double norm2, double label) { /* The goal is to solve the problem min_delta A/2 delta^2 + B delta + l*(-alpha - delta|y), -1 <= - y (alpha+delta) <= 0 where A = norm2, B = inner, and y = label. To simplify the notation, we set f(beta) = beta * log(beta) + (1 - beta) * log(1 - beta) where beta = y(alpha + delta) such that l*(-alpha - delta |y) = f(beta). Hence 0 <= beta <= 1, delta = + y beta - alpha. Substituting min_beta A/2 beta^2 + y (B - A alpha) beta + f(beta) + const The Newton step is then given by beta = beta - (A beta + y(B - A alpha) + df) / (A + ddf). However, the function is singluar for beta=0 and beta=1 (infinite first and second order derivatives). Since the function is monotonic (second derivarive always strictly greater than zero) and smooth, we canuse bisection to find the zero crossing of the first derivative. Once one is sufficiently close to the optimum, a one or two Newton steps are sufficien to land on it with excellent accuracy. */ double df, ddf, der, dder ; vl_index t ; /* bisection */ double beta1 = 0 ; double beta2 = 1 ; double beta = 0.5 ; for (t = 0 ; t < 5 ; ++t) { df = log(beta) - log(1-beta) ; der = norm2 * beta + label * (inner - norm2*alpha) + df ; if (der >= 0) { beta2 = beta ; } else { beta1 = beta ; } beta = 0.5 * (beta1 + beta2) ; } #if 1 /* a final Newton step, but not too close to the singularities */ for (t = 0 ; (t < 2) & (beta > VL_EPSILON_D) & (beta < 1-VL_EPSILON_D) ; ++t) { df = log(beta) - log(1-beta) ; ddf = 1 / (beta * (1-beta)) ; der = norm2 * beta + label * (inner - norm2*alpha) + df ; dder = norm2 + ddf ; beta -= der / dder ; beta = VL_MAX(0, VL_MIN(1, beta)) ; } #endif return label * beta - alpha ; } /* ---------------------------------------------------------------- */ /** @internal @brief Update SVM statistics ** @param self object. **/ void _vl_svm_update_statistics (VlSvm *self) { vl_size i, k ; double inner, p ; memset(&self->statistics, 0, sizeof(VlSvmStatistics)) ; self->statistics.regularizer = self->bias * self->bias ; for (i = 0; i < self->dimension; i++) { self->statistics.regularizer += self->model[i] * self->model[i] ; } self->statistics.regularizer *= self->lambda * 0.5 ; for (k = 0; k < self->numData ; k++) { p = (self->weights) ? self->weights[k] : 1.0 ; if (p <= 0) continue ; inner = self->innerProductFn(self->data, k, self->model) ; inner += self->bias * self->biasMultiplier ; self->scores[k] = inner ; self->statistics.loss += p * self->lossFn(inner, self->labels[k]) ; if (self->solver == VlSvmSolverSdca) { self->statistics.dualLoss -= p * self->conjugateLossFn(- self->alpha[k] / p, self->labels[k]) ; } } self->statistics.loss /= self->numData ; self->statistics.objective = self->statistics.regularizer + self->statistics.loss ; if (self->solver == VlSvmSolverSdca) { self->statistics.dualLoss /= self->numData ; self->statistics.dualObjective = - self->statistics.regularizer + self->statistics.dualLoss ; self->statistics.dualityGap = self->statistics.objective - self->statistics.dualObjective ; } } /* ---------------------------------------------------------------- */ /* Evaluate rather than solve */ /* ---------------------------------------------------------------- */ void _vl_svm_evaluate (VlSvm *self) { double startTime = vl_get_cpu_time () ; _vl_svm_update_statistics (self) ; self->statistics.elapsedTime = vl_get_cpu_time() - startTime ; self->statistics.iteration = 0 ; self->statistics.epoch = 0 ; self->statistics.status = VlSvmStatusConverged ; if (self->diagnosticFn) { self->diagnosticFn(self, self->diagnosticFnData) ; } } /* ---------------------------------------------------------------- */ /* Stochastic Dual Coordinate Ascent Solver */ /* ---------------------------------------------------------------- */ void _vl_svm_sdca_train (VlSvm *self) { double * norm2 ; vl_index * permutation ; vl_uindex i, t ; double inner, delta, multiplier, p ; double startTime = vl_get_cpu_time () ; VlRand * rand = vl_get_rand() ; norm2 = (double*) vl_calloc(self->numData, sizeof(double)); permutation = vl_calloc(self->numData, sizeof(vl_index)) ; { double * buffer = vl_calloc(self->dimension, sizeof(double)) ; for (i = 0 ; i < (unsigned)self->numData; i++) { double n2 ; permutation [i] = i ; memset(buffer, 0, self->dimension * sizeof(double)) ; self->accumulateFn (self->data, i, buffer, 1) ; n2 = self->innerProductFn (self->data, i, buffer) ; n2 += self->biasMultiplier * self->biasMultiplier ; norm2[i] = n2 / (self->lambda * self->numData) ; } vl_free(buffer) ; } for (t = 0 ; 1 ; ++t) { if (t % self->numData == 0) { /* once a new epoch is reached (all data have been visited), change permutation */ vl_rand_permute_indexes(rand, permutation, self->numData) ; } /* pick a sample and compute update */ i = permutation[t % self->numData] ; p = (self->weights) ? self->weights[i] : 1.0 ; if (p > 0) { inner = self->innerProductFn(self->data, i, self->model) ; inner += self->bias * self->biasMultiplier ; delta = p * self->dcaUpdateFn(self->alpha[i] / p, inner, p * norm2[i], self->labels[i]) ; } else { delta = 0 ; } /* apply update */ if (delta != 0) { self->alpha[i] += delta ; multiplier = delta / (self->numData * self->lambda) ; self->accumulateFn(self->data,i,self->model,multiplier) ; self->bias += self->biasMultiplier * multiplier; } /* call diagnostic occasionally */ if ((t + 1) % self->diagnosticFrequency == 0 || t + 1 == self->maxNumIterations) { _vl_svm_update_statistics (self) ; self->statistics.elapsedTime = vl_get_cpu_time() - startTime ; self->statistics.iteration = t ; self->statistics.epoch = t / self->numData ; self->statistics.status = VlSvmStatusTraining ; if (self->statistics.dualityGap < self->epsilon) { self->statistics.status = VlSvmStatusConverged ; } else if (t + 1 == self->maxNumIterations) { self->statistics.status = VlSvmStatusMaxNumIterationsReached ; } if (self->diagnosticFn) { self->diagnosticFn(self, self->diagnosticFnData) ; } if (self->statistics.status != VlSvmStatusTraining) { break ; } } } /* next iteration */ vl_free (norm2) ; vl_free (permutation) ; } /* ---------------------------------------------------------------- */ /* Stochastic Gradient Descent Solver */ /* ---------------------------------------------------------------- */ void _vl_svm_sgd_train (VlSvm *self) { vl_index * permutation ; double * scores ; double * previousScores ; vl_uindex i, t, k ; double inner, gradient, rate, biasRate, p ; double factor = 1.0 ; double biasFactor = 1.0 ; /* to allow slower bias learning rate */ vl_index t0 = VL_MAX(2, vl_ceil_d(1.0 / self->lambda)) ; //t0=2 ; double startTime = vl_get_cpu_time () ; VlRand * rand = vl_get_rand() ; permutation = vl_calloc(self->numData, sizeof(vl_index)) ; scores = vl_calloc(self->numData * 2, sizeof(double)) ; previousScores = scores + self->numData ; for (i = 0 ; i < (unsigned)self->numData; i++) { permutation [i] = i ; previousScores [i] = - VL_INFINITY_D ; } /* We store the w vector as the product fw (factor * model). We also use a different factor for the bias: biasFactor * biasMultiplier to enable a slower learning rate for the bias. Given this representation, it is easy to carry the two key operations: * Inner product: = f * Model update: fp wp = fw - rate * lambda * w - rate * g = f(1 - rate * lambda) w - rate * g Thus the update equations are: fp = f(1 - rate * lambda), and wp = w + rate / fp * g ; * Realization of the scaling factor. Before the statistics function is called, or training finishes, the factor (and biasFactor) are explicitly applied to the model and the bias. */ for (t = 0 ; 1 ; ++t) { if (t % self->numData == 0) { /* once a new epoch is reached (all data have been visited), change permutation */ vl_rand_permute_indexes(rand, permutation, self->numData) ; } /* pick a sample and compute update */ i = permutation[t % self->numData] ; p = (self->weights) ? self->weights[i] : 1.0 ; p = VL_MAX(0.0, p) ; /* we assume non-negative weights, so this is just for robustness */ inner = factor * self->innerProductFn(self->data, i, self->model) ; inner += biasFactor * (self->biasMultiplier * self->bias) ; gradient = p * self->lossDerivativeFn(inner, self->labels[i]) ; previousScores[i] = scores[i] ; scores[i] = inner ; /* apply update */ rate = 1.0 / (self->lambda * (t + t0)) ; biasRate = rate * self->biasLearningRate ; factor *= (1.0 - self->lambda * rate) ; biasFactor *= (1.0 - self->lambda * biasRate) ; /* debug: realize the scaling factor all the times */ /* for (k = 0 ; k < self->dimension ; ++k) self->model[k] *= factor ; self->bias *= biasFactor; factor = 1.0 ; biasFactor = 1.0 ; */ if (gradient != 0) { self->accumulateFn(self->data, i, self->model, - gradient * rate / factor) ; self->bias += self->biasMultiplier * (- gradient * biasRate / biasFactor) ; } /* call diagnostic occasionally */ if ((t + 1) % self->diagnosticFrequency == 0 || t + 1 == self->maxNumIterations) { /* realize factor before computing statistics or completing training */ for (k = 0 ; k < self->dimension ; ++k) self->model[k] *= factor ; self->bias *= biasFactor; factor = 1.0 ; biasFactor = 1.0 ; _vl_svm_update_statistics (self) ; for (k = 0 ; k < self->numData ; ++k) { double delta = scores[k] - previousScores[k] ; self->statistics.scoresVariation += delta * delta ; } self->statistics.scoresVariation = sqrt(self->statistics.scoresVariation) / self->numData ; self->statistics.elapsedTime = vl_get_cpu_time() - startTime ; self->statistics.iteration = t ; self->statistics.epoch = t / self->numData ; self->statistics.status = VlSvmStatusTraining ; if (self->statistics.scoresVariation < self->epsilon) { self->statistics.status = VlSvmStatusConverged ; } else if (t + 1 == self->maxNumIterations) { self->statistics.status = VlSvmStatusMaxNumIterationsReached ; } if (self->diagnosticFn) { self->diagnosticFn(self, self->diagnosticFnData) ; } if (self->statistics.status != VlSvmStatusTraining) { break ; } } } /* next iteration */ vl_free (scores) ; vl_free (permutation) ; } /* ---------------------------------------------------------------- */ /* Dispatcher */ /* ---------------------------------------------------------------- */ /** @brief Run the SVM solver ** @param self object. ** ** The data on which the SVM operates is passed upon the cration of ** the ::VlSvm object. This function runs a solver to learn a ** corresponding model. See @ref svm-starting. **/ void vl_svm_train (VlSvm * self) { assert (self) ; switch (self->solver) { case VlSvmSolverSdca: _vl_svm_sdca_train(self) ; break ; case VlSvmSolverSgd: _vl_svm_sgd_train(self) ; break ; case VlSvmSolverNone: _vl_svm_evaluate(self) ; break ; default: assert(0) ; } } vlfeat/vl/qsort-def.h0000644000175000017500000001200412237004745013444 0ustar dimadima/** @file qsort-def.h ** @brief QSort preprocessor metaprogram ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @file qsort-def.h @section qsort-def-overview Overview @ref qsort-def.h is a metaprogram to define specialized instances of the quick-sort algorithm. @section qsort-def-usage Usage @ref qsort-def.h is used to define a specialization of the ::VL_QSORT_sort function that operates on a given type of array. For instance the code @code #define VL_QSORT_type float #define VL_QSORT_prefix my_qsort #include @endcode defines a function @c my_qsort_sort that operates on an array of floats. @todo large array compatibility. **/ #include "host.h" #include #ifndef VL_QSORT_prefix #error "VL_QSORT_prefix must be defined" #endif #ifndef VL_QSORT_array #ifndef VL_QSORT_type #error "VL_QSORT_type must be defined if VL_QSORT_array is not" #endif #define VL_QSORT_array VL_QSORT_type* #define VL_QSORT_array_const VL_QSORT_type const* #endif #ifdef __DOXYGEN__ #define VL_QSORT_prefix QSortPrefix /**< Prefix of the qsort functions */ #define VL_QSORT_type QSortType /**< Data type of the qsort elements */ #define VL_QSORT_array QSortType* /**< Data type of the qsort container */ #endif /* ---------------------------------------------------------------- */ #if ! defined(VL_QSORT_cmp) || defined(__DOXYGEN__) #define VL_QSORT_cmp VL_XCAT(VL_QSORT_prefix, _cmp) /** @brief Compare two array elements ** @param array qsort array. ** @param indexA index of the first element @c A to compare. ** @param indexB index of the second element @c B to comapre. ** @return a negative number if @c AB. **/ VL_INLINE VL_QSORT_type VL_QSORT_cmp (VL_QSORT_array_const array, vl_uindex indexA, vl_uindex indexB) { return array[indexA] - array[indexB] ; } /* VL_QSORT_cmp */ #endif /* ---------------------------------------------------------------- */ #if ! defined(VL_QSORT_swap) || defined(__DOXYGEN__) #define VL_QSORT_swap VL_XCAT(VL_QSORT_prefix, _swap) /** @brief Swap two array elements ** @param array qsort array. ** @param indexA index of the first element to swap. ** @param indexB index of the second element to swap. ** ** The function swaps the two elements @a a and @ b. The function ** uses a temporary element of type ::VL_QSORT_type ** and the copy operator @c =. **/ VL_INLINE void VL_QSORT_swap (VL_QSORT_array array, vl_uindex indexA, vl_uindex indexB) { VL_QSORT_type t = array [indexA] ; array [indexA] = array [indexB] ; array [indexB] = t ; } /* VL_QSORT_swap */ #endif /* ---------------------------------------------------------------- */ #if ! defined(VL_QSORT_sort_recursive) || defined(__DOXYGEN__) #define VL_QSORT_sort_recursive VL_XCAT(VL_QSORT_prefix, _sort_recursive) /** @brief Sort portion of an array using quicksort ** @param array (in/out) pointer to the array. ** @param begin first element of the array portion. ** @param end last element of the array portion. ** ** The function sorts the array using quick-sort. Note that ** @c begin must be not larger than @c end. **/ VL_INLINE void VL_QSORT_sort_recursive (VL_QSORT_array array, vl_uindex begin, vl_uindex end) { vl_uindex pivot = (end + begin) / 2 ; vl_uindex lowPart, i ; assert (begin <= end) ; /* swap pivot with last */ VL_QSORT_swap (array, pivot, end) ; pivot = end ; /* Now scan from left to right, moving all element smaller or equal than the pivot to the low part array[0], array[1], ..., array[lowPart - 1]. */ lowPart = begin ; for (i = begin; i < end ; ++i) { /* one less */ if (VL_QSORT_cmp (array, i, pivot) <= 0) { /* array[i] must be moved into the low part */ VL_QSORT_swap (array, lowPart, i) ; lowPart ++ ; } } /* the pivot should also go into the low part */ VL_QSORT_swap (array, lowPart, pivot) ; pivot = lowPart ; /* do recursion */ if (pivot > begin) { /* note that pivot-1 stays non-negative */ VL_QSORT_sort_recursive (array, begin, pivot - 1) ; } if (pivot < end) { VL_QSORT_sort_recursive (array, pivot + 1, end) ; } } /* VL_QSORT_sort_recursive */ #endif /* ---------------------------------------------------------------- */ #if ! defined(VL_QSORT_sort) || defined(__DOXYGEN__) #define VL_QSORT_sort VL_XCAT(VL_QSORT_prefix, _sort) /** @brief Sort array using quicksort ** @param array (in/out) pointer to the array. ** @param size size of the array. ** ** The function sorts the array using quick-sort. **/ VL_INLINE void VL_QSORT_sort (VL_QSORT_array array, vl_size size) { assert (size >= 1) ; VL_QSORT_sort_recursive (array, 0, size - 1) ; } /* VL_QSORT_qsort */ #endif #undef VL_QSORT_prefix #undef VL_QSORT_swap #undef VL_QSORT_sort #undef VL_QSORT_sort_recursive #undef VL_QSORT_type #undef VL_QSORT_array #undef VL_QSORT_cmp vlfeat/vl/mathop_sse2.c0000644000175000017500000002761412237004745013774 0ustar dimadima/** @file mathop_sse2.c ** @brief mathop for SSE2 - Definition ** @author Andrea Vedaldi, David Novotny **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /* ---------------------------------------------------------------- */ #ifndef VL_MATHOP_SSE2_INSTANTIATING #include "mathop_sse2.h" #undef FLT #define FLT VL_TYPE_DOUBLE #define VL_MATHOP_SSE2_INSTANTIATING #include "mathop_sse2.c" #undef FLT #define FLT VL_TYPE_FLOAT #define VL_MATHOP_SSE2_INSTANTIATING #include "mathop_sse2.c" /* ---------------------------------------------------------------- */ /* VL_MATHOP_SSE2_INSTANTIATING */ #else #ifndef VL_DISABLE_SSE2 #include #include "mathop.h" #include "generic.h" #include "float.th" VL_INLINE T VL_XCAT(_vl_vhsum_sse2_, SFX)(VTYPE x) { T acc ; #if (VSIZE == 4) { VTYPE sum ; VTYPE shuffle ; /* shuffle = [1 0 3 2] */ /* sum = [3+1 2+0 1+3 0+2] */ /* shuffle = [2+0 3+1 0+2 1+3] */ /* vacc = [3+1+2+0 3+1+2+0 1+3+0+2 0+2+1+3] */ shuffle = VSHU (x, x, _MM_SHUFFLE(1, 0, 3, 2)) ; sum = VADD (x, shuffle) ; shuffle = VSHU (sum, sum, _MM_SHUFFLE(2, 3, 0, 1)) ; x = VADD (sum, shuffle) ; } #else { VTYPE shuffle ; /* acc = [1 0 ] */ /* shuffle = [0 1 ] */ /* sum = [1+0 0+1] */ shuffle = VSHU (x, x, _MM_SHUFFLE2(0, 1)) ; x = VADD (x, shuffle) ; } #endif VST1(&acc, x); return acc ; } VL_EXPORT T VL_XCAT(_vl_dot_sse2_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T const * X_vec_end = X_end - VSIZE + 1 ; T acc ; VTYPE vacc = VSTZ() ; vl_bool dataAligned = VALIGNED(X) & VALIGNED(Y) ; if (dataAligned) { while (X < X_vec_end) { VTYPE a = *(VTYPE*)X ; VTYPE b = *(VTYPE*)Y ; VTYPE d = VMUL(a, b) ; vacc = VADD(vacc, d) ; X += VSIZE ; Y += VSIZE ; } } else { while (X < X_vec_end) { VTYPE a = VLDU(X) ; VTYPE b = VLDU(Y) ; VTYPE d = VMUL(a, b) ; vacc = VADD(vacc, d) ; X += VSIZE ; Y += VSIZE ; } } acc = VL_XCAT(_vl_vhsum_sse2_, SFX)(vacc) ; while (X < X_end) { T a = *X++ ; T b = *Y++ ; acc += a * b ; } return acc ; } VL_EXPORT T VL_XCAT(_vl_distance_l2_sse2_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T const * X_vec_end = X_end - VSIZE + 1 ; T acc ; VTYPE vacc = VSTZ() ; vl_bool dataAligned = VALIGNED(X) & VALIGNED(Y) ; if (dataAligned) { while (X < X_vec_end) { VTYPE a = *(VTYPE*)X ; VTYPE b = *(VTYPE*)Y ; VTYPE delta = VSUB(a, b) ; VTYPE delta2 = VMUL(delta, delta) ; vacc = VADD(vacc, delta2) ; X += VSIZE ; Y += VSIZE ; } } else { while (X < X_vec_end) { VTYPE a = VLDU(X) ; VTYPE b = VLDU(Y) ; VTYPE delta = VSUB(a, b) ; VTYPE delta2 = VMUL(delta, delta) ; vacc = VADD(vacc, delta2) ; X += VSIZE ; Y += VSIZE ; } } acc = VL_XCAT(_vl_vhsum_sse2_, SFX)(vacc) ; while (X < X_end) { T a = *X++ ; T b = *Y++ ; T delta = a - b ; acc += delta * delta ; } return acc ; } VL_EXPORT T VL_XCAT(_vl_distance_mahalanobis_sq_sse2_, SFX) (vl_size dimension, T const * X, T const * MU, T const * S) { T const * X_end = X + dimension ; T const * X_vec_end = X_end - VSIZE + 1 ; T acc ; VTYPE vacc = VSTZ() ; vl_bool dataAligned = VALIGNED(X) & VALIGNED(MU) & VALIGNED(S); if (dataAligned) { while (X < X_vec_end) { VTYPE a = *(VTYPE*)X ; VTYPE b = *(VTYPE*)MU ; VTYPE c = *(VTYPE*)S ; VTYPE delta = VSUB(a, b) ; VTYPE delta2 = VMUL(delta, delta) ; VTYPE delta2div = VMUL(delta2,c); vacc = VADD(vacc, delta2div) ; X += VSIZE ; MU += VSIZE ; S += VSIZE ; } } else { while (X < X_vec_end) { VTYPE a = VLDU(X) ; VTYPE b = VLDU(MU) ; VTYPE c = VLDU(S) ; VTYPE delta = VSUB(a, b) ; VTYPE delta2 = VMUL(delta, delta) ; VTYPE delta2div = VMUL(delta2,c); vacc = VADD(vacc, delta2div) ; X += VSIZE ; MU += VSIZE ; S += VSIZE ; } } acc = VL_XCAT(_vl_vhsum_sse2_, SFX)(vacc) ; while (X < X_end) { T a = *X++ ; T b = *MU++ ; T c = *S++ ; T delta = a - b ; acc += (delta * delta) * c; } return acc ; } VL_EXPORT T VL_XCAT(_vl_distance_l1_sse2_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T const * X_vec_end = X + dimension - VSIZE ; T acc ; VTYPE vacc = VSTZ() ; VTYPE vminus = VL_XCAT(_mm_set1_p, VSFX) ((T) -0.0) ; /* sign bit */ vl_bool dataAligned = VALIGNED(X) & VALIGNED(Y) ; if (dataAligned) { while (X < X_vec_end) { VTYPE a = *(VTYPE*)X ; VTYPE b = *(VTYPE*)Y ; VTYPE delta = VSUB(a, b) ; vacc = VADD(vacc, VANDN(vminus, delta)) ; X += VSIZE ; Y += VSIZE ; } } else { while (X < X_vec_end) { VTYPE a = VLDU(X) ; VTYPE b = VLDU(Y) ; VTYPE delta = VSUB(a, b) ; vacc = VADD(vacc, VANDN(vminus, delta)) ; X += VSIZE ; Y += VSIZE ; } } acc = VL_XCAT(_vl_vhsum_sse2_, SFX)(vacc) ; while (X < X_end) { T a = *X++ ; T b = *Y++ ; T delta = a - b ; acc += VL_MAX(delta, - delta) ; } return acc ; } VL_EXPORT T VL_XCAT(_vl_distance_chi2_sse2_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T const * X_vec_end = X + dimension - VSIZE ; T acc ; VTYPE vacc = VSTZ() ; vl_bool dataAligned = VALIGNED(X) & VALIGNED(Y) ; if (dataAligned) { while (X < X_vec_end) { VTYPE a = *(VTYPE*)X ; VTYPE b = *(VTYPE*)Y ; VTYPE delta = VSUB(a, b) ; VTYPE denom = VADD(a, b) ; VTYPE numer = VMUL(delta, delta) ; VTYPE ratio = VDIV(numer, denom) ; ratio = VAND(ratio, VNEQ(denom, VSTZ())) ; vacc = VADD(vacc, ratio) ; X += VSIZE ; Y += VSIZE ; } } else { while (X < X_vec_end) { VTYPE a = VLDU(X) ; VTYPE b = VLDU(Y) ; VTYPE delta = VSUB(a, b) ; VTYPE denom = VADD(a, b) ; VTYPE numer = VMUL(delta, delta) ; VTYPE ratio = VDIV(numer, denom) ; ratio = VAND(ratio, VNEQ(denom, VSTZ())) ; vacc = VADD(vacc, ratio) ; X += VSIZE ; Y += VSIZE ; } } acc = VL_XCAT(_vl_vhsum_sse2_, SFX)(vacc) ; while (X < X_end) { T a = *X++ ; T b = *Y++ ; T delta = a - b ; T denom = a + b ; T numer = delta * delta ; if (denom) { T ratio = numer / denom ; acc += ratio ; } } return acc ; } VL_EXPORT T VL_XCAT(_vl_kernel_l2_sse2_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T const * X_vec_end = X_end - VSIZE + 1 ; T acc ; VTYPE vacc = VSTZ() ; vl_bool dataAligned = VALIGNED(X) & VALIGNED(Y) ; if (dataAligned) { while (X < X_vec_end) { VTYPE a = *(VTYPE*)X ; VTYPE b = *(VTYPE*)Y ; vacc = VADD(vacc, VMUL(a,b)) ; X += VSIZE ; Y += VSIZE ; } } else { while (X < X_vec_end) { VTYPE a = VLDU(X) ; VTYPE b = VLDU(Y) ; vacc = VADD(vacc, VMUL(a,b)) ; X += VSIZE ; Y += VSIZE ; } } acc = VL_XCAT(_vl_vhsum_sse2_, SFX)(vacc) ; while (X < X_end) { T a = *X++ ; T b = *Y++ ; acc += a * b ; } return acc ; } VL_EXPORT T VL_XCAT(_vl_kernel_l1_sse2_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T const * X_vec_end = X_end - VSIZE + 1 ; T acc ; VTYPE vacc = VSTZ() ; VTYPE vminus = VL_XCAT(_mm_set1_p, VSFX) ((T) -0.0) ; vl_bool dataAligned = VALIGNED(X) & VALIGNED(Y) ; if (dataAligned) { while (X < X_vec_end) { VTYPE a = *(VTYPE*)X ; VTYPE b = *(VTYPE*)Y ; VTYPE a_ = VANDN(vminus, a) ; VTYPE b_ = VANDN(vminus, b) ; VTYPE sum = VADD(a_,b_) ; VTYPE diff = VSUB(a, b) ; VTYPE diff_ = VANDN(vminus, diff) ; vacc = VADD(vacc, VSUB(sum, diff_)) ; X += VSIZE ; Y += VSIZE ; } } else { while (X < X_vec_end) { VTYPE a = VLDU(X) ; VTYPE b = VLDU(Y) ; VTYPE a_ = VANDN(vminus, a) ; VTYPE b_ = VANDN(vminus, b) ; VTYPE sum = VADD(a_,b_) ; VTYPE diff = VSUB(a, b) ; VTYPE diff_ = VANDN(vminus, diff) ; vacc = VADD(vacc, VSUB(sum, diff_)) ; X += VSIZE ; Y += VSIZE ; } } acc = VL_XCAT(_vl_vhsum_sse2_, SFX)(vacc) ; while (X < X_end) { T a = *X++ ; T b = *Y++ ; T a_ = VL_XCAT(vl_abs_, SFX) (a) ; T b_ = VL_XCAT(vl_abs_, SFX) (b) ; acc += a_ + b_ - VL_XCAT(vl_abs_, SFX) (a - b) ; } return acc / ((T)2) ; } VL_EXPORT T VL_XCAT(_vl_kernel_chi2_sse2_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T const * X_vec_end = X + dimension - VSIZE ; T acc ; VTYPE vacc = VSTZ() ; vl_bool dataAligned = VALIGNED(X) & VALIGNED(Y) ; if (dataAligned) { while (X < X_vec_end) { VTYPE a = *(VTYPE*)X ; VTYPE b = *(VTYPE*)Y ; VTYPE denom = VADD(a, b) ; VTYPE numer = VMUL(a,b) ; VTYPE ratio = VDIV(numer, denom) ; ratio = VAND(ratio, VNEQ(denom, VSTZ())) ; vacc = VADD(vacc, ratio) ; X += VSIZE ; Y += VSIZE ; } } else { while (X < X_vec_end) { VTYPE a = VLDU(X) ; VTYPE b = VLDU(Y) ; VTYPE denom = VADD(a, b) ; VTYPE numer = VMUL(a,b) ; VTYPE ratio = VDIV(numer, denom) ; ratio = VAND(ratio, VNEQ(denom, VSTZ())) ; vacc = VADD(vacc, ratio) ; X += VSIZE ; Y += VSIZE ; } } acc = VL_XCAT(_vl_vhsum_sse2_, SFX)(vacc) ; while (X < X_end) { T a = *X++ ; T b = *Y++ ; T denom = a + b ; if (denom) { T ratio = a * b / denom ; acc += ratio ; } } return ((T)2) * acc ; } // VL_EXPORT void VL_XCAT(_vl_weighted_sigma_sse2_, SFX) (vl_size dimension, T * S, T const * X, T const * Y, T const W) { T const * X_end = X + dimension ; T const * X_vec_end = X_end - VSIZE + 1 ; vl_bool dataAligned = VALIGNED(X) & VALIGNED(Y) & VALIGNED(S); VTYPE w = VLD1 (&W) ; if (dataAligned) { while (X < X_vec_end) { VTYPE a = *(VTYPE*)X ; VTYPE b = *(VTYPE*)Y ; VTYPE s = *(VTYPE*)S ; VTYPE delta = VSUB(a, b) ; VTYPE delta2 = VMUL(delta, delta) ; VTYPE delta2w = VMUL(delta2, w) ; VTYPE sigmaStore = VADD(s,delta2w); *(VTYPE *)S = sigmaStore; X += VSIZE ; Y += VSIZE ; S += VSIZE ; } } else { while (X < X_vec_end) { VTYPE a = VLDU(X) ; VTYPE b = VLDU(Y) ; VTYPE s = VLDU(S) ; VTYPE delta = VSUB(a, b) ; VTYPE delta2 = VMUL(delta, delta) ; VTYPE delta2w = VMUL(delta2, w) ; VTYPE sigmaStore = VADD(s,delta2w); VST2U(S,sigmaStore); X += VSIZE ; Y += VSIZE ; S += VSIZE ; } } while (X < X_end) { T a = *X++ ; T b = *Y++ ; T delta = a - b ; *S += ((delta * delta)*W) ; S++; } } VL_EXPORT void VL_XCAT(_vl_weighted_mean_sse2_, SFX) (vl_size dimension, T * MU, T const * X, T const W) { T const * X_end = X + dimension ; T const * X_vec_end = X_end - VSIZE + 1 ; vl_bool dataAligned = VALIGNED(X) & VALIGNED(MU); VTYPE w = VLD1 (&W) ; if (dataAligned) { while (X < X_vec_end) { VTYPE a = *(VTYPE*)X ; VTYPE mu = *(VTYPE*)MU ; VTYPE aw = VMUL(a, w) ; VTYPE meanStore = VADD(aw, mu); *(VTYPE *)MU = meanStore; X += VSIZE ; MU += VSIZE ; } } else { while (X < X_vec_end) { VTYPE a = VLDU(X) ; VTYPE mu = VLDU(MU) ; VTYPE aw = VMUL(a, w) ; VTYPE meanStore = VADD(aw, mu); VST2U(MU,meanStore); X += VSIZE ; MU += VSIZE ; } } while (X < X_end) { T a = *X++ ; *MU += a * W ; MU++; } } /* VL_DISABLE_SSE2 */ #endif #undef VL_MATHOP_SSE2_INSTANTIATING #endif vlfeat/vl/hog.c0000644000175000017500000011166512237004745012325 0ustar dimadima/** @file hog.c ** @brief Histogram of Oriented Gradients (HOG) - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include "hog.h" #include "mathop.h" #include /** @page hog Histogram of Oriented Gradients (HOG) features @author Andrea Vedaldi @ref hog.h implements the Histogram of Oriented Gradients (HOG) features in the variants of Dalal Triggs @cite{dalal05histograms} and of UOCTTI @cite{felzenszwalb09object}. Applications include object detection and deformable object detection. - @ref hog-overview - @ref hog-tech @section hog-overview Overview HOG is a standard image feature used, among others, in object detection and deformable object detection. It decomposes the image into square cells of a given size (typically eight pixels), compute a histogram of oriented gradient in each cell (similar to @ref sift), and then renormalizes the cells by looking into adjacent blocks. VLFeat implements two HOG variants: the original one of Dalal-Triggs @cite{dalal05histograms} and the one proposed in Felzenszwalb et al. @cite{felzenszwalb09object}. In order to use HOG, start by creating a new HOG object, set the desired parameters, pass a (color or grayscale) image, and read off the results. @code VlHog * hog = vl_hog_new(VlHogVariantDalalTriggs, numOrientations, VL_FALSE) ; vl_hog_put_image(hog, image, height, width, numChannels, cellSize) ; hogWidth = vl_hog_get_width(hog) ; hogHeight = vl_hog_get_height(hog) ; hogDimenison = vl_hog_get_dimension(hog) ; hogArray = vl_malloc(hogWidth*hogHeight*hogDimension*sizeof(float)) ; vl_hog_extract(hog, hogArray) ; vl_hog_delete(hog) ; @endcode HOG is a feature array of the dimension returned by ::vl_hog_get_width, ::vl_hog_get_height, with each feature (histogram) having dimension ::vl_hog_get_dimension. The array is stored in row major order, with the slowest varying dimension beying the dimension indexing the histogram elements. The number of entreis in the histogram as well as their meaning depends on the HOG variant and is detailed later. However, it is usually unnecessary to know such details. @ref hog.h provides support for creating an inconic representation of a HOG feature array: @code glyphSize = vl_hog_get_glyph_size(hog) ; imageHeight = glyphSize * hogArrayHeight ; imageWidth = glyphSize * hogArrayWidth ; image = vl_malloc(sizeof(float)*imageWidth*imageHeight) ; vl_hog_render(hog, image, hogArray) ; @endcode It is often convenient to mirror HOG features from left to right. This can be obtained by mirroring an array of HOG cells, but the content of each cell must also be rearranged. This can be done by the permutation obtaiend by ::vl_hog_get_permutation. Furthermore, @ref hog.h suppots computing HOG features not from images but from vector fields ::vl_ @section hog-tech Technical details HOG divdes the input image into square cells of size @c cellSize, fitting as many cells as possible, filling the image domain from the upper-left corner down to the right one. For each row and column, the last cell is at least half contained in the image. More precisely, the number of cells obtained in this manner is: @code hogWidth = (width + cellSize/2) / cellSize ; hogHeight = (height + cellSize/2) / cellSize ; @endcode Then the image gradient @f$ \nabla \ell(x,y) @f$ is computed by using central difference (for colour image the channel with the largest gradient at that pixel is used). The gradient @f$ \nabla \ell(x,y) @f$ is assigned to one of @c 2*numOrientations orientation in the range @f$ [0,2\pi) @f$ (see @ref hog-conventions for details). Contributions are then accumulated by using bilinear interpolation to four neigbhour cells, as in @ref sift. This results in an histogram @f$h_d@f$ of dimension 2*numOrientations, called of @e directed orientations since it accounts for the direction as well as the orientation of the gradient. A second histogram @f$h_u@f$ of undirected orientations of half the size is obtained by folding @f$ h_d @f$ into two. Let a block of cell be a @f$ 2\times 2 @f$ sub-array of cells. Let the norm of a block be the @f$ l^2 @f$ norm of the stacking of the respective unoriented histogram. Given a HOG cell, four normalisation factors are then obtained as the inverse of the norm of the four blocks that contain the cell. For the Dalal-Triggs variant, each histogram @f$ h_d @f$ is copied four times, normalised using the four different normalisation factors, the four vectors are stacked, saturated at 0.2, and finally stored as the descriptor of the cell. This results in a @c numOrientations * 4 dimensional cell descriptor. Blocks are visited from left to right and top to bottom when forming the final descriptor. For the UOCCTI descriptor, the same is done for both the undirected as well as the directed orientation histograms. This would yield a dimension of @c 4*(2+1)*numOrientations elements, but the resulting vector is projected down to @c (2+1)*numOrientations elements by averaging corresponding histogram dimensions. This was shown to be an algebraic approximation of PCA for descriptors computed on natural images. In addition, for the UOCTTI variant the l1 norm of each of the four l2 normalised undirected histograms is computed and stored as additional four dimensions, for a total of @c 4+3*numOrientations dimensions. @subsection hog-conventions Conventions The orientation of a gradient is expressed as the angle it forms with the horizontal axis of the image. Angles are measured clock-wise (as the vertical image axis points downards), and the null angle corresponds to an horizontal vector pointing right. The quantized directed orientations are @f$ \mathrm{k} \pi / \mathrm{numOrientations} @f$, where @c k is an index that varies in the ingeger range @f$ \{0, \dots, 2\mathrm{numOrientations} - 1\} @f$. Note that the orientations capture the orientation of the gradeint; image edges would be oriented at 90 degrees from these. **/ /* ---------------------------------------------------------------- */ /** @brief Create a new HOG object ** @param variant HOG descriptor variant. ** @param numOrientations number of distinguished orientations. ** @param transposed wether images are transposed (column major). ** @return the new HOG object. ** ** The function creates a new HOG object to extract descriptors of ** the prescribed @c variant. The angular resolution is set by ** @a numOrientations, which specifies the number of undirected ** orientations. The object can work with column major images ** by setting @a transposed to true. **/ VlHog * vl_hog_new (VlHogVariant variant, vl_size numOrientations, vl_bool transposed) { vl_index o, k ; VlHog * self = vl_calloc(1, sizeof(VlHog)) ; assert(numOrientations >= 1) ; self->variant = variant ; self->numOrientations = numOrientations ; self->glyphSize = 21 ; self->transposed = transposed ; self->useBilinearOrientationAssigment = VL_FALSE ; self->orientationX = vl_malloc(sizeof(float) * self->numOrientations) ; self->orientationY = vl_malloc(sizeof(float) * self->numOrientations) ; /* Create a vector along the center of each orientation bin. These are used to map gradients to bins. If the image is transposed, then this can be adjusted here by swapping X and Y in these vectors. */ for(o = 0 ; o < (signed)self->numOrientations ; ++o) { double angle = o * VL_PI / self->numOrientations ; if (!self->transposed) { self->orientationX[o] = (float) cos(angle) ; self->orientationY[o] = (float) sin(angle) ; } else { self->orientationX[o] = (float) sin(angle) ; self->orientationY[o] = (float) cos(angle) ; } } /* If the number of orientation is equal to 9, one gets: Uoccti:: 18 directed orientations + 9 undirected orientations + 4 texture DalalTriggs:: 9 undirected orientations x 4 blocks. */ switch (self->variant) { case VlHogVariantUoctti: self->dimension = 3*self->numOrientations + 4 ; break ; case VlHogVariantDalalTriggs: self->dimension = 4*self->numOrientations ; break ; default: assert(0) ; } /* A permutation specifies how to permute elements in a HOG descriptor to flip it horizontally. Since the first orientation of index 0 points to the right, this must be swapped with orientation self->numOrientation that points to the left (for the directed case, and to itself for the undirected one). */ self->permutation = vl_malloc(self->dimension * sizeof(vl_index)) ; switch (self->variant) { case VlHogVariantUoctti: for(o = 0 ; o < (signed)self->numOrientations ; ++o) { vl_index op = self->numOrientations - o ; self->permutation[o] = op ; self->permutation[o + self->numOrientations] = (op + self->numOrientations) % (2*self->numOrientations) ; self->permutation[o + 2*self->numOrientations] = (op % self->numOrientations) + 2*self->numOrientations ; } for (k = 0 ; k < 4 ; ++k) { /* The texture features correspond to four displaced block around a cell. These permute with a lr flip as for DalalTriggs. */ vl_index blockx = k % 2 ; vl_index blocky = k / 2 ; vl_index q = (1 - blockx) + blocky * 2 ; self->permutation[k + self->numOrientations * 3] = q + self->numOrientations * 3 ; } break ; case VlHogVariantDalalTriggs: for(k = 0 ; k < 4 ; ++k) { /* Find the corresponding block. Blocks are listed in order 1,2,3,4,... from left to right and top to bottom */ vl_index blockx = k % 2 ; vl_index blocky = k / 2 ; vl_index q = (1 - blockx) + blocky * 2 ; for(o = 0 ; o < (signed)self->numOrientations ; ++o) { vl_index op = self->numOrientations - o ; self->permutation[o + k*self->numOrientations] = (op % self->numOrientations) + q*self->numOrientations ; } } break ; default: assert(0) ; } /* Create glyphs for representing the HOG features/ filters. The glyphs are simple bars, oriented orthogonally to the gradients to represent image edges. If the object is configured to work on transposed image, the glyphs images are also stored in column-major. */ self->glyphs = vl_calloc(self->glyphSize * self->glyphSize * self->numOrientations, sizeof(float)) ; #define atglyph(x,y,k) self->glyphs[(x) + self->glyphSize * (y) + self->glyphSize * self->glyphSize * (k)] for (o = 0 ; o < (signed)self->numOrientations ; ++o) { double angle = fmod(o * VL_PI / self->numOrientations + VL_PI/2, VL_PI) ; double x2 = self->glyphSize * cos(angle) / 2 ; double y2 = self->glyphSize * sin(angle) / 2 ; if (angle <= VL_PI / 4 || angle >= VL_PI * 3 / 4) { /* along horizontal direction */ double slope = y2 / x2 ; double offset = (1 - slope) * (self->glyphSize - 1) / 2 ; vl_index skip = (1 - fabs(cos(angle))) / 2 * self->glyphSize ; vl_index i, j ; for (i = skip ; i < (signed)self->glyphSize - skip ; ++i) { j = vl_round_d(slope * i + offset) ; if (! self->transposed) { atglyph(i,j,o) = 1 ; } else { atglyph(j,i,o) = 1 ; } } } else { /* along vertical direction */ double slope = x2 / y2 ; double offset = (1 - slope) * (self->glyphSize - 1) / 2 ; vl_index skip = (1 - sin(angle)) / 2 * self->glyphSize ; vl_index i, j ; for (j = skip ; j < (signed)self->glyphSize - skip; ++j) { i = vl_round_d(slope * j + offset) ; if (! self->transposed) { atglyph(i,j,o) = 1 ; } else { atglyph(j,i,o) = 1 ; } } } } return self ; } /* ---------------------------------------------------------------- */ /** @brief Delete a HOG object ** @param self HOG object to delete. **/ void vl_hog_delete (VlHog * self) { if (self->orientationX) { vl_free(self->orientationX) ; self->orientationX = NULL ; } if (self->orientationY) { vl_free(self->orientationY) ; self->orientationY = NULL ; } if (self->glyphs) { vl_free(self->glyphs) ; self->glyphs = NULL ; } if (self->permutation) { vl_free(self->permutation) ; self->permutation = NULL ; } if (self->hog) { vl_free(self->hog) ; self->hog = NULL ; } if (self->hogNorm) { vl_free(self->hogNorm) ; self->hogNorm = NULL ; } vl_free(self) ; } /* ---------------------------------------------------------------- */ /** @brief Get HOG glyph size ** @param self HOG object. ** @return size (height and width) of a glyph. **/ vl_size vl_hog_get_glyph_size (VlHog const * self) { return self->glyphSize ; } /* ---------------------------------------------------------------- */ /** @brief Get HOG left-right flip permutation ** @param self HOG object. ** @return left-right permutation. ** ** The function returns a pointer to an array @c permutation of ::vl_hog_get_dimension ** elements. Given a HOG descriptor (for a cell) @c hog, which is also ** a vector of ::vl_hog_get_dimension elements, the ** descriptor obtained for the same image flipped horizotnally is ** given by flippedHog[i] = hog[permutation[i]]. **/ vl_index const * vl_hog_get_permutation (VlHog const * self) { return self->permutation ; } /* ---------------------------------------------------------------- */ /** @brief Turn bilinear interpolation of assignments on or off ** @param self HOG object. ** @param x @c true if orientations should be assigned with bilinear interpolation. **/ void vl_hog_set_use_bilinear_orientation_assignments (VlHog * self, vl_bool x) { self->useBilinearOrientationAssigment = x ; } /** @brief Tell whether assignments use bilinear interpolation or not ** @param self HOG object. ** @return @c true if orientations are be assigned with bilinear interpolation. **/ vl_bool vl_hog_get_use_bilinear_orientation_assignments (VlHog const * self) { return self->useBilinearOrientationAssigment ; } /* ---------------------------------------------------------------- */ /** @brief Render a HOG descriptor to a glyph image ** @param self HOG object. ** @param image glyph image (output). ** @param descriptor HOG descriptor. ** @param width HOG descriptor width. ** @param height HOG descriptor height. ** ** The function renders the HOG descriptor or filter ** @a descriptor as an image (for visualization) and stores the result in ** the buffer @a image. This buffer ** must be an array of dimensions @c width*glyphSize ** by @c height*glyphSize elements, where @c glyphSize is ** obtained from ::vl_hog_get_glyph_size and is the size in pixels ** of the image element used to represent the descriptor of one ** HOG cell. **/ void vl_hog_render (VlHog const * self, float * image, float const * descriptor, vl_size width, vl_size height) { vl_index x, y, k, cx, cy ; vl_size hogStride = width * height ; assert(self) ; assert(image) ; assert(descriptor) ; assert(width > 0) ; assert(height > 0) ; for (y = 0 ; y < (signed)height ; ++y) { for (x = 0 ; x < (signed)width ; ++x) { float minWeight = 0 ; float maxWeight = 0 ; for (k = 0 ; k < (signed)self->numOrientations ; ++k) { float weight ; float const * glyph = self->glyphs + k * (self->glyphSize*self->glyphSize) ; float * glyphImage = image + self->glyphSize * x + y * width * (self->glyphSize*self->glyphSize) ; switch (self->variant) { case VlHogVariantUoctti: weight = descriptor[k * hogStride] + descriptor[(k + self->numOrientations) * hogStride] + descriptor[(k + 2 * self->numOrientations) * hogStride] ; break ; case VlHogVariantDalalTriggs: weight = descriptor[k * hogStride] + descriptor[(k + self->numOrientations) * hogStride] + descriptor[(k + 2 * self->numOrientations) * hogStride] + descriptor[(k + 3 * self->numOrientations) * hogStride] ; break ; default: abort() ; } maxWeight = VL_MAX(weight, maxWeight) ; minWeight = VL_MIN(weight, minWeight); for (cy = 0 ; cy < (signed)self->glyphSize ; ++cy) { for (cx = 0 ; cx < (signed)self->glyphSize ; ++cx) { *glyphImage++ += weight * (*glyph++) ; } glyphImage += (width - 1) * self->glyphSize ; } } /* next orientation */ { float * glyphImage = image + self->glyphSize * x + y * width * (self->glyphSize*self->glyphSize) ; for (cy = 0 ; cy < (signed)self->glyphSize ; ++cy) { for (cx = 0 ; cx < (signed)self->glyphSize ; ++cx) { float value = *glyphImage ; *glyphImage++ = VL_MAX(minWeight, VL_MIN(maxWeight, value)) ; } glyphImage += (width - 1) * self->glyphSize ; } } ++ descriptor ; } /* next column of cells (x) */ } /* next row of cells (y) */ } /* ---------------------------------------------------------------- */ /** @brief Get the dimension of the HOG features ** @param self HOG object. ** @return imension of a HOG cell descriptors. **/ vl_size vl_hog_get_dimension (VlHog const * self) { return self->dimension ; } /** @brief Get the width of the HOG cell array ** @param self HOG object. ** @return number of HOG cells in the horizontal direction. **/ vl_size vl_hog_get_width (VlHog * self) { return self->hogWidth ; } /** @brief Get the height of the HOG cell array ** @param self HOG object. ** @return number of HOG cells in the vertical direction. **/ vl_size vl_hog_get_height (VlHog * self) { return self->hogHeight ; } /* ---------------------------------------------------------------- */ /** @internal @brief Prepare internal buffers ** @param self HOG object. ** @param width image width. ** @param height image height. ** @param cellSize size of a HOG cell. **/ static void vl_hog_prepare_buffers (VlHog * self, vl_size width, vl_size height, vl_size cellSize) { vl_size hogWidth = (width + cellSize/2) / cellSize ; vl_size hogHeight = (height + cellSize/2) / cellSize ; assert(width > 3) ; assert(height > 3) ; assert(hogWidth > 0) ; assert(hogHeight > 0) ; if (self->hog && self->hogWidth == hogWidth && self->hogHeight == hogHeight) { /* a suitable buffer is already allocated */ memset(self->hog, 0, sizeof(float) * hogWidth * hogHeight * self->numOrientations * 2) ; memset(self->hogNorm, 0, sizeof(float) * hogWidth * hogHeight) ; return ; } if (self->hog) { vl_free(self->hog) ; self->hog = NULL ; } if (self->hogNorm) { vl_free(self->hogNorm) ; self->hogNorm = NULL ; } self->hog = vl_calloc(hogWidth * hogHeight * self->numOrientations * 2, sizeof(float)) ; self->hogNorm = vl_calloc(hogWidth * hogHeight, sizeof(float)) ; self->hogWidth = hogWidth ; self->hogHeight = hogHeight ; } /* ---------------------------------------------------------------- */ /** @brief Process features starting from an image ** @param self HOG object. ** @param image image to process. ** @param width image width. ** @param height image height. ** @param numChannels number of image channles. ** @param cellSize size of a HOG cell. ** ** The buffer @c hog must be a three-dimensional array. ** The first two dimensions are @c (width + cellSize/2)/cellSize and ** @c (height + cellSize/2)/cellSize, where divisions are integer. ** This is approximately @c width/cellSize and @c height/cellSize, ** adjusted so that the last cell is at least half contained in the ** image. ** ** The image @c width and @c height must be not smaller than three ** pixels and not smaller than @c cellSize. **/ void vl_hog_put_image (VlHog * self, float const * image, vl_size width, vl_size height, vl_size numChannels, vl_size cellSize) { vl_size hogStride ; vl_size channelStride = width * height ; vl_index x, y ; vl_uindex k ; assert(self) ; assert(image) ; /* clear features */ vl_hog_prepare_buffers(self, width, height, cellSize) ; hogStride = self->hogWidth * self->hogHeight ; #define at(x,y,k) (self->hog[(x) + (y) * self->hogWidth + (k) * hogStride]) /* compute gradients and map the to HOG cells by bilinear interpolation */ for (y = 1 ; y < (signed)height - 1 ; ++y) { for (x = 1 ; x < (signed)width - 1 ; ++x) { float gradx = 0 ; float grady = 0 ; float grad ; float orientationWeights [2] = {0,0} ; vl_index orientationBins [2] = {-1,-1} ; vl_index orientation = 0 ; float hx, hy, wx1, wx2, wy1, wy2 ; vl_index binx, biny, o ; /* Compute the gradient at (x,y). The image channel with the maximum gradient at each location is selected. */ { float const * iter = image + y * width + x ; float grad2 = 0 ; for (k = 0 ; k < numChannels ; ++k) { float gradx_ = *(iter + 1) - *(iter - 1) ; float grady_ = *(iter + width) - *(iter - width) ; float grad2_ = gradx_ * gradx_ + grady_ * grady_ ; if (grad2_ > grad2) { gradx = gradx_ ; grady = grady_ ; grad2 = grad2_ ; } iter += channelStride ; } grad = sqrtf(grad2) ; gradx /= VL_MAX(grad, 1e-10) ; grady /= VL_MAX(grad, 1e-10) ; } /* Map the gradient to the closest and second closets orientation bins. There are numOrientations orientation in the interval [0,pi). The next numOriantations are the symmetric ones, for a total of 2*numOrientation directed orientations. */ for (k = 0 ; k < self->numOrientations ; ++k) { float orientationScore_ = gradx * self->orientationX[k] + grady * self->orientationY[k] ; vl_index orientationBin_ = k ; if (orientationScore_ < 0) { orientationScore_ = - orientationScore_ ; orientationBin_ += self->numOrientations ; } if (orientationScore_ > orientationWeights[0]) { orientationBins[1] = orientationBins[0] ; orientationWeights[1] = orientationWeights[0] ; orientationBins[0] = orientationBin_ ; ; orientationWeights[0] = orientationScore_ ; } else if (orientationScore_ > orientationWeights[1]) { orientationBins[1] = orientationBin_ ; orientationWeights[1] = orientationScore_ ; } } if (self->useBilinearOrientationAssigment) { /* min(1.0,...) guards against small overflows causing NaNs */ float angle0 = acosf(VL_MIN(orientationWeights[0],1.0)) ; orientationWeights[1] = angle0 / (VL_PI / self->numOrientations) ; orientationWeights[0] = 1 - orientationWeights[1] ; } else { orientationWeights[0] = 1 ; orientationBins[1] = -1 ; } for (o = 0 ; o < 2 ; ++o) { /* Accumulate the gradient. hx is the distance of the pixel x to the cell center at its left, in units of cellSize. With this parametrixation, a pixel on the cell center has hx = 0, which gradually increases to 1 moving to the next center. */ orientation = orientationBins[o] ; if (orientation < 0) continue ; /* (x - (w-1)/2) / w = (x + 0.5)/w - 0.5 */ hx = (x + 0.5) / cellSize - 0.5 ; hy = (y + 0.5) / cellSize - 0.5 ; binx = vl_floor_f(hx) ; biny = vl_floor_f(hy) ; wx2 = hx - binx ; wy2 = hy - biny ; wx1 = 1.0 - wx2 ; wy1 = 1.0 - wy2 ; wx1 *= orientationWeights[o] ; wx2 *= orientationWeights[o] ; wy1 *= orientationWeights[o] ; wy2 *= orientationWeights[o] ; /*VL_PRINTF("%d %d - %d %d %f %f - %f %f %f %f - %d \n ",x,y,binx,biny,hx,hy,wx1,wx2,wy1,wy2,o);*/ if (binx >= 0 && biny >=0) { at(binx,biny,orientation) += grad * wx1 * wy1 ; } if (binx < (signed)self->hogWidth - 1 && biny >=0) { at(binx+1,biny,orientation) += grad * wx2 * wy1 ; } if (binx < (signed)self->hogWidth - 1 && biny < (signed)self->hogHeight - 1) { at(binx+1,biny+1,orientation) += grad * wx2 * wy2 ; } if (binx >= 0 && biny < (signed)self->hogHeight - 1) { at(binx,biny+1,orientation) += grad * wx1 * wy2 ; } } /* next o */ } /* next x */ } /* next y */ } /* ---------------------------------------------------------------- */ /** @brief Process features starting from a field in polar notation ** @param self HOG object. ** @param modulus image gradient modulus. ** @param angle image gradient angle. ** @param directed wrap the gradient angles at 2pi (directed) or pi (undirected). ** @param width image width. ** @param height image height. ** @param cellSize size of a HOG cell. ** ** The function behaves like ::vl_hog_put_image, but foregoes the internal ** computation of the gradient field, allowing the user to specify ** their own. Angles are measure clockwise, the y axis pointing downwards, ** starting from the x axis (pointing to the right). **/ void vl_hog_put_polar_field (VlHog * self, float const * modulus, float const * angle, vl_bool directed, vl_size width, vl_size height, vl_size cellSize) { vl_size hogStride ; vl_index x, y, o ; vl_index period = self->numOrientations * (directed ? 2 : 1) ; double angleStep = VL_PI / self->numOrientations ; assert(self) ; assert(modulus) ; assert(angle) ; /* clear features */ vl_hog_prepare_buffers(self, width, height, cellSize) ; hogStride = self->hogWidth * self->hogHeight ; #define at(x,y,k) (self->hog[(x) + (y) * self->hogWidth + (k) * hogStride]) #define atNorm(x,y) (self->hogNorm[(x) + (y) * self->hogWidth]) /* fill HOG cells from gradient field */ for (y = 0 ; y < (signed)height ; ++y) { for (x = 0 ; x < (signed)width ; ++x) { float ho, hx, hy, wo1, wo2, wx1, wx2, wy1, wy2 ; vl_index bino, binx, biny ; float orientationWeights [2] = {0,0} ; vl_index orientationBins [2] = {-1,-1} ; vl_index orientation = 0 ; float thisAngle = *angle++ ; float thisModulus = *modulus++ ; if (thisModulus <= 0.0f) continue ; /* (x - (w-1)/2) / w = (x + 0.5)/w - 0.5 */ ho = (float)thisAngle / angleStep ; bino = vl_floor_f(ho) ; wo2 = ho - bino ; wo1 = 1.0f - wo2 ; while (bino < 0) { bino += self->numOrientations * 2 ; } if (self->useBilinearOrientationAssigment) { orientationBins[0] = bino % period ; orientationBins[1] = (bino + 1) % period ; orientationWeights[0] = wo1 ; orientationWeights[1] = wo2 ; } else { orientationBins[0] = (bino + ((wo1 > wo2) ? 0 : 1)) % period ; orientationWeights[0] = 1 ; orientationBins[1] = -1 ; } for (o = 0 ; o < 2 ; ++o) { /* Accumulate the gradient. hx is the distance of the pixel x to the cell center at its left, in units of cellSize. With this parametrixation, a pixel on the cell center has hx = 0, which gradually increases to 1 moving to the next center. */ orientation = orientationBins[o] ; if (orientation < 0) continue ; hx = (x + 0.5) / cellSize - 0.5 ; hy = (y + 0.5) / cellSize - 0.5 ; binx = vl_floor_f(hx) ; biny = vl_floor_f(hy) ; wx2 = hx - binx ; wy2 = hy - biny ; wx1 = 1.0 - wx2 ; wy1 = 1.0 - wy2 ; wx1 *= orientationWeights[o] ; wx2 *= orientationWeights[o] ; wy1 *= orientationWeights[o] ; wy2 *= orientationWeights[o] ; /*VL_PRINTF("%d %d - %d %d %f %f - %f %f %f %f - %d \n ",x,y,binx,biny,hx,hy,wx1,wx2,wy1,wy2,o);*/ if (binx >= 0 && biny >=0) { at(binx,biny,orientation) += thisModulus * wx1 * wy1 ; } if (binx < (signed)self->hogWidth - 1 && biny >=0) { at(binx+1,biny,orientation) += thisModulus * wx2 * wy1 ; } if (binx < (signed)self->hogWidth - 1 && biny < (signed)self->hogHeight - 1) { at(binx+1,biny+1,orientation) += thisModulus * wx2 * wy2 ; } if (binx >= 0 && biny < (signed)self->hogHeight - 1) { at(binx,biny+1,orientation) += thisModulus * wx1 * wy2 ; } } /* next o */ } /* next x */ } /* next y */ } /* ---------------------------------------------------------------- */ /** @brief Extract HOG features ** @param self HOG object. ** @param features HOG features (output). ** ** This method is called after ::vl_hog_put_image or ::vl_hog_put_polar_field ** in order to retrieve the computed HOG features. The buffer @c features must have the dimensions returned by ** ::vl_hog_get_width, ::vl_hog_get_height, and ::vl_hog_get_dimension. **/ void vl_hog_extract (VlHog * self, float * features) { vl_index x, y ; vl_uindex k ; vl_size hogStride = self->hogWidth * self->hogHeight ; assert(features) ; #define at(x,y,k) (self->hog[(x) + (y) * self->hogWidth + (k) * hogStride]) #define atNorm(x,y) (self->hogNorm[(x) + (y) * self->hogWidth]) /* Computes the squared L2 norm of each HOG cell. This is the norm of the undirected orientation histogram, counting only numOrientations. This histogram is obtained by folding the 2*numOrientations directed orientations that are computed. */ { float const * iter = self->hog ; for (k = 0 ; k < self->numOrientations ; ++k) { float * niter = self->hogNorm ; float * niterEnd = self->hogNorm + self->hogWidth * self->hogHeight ; vl_size stride = self->hogWidth*self->hogHeight*self->numOrientations ; while (niter != niterEnd) { float h1 = *iter ; float h2 = *(iter + stride) ; float h = h1 + h2 ; *niter += h * h ; niter++ ; iter++ ; } } } /* HOG block-normalisation. For each cell, there are four 2x2 blocks covering it. For example, the cell number 5 in the following scheme is covered by the four blocks 1245, 2356, 4578, 5689. +---+---+---+ | 1 | 2 | 3 | +---+---+---+ | 4 | 5 | 6 | +---+---+---+ | 7 | 8 | 9 | +---+---+---+ In the Dalal-Triggs implementation, one forms all possible 2x2 blocks of cells, computes a descriptor vector for each by stacking the corresponding 2x2 HOG cells, and L2 normalizes (and truncates) the result. Thus each HOG cell appears in four blocks. These are then decomposed again to produce descriptors for each cell. Each descriptor is simply the stacking of the portion of each block descriptor that arised from that cell. This process result in a descriptor of each cell which contains four copies of the original HOG, with four different normalization factors. @remark By stacking together the cell descriptors for a large retangular block of cells, one effectively stacks together the block descriptors of an equal number of blocks (except for the boundaries, for which blocks are only partially included). Since blocks are L2 normalized (up to truncation), this implies that the L2 norm of the resulting vector is approximately equal to the area of the region. */ { float const * iter = self->hog ; for (y = 0 ; y < (signed)self->hogHeight ; ++y) { for (x = 0 ; x < (signed)self->hogWidth ; ++x) { /* norm of upper-left, upper-right, ... blocks */ vl_index xm = VL_MAX(x - 1, 0) ; vl_index xp = VL_MIN(x + 1, (signed)self->hogWidth - 1) ; vl_index ym = VL_MAX(y - 1, 0) ; vl_index yp = VL_MIN(y + 1, (signed)self->hogHeight - 1) ; double norm1 = atNorm(xm,ym) ; double norm2 = atNorm(x,ym) ; double norm3 = atNorm(xp,ym) ; double norm4 = atNorm(xm,y) ; double norm5 = atNorm(x,y) ; double norm6 = atNorm(xp,y) ; double norm7 = atNorm(xm,yp) ; double norm8 = atNorm(x,yp) ; double norm9 = atNorm(xp,yp) ; double factor1, factor2, factor3, factor4 ; double t1 = 0 ; double t2 = 0 ; double t3 = 0 ; double t4 = 0 ; float * oiter = features + x + self->hogWidth * y ; /* each factor is the inverse of the l2 norm of one of the 2x2 blocks surrounding cell x,y */ #if 0 if (self->transposed) { /* if the image is transposed, y and x are swapped */ factor1 = 1.0 / VL_MAX(sqrt(norm1 + norm2 + norm4 + norm5), 1e-10) ; factor3 = 1.0 / VL_MAX(sqrt(norm2 + norm3 + norm5 + norm6), 1e-10) ; factor2 = 1.0 / VL_MAX(sqrt(norm4 + norm5 + norm7 + norm8), 1e-10) ; factor4 = 1.0 / VL_MAX(sqrt(norm5 + norm6 + norm8 + norm9), 1e-10) ; } else { factor1 = 1.0 / VL_MAX(sqrt(norm1 + norm2 + norm4 + norm5), 1e-10) ; factor2 = 1.0 / VL_MAX(sqrt(norm2 + norm3 + norm5 + norm6), 1e-10) ; factor3 = 1.0 / VL_MAX(sqrt(norm4 + norm5 + norm7 + norm8), 1e-10) ; factor4 = 1.0 / VL_MAX(sqrt(norm5 + norm6 + norm8 + norm9), 1e-10) ; } #else /* as implemented in UOCTTI code */ if (self->transposed) { /* if the image is transposed, y and x are swapped */ factor1 = 1.0 / sqrt(norm1 + norm2 + norm4 + norm5 + 1e-4) ; factor3 = 1.0 / sqrt(norm2 + norm3 + norm5 + norm6 + 1e-4) ; factor2 = 1.0 / sqrt(norm4 + norm5 + norm7 + norm8 + 1e-4) ; factor4 = 1.0 / sqrt(norm5 + norm6 + norm8 + norm9 + 1e-4) ; } else { factor1 = 1.0 / sqrt(norm1 + norm2 + norm4 + norm5 + 1e-4) ; factor2 = 1.0 / sqrt(norm2 + norm3 + norm5 + norm6 + 1e-4) ; factor3 = 1.0 / sqrt(norm4 + norm5 + norm7 + norm8 + 1e-4) ; factor4 = 1.0 / sqrt(norm5 + norm6 + norm8 + norm9 + 1e-4) ; } #endif for (k = 0 ; k < self->numOrientations ; ++k) { double ha = iter[hogStride * k] ; double hb = iter[hogStride * (k + self->numOrientations)] ; double hc ; double ha1 = factor1 * ha ; double ha2 = factor2 * ha ; double ha3 = factor3 * ha ; double ha4 = factor4 * ha ; double hb1 = factor1 * hb ; double hb2 = factor2 * hb ; double hb3 = factor3 * hb ; double hb4 = factor4 * hb ; double hc1 = ha1 + hb1 ; double hc2 = ha2 + hb2 ; double hc3 = ha3 + hb3 ; double hc4 = ha4 + hb4 ; ha1 = VL_MIN(0.2, ha1) ; ha2 = VL_MIN(0.2, ha2) ; ha3 = VL_MIN(0.2, ha3) ; ha4 = VL_MIN(0.2, ha4) ; hb1 = VL_MIN(0.2, hb1) ; hb2 = VL_MIN(0.2, hb2) ; hb3 = VL_MIN(0.2, hb3) ; hb4 = VL_MIN(0.2, hb4) ; hc1 = VL_MIN(0.2, hc1) ; hc2 = VL_MIN(0.2, hc2) ; hc3 = VL_MIN(0.2, hc3) ; hc4 = VL_MIN(0.2, hc4) ; t1 += hc1 ; t2 += hc2 ; t3 += hc3 ; t4 += hc4 ; switch (self->variant) { case VlHogVariantUoctti : ha = 0.5 * (ha1 + ha2 + ha3 + ha4) ; hb = 0.5 * (hb1 + hb2 + hb3 + hb4) ; hc = 0.5 * (hc1 + hc2 + hc3 + hc4) ; *oiter = ha ; *(oiter + hogStride * self->numOrientations) = hb ; *(oiter + 2 * hogStride * self->numOrientations) = hc ; break ; case VlHogVariantDalalTriggs : *oiter = hc1 ; *(oiter + hogStride * self->numOrientations) = hc2 ; *(oiter + 2 * hogStride * self->numOrientations) = hc3 ; *(oiter + 3 * hogStride * self->numOrientations) = hc4 ; break ; } oiter += hogStride ; } /* next orientation */ switch (self->variant) { case VlHogVariantUoctti : oiter += 2 * hogStride * self->numOrientations ; *oiter = (1.0f/sqrtf(18.0f)) * t1 ; oiter += hogStride ; *oiter = (1.0f/sqrtf(18.0f)) * t2 ; oiter += hogStride ; *oiter = (1.0f/sqrtf(18.0f)) * t3 ; oiter += hogStride ; *oiter = (1.0f/sqrtf(18.0f)) * t4 ; oiter += hogStride ; break ; case VlHogVariantDalalTriggs : break ; } ++iter ; } /* next x */ } /* next y */ } /* block normalization */ } vlfeat/vl/random.c0000644000175000017500000001756012237004745013027 0ustar dimadima/** @file random.c ** @brief Random number generator - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. Copyright (C) 2013 Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @page random Random number generator @author Andrea Vedaldi @tableofcontents The module @ref random.h implements random number generation in VLFeat. The generator is based on the popular Mersenne Twister algorithm @cite{matsumoto98mersenne} (which is the same as MATLAB random generator from MATLAB version 7.4 onwards). @section random-starting Getting started In VLFeat, a random number generator is implemented by an object of type ::VlRand. The simplest way to obtain such an object is to get the default random generator by @code VlRand * rand = vl_get_rand() ; vl_int32 signedRandomInteger = vl_rand_int31(rand) ; @code Note that there is one such generator per thread (see ::vl_get_rand). If more control is desired, a new ::VlRand object can be easily created. The object is lightweight, designed to be allocated on the stack: @code VlRand rand ; vl_rand_init (&rand) ; @endcode The generator can be seeded by ::vl_rand_seed and ::vl_rand_seed_by_array. For instance: @code vl_rand_seed (&rand, clock()) ; @endcode The generator can be used to obtain random quantities of various types: - ::vl_rand_int31, ::vl_rand_uint32 for 32-bit random integers; - ::vl_rand_real1 for a double in [0,1]; - ::vl_rand_real2 for a double in [0,1); - ::vl_rand_real3 for a double in (0,1); - ::vl_rand_res53 for a double in [0,1) with high resolution. There is no need to explicitly destroy a ::VlRand instance. **/ #include "random.h" /* A C-program for MT19937, with initialization improved 2002/1/26. Coded by Takuji Nishimura and Makoto Matsumoto. Before using, initialize the state by using init_genrand(seed) or init_by_array(init_key, keySize). Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The names of its contributors may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Any feedback is very welcome. http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) */ #include #include /* Period parameters */ #define N 624 #define M 397 #define MATRIX_A VL_UINT32_C(0x9908b0df) /* constant vector a */ #define UPPER_MASK VL_UINT32_C(0x80000000) /* most asignificant w-r bits */ #define LOWER_MASK VL_UINT32_C(0x7fffffff) /* least significant r bits */ /* initializes mt[N] with a seed */ /** @brief Initialise random number generator ** @param self number generator. **/ void vl_rand_init (VlRand * self) { memset (self->mt, 0, sizeof(self->mt[0]) * N) ; self->mti = N + 1 ; } /** @brief Seed the state of the random number generator ** @param self random number generator. ** @param s seed. **/ void vl_rand_seed (VlRand * self, vl_uint32 s) { #define mti self->mti #define mt self->mt mt[0]= s & VL_UINT32_C(0xffffffff); for (mti=1; mti> 30)) + mti); /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */ /* In the previous versions, MSBs of the seed affect */ /* only MSBs of the array mt[]. */ /* 2002/01/09 modified by Makoto Matsumoto */ mt[mti] &= VL_UINT32_C(0xffffffff); /* for >32 bit machines */ } #undef mti #undef mt } /** @brief Seed the state of the random number generator by an array ** @param self random number generator. ** @param key array of numbers. ** @param keySize length of the array. **/ void vl_rand_seed_by_array (VlRand * self, vl_uint32 const key [], vl_size keySize) { #define mti self->mti #define mt self->mt int i, j, k; vl_rand_seed (self, VL_UINT32_C(19650218)); i=1; j=0; k = (N > keySize ? N : (int)keySize); for (; k; k--) { mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * VL_UINT32_C(1664525))) + key[j] + j; /* non linear */ mt[i] &= VL_UINT32_C(0xffffffff); /* for WORDSIZE > 32 machines */ i++; j++; if (i>=N) { mt[0] = mt[N-1]; i=1; } if (j>=(signed)keySize) j=0; } for (k=N-1; k; k--) { mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * VL_UINT32_C(1566083941))) - i; /* non linear */ mt[i] &= VL_UINT32_C(0xffffffff) ; /* for WORDSIZE > 32 machines */ i++; if (i>=N) { mt[0] = mt[N-1]; i=1; } } mt[0] = VL_UINT32_C(0x80000000); /* MSB is 1; assuring non-zero initial array */ #undef mti #undef mt } /** @brief Randomly permute and array of indexes. ** @param self random number generator. ** @param array array of indexes. ** @param size number of element in the array. ** ** The function uses *Algorithm P*, also known as *Knuth shuffle*. **/ void vl_rand_permute_indexes (VlRand *self, vl_index *array, vl_size size) { vl_index i, j, tmp; for (i = size - 1 ; i > 0; i--) { /* Pick a random index j in the range 0, i + 1 and swap it with i */ j = (vl_int) vl_rand_uindex (self, i + 1) ; tmp = array[i] ; array[i] = array[j] ; array[j] = tmp ; } } /** @brief Generate a random UINT32 ** @param self random number generator. ** @return a random number in [0, 0xffffffff]. **/ vl_uint32 vl_rand_uint32 (VlRand * self) { vl_uint32 y; static vl_uint32 mag01[2]={VL_UINT32_C(0x0), MATRIX_A}; /* mag01[x] = x * MATRIX_A for x=0,1 */ #define mti self->mti #define mt self->mt if (mti >= N) { /* generate N words at one time */ int kk; if (mti == N+1) /* if init_genrand() has not been called, */ vl_rand_seed (self, VL_UINT32_C(5489)); /* a default initial seed is used */ for (kk=0;kk> 1) ^ mag01[y & VL_UINT32_C(0x1)]; } for (;kk> 1) ^ mag01[y & VL_UINT32_C(0x1)]; } y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK); mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & VL_UINT32_C(0x1)]; mti = 0; } y = mt[mti++]; /* Tempering */ y ^= (y >> 11); y ^= (y << 7) & VL_UINT32_C(0x9d2c5680); y ^= (y << 15) & VL_UINT32_C(0xefc60000); y ^= (y >> 18); return (vl_uint32)y; #undef mti #undef mt } vlfeat/vl/ikmeans_init.tc0000644000175000017500000000722012237004736014375 0ustar dimadima/** @file ikmeans_init.tc ** @brief Integer K-Means - Initialization - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include "random.h" /* pairs are used to generate random permutations of data */ typedef struct { vl_int32 w; vl_int32 j; } pair_t; static int cmp_pair (void const *a, void const *b) { pair_t *pa = (pair_t *) a; pair_t *pb = (pair_t *) b; vl_int32 d = pa->w - pb->w ; if (d) return d ; /* break ties (qsort not stable) */ return pa->j - pb->j; } VL_INLINE vl_uint32 calc_dist2 (vl_int32 const* A, vl_uint8 const* B, int M) { vl_uint32 acc = 0; int i = 0 ; for (i = 0 ; i < M ; ++i) { vl_int32 dist = A [i] - B [i] ; acc += dist * dist ; } return acc ; } /** @internal ** @brief Helper function to allocate memory for an IKM quantizer ** @param f quantizer. ** @param M data dimensionality. ** @param K number of clusters. **/ static void alloc (VlIKMFilt *f, int M, int K) { if (f-> centers) vl_free (f-> centers) ; f-> K = K ; f-> M = M ; f-> centers = vl_malloc (sizeof(vl_ikm_acc) * M * K) ; } /** @brief Helper function to initialize the quantizer ** @param f IKM quantizer. **/ static void vl_ikm_init_helper (VlIKMFilt *f) { switch (f-> method) { case VL_IKM_LLOYD: vl_ikm_init_lloyd (f) ; break ; case VL_IKM_ELKAN: vl_ikm_init_elkan (f) ; break ; } } /** @brief Initialize quantizer with centers ** @param f IKM quantizer. ** @param centers centers. ** @param M data dimensionality. ** @param K number of clusters. **/ VL_EXPORT void vl_ikm_init (VlIKMFilt* f, vl_ikm_acc const * centers, int M, int K) { alloc (f, M, K) ; memcpy (f-> centers, centers, sizeof(vl_ikm_acc) * M * K) ; vl_ikm_init_helper (f) ; } /** @brief Initialize quantizer with random centers ** @param f IKM quantizer. ** @param M data dimensionality. ** @param K number of clusters. **/ VL_EXPORT void vl_ikm_init_rand (VlIKMFilt* f, int M, int K) { int k, i ; VlRand * rand = vl_get_rand() ; alloc (f, M, K) ; for (k = 0 ; k < K ; ++ k) { for (i = 0 ; i < M ; ++ i) { f-> centers [k * M + i] = (vl_ikm_acc) (vl_rand_uint32 (rand)) ; } } vl_ikm_init_helper (f) ; } /** @brief Initialize with centers from random data ** @param f IKM quantizer. ** @param data data. ** @param M data dimensionality. ** @param N number of data. ** @param K number of clusters. **/ VL_EXPORT void vl_ikm_init_rand_data (VlIKMFilt* f, vl_uint8 const* data, int M, int N, int K) { int i, j, k ; VlRand * rand = vl_get_rand () ; pair_t *pairs = (pair_t *) vl_malloc (sizeof(pair_t) * N); alloc (f, M, K) ; /* permute the data randomly */ for (j = 0 ; j < N ; ++j) { pairs[j].j = j ; pairs[j].w = ((vl_int32) vl_rand_uint32 (rand)) >> 2 ; } qsort (pairs, N, sizeof(pair_t), cmp_pair); /* initialize centers from random data points */ for (j = 0, k = 0 ; k < K ; ++ k) { /* search for the next candidate which is not a dup */ for ( ; j < N - 1 ; ++j) { int prevk = 0 ; for (prevk = 0 ; prevk < k ; ++ prevk) { vl_uint32 dist = calc_dist2 (f-> centers + prevk * M, data + (vl_uint64)pairs[j].j * M, M) ; if (dist == 0) break ; } if (prevk == k) break ; } for (i = 0 ; i < M ; ++ i) { f-> centers [k * M + i] = data [(vl_uint64)pairs[j].j * M + i] ; } if (j < N - 1) ++ j ; } vl_free (pairs) ; vl_ikm_init_helper (f) ; } /* * Local Variables: * * mode: C * * End: * */ vlfeat/vl/imopv.h0000644000175000017500000001367312237004736012707 0ustar dimadima/** @file imopv.h ** @brief Vectorized image operations ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_IMOPV_H #define VL_IMPOV_H #include "generic.h" /** @name Image convolution flags ** @{ */ #define VL_PAD_BY_ZERO (0x0 << 0) /**< @brief Pad with zeroes. */ #define VL_PAD_BY_CONTINUITY (0x1 << 0) /**< @brief Pad by continuity. */ #define VL_PAD_MASK (0x3) /**< @brief Padding field selector. */ #define VL_TRANSPOSE (0x1 << 2) /**< @brief Transpose result. */ /** @} */ /** @name Image convolution ** @{ */ VL_EXPORT void vl_imconvcol_vf (float* dst, vl_size dst_stride, float const* src, vl_size src_width, vl_size src_height, vl_size src_stride, float const* filt, vl_index filt_begin, vl_index filt_end, int step, unsigned int flags) ; VL_EXPORT void vl_imconvcol_vd (double* dst, vl_size dst_stride, double const* src, vl_size src_width, vl_size src_height, vl_size src_stride, double const* filt, vl_index filt_begin, vl_index filt_end, int step, unsigned int flags) ; VL_EXPORT void vl_imconvcoltri_f (float * dest, vl_size destStride, float const * image, vl_size imageWidth, vl_size imageHeight, vl_size imageStride, vl_size filterSize, vl_size step, int unsigned flags) ; VL_EXPORT void vl_imconvcoltri_d (double * dest, vl_size destStride, double const * image, vl_size imageWidth, vl_size imageHeight, vl_size imageStride, vl_size filterSize, vl_size step, int unsigned flags) ; /** @} */ /** @name Integral image ** @{ */ VL_EXPORT void vl_imintegral_f (float * integral, vl_size integralStride, float const * image, vl_size imageWidth, vl_size imageHeight, vl_size imageStride) ; VL_EXPORT void vl_imintegral_d (double * integral, vl_size integralStride, double const * image, vl_size imageWidth, vl_size imageHeight, vl_size imageStride) ; VL_EXPORT void vl_imintegral_i32 (vl_int32 * integral, vl_size integralStride, vl_int32 const * image, vl_size imageWidth, vl_size imageHeight, vl_size imageStride) ; VL_EXPORT void vl_imintegral_ui32 (vl_uint32 * integral, vl_size integralStride, vl_uint32 const * image, vl_size imageWidth, vl_size imageHeight, vl_size imageStride) ; /** @} */ /** @name Distance transform */ /** @{ */ VL_EXPORT void vl_image_distance_transform_d (double const * image, vl_size numColumns, vl_size numRows, vl_size columnStride, vl_size rowStride, double * distanceTransform, vl_uindex * indexes, double coeff, double offset) ; VL_EXPORT void vl_image_distance_transform_f (float const * image, vl_size numColumns, vl_size numRows, vl_size columnStride, vl_size rowStride, float * distanceTransform, vl_uindex * indexes, float coeff, float offset) ; /** @} */ /* ---------------------------------------------------------------- */ /** @name Image smoothing */ /** @{ */ VL_EXPORT void vl_imsmooth_f (float *smoothed, vl_size smoothedStride, float const *image, vl_size width, vl_size height, vl_size stride, double sigmax, double sigmay) ; VL_EXPORT void vl_imsmooth_d (double *smoothed, vl_size smoothedStride, double const *image, vl_size width, vl_size height, vl_size stride, double sigmax, double sigmay) ; /** @} */ /* ---------------------------------------------------------------- */ /** @name Image gradients */ /** @{ */ VL_EXPORT void vl_imgradient_polar_f (float* amplitudeGradient, float* angleGradient, vl_size gradWidthStride, vl_size gradHeightStride, float const* image, vl_size imageWidth, vl_size imageHeight, vl_size imageStride); VL_EXPORT void vl_imgradient_polar_d (double* amplitudeGradient, double* angleGradient, vl_size gradWidthStride, vl_size gradHeightStride, double const* image, vl_size imageWidth, vl_size imageHeight, vl_size imageStride); VL_EXPORT void vl_imgradient_f (float* xGradient, float* yGradient, vl_size gradWidthStride, vl_size gradHeightStride, float const *image, vl_size imageWidth, vl_size imageHeight, vl_size imageStride); VL_EXPORT void vl_imgradient_d(double* xGradient, double* yGradient, vl_size gradWidthStride, vl_size gradHeightStride, double const *image, vl_size imageWidth, vl_size imageHeight, vl_size imageStride); VL_EXPORT void vl_imgradient_polar_f_callback(float const *sourceImage, int sourceImageWidth, int sourceImageHeight, float *dstImage, int dstWidth, int dstHeight, int octave, int level, void *params); /** @} */ /* VL_IMOPV_H */ #endif vlfeat/vl/rodrigues.c0000644000175000017500000002151512237004745013545 0ustar dimadima/** @file rodrigues.c ** @brief Rodrigues formulas - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-13 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include "generic.h" #include "mathop.h" #include "rodrigues.h" #include /** @brief Rodrigues' formula ** @param R_pt 3x3 matrix - array of 9 double (in) . ** @param dR_pt 9x3 matrix - array of 27 double (in). ** @param om_pt 3 vector - array of 3 dobule (out). **/ void vl_rodrigues(double* R_pt, double* dR_pt, const double* om_pt) { /* Let th = |om|, r=w/th, sth=sin(th), cth=cos(th), ^om = hat(om) Then the rodrigues formula is an expansion of the exponential function: rodrigues(om) = exp ^om = I + ^r sth + ^r^2 (1 - cth). The derivative can be computed by elementary means and results: d(vec rodrigues(om)) sth d ^r 1 - cth d (^r)^2 -------------------- = ---- ----- + ------- -------- + d om^T th d r^T th d r^T sth 1 - cth + vec^r (cth - -----) + vec^r^2 (sth - 2-------)r^T th th */ #define OM(i) om_pt[(i)] #define R(i,j) R_pt[(i)+3*(j)] #define DR(i,j) dR_pt[(i)+9*(j)] #undef small const double small = 1e-6 ; double th = sqrt( OM(0)*OM(0) + OM(1)*OM(1) + OM(2)*OM(2) ) ; if( th < small ) { R(0,0) = 1.0 ; R(0,1) = 0.0 ; R(0,2) = 0.0 ; R(1,0) = 0.0 ; R(1,1) = 1.0 ; R(1,2) = 0.0 ; R(2,0) = 0.0 ; R(2,1) = 0.0 ; R(2,2) = 1.0 ; if(dR_pt) { DR(0,0) = 0 ; DR(0,1) = 0 ; DR(0,2) = 0 ; DR(1,0) = 0 ; DR(1,1) = 0 ; DR(1,2) = 1 ; DR(2,0) = 0 ; DR(2,1) = -1 ; DR(2,2) = 0 ; DR(3,0) = 0 ; DR(3,1) = 0 ; DR(3,2) = -1 ; DR(4,0) = 0 ; DR(4,1) = 0 ; DR(4,2) = 0 ; DR(5,0) = 1 ; DR(5,1) = 0 ; DR(5,2) = 0 ; DR(6,0) = 0 ; DR(6,1) = 1 ; DR(6,2) = 0 ; DR(7,0) = -1 ; DR(7,1) = 0 ; DR(7,2) = 0 ; DR(8,0) = 0 ; DR(8,1) = 0 ; DR(8,2) = 0 ; } return ; } { double x = OM(0) / th ; double y = OM(1) / th ; double z = OM(2) / th ; double xx = x*x ; double xy = x*y ; double xz = x*z ; double yy = y*y ; double yz = y*z ; double zz = z*z ; const double yx = xy ; const double zx = xz ; const double zy = yz ; double sth = sin(th) ; double cth = cos(th) ; double mcth = 1.0 - cth ; R(0,0) = 1 - mcth * (yy+zz) ; R(1,0) = sth*z + mcth * xy ; R(2,0) = - sth*y + mcth * xz ; R(0,1) = - sth*z + mcth * yx ; R(1,1) = 1 - mcth * (zz+xx) ; R(2,1) = sth*x + mcth * yz ; R(0,2) = sth*y + mcth * xz ; R(1,2) = - sth*x + mcth * yz ; R(2,2) = 1 - mcth * (xx+yy) ; if(dR_pt) { double a = sth / th ; double b = mcth / th ; double c = cth - a ; double d = sth - 2*b ; DR(0,0) = - d * (yy+zz) * x ; DR(1,0) = b*y + c * zx + d * xy * x ; DR(2,0) = b*z - c * yx + d * xz * x ; DR(3,0) = b*y - c * zx + d * xy * x ; DR(4,0) = -2*b*x - d * (zz+xx) * x ; DR(5,0) = a + c * xx + d * yz * x ; DR(6,0) = b*z + c * yx + d * zx * x ; DR(7,0) = -a - c * xx + d * zy * x ; DR(8,0) = -2*b*x - d * (yy+xx) * x ; DR(0,1) = -2*b*y - d * (yy+zz) * y ; DR(1,1) = b*x + c * zy + d * xy * y ; DR(2,1) = -a - c * yy + d * xz * y ; DR(3,1) = b*x - c * zy + d * xy * y ; DR(4,1) = - d * (zz+xx) * y ; DR(5,1) = b*z + c * xy + d * yz * y ; DR(6,1) = a + c * yy + d * zx * y ; DR(7,1) = b*z - c * xy + d * zy * y ; DR(8,1) = -2*b*y - d * (yy+xx) * y ; DR(0,2) = -2*b*z - d * (yy+zz) * z ; DR(1,2) = a + c * zz + d * xy * z ; DR(2,2) = b*x - c * yz + d * xz * z ; DR(3,2) = -a - c * zz + d * xy * z ; DR(4,2) = -2*b*z - d * (zz+xx) * z ; DR(5,2) = b*y + c * xz + d * yz * z ; DR(6,2) = b*x + c * yz + d * zx * z ; DR(7,2) = b*y - c * xz + d * zy * z ; DR(8,2) = - d * (yy+xx) * z ; } } #undef OM #undef R #undef DR } /** @brief Inverse Rodrigues formula ** @param om_pt 3 vector - array of 3 dobule (out). ** @param dom_pt 3x9 matrix - array of 3x9 dobule (out). ** @param R_pt 3x3 matrix - array of 9 double (in). ** ** This function computes the Rodrigues formula of the argument @a ** om_pt. The result is stored int the matrix @a R_pt. If @a dR_pt is ** non null, then the derivative of the Rodrigues formula is computed ** and stored into the matrix @a dR_pt. **/ VL_EXPORT void vl_irodrigues(double* om_pt, double* dom_pt, const double* R_pt) { /* tr R - 1 1 [ R32 - R23 ] th = cos^{-1} --------, r = ------ [ R13 - R31 ], w = th r. 2 2 sth [ R12 - R21 ] sth = sin(th) dw th*cth-sth dw th [di3 dj2 - di2 dj3] ---- = ---------- r, ---- = ----- [di1 dj3 - di3 dj1]. dRii 2 sth^2 dRij 2 sth [di1 dj2 - di2 dj1] trace(A) < -1 only for small num. errors. */ #define OM(i) om_pt[(i)] #define DOM(i,j) dom_pt[(i)+3*(j)] #define R(i,j) R_pt[(i)+3*(j)] #define W(i,j) W_pt[(i)+3*(j)] const double small = 1e-6 ; double th = acos (0.5*(VL_MAX(R(0,0)+R(1,1)+R(2,2),-1.0) - 1.0)) ; double sth = sin(th) ; double cth = cos(th) ; if(fabs(sth) < small && cth < 0) { /* we have this singularity when the rotation is about pi (or -pi) we use the fact that in this case hat( sqrt(1-cth) * r )^2 = W = (0.5*(R+R') - eye(3)) which gives (1-cth) rx^2 = 0.5 * (W(1,1)-W(2,2)-W(3,3)) (1-cth) ry^2 = 0.5 * (W(2,2)-W(3,3)-W(1,1)) (1-cth) rz^2 = 0.5 * (W(3,3)-W(1,1)-W(2,2)) */ double W_pt [9], x, y, z ; W_pt[0] = 0.5*( R(0,0) + R(0,0) ) - 1.0 ; W_pt[1] = 0.5*( R(1,0) + R(0,1) ) ; W_pt[2] = 0.5*( R(2,0) + R(0,2) ); W_pt[3] = 0.5*( R(0,1) + R(1,0) ); W_pt[4] = 0.5*( R(1,1) + R(1,1) ) - 1.0; W_pt[5] = 0.5*( R(2,1) + R(1,2) ); W_pt[6] = 0.5*( R(0,2) + R(2,0) ) ; W_pt[7] = 0.5*( R(1,2) + R(2,1) ) ; W_pt[8] = 0.5*( R(2,2) + R(2,2) ) - 1.0 ; /* these are only absolute values */ x = sqrt( 0.5 * (W(0,0)-W(1,1)-W(2,2)) ) ; y = sqrt( 0.5 * (W(1,1)-W(2,2)-W(0,0)) ) ; z = sqrt( 0.5 * (W(2,2)-W(0,0)-W(1,1)) ) ; /* set the biggest component to + and use the element of the ** matrix W to determine the sign of the other components ** then the solution is either (x,y,z) or its opposite */ if( x >= y && x >= z ) { y = (W(1,0) >=0) ? y : -y ; z = (W(2,0) >=0) ? z : -z ; } else if( y >= x && y >= z ) { z = (W(2,1) >=0) ? z : -z ; x = (W(1,0) >=0) ? x : -x ; } else { x = (W(2,0) >=0) ? x : -x ; y = (W(2,1) >=0) ? y : -y ; } /* we are left to chose between (x,y,z) and (-x,-y,-z) ** unfortunately we cannot (as the rotation is too close to pi) and ** we just keep what we have. */ { double scale = th / sqrt( 1 - cth ) ; OM(0) = scale * x ; OM(1) = scale * y ; OM(2) = scale * z ; if( dom_pt ) { int k ; for(k=0; k<3*9; ++k) dom_pt [k] = VL_NAN_D ; } return ; } } else { double a = (fabs(sth) < small) ? 1 : th/sin(th) ; double b ; OM(0) = 0.5*a*(R(2,1) - R(1,2)) ; OM(1) = 0.5*a*(R(0,2) - R(2,0)) ; OM(2) = 0.5*a*(R(1,0) - R(0,1)) ; if( dom_pt ) { if( fabs(sth) < small ) { a = 0.5 ; b = 0 ; } else { a = th/(2*sth) ; b = (th*cth - sth)/(2*sth*sth)/th ; } DOM(0,0) = b*OM(0) ; DOM(1,0) = b*OM(1) ; DOM(2,0) = b*OM(2) ; DOM(0,1) = 0 ; DOM(1,1) = 0 ; DOM(2,1) = a ; DOM(0,2) = 0 ; DOM(1,2) = -a ; DOM(2,2) = 0 ; DOM(0,3) = 0 ; DOM(1,3) = 0 ; DOM(2,3) = -a ; DOM(0,4) = b*OM(0) ; DOM(1,4) = b*OM(1) ; DOM(2,4) = b*OM(2) ; DOM(0,5) = a ; DOM(1,5) = 0 ; DOM(2,5) = 0 ; DOM(0,6) = 0 ; DOM(1,6) = a ; DOM(2,6) = 0 ; DOM(0,7) = -a ; DOM(1,7) = 0 ; DOM(2,7) = 0 ; DOM(0,8) = b*OM(0) ; DOM(1,8) = b*OM(1) ; DOM(2,8) = b*OM(2) ; } } #undef OM #undef DOM #undef R #undef W } vlfeat/vl/liop.c0000644000175000017500000005061712237004745012512 0ustar dimadima/** @file liop.c ** @brief Local Intensity Order Pattern (LIOP) descriptor - Definition ** @author Hana Sarbortova ** @author Andrea Vedaldi **/ /* Copyright (C) 2013 Hana Sarbortova and Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @page liop Local Intensity Order Pattern (LIOP) descriptor @author Hana Sarbortova @author Andrea Vedaldi @ref liop.h implements *Local Intensity Order Pattern descriptor* (LIOP) of @cite{wang11local}. LIOP is a local image descriptor, similarly to the @ref sift "SIFT descriptor". @ref liop-starting demonstrates how to use the C API to compute the LIOP descriptor of a patch. For further details refer to: - @subpage liop-fundamentals - LIOP definition and parameters. @section liop-starting Getting started with LIOP The following code fragment demonstrates how tow to use @ref liop.h in a C program in order to compute the LIOP descriptor of an image patch. @code #include // Create a new object instance (these numbers corresponds to parameter // values proposed by authors of the paper, except for 41) vl_size sideLength = 41 ; VlLiopDesc * liop = vl_liopdesc_new_basic (sideLength); // allocate the descriptor array vl_size dimension = vl_liopdesc_get_dimension(liop) ; float * desc = vl_malloc(sizeof(float) * dimension) ; // compute descriptor from a patch (an array of length sideLegnth * // sideLength) vl_liopdesc_process(liop, desc, patch) ; // delete the object vl_liopdesc_delete(liop) ; @endcode The image patch must be of odd side length and in single precision. There are several parameters affecting the LIOP descriptor. An example is the @ref liop-weighing "threshold" used to discard low-contrast oder pattern in the computation of the statistics. This is changed by using ::vl_liopdesc_set_threshold. **/ /** @page liop-fundamentals LIOP fundamentals @tableofcontents The *Local Invariant Order Pattern* (LIOP) descriptor @cite{wang11local} is a local image descriptor based on the concept of *local order pattern*. An order pattern is simply the order obtained by sorting selected image samples by increasing intensity. Consider in particular a pixel $\bx$ and $n$ neighbors $\bx_1,\bx_2,\dots,\bx_n$. The local order pattern at $\bx$ is the permutation $\sigma$ that sorts the neighbours by increasing intensity $I(\bx_{\sigma(1)}) \leq I(\bx_{\sigma(2)}) \leq \dots \leq I(\bx_{\sigma(2)})$. An advantage of order patterns is that they are invariant to monotonic changes of the image intensity. However, an order pattern describes only a small portion of a patch and is not very distinctive. LIOP assembles local order patterns computed at all image locations to obtain a descriptor that at the same time distinctive and invariant to monotonic intensity changes as well as image rotations. In order to make order patterns rotation invariant, the neighborhood of samples around $\bx$ is taken in a rotation-covariant manner. In particular, the points $\bx_1,\dots,\bx_n$ are sampled anticlockwise on a circle of radius $r$ around $\bx$, as shown in the following figure: @image html liop.png "LIOP descriptor layout: square input patch (shaded area), circular measurement region (white area), local neighborhood of a point (blue)." Since the sample points do not necessarily have integer coordinates, $I(\bx_i)$ is computed using bilinear interpolation. @section liop-spatial-binning Intensity rank spatial binning Once local order patterns are computed for all pixels $\bx$ in the image, they can be pooled into a histogram to form an image descriptor. Pooling discards spatial information resulting in a warp-invariant statistics. In practice, there are two restriction on which pixels can be used for this purpose: - A margin of $r$ pixels from the image boundary must be maintained so that neighborhoods fall within the image boundaries. - Rotation invariance requires the pooling regions to be rotation co-variant. A way to do so is to make the shape of the pooling region rotation invariant. For this reason, the histogram pooling region is restricted to the circular region shown with a light color in the figure above. In order to increase distinctiveness of the descriptor, LIOP pools multiple histograms from a number of regions $R_1,\dots,R_m$ (spatial pooling). These regions are selected in an illumination-invariant and rotation-covariant manner by looking at level sets: \[ R_t = \{\bx :\tau_{t} \leq I(\bx) < \tau_{t+1} \}. \] In order to be invariant to monotonic changes of the intensity, the thresholds $\tau_t$ are selected so that all regions contain the same number of pixels. This can be done efficiently by sorting pixels by increasing intensity and then partitioning the resulting list into $m$ equal parts (when $m$ does not divide the number of pixels exactly, the remaining pixels are incorporated into the last partition). @section liop-weighing Weighted pooling In order to compute a histogram of order pattern occurrences, one needs to map permutations to histogram bins. This is obtained by sorting permutation in lexycogrpahical order. For example, for $n=4$ neighbors one has the following $n!=24$ permutations: Permutation | Lexycographical rank --------------|---------------------- 1 2 3 4 | 1 1 2 4 3 | 2 1 3 2 4 | 3 1 3 4 2 | 4 ... | ... 4 3 1 2 | 23 4 3 2 1 | 24 In the following, $q(\bx) \in [1, n!]$ will denote the index of the local order pattern $\sigma$ centered at pixel $\bx$. The local order patterns $q(\bx)$ in a region $R_t$ are then pooled to form a histogram of size $!n$. In this process, patterns are weighted based on their stability. The latter is assumed to be proportional to the number of pairs of pixels in the neighborhood that have a sufficiently large intensity difference: @f[ w(\bx) = \sum_{i=1}^n \sum_{j=1}^n [ |I(\bx_{i}) - I(\bx_{j})| > \Theta) ] @f] where $[\cdot]$ is the indicator function. In VLFeat LIOP implementation, the threshold $\Theta$ is either set as an absolute value, or as a faction of the difference between the maximum and minimum intensity in the image (restricted to the pixels in the light area in the figure above). Overall, LIOP consists of $m$ histograms of size $n!$ obtained as \[ h_{qt} = \sum_{\bx : q(\bx) = q \ \wedge\ \bx \in R_t} w(\bx). \] @section liop-normalization Normalization After computing the weighted counts $h_{qt}$, the LIOP descriptor is obtained by stacking the values $\{h_{qt}\}$ into a vector $\mathbf{h}$ and then normalising it: \[ \Phi = \frac{\mathbf{h}}{\|\mathbf{h}\|_2} \] The dimensionality is therefore $m n!$, where $m$ is the @c numSpatialBins number of spatial bins and $n$ is the @c numNeighbours number of neighbours (see ::vl_liopdesc_new). By default, this descriptor is stored in @c single format. It can be stored as a sequence of bytes by premultiplying the values by the constant 255 and then rounding: \[ \operatorname{round}\left[ 255\, \times \Phi\right]. \] */ #include "liop.h" #include "mathop.h" #include "imopv.h" #include #define DEFAULT_INTENSITY_THRESHOLD -(5.0/255) #define DEFAULT_RADIUS 6.0 #define DEFAULT_NUM_SPATIAL_BINS 6 #define DEFAULT_NUM_NEIGHBOURS 4 /* ---------------------------------------------------------------- */ /* Helper functions */ /* ---------------------------------------------------------------- */ static vl_int factorial(vl_int num) { vl_int result = 1; while(num > 1){ result = num*result; num--; } return result ; } /** @internal @brief Compute permutation index. ** @param permutation array containing all values from 0 to (size - 1) (input/output). ** @param size size of the permutation array. ** @return permutation index. ** ** Compute the position of @a permutation in the lexycographcial ** sorting of permutations of the given @a size. ** ** For example, in the lexicographical ordering, permutations of four elements ** are listed as [1 2 3 4], [1 2 4 3], [1 3 2 4], [1 3 4 2], [1 4 2 3], ** [1 4 3 2], [2 1 3 4], ..., [4 3 2 1]. ** ** The index can be computed as follows. First pick the first digit ** perm[1]. This is either 1,2,...,n. For each ** choice of the first digits, there are (n-1)! other permutations, separated ** therefore by (n-1)! elements in lexicographical order. ** ** Process then the second digit perm[2]. This can be though as finding ** the lexycotraphical index of perm[2], ..., perm[n], a permutation of ** n-1 elements. This can be explicitly obtained by taking out 1 from ** all elements perm[i] > perm[1]. */ VL_INLINE vl_index get_permutation_index(vl_uindex *permutation, vl_size size){ vl_index index = 0 ; vl_index i ; vl_index j ; for (i = 0 ; i < (signed)size ; ++i) { index = index * ((signed)size - i) + permutation[i] ; for (j = i + 1 ; j < (signed)size ; ++j) { if (permutation[j] > permutation[i]) { permutation[j] -- ; } } } return index ; } /* instantiate two quick sort algorithms */ VL_INLINE float patch_cmp (VlLiopDesc * liop, vl_index i, vl_index j) { vl_index ii = liop->patchPermutation[i] ; vl_index jj = liop->patchPermutation[j] ; return liop->patchIntensities[ii] - liop->patchIntensities[jj] ; } VL_INLINE void patch_swap (VlLiopDesc * liop, vl_index i, vl_index j) { vl_index tmp = liop->patchPermutation[i] ; liop->patchPermutation[i] = liop->patchPermutation[j] ; liop->patchPermutation[j] = tmp ; } #define VL_QSORT_prefix patch #define VL_QSORT_array VlLiopDesc* #define VL_QSORT_cmp patch_cmp #define VL_QSORT_swap patch_swap #include "qsort-def.h" VL_INLINE float neigh_cmp (VlLiopDesc * liop, vl_index i, vl_index j) { vl_index ii = liop->neighPermutation[i] ; vl_index jj = liop->neighPermutation[j] ; return liop->neighIntensities[ii] - liop->neighIntensities[jj] ; } VL_INLINE void neigh_swap (VlLiopDesc * liop, vl_index i, vl_index j) { vl_index tmp = liop->neighPermutation[i] ; liop->neighPermutation[i] = liop->neighPermutation[j] ; liop->neighPermutation[j] = tmp ; } #define VL_QSORT_prefix neigh #define VL_QSORT_array VlLiopDesc* #define VL_QSORT_cmp neigh_cmp #define VL_QSORT_swap neigh_swap #include "qsort-def.h" /* ---------------------------------------------------------------- */ /* Construct and destroy */ /* ---------------------------------------------------------------- */ /** @brief Create a new LIOP object instance. ** @param numNeighbours number of neighbours. ** @param numSpatialBins number of bins. ** @param radius radius of the cirucal sample neighbourhoods. ** @param sideLength width of the input image patch (the patch is square). ** @return new object instance. ** ** The value of @a radius should be at least less than half the @a ** sideLength of the patch. **/ VlLiopDesc * vl_liopdesc_new (vl_int numNeighbours, vl_int numSpatialBins, float radius, vl_size sideLength) { vl_index i, t ; VlLiopDesc * self = vl_calloc(sizeof(VlLiopDesc), 1); assert(radius <= sideLength/2) ; self->numNeighbours = numNeighbours ; self->numSpatialBins = numSpatialBins ; self->neighRadius = radius ; self->intensityThreshold = DEFAULT_INTENSITY_THRESHOLD ; self->dimension = factorial(numNeighbours) * numSpatialBins ; /* Precompute a list of pixels within a circular patch inside the square image. Leave a suitable marging for sampling around these pixels. */ self->patchSize = 0 ; self->patchPixels = vl_malloc(sizeof(vl_uindex)*sideLength*sideLength) ; self->patchSideLength = sideLength ; { vl_index x, y ; vl_index center = (sideLength - 1) / 2 ; double t = center - radius + 0.6 ; vl_index t2 = (vl_index) (t * t) ; for (y = 0 ; y < (signed)sideLength ; ++y) { for (x = 0 ; x < (signed)sideLength ; ++x) { vl_index dx = x - center ; vl_index dy = y - center ; if (x == 0 && y == 0) continue ; if (dx*dx + dy*dy <= t2) { self->patchPixels[self->patchSize++] = x + y * sideLength ; } } } } self->patchIntensities = vl_malloc(sizeof(vl_uindex)*self->patchSize) ; self->patchPermutation = vl_malloc(sizeof(vl_uindex)*self->patchSize) ; /* Precompute the samples in the circular neighbourhood of each measurement point. */ self->neighPermutation = vl_malloc(sizeof(vl_uindex) * self->numNeighbours) ; self->neighIntensities = vl_malloc(sizeof(float) * self->numNeighbours) ; self->neighSamplesX = vl_calloc(sizeof(double), self->numNeighbours * self->patchSize) ; self->neighSamplesY = vl_calloc(sizeof(double), self->numNeighbours * self->patchSize) ; for (i = 0 ; i < (signed)self->patchSize ; ++i) { vl_index pixel ; double x, y ; double dangle = 2*VL_PI / (double)self->numNeighbours ; double angle0 ; vl_index center = (sideLength - 1) / 2 ; pixel = self->patchPixels[i] ; x = (pixel % (signed)self->patchSideLength) - center ; y = (pixel / (signed)self->patchSideLength) - center ; angle0 = atan2(y,x) ; for (t = 0 ; t < (signed)self->numNeighbours ; ++t) { double x1 = x + radius * cos(angle0 + dangle * t) + center ; double y1 = y + radius * sin(angle0 + dangle * t) + center ; self->neighSamplesX[t + (signed)self->numNeighbours * i] = x1 ; self->neighSamplesY[t + (signed)self->numNeighbours * i] = y1 ; } } return self ; } /** @brief Create a new object with default parameters ** @param patchSideLength size of the patches to be processed. ** @return new object. ** ** @see ::vl_liopdesc_new. */ VlLiopDesc * vl_liopdesc_new_basic (vl_size sideLength) { return vl_liopdesc_new(DEFAULT_NUM_NEIGHBOURS, DEFAULT_NUM_SPATIAL_BINS, DEFAULT_RADIUS, sideLength) ; } /** @brief Delete object instance. ** @param self object instance. */ void vl_liopdesc_delete (VlLiopDesc * self) { vl_free (self->patchPixels) ; vl_free (self->patchIntensities) ; vl_free (self->patchPermutation) ; vl_free (self->neighSamplesX) ; vl_free (self->neighSamplesY) ; vl_free (self) ; } /* ---------------------------------------------------------------- */ /* Compute LIOP descriptor */ /* ---------------------------------------------------------------- */ /** @brief Compute liop descriptor for a patch ** @param self object instance ** @param desc descriptor to be computed (output). ** @param patch patch to process ** ** Use ::vl_liopdesc_get_dimension to get the size of the descriptor ** @desc. */ void vl_liopdesc_process (VlLiopDesc * self, float * desc, float const * patch) { vl_index i,t ; vl_index offset,numPermutations ; vl_index spatialBinArea, spatialBinEnd, spatialBinIndex ; float threshold ; memset(desc, 0, self->dimension) ; /* * Sort pixels in the patch by increasing intensity. */ for (i = 0 ; i < (signed)self->patchSize ; ++i) { vl_index pixel = self->patchPixels[i] ; self->patchIntensities[i] = patch[pixel] ; self->patchPermutation[i] = i ; } patch_sort(self, self->patchSize) ; /* * Tune the threshold if needed */ if (self->intensityThreshold < 0) { i = self->patchPermutation[0] ; t = self->patchPermutation[self->patchSize-1] ; threshold = - self->intensityThreshold * (self->patchIntensities[t] - self->patchIntensities[i]); } else { threshold = self->intensityThreshold ; } /* * Process pixels in order of increasing intenisity, dividing them into * spatial bins on the fly. */ numPermutations = factorial(self->numNeighbours) ; spatialBinArea = self->patchSize / self->numSpatialBins ; spatialBinEnd = spatialBinArea ; spatialBinIndex = 0 ; offset = 0 ; for (i = 0 ; i < (signed)self->patchSize ; ++i) { vl_index permIndex ; double *sx, *sy ; /* advance to the next spatial bin if needed */ if (i >= (signed)spatialBinEnd && spatialBinIndex < (signed)self->numSpatialBins - 1) { spatialBinEnd += spatialBinArea ; spatialBinIndex ++ ; offset += numPermutations ; } /* get intensities of neighbours of the current patch element and sor them */ sx = self->neighSamplesX + self->numNeighbours * self->patchPermutation[i] ; sy = self->neighSamplesY + self->numNeighbours * self->patchPermutation[i] ; for (t = 0 ; t < self->numNeighbours ; ++t) { double x = *sx++ ; double y = *sy++ ; /* bilinear interpolation */ vl_index ix = vl_floor_d(x) ; vl_index iy = vl_floor_d(y) ; double wx = x - ix ; double wy = y - iy ; double a = 0, b = 0, c = 0, d = 0 ; int L = (int) self->patchSideLength ; if (ix >= 0 && iy >= 0) { a = patch[ix + iy * L] ; } if (ix < L && iy >= 0) { b = patch[ix+1 + iy * L] ; } if (ix >= 0 && iy < L) { c = patch[ix + (iy+1) * L] ; } if (ix < L && iy < L) { d = patch[ix+1 + (iy+1) * L] ; } self->neighPermutation[t] = t; self->neighIntensities[t] = (1 - wy) * (a + (b - a) * wx) + wy * (c + (d - c) * wx) ; } neigh_sort (self, self->numNeighbours) ; /* get permutation index */ permIndex = get_permutation_index(self->neighPermutation, self->numNeighbours); /* * Compute weight according to difference in intensity values and * accumulate. */ { int k, t ; float weight = 0 ; for(k = 0; k < self->numNeighbours ; ++k) { for(t = k + 1; t < self->numNeighbours; ++t){ double a = self->neighIntensities[k] ; double b = self->neighIntensities[t] ; weight += (a > b + threshold || b > a + threshold) ; } } desc[permIndex + offset] += weight ; } } /* normalization */ { float norm = 0; for(i = 0; i < (signed)self->dimension; i++) { norm += desc[i]*desc[i]; } norm = VL_MAX(sqrt(norm), 1e-12) ; for(i = 0; i < (signed)self->dimension; i++){ desc[i] /= norm ; } } } /* ---------------------------------------------------------------- */ /* Getters and setters */ /* ---------------------------------------------------------------- */ /** @brief Get the dimension of a LIOP descriptor. ** @return dimension. */ vl_size vl_liopdesc_get_dimension (VlLiopDesc const * self) { return self->dimension ; } /** @brief Get the number of neighbours. ** @param self object. ** @return number of neighbours. **/ vl_size vl_liopdesc_get_num_neighbours (VlLiopDesc const * self) { assert(self) ; return self->numNeighbours ; } /** @brief Get the intensity threshold ** @param self object. ** @return intensity threshold. ** @see liop-weighing **/ float vl_liopdesc_get_intensity_threshold (VlLiopDesc const * self) { assert(self) ; return self->intensityThreshold ; } /** @brief Set the intensity threshold ** @param self object. ** @param x intensity threshold. ** ** If non-negative, the threshold as is is used when comparing ** intensities. If negative, the absolute value of the specified ** number is multipled by the maximum intensity difference inside a ** patch to obtain the threshold. ** ** @see liop-weighing **/ void vl_liopdesc_set_intensity_threshold (VlLiopDesc * self, float x) { assert(self) ; self->intensityThreshold = x ; } /** @brief Get the neighbourhood radius. ** @param self object. ** @return neighbourhood radius. **/ double vl_liopdesc_get_neighbourhood_radius (VlLiopDesc const * self) { assert(self) ; return self->neighRadius ; } /** @brief Get the number of spatial bins. ** @param self object. ** @return number of spatial bins. **/ vl_size vl_liopdesc_get_num_spatial_bins (VlLiopDesc const * self) { assert(self) ; return self->numSpatialBins ; } vlfeat/vl/imopv.c0000644000175000017500000010462212237004745012675 0ustar dimadima/** @file imopv.c ** @brief Vectorized image operations - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @file imopv.h ** ** This module provides the following image operations: ** ** - Separable convolution. The function ::vl_imconvcol_vf() ** can be used to compute separable convolutions. ** ** - Convolution by a triangular kernel. The function ** vl_imconvcoltri_vf() is an optimized convolution routine for ** triangular kernels. ** ** - Distance transform. ::vl_image_distance_transform_f() is ** a linear algorithm to compute the distance transform of an ** image. ** ** @remark Some operations are optimized to exploit possible SIMD ** instructions. This requires image data to be properly aligned (typically ** to 16 bytes). Similalry, the image stride (the number of bytes to skip to move ** to the next image row), must be aligned. **/ #ifndef VL_IMOPV_INSTANTIATING #include "imopv.h" #include "imopv_sse2.h" #include "mathop.h" #define FLT VL_TYPE_FLOAT #define VL_IMOPV_INSTANTIATING #include "imopv.c" #define FLT VL_TYPE_DOUBLE #define VL_IMOPV_INSTANTIATING #include "imopv.c" #define FLT VL_TYPE_UINT32 #define VL_IMOPV_INSTANTIATING #include "imopv.c" #define FLT VL_TYPE_INT32 #define VL_IMOPV_INSTANTIATING #include "imopv.c" /* VL_IMOPV_INSTANTIATING */ #endif #if defined(VL_IMOPV_INSTANTIATING) || defined(__DOXYGEN__) #include "float.th" /* ---------------------------------------------------------------- */ /* Image Convolution */ /* ---------------------------------------------------------------- */ #if (FLT == VL_TYPE_FLOAT || FLT == VL_TYPE_DOUBLE) /** @fn vl_imconvcol_vd(double*,vl_size,double const*,vl_size,vl_size,vl_size,double const*,vl_index,vl_index,int,unsigned int) ** @brief Convolve image along columns ** ** @param dst destination image. ** @param dst_stride width of the destination image including padding. ** @param src source image. ** @param src_width width of the source image. ** @param src_height height of the source image. ** @param src_stride width of the source image including padding. ** @param filt filter kernel. ** @param filt_begin coordinate of the first filter element. ** @param filt_end coordinate of the last filter element. ** @param step sub-sampling step. ** @param flags operation modes. ** ** The function convolves the column of the image @a src by the ** filter @a filt and saves the result to the image @a dst. The size ** of @a dst must be equal to the size of @a src. Formally, this ** results in the calculation ** ** @f[ ** \mathrm{dst} [x,y] = \sum_{p=y-\mathrm{filt\_end}}^{y-\mathrm{filt\_begin}} ** \mathrm{src}[x,y] \mathrm{filt}[y - p - \mathrm{filt\_begin}] ** @f] ** ** The function subsamples the image along the columns according to ** the parameter @a step. Setting @a step to 1 (one) computes the ** elements @f$\mathrm{dst}[x,y]@f$ for all pairs (x,0), (x,1), (x,2) ** and so on. Setting @a step two 2 (two) computes only (x,0), (x,2) ** and so on (in this case the height of the destination image is ** floor(src_height/step)+1). ** ** Calling twice the function can be used to compute 2-D separable ** convolutions. Use the flag ::VL_TRANSPOSE to transpose the result ** (in this case @a dst has transposed dimension as well). ** ** The function allows the support of the filter to be any range. ** Usually the support is @a filt_end = -@a filt_begin. ** ** The convolution operation may pick up values outside the image ** boundary. To cope with this edge cases, the function either pads ** the image by zero (::VL_PAD_BY_ZERO) or with the values at the ** boundary (::VL_PAD_BY_CONTINUITY). **/ /** @fn vl_imconvcol_vf(float*,vl_size,float const*,vl_size,vl_size,vl_size,float const*,vl_index,vl_index,int,unsigned int) ** @see ::vl_imconvcol_vd **/ VL_EXPORT void VL_XCAT(vl_imconvcol_v, SFX) (T* dst, vl_size dst_stride, T const* src, vl_size src_width, vl_size src_height, vl_size src_stride, T const* filt, vl_index filt_begin, vl_index filt_end, int step, unsigned int flags) { vl_index x = 0 ; vl_index y ; vl_index dheight = (src_height - 1) / step + 1 ; vl_bool transp = flags & VL_TRANSPOSE ; vl_bool zeropad = (flags & VL_PAD_MASK) == VL_PAD_BY_ZERO ; /* dispatch to accelerated version */ #ifndef VL_DISABLE_SSE2 if (vl_cpu_has_sse2() && vl_get_simd_enabled()) { VL_XCAT3(_vl_imconvcol_v,SFX,_sse2) (dst,dst_stride, src,src_width,src_height,src_stride, filt,filt_begin,filt_end, step,flags) ; return ; } #endif /* let filt point to the last sample of the filter */ filt += filt_end - filt_begin ; while (x < (signed)src_width) { /* Calculate dest[x,y] = sum_p image[x,p] filt[y - p] * where supp(filt) = [filt_begin, filt_end] = [fb,fe]. * * CHUNK_A: y - fe <= p < 0 * completes VL_MAX(fe - y, 0) samples * CHUNK_B: VL_MAX(y - fe, 0) <= p < VL_MIN(y - fb, height - 1) * completes fe - VL_MAX(fb, height - y) + 1 samples * CHUNK_C: completes all samples */ T const *filti ; vl_index stop ; for (y = 0 ; y < (signed)src_height ; y += step) { T acc = 0 ; T v = 0, c ; T const* srci ; filti = filt ; stop = filt_end - y ; srci = src + x - stop * src_stride ; if (stop > 0) { if (zeropad) { v = 0 ; } else { v = *(src + x) ; } while (filti > filt - stop) { c = *filti-- ; acc += v * c ; srci += src_stride ; } } stop = filt_end - VL_MAX(filt_begin, y - (signed)src_height + 1) + 1 ; while (filti > filt - stop) { v = *srci ; c = *filti-- ; acc += v * c ; srci += src_stride ; } if (zeropad) v = 0 ; stop = filt_end - filt_begin + 1 ; while (filti > filt - stop) { c = *filti-- ; acc += v * c ; } if (transp) { *dst = acc ; dst += 1 ; } else { *dst = acc ; dst += dst_stride ; } } /* next y */ if (transp) { dst += 1 * dst_stride - dheight * 1 ; } else { dst += 1 * 1 - dheight * dst_stride ; } x += 1 ; } /* next x */ } /* VL_TYPE_FLOAT, VL_TYPE_DOUBLE */ #endif /* ---------------------------------------------------------------- */ /* Image distance transform */ /* ---------------------------------------------------------------- */ #if (FLT == VL_TYPE_FLOAT || FLT == VL_TYPE_DOUBLE) /** @fn ::vl_image_distance_transform_d(double const*,vl_size,vl_size,vl_size,vl_size,double*,vl_uindex*,double,double) ** @brief Compute the distance transform of an image ** @param image image. ** @param numColumns number of columns of the image. ** @param numRows number of rows of the image. ** @param columnStride offset from one column to the next. ** @param rowStride offset from one row to the next. ** @param distanceTransform distance transform (out). ** @param indexes nearest neighbor indexes (in/out). ** @param coeff quadratic cost coefficient (non-negative). ** @param offset quadratic cost offset. ** ** The function computes the distance transform along the first ** dimension of the image @a image. Let @f$ I(u,v) @f$ be @a image. ** Its distance transfrom @f$ D(u,v) @f$ is given by: ** ** @f[ ** u^*(u,v) = \min_{u'} I(u',v) + \mathtt{coeff} (u' - u - \mathtt{offset})^2, ** \quad D(u,v) = I(u^*(u,v),v). ** @f] ** ** Notice that @a coeff must be non negative. ** ** The function fills in the buffer @a distanceTransform with @f$ D ** @f$. This buffer must have the same size as @a image. ** ** If @a indexes is not @c NULL, it must be a matrix of the same size ** o the image. The function interprets the value of this matrix as ** indexes of the pixels, i.e @f$ \mathtt{indexes}(u,v) @f$ is the ** index of pixel @f$ (u,v) @f$. On output, the matrix @a indexes ** contains @f$ \mathtt{indexes}(u^*(u,v),v) @f$. This information ** can be used to determine for each pixel @f$ (u,v) @f$ its ** “nearest neighbor&rdquo. ** ** Notice that by swapping @a numRows and @a numColumns and @a ** columnStride and @a rowStride, the function can be made to operate ** along the other image dimension. Specifically, to compute the ** distance transform along columns and rows, call the functinon ** twice: *** ** @code ** for (i = 0 ; i < numColumns * numRows ; ++i) indexes[i] = i ; ** vl_image_distance_transform_d(image,numColumns,numRows,1,numColumns, ** distanceTransform,indexes,u_coeff,u_offset) ; ** vl_image_distance_transform_d(distanceTransform,numRows,numColumns,numColumns,1, ** distanceTransform,indexes,u_coeff,u_offset) ; ** @endcode ** ** @par Algorithm ** ** The function implements the algorithm described in: ** P. F. Felzenszwalb and D. P. Huttenlocher, Distance Transforms ** of Sampled Functions, Technical Report, Cornell University, ** 2004. ** ** Since the algorithm operates along one dimension per time, ** consider the 1D version of the problem for simplicity: ** ** @f[ ** d(y) = \min_{x} g(y;x), \quad g(y;x) = f(x) + \alpha (y - x - \beta)^2, ** \quad x,y \in \{0,1,\dots,N-1\}. ** @f] ** ** Hence the distance transform @f$ d(y) @f$ is the lower envelope of ** the family of parabolas @f$ g(y;x) @f$ indexed by @f$ x ** @f$. Notice that all parabolas have the same curvature and that ** their centers are located at @f$ x + \beta, @f$ @f$ x=0,\dots,N-1 ** @f$. The algorithm considers one parabola per time, from left to ** right, and finds the interval for which the parabola belongs to ** the lower envelope (if any). ** ** Initially, only the leftmost parabola @f$ g(y;0) @f$ has been ** considered, and its validity interval is @f$(-\infty, \infty) @f$. ** Then the second parabola @f$ g(y;1) @f$ is considered. As long as ** @f$ \alpha > 0 @f$, the two parabolas @f$ g(y;0),\ g(y;1) @f$ ** intersect at a unique point @f$ \bar y @f$. Then the first ** parabola belongs to the envelope in the interval @f$ (-\infty, ** \bar y] @f$ and the second one in the interval @f$ (\bar y, ** +\infty] @f$. When the third parabola @f$ g(y;2) @f$ is ** considered, the intersection point @f$ \hat y @f$ with the ** previously added parabola @f$ g(y;1) @f$ is found. Now two cases ** may arise: ** ** - @f$ \hat y > \bar y @f$, in which case all three parabolas ** belong to the envelope in the intervals @f$ (-\infty,\bar y], ** (\bar y, \hat y], (\hat y, +\infty] @f$. ** ** - @f$ \hat y \leq \bar y @f$, in which case the second parabola ** @f$ g(y;1) @f$ has no point beloning to the envelope, and it is ** removed. One then remains with the two parabolas @f$ g(y;0),\ ** g(y;2) @f$ and the algorithm is re-iterated. ** ** The algorithm proceeds in this fashion. Every time a new parabola ** is considered, its intersection point with the previously added ** parabola on the left is computed, and that parabola is potentially ** removed. The cost of an iteration is 1 plus the number of deleted ** parabolas. Since there are @f$ N @f$ iterations and at most @f$ N ** @f$ parabolas to delete overall, the complexity is linear, ** i.e. @f$ O(N) @f$. **/ /** @fn ::vl_image_distance_transform_f(float const*,vl_size,vl_size,vl_size,vl_size,float*,vl_uindex*,float,float) ** @see ::vl_image_distance_transform_d **/ VL_EXPORT void VL_XCAT(vl_image_distance_transform_,SFX) (T const * image, vl_size numColumns, vl_size numRows, vl_size columnStride, vl_size rowStride, T * distanceTransform, vl_uindex * indexes, T coeff, T offset) { /* Each image pixel corresponds to a parabola. The algorithm scans such parabolas from left to right, keeping track of which parabolas belong to the lower envelope and in which interval. There are NUM active parabolas, FROM stores the beginning of the interval for which a certain parabola is part of the envoelope, and WHICH store the index of the parabola (that is, the pixel x from which the parabola originated). */ vl_uindex x, y ; T * from = vl_malloc (sizeof(T) * (numColumns + 1)) ; T * base = vl_malloc (sizeof(T) * numColumns) ; vl_uindex * baseIndexes = vl_malloc (sizeof(vl_uindex) * numColumns) ; vl_uindex * which = vl_malloc (sizeof(vl_uindex) * numColumns) ; vl_uindex num = 0 ; for (y = 0 ; y < numRows ; ++y) { num = 0 ; for (x = 0 ; x < numColumns ; ++x) { T r = image[x * columnStride + y * rowStride] ; T x2 = x * x ; #if (FLT == VL_TYPE_FLOAT) T from_ = - VL_INFINITY_F ; #else T from_ = - VL_INFINITY_D ; #endif /* Add next parabola (there are NUM so far). The algorithm finds intersection INTERS with the previously added parabola. If the intersection is on the right of the "starting point" of this parabola, then the previous parabola is kept, and the new one is added to its right. Otherwise the new parabola "eats" the old one, which gets deleted and the check is repeated with the parabola added before the deleted one. */ while (num >= 1) { vl_uindex x_ = which[num - 1] ; T x2_ = x_ * x_ ; T r_ = image[x_ * columnStride + y * rowStride] ; T inters ; if (r == r_) { /* handles the case r = r_ = \pm inf */ inters = (x + x_) / 2.0 + offset ; } #if (FLT == VL_TYPE_FLOAT) else if (coeff > VL_EPSILON_F) #else else if (coeff > VL_EPSILON_D) #endif { inters = ((r - r_) + coeff * (x2 - x2_)) / (x - x_) / (2*coeff) + offset ; } else { /* If coeff is very small, the parabolas are flat (= lines). In this case the previous parabola should be deleted if the current pixel has lower score */ #if (FLT == VL_TYPE_FLOAT) inters = (r < r_) ? - VL_INFINITY_F : VL_INFINITY_F ; #else inters = (r < r_) ? - VL_INFINITY_D : VL_INFINITY_D ; #endif } if (inters <= from [num - 1]) { /* delete a previous parabola */ -- num ; } else { /* accept intersection */ from_ = inters ; break ; } } /* add a new parabola */ which[num] = x ; from[num] = from_ ; base[num] = r ; if (indexes) baseIndexes[num] = indexes[x * columnStride + y * rowStride] ; num ++ ; } /* next column */ #if (FLT == VL_TYPE_FLOAT) from[num] = VL_INFINITY_F ; #else from[num] = VL_INFINITY_D ; #endif /* fill in */ num = 0 ; for (x = 0 ; x < numColumns ; ++x) { double delta ; while (x >= from[num + 1]) ++ num ; delta = (double) x - (double) which[num] - offset ; distanceTransform[x * columnStride + y * rowStride] = base[num] + coeff * delta * delta ; if (indexes) { indexes[x * columnStride + y * rowStride] = baseIndexes[num] ; } } } /* next row */ vl_free (from) ; vl_free (which) ; vl_free (base) ; vl_free (baseIndexes) ; } /* VL_TYPE_FLOAT, VL_TYPE_DOUBLE */ #endif /* ---------------------------------------------------------------- */ /* Image convolution by a triangular kernel */ /* ---------------------------------------------------------------- */ #if (FLT == VL_TYPE_FLOAT || FLT == VL_TYPE_DOUBLE) /** @fn vl_imconvcoltri_d(double*,vl_size,double const*,vl_size,vl_size,vl_size,vl_size,vl_size,int unsigned) ** @brief Convolve an image along the columns with a triangular kernel ** @param dest destination image. ** @param destStride destination image stride. ** @param image image to convolve. ** @param imageWidth width of the image. ** @param imageHeight height of the image. ** @param imageStride width of the image including padding. ** @param filterSize size of the triangular filter. ** @param step sub-sampling step. ** @param flags operation modes. ** ** The function convolves the columns of the image @a image with the ** triangular kernel ** ** @f[ ** k(t) = \frac{1}{\Delta^2} \max\{ \Delta - |t|, 0 \}, ** \quad t \in \mathbb{Z} ** @f] ** ** The paramter @f$ \Delta @f$, equal to the function argument @a ** filterSize, controls the width of the kernel. Notice that the ** support of @f$ k(x) @f$ as a continuous function of @f$ x @f$ is ** the open interval @f$ (-\Delta,\Delta) @f$, which has length @f$ ** 2\Delta @f$. However, @f$ k(x) @f$ restricted to the ingeter ** domain @f$ x \in \mathcal{Z} @f$ has support @f$ \{ -\Delta + 1, ** \Delta +2, \dots, \Delta-1 \} @f$, which counts @f$ 2 \Delta - 1 ** @f$ elements only. In particular, the discrete kernel is symmetric ** about the origin for all values of @f$ \Delta @f$. ** ** The normalization factor @f$ 1 / \Delta^2 @f$ guaratnees that the ** filter is normalized to one, i.e.: ** ** @f[ ** \sum_{t=-\infty}^{+\infty} k(t) = 1 ** @f] ** ** @par Algorithm ** ** The function exploits the fact that convolution by a triangular ** kernel can be expressed as the repeated convolution by a ** rectangular kernel, and that the latter can be performed in time ** indepenedent on the fiter width by using an integral-image type ** trick. Overall, the algorithm complexity is independent on the ** parameter @a filterSize and linear in the nubmer of image pixels. ** ** @see ::vl_imconvcol_d for details on the meaning of the other parameters. **/ /** @fn vl_imconvcoltri_f(float*,vl_size,float const*,vl_size,vl_size,vl_size,vl_size,vl_size,int unsigned) ** @brief Convolve an image along the columns with a triangular kernel ** @see ::vl_imconvcoltri_d() **/ VL_EXPORT void VL_XCAT(vl_imconvcoltri_, SFX) (T * dest, vl_size destStride, T const * image, vl_size imageWidth, vl_size imageHeight, vl_size imageStride, vl_size filterSize, vl_size step, unsigned int flags) { vl_index x, y, dheight ; vl_bool transp = flags & VL_TRANSPOSE ; vl_bool zeropad = (flags & VL_PAD_MASK) == VL_PAD_BY_ZERO ; T scale = (T) (1.0 / ((double)filterSize * (double)filterSize)) ; T * buffer = vl_malloc (sizeof(T) * (imageHeight + filterSize)) ; buffer += filterSize ; if (imageHeight == 0) { return ; } x = 0 ; dheight = (imageHeight - 1) / step + 1 ; while (x < (signed)imageWidth) { T const * imagei ; imagei = image + x + imageStride * (imageHeight - 1) ; /* We decompose the convolution by a triangluar signal as the convolution * by two rectangular signals. The rectangular convolutions are computed * quickly by computing the integral signals. Each rectangular convolution * introduces a delay, which is compensated by convolving each in opposite * directions. */ /* integrate backward the column */ buffer[imageHeight - 1] = *imagei ; for (y = (signed)imageHeight - 2 ; y >= 0 ; --y) { imagei -= imageStride ; buffer[y] = buffer[y + 1] + *imagei ; } if (zeropad) { for ( ; y >= - (signed)filterSize ; --y) { buffer[y] = buffer[y + 1] ; } } else { for ( ; y >= - (signed)filterSize ; --y) { buffer[y] = buffer[y + 1] + *imagei ; } } /* compute the filter forward */ for (y = - (signed)filterSize ; y < (signed)imageHeight - (signed)filterSize ; ++y) { buffer[y] = buffer[y] - buffer[y + filterSize] ; } if (! zeropad) { for (y = (signed)imageHeight - (signed)filterSize ; y < (signed)imageHeight ; ++y) { buffer[y] = buffer[y] - buffer[imageHeight - 1] * ((signed)imageHeight - (signed)filterSize - y) ; } } /* integrate forward the column */ for (y = - (signed)filterSize + 1 ; y < (signed)imageHeight ; ++y) { buffer[y] += buffer[y - 1] ; } /* compute the filter backward */ { vl_size stride = transp ? 1 : destStride ; dest += dheight * stride ; for (y = step * (dheight - 1) ; y >= 0 ; y -= step) { dest -= stride ; *dest = scale * (buffer[y] - buffer[y - (signed)filterSize]) ; } dest += transp ? destStride : 1 ; } x += 1 ; } /* next x */ vl_free (buffer - filterSize) ; } /* VL_TYPE_FLOAT, VL_TYPE_DOUBLE */ #endif /* ---------------------------------------------------------------- */ /* Gaussian Smoothing */ /* ---------------------------------------------------------------- */ #if (FLT == VL_TYPE_FLOAT || FLT == VL_TYPE_DOUBLE) /** @fn vl_imsmooth_d(double*,vl_size,double const*,vl_size,vl_size,vl_size,double,double) ** @brief Smooth an image with a Gaussian filter ** @param smoothed ** @param smoothedStride ** @param image ** @param width ** @param height ** @param stride ** @param sigmax ** @param sigmay **/ /** @fn vl_imsmooth_f(float*,vl_size,float const*,vl_size,vl_size,vl_size,double,double) ** @brief Smooth an image with a Gaussian filter ** @see ::vl_imsmooth_d **/ static T* VL_XCAT(_vl_new_gaussian_fitler_,SFX)(vl_size *size, double sigma) { T* filter ; T mass = (T)1.0 ; vl_index i ; vl_size width = vl_ceil_d(sigma * 3.0) ; *size = 2 * width + 1 ; assert(size) ; filter = vl_malloc((*size) * sizeof(T)) ; filter[width] = 1.0 ; for (i = 1 ; i <= (signed)width ; ++i) { double x = (double)i / sigma ; double g = exp(-0.5 * x * x) ; mass += g + g ; filter[width-i] = g ; filter[width+i] = g ; } for (i = 0 ; i < (signed)(*size) ; ++i) {filter[i] /= mass ;} return filter ; } VL_EXPORT void VL_XCAT(vl_imsmooth_, SFX) (T * smoothed, vl_size smoothedStride, T const *image, vl_size width, vl_size height, vl_size stride, double sigmax, double sigmay) { T *filterx, *filtery, *buffer ; vl_size sizex, sizey ; filterx = VL_XCAT(_vl_new_gaussian_fitler_,SFX)(&sizex,sigmax) ; if (sigmax == sigmay) { filtery = filterx ; sizey = sizex ; } else { filtery = VL_XCAT(_vl_new_gaussian_fitler_,SFX)(&sizey,sigmay) ; } buffer = vl_malloc(width*height*sizeof(T)) ; VL_XCAT(vl_imconvcol_v,SFX) (buffer, height, image, width, height, stride, filtery, -((signed)sizey-1)/2, ((signed)sizey-1)/2, 1, VL_PAD_BY_CONTINUITY | VL_TRANSPOSE) ; VL_XCAT(vl_imconvcol_v,SFX) (smoothed, smoothedStride, buffer, height, width, height, filterx, -((signed)sizex-1)/2, ((signed)sizex-1)/2, 1, VL_PAD_BY_CONTINUITY | VL_TRANSPOSE) ; vl_free(buffer) ; vl_free(filterx) ; if (sigmax != sigmay) { vl_free(filtery) ; } } /* VL_TYPE_FLOAT, VL_TYPE_DOUBLE */ #endif /* ---------------------------------------------------------------- */ /* Image Gradient */ /* ---------------------------------------------------------------- */ #if (FLT == VL_TYPE_FLOAT || FLT == VL_TYPE_DOUBLE) /** @fn vl_imgradient_d(double*,double*,vl_size,vl_size,double*,vl_size,vl_size,vl_size) ** @brief Compute image gradient ** @param xGradient Pointer to amplitude gradient plane ** @param yGradient Pointer to angle gradient plane ** @param gradWidthStride Width of the gradient plane including padding ** @param gradHeightStride Height of the gradient plane including padding ** @param image Pointer to the source image ** @param imageWidth Source image width ** @param imageHeight Source image height ** @param imageStride Width of the image including padding. ** ** This functions computes the amplitudes and angles of input image gradient. ** ** Gradient is computed simple by gradient kernel \f$ (-1 ~ 1) \f$, ** \f$ (-1 ~ 1)^T \f$ for border pixels and with sobel filter kernel ** \f$ (-0.5 ~ 0 ~ 0.5) \f$, \f$ (-0.5 ~ 0 ~ 0.5)^T \f$ otherwise on the input ** image @a image yielding x-gradient \f$ dx \f$, stored in @a xGradient and ** y-gradient \f$ dy \f$, stored in @a yGradient, respectively. ** ** This function also allows to process only part of the input image ** defining the @a imageStride as original image width and @a width as ** width of the sub-image. ** ** Also it allows to easily align the output data by definition ** of the @a gradWidthStride and @a gradHeightStride . **/ /** @fn vl_imgradient_f(float*,float*,vl_size,vl_size,float*,vl_size,vl_size,vl_size) ** @brief Compute image gradient ** @see ::vl_imgradient_d **/ VL_EXPORT void VL_XCAT(vl_imgradient_, SFX) (T * xGradient, T * yGradient, vl_size gradWidthStride, vl_size gradHeightStride, T const * image, vl_size imageWidth, vl_size imageHeight, vl_size imageStride) { /* Shortcuts */ vl_index const xo = 1 ; vl_index const yo = imageStride ; vl_size const w = imageWidth; vl_size const h = imageHeight; T const *src, *end ; T *pgrad_x, *pgrad_y; vl_size y; src = image ; pgrad_x = xGradient ; pgrad_y = yGradient ; /* first pixel of the first row */ *pgrad_x = src[+xo] - src[0] ; pgrad_x += gradWidthStride; *pgrad_y = src[+yo] - src[0] ; pgrad_y += gradWidthStride; src++; /* middle pixels of the first row */ end = (src - 1) + w - 1 ; while (src < end) { *pgrad_x = 0.5 * (src[+xo] - src[-xo]) ; pgrad_x += gradWidthStride; *pgrad_y = src[+yo] - src[0] ; pgrad_y += gradWidthStride; src++; } /* last pixel of the first row */ *pgrad_x = src[0] - src[-xo] ; pgrad_x += gradWidthStride; *pgrad_y = src[+yo] - src[0] ; pgrad_y += gradWidthStride; src++; xGradient += gradHeightStride; pgrad_x = xGradient; yGradient += gradHeightStride; pgrad_y = yGradient; image += yo; src = image; for (y = 1 ; y < h -1 ; ++y) { /* first pixel of the middle rows */ *pgrad_x = src[+xo] - src[0] ; pgrad_x += gradWidthStride; *pgrad_y = 0.5 * (src[+yo] - src[-yo]) ; pgrad_y += gradWidthStride; src++; /* middle pixels of the middle rows */ end = (src - 1) + w - 1 ; while (src < end) { *pgrad_x = 0.5 * (src[+xo] - src[-xo]) ; pgrad_x += gradWidthStride; *pgrad_y = 0.5 * (src[+yo] - src[-yo]) ; pgrad_y += gradWidthStride; src++; } /* last pixel of the middle row */ *pgrad_x = src[0] - src[-xo] ; pgrad_x += gradWidthStride; *pgrad_y = 0.5 * (src[+yo] - src[-yo]) ; pgrad_y += gradWidthStride; src++; xGradient += gradHeightStride; pgrad_x = xGradient; yGradient += gradHeightStride; pgrad_y = yGradient; image += yo; src = image; } /* first pixel of the last row */ *pgrad_x = src[+xo] - src[0] ; pgrad_x += gradWidthStride; *pgrad_y = src[ 0] - src[-yo] ; pgrad_y += gradWidthStride; src++; /* middle pixels of the last row */ end = (src - 1) + w - 1 ; while (src < end) { *pgrad_x = 0.5 * (src[+xo] - src[-xo]) ; pgrad_x += gradWidthStride; *pgrad_y = src[0] - src[-yo] ; pgrad_y += gradWidthStride; src++; } /* last pixel of the last row */ *pgrad_x = src[0] - src[-xo] ; *pgrad_y = src[0] - src[-yo] ; } /* VL_TYPE_FLOAT, VL_TYPE_DOUBLE */ #endif /** @fn vl_imgradient_polar_d(double*,double*,vl_size,vl_size,double const*,vl_size,vl_size,vl_size) ** @brief Compute gradient mangitudes and directions of an image. ** @param amplitudeGradient Pointer to amplitude gradient plane ** @param angleGradient Pointer to angle gradient plane ** @param gradWidthStride Width of the gradient plane including padding ** @param gradHeightStride Height of the gradient plane including padding ** @param image Pointer to the source image ** @param imageWidth Source image width ** @param imageHeight Source image height ** @param imageStride Width of the source image including padding. ** ** This functions computes the amplitudes and angles of input image gradient. ** ** Gradient is computed simple by gradient kernel \f$ (-1 ~ 1) \f$, ** \f$ (-1 ~ 1)^T \f$ for border pixels and with sobel filter kernel ** \f$ (-0.5 ~ 0 ~ 0.5) \f$, \f$ (-0.5 ~ 0 ~ 0.5)^T \f$ otherwise on ** the input image @a image yielding x-gradient \f$ dx \f$, stored in ** @a xGradient and y-gradient \f$ dy \f$, stored in @a yGradient, ** respectively. ** ** The amplitude of the gradient, stored in plane @a ** amplitudeGradient, is then calculated as \f$ \sqrt(dx^2+dy^2) \f$ ** and the angle of the gradient, stored in @a angleGradient is \f$ ** atan(\frac{dy}{dx}) \f$ normalised into interval 0 and @f$ 2\pi ** @f$. ** ** This function also allows to process only part of the input image ** defining the @a imageStride as original image width and @a width ** as width of the sub-image. ** ** Also it allows to easily align the output data by definition ** of the @a gradWidthStride and @a gradHeightStride . **/ /** @fn vl_imgradient_polar_f(float*,float*,vl_size,vl_size,float const*,vl_size,vl_size,vl_size) ** @see ::vl_imgradient_polar_d **/ #if (FLT == VL_TYPE_FLOAT || FLT == VL_TYPE_DOUBLE) VL_EXPORT void VL_XCAT(vl_imgradient_polar_, SFX) (T * gradientModulus, T * gradientAngle, vl_size gradientHorizontalStride, vl_size gradHeightStride, T const* image, vl_size imageWidth, vl_size imageHeight, vl_size imageStride) { /* Shortcuts */ vl_index const xo = 1 ; vl_index const yo = imageStride ; vl_size const w = imageWidth; vl_size const h = imageHeight; T const *src, *end; T *pgrad_angl, *pgrad_ampl; T gx, gy ; vl_size y; #define SAVE_BACK \ *pgrad_ampl = vl_fast_sqrt_f (gx*gx + gy*gy) ; \ pgrad_ampl += gradientHorizontalStride ; \ *pgrad_angl = vl_mod_2pi_f (vl_fast_atan2_f (gy, gx) + 2*VL_PI) ; \ pgrad_angl += gradientHorizontalStride ; \ ++src ; \ src = image ; pgrad_angl = gradientAngle ; pgrad_ampl = gradientModulus ; /* first pixel of the first row */ gx = src[+xo] - src[0] ; gy = src[+yo] - src[0] ; SAVE_BACK ; /* middle pixels of the first row */ end = (src - 1) + w - 1 ; while (src < end) { gx = 0.5 * (src[+xo] - src[-xo]) ; gy = src[+yo] - src[0] ; SAVE_BACK ; } /* last pixel of the first row */ gx = src[0] - src[-xo] ; gy = src[+yo] - src[0] ; SAVE_BACK ; gradientModulus += gradHeightStride; pgrad_ampl = gradientModulus; gradientAngle += gradHeightStride; pgrad_angl = gradientAngle; image += imageStride; src = image; for (y = 1 ; y < h -1 ; ++y) { /* first pixel of the middle rows */ gx = src[+xo] - src[0] ; gy = 0.5 * (src[+yo] - src[-yo]) ; SAVE_BACK ; /* middle pixels of the middle rows */ end = (src - 1) + w - 1 ; while (src < end) { gx = 0.5 * (src[+xo] - src[-xo]) ; gy = 0.5 * (src[+yo] - src[-yo]) ; SAVE_BACK ; } /* last pixel of the middle row */ gx = src[0] - src[-xo] ; gy = 0.5 * (src[+yo] - src[-yo]) ; SAVE_BACK ; gradientModulus += gradHeightStride; pgrad_ampl = gradientModulus; gradientAngle += gradHeightStride; pgrad_angl = gradientAngle; image += imageStride; src = image; } /* first pixel of the last row */ gx = src[+xo] - src[0] ; gy = src[ 0] - src[-yo] ; SAVE_BACK ; /* middle pixels of the last row */ end = (src - 1) + w - 1 ; while (src < end) { gx = 0.5 * (src[+xo] - src[-xo]) ; gy = src[0] - src[-yo] ; SAVE_BACK ; } /* last pixel of the last row */ gx = src[0] - src[-xo] ; gy = src[0] - src[-yo] ; SAVE_BACK ; } /* VL_TYPE_FLOAT, VL_TYPE_DOUBLE */ #endif /* ---------------------------------------------------------------- */ /* Integral Image */ /* ---------------------------------------------------------------- */ /** @fn vl_imintegral_d(double*,vl_size,double const*,vl_size,vl_size,vl_size) ** @brief Compute integral image ** ** @param integral integral image. ** @param integralStride integral image stride. ** @param image source image. ** @param imageWidth source image width. ** @param imageHeight source image height. ** @param imageStride source image stride. ** ** Let @f$ I(x,y), (x,y) \in [0, W-1] \times [0, H-1] @f$. The ** function computes the integral image @f$ J(x,y) @f$ of @f$ I(x,g) ** @f$: ** ** @f[ ** J(x,y) = \sum_{x'=0}^{x} \sum_{y'=0}^{y} I(x',y') ** @f] ** ** The integral image @f$ J(x,y) @f$ can be used to compute quickly ** the integral of of @f$ I(x,y) @f$ in a rectangular region @f$ R = ** [x',x'']\times[y',y''] @f$: ** ** @f[ ** \sum_{(x,y)\in[x',x'']\times[y',y'']} I(x,y) = ** (J(x'',y'') - J(x'-1, y'')) - (J(x'',y'-1) - J(x'-1,y'-1)). ** @f] ** ** Note that the order of operations is important when the integral image ** has an unsigned data type (e.g. ::vl_uint32). The formula ** is easily derived as follows: ** ** @f{eqnarray*} ** \sum_{(x,y)\in R} I(x,y) ** &=& \sum_{x=x'}^{x''} \sum_{y=y'}^{y''} I(x,y)\\ ** &=& \sum_{x=0}^{x''} \sum_{y=y'}^{y''} I(x,y) ** - \sum_{x=0}^{x'-1} \sum_{y=y'}^{y''} I(x,y)\\ ** &=& \sum_{x=0}^{x''} \sum_{y=0}^{y''} I(x,y) ** - \sum_{x=0}^{x''} \sum_{y=0}^{y'-1} I(x,y) ** - \sum_{x=0}^{x'-1} \sum_{y=0}^{y''} I(x,y) ** + \sum_{x=0}^{x'-1} \sum_{y=0}^{y'-1} I(x,y)\\ ** &=& J(x'',y'') - J(x'-1,y'') - J(x'',y'-1) + J(x'-1,y'-1). ** @f} **/ /** @fn vl_imintegral_f(float*,vl_size,float const*,vl_size,vl_size,vl_size) ** @brief Compute integral image ** @see ::vl_imintegral_d. **/ /** @fn vl_imintegral_ui32(vl_uint32*,vl_size,vl_uint32 const*,vl_size,vl_size,vl_size) ** @brief Compute integral image ** @see ::vl_imintegral_d. **/ /** @fn vl_imintegral_i32(vl_int32*,vl_size,vl_int32 const*,vl_size,vl_size,vl_size) ** @brief Compute integral image ** @see ::vl_imintegral_d. **/ VL_EXPORT void VL_XCAT(vl_imintegral_, SFX) (T * integral, vl_size integralStride, T const * image, vl_size imageWidth, vl_size imageHeight, vl_size imageStride) { vl_uindex x, y ; T temp = 0 ; if (imageHeight > 0) { for (x = 0 ; x < imageWidth ; ++ x) { temp += *image++ ; *integral++ = temp ; } } for (y = 1 ; y < imageHeight ; ++ y) { T * integralPrev ; integral += integralStride - imageWidth ; image += imageStride - imageWidth ; integralPrev = integral - integralStride ; temp = 0 ; for (x = 0 ; x < imageWidth ; ++ x) { temp += *image++ ; *integral++ = *integralPrev++ + temp ; } } } /* endif VL_IMOPV_INSTANTIATING */ #undef FLT #undef VL_IMOPV_INSTANTIATING #endif vlfeat/vl/getopt_long.c0000644000175000017500000002173412237004736014066 0ustar dimadima/** @file getopt_long.c ** @brief getopt_long - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @file getopt_long.h @brief getopt_long @author Andrea Vedaldi This is a drop-in replacament of GNU getopt_long meant to be used on platforms that do not support such functionality. **/ #include #include #include #include "generic.h" #include "getopt_long.h" int opterr = 1 ; int optind = 1 ; int optopt ; char * optarg ; int optreset ; #define BADCH '?' #define BADARG ':' #define EEND -1 #define EMSG "" /** @brief Parse long options (BSD style) ** @param argc number of arguments. ** @param argv pointer to the vector of arguments. ** @param optstring list of abbreviated options ** @param longopts list of long options. ** @param longindex index of current option in @a longopts. ** @return the code of the next option. ** ** This function extract long and short options from the argument ** list @a argv of @a argc entries. ** ** A short options sequence is introduced by a single dash character ** @c -. Each short option is described by a single character in the ** string @a optstring, possibly followed by a @c : character to ** denote a (mandatory) argument of the short option. A short option ** with an argument cannot appear in the middle of a short option ** sequence, but only at the end. ** ** A long option is introduced by a double dash @c --. Each long ** option is described by an instance of the ::option structure in ** the @a longopts table (the last entry must be filled with zeroes ** to denote the end). ** ** Illegal options and missing arguments cause the function to skip ** the option and return '?'. If ::opterr is @c true (default), the ** function prints an error message to @a stderr. Finally, if @a ** optstring has a leading @c :, then error messages are suppressed ** and a missing argument causes @a : to be returned. ** ** @remark The function is currently not thread safe. **/ VL_EXPORT int getopt_long(int argc, char *const argv[], const char *optstring, const struct option * longopts, int *longindex) { static char *place = EMSG; /* option letter processing */ static int optbegin = 0 ; static int optend = 0 ; char *oli; /* option letter list index */ int has_colon = 0 ; int ret_val = 0 ; /* A semicolon at the beginning of optstring has a special meaning. If we find one, we annote and remove it. */ has_colon = optstring && optstring[0] == ':' ; if (has_colon) ++ optstring ; /* Here we are either processing a short option sequence or we start processing a new option. This is indicated by optreset. */ if (optreset || *place == '\0') { /* --------------------------------------------------------------- * Look for next short/long option * ------------------------------------------------------------ */ optreset = 0 ; /* no more arguments ? */ if (optind >= argc) { place = EMSG ; return -1 ; } /* next argument that may hold an option */ optbegin = optind ; /* --------------------------------------------------------------- * Look for an option to parse * ------------------------------------------------------------ */ parse_option_at_optbegin : /* place points to the candidate option */ place = argv [optbegin] ; /* an option is introduced by '-' */ if (place [0] != '-') { /* this argument is not an option: try next argument */ ++ optbegin ; if (optbegin >= argc) { /* no more arguments to look for options */ place = EMSG ; return -1 ; } goto parse_option_at_optbegin ; } /* consume leading `-' */ ++ place ; /* assume the option is composed of one argument only */ optend = optbegin + 1 ; /* assume no argument */ optarg = 0 ; /* --------------------------------------------------------------- * option `--' * ------------------------------------------------------------ */ /* this special option (void long option) ends the option processing */ if (place[0] && place[0] == '-' && place[1] == '\0') { optind = optend ; place = EMSG ; ret_val = -1 ; goto done_option ; } /* --------------------------------------------------------------- * long option * ------------------------------------------------------------ */ if (place[0] && place[0] == '-' && place[1] ) { size_t namelen ; int i ; /* consume second `-' */ ++ place ; /* count characters before `=' */ namelen = strcspn(place, "=") ; /* scan longopts for this option */ for (i = 0 ; longopts[i].name != NULL ; ++ i) { if (strlen ( longopts[i].name) == namelen && strncmp (place, longopts[i].name, namelen) == 0 ) { /* save back long option index */ if (longindex) *longindex = i ; /* process long option argument */ if (longopts[i].has_arg == required_argument || longopts[i].has_arg == optional_argument) { /* --option=value style */ if (place[namelen] == '=') { optarg = place + namelen + 1 ; } /* --option value style (only required_argument) */ else if (longopts[i].has_arg == required_argument) { /* missing argument ? */ if (optbegin >= argc - 1) { if (! has_colon && opterr) fprintf(stderr, "%s: option requires an argument -- %s\n", argv[0], place); place = EMSG ; ret_val = has_colon ? BADARG : BADCH ; goto done_option ; } optarg = argv [optend] ; ++ optend ; } } /* determine return value */ if (longopts[i].flag == NULL) { ret_val = longopts[i].val ; } else { *longopts[i].flag = longopts[i].val; ret_val = 0 ; } /* mark sequence closed */ place = EMSG ; goto done_option ; } /* if match */ } /* scan longoptions */ /* no matching option found */ if (! has_colon && opterr) fprintf(stderr, "%s: illegal option -- %s\n", argv[0], place) ; place = EMSG ; ret_val = BADCH ; goto done_option ; } } /* end new option */ /* ----------------------------------------------------------------- * Finish short option sequence * -------------------------------------------------------------- */ optopt = (int) *place++ ; /* search charcater in option list */ oli = strchr(optstring, optopt); /* short option not found */ if (!oli) { if (! has_colon && opterr) fprintf(stderr, "%s: illegal option -- %c\n", argv[0], optopt); if (*place) { /* more short options in the list */ return BADCH ; } else { /* error occured as last option in the list */ place = EMSG ; ret_val = BADCH ; goto done_option ; } } /* end short option not found */ if (oli[1] != ':') { /* short option with no argument */ if (*place) { /* more short options in the list */ return optopt ; } else { /* last option in the list */ place = EMSG ; ret_val = optopt ; goto done_option ; } } else { /* short option with argument */ /* -ovalue style */ if (*place) { optarg = place ; place = EMSG ; ret_val = optopt ; goto done_option ; } /* -o value style: missing argument */ else if (optbegin >= argc - 1) { if (! has_colon && opterr) fprintf(stderr, "%s: option requires an argument -- %c\n", argv[0], optopt); place = EMSG ; ret_val = has_colon ? BADARG : BADCH ; goto done_option ; } /* -o value style: process argument */ optarg = argv [optend] ; ++ optend ; place = EMSG ; ret_val = optopt ; goto done_option ; } /* short with argument */ done_option : { int pos = optend - optbegin ; /* n of circular shifts */ int c = pos ; while (c --) { int i ; char *tmp = argv [optend - 1] ; for (i = optend - 1 ; i > optind ; -- i) { ((char**)argv) [i] = argv [i-1] ; } ((char**)argv) [optind] = tmp ; } optind += pos ; } return ret_val ; } vlfeat/vl/vlad.c0000644000175000017500000002425112237004745012470 0ustar dimadima/** @file vlad.c ** @brief VLAD - Declaration ** @author David Novotny ** @author Andrea Vedaldi **/ /* Copyright (C) 2013 David Novotny and Andera Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @page vlad Vector of Locally Aggregated Descriptors (VLAD) encoding @author David Novotny @author Andrea Vedaldi @ref vlad.h implements the *Vector of Linearly Aggregated Descriptors* (VLAD) image representation @cite{jegou10aggregating} @cite{arandjelovic13all-about}. @ref vlad-starting demonstreates how to use the C API to compute the VLAD representation of an image. For further details on the VLAD image representation refer to: - @subpage vlad-fundamentals - VLAD definition and computation. @section vlad-starting Getting started with VLAD The VLAD encoding of a set of features is obtained by using the function ::vl_vlad_encode. The function can be applied to both @c float or @c double data types. ::vl_vlad_encode requires a visual dictionary, for example obtained by using @ref kmeans. Furthermore, the assignments of features to dictionary elements must be pre-computed, for example by using @ref kdtree. In the following example code, the vocabulary is first created using the KMeans clustering, then the points, that are to be encoded are assigned to its corresponding nearest vocabulary words, after that the original vlad encoding routine without any normalization option takes place. At the end of the process the encoding is stored in the @c enc variable. @code vl_uint32 * indexes; float * assignments; float * enc int i; // create a KMeans object and run clustering to get vocabulary words (centers) kmeans = vl_kmeans_new (VLDistanceL2, VL_TYPE_FLOAT) ; vl_kmeans_cluster (kmeans, data, dimension, numData, numCenters) ; // find nearest cliuster centers for the data that should be encoded indexes = vl_malloc(sizeof(vl_uint32) * numDataToEncode); vl_kmeans_quantize(kmeans,indexes,dataToEncode,numDataToEncode); // convert indexes array to assignments array, // which can be processed by vl_vlad_encode assignments = vl_malloc(sizeof(float) * numDataToEncode * numCenters); memset(assignments, 0, sizeof(float) * numDataToEncode * numCenters); for(i = 0; i < numDataToEncode; i++) { assignments[i + numDataToEncode * indexes[i]] = 1.; } // allocate space for vlad encoding enc = vl_malloc(sizeof(TYPE) * dimension * numCenters); // do the encoding job vl_vlad_encode (enc, VL_F_TYPE, vl_kmeans_get_centers(kmeans), dimension, numCenters, data, numData, assignments, 0) ; @endcode Various @ref vlad-normalization normalizations can be applied to the VLAD vectors. These are controlled by the parameter @a flag of ::vl_vlad_encode. @page vlad-fundamentals VLAD fundamentals @tableofcontents This page describes the *Vector of Locally Aggregated Descriptors* (VLAD) image encoding of @cite{jegou10aggregating}. See @ref vlad for an overview of the C API. VLAD is a *feature encoding and pooling* method, similar to @ref fisher "Fisher vectors". VLAD encodes a set of local feature descriptors $I=(\bx_1,\dots,\bx_n)$ extracted from an image using a dictionary built using a clustering method such as @ref gmm or @ref kmeans. Let $q_{ik}$ be the strength of the association of data vector $\bx_i$ to cluster $\mu_k$, such that $q_{ik} \geq 0$ and $\sum_{k=1}^K q_{ik} = 1$. The association may be either soft (e.g. obtained as the posterior probabilities of the GMM clusters) or hard (e.g. obtained by vector quantization with K-means). $\mu_k$ are the cluster *means*, vectors of the same dimension as the data $\bx_i$. VLAD encodes feature $\bx$ by considering the *residuals* \[ \bv_k = \sum_{i=1}^{N} q_{ik} (\bx_{i} - \mu_k). \] The residulas are stacked together to obtain the vector \[ \hat\Phi(I) = \begin{bmatrix} \vdots \\ \bv_k \\ \vdots \end{bmatrix} \] Before the VLAD encoding is used it is usually normalized, as explained @ref vlad-normalization next. @section vlad-normalization VLAD normalization VLFeat VLAD implementation supports a number of different normalization strategies. These are optionally applied in this order: - **Component-wise mass normalization.** Each vector $\bv_k$ is divided by the total mass of features associated to it $\sum_{i=1}^N q_{ik}$. - **Square-rooting.** The function $\sign(z)\sqrt{|z|}$ is applied to all scalar components of the VLAD descriptor. - **Component-wise $l^2$ normalization.** The vectors $\bv_k$ are divided by their norm $\|\bv_k\|_2$. - **Global $l^2$ normalization.** The VLAD descriptor $\hat\Phi(I)$ is divided by its norm $\|\hat\Phi(I)\|_2$. */ #include "vlad.h" #include "mathop.h" #include #include #include #if defined(_OPENMP) #include #endif /* ================================================================ */ #ifdef VL_VLAD_INSTANTIATING static void VL_XCAT(_vl_vlad_encode_, SFX) (TYPE * enc, TYPE const * means, vl_size dimension, vl_size numClusters, TYPE const * data, vl_size numData, TYPE const * assignments, int flags) { vl_uindex dim ; vl_index i_cl, i_d ; memset(enc, 0, sizeof(TYPE) * dimension * numClusters) ; #if defined(_OPENMP) #pragma omp parallel for default(shared) private(i_cl,i_d,dim) num_threads(vl_get_max_threads()) #endif for (i_cl = 0; i_cl < (signed)numClusters; i_cl++) { double clusterMass = 0 ; for (i_d = 0; i_d < (signed)numData; i_d++) { if (assignments[i_d*numClusters + i_cl] > 0) { double q = assignments[i_d*numClusters+i_cl] ; clusterMass += q ; for(dim = 0; dim < dimension; dim++) { enc [i_cl * dimension + dim] += q * data [i_d * dimension + dim] ; } } } if (clusterMass > 0) { if (flags & VL_VLAD_FLAG_NORMALIZE_MASS) { for(dim = 0; dim < dimension; dim++) { enc[i_cl*dimension + dim] /= clusterMass ; enc[i_cl*dimension + dim] -= means[i_cl*dimension+dim]; } } else { for(dim = 0; dim < dimension; dim++) { enc[i_cl*dimension + dim] -= clusterMass * means[i_cl*dimension+dim]; } } } if (flags & VL_VLAD_FLAG_SQUARE_ROOT) { for(dim = 0; dim < dimension; dim++) { TYPE z = enc[i_cl*dimension + dim] ; if (z >= 0) { enc[i_cl*dimension + dim] = VL_XCAT(vl_sqrt_, SFX)(z) ; } else { enc[i_cl*dimension + dim] = - VL_XCAT(vl_sqrt_, SFX)(- z) ; } } } if (flags & VL_VLAD_FLAG_NORMALIZE_COMPONENTS) { TYPE n = 0 ; dim = 0 ; for(dim = 0; dim < dimension; dim++) { TYPE z = enc[i_cl*dimension + dim] ; n += z * z ; } n = VL_XCAT(vl_sqrt_, SFX)(n) ; n = VL_MAX(n, 1e-12) ; for(dim = 0; dim < dimension; dim++) { enc[i_cl*dimension + dim] /= n ; } } } if (! (flags & VL_VLAD_FLAG_UNNORMALIZED)) { TYPE n = 0 ; for(dim = 0 ; dim < dimension * numClusters ; dim++) { TYPE z = enc [dim] ; n += z * z ; } n = VL_XCAT(vl_sqrt_, SFX)(n) ; n = VL_MAX(n, 1e-12) ; for(dim = 0 ; dim < dimension * numClusters ; dim++) { enc[dim] /= n ; } } } /* VL_FISHER_INSTANTIATING */ #else #ifndef __DOXYGEN__ #define FLT VL_TYPE_FLOAT #define TYPE float #define SFX f #define VL_VLAD_INSTANTIATING #include "vlad.c" #define FLT VL_TYPE_DOUBLE #define TYPE double #define SFX d #define VL_VLAD_INSTANTIATING #include "vlad.c" #endif /* VL_VLAD_INSTANTIATING */ #endif /* ================================================================ */ #ifndef VL_VLAD_INSTANTIATING /** @brief VLAD encoding of a set of vectors. ** @param enc output VLAD encoding (out). ** @param dataType the type of the input data (::VL_TYPE_DOUBLE or ::VL_TYPE_FLOAT). ** @param numData number of data vectors to encode. ** @param means cluster means. ** @param numClusters number of clusters. ** @param data the data vectors to encode. ** @param dimension dimensionality of the data. ** @param assignments data to cluster soft assignments. ** @param flags options. ** ** @a enc is the VLAD vector of size @a numClusters by ** @a dimension. @a means is a matrix with @a numClusters columns and ** @a dimension rows. @a data is the matrix of vectors to be encoded, ** with @a dimension rows and @a numData columns. @a assignments is a ** matrix with @a numClusters rows and @a numData columns. ** All the matrices should be stored in a row major order. ** ** @a flag allows controlling further options: ** ::VL_VLAD_FLAG_NORMALIZE_COMPONENTS, ::VL_VLAD_FLAG_SQUARE_ROOT, ** ::VL_VLAD_FLAG_UNNORMALIZED, and ::VL_VLAD_FLAG_NORMALIZE_MASS. ** ** @sa @ref vlad **/ void vl_vlad_encode (void * enc, vl_type dataType, void const * means, vl_size dimension, vl_size numClusters, void const * data, vl_size numData, void const * assignments, int flags) { switch(dataType) { case VL_TYPE_FLOAT: _vl_vlad_encode_f ((float *) enc, (float const *) means, dimension, numClusters, (float const *) data, numData, (float const *) assignments, flags) ; break; case VL_TYPE_DOUBLE: _vl_vlad_encode_d ((double *) enc, (double const *) means, dimension, numClusters, (double const *) data, numData, (double const *) assignments, flags) ; break; default: abort(); } } /* ! VL_VLAD_INSTANTIATING */ #endif #undef SFX #undef TYPE #undef FLT #undef VL_VLAD_INSTANTIATING vlfeat/vl/kmeans.h0000644000175000017500000002664512237004745013036 0ustar dimadima/** @file kmeans.h ** @brief K-means (@ref kmeans) ** @author Andrea Vedaldi ** @author David Novotny **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. Copyright (C) 2013 Andrea Vedaldi and David Novotny. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_KMEANS_H #define VL_KMEANS_H #include "generic.h" #include "random.h" #include "mathop.h" #include "kdtree.h" /* ---------------------------------------------------------------- */ /** @brief K-means algorithms */ typedef enum _VlKMeansAlgorithm { VlKMeansLloyd, /**< Lloyd algorithm */ VlKMeansElkan, /**< Elkan algorithm */ VlKMeansANN /**< Approximate nearest neighbors */ } VlKMeansAlgorithm ; /** @brief K-means initialization algorithms */ typedef enum _VlKMeansInitialization { VlKMeansRandomSelection, /**< Randomized selection */ VlKMeansPlusPlus /**< Plus plus raondomized selection */ } VlKMeansInitialization ; /** ------------------------------------------------------------------ ** @brief K-means quantizer **/ typedef struct _VlKMeans { vl_type dataType ; /**< Data type. */ vl_size dimension ; /**< Data dimensionality. */ vl_size numCenters ; /**< Number of centers. */ vl_size numTrees ; /**< Number of trees in forest when using ANN-kmeans. */ vl_size maxNumComparisons ; /**< Maximum number of comparisons when using ANN-kmeans. */ VlKMeansInitialization initialization ; /**< Initalization algorithm. */ VlKMeansAlgorithm algorithm ; /**< Clustring algorithm. */ VlVectorComparisonType distance ; /**< Distance. */ vl_size maxNumIterations ; /**< Maximum number of refinement iterations. */ vl_size numRepetitions ; /**< Number of clustering repetitions. */ int verbosity ; /**< Verbosity level. */ void * centers ; /**< Centers */ void * centerDistances ; /**< Centers inter-distances. */ double energy ; /**< Current solution energy. */ VlFloatVectorComparisonFunction floatVectorComparisonFn ; VlDoubleVectorComparisonFunction doubleVectorComparisonFn ; } VlKMeans ; /** @name Create and destroy ** @{ **/ VL_EXPORT VlKMeans * vl_kmeans_new (vl_type dataType, VlVectorComparisonType distance) ; VL_EXPORT VlKMeans * vl_kmeans_new_copy (VlKMeans const * kmeans) ; VL_EXPORT void vl_kmeans_delete (VlKMeans * self) ; /** @} */ /** @name Basic data processing ** @{ **/ VL_EXPORT void vl_kmeans_reset (VlKMeans * self) ; VL_EXPORT double vl_kmeans_cluster (VlKMeans * self, void const * data, vl_size dimension, vl_size numData, vl_size numCenters) ; VL_EXPORT void vl_kmeans_quantize (VlKMeans * self, vl_uint32 * assignments, void * distances, void const * data, vl_size numData) ; VL_EXPORT void vl_kmeans_quantize_ANN (VlKMeans * self, vl_uint32 * assignments, void * distances, void const * data, vl_size numData, vl_size iteration ); /** @} */ /** @name Advanced data processing ** @{ **/ VL_EXPORT void vl_kmeans_set_centers (VlKMeans * self, void const * centers, vl_size dimension, vl_size numCenters) ; VL_EXPORT void vl_kmeans_init_centers_with_rand_data (VlKMeans * self, void const * data, vl_size dimensions, vl_size numData, vl_size numCenters) ; VL_EXPORT void vl_kmeans_init_centers_plus_plus (VlKMeans * self, void const * data, vl_size dimensions, vl_size numData, vl_size numCenters) ; VL_EXPORT double vl_kmeans_refine_centers (VlKMeans * self, void const * data, vl_size numData) ; /** @} */ /** @name Retrieve data and parameters ** @{ **/ VL_INLINE vl_type vl_kmeans_get_data_type (VlKMeans const * self) ; VL_INLINE VlVectorComparisonType vl_kmeans_get_distance (VlKMeans const * self) ; VL_INLINE VlKMeansAlgorithm vl_kmeans_get_algorithm (VlKMeans const * self) ; VL_INLINE VlKMeansInitialization vl_kmeans_get_initialization (VlKMeans const * self) ; VL_INLINE vl_size vl_kmeans_get_num_repetitions (VlKMeans const * self) ; VL_INLINE vl_size vl_kmeans_get_dimension (VlKMeans const * self) ; VL_INLINE vl_size vl_kmeans_get_num_centers (VlKMeans const * self) ; VL_INLINE int vl_kmeans_get_verbosity (VlKMeans const * self) ; VL_INLINE vl_size vl_kmeans_get_max_num_iterations (VlKMeans const * self) ; VL_INLINE vl_size vl_kmeans_get_max_num_comparisons (VlKMeans const * self) ; VL_INLINE vl_size vl_kmeans_get_num_trees (VlKMeans const * self) ; VL_INLINE double vl_kmeans_get_energy (VlKMeans const * self) ; VL_INLINE void const * vl_kmeans_get_centers (VlKMeans const * self) ; /** @} */ /** @name Set parameters ** @{ **/ VL_INLINE void vl_kmeans_set_algorithm (VlKMeans * self, VlKMeansAlgorithm algorithm) ; VL_INLINE void vl_kmeans_set_initialization (VlKMeans * self, VlKMeansInitialization initialization) ; VL_INLINE void vl_kmeans_set_num_repetitions (VlKMeans * self, vl_size numRepetitions) ; VL_INLINE void vl_kmeans_set_max_num_iterations (VlKMeans * self, vl_size maxNumIterations) ; VL_INLINE void vl_kmeans_set_verbosity (VlKMeans * self, int verbosity) ; VL_INLINE void vl_kmeans_set_max_num_comparisons (VlKMeans * self, vl_size maxNumComparisons) ; VL_INLINE void vl_kmeans_set_num_trees (VlKMeans * self, vl_size numTrees) ; /** @} */ /** ------------------------------------------------------------------ ** @brief Get data type ** @param self KMeans object instance. ** @return data type. **/ VL_INLINE vl_type vl_kmeans_get_data_type (VlKMeans const * self) { return self->dataType ; } /** @brief Get data dimension ** @param self KMeans object instance. ** @return data dimension. **/ VL_INLINE vl_size vl_kmeans_get_dimension (VlKMeans const * self) { return self->dimension ; } /** @brief Get data type ** @param self KMeans object instance. ** @return data type. **/ VL_INLINE VlVectorComparisonType vl_kmeans_get_distance (VlKMeans const * self) { return self->distance ; } /** @brief Get the number of centers (K) ** @param self KMeans object instance. ** @return number of centers. **/ VL_INLINE vl_size vl_kmeans_get_num_centers (VlKMeans const * self) { return self->numCenters ; } /** @brief Get the number energy of the current fit ** @param self KMeans object instance. ** @return energy. **/ VL_INLINE double vl_kmeans_get_energy (VlKMeans const * self) { return self->energy ; } /** ------------------------------------------------------------------ ** @brief Get verbosity level ** @param self KMeans object instance. ** @return verbosity level. **/ VL_INLINE int vl_kmeans_get_verbosity (VlKMeans const * self) { return self->verbosity ; } /** @brief Set verbosity level ** @param self KMeans object instance. ** @param verbosity verbosity level. **/ VL_INLINE void vl_kmeans_set_verbosity (VlKMeans * self, int verbosity) { self->verbosity = verbosity ; } /** ------------------------------------------------------------------ ** @brief Get centers ** @param self KMeans object instance. ** @return cluster centers. **/ VL_INLINE void const * vl_kmeans_get_centers (VlKMeans const * self) { return self->centers ; } /** ------------------------------------------------------------------ ** @brief Get maximum number of iterations ** @param self KMeans object instance. ** @return maximum number of iterations. **/ VL_INLINE vl_size vl_kmeans_get_max_num_iterations (VlKMeans const * self) { return self->maxNumIterations ; } /** @brief Set maximum number of iterations ** @param self KMeans filter. ** @param maxNumIterations maximum number of iterations. **/ VL_INLINE void vl_kmeans_set_max_num_iterations (VlKMeans * self, vl_size maxNumIterations) { self->maxNumIterations = maxNumIterations ; } /** ------------------------------------------------------------------ ** @brief Get maximum number of repetitions. ** @param self KMeans object instance. ** @return current number of repretitions for quantization. **/ VL_INLINE vl_size vl_kmeans_get_num_repetitions (VlKMeans const * self) { return self->numRepetitions ; } /** @brief Set maximum number of repetitions ** @param self KMeans object instance. ** @param numRepetitions maximum number of repetitions. ** The number of repetitions cannot be smaller than 1. **/ VL_INLINE void vl_kmeans_set_num_repetitions (VlKMeans * self, vl_size numRepetitions) { assert (numRepetitions >= 1) ; self->numRepetitions = numRepetitions ; } /** ------------------------------------------------------------------ ** @brief Get K-means algorithm ** @param self KMeans object. ** @return algorithm. **/ VL_INLINE VlKMeansAlgorithm vl_kmeans_get_algorithm (VlKMeans const * self) { return self->algorithm ; } /** @brief Set K-means algorithm ** @param self KMeans object. ** @param algorithm K-means algorithm. **/ VL_INLINE void vl_kmeans_set_algorithm (VlKMeans * self, VlKMeansAlgorithm algorithm) { self->algorithm = algorithm ; } /** ------------------------------------------------------------------ ** @brief Get K-means initialization algorithm ** @param self KMeans object. ** @return algorithm. **/ VL_INLINE VlKMeansInitialization vl_kmeans_get_initialization (VlKMeans const * self) { return self->initialization ; } /** @brief Set K-means initialization algorithm ** @param self KMeans object. ** @param initialization initialization. **/ VL_INLINE void vl_kmeans_set_initialization (VlKMeans * self, VlKMeansInitialization initialization) { self->initialization = initialization ; } /** ------------------------------------------------------------------ ** @brief Get maximum number of comparisons in ANN-KD-Tree. ** @param self KMeans object instance. ** @return maximum number of comparisons. **/ VL_INLINE vl_size vl_kmeans_get_max_num_comparisons (VlKMeans const * self) { return self->maxNumComparisons ; } /** @brief Set maximum number of comparisons in ANN-KD-Tree. ** @param self KMeans filter. ** @param maxNumComparisons maximum number of comparisons. **/ VL_INLINE void vl_kmeans_set_max_num_comparisons (VlKMeans * self, vl_size maxNumComparisons) { self->maxNumComparisons = maxNumComparisons; } /** ------------------------------------------------------------------ ** @brief Get number of trees in ANN-KD-Tree. ** @param self KMeans object instance. ** @return number of trees. **/ VL_INLINE void vl_kmeans_set_num_trees (VlKMeans * self, vl_size numTrees) { self->numTrees = numTrees; } VL_INLINE vl_size vl_kmeans_get_num_trees (VlKMeans const * self) { return self->numTrees; } /* VL_IKMEANS_H */ #endif vlfeat/vl/aib.h0000644000175000017500000000674112237004736012306 0ustar dimadima/** @file aib.h ** @brief AIB (@ref aib) ** @author Brian Fulkerson ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_AIB_H #define VL_AIB_H #include "generic.h" #include "mathop.h" /** ------------------------------------------------------------------ ** @internal ** @brief AIB algorithm data ** ** The implementation is quite straightforward, but the way feature ** values are handled in order to support efficient joins, ** deletions and re-arrangement needs to be explained. This is ** achieved by adding a layer of indirection: ** - Call each feature value (either original or obtained by a join ** operation) a node. Nodes are identified by numbers. ** - Call each element of the various arrays (such as VlAIB::Px) ** an entry. ** - Entries are dynamically associated to nodes as specified by ** VlAIB::nodes. For example, @c Px[i] refers to the node @c ** nodes[i]. **/ typedef struct _VlAIB { vl_uint *nodes ; /**< Entires to nodes */ vl_uint nentries ; /**< Total number of entries (= # active nodes) */ double *beta ; /**< Minimum distance to an entry */ vl_uint *bidx ; /**< Closest entry */ vl_uint *which ; /**< List of entries to update */ vl_uint nwhich ; /**< Number of entries to update */ double *Pcx; /**< Joint probability table */ double *Px; /**< Marginal. */ double *Pc; /**< Marginal. */ vl_uint nvalues; /**< Number of feature values */ vl_uint nlabels; /**< Number of labels */ vl_uint *parents; /**< Array of parents */ double *costs; /**< Cost of each merge */ vl_uint verbosity ; /** Verbosity level */ } VlAIB; /** @name Create and destroy ** @{ **/ VL_EXPORT VlAIB * vl_aib_new(double * Pcx, vl_uint nvalues, vl_uint nlabels); VL_EXPORT void vl_aib_delete (VlAIB * aib); /** @} */ /** @name Process data ** @{ **/ VL_EXPORT void vl_aib_process(VlAIB * aib); /** @} */ /** @name Retrieve results ** @{ **/ VL_INLINE vl_uint * vl_aib_get_parents(VlAIB const * aib); VL_INLINE double * vl_aib_get_costs(VlAIB const * aib); /** @} */ /* ------------------------------------------------------------------- * Inline functions implementation * ---------------------------------------------------------------- */ /** ------------------------------------------------------------------ ** @brief Get resulting list of parents ** @param aib AIB filter. ** @return An array of parents **/ VL_INLINE vl_uint * vl_aib_get_parents(VlAIB const * aib) { return aib->parents; } /** ------------------------------------------------------------------ ** @brief Get a list of merge costs ** @param aib AIB filter. ** @return An array of costs **/ VL_INLINE double * vl_aib_get_costs(VlAIB const * aib) { return aib->costs; } /* ----------------------------------------------------------------- */ /** @brief Set the verbosity ** @param self AIB object. ** @param verbosity a non-negative integer. **/ VL_INLINE void vl_aib_set_verbosity (VlAIB * self, int verbosity) { self->verbosity = verbosity ; } /** @brief Get the verbosity ** @param self AIB object. ** @return the verbosity level. **/ VL_INLINE int vl_aib_get_verbosity (VlAIB const * self) { return self->verbosity ; } /* VL_AIB_H */ #endif vlfeat/vl/fisher.h0000644000175000017500000000275712237004745013036 0ustar dimadima/** @file fisher.h ** @brief Fisher encoding (@ref fisher) ** @author David Novotny ** @author Andrea Vedaldi ** @see @ref fisher **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_FISHER_H #define VL_FISHER_H #include "generic.h" /** @name Fisher vector options ** @{ */ #define VL_FISHER_FLAG_SQUARE_ROOT (0x1 << 0) #define VL_FISHER_FLAG_NORMALIZED (0x1 << 1) #define VL_FISHER_FLAG_IMPROVED (VL_FISHER_FLAG_NORMALIZED|VL_FISHER_FLAG_SQUARE_ROOT) #define VL_FISHER_FLAG_FAST (0x1 << 2) /** @def VL_FISHER_FLAG_SQUARE_ROOT ** @brief Use signed squared-root. **/ /** @def VL_FISHER_FLAG_NORMALIZED ** @brief Gobally normalize the Fisher vector in L2 norm. **/ /** @def VL_FISHER_FLAG_IMPROVED ** @brief Improved Fisher vector. ** This is the same as @c VL_FISHER_FLAG_SQUARE_ROOT|VL_FISHER_FLAG_NORMALIZED. **/ /** @def VL_FISHER_FLAG_FAST ** @brief Fast but more approximate calculations ** Clamps to zero data to cluster assignments that are very small. ** Typically this makes the computation much faster. **/ /** @} */ VL_EXPORT void vl_fisher_encode (void * enc, vl_type dataType, void const * means, vl_size dimension, vl_size numClusters, void const * covariances, void const * priors, void const * data, vl_size numData, int flags) ; /* VL_FISHER_H */ #endif vlfeat/vl/mathop.h0000644000175000017500000004611712237004745013044 0ustar dimadima/** @file mathop.h ** @brief Math operations ** @author Andrea Vedaldi, David Novotny **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_MATHOP_H #define VL_MATHOP_H #include "generic.h" #include #include /** @brief Euler constant*/ #define VL_E 2.718281828459045 /** @brief Logarithm of 2 (math constant)*/ #define VL_LOG_OF_2 0.693147180559945 /** @brief Pi (math constant) */ #define VL_PI 3.141592653589793 /** @brief IEEE single precision epsilon (math constant) ** ** 1.0F + VL_EPSILON_F is the smallest representable ** single precision number greater than @c 1.0F. Numerically, ** ::VL_EPSILON_F is equal to @f$ 2^{-23} @f$. ** **/ #define VL_EPSILON_F 1.19209290E-07F /** @brief IEEE double precision epsilon (math constant) ** ** 1.0 + VL_EPSILON_D is the smallest representable ** double precision number greater than @c 1.0. Numerically, ** ::VL_EPSILON_D is equal to @f$ 2^{-52} @f$. **/ #define VL_EPSILON_D 2.220446049250313e-16 /* For the code below: An ANSI C compiler takes the two expressions, LONG_VAR and CHAR_VAR, and implicitly casts them to the type of the first member of the union. Refer to K&R Second Edition Page 148, last paragraph. */ /** @internal @brief IEEE single precision quiet NaN constant */ static union { vl_uint32 raw ; float value ; } const vl_nan_f = { 0x7FC00000UL } ; /** @internal @brief IEEE single precision infinity constant */ static union { vl_uint32 raw ; float value ; } const vl_infinity_f = { 0x7F800000UL } ; /** @internal @brief IEEE double precision quiet NaN constant */ static union { vl_uint64 raw ; double value ; } const vl_nan_d = #ifdef VL_COMPILER_MSC { 0x7FF8000000000000ui64 } ; #else { 0x7FF8000000000000ULL } ; #endif /** @internal @brief IEEE double precision infinity constant */ static union { vl_uint64 raw ; double value ; } const vl_infinity_d = #ifdef VL_COMPILER_MSC { 0x7FF0000000000000ui64 } ; #else { 0x7FF0000000000000ULL } ; #endif /** @brief IEEE single precision NaN (not signaling) */ #define VL_NAN_F (vl_nan_f.value) /** @brief IEEE single precision positive infinity (not signaling) */ #define VL_INFINITY_F (vl_infinity_f.value) /** @brief IEEE double precision NaN (not signaling) */ #define VL_NAN_D (vl_nan_d.value) /** @brief IEEE double precision positive infinity (not signaling) */ #define VL_INFINITY_D (vl_infinity_d.value) /* ---------------------------------------------------------------- */ /** @brief Fast mod(x, 2 * VL_PI) ** ** @param x input value. ** @return mod(x, 2 * VL_PI) ** ** The function is optimized for small absolute values of @a x. ** ** The result is guaranteed to be not smaller than 0. However, due to ** finite numerical precision and rounding errors, the result can be ** equal to 2 * VL_PI (for instance, if @c x is a very small negative ** number). **/ VL_INLINE float vl_mod_2pi_f (float x) { while (x > (float)(2 * VL_PI)) x -= (float) (2 * VL_PI) ; while (x < 0.0F) x += (float) (2 * VL_PI); return x ; } /** @brief Fast mod(x, 2 * VL_PI) ** @see vl_mod_2pi_f **/ VL_INLINE double vl_mod_2pi_d (double x) { while (x > 2.0 * VL_PI) x -= 2 * VL_PI ; while (x < 0.0) x += 2 * VL_PI ; return x ; } /** @brief Floor and convert to integer ** @param x argument. ** @return Similar to @c (int) floor(x) **/ VL_INLINE long int vl_floor_f (float x) { long int xi = (long int) x ; if (x >= 0 || (float) xi == x) return xi ; else return xi - 1 ; } /** @brief Floor and convert to integer ** @see vl_floor_f **/ VL_INLINE long int vl_floor_d (double x) { long int xi = (long int) x ; if (x >= 0 || (double) xi == x) return xi ; else return xi - 1 ; } /** @brief Ceil and convert to integer ** @param x argument. ** @return @c lceilf(x) **/ VL_INLINE long int vl_ceil_f (float x) { #ifdef VL_COMPILER_GNUC return (long int) __builtin_ceilf(x) ; #else return (long int) ceilf(x) ; #endif } /** @brief Ceil and convert to integer ** @see vl_ceil_f **/ VL_INLINE long int vl_ceil_d (double x) { #ifdef VL_COMPILER_GNUC return __builtin_ceil(x) ; #else return (long int) ceil(x) ; #endif } /** @brief Round ** @param x argument. ** @return @c lroundf(x) ** This function is either the same or similar to C99 @c lroundf(). **/ VL_INLINE long int vl_round_f (float x) { #ifdef VL_COMPILER_GNUC return __builtin_lroundf(x) ; #elif VL_COMPILER_MSC if (x >= 0.0F) { return vl_floor_f(x + 0.5F) ; } else { return vl_ceil_f(x - 0.5F) ; } #else return lroundf(x) ; #endif } /** @brief Round ** @param x argument. ** @return @c lround(x) ** This function is either the same or similar to C99 @c lround(). **/ VL_INLINE long int vl_round_d (double x) { #ifdef VL_COMPILER_GNUC return __builtin_lround(x) ; #elif VL_COMPILER_MSC if (x >= 0.0) { return vl_floor_d(x + 0.5) ; } else { return vl_ceil_d(x - 0.5) ; } #else return lround(x) ; #endif } /** @brief Fast @c abs(x) ** @param x argument. ** @return @c abs(x) **/ VL_INLINE float vl_abs_f (float x) { #ifdef VL_COMPILER_GNUC return __builtin_fabsf (x) ; #else return fabsf(x) ; #endif } /** @brief Fast @c abs(x) ** @sa vl_abs_f **/ VL_INLINE double vl_abs_d (double x) { #ifdef VL_COMPILER_GNUC return __builtin_fabs (x) ; #else return fabs(x) ; #endif } /** @brief Base-2 logaritghm ** @param x argument. ** @return @c log(x). **/ VL_INLINE double vl_log2_d (double x) { #ifdef VL_COMPILER_GNUC return __builtin_log2(x) ; #elif VL_COMPILER_MSC return log(x) / 0.693147180559945 ; #else return log2(x) ; #endif } /** @copydoc vl_log2_d */ VL_INLINE float vl_log2_f (float x) { #ifdef VL_COMPILER_GNUC return __builtin_log2f (x) ; #elif VL_COMPILER_MSC return logf(x) / 0.6931472F ; #else return log2(x) ; #endif } /** @brief Square root. ** @param x argument. ** @return @c sqrt(x). **/ VL_INLINE double vl_sqrt_d (double x) { #ifdef VL_COMPILER_GNUC return __builtin_sqrt(x) ; #else return sqrt(x) ; #endif } /** @copydoc vl_sqrt_d */ VL_INLINE float vl_sqrt_f (float x) { #ifdef VL_COMPILER_GNUC return __builtin_sqrtf(x) ; #else return sqrtf(x) ; #endif } /** @brief Check whether a floating point value is NaN ** @param x argument. ** @return true if @a x is NaN. **/ VL_INLINE vl_bool vl_is_nan_f (float x) { #ifdef VL_COMPILER_GNUC return __builtin_isnan (x) ; #elif VL_COMPILER_MSC return _isnan(x) ; #else return isnan(x) ; #endif } /** @copydoc vl_is_nan_f */ VL_INLINE vl_bool vl_is_nan_d (double x) { #ifdef VL_COMPILER_GNUC return __builtin_isnan (x) ; #elif VL_COMPILER_MSC return _isnan(x) ; #else return isnan(x) ; #endif } /** @brief Check whether a floating point value is infinity ** @param x argument. ** @return true if @a x is infinity. **/ VL_INLINE vl_bool vl_is_inf_f (float x) { #ifdef VL_COMPILER_GNUC return __builtin_isinf (x) ; #elif VL_COMPILER_MSC return ! _finite(x) ; #else return isinf(x) ; #endif } /** @copydoc vl_is_inf_f */ VL_INLINE vl_bool vl_is_inf_d (double x) { #ifdef VL_COMPILER_GNUC return __builtin_isinf (x) ; #elif VL_COMPILER_MSC return ! _finite(x) ; #else return isinf(x) ; #endif } /** ------------------------------------------------------------------ ** @brief Fast @c atan2 approximation ** @param y argument. ** @param x argument. ** ** The function computes a relatively rough but fast approximation of ** @c atan2(y,x). ** ** @par Algorithm ** ** The algorithm approximates the function @f$ f(r)=atan((1-r)/(1+r)) ** @f$, @f$ r \in [-1,1] @f$ with a third order polynomial @f$ ** f(r)=c_0 + c_1 r + c_2 r^2 + c_3 r^3 @f$. To fit the polynomial ** we impose the constraints ** ** @f{eqnarray*} ** f(+1) &=& c_0 + c_1 + c_2 + c_3 = atan(0) = 0,\\ ** f(-1) &=& c_0 - c_1 + c_2 - c_3 = atan(\infty) = \pi/2,\\ ** f(0) &=& c_0 = atan(1) = \pi/4. ** @f} ** ** The last degree of freedom is fixed by minimizing the @f$ ** l^{\infty} @f$ error, which yields ** ** @f[ ** c_0=\pi/4, \quad ** c_1=-0.9675, \quad ** c_2=0, \quad ** c_3=0.1821, ** @f] ** ** with maximum error of 0.0061 radians at 0.35 degrees. ** ** @return Approximation of @c atan2(y,x). **/ VL_INLINE float vl_fast_atan2_f (float y, float x) { float angle, r ; float const c3 = 0.1821F ; float const c1 = 0.9675F ; float abs_y = vl_abs_f (y) + VL_EPSILON_F ; if (x >= 0) { r = (x - abs_y) / (x + abs_y) ; angle = (float) (VL_PI / 4) ; } else { r = (x + abs_y) / (abs_y - x) ; angle = (float) (3 * VL_PI / 4) ; } angle += (c3*r*r - c1) * r ; return (y < 0) ? - angle : angle ; } /** @brief Fast @c atan2 approximation ** @sa vl_fast_atan2_f **/ VL_INLINE double vl_fast_atan2_d (double y, double x) { double angle, r ; double const c3 = 0.1821 ; double const c1 = 0.9675 ; double abs_y = vl_abs_d (y) + VL_EPSILON_D ; if (x >= 0) { r = (x - abs_y) / (x + abs_y) ; angle = VL_PI / 4 ; } else { r = (x + abs_y) / (abs_y - x) ; angle = 3 * VL_PI / 4 ; } angle += (c3*r*r - c1) * r ; return (y < 0) ? - angle : angle ; } /** ------------------------------------------------------------------ ** @brief Fast @c resqrt approximation ** @param x argument. ** @return approximation of @c resqrt(x). ** ** The function quickly computes an approximation of @f$ x^{-1/2} ** @f$. ** ** @par Algorithm ** ** The goal is to compute @f$ y = x^{-1/2} @f$, which we do by ** finding the solution of @f$ 0 = f(y) = y^{-2} - x @f$ by two Newton ** steps. Each Newton iteration is given by ** ** @f[ ** y \leftarrow ** y - \frac{f(y)}{\frac{df(y)}{dy}} = ** y + \frac{1}{2} (y-xy^3) = ** \frac{y}{2} \left( 3 - xy^2 \right) ** @f] ** ** which yields a simple polynomial update rule. ** ** The clever bit (attributed to either J. Carmack or G. Tarolli) is ** the way an initial guess @f$ y \approx x^{-1/2} @f$ is chosen. ** ** @see Inverse Sqare Root. ** **/ VL_INLINE float vl_fast_resqrt_f (float x) { /* 32-bit version */ union { float x ; vl_int32 i ; } u ; float xhalf = (float) 0.5 * x ; /* convert floating point value in RAW integer */ u.x = x ; /* gives initial guess y0 */ u.i = 0x5f3759df - (u.i >> 1); /*u.i = 0xdf59375f - (u.i>>1);*/ /* two Newton steps */ u.x = u.x * ( (float) 1.5 - xhalf*u.x*u.x) ; u.x = u.x * ( (float) 1.5 - xhalf*u.x*u.x) ; return u.x ; } /** @brief Fast @c resqrt approximation ** @sa vl_fast_resqrt_d **/ VL_INLINE double vl_fast_resqrt_d (double x) { /* 64-bit version */ union { double x ; vl_int64 i ; } u ; double xhalf = (double) 0.5 * x ; /* convert floating point value in RAW integer */ u.x = x ; /* gives initial guess y0 */ #ifdef VL_COMPILER_MSC u.i = 0x5fe6ec85e7de30dai64 - (u.i >> 1) ; #else u.i = 0x5fe6ec85e7de30daLL - (u.i >> 1) ; #endif /* two Newton steps */ u.x = u.x * ( (double) 1.5 - xhalf*u.x*u.x) ; u.x = u.x * ( (double) 1.5 - xhalf*u.x*u.x) ; return u.x ; } /** ------------------------------------------------------------------ ** @brief Fast @c sqrt approximation ** @param x argument. ** @return approximation of @c sqrt(x). ** ** The function computes a cheap approximation of @c sqrt(x). ** ** @par Floating-point algorithm ** ** For the floating point cases, the function uses ::vl_fast_resqrt_f ** (or ::vl_fast_resqrt_d) to compute x * ** vl_fast_resqrt_f(x). ** ** @par Integer algorithm ** ** We seek for the largest integer @e y such that @f$ y^2 \leq x @f$. ** Write @f$ y = w + b_k 2^k + z @f$ where the binary expansion of the ** various variable is ** ** @f[ ** x = \sum_{i=0}^{n-1} 2^i a_i, \qquad ** w = \sum_{i=k+1}^{m-1} 2^i b_i, \qquad ** z = \sum_{i=0}^{k-1} 2^i b_i. ** @f] ** ** Assume @e w known. Expanding the square and using the fact that ** @f$ b_k^2=b_k @f$, we obtain the following constraint for @f$ b_k ** @f$ and @e z: ** ** @f[ ** x - w^2 \geq 2^k ( 2 w + 2^k ) b_k + z (z + 2wz + 2^{k+1}z b_k) ** @f] ** ** A necessary condition for @f$ b_k = 1 @f$ is that this equation is ** satisfied for @f$ z = 0 @f$ (as the second term is always ** non-negative). In fact, this condition is also sufficient, since ** we are looking for the @e largest solution @e y. ** ** This yields the following iterative algorithm. First, note that if ** @e x is stored in @e n bits, where @e n is even, then the integer ** square root does not require more than @f$ m = n / 2 @f$ bit to be ** stored. Thus initially, @f$ w = 0 @f$ and @f$ k = m - 1 = n/2 - 1 ** @f$. Then, at each iteration the equation is tested, determining ** @f$ b_{m-1}, b_{m-2}, ... @f$ in this order. **/ VL_INLINE float vl_fast_sqrt_f (float x) { return (x < 1e-8) ? 0 : x * vl_fast_resqrt_f (x) ; } /** @brief Fast @c sqrt approximation ** @sa vl_fast_sqrt_f **/ VL_INLINE double vl_fast_sqrt_d (float x) { return (x < 1e-8) ? 0 : x * vl_fast_resqrt_d (x) ; } /** @brief Fast @c sqrt approximation ** @sa vl_fast_sqrt_f **/ VL_INLINE vl_uint32 vl_fast_sqrt_ui32 (vl_uint32 x) ; /** @brief Fast @c sqrt approximation ** @sa vl_fast_sqrt_f **/ VL_INLINE vl_uint16 vl_fast_sqrt_ui16 (vl_uint16 x) ; /** @brief Fast @c sqrt approximation ** @sa vl_fast_sqrt_f **/ VL_INLINE vl_uint8 vl_fast_sqrt_ui8 (vl_uint8 x) ; #define VL_FAST_SQRT_UI(T,SFX) \ VL_INLINE T \ vl_fast_sqrt_ ## SFX (T x) \ { \ T y = 0 ; /* w / 2^k */ \ T tmp = 0 ; \ int twok ; \ \ for (twok = 8 * sizeof(T) - 2 ; \ twok >= 0 ; twok -= 2) { \ y <<= 1 ; /* y = 2 * y */ \ tmp = (2*y + 1) << twok ; \ if (x >= tmp) { \ x -= tmp ; \ y += 1 ; \ } \ } \ return y ; \ } VL_FAST_SQRT_UI(vl_uint32,ui32) VL_FAST_SQRT_UI(vl_uint16,ui16) VL_FAST_SQRT_UI(vl_uint8,ui8) /* ---------------------------------------------------------------- */ /* Vector distances and similarities */ /* ---------------------------------------------------------------- */ /** @typedef VlFloatVectorComparisonFunction ** @brief Pointer to a function to compare vectors of floats **/ typedef float (*VlFloatVectorComparisonFunction)(vl_size dimension, float const * X, float const * Y) ; /** @typedef VlDoubleVectorComparisonFunction ** @brief Pointer to a function to compare vectors of doubles **/ typedef double (*VlDoubleVectorComparisonFunction)(vl_size dimension, double const * X, double const * Y) ; /** @typedef VlFloatVector3ComparisonFunction ** @brief Pointer to a function to compare 3 vectors of doubles **/ typedef float (*VlFloatVector3ComparisonFunction)(vl_size dimension, float const * X, float const * Y, float const * Z) ; /** @typedef VlDoubleVector3ComparisonFunction ** @brief Pointer to a function to compare 3 vectors of doubles **/ typedef double (*VlDoubleVector3ComparisonFunction)(vl_size dimension, double const * X, double const * Y, double const * Z) ; /** @brief Vector comparison types */ enum _VlVectorComparisonType { VlDistanceL1, /**< l1 distance (squared intersection metric) */ VlDistanceL2, /**< squared l2 distance */ VlDistanceChi2, /**< squared Chi2 distance */ VlDistanceHellinger, /**< squared Hellinger's distance */ VlDistanceJS, /**< squared Jensen-Shannon distance */ VlDistanceMahalanobis, /**< squared mahalanobis distance */ VlKernelL1, /**< intersection kernel */ VlKernelL2, /**< l2 kernel */ VlKernelChi2, /**< Chi2 kernel */ VlKernelHellinger, /**< Hellinger's kernel */ VlKernelJS /**< Jensen-Shannon kernel */ } ; /** @brief Vector comparison types */ typedef enum _VlVectorComparisonType VlVectorComparisonType ; /** @brief Get the symbolic name of a vector comparison type ** @param type vector comparison type. ** @return data symbolic name. **/ VL_INLINE char const * vl_get_vector_comparison_type_name (int type) { switch (type) { case VlDistanceL1 : return "l1" ; case VlDistanceL2 : return "l2" ; case VlDistanceChi2 : return "chi2" ; case VlDistanceMahalanobis : return "mahalanobis" ; case VlKernelL1 : return "kl1" ; case VlKernelL2 : return "kl2" ; case VlKernelChi2 : return "kchi2" ; default: return NULL ; } } VL_EXPORT VlFloatVectorComparisonFunction vl_get_vector_comparison_function_f (VlVectorComparisonType type) ; VL_EXPORT VlDoubleVectorComparisonFunction vl_get_vector_comparison_function_d (VlVectorComparisonType type) ; VL_EXPORT VlFloatVector3ComparisonFunction vl_get_vector_3_comparison_function_f (VlVectorComparisonType type) ; VL_EXPORT VlDoubleVector3ComparisonFunction vl_get_vector_3_comparison_function_d (VlVectorComparisonType type) ; VL_EXPORT void vl_eval_vector_comparison_on_all_pairs_f (float * result, vl_size dimension, float const * X, vl_size numDataX, float const * Y, vl_size numDataY, VlFloatVectorComparisonFunction function) ; VL_EXPORT void vl_eval_vector_comparison_on_all_pairs_d (double * result, vl_size dimension, double const * X, vl_size numDataX, double const * Y, vl_size numDataY, VlDoubleVectorComparisonFunction function) ; /* ---------------------------------------------------------------- */ /* Numerical analysis */ /* ---------------------------------------------------------------- */ VL_EXPORT void vl_svd2 (double* S, double *U, double *V, double const *M) ; VL_EXPORT void vl_lapack_dlasv2 (double *smin, double *smax, double *sv, double *cv, double *su, double *cu, double f, double g, double h) ; VL_EXPORT int vl_solve_linear_system_3 (double * x, double const * A, double const *b) ; VL_EXPORT int vl_solve_linear_system_2 (double * x, double const * A, double const *b) ; VL_EXPORT int vl_gaussian_elimination (double * A, vl_size numRows, vl_size numColumns) ; /* VL_MATHOP_H */ #endif vlfeat/vl/ikmeans_lloyd.tc0000644000175000017500000000650712237004736014564 0ustar dimadima/** @file ikmeans_lloyd.tc ** @brief Integer K-Means - LLoyd Algorithm - Definition ** @author Brian Fulkerson ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @internal ** @brief Helper function to initialize a filter for Lloyd algorithm ** ** @param f filter. **/ static void vl_ikm_init_lloyd (VlIKMFilt * f VL_UNUSED) { } /** @internal ** @brief LLoyd algorithm ** @param f IKM quantizer. ** @param data Training data. ** @param N Number of traning data. **/ static int vl_ikm_train_lloyd (VlIKMFilt* f, vl_uint8 const* data, int N) { int iter, i, j, k, K = f-> K, M = f-> M, err = 0 ; vl_ikm_acc *centers = f->centers ; vl_uint *asgn = vl_malloc (sizeof(vl_uint) * N) ; vl_uint *counts = vl_malloc (sizeof(vl_uint) * N) ; for (iter = 0 ; 1 ; ++ iter) { vl_bool done = 1 ; /* --------------------------------------------------------------- * Calc. assignments * ------------------------------------------------------------ */ for (j = 0 ; j < N ; ++j) { vl_ikm_acc best_dist = 0 ; vl_uint best = (vl_uint)-1 ; for (k = 0; k < K; ++k) { vl_ikm_acc dist = 0; /* compute distance with this center */ for (i = 0; i < M; ++i) { vl_ikm_acc delta = data [j * M + i] - centers [k * M + i] ; dist += delta * delta ; } /* compare with current best */ if (best == (vl_uint) -1 || dist < best_dist) { best = k ; best_dist = dist ; } } if (asgn [j] != best) { asgn [j] = best ; done = 0 ; } } /* stopping condition */ if (done || iter == f->max_niters) break ; /* ----------------------------------------------------------------- * Calc. centers * -------------------------------------------------------------- */ /* re-compute centers */ memset (centers, 0, sizeof (vl_int32) * M * K); memset (counts, 0, sizeof (vl_int32) * K); for (j = 0; j < N; ++j) { int this_center = asgn [j] ; ++ counts [this_center] ; for (i = 0; i < M; ++i) centers [this_center * M + i] += data[j * M + i]; } for (k = 0; k < K; ++k) { vl_int32 n = counts [k]; if (n > 0xffffff) { err = 1 ; } if (n > 0) { for (i = 0; i < M; ++i) centers [k * M + i] /= n; } else { /* If no data are assigned to the center, it is not changed with respect to the previous iteration, so we do not do anything. */ } } } vl_free (counts) ; vl_free (asgn) ; return err ; } /** @internal ** @brief LLoyd algorithm ** @param f IKM quantizer. ** @param asgn Assignments (out). ** @param data Data to quantize. ** @param N Number of data. **/ static void vl_ikm_push_lloyd (VlIKMFilt *f, vl_uint *asgn, vl_uint8 const *data, int N) { int j ; for(j=0 ; j < N ; ++j) { asgn[j] = vl_ikm_push_one (f->centers, data + j * f->M, f->M, f->K); } } /* * Local Variables: * * mode: C * * End: * */ vlfeat/vl/getopt_long.h0000644000175000017500000000270712237004736014072 0ustar dimadima/** @file getopt_long.h ** @brief getopt_long ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_GETOPT_LONG_H #define VL_GETOPT_LONG_H #include "generic.h" VL_EXPORT int opterr ; /**< code of the last error occured while parsing an option */ VL_EXPORT int optind ; /**< index of the next option to process in @c argv */ VL_EXPORT int optopt ; /**< current option */ VL_EXPORT char * optarg ; /**< argument of the current option */ VL_EXPORT int optreset ; /**< reset flag */ /** @brief ::getopt_long option */ struct option { const char *name ; /**< option long name */ int has_arg ; /**< flag indicating whether the option has no, required or optional argument */ int *flag ; /**< pointer to a variable to set (if @c NULL, the value is returned instead) */ int val ; /**< value to set or to return */ } ; #define no_argument 0 /**< ::option with no argument */ #define required_argument 1 /**< ::option with required argument */ #define optional_argument 2 /**< ::option with optional argument */ VL_EXPORT int getopt_long(int argc, char * const argv[], const char * optstring, const struct option * longopts, int * longindex); /* VL_GETOPT_LONG_H */ #endif vlfeat/vl/lbp.h0000644000175000017500000000240712237004736012323 0ustar dimadima/** @file lbp.h ** @brief Local Binary Patterns ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_LBP_H #define VL_LBP_H #include "generic.h" /** @brief Type of quantization for LBP features */ typedef enum _VlLbpMappingType { VlLbpUniform /**< Uniform patterns */ } VlLbpMappingType ; /** @brief Local Binary Pattern extractor */ typedef struct VlLbp_ { vl_size dimension ; vl_uint8 mapping [256] ; vl_bool transposed ; } VlLbp ; VL_EXPORT VlLbp * vl_lbp_new(VlLbpMappingType type, vl_bool transposed) ; VL_EXPORT void vl_lbp_delete(VlLbp * self) ; VL_EXPORT void vl_lbp_process (VlLbp * self, float * features, float * image, vl_size width, vl_size height, vl_size cellSize) ; /** @brief Get the dimension of the LBP histograms ** @return dimension of the LBP histograms. ** The dimension depends on the type of quantization used. ** @see ::vl_lbp_new(). **/ VL_INLINE vl_size vl_lbp_get_dimension(VlLbp * self) { return self->dimension ; } /* VL_LBP_H */ #endif vlfeat/vl/mathop_sse2.h0000644000175000017500000000365412237004745013777 0ustar dimadima/** @file mathop_sse2.h ** @brief mathop for sse2 ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /* ---------------------------------------------------------------- */ #ifndef VL_MATHOP_SSE2_H_INSTANTIATING #ifndef VL_MATHOP_SSE2_H #define VL_MATHOP_SSE2_H #undef FLT #define FLT VL_TYPE_DOUBLE #define VL_MATHOP_SSE2_H_INSTANTIATING #include "mathop_sse2.h" #undef FLT #define FLT VL_TYPE_FLOAT #define VL_MATHOP_SSE2_H_INSTANTIATING #include "mathop_sse2.h" /* VL_MATHOP_SSE2_H */ #endif /* ---------------------------------------------------------------- */ /* VL_MATHOP_SSE2_H_INSTANTIATING */ #else #ifndef VL_DISABLE_SSE2 #include "generic.h" #include "float.th" VL_EXPORT T VL_XCAT(_vl_dot_sse2_, SFX) (vl_size dimension, T const * X, T const * Y) ; VL_EXPORT T VL_XCAT(_vl_distance_l2_sse2_, SFX) (vl_size dimension, T const * X, T const * Y) ; VL_EXPORT T VL_XCAT(_vl_distance_l1_sse2_, SFX) (vl_size dimension, T const * X, T const * Y) ; VL_EXPORT T VL_XCAT(_vl_distance_chi2_sse2_, SFX) (vl_size dimension, T const * X, T const * Y) ; VL_EXPORT T VL_XCAT(_vl_kernel_l2_sse2_, SFX) (vl_size dimension, T const * X, T const * Y) ; VL_EXPORT T VL_XCAT(_vl_kernel_l1_sse2_, SFX) (vl_size dimension, T const * X, T const * Y) ; VL_EXPORT T VL_XCAT(_vl_kernel_chi2_sse2_, SFX) (vl_size dimension, T const * X, T const * Y) ; VL_EXPORT T VL_XCAT(_vl_distance_mahalanobis_sq_sse2_, SFX) (vl_size dimension, T const * X, T const * MU, T const * S); VL_EXPORT void VL_XCAT(_vl_weighted_sigma_sse2_, SFX) (vl_size dimension, T * S, T const * X, T const * Y, T const W); VL_EXPORT void VL_XCAT(_vl_weighted_mean_sse2_, SFX) (vl_size dimension, T * MU, T const * X, T const W); /* ! VL_DISABLE_SSE2 */ #endif #undef VL_MATHOP_SSE2_INSTANTIATING #endif vlfeat/vl/covdet.h0000644000175000017500000002033512237004736013032 0ustar dimadima/** @file covdet.h ** @brief Covariant feature detectors (@ref covdet) ** @author Karel Lenc ** @author Andrea Vedaldi ** @author Michal Perdoch **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_COVDET_H #define VL_COVDET_H #include "generic.h" #include "stringop.h" #include "scalespace.h" #include /* ---------------------------------------------------------------- */ /* Feature Frames */ /* ---------------------------------------------------------------- */ /** @name Feature frames ** @{ */ /** @brief Types of feature frames */ typedef enum _VlFrameType { VL_FRAMETYPE_DISC = 1, /**< A disc. */ VL_FRAMETYPE_ORIENTED_DISC, /**< An oriented disc. */ VL_FRAMETYPE_ELLIPSE, /**< An ellipse. */ VL_FRAMETYPE_ORIENTED_ELLIPSE, /**< An oriented ellipse. */ VL_FRAMETYPE_NUM } VlFrameType ; /** @brief Names of the frame types */ VL_EXPORT const char* vlFrameNames [VL_FRAMETYPE_NUM] ; /** @brief Mapping between string values and VlFrameType values */ VL_EXPORT VlEnumerator vlFrameTypes [VL_FRAMETYPE_NUM] ; /** @brief Disc feature frame */ typedef struct _VlFrameDisc { float x ; /**< center x-coordinate */ float y ; /**< center y-coordinate */ float sigma ; /**< radius or scale */ } VlFrameDisc ; /** @brief Oriented disc feature frame ** An upright frame has @c angle equal to zero. **/ typedef struct _VlFrameOrientedDisc { float x ; /**< center x-coordinate */ float y ; /**< center y-coordinate */ float sigma ; /**< radius or scale */ float angle ; /**< rotation angle (rad) */ } VlFrameOrientedDisc ; /** @brief Ellipse feature frame */ typedef struct _VlFrameEllipse { float x ; /**< center x-coordinate */ float y ; /**< center y-coordinate */ float e11 ; /**< */ float e12 ; float e22 ; } VlFrameEllipse ; /** @brief Oriented ellipse feature frame ** The affine transformation transforms the ellipse shape into ** a circular region. */ typedef struct _VlFrameOrientedEllipse { float x ; /**< center x-coordinate */ float y ; /**< center y-coordinate */ float a11 ; /**< */ float a12 ; float a21 ; float a22 ; } VlFrameOrientedEllipse; /** @brief Get the size of a frame structure ** @param frameType identifier of the type of frame. ** @return size of the corresponding frame structure in bytes. **/ VL_INLINE vl_size vl_get_frame_size (VlFrameType frameType) { switch (frameType) { case VL_FRAMETYPE_DISC: return sizeof(VlFrameDisc); case VL_FRAMETYPE_ORIENTED_DISC: return sizeof(VlFrameOrientedDisc); case VL_FRAMETYPE_ELLIPSE: return sizeof(VlFrameEllipse); case VL_FRAMETYPE_ORIENTED_ELLIPSE: return sizeof(VlFrameOrientedEllipse); default: assert(0); break; } return 0; } /** @brief Get the size of a frame structure ** @param frameType identifier of the type of frame. ** @return size of the corresponding frame structure in bytes. **/ VL_INLINE VlFrameType vl_get_frame_type (vl_bool affineAdaptation, vl_bool orientation) { if (affineAdaptation) { if (orientation) { return VL_FRAMETYPE_ORIENTED_ELLIPSE; } else { return VL_FRAMETYPE_ELLIPSE; } } else { if (orientation) { return VL_FRAMETYPE_ORIENTED_DISC; } else { return VL_FRAMETYPE_DISC; } } } /* ---------------------------------------------------------------- */ /* Covariant Feature Detector */ /* ---------------------------------------------------------------- */ /** @brief A detected feature */ typedef struct _VlCovDetFeature { VlFrameOrientedEllipse frame ; /**< feature frame. */ float peakScore ; /**< peak score. */ float edgeScore ; /**< edge score. */ float orientationScore ; /**< orientation score. */ float laplacianScaleScore ; /**< Laplacian scale score. */ } VlCovDetFeature ; typedef struct _VlCovDetFeatureOrientation { double angle ; double score ; } VlCovDetFeatureOrientation ; typedef struct _VlCovDetFeatureLaplacianScale { double scale ; double score ; } VlCovDetFeatureLaplacianScale ; /** @brief Covariant feature detection method */ typedef enum _VlCovDetMethod { VL_COVDET_METHOD_DOG = 1, VL_COVDET_METHOD_HESSIAN, VL_COVDET_METHOD_HESSIAN_LAPLACE, VL_COVDET_METHOD_HARRIS_LAPLACE, VL_COVDET_METHOD_MULTISCALE_HESSIAN, VL_COVDET_METHOD_MULTISCALE_HARRIS, VL_COVDET_METHOD_NUM } VlCovDetMethod; /** @brief Mapping between strings and ::VlCovDetMethod values */ VL_EXPORT VlEnumerator vlCovdetMethods [VL_COVDET_METHOD_NUM] ; typedef struct _VlCovDet VlCovDet ; /** @name Create and destroy ** @{ **/ VL_EXPORT VlCovDet * vl_covdet_new (VlCovDetMethod method) ; VL_EXPORT void vl_covdet_delete (VlCovDet * self) ; VL_EXPORT void vl_covdet_reset (VlCovDet * self) ; /** @} */ /** @name Process data ** @{ **/ VL_EXPORT int vl_covdet_put_image (VlCovDet * self, float const * image, vl_size width, vl_size height) ; VL_EXPORT void vl_covdet_detect (VlCovDet * self) ; VL_EXPORT int vl_covdet_append_feature (VlCovDet * self, VlCovDetFeature const * feature) ; VL_EXPORT void vl_covdet_extract_orientations (VlCovDet * self) ; VL_EXPORT void vl_covdet_extract_laplacian_scales (VlCovDet * self) ; VL_EXPORT void vl_covdet_extract_affine_shape (VlCovDet * self) ; VL_EXPORT VlCovDetFeatureOrientation * vl_covdet_extract_orientations_for_frame (VlCovDet * self, vl_size *numOrientations, VlFrameOrientedEllipse frame) ; VL_EXPORT VlCovDetFeatureLaplacianScale * vl_covdet_extract_laplacian_scales_for_frame (VlCovDet * self, vl_size * numScales, VlFrameOrientedEllipse frame) ; VL_EXPORT int vl_covdet_extract_affine_shape_for_frame (VlCovDet * self, VlFrameOrientedEllipse * adapted, VlFrameOrientedEllipse frame) ; VL_EXPORT vl_bool vl_covdet_extract_patch_for_frame (VlCovDet * self, float * patch, vl_size resolution, double extent, double sigma, VlFrameOrientedEllipse frame) ; VL_EXPORT void vl_covdet_drop_features_outside (VlCovDet * self, double margin) ; /** @} */ /** @name Retrieve data and parameters ** @{ **/ VL_EXPORT vl_size vl_covdet_get_num_features (VlCovDet const * self) ; VL_EXPORT void * vl_covdet_get_features (VlCovDet * self) ; VL_EXPORT vl_index vl_covdet_get_first_octave (VlCovDet const * self) ; VL_EXPORT vl_size vl_covdet_get_octave_resolution (VlCovDet const * self) ; VL_EXPORT double vl_covdet_get_peak_threshold (VlCovDet const * self) ; VL_EXPORT double vl_covdet_get_edge_threshold (VlCovDet const * self) ; VL_EXPORT vl_bool vl_covdet_get_transposed (VlCovDet const * self) ; VL_EXPORT VlScaleSpace * vl_covdet_get_gss (VlCovDet const * self) ; VL_EXPORT VlScaleSpace * vl_covdet_get_css (VlCovDet const * self) ; VL_EXPORT vl_bool vl_covdet_get_aa_accurate_smoothing (VlCovDet const * self) ; VL_EXPORT vl_size const * vl_covdet_get_laplacian_scales_statistics (VlCovDet const * self, vl_size * numScales) ; VL_EXPORT double vl_covdet_get_non_extrema_suppression_threshold (VlCovDet const * self) ; VL_EXPORT vl_size vl_covdet_get_num_non_extrema_suppressed (VlCovDet const * self) ; /** @} */ /** @name Set parameters ** @{ **/ VL_EXPORT void vl_covdet_set_first_octave (VlCovDet * self, vl_index o) ; VL_EXPORT void vl_covdet_set_octave_resolution (VlCovDet * self, vl_size r) ; VL_EXPORT void vl_covdet_set_peak_threshold (VlCovDet * self, double peakThreshold) ; VL_EXPORT void vl_covdet_set_edge_threshold (VlCovDet * self, double edgeThreshold) ; VL_EXPORT void vl_covdet_set_transposed (VlCovDet * self, vl_bool t) ; VL_EXPORT void vl_covdet_set_aa_accurate_smoothing (VlCovDet * self, vl_bool x) ; VL_EXPORT void vl_covdet_set_non_extrema_suppression_threshold (VlCovDet * self, double x) ; /** @} */ /* VL_COVDET_H */ #endif vlfeat/vl/ikmeans.c0000644000175000017500000001452712237004736013176 0ustar dimadima/** @file ikmeans.c ** @brief Integer K-Means clustering - Definition ** @author Brian Fulkerson ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @file ikmeans.h ** ** Integer K-means (IKM) is an implementation of K-means clustering ** (or Vector Quantization, VQ) for integer data. This is ** particularly useful for clustering large collections of visual ** descriptors. ** ** Use the function ::vl_ikm_new() to create a IKM ** quantizer. Initialize the IKM quantizer with @c K clusters by ** ::vl_ikm_init() or similar function. Use ::vl_ikm_train() to train ** the quantizer. Use ::vl_ikm_push() or ::vl_ikm_push_one() to ** quantize new data. ** ** Given data @f$x_1,\dots,x_N\in R^d@f$ and a number of clusters ** @f$K@f$, the goal is to find assignments @f$a_i\in\{1,\dots,K\},@f$ ** and centers @f$c_1,\dots,c_K\in R^d@f$ so that the expected ** distortion ** ** @f[ ** E(\{a_{i}, c_j\}) = \frac{1}{N} \sum_{i=1}^N d(x_i, c_{a_i}) ** @f] ** ** is minimized. Here @f$d(x_i, c_{a_i})@f$ is the ** distortion, i.e. the cost we pay for representing @f$ x_i ** @f$ by @f$ c_{a_i} @f$. IKM uses the squared distortion ** @f$d(x,y)=\|x-y\|^2_2@f$. ** ** @section ikmeans-algo Algorithms ** ** @subsection ikmeans-alg-init Initialization ** ** Most K-means algorithms are iterative and needs an initialization ** in the form of an initial choice of the centers ** @f$c_1,\dots,c_K@f$. We include the following options: ** ** - User specified centers (::vl_ikm_init); ** - Random centers (::vl_ikm_init_rand); ** - Centers from @c K randomly selected data points (::vl_ikm_init_rand_data). ** ** @subsection ikmeans-alg-lloyd Lloyd ** ** The Lloyd (also known as Lloyd-Max and LBG) algorithm iteratively: ** ** - Fixes the centers, optimizing the assignments (minimizing by ** exhaustive search the association of each data point to the ** centers); ** - Fixes the assignments and optimizes the centers (by descending ** the distortion error function). For the squared distortion, this ** step is in closed form. ** ** This algorithm is not particularly efficient because all data ** points need to be compared to all centers, for a complexity ** @f$O(dNKT)@f$, where T is the total number of iterations. ** ** @subsection ikmeans-alg-elkan Elkan ** ** The Elkan algorithm is an optimized variant of Lloyd. By making ** use of the triangle inequality, many comparisons of data points ** and centers are avoided, especially at later iterations. ** Usually 4-5 times less comparisons than Lloyd are preformed, ** providing a dramatic speedup in the execution time. ** **/ #include "ikmeans.h" #include #include #include /* memset */ #include "assert.h" static void vl_ikm_init_lloyd (VlIKMFilt*) ; static void vl_ikm_init_elkan (VlIKMFilt*) ; static int vl_ikm_train_lloyd (VlIKMFilt*, vl_uint8 const*, int) ; static int vl_ikm_train_elkan (VlIKMFilt*, vl_uint8 const*, int) ; static void vl_ikm_push_lloyd (VlIKMFilt*, vl_uint*, vl_uint8 const*, int) ; static void vl_ikm_push_elkan (VlIKMFilt*, vl_uint*, vl_uint8 const*, int) ; /** @brief Create a new IKM quantizer ** ** @param method Clustering algorithm. ** ** The function allocates initializes a new IKM quantizer to ** operate based algorithm @a method. ** ** @a method has values in the enumerations ::VlIKMAlgorithms. ** ** @return new IKM quantizer. **/ VlIKMFilt * vl_ikm_new (int method) { VlIKMFilt *f = vl_malloc (sizeof(VlIKMFilt)) ; f -> centers = 0 ; f -> inter_dist = 0 ; f -> M = 0 ; f -> K = 0 ; f -> method = method ; f -> max_niters = 200 ; f -> verb = 0 ; return f ; } /** @brief Delete IKM quantizer ** ** @param f IKM quantizer. **/ void vl_ikm_delete (VlIKMFilt* f) { if (f) { if (f-> centers) vl_free (f-> centers) ; if (f-> inter_dist) vl_free (f-> inter_dist) ; vl_free (f) ; } } /** @brief Train clusters ** ** @param f IKM quantizer. ** @param data data. ** @param N number of data (@a N @c >= 1). ** ** @return -1 if an overflow may have occurred. **/ VL_EXPORT int vl_ikm_train (VlIKMFilt *f, vl_uint8 const *data, int N) { int err ; if (f-> verb) { VL_PRINTF ("ikm: training with %d data\n", N) ; VL_PRINTF ("ikm: %d clusters\n", f -> K) ; } switch (f -> method) { case VL_IKM_LLOYD : err = vl_ikm_train_lloyd (f, data, N) ; break ; case VL_IKM_ELKAN : err = vl_ikm_train_elkan (f, data, N) ; break ; default : abort() ; } return err ; } /** @brief Project data to clusters ** ** @param f IKM quantizer. ** @param asgn Assignments (out). ** @param data data. ** @param N number of data (@a N @c >= 1). ** ** The function projects the data @a data on the integer K-means ** clusters specified by the IKM quantizer @a f. Notice that the ** quantizer must be initialized. **/ VL_EXPORT void vl_ikm_push (VlIKMFilt *f, vl_uint *asgn, vl_uint8 const *data, int N) { switch (f -> method) { case VL_IKM_LLOYD : vl_ikm_push_lloyd (f, asgn, data, N) ; break ; case VL_IKM_ELKAN : vl_ikm_push_elkan (f, asgn, data, N) ; break ; default : abort() ; } } /** @brief Project one datum to clusters ** ** @param centers centers. ** @param data datum to project. ** @param K number of centers. ** @param M dimensionality of the datum. ** ** The function projects the specified datum @a data on the clusters ** specified by the centers @a centers. ** ** @return the cluster index. **/ VL_EXPORT vl_uint vl_ikm_push_one (vl_ikm_acc const *centers, vl_uint8 const *data, int M, int K) { int i,k ; /* assign data to centers */ vl_int32 best_dist = 0 ; vl_uint best = (vl_uint)-1 ; for(k = 0 ; k < K ; ++k) { vl_int32 dist = 0 ; /* compute distance with this center */ for(i = 0 ; i < M ; ++i) { vl_int32 delta = data[i] - centers[k*M + i] ; dist += delta * delta ; } /* compare with current best */ if (best == (vl_uint)-1 || dist < best_dist) { best = k ; best_dist = dist ; } } return best; } #include "ikmeans_init.tc" #include "ikmeans_lloyd.tc" #include "ikmeans_elkan.tc" vlfeat/vl/mser.h0000644000175000017500000003222512237004745012515 0ustar dimadima/** @file mser.h ** @brief MSER (@ref mser) ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_MSER #define VL_MSER #include "generic.h" /** @brief MSER image data type ** ** This is the data type of the image pixels. It has to be an ** integer. **/ typedef vl_uint8 vl_mser_pix ; /** @brief Maximum value ** ** Maximum value of the integer type ::vl_mser_pix. **/ #define VL_MSER_PIX_MAXVAL 256 /** @brief MSER Filter ** ** The MSER filter computes the Maximally Stable Extremal Regions of ** an image. ** ** @sa @ref mser **/ typedef struct _VlMserFilt VlMserFilt ; /** @brief MSER filter statistics */ typedef struct _VlMserStats VlMserStats ; /** @brief MSER filter statistics definition */ struct _VlMserStats { int num_extremal ; /**< number of extremal regions */ int num_unstable ; /**< number of unstable extremal regions */ int num_abs_unstable ; /**< number of regions that failed the absolute stability test */ int num_too_big ; /**< number of regions that failed the maximum size test */ int num_too_small ; /**< number of regions that failed the minimum size test */ int num_duplicates ; /**< number of regions that failed the duplicate test */ } ; /** @name Construction and Destruction ** @{ **/ VL_EXPORT VlMserFilt* vl_mser_new (int ndims, int const* dims) ; VL_EXPORT void vl_mser_delete (VlMserFilt *f) ; /** @} */ /** @name Processing ** @{ **/ VL_EXPORT void vl_mser_process (VlMserFilt *f, vl_mser_pix const *im) ; VL_EXPORT void vl_mser_ell_fit (VlMserFilt *f) ; /** @} */ /** @name Retrieving data ** @{ **/ VL_INLINE vl_uint vl_mser_get_regions_num (VlMserFilt const *f) ; VL_INLINE vl_uint const* vl_mser_get_regions (VlMserFilt const *f) ; VL_INLINE float const* vl_mser_get_ell (VlMserFilt const *f) ; VL_INLINE vl_uint vl_mser_get_ell_num (VlMserFilt const *f) ; VL_INLINE vl_uint vl_mser_get_ell_dof (VlMserFilt const *f) ; VL_INLINE VlMserStats const* vl_mser_get_stats (VlMserFilt const *f) ; /** @} */ /** @name Retrieving parameters ** @{ **/ VL_INLINE vl_mser_pix vl_mser_get_delta (VlMserFilt const *f) ; VL_INLINE double vl_mser_get_min_area (VlMserFilt const *f) ; VL_INLINE double vl_mser_get_max_area (VlMserFilt const *f) ; VL_INLINE double vl_mser_get_max_variation (VlMserFilt const *f) ; VL_INLINE double vl_mser_get_min_diversity (VlMserFilt const *f) ; /** @} */ /** @name Setting parameters ** @{ **/ VL_INLINE void vl_mser_set_delta (VlMserFilt *f, vl_mser_pix x) ; VL_INLINE void vl_mser_set_min_area (VlMserFilt *f, double x) ; VL_INLINE void vl_mser_set_max_area (VlMserFilt *f, double x) ; VL_INLINE void vl_mser_set_max_variation (VlMserFilt *f, double x) ; VL_INLINE void vl_mser_set_min_diversity (VlMserFilt *f, double x) ; /** @} */ /* ==================================================================== * INLINE DEFINITIONS * ================================================================== */ /** @internal @brief MSER accumulator data type ** ** This is a large integer type. It should be large enough to contain ** a number equal to the area (volume) of the image by the image ** width by the image height (for instance, if the image is a square ** of side 256, the maximum value is 256 x 256 x 256). **/ typedef float vl_mser_acc ; /** @internal @brief Basic region flag: null region */ #ifdef VL_COMPILER_MSC #define VL_MSER_VOID_NODE ((1ui64<<32) - 1) #else #define VL_MSER_VOID_NODE ((1ULL<<32) - 1) #endif /* ----------------------------------------------------------------- */ /** @internal @brief MSER: basic region (declaration) ** ** Extremal regions and maximally stable extremal regions are ** instances of image regions. ** ** There is an image region for each pixel of the image. Each region ** is represented by an instance of this structure. Regions are ** stored into an array in pixel order. ** ** Regions are arranged into a forest. VlMserReg::parent points to ** the parent node, or to the node itself if the node is a root. ** VlMserReg::parent is the index of the node in the node array ** (which therefore is also the index of the corresponding ** pixel). VlMserReg::height is the distance of the fartest leaf. If ** the node itself is a leaf, then VlMserReg::height is zero. ** ** VlMserReg::area is the area of the image region corresponding to ** this node. ** ** VlMserReg::region is the extremal region identifier. Not all ** regions are extremal regions however; if the region is NOT ** extremal, this field is set to .... **/ struct _VlMserReg { vl_uint parent ; /**< points to the parent region. */ vl_uint shortcut ; /**< points to a region closer to a root. */ vl_uint height ; /**< region height in the forest. */ vl_uint area ; /**< area of the region. */ } ; /** @internal @brief MSER: basic region */ typedef struct _VlMserReg VlMserReg ; /* ----------------------------------------------------------------- */ /** @internal @brief MSER: extremal region (declaration) ** ** Extremal regions (ER) are extracted from the region forest. Each ** region is represented by an instance of this structure. The ** structures are stored into an array, in arbitrary order. ** ** ER are arranged into a tree. @a parent points to the parent ER, or ** to itself if the ER is the root. ** ** An instance of the structure represents the extremal region of the ** level set of intensity VlMserExtrReg::value and containing the ** pixel VlMserExtReg::index. ** ** VlMserExtrReg::area is the area of the extremal region and ** VlMserExtrReg::area_top is the area of the extremal region ** containing this region in the level set of intensity ** VlMserExtrReg::area + @c delta. ** ** VlMserExtrReg::variation is the relative area variation @c ** (area_top-area)/area. ** ** VlMserExtrReg::max_stable is a flag signaling whether this extremal ** region is also maximally stable. **/ struct _VlMserExtrReg { int parent ; /**< index of the parent region */ int index ; /**< index of pivot pixel */ vl_mser_pix value ; /**< value of pivot pixel */ vl_uint shortcut ; /**< shortcut used when building a tree */ vl_uint area ; /**< area of the region */ float variation ; /**< rel. area variation */ vl_uint max_stable ; /**< max stable number (=0 if not maxstable) */ } ; /** @internal @brief MSER: extremal region */ typedef struct _VlMserExtrReg VlMserExtrReg ; /* ----------------------------------------------------------------- */ /** @internal @brief MSER filter ** @see @ref mser **/ struct _VlMserFilt { /** @name Image data and meta data @internal */ /*@{*/ int ndims ; /**< number of dimensions */ int *dims ; /**< dimensions */ int nel ; /**< number of image elements (pixels) */ int *subs ; /**< N-dimensional subscript */ int *dsubs ; /**< another subscript */ int *strides ; /**< strides to move in image data */ /*@}*/ vl_uint *perm ; /**< pixel ordering */ vl_uint *joins ; /**< sequence of join ops */ int njoins ; /**< number of join ops */ /** @name Regions */ /*@{*/ VlMserReg *r ; /**< basic regions */ VlMserExtrReg *er ; /**< extremal tree */ vl_uint *mer ; /**< maximally stable extremal regions */ int ner ; /**< number of extremal regions */ int nmer ; /**< number of maximally stable extr. reg. */ int rer ; /**< size of er buffer */ int rmer ; /**< size of mer buffer */ /*@}*/ /** @name Ellipsoids fitting */ /*@{*/ float *acc ; /**< moment accumulator. */ float *ell ; /**< ellipsoids list. */ int rell ; /**< size of ell buffer */ int nell ; /**< number of ellipsoids extracted */ int dof ; /**< number of dof of ellipsoids. */ /*@}*/ /** @name Configuration */ /*@{*/ vl_bool verbose ; /**< be verbose */ int delta ; /**< delta filter parameter */ double max_area ; /**< badness test parameter */ double min_area ; /**< badness test parameter */ double max_variation ; /**< badness test parameter */ double min_diversity ; /**< minimum diversity */ /*@}*/ VlMserStats stats ; /** run statistic */ } ; /* ----------------------------------------------------------------- */ /** @brief Get delta ** @param f MSER filter. ** @return value of @c delta. **/ VL_INLINE vl_mser_pix vl_mser_get_delta (VlMserFilt const *f) { return f-> delta ; } /** @brief Set delta ** @param f MSER filter. ** @param x value of @c delta. **/ VL_INLINE void vl_mser_set_delta (VlMserFilt *f, vl_mser_pix x) { f-> delta = x ; } /* ----------------------------------------------------------------- */ /** @brief Get minimum diversity ** @param f MSER filter. ** @return value of @c minimum diversity. **/ VL_INLINE double vl_mser_get_min_diversity (VlMserFilt const *f) { return f-> min_diversity ; } /** @brief Set minimum diversity ** @param f MSER filter. ** @param x value of @c minimum diversity. **/ VL_INLINE void vl_mser_set_min_diversity (VlMserFilt *f, double x) { f-> min_diversity = x ; } /* ----------------------------------------------------------------- */ /** @brief Get statistics ** @param f MSER filter. ** @return statistics. **/ VL_INLINE VlMserStats const* vl_mser_get_stats (VlMserFilt const *f) { return & f-> stats ; } /* ----------------------------------------------------------------- */ /** @brief Get maximum region area ** @param f MSER filter. ** @return maximum region area. **/ VL_INLINE double vl_mser_get_max_area (VlMserFilt const *f) { return f-> max_area ; } /** @brief Set maximum region area ** @param f MSER filter. ** @param x maximum region area. **/ VL_INLINE void vl_mser_set_max_area (VlMserFilt *f, double x) { f-> max_area = x ; } /* ----------------------------------------------------------------- */ /** @brief Get minimum region area ** @param f MSER filter. ** @return minimum region area. **/ VL_INLINE double vl_mser_get_min_area (VlMserFilt const *f) { return f-> min_area ; } /** @brief Set minimum region area ** @param f MSER filter. ** @param x minimum region area. **/ VL_INLINE void vl_mser_set_min_area (VlMserFilt *f, double x) { f-> min_area = x ; } /* ----------------------------------------------------------------- */ /** @brief Get maximum region variation ** @param f MSER filter. ** @return maximum region variation. **/ VL_INLINE double vl_mser_get_max_variation (VlMserFilt const *f) { return f-> max_variation ; } /** @brief Set maximum region variation ** @param f MSER filter. ** @param x maximum region variation. **/ VL_INLINE void vl_mser_set_max_variation (VlMserFilt *f, double x) { f-> max_variation = x ; } /* ----------------------------------------------------------------- */ /** @brief Get maximally stable extremal regions ** @param f MSER filter. ** @return array of MSER pivots. **/ VL_INLINE vl_uint const * vl_mser_get_regions (VlMserFilt const* f) { return f-> mer ; } /** @brief Get number of maximally stable extremal regions ** @param f MSER filter. ** @return number of MSERs. **/ VL_INLINE vl_uint vl_mser_get_regions_num (VlMserFilt const* f) { return f-> nmer ; } /* ----------------------------------------------------------------- */ /** @brief Get ellipsoids ** @param f MSER filter. ** @return ellipsoids. **/ VL_INLINE float const * vl_mser_get_ell (VlMserFilt const* f) { return f-> ell ; } /** @brief Get number of degrees of freedom of ellipsoids ** @param f MSER filter. ** @return number of degrees of freedom. **/ VL_INLINE vl_uint vl_mser_get_ell_dof (VlMserFilt const* f) { return f-> dof ; } /** @brief Get number of ellipsoids ** @param f MSER filter. ** @return number of ellipsoids **/ VL_INLINE vl_uint vl_mser_get_ell_num (VlMserFilt const* f) { return f-> nell ; } /* VL_MSER */ #endif vlfeat/vl/mathop_avx.c0000644000175000017500000001424212237004745013707 0ustar dimadima/** @file mathop_avx.c ** @brief mathop for AVX - Definition ** @author Andrea Vedaldi, David Novotny **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /* ---------------------------------------------------------------- */ #if ! defined(VL_MATHOP_AVX_INSTANTIATING) #include "mathop_avx.h" #undef FLT #define FLT VL_TYPE_DOUBLE #define VL_MATHOP_AVX_INSTANTIATING #include "mathop_avx.c" #undef FLT #define FLT VL_TYPE_FLOAT #define VL_MATHOP_AVX_INSTANTIATING #include "mathop_avx.c" /* ---------------------------------------------------------------- */ /* VL_MATHOP_AVX_INSTANTIATING */ #else #ifndef VL_DISABLE_AVX #include #include "generic.h" #include "mathop.h" #include "float.th" VL_INLINE T VL_XCAT(_vl_vhsum_avx_, SFX)(VTYPEavx x) { T acc ; #if (VSIZEavx == 8) { //VTYPEavx hsum = _mm256_hadd_ps(x, x); //hsum = _mm256_add_ps(hsum, _mm256_permute2f128_ps(hsum, hsum, 0x1)); //_mm_store_ss(&acc, _mm_hadd_ps( _mm256_castps256_ps128(hsum), _mm256_castps256_ps128(hsum) ) ); VTYPEavx hsum = VHADD2avx(x, x); hsum = VADDavx(hsum, VPERMavx(hsum, hsum, 0x1)); VST1(&acc, VHADDavx( VCSTavx(hsum), VCSTavx(hsum) ) ); } #else { //VTYPEavx hsum = _mm256_add_pd(x, _mm256_permute2f128_pd(x, x, 0x1)); VTYPEavx hsum = VADDavx(x, VPERMavx(x, x, 0x1)); //_mm_store_sd(&acc, _mm_hadd_pd( _mm256_castpd256_pd128(hsum), _mm256_castpd256_pd128(hsum) ) ); VST1(&acc, VHADDavx( VCSTavx(hsum), VCSTavx(hsum) ) ); } #endif return acc ; } VL_EXPORT T VL_XCAT(_vl_distance_l2_avx_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T const * X_vec_end = X_end - VSIZEavx + 1 ; T acc ; VTYPEavx vacc = VSTZavx() ; vl_bool dataAligned = VALIGNEDavx(X) & VALIGNEDavx(Y) ; if (dataAligned) { while (X < X_vec_end) { VTYPEavx a = *(VTYPEavx*)X ; VTYPEavx b = *(VTYPEavx*)Y ; VTYPEavx delta = VSUBavx(a, b) ; VTYPEavx delta2 = VMULavx(delta, delta) ; vacc = VADDavx(vacc, delta2) ; X += VSIZEavx ; Y += VSIZEavx ; } } else { while (X < X_vec_end) { VTYPEavx a = VLDUavx(X) ; VTYPEavx b = VLDUavx(Y) ; VTYPEavx delta = VSUBavx(a, b) ; VTYPEavx delta2 = VMULavx(delta, delta) ; vacc = VADDavx(vacc, delta2) ; X += VSIZEavx ; Y += VSIZEavx ; } } acc = VL_XCAT(_vl_vhsum_avx_, SFX)(vacc) ; while (X < X_end) { T a = *X++ ; T b = *Y++ ; T delta = a - b ; acc += delta * delta ; } return acc ; } VL_EXPORT T VL_XCAT(_vl_distance_mahalanobis_sq_avx_, SFX) (vl_size dimension, T const * X, T const * MU, T const * S) { T const * X_end = X + dimension ; T const * X_vec_end = X_end - VSIZEavx + 1 ; T acc ; VTYPEavx vacc = VSTZavx() ; vl_bool dataAligned = VALIGNEDavx(X) & VALIGNEDavx(MU) & VALIGNEDavx(S); if (dataAligned) { while (X < X_vec_end) { VTYPEavx a = *(VTYPEavx*)X ; VTYPEavx b = *(VTYPEavx*)MU ; VTYPEavx c = *(VTYPEavx*)S ; VTYPEavx delta = VSUBavx(a, b) ; VTYPEavx delta2 = VMULavx(delta, delta) ; VTYPEavx delta2div = VMULavx(delta2,c); vacc = VADDavx(vacc, delta2div) ; X += VSIZEavx ; MU += VSIZEavx ; S += VSIZEavx ; } } else { while (X < X_vec_end) { VTYPEavx a = VLDUavx(X) ; VTYPEavx b = VLDUavx(MU) ; VTYPEavx c = VLDUavx(S) ; VTYPEavx delta = VSUBavx(a, b) ; VTYPEavx delta2 = VMULavx(delta, delta) ; VTYPEavx delta2div = VMULavx(delta2,c); vacc = VADDavx(vacc, delta2div) ; X += VSIZEavx ; MU += VSIZEavx ; S += VSIZEavx ; } } acc = VL_XCAT(_vl_vhsum_avx_, SFX)(vacc) ; while (X < X_end) { T a = *X++ ; T b = *MU++ ; T c = *S++ ; T delta = a - b ; acc += (delta * delta) * c; } return acc ; } VL_EXPORT void VL_XCAT(_vl_weighted_mean_avx_, SFX) (vl_size dimension, T * MU, T const * X, T const W) { T const * X_end = X + dimension ; T const * X_vec_end = X_end - VSIZEavx + 1 ; vl_bool dataAligned = VALIGNEDavx(X) & VALIGNEDavx(MU); VTYPEavx w = VLD1avx (&W) ; if (dataAligned) { while (X < X_vec_end) { VTYPEavx a = *(VTYPEavx*)X ; VTYPEavx mu = *(VTYPEavx*)MU ; VTYPEavx aw = VMULavx(a, w) ; VTYPEavx meanStore = VADDavx(aw, mu); *(VTYPEavx *)MU = meanStore; X += VSIZEavx ; MU += VSIZEavx ; } } else { while (X < X_vec_end) { VTYPEavx a = VLDUavx(X) ; VTYPEavx mu = VLDUavx(MU) ; VTYPEavx aw = VMULavx(a, w) ; VTYPEavx meanStore = VADDavx(aw, mu); VST2Uavx(MU,meanStore); X += VSIZEavx ; MU += VSIZEavx ; } } while (X < X_end) { T a = *X++ ; *MU += a * W ; MU++; } } VL_EXPORT void VL_XCAT(_vl_weighted_sigma_avx_, SFX) (vl_size dimension, T * S, T const * X, T const * Y, T const W) { T const * X_end = X + dimension ; T const * X_vec_end = X_end - VSIZEavx + 1 ; vl_bool dataAligned = VALIGNEDavx(X) & VALIGNEDavx(Y) & VALIGNEDavx(S); VTYPEavx w = VLD1avx (&W) ; if (dataAligned) { while (X < X_vec_end) { VTYPEavx a = *(VTYPEavx*)X ; VTYPEavx b = *(VTYPEavx*)Y ; VTYPEavx s = *(VTYPEavx*)S ; VTYPEavx delta = VSUBavx(a, b) ; VTYPEavx delta2 = VMULavx(delta, delta) ; VTYPEavx delta2w = VMULavx(delta2, w) ; VTYPEavx sigmaStore = VADDavx(s,delta2w); *(VTYPEavx *)S = sigmaStore; X += VSIZEavx ; Y += VSIZEavx ; S += VSIZEavx ; } } else { while (X < X_vec_end) { VTYPEavx a = VLDUavx(X) ; VTYPEavx b = VLDUavx(Y) ; VTYPEavx s = VLDUavx(S) ; VTYPEavx delta = VSUBavx(a, b) ; VTYPEavx delta2 = VMULavx(delta, delta) ; VTYPEavx delta2w = VMULavx(delta2, w) ; VTYPEavx sigmaStore = VADDavx(s,delta2w); VST2Uavx(S,sigmaStore); X += VSIZEavx ; Y += VSIZEavx ; S += VSIZEavx ; } } while (X < X_end) { T a = *X++ ; T b = *Y++ ; T delta = a - b ; *S += ((delta * delta)*W) ; S++; } } /* VL_DISABLE_AVX */ #endif #undef VL_MATHOP_AVX_INSTANTIATING #endif vlfeat/vl/gmm.h0000644000175000017500000001051012237004745012320 0ustar dimadima/** @file gmm.h ** @brief GMM (@ref gmm) ** @author David Novotny ** @author Andrea Vedaldi **/ /* Copyright (C) 2013 David Novotny and Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_GMM_H #define VL_GMM_H #include "kmeans.h" /** @brief GMM initialization algorithms */ typedef enum _VlGMMInitialization { VlGMMKMeans, /**< Initialize GMM from KMeans clustering. */ VlGMMRand, /**< Initialize GMM parameters by selecting points at random. */ VlGMMCustom /**< User specifies the initial GMM parameters. */ } VlGMMInitialization ; #ifndef __DOXYGEN__ struct _VlGMM ; typedef struct _VlGMM VlGMM ; #else /** @brief GMM quantizer */ typedef OPAQUE VlGMM ; #endif /** @name Create and destroy ** @{ **/ VL_EXPORT VlGMM * vl_gmm_new (vl_type dataType, vl_size dimension, vl_size numComponents) ; VL_EXPORT VlGMM * vl_gmm_new_copy (VlGMM const * gmm) ; VL_EXPORT void vl_gmm_delete (VlGMM * self) ; VL_EXPORT void vl_gmm_reset (VlGMM * self); /** @} */ /** @name Basic data processing ** @{ **/ VL_EXPORT double vl_gmm_cluster (VlGMM * self, void const * data, vl_size numData); /** @} */ /** @name Fine grained data processing ** @{ */ VL_EXPORT void vl_gmm_init_with_rand_data (VlGMM * self, void const * data, vl_size numData) ; VL_EXPORT void vl_gmm_init_with_kmeans (VlGMM * self, void const * data, vl_size numData, VlKMeans * kmeansInit); VL_EXPORT double vl_gmm_em (VlGMM * self, void const * data, vl_size numData); /** @} */ VL_EXPORT void vl_gmm_set_means (VlGMM * self, void const * means); VL_EXPORT void vl_gmm_set_covariances (VlGMM * self, void const * covariances); VL_EXPORT void vl_gmm_set_priors (VlGMM * self, void const * priors); VL_EXPORT double vl_get_gmm_data_posteriors_f(float * posteriors, vl_size numClusters, vl_size numData, float const * priors, float const * means, vl_size dimension, float const * covariances, float const * data) ; VL_EXPORT double vl_get_gmm_data_posteriors_d(double * posteriors, vl_size numClusters, vl_size numData, double const * priors, double const * means, vl_size dimension, double const * covariances, double const * data) ; /** @} */ /** @name Set parameters ** @{ **/ VL_EXPORT void vl_gmm_set_num_repetitions (VlGMM * self, vl_size numRepetitions) ; VL_EXPORT void vl_gmm_set_max_num_iterations (VlGMM * self, vl_size maxNumIterations) ; VL_EXPORT void vl_gmm_set_verbosity (VlGMM * self, int verbosity) ; VL_EXPORT void vl_gmm_set_initialization (VlGMM * self, VlGMMInitialization init); VL_EXPORT void vl_gmm_set_kmeans_init_object (VlGMM * self, VlKMeans * kmeans); VL_EXPORT void vl_gmm_set_covariance_lower_bounds (VlGMM * self, double const * bounds); VL_EXPORT void vl_gmm_set_covariance_lower_bound (VlGMM * self, double bound) ; /** @} */ /** @name Get parameters ** @{ **/ VL_EXPORT void const * vl_gmm_get_means (VlGMM const * self); VL_EXPORT void const * vl_gmm_get_covariances (VlGMM const * self); VL_EXPORT void const * vl_gmm_get_priors (VlGMM const * self); VL_EXPORT void const * vl_gmm_get_posteriors (VlGMM const * self); VL_EXPORT vl_type vl_gmm_get_data_type (VlGMM const * self); VL_EXPORT vl_size vl_gmm_get_dimension (VlGMM const * self); VL_EXPORT vl_size vl_gmm_get_num_repetitions (VlGMM const * self); VL_EXPORT vl_size vl_gmm_get_num_data (VlGMM const * self); VL_EXPORT vl_size vl_gmm_get_num_clusters (VlGMM const * self); VL_EXPORT double vl_gmm_get_loglikelyhood (VlGMM const * self); VL_EXPORT int vl_gmm_get_verbosity (VlGMM const * self); VL_EXPORT vl_size vl_gmm_get_max_num_iterations (VlGMM const * self); VL_EXPORT vl_size vl_gmm_get_num_repetitions (VlGMM const * self); VL_EXPORT VlGMMInitialization vl_gmm_get_initialization (VlGMM const * self); VL_EXPORT VlKMeans * vl_gmm_get_kmeans_init_object (VlGMM const * self); VL_EXPORT double const * vl_gmm_get_covariance_lower_bounds (VlGMM const * self); /** @} */ /* VL_GMM_H */ #endif vlfeat/vl/pgm.h0000644000175000017500000000446412237004745012336 0ustar dimadima/** @file pgm.h ** @brief Portable graymap format (PGM) parser ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_PGM_H #define VL_PGM_H #include "generic.h" #include "mathop.h" #include /** @name PGM parser error codes ** @{ */ #define VL_ERR_PGM_INV_HEAD 101 /**< Invalid PGM header section. */ #define VL_ERR_PGM_INV_META 102 /**< Invalid PGM meta section. */ #define VL_ERR_PGM_INV_DATA 103 /**< Invalid PGM data section.*/ #define VL_ERR_PGM_IO 104 /**< Generic I/O error. */ /** @} */ /** @brief PGM image meta data ** ** A PGM image is a 2-D array of pixels of width #width and height ** #height. Each pixel is an integer one or two bytes wide, depending ** whether #max_value is smaller than 256. **/ typedef struct _VlPgmImage { vl_size width ; /**< image width. */ vl_size height ; /**< image height. */ vl_size max_value ; /**< pixel maximum value (<= 2^16-1). */ vl_bool is_raw ; /**< is RAW format? */ } VlPgmImage ; /** @name Core operations ** @{ */ VL_EXPORT int vl_pgm_extract_head (FILE *f, VlPgmImage *im) ; VL_EXPORT int vl_pgm_extract_data (FILE *f, VlPgmImage const *im, void *data) ; VL_EXPORT int vl_pgm_insert (FILE *f, VlPgmImage const *im, void const*data ) ; VL_EXPORT vl_size vl_pgm_get_npixels (VlPgmImage const *im) ; VL_EXPORT vl_size vl_pgm_get_bpp (VlPgmImage const *im) ; /** @} */ /** @name Helper functions ** @{ */ VL_EXPORT int vl_pgm_write (char const *name, vl_uint8 const *data, int width, int height) ; VL_EXPORT int vl_pgm_write_f (char const *name, float const *data, int width, int height) ; VL_EXPORT int vl_pgm_read_new (char const *name, VlPgmImage *im, vl_uint8 **data) ; VL_EXPORT int vl_pgm_read_new_f (char const *name, VlPgmImage *im, float **data) ; /** @} */ /* VL_PGM_H */ #endif vlfeat/vl/imopv_sse2.h0000644000175000017500000000335012237004736013632 0ustar dimadima/** @file imopv_sse2.h ** @brief Vectorized image operations - SSE2 ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_IMOPV_SSE2_H #define VL_IMOPV_SSE2_H #include "generic.h" #ifndef VL_DISABLE_SSE2 VL_EXPORT void _vl_imconvcol_vf_sse2 (float* dst, vl_size dst_stride, float const* src, vl_size src_width, vl_size src_height, vl_size src_stride, float const* filt, vl_index filt_begin, vl_index filt_end, int step, unsigned int flags) ; VL_EXPORT void _vl_imconvcol_vd_sse2 (double* dst, vl_size dst_stride, double const* src, vl_size src_width, vl_size src_height, vl_size src_stride, double const* filt, vl_index filt_begin, vl_index filt_end, int step, unsigned int flags) ; /* VL_EXPORT void _vl_imconvcoltri_vf_sse2 (float* dst, int dst_stride, float const* src, int src_width, int src_height, int src_stride, int filt_size, int step, unsigned int flags) ; VL_EXPORT void _vl_imconvcoltri_vd_sse2 (double* dst, int dst_stride, double const* src, int src_width, int src_height, int src_stride, int filt_size, int step, unsigned int flags) ; */ #endif /* VL_IMOPV_SSE2_H */ #endif vlfeat/vl/kdtree.h0000644000175000017500000001314412237004745013024 0ustar dimadima/** @file kdtree.h ** @brief KD-tree (@ref kdtree) ** @author Andrea Vedaldi, David Novotny **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_KDTREE_H #define VL_KDTREE_H #include "generic.h" #include "mathop.h" #define VL_KDTREE_SPLIT_HEAP_SIZE 5 #define VL_KDTREE_VARIANCE_EST_NUM_SAMPLES 1024 typedef struct _VlKDTreeNode VlKDTreeNode ; typedef struct _VlKDTreeSplitDimension VlKDTreeSplitDimension ; typedef struct _VlKDTreeDataIndexEntry VlKDTreeDataIndexEntry ; typedef struct _VlKDForestSearchState VlKDForestSearchState ; struct _VlKDTreeNode { vl_uindex parent ; vl_index lowerChild ; vl_index upperChild ; unsigned int splitDimension ; double splitThreshold ; double lowerBound ; double upperBound ; } ; struct _VlKDTreeSplitDimension { unsigned int dimension ; double mean ; double variance ; } ; struct _VlKDTreeDataIndexEntry { vl_index index ; double value ; } ; /** @brief Thresholding method */ typedef enum _VlKDTreeThresholdingMethod { VL_KDTREE_MEDIAN, VL_KDTREE_MEAN } VlKDTreeThresholdingMethod ; /** @brief Neighbor of a query point */ typedef struct _VlKDForestNeighbor { double distance ; /**< distance to the query point */ vl_uindex index ; /**< index of the neighbor in the KDTree data */ } VlKDForestNeighbor ; typedef struct _VlKDTree { VlKDTreeNode * nodes ; vl_size numUsedNodes ; vl_size numAllocatedNodes ; VlKDTreeDataIndexEntry * dataIndex ; unsigned int depth ; } VlKDTree ; struct _VlKDForestSearchState { VlKDTree * tree ; vl_uindex nodeIndex ; double distanceLowerBound ; } ; struct _VlKDForestSearcher; /** @brief KDForest object */ typedef struct _VlKDForest { vl_size dimension ; /* random number generator */ VlRand * rand ; /* indexed data */ vl_type dataType ; void const * data ; vl_size numData ; VlVectorComparisonType distance; void (*distanceFunction)(void) ; /* tree structure */ VlKDTree ** trees ; vl_size numTrees ; /* build */ VlKDTreeThresholdingMethod thresholdingMethod ; VlKDTreeSplitDimension splitHeapArray [VL_KDTREE_SPLIT_HEAP_SIZE] ; vl_size splitHeapNumNodes ; vl_size splitHeapSize ; vl_size maxNumNodes; /* query */ vl_size searchMaxNumComparisons ; vl_size numSearchers; struct _VlKDForestSearcher * headSearcher ; /* head of the double linked list with searchers */ } VlKDForest ; /** @brief KDForest searcher object */ struct _VlKDForestSearcher { /* maintain a linked list of searchers for later disposal*/ struct _VlKDForestSearcher * next; struct _VlKDForestSearcher * previous; vl_uindex * searchIdBook ; VlKDForestSearchState * searchHeapArray ; VlKDForest * forest; vl_size searchNumComparisons; vl_size searchNumRecursions ; vl_size searchNumSimplifications ; vl_size searchHeapNumNodes ; vl_uindex searchId ; } ; typedef struct _VlKDForestSearcher VlKDForestSearcher ; /** @name Creating, copying and disposing ** @{ */ VL_EXPORT VlKDForest * vl_kdforest_new (vl_type dataType, vl_size dimension, vl_size numTrees, VlVectorComparisonType normType) ; VL_EXPORT VlKDForestSearcher * vl_kdforest_new_searcher (VlKDForest * kdforest); VL_EXPORT void vl_kdforest_delete (VlKDForest * self) ; VL_EXPORT void vl_kdforestsearcher_delete (VlKDForestSearcher * searcher) ; /** @} */ /** @name Building and querying ** @{ */ VL_EXPORT void vl_kdforest_build (VlKDForest * self, vl_size numData, void const * data) ; VL_EXPORT vl_size vl_kdforest_query (VlKDForest * self, VlKDForestNeighbor * neighbors, vl_size numNeighbors, void const * query) ; VL_EXPORT vl_size vl_kdforest_query_with_array (VlKDForest * self, vl_uint32 * index, vl_size numNeighbors, vl_size numQueries, void * distance, void const * queries) ; VL_EXPORT vl_size vl_kdforestsearcher_query (VlKDForestSearcher * self, VlKDForestNeighbor * neighbors, vl_size numNeighbors, void const * query) ; /** @} */ /** @name Retrieving and setting parameters ** @{ */ VL_EXPORT vl_size vl_kdforest_get_depth_of_tree (VlKDForest const * self, vl_uindex treeIndex) ; VL_EXPORT vl_size vl_kdforest_get_num_nodes_of_tree (VlKDForest const * self, vl_uindex treeIndex) ; VL_EXPORT vl_size vl_kdforest_get_num_trees (VlKDForest const * self) ; VL_EXPORT vl_size vl_kdforest_get_data_dimension (VlKDForest const * self) ; VL_EXPORT vl_type vl_kdforest_get_data_type (VlKDForest const * self) ; VL_EXPORT void vl_kdforest_set_max_num_comparisons (VlKDForest * self, vl_size n) ; VL_EXPORT vl_size vl_kdforest_get_max_num_comparisons (VlKDForest * self) ; VL_EXPORT void vl_kdforest_set_thresholding_method (VlKDForest * self, VlKDTreeThresholdingMethod method) ; VL_EXPORT VlKDTreeThresholdingMethod vl_kdforest_get_thresholding_method (VlKDForest const * self) ; VL_EXPORT VlKDForest * vl_kdforest_searcher_get_forest (VlKDForestSearcher const * self) ; VL_EXPORT VlKDForestSearcher * vl_kdforest_get_searcher (VlKDForest const * self, vl_uindex pos) ; /** @} */ /* VL_KDTREE_H */ #endif vlfeat/vl/scalespace.c0000644000175000017500000006045512237004745013653 0ustar dimadima/** @file scalespace.c ** @brief Scale Space - Definition ** @author Karel Lenc ** @author Andrea Vedaldi ** @author Michal Perdoch **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @page scalespace Gaussian Scale Space (GSS) @author Karel Lenc @author Andrea Vedaldi @author Michal Perdoch @ref scalespace.h implements a Gaussian scale space, a data structure representing an image at multiple resolutions @cite{witkin83scale-space} @cite{koenderink84the-structure} @cite{lindeberg94scale-space}. Scale spaces are used, for example, to detect scale invariant features @cite{lindeberg98principles} such as SIFT, Hessian-Affine, Harris-Affine, Harris-Laplace, etc. @tableofcontents @section scalespace-overview Overview A *scale space* is representation of an image at multiple resolution levels. An image is a function $\ell(x,y)$ of two coordinates $x$, $y$; the scale space $\ell(x,y,\sigma)$ adds a third coordinate $\sigma$ indexing the *scale*. @ref scalespace.h implements in particular the Gaussian scale space, where the image $\ell(x,y,\sigma)$ is obtained by smoothing $\ell(x,y)$ by a Gaussian kernel of isotropic standard deviation $\sigma$. In practice, the spatial coordiantes $(x,y)$ and the scale coordinate $\sigma$ are sampled. The density of the spatial sampling is adjusted as a function of the scale: intuitively, coarser resolution images can be sampled more coarsely. Thus, the scale space has the structure of a *pyramid*: a collection of images of progressively coarser resolution and smaller size (in pixels). The pyramid is organised in a number of *octaves*, indexed by a parameter `o`, and further *sublevels* for each octave, indexed by a parameter `s`. These are related to the scale $\sigma$ by \[ \sigma(s,o) = \sigma_o 2^{\displaystyle o + \frac{s}{\mathtt{octaveResolution}}} \] where `octaveResolution` is the resolution of the octave subsampling $\sigma_0$ is the *base smoothing*. Given an input image `image`, the following example uses the ::VlScaleSpace object to compute the image `level`, which is the version of `image` at scales `(o,s)`: @code float* level ; VlScaleSpace ss = vl_scalespace_new(imageWidth, imageHeight) ; vl_scalespace_put_image(ss, image) ; level = vl_scalespace_get_level(ss, o, s) ; @endcode Note that `level` has not necessarily the same dimensions or sampling density of `image`. The geometry of `level` can be obtained as @code VlScaleSpaceOctaveGeometry ogeom = vl_scalespace_get_octave_geometry(ss, o) ; ogeom.width \\ width of level (in number of pixels) ogeom.height \\ height of level (in number of pixels) ogeom.step \\ spatial sampling step @endcode This means that $\ell(x,y,\sigma) = \mathtt{level}[i,j]$, where \[ x = \mathtt{ogeom.step} \times i, \quad 0 \leq i < \mathtt{ogeom.width}, \] and similarly for $y$. The other impotant information in order to use scale space is to know the range of the paramerters `o` and `s`. This can be obtained as @code VlScaleSpaceGeometry geom = vl_scalespace_get_geomerty(ss) ; @endcode So for example `o` varies in the range from `geom.firstOctave` to `geom.lastOctave` and `s` in the range `geom.octaveFirstSubdivision` to `geom.octaveLastSubdivision`. @subsection scalespace-finer Finer control ::VlScaleSpace offers more control on how the pyramid is constructed. Two usage cases are the following: - In feature detection it is often convenient to sample a few redudant sublevels per octave, effectively representing the same scale with two different spatial samplings. This simplifies detecting extrema in scales at boundary scale levels. - Often there is a convenience in oversampling (at more than the Nyquist frequency) the finer scales. While oversampling does not add information to the image, it may simplify significantly the implementation of filers such as derivatives. All this is possible by using a more advanced interface to ::VlScaleSpace. For example, in oerder to start sampling at octave -1 and have two redundant subdivisions per octave, one can use: @code VlScaleSpaceGeometry geom = vl_scalespace_get_default_geometry(imageWidth, imageHeight) ; geom.firstOctave = -1 ; geom.octaveFirstSubdivision = -1 ; geom.octaveLastSubdivision = geom.octaveResolution ; VlScaleSpacae ss = vl_scalespace_new_with_geometry (geom) ; @endcode @section scalespace-algorithm Algorithm and limitations Formally, the *Gaussian scale space* of an image $\ell(x,y)$ is defined as \[ \ell(x,y,\sigma) = [g_{\sigma} * \ell](x,y,\sigma) \] where $g_\sigma$ denotes a 2D Gaussian kernel of isotropic standard deviation $\sigma$: \[ g_{\sigma}(x,y) = \frac{1}{2\pi\sigma^2} \exp\left( - \frac{x^2 + y^2}{2\sigma^2} \right). \] An important detail is that the algorithm is not fed with the dieal infinite resolution image $\ell(x,y)$, but with a pre-smoothed and sampled version measured by the CCD. This is modelled by assuming that the input is in fact the sampled image $\ell(x,y,\sigma_n)$, where $\sigma_n$ is a *nominal smoothing*, usually taken to be 0.5 (half a pixel standard deviation). This also means that $\sigma = \sigma_n = 0.5$ is the *finest scale* that can actually be computed. Given $\ell(x,y,\sigma_n)$, any of a vast number digitial filtering techniques can be used to compute the succesive scales. Presently, ::VlScaleSpace uses a basic FIR implementation of the Gaussian filters. The FIR implementation is obtained by sampling the Gaussian function and re-normalizing it to have unit norm. As a rule of thumb, such a filter works sufficiently well for, say, feature detection if the standard deviation $\sigma$ is at least 1.6 times the spatial sampling step. The same filter works better still the input image is oversampled. The limitations on the FIR filters have impliciations on the pyramid itself, as the latter is constructed by *incremental smoothing*: each successive level is obtained from the previous one by adding the needed amount of smoothing. In this manner, the size of the FIR filters remains small; however, if the scale sublevels are too packed, the incremental smoothing is so small that the FIR implementation may break. */ #include "scalespace.h" #include "mathop.h" #include #include #include #include #include /** @file scalespace.h ** @struct VlScaleSpace ** @brief Scale space class ** ** This is an opaque class used to compute the scale space of an ** image. **/ struct _VlScaleSpace { VlScaleSpaceGeometry geom ; /**< Geometry of the scale space */ float **octaves ; /**< Data */ } ; /* ---------------------------------------------------------------- */ /** @brief Get the default geometry for a given image size. ** @param width image width. ** @param height image height. ** @return the default scale space geometry. ** ** Both @a width and @a height must be at least one pixel wide. **/ VlScaleSpaceGeometry vl_scalespace_get_default_geometry (vl_size width, vl_size height) { VlScaleSpaceGeometry geom ; assert(width >= 1) ; assert(height >= 1) ; geom.width = width ; geom.height = height ; geom.firstOctave = 0 ; geom.lastOctave = VL_MAX(floor(vl_log2_d(VL_MIN(width, height))) - 3, 0) ; geom.octaveResolution= 3 ; geom.octaveFirstSubdivision = 0 ; geom.octaveLastSubdivision = geom.octaveResolution - 1 ; geom.baseScale = 1.6 * pow(2.0, 1.0 / geom.octaveResolution) ; geom.nominalScale = 0.5 ; return geom ; } #define is_valid_geometry(geom) (\ geom.firstOctave <= geom.lastOctave && \ geom.octaveResolution >= 1 && \ geom.octaveFirstSubdivision <= geom.octaveLastSubdivision && \ geom.baseScale >= 0.0 && \ geom.nominalScale >= 0.0) /** @brief Check scale space geometries for equality ** @param a first geometry. ** @param b second geometry. ** @return true if equal. **/ vl_bool vl_scalespacegeometry_is_equal (VlScaleSpaceGeometry a, VlScaleSpaceGeometry b) { return a.width == b.width && a.height == b.height && a.firstOctave == b.firstOctave && a.lastOctave == b.lastOctave && a.octaveResolution == b.octaveResolution && a.octaveFirstSubdivision == b.octaveLastSubdivision && a.baseScale == b.baseScale && a.nominalScale == b.nominalScale ; } /** @brief Get the geometry of the scale space. ** @param self object. ** @return the scale space geometry. **/ VlScaleSpaceGeometry vl_scalespace_get_geometry (VlScaleSpace const * self) { return self->geom ; } /** @brief Get the geometry of an octave of the scalespace. ** @param self object. ** @param o octave index. ** @return the geometry of octave @a o. **/ VlScaleSpaceOctaveGeometry vl_scalespace_get_octave_geometry (VlScaleSpace const * self, vl_index o) { VlScaleSpaceOctaveGeometry ogeom ; ogeom.width = VL_SHIFT_LEFT(self->geom.width, -o) ; ogeom.height = VL_SHIFT_LEFT(self->geom.height, -o) ; ogeom.step = pow(2.0, o) ; return ogeom ; } /** @brief Get the data of a scale space level ** @param self object. ** @param o octave index. ** @param s level index. ** @return pointer to the data for octave @a o, level @a s. ** ** The octave index @a o must be in the range @c firstOctave ** to @c lastOctave and the scale index @a s must be in the ** range @c octaveFirstSubdivision to @c octaveLastSubdivision. **/ float * vl_scalespace_get_level (VlScaleSpace *self, vl_index o, vl_index s) { VlScaleSpaceOctaveGeometry ogeom = vl_scalespace_get_octave_geometry(self,o) ; float * octave ; assert(self) ; assert(o >= self->geom.firstOctave) ; assert(o <= self->geom.lastOctave) ; assert(s >= self->geom.octaveFirstSubdivision) ; assert(s <= self->geom.octaveLastSubdivision) ; octave = self->octaves[o - self->geom.firstOctave] ; return octave + ogeom.width * ogeom.height * (s - self->geom.octaveFirstSubdivision) ; } /** @brief Get the data of a scale space level (const) ** @param self object. ** @param o octave index. ** @param s level index. ** @return pointer to the data for octave @a o, level @a s. ** ** This function is the same as ::vl_scalespce_get_level but reutrns ** a @c const pointer to the data. **/ float const * vl_scalespace_get_level_const (VlScaleSpace const * self, vl_index o, vl_index s) { return vl_scalespace_get_level((VlScaleSpace*)self, o, s) ; } /** ------------------------------------------------------------------ ** @brief Get the scale of a given octave and sublevel ** @param self object. ** @param o octave index. ** @param s sublevel index. ** ** The function returns the scale $\sigma(o,s)$ as a function of the ** octave index @a o and sublevel @a s. **/ double vl_scalespace_get_level_sigma (VlScaleSpace const *self, vl_index o, vl_index s) { return self->geom.baseScale * pow(2.0, o + (double) s / self->geom.octaveResolution) ; } /** ------------------------------------------------------------------ ** @internal @brief Upsample the rows and take the transpose ** @param destination output image. ** @param source input image. ** @param width input image width. ** @param height input image height. ** ** The output image has dimensions @a height by 2 @a width (so the ** destination buffer must be at least as big as two times the ** input buffer). ** ** Upsampling is performed by linear interpolation. **/ static void copy_and_upsample (float *destination, float const *source, vl_size width, vl_size height) { vl_index x, y, ox, oy ; float v00, v10, v01, v11 ; assert(destination) ; assert(source) ; for(y = 0 ; y < (signed)height ; ++y) { oy = (y < ((signed)height - 1)) * width ; v10 = source[0] ; v11 = source[oy] ; for(x = 0 ; x < (signed)width ; ++x) { ox = x < ((signed)width - 1) ; v00 = v10 ; v01 = v11 ; v10 = source[ox] ; v11 = source[ox + oy] ; destination[0] = v00 ; destination[1] = 0.5f * (v00 + v10) ; destination[2*width] = 0.5f * (v00 + v01) ; destination[2*width+1] = 0.25f * (v00 + v01 + v10 + v11) ; destination += 2 ; source ++; } destination += 2*width ; } } /** ------------------------------------------------------------------ ** @internal @brief Downsample ** @param destination output imgae buffer. ** @param source input image buffer. ** @param width input image width. ** @param height input image height. ** @param numOctaves octaves (non negative). ** ** The function downsamples the image @a d times, reducing it to @c ** 1/2^d of its original size. The parameters @a width and @a height ** are the size of the input image. The destination image @a dst is ** assumed to be floor(width/2^d) pixels wide and ** floor(height/2^d) pixels high. **/ static void copy_and_downsample (float *destination, float const *source, vl_size width, vl_size height, vl_size numOctaves) { vl_index x, y ; vl_size step = 1 << numOctaves ; /* step = 2^numOctaves */ assert(destination) ; assert(source) ; if (numOctaves == 0) { memcpy(destination, source, sizeof(float) * width * height) ; } else { for(y = 0 ; y < (signed)height ; y += step) { float const *p = source + y * width ; for(x = 0 ; x < (signed)width - ((signed)step - 1) ; x += step) { *destination++ = *p ; p += step ; } } } } /* ---------------------------------------------------------------- */ /** @brief Create a new scale space object ** @param width image width. ** @param height image height. ** @return new scale space object. ** ** This function is the same as ::vl_scalespace_new_with_geometry() ** but it uses ::vl_scalespace_get_default_geometry to initialise ** the geometry of the scale space from the image size. ** ** @sa ::vl_scalespace_new_with_geometry(), ::vl_scalespace_delete(). **/ VlScaleSpace * vl_scalespace_new (vl_size width, vl_size height) { VlScaleSpaceGeometry geom ; geom = vl_scalespace_get_default_geometry(width, height) ; return vl_scalespace_new_with_geometry(geom) ; } /** ------------------------------------------------------------------ ** @brief Create a new scale space with the specified geometry ** @param geom scale space geomerty. ** @return new scale space object. ** ** If the geometry is not valid (see ::VlScaleSpaceGeometry), the ** result is unpredictable. ** ** The function returns `NULL` if it was not possible to allocate the ** object because of an out-of-memory condition. ** ** @sa ::VlScaleSpaceGeometry, ::vl_scalespace_delete(). **/ VlScaleSpace * vl_scalespace_new_with_geometry (VlScaleSpaceGeometry geom) { vl_index o ; vl_size numSublevels = geom.octaveLastSubdivision - geom.octaveFirstSubdivision + 1 ; vl_size numOctaves = geom.lastOctave - geom.firstOctave + 1 ; VlScaleSpace *self ; assert(is_valid_geometry(geom)) ; numOctaves = geom.lastOctave - geom.firstOctave + 1 ; numSublevels = geom.octaveLastSubdivision - geom.octaveFirstSubdivision + 1 ; self = vl_calloc(1, sizeof(VlScaleSpace)) ; if (self == NULL) goto err_alloc_self ; self->geom = geom ; self->octaves = vl_calloc(numOctaves, sizeof(float*)) ; if (self->octaves == NULL) goto err_alloc_octave_list ; for (o = self->geom.firstOctave ; o <= self->geom.lastOctave ; ++o) { VlScaleSpaceOctaveGeometry ogeom = vl_scalespace_get_octave_geometry(self,o) ; vl_size octaveSize = ogeom.width * ogeom.height * numSublevels ; self->octaves[o - self->geom.firstOctave] = vl_malloc(octaveSize * sizeof(float)) ; if (self->octaves[o - self->geom.firstOctave] == NULL) goto err_alloc_octaves; } return self ; err_alloc_octaves: for (o = self->geom.firstOctave ; o <= self->geom.lastOctave ; ++o) { if (self->octaves[o - self->geom.firstOctave]) { vl_free(self->octaves[o - self->geom.firstOctave]) ; } } err_alloc_octave_list: vl_free(self) ; err_alloc_self: return NULL ; } /* ---------------------------------------------------------------- */ /** @brief Create a new copy of the object ** @param self object to copy from. ** ** The function returns `NULL` if the copy cannot be made due to an ** out-of-memory condition. **/ VlScaleSpace * vl_scalespace_new_copy (VlScaleSpace* self) { vl_index o ; VlScaleSpace * copy = vl_scalespace_new_shallow_copy(self) ; if (copy == NULL) return NULL ; for (o = self->geom.firstOctave ; o <= self->geom.lastOctave ; ++o) { VlScaleSpaceOctaveGeometry ogeom = vl_scalespace_get_octave_geometry(self,o) ; vl_size numSubevels = self->geom.octaveLastSubdivision - self->geom.octaveFirstSubdivision + 1; memcpy(copy->octaves[o - self->geom.firstOctave], self->octaves[o - self->geom.firstOctave], ogeom.width * ogeom.height * numSubevels * sizeof(float)) ; } return copy ; } /* ---------------------------------------------------------------- */ /** @brief Create a new shallow copy of the object ** @param self object to copy from. ** ** The function works like ::vl_scalespace_new_copy() but only allocates ** the scale space, without actually copying the data. **/ VlScaleSpace * vl_scalespace_new_shallow_copy (VlScaleSpace* self) { return vl_scalespace_new_with_geometry (self->geom) ; } /* ---------------------------------------------------------------- */ /** @brief Delete object ** @param self object to delete. ** @sa ::vl_scalespace_new() **/ void vl_scalespace_delete (VlScaleSpace * self) { if (self) { if (self->octaves) { vl_index o ; for (o = self->geom.firstOctave ; o <= self->geom.lastOctave ; ++o) { if (self->octaves[o - self->geom.firstOctave]) { vl_free(self->octaves[o - self->geom.firstOctave]) ; } } vl_free(self->octaves) ; } vl_free(self) ; } } /** ------------------------------------------------------------------ ** @internal @brief Fill octave starting from the first level ** @param self object instance. ** @param o octave to process. ** ** The function takes the first sublevel of octave @a o (the one at ** sublevel `octaveFirstLevel` and iteratively ** smoothes it to obtain the other octave levels. **/ void _vl_scalespace_fill_octave (VlScaleSpace *self, vl_index o) { vl_index s ; VlScaleSpaceOctaveGeometry ogeom = vl_scalespace_get_octave_geometry(self, o) ; for(s = self->geom.octaveFirstSubdivision + 1 ; s <= self->geom.octaveLastSubdivision ; ++s) { double sigma = vl_scalespace_get_level_sigma(self, o, s) ; double previousSigma = vl_scalespace_get_level_sigma(self, o, s - 1) ; double deltaSigma = sqrtf(sigma*sigma - previousSigma*previousSigma) ; float* level = vl_scalespace_get_level (self, o, s) ; float* previous = vl_scalespace_get_level (self, o, s-1) ; vl_imsmooth_f (level, ogeom.width, previous, ogeom.width, ogeom.height, ogeom.width, deltaSigma / ogeom.step, deltaSigma / ogeom.step) ; } } /** ------------------------------------------------------------------ ** @internal @brief Initialize the first level of an octave from an image ** @param self ::VlScaleSpace object instance. ** @param image image data. ** @param o octave to start. ** ** The function initializes the first level of octave @a o from ** image @a image. The dimensions of the image are the ones set ** during the creation of the ::VlScaleSpace object instance. **/ static void _vl_scalespace_start_octave_from_image (VlScaleSpace *self, float const *image, vl_index o) { float *level ; double sigma, imageSigma ; vl_index op ; assert(self) ; assert(image) ; assert(o >= self->geom.firstOctave) ; assert(o <= self->geom.lastOctave) ; /* * Copy the image to self->geom.octaveFirstSubdivision of octave o, upscaling or * downscaling as needed. */ level = vl_scalespace_get_level(self, VL_MAX(0, o), self->geom.octaveFirstSubdivision) ; copy_and_downsample(level, image, self->geom.width, self->geom.height, VL_MAX(0, o)) ; for (op = -1 ; op >= o ; --op) { VlScaleSpaceOctaveGeometry ogeom = vl_scalespace_get_octave_geometry(self, op + 1) ; float *succLevel = vl_scalespace_get_level(self, op + 1, self->geom.octaveFirstSubdivision) ; level = vl_scalespace_get_level(self, op, self->geom.octaveFirstSubdivision) ; copy_and_upsample(level, succLevel, ogeom.width, ogeom.height) ; } /* * Adjust the smoothing of the first level just initialised, accounting * for the fact that the input image is assumed to be a nominal scale * level self->sigman. */ sigma = vl_scalespace_get_level_sigma(self, o, self->geom.octaveFirstSubdivision) ; imageSigma = self->geom.nominalScale ; if (sigma > imageSigma) { VlScaleSpaceOctaveGeometry ogeom = vl_scalespace_get_octave_geometry(self, o) ; double deltaSigma = sqrt (sigma*sigma - imageSigma*imageSigma) ; level = vl_scalespace_get_level (self, o, self->geom.octaveFirstSubdivision) ; vl_imsmooth_f (level, ogeom.width, level, ogeom.width, ogeom.height, ogeom.width, deltaSigma / ogeom.step, deltaSigma / ogeom.step) ; } } /** ------------------------------------------------------------------ ** @internal @brief Initialize the first level of an octave from the previous octave ** @param ::VlScaleSpace objet instance. ** @param o octave to initialize. ** ** The function initializes the first level of octave @a o from the ** content of octave o - 1. **/ static void _vl_scalespace_start_octave_from_previous_octave (VlScaleSpace *self, vl_index o) { double sigma, prevSigma ; float *level, *prevLevel ; vl_index prevLevelIndex ; VlScaleSpaceOctaveGeometry ogeom ; assert(self) ; assert(o > self->geom.firstOctave) ; /* must not be the first octave */ assert(o <= self->geom.lastOctave) ; /* * From the previous octave pick the level which is closer to * self->geom.octaveFirstSubdivision in this octave. * The is self->geom.octaveFirstSubdivision + self->numLevels since there are * self->numLevels levels in an octave, provided that * this value does not exceed self->geom.octaveLastSubdivision. */ prevLevelIndex = VL_MIN(self->geom.octaveFirstSubdivision + (signed)self->geom.octaveResolution, self->geom.octaveLastSubdivision) ; prevLevel = vl_scalespace_get_level (self, o - 1, prevLevelIndex) ; level = vl_scalespace_get_level (self, o, self->geom.octaveFirstSubdivision) ; ogeom = vl_scalespace_get_octave_geometry(self, o - 1) ; copy_and_downsample (level, prevLevel, ogeom.width, ogeom.height, 1) ; /* * Add remaining smoothing, if any. */ sigma = vl_scalespace_get_level_sigma(self, o, self->geom.octaveFirstSubdivision) ; prevSigma = vl_scalespace_get_level_sigma(self, o - 1, prevLevelIndex) ; if (sigma > prevSigma) { VlScaleSpaceOctaveGeometry ogeom = vl_scalespace_get_octave_geometry(self, o) ; double deltaSigma = sqrt (sigma*sigma - prevSigma*prevSigma) ; level = vl_scalespace_get_level (self, o, self->geom.octaveFirstSubdivision) ; /* todo: this may fail due to an out-of-memory condition */ vl_imsmooth_f (level, ogeom.width, level, ogeom.width, ogeom.height, ogeom.width, deltaSigma / ogeom.step, deltaSigma / ogeom.step) ; } } /** ------------------------------------------------------------------ ** @brief Initialise Scale space with new image ** @param self ::VlScaleSpace object instance. ** @param image image to process. ** ** Compute the data of all the defined octaves and scales of the scale ** space @a self. **/ void vl_scalespace_put_image (VlScaleSpace *self, float const *image) { vl_index o ; _vl_scalespace_start_octave_from_image(self, image, self->geom.firstOctave) ; _vl_scalespace_fill_octave(self, self->geom.firstOctave) ; for (o = self->geom.firstOctave + 1 ; o <= self->geom.lastOctave ; ++o) { _vl_scalespace_start_octave_from_previous_octave(self, o) ; _vl_scalespace_fill_octave(self, o) ; } } vlfeat/vl/stringop.h0000644000175000017500000000427312237004736013416 0ustar dimadima/** @file stringop.h ** @brief String operations ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_STRINGOP_H #define VL_STRINGOP_H #include "generic.h" /* file protocols */ enum { VL_PROT_UNKNOWN = -1, /**< unknown protocol */ VL_PROT_NONE = 0, /**< no protocol */ VL_PROT_ASCII, /**< ASCII protocol */ VL_PROT_BINARY /**< Binary protocol */ } ; VL_EXPORT vl_size vl_string_copy (char *destination, vl_size destinationSize, char const *source) ; VL_EXPORT vl_size vl_string_copy_sub (char *destination, vl_size destinationSize, char const *beginning, char const *end) ; VL_EXPORT char *vl_string_parse_protocol (char const *string, int *protocol) ; VL_EXPORT char const *vl_string_protocol_name (int prot) ; VL_EXPORT vl_size vl_string_basename (char *destination, vl_size destinationSize, char const *source, vl_size maxNumStrippedExtension) ; VL_EXPORT vl_size vl_string_replace_wildcard (char * destination, vl_size destinationSize, char const *src, char wildcardChar, char escapeChar, char const *replacement) ; VL_EXPORT char *vl_string_find_char_rev (char const *beginning, char const *end, char c) ; VL_EXPORT vl_size vl_string_length (char const *string) ; VL_EXPORT int vl_string_casei_cmp (const char *string1, const char *string2) ; /** @name String enumerations ** @{ */ /** @brief Member of an enumeration */ typedef struct _VlEnumerator { char const *name ; /**< enumeration member name. */ vl_index value ; /**< enumeration member value. */ } VlEnumerator ; VL_EXPORT VlEnumerator *vl_enumeration_get (VlEnumerator const *enumeration, char const *name) ; VL_EXPORT VlEnumerator *vl_enumeration_get_casei (VlEnumerator const *enumeration, char const *name) ; VL_EXPORT VlEnumerator *vl_enumeration_get_by_value (VlEnumerator const *enumeration, vl_index value) ; /** @} */ /* VL_STRINGOP_H */ #endif vlfeat/vl/slic.h0000644000175000017500000000127212237004736012477 0ustar dimadima/** @file slic.h ** @brief SLIC superpixels (@ref slic) ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_SLIC_H #define VL_SLIC_H #include "generic.h" VL_EXPORT void vl_slic_segment (vl_uint32 * segmentation, float const * image, vl_size width, vl_size height, vl_size numChannels, vl_size regionSize, float regularization, vl_size minRegionSize) ; /* VL_SLIC_H */ #endif vlfeat/vl/stringop.c0000644000175000017500000003240712237004736013411 0ustar dimadima/** @file stringop.c ** @brief String operations - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @file stringop.h @brief String operations @author Andrea Vedaldi @ref stringop.h implements basic string operations. All functions that write to strings use range checking, which makes them safer than some standard POSIX equivalent (see @ref vl-stringop-err). - @ref vl-stringop-enumeration - @ref vl-stringop-file-protocol - @ref vl-stringop-err @section vl-stringop-enumeration Enumerations @ref stringop.h defines a simple enumeration data type. This is given by an array of enumeration members, represented by instances of the ::VlEnumerator strucutre, each storing a name-value pair. The enumeration must end by a member whose name is set to @c NULL. Use ::vl_enumeration_get and ::vl_enumeration_get_casei to retrieve an enumeration member by name. @section vl-stringop-file-protocols File protocols @ref stringop.h defines a few file "protocols" and helps parsing them from URL-like formatted strings. The supported protocols are:
    File protocols
    ProtocolCodeURL prefix
    ASCII::VL_PROT_ASCIIascii://
    BINARY::VL_PROT_BINARYbinary://
    @section vl-stringop-err Detecting overflow @ref stringop.h functions that write a string to a character buffer take both the buffer and its size @c n as input. If @c n is not large enough, the output may be truncated but it is always a null terminated string (provided that @c n >= 1). Such functions also return the length of the string that would have been written @c r (which does not include the terminating null character) had the buffer been large enough. Hence an overflow can be detected by testing if @c r >= @c n, @c r can be used to re-allocate a buffer large enough to contain the result, and the operation can be repeated. **/ #include "stringop.h" #include #include /** ------------------------------------------------------------------ ** @brief Extract the protocol prefix from a string ** @param string string. ** @param protocol protocol code (output). ** @return pointer to the first character after the protocol prefix. ** ** The function extracts the prefix of the string @a string ** terminated by the first occurrence of the @c :// substring (if ** any). It then matches the suffix terminated by @c :// to the ** supported @ref vl-stringop-file-protocols protocols. If @c protocol is not ** @c NULL, the corresponding protocol code is written to @a protocol ** ** The function writes to @a protocol the value ::VL_PROT_NONE if no ** suffix is detected and ::VL_PROT_UNKNOWN if there is a suffix but ** it cannot be matched to any of the supported protocols. **/ VL_EXPORT char * vl_string_parse_protocol (char const *string, int *protocol) { char const * cpt ; int dummy ; /* handle the case prot = 0 */ if (protocol == 0) protocol = &dummy ; /* look for :// */ cpt = strstr(string, "://") ; if (cpt == 0) { *protocol = VL_PROT_NONE ; cpt = string ; } else { if (strncmp(string, "ascii", cpt - string) == 0) { *protocol = VL_PROT_ASCII ; } else if (strncmp(string, "bin", cpt - string) == 0) { *protocol = VL_PROT_BINARY ; } else { *protocol = VL_PROT_UNKNOWN ; } cpt += 3 ; } return (char*) cpt ; } /** ------------------------------------------------------------------ ** @brief Get protocol name ** @param protocol protocol code. ** @return pointer protocol name string. ** ** The function returns a pointer to a string containing the name of ** the protocol @a protocol (see the @a vl-file-protocols protocols ** list). If the protocol is unknown the function returns the empty ** string. **/ VL_EXPORT char const * vl_string_protocol_name (int protocol) { switch (protocol) { case VL_PROT_ASCII: return "ascii" ; case VL_PROT_BINARY: return "bin" ; case VL_PROT_NONE : return "" ; default: return 0 ; } } /** ------------------------------------------------------------------ ** @brief Extract base of file name ** @param destination destination buffer. ** @param destinationSize size of destination buffer. ** @param source input string. ** @param maxNumStrippedExtensions maximum number of extensions to strip. ** @return length of the destination string. ** ** The function removes the leading path and up to @c ** maxNumStrippedExtensions trailing extensions from the string @a ** source and writes the result to the buffer @a destination. ** ** The leading path is the longest suffix that ends with either the ** @c \ or @c / characters. An extension is a string starting with ** the . character not containing it. For instance, the string @c ** file.png contains the extension .png and the string @c ** file.tar.gz contains two extensions (.tar and @c .gz). ** ** @sa @ref vl-stringop-err. **/ VL_EXPORT vl_size vl_string_basename (char * destination, vl_size destinationSize, char const * source, vl_size maxNumStrippedExtensions) { char c ; vl_uindex k = 0, beg, end ; /* find beginning */ beg = 0 ; for (k = 0 ; (c = source[k]) ; ++ k) { if (c == '\\' || c == '/') beg = k + 1 ; } /* find ending */ end = strlen (source) ; for (k = end ; k > beg ; --k) { if (source[k - 1] == '.' && maxNumStrippedExtensions > 0) { -- maxNumStrippedExtensions ; end = k - 1 ; } } return vl_string_copy_sub (destination, destinationSize, source + beg, source + end) ; } /** ------------------------------------------------------------------ ** @brief Replace wildcard characters by a string ** @param destination output buffer. ** @param destinationSize size of the output buffer. ** @param source input string. ** @param wildcardChar wildcard character. ** @param escapeChar escape character. ** @param replacement replacement string. ** ** The function replaces the occurrence of the specified wildcard ** character @a wildcardChar by the string @a replacement. The result ** is written to the buffer @a destination of size @a ** destinationSize. ** ** Wildcard characters may be escaped by preceding them by the @a esc ** character. More in general, anything following an occurrence of @a ** esc character is copied verbatim. To disable the escape characters ** simply set @a esc to 0. ** ** @return length of the result. ** @sa @ref vl-stringop-err. **/ VL_EXPORT vl_size vl_string_replace_wildcard (char * destination, vl_size destinationSize, char const * source, char wildcardChar, char escapeChar, char const * replacement) { char c ; vl_uindex k = 0 ; vl_bool escape = 0 ; while ((c = *source++)) { /* enter escape mode ? */ if (! escape && c == escapeChar) { escape = 1 ; continue ; } /* wildcard or regular? */ if (! escape && c == wildcardChar) { char const * repl = replacement ; while ((c = *repl++)) { if (destination && k + 1 < destinationSize) { destination[k] = c ; } ++ k ; } } /* regular character */ else { if (destination && k + 1 < destinationSize) { destination[k] = c ; } ++ k ; } escape = 0 ; } /* add trailing 0 */ if (destinationSize > 0) { destination[VL_MIN(k, destinationSize - 1)] = 0 ; } return k ; } /** ------------------------------------------------------------------ ** @brief Copy string ** @param destination output buffer. ** @param destinationSize size of the output buffer. ** @param source string to copy. ** @return length of the source string. ** ** The function copies the string @a source to the buffer @a ** destination of size @a destinationSize. ** ** @sa @ref vl-stringop-err. **/ VL_EXPORT vl_size vl_string_copy (char * destination, vl_size destinationSize, char const * source) { char c ; vl_uindex k = 0 ; while ((c = *source++)) { if (destination && k + 1 < destinationSize) { destination[k] = c ; } ++ k ; } /* finalize */ if (destinationSize > 0) { destination[VL_MIN(k, destinationSize - 1)] = 0 ; } return k ; } /** ------------------------------------------------------------------ ** @brief Copy substring ** @param destination output buffer. ** @param destinationSize size of output buffer. ** @param beginning start of the substring. ** @param end end of the substring. ** @return length of the destination string. ** ** The function copies the substring from at @a beginning to @a end ** (not included) to the buffer @a destination of size @a ** destinationSize. If, however, the null character is found before ** @a end, the substring terminates there. ** ** @sa @ref vl-stringop-err. **/ VL_EXPORT vl_size vl_string_copy_sub (char * destination, vl_size destinationSize, char const * beginning, char const * end) { char c ; vl_uindex k = 0 ; while (beginning < end && (c = *beginning++)) { if (destination && k + 1 < destinationSize) { destination[k] = c ; } ++ k ; } /* finalize */ if (destinationSize > 0) { destination[VL_MIN(k, destinationSize - 1)] = 0 ; } return k ; } /** ------------------------------------------------------------------ ** @brief Search character in reversed order ** @param beginning pointer to the substring beginning. ** @param end pointer to the substring end. ** @param c character to search for. ** @return pointer to last occurrence of @a c, or 0 if none. ** ** The function searches for the last occurrence of the character @a c ** in the substring from @a beg to @a end (the latter not being included). **/ VL_EXPORT char * vl_string_find_char_rev (char const *beginning, char const* end, char c) { while (end -- != beginning) { if (*end == c) { return (char*) end ; } } return 0 ; } /** ------------------------------------------------------------------ ** @brief Calculate string length ** @param string string. ** @return string length. **/ VL_EXPORT vl_size vl_string_length (char const *string) { vl_uindex i ; for (i = 0 ; string[i] ; ++i) ; return i ; } /** ------------------------------------------------------------------ ** @brief Compare strings case-insensitive ** @param string1 fisrt string. ** @param string2 second string. ** @return an integer =,<,> 0 if @c string1 =,<,> @c string2 **/ VL_EXPORT int vl_string_casei_cmp (const char * string1, const char * string2) { while (tolower((char unsigned)*string1) == tolower((char unsigned)*string2)) { if (*string1 == 0) { return 0 ; } string1 ++ ; string2 ++ ; } return (int)tolower((char unsigned)*string1) - (int)tolower((char unsigned)*string2) ; } /* ------------------------------------------------------------------- * VlEnumeration * ---------------------------------------------------------------- */ /** @brief Get a member of an enumeration by name ** @param enumeration array of ::VlEnumerator objects. ** @param name the name of the desired member. ** @return enumerator matching @a name. ** ** If @a name is not found in the enumeration, then the value ** @c NULL is returned. ** ** @sa vl-stringop-enumeration **/ VL_EXPORT VlEnumerator * vl_enumeration_get (VlEnumerator const *enumeration, char const *name) { assert(enumeration) ; while (enumeration->name) { if (strcmp(name, enumeration->name) == 0) return (VlEnumerator*)enumeration ; enumeration ++ ; } return NULL ; } /** @brief Get a member of an enumeration by name (case insensitive) ** @param enumeration array of ::VlEnumerator objects. ** @param name the name of the desired member. ** @return enumerator matching @a name. ** ** If @a name is not found in the enumeration, then the value ** @c NULL is returned. @a string is matched case insensitive. ** ** @sa vl-stringop-enumeration **/ VL_EXPORT VlEnumerator * vl_enumeration_get_casei (VlEnumerator const *enumeration, char const *name) { assert(enumeration) ; while (enumeration->name) { if (vl_string_casei_cmp(name, enumeration->name) == 0) return (VlEnumerator*)enumeration ; enumeration ++ ; } return NULL ; } /** @brief Get a member of an enumeration by value ** @param enumeration array of ::VlEnumerator objects. ** @param value value of the desired member. ** @return enumerator matching @a value. ** ** If @a value is not found in the enumeration, then the value ** @c NULL is returned. ** ** @sa vl-stringop-enumeration **/ VL_EXPORT VlEnumerator * vl_enumeration_get_by_value (VlEnumerator const *enumeration, vl_index value) { assert(enumeration) ; while (enumeration->name) { if (enumeration->value == value) return (VlEnumerator*)enumeration ; enumeration ++ ; } return NULL ; } vlfeat/vl/svm.h0000644000175000017500000001751112237004745012355 0ustar dimadima/** @file svm.h ** @brief Support Vector Machines (@ref svm) ** @author Milan Sulc ** @author Daniele Perrone ** @author Andrea Vedaldi **/ /* Copyright (C) 2013 Milan Sulc. Copyright (C) 2012 Daniele Perrone. Copyright (C) 2011-13 Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_SVM_H #define VL_SVM_H #include "generic.h" #include "svmdataset.h" /** @typedef VlSvm ** @brief SVM solver. ** This object implements VLFeat SVM solvers (see @ref svm.h). **/ #ifndef __DOXYGEN__ struct VlSvm_ ; typedef struct VlSvm_ VlSvm ; #else typedef OPAQUE VlSvm ; #endif /** @brief Type of SVM solver */ typedef enum { VlSvmSolverNone = 0, /**< No solver (used to evaluate an SVM). */ VlSvmSolverSgd = 1, /**< SGD algorithm (@ref svm-sgd). */ VlSvmSolverSdca /**< SDCA algorithm (@ref svm-sdca). */ } VlSvmSolverType ; /** @brief Type of SVM loss ** ** Default SVM loss types. The loss can be set by using ::vl_svm_set_loss. ** Note that custom losses can be used too by using ::vl_svm_set_loss_function, ** ::vl_svm_set_loss_derivative_function, etc. ** ** @sa svm-loss-functions **/ typedef enum { VlSvmLossHinge = 0, /**< Standard hinge loss. */ VlSvmLossHinge2 = 1, /**< Hinge loss squared. */ VlSvmLossL1, /**< L1 loss. */ VlSvmLossL2, /**< L2 loss. */ VlSvmLossLogistic /**< Logistic loss. */ } VlSvmLossType ; /** @brief Solver status */ typedef enum { VlSvmStatusTraining = 1, /**< Optimization in progress. */ VlSvmStatusConverged, /**< Optimization finished because the convergence criterion was met. */ VlSvmStatusMaxNumIterationsReached /**< Optimization finished without convergence. */ } VlSvmSolverStatus ; /** @brief SVM statistics ** This structure contains statistics characterising the state of ** the SVM solver, such as the current value of the objective function. ** ** Not all fields are used by all solvers. **/ typedef struct VlSvmStatistics_ { VlSvmSolverStatus status ; /**< Solver status. */ vl_size iteration ; /**< Solver iteration. */ vl_size epoch ; /**< Solver epoch (iteration / num samples). */ double objective ; /**< Objective function value. */ double regularizer ; /**< Regularizer value. */ double loss ; /**< Loss value. */ double dualObjective ; /**< Dual objective value. */ double dualLoss ; /**< Dual loss value. */ double dualityGap ; /**< Duality gap = objective - dualObjective. */ double scoresVariation ; /**< Variance of the score updates. */ double elapsedTime ; /**< Time elapsed from the start of training. */ } VlSvmStatistics ; /** @name Create and destroy ** @{ */ VL_EXPORT VlSvm * vl_svm_new (VlSvmSolverType type, double const * data, vl_size dimension, vl_size numData, double const * labels, double lambda) ; VL_EXPORT VlSvm * vl_svm_new_with_dataset (VlSvmSolverType type, VlSvmDataset * dataset, double const * labels, double lambda) ; VL_EXPORT VlSvm * vl_svm_new_with_abstract_data (VlSvmSolverType type, void * data, vl_size dimension, vl_size numData, double const * labels, double lambda) ; VL_EXPORT void vl_svm_delete (VlSvm * self) ; /** @} */ /** @name Retrieve parameters and data ** @{ */ VL_EXPORT VlSvmStatistics const * vl_svm_get_statistics (VlSvm const *self) ; VL_EXPORT double const * vl_svm_get_model (VlSvm const *self) ; VL_EXPORT double vl_svm_get_bias (VlSvm const *self) ; VL_EXPORT vl_size vl_svm_get_dimension (VlSvm *self) ; VL_EXPORT vl_size vl_svm_get_num_data (VlSvm *self) ; VL_EXPORT double vl_svm_get_epsilon (VlSvm const *self) ; VL_EXPORT double vl_svm_get_bias_learning_rate (VlSvm const *self) ; VL_EXPORT vl_size vl_svm_get_max_num_iterations (VlSvm const *self) ; VL_EXPORT vl_size vl_svm_get_diagnostic_frequency (VlSvm const *self) ; VL_EXPORT VlSvmSolverType vl_svm_get_solver (VlSvm const *self) ; VL_EXPORT double vl_svm_get_bias_multiplier (VlSvm const *self) ; VL_EXPORT double vl_svm_get_lambda (VlSvm const *self) ; VL_EXPORT vl_size vl_svm_get_iteration_number (VlSvm const *self) ; VL_EXPORT double const * vl_svm_get_scores (VlSvm const *self) ; VL_EXPORT double const * vl_svm_get_weights (VlSvm const *self) ; /** @} */ /** @name Set parameters ** @{ */ VL_EXPORT void vl_svm_set_epsilon (VlSvm *self, double epsilon) ; VL_EXPORT void vl_svm_set_bias_learning_rate (VlSvm *self, double rate) ; VL_EXPORT void vl_svm_set_max_num_iterations (VlSvm *self, vl_size maxNumIterations) ; VL_EXPORT void vl_svm_set_diagnostic_frequency (VlSvm *self, vl_size f) ; VL_EXPORT void vl_svm_set_bias_multiplier (VlSvm *self, double b) ; VL_EXPORT void vl_svm_set_model (VlSvm *self, double const *model) ; VL_EXPORT void vl_svm_set_bias (VlSvm *self, double b) ; VL_EXPORT void vl_svm_set_iteration_number (VlSvm *self, vl_uindex n) ; VL_EXPORT void vl_svm_set_weights (VlSvm *self, double const *weights) ; VL_EXPORT void vl_svm_set_diagnostic_function (VlSvm *self, VlSvmDiagnosticFunction f, void *data) ; VL_EXPORT void vl_svm_set_loss_function (VlSvm *self, VlSvmLossFunction f) ; VL_EXPORT void vl_svm_set_loss_derivative_function (VlSvm *self, VlSvmLossFunction f) ; VL_EXPORT void vl_svm_set_conjugate_loss_function (VlSvm *self, VlSvmLossFunction f) ; VL_EXPORT void vl_svm_set_dca_update_function (VlSvm *self, VlSvmDcaUpdateFunction f) ; VL_EXPORT void vl_svm_set_data_functions (VlSvm *self, VlSvmInnerProductFunction inner, VlSvmAccumulateFunction acc) ; VL_EXPORT void vl_svm_set_loss (VlSvm *self, VlSvmLossType loss) ; /** @} */ /** @name Process data ** @{ */ VL_EXPORT void vl_svm_train (VlSvm * self) ; /** @} */ /** @name Loss functions ** @sa @ref svm-advanced ** @{ */ /* hinge */ VL_EXPORT double vl_svm_hinge_loss (double label, double inner) ; VL_EXPORT double vl_svm_hinge_loss_derivative (double label, double inner) ; VL_EXPORT double vl_svm_hinge_conjugate_loss (double label, double u) ; VL_EXPORT double vl_svm_hinge_dca_update (double alpha, double inner, double norm2, double label) ; /* square hinge */ VL_EXPORT double vl_svm_hinge2_loss (double label, double inner) ; VL_EXPORT double vl_svm_hinge2_loss_derivative (double label, double inner) ; VL_EXPORT double vl_svm_hinge2_conjugate_loss (double label, double u) ; VL_EXPORT double vl_svm_hinge2_dca_update (double alpha, double inner, double norm2, double label) ; /* l1 */ VL_EXPORT double vl_svm_l1_loss (double label, double inner) ; VL_EXPORT double vl_svm_l1_loss_derivative (double label, double inner) ; VL_EXPORT double vl_svm_l1_conjugate_loss (double label, double u) ; VL_EXPORT double vl_svm_l1_dca_update (double alpha, double inner, double norm2, double label) ; /* l2 */ VL_EXPORT double vl_svm_l2_loss (double label, double inner) ; VL_EXPORT double vl_svm_l2_loss_derivative (double label, double inner) ; VL_EXPORT double vl_svm_l2_conjugate_loss (double label, double u) ; VL_EXPORT double vl_svm_l2_dca_update (double alpha, double inner, double norm2, double label) ; /* logistic */ VL_EXPORT double vl_svm_logistic_loss (double label, double inner) ; VL_EXPORT double vl_svm_logistic_loss_derivative (double label, double inner) ; VL_EXPORT double vl_svm_logistic_conjugate_loss (double label, double u) ; VL_EXPORT double vl_svm_logistic_dca_update (double alpha, double inner, double norm2, double label) ; /** } */ /* VL_SVM_H */ #endif vlfeat/vl/homkermap.h0000644000175000017500000000504012237004745013525 0ustar dimadima/** @file homkermap.h ** @brief Homogeneous kernel map (@ref homkermap) ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_HOMKERMAP_H #define VL_HOMKERMAP_H #include "generic.h" #include /** @brief Type of kernel */ typedef enum { VlHomogeneousKernelIntersection = 0, /**< intersection kernel */ VlHomogeneousKernelChi2, /**< Chi2 kernel */ VlHomogeneousKernelJS /**< Jensen-Shannon kernel */ } VlHomogeneousKernelType ; /** @brief Type of spectral windowing function */ typedef enum { VlHomogeneousKernelMapWindowUniform = 0, /**< uniform window */ VlHomogeneousKernelMapWindowRectangular = 1, /**< rectangular window */ } VlHomogeneousKernelMapWindowType ; #ifndef __DOXYGEN__ struct _VlHomogeneousKernelMap ; typedef struct _VlHomogeneousKernelMap VlHomogeneousKernelMap ; #else /** @brief Homogeneous kernel map object */ typedef OPAQUE VlHomogeneousKernelMap ; #endif /** @name Create and destroy ** @{ */ VL_EXPORT VlHomogeneousKernelMap * vl_homogeneouskernelmap_new (VlHomogeneousKernelType kernelType, double gamma, vl_size order, double period, VlHomogeneousKernelMapWindowType windowType) ; VL_EXPORT void vl_homogeneouskernelmap_delete (VlHomogeneousKernelMap * self) ; /** @} */ /** @name Process data ** @{ */ VL_EXPORT void vl_homogeneouskernelmap_evaluate_d (VlHomogeneousKernelMap const * self, double * destination, vl_size stride, double x) ; VL_EXPORT void vl_homogeneouskernelmap_evaluate_f (VlHomogeneousKernelMap const * self, float * destination, vl_size stride, double x) ; /** @} */ /** @name Retrieve data and parameters ** @{ */ VL_EXPORT vl_size vl_homogeneouskernelmap_get_order (VlHomogeneousKernelMap const * self) ; VL_EXPORT vl_size vl_homogeneouskernelmap_get_dimension (VlHomogeneousKernelMap const * self) ; VL_EXPORT VlHomogeneousKernelType vl_homogeneouskernelmap_get_kernel_type (VlHomogeneousKernelMap const * self) ; VL_EXPORT VlHomogeneousKernelMapWindowType vl_homogeneouskernelmap_get_window_type (VlHomogeneousKernelMap const * self) ; /** @} */ /* VL_HOMKERMAP_H */ #endif vlfeat/vl/slic.c0000644000175000017500000003342012237004745012472 0ustar dimadima/** @file slic.c ** @brief SLIC superpixels - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @page slic Simple Linear Iterative Clustering (SLIC) @author Andrea Vedaldi @ref slic.h implements the Simple Linear Iterative Clustering (SLIC) algorithm, an image segmentation method described in @cite{achanta10slic}. - @ref slic-overview - @ref slic-usage - @ref slic-tech @section slic-overview Overview SLIC @cite{achanta10slic} is a simple and efficient method to decompose an image in visually homogeneous regions. It is based on a spatially localized version of k-means clustering. Similar to mean shift or quick shift (@ref quickshift.h), each pixel is associated to a feature vector @f[ \Psi(x,y) = \left[ \begin{array}{c} \lambda x \\ \lambda y \\ I(x,y) \end{array} \right] @f] and then k-means clustering is run on those. As discussed below, the coefficient @f$ \lambda @f$ balances the spatial and appearance components of the feature vectors, imposing a degree of spatial regularization to the extracted regions. SLIC takes two parameters: the nominal size of the regions (superpixels) @c regionSize and the strength of the spatial regularization @c regularizer. The image is first divided into a grid with step @c regionSize. The center of each grid tile is then used to initialize a corresponding k-means (up to a small shift to avoid image edges). Finally, the k-means centers and clusters are refined by using the Lloyd algorithm, yielding segmenting the image. As a further restriction and simplification, during the k-means iterations each pixel can be assigned to only the 2 x 2 centers corresponding to grid tiles adjacent to the pixel. The parameter @c regularizer sets the trade-off between clustering appearance and spatial regularization. This is obtained by setting @f[ \lambda = \frac{\mathtt{regularizer}}{\mathtt{regionSize}} @f] in the definition of the feature @f$ \psi(x,y) @f$. After the k-means step, SLIC optionally removes any segment whose area is smaller than a threshld @c minRegionSize by merging them into larger ones. @section slic-usage Usage from the C library To compute the SLIC superpixels of an image use the function ::vl_slic_segment. @section slic-tech Technical details SLIC starts by dividing the image domain into a regular grid with @f$ M \times N @f$ tiles, where @f[ M = \lceil \frac{\mathtt{imageWidth}}{\mathtt{regionSize}} \rceil, \quad N = \lceil \frac{\mathtt{imageHeight}}{\mathtt{regionSize}} \rceil. @f] A region (superpixel or k-means cluster) is initialized from each grid center @f[ x_i = \operatorname{round} i \frac{\mathtt{imageWidth}}{\mathtt{regionSize}} \quad y_j = \operatorname{round} j \frac{\mathtt{imageWidth}}{\mathtt{regionSize}}. @f] In order to avoid placing these centers on top of image discontinuities, the centers are then moved in a 3 x 3 neighbourohood to minimize the edge strength @f[ \operatorname{edge}(x,y) = \| I(x+1,y) - I(x-1,y) \|_2^2 + \| I(x,y+1) - I(x,y-1) \|_2^2. @f] Then the regions are obtained by running k-means clustering, started from the centers @f[ C = \{ \Psi(x_i,y_j), i=0,1,\dots,M-1\ j=0,1,\dots,N-1 \} @f] thus obtained. K-means uses the standard LLoyd algorithm alternating assigning pixels to the clostest centers a re-estiamting the centers as the average of the corresponding feature vectors of the pixel assigned to them. The only difference compared to standard k-means is that each pixel can be assigned only to the center originated from the neighbour tiles. This guarantees that there are exactly four pixel-to-center comparisons at each round of minimization, which threfore cost @f$ O(n) @f$, where @f$ n @f$ is the number of superpixels. After k-means has converged, SLIC eliminates any connected region whose area is less than @c minRegionSize pixels. This is done by greedily merging regions to neighbour ones: the pixels @f$ p @f$ are scanned in lexicographical order and the corresponding connected components are visited. If a region has already been visited, it is skipped; if not, its area is computed and if this is less than @c minRegionSize its label is changed to the one of a neighbour region at @f$ p @f$ that has already been vistied (there is always one except for the very first pixel). */ #include "slic.h" #include "mathop.h" #include #include /** @brief SLIC superpixel segmentation ** @param segmentation segmentation. ** @param image image to segment. ** @param width image width. ** @param height image height. ** @param numChannels number of image channels (depth). ** @param regionSize nominal size of the regions. ** @param regularization trade-off between appearance and spatial terms. ** @param minRegionSize minimum size of a segment. ** ** The function computes the SLIC superpixels of the specified image @a image. ** @a image is a pointer to an @c width by @c height by @c by numChannles array of @c float. ** @a segmentation is a pointer to a @c width by @c height array of @c vl_uint32. ** @a segmentation contain the labels of each image pixels, from 0 to ** the number of regions minus one. ** ** @sa @ref slic-overview, @ref slic-tech **/ void vl_slic_segment (vl_uint32 * segmentation, float const * image, vl_size width, vl_size height, vl_size numChannels, vl_size regionSize, float regularization, vl_size minRegionSize) { vl_index i, x, y, u, v, k, region ; vl_uindex iter ; vl_size const numRegionsX = (vl_size) ceil((double) width / regionSize) ; vl_size const numRegionsY = (vl_size) ceil((double) height / regionSize) ; vl_size const numRegions = numRegionsX * numRegionsY ; vl_size const numPixels = width * height ; float * centers ; float * edgeMap ; float previousEnergy = VL_INFINITY_F ; float startingEnergy ; vl_uint32 * masses ; vl_size const maxNumIterations = 100 ; assert(segmentation) ; assert(image) ; assert(width >= 1) ; assert(height >= 1) ; assert(numChannels >= 1) ; assert(regionSize >= 1) ; assert(regularization >= 0) ; #define atimage(x,y,k) image[(x)+(y)*width+(k)*width*height] #define atEdgeMap(x,y) edgeMap[(x)+(y)*width] edgeMap = vl_calloc(numPixels, sizeof(float)) ; masses = vl_malloc(sizeof(vl_uint32) * numPixels) ; centers = vl_malloc(sizeof(float) * (2 + numChannels) * numRegions) ; /* compute edge map (gradient strength) */ for (k = 0 ; k < (signed)numChannels ; ++k) { for (y = 1 ; y < (signed)height-1 ; ++y) { for (x = 1 ; x < (signed)width-1 ; ++x) { float a = atimage(x-1,y,k) ; float b = atimage(x+1,y,k) ; float c = atimage(x,y+1,k) ; float d = atimage(x,y-1,k) ; atEdgeMap(x,y) += (a - b) * (a - b) + (c - d) * (c - d) ; } } } /* initialize K-means centers */ i = 0 ; for (v = 0 ; v < (signed)numRegionsY ; ++v) { for (u = 0 ; u < (signed)numRegionsX ; ++u) { vl_index xp ; vl_index yp ; vl_index centerx = 0 ; vl_index centery = 0 ; float minEdgeValue = VL_INFINITY_F ; x = (vl_index) vl_round_d(regionSize * (u + 0.5)) ; y = (vl_index) vl_round_d(regionSize * (v + 0.5)) ; x = VL_MAX(VL_MIN(x, (signed)width-1),0) ; y = VL_MAX(VL_MIN(y, (signed)height-1),0) ; /* search in a 3x3 neighbourhood the smallest edge response */ for (yp = VL_MAX(0, y-1) ; yp <= VL_MIN((signed)height-1, y+1) ; ++ yp) { for (xp = VL_MAX(0, x-1) ; xp <= VL_MIN((signed)width-1, x+1) ; ++ xp) { float thisEdgeValue = atEdgeMap(xp,yp) ; if (thisEdgeValue < minEdgeValue) { minEdgeValue = thisEdgeValue ; centerx = xp ; centery = yp ; } } } /* initialize the new center at this location */ centers[i++] = (float) centerx ; centers[i++] = (float) centery ; for (k = 0 ; k < (signed)numChannels ; ++k) { centers[i++] = atimage(centerx,centery,k) ; } } } /* run k-means iterations */ for (iter = 0 ; iter < maxNumIterations ; ++iter) { float factor = regularization / (regionSize * regionSize) ; float energy = 0 ; /* assign pixels to centers */ for (y = 0 ; y < (signed)height ; ++y) { for (x = 0 ; x < (signed)width ; ++x) { vl_index u = floor((double)x / regionSize - 0.5) ; vl_index v = floor((double)y / regionSize - 0.5) ; vl_index up, vp ; float minDistance = VL_INFINITY_F ; for (vp = VL_MAX(0, v) ; vp <= VL_MIN((signed)numRegionsY-1, v+1) ; ++vp) { for (up = VL_MAX(0, u) ; up <= VL_MIN((signed)numRegionsX-1, u+1) ; ++up) { vl_index region = up + vp * numRegionsX ; float centerx = centers[(2 + numChannels) * region + 0] ; float centery = centers[(2 + numChannels) * region + 1] ; float spatial = (x - centerx) * (x - centerx) + (y - centery) * (y - centery) ; float appearance = 0 ; float distance ; for (k = 0 ; k < (signed)numChannels ; ++k) { float centerz = centers[(2 + numChannels) * region + k + 2] ; float z = atimage(x,y,k) ; appearance += (z - centerz) * (z - centerz) ; } distance = appearance + factor * spatial ; if (minDistance > distance) { minDistance = distance ; segmentation[x + y * width] = (vl_uint32)region ; } } } energy += minDistance ; } } /* VL_PRINTF("vl:slic: iter %d: energy: %g\n", iter, energy) ; */ /* check energy termination conditions */ if (iter == 0) { startingEnergy = energy ; } else { if ((previousEnergy - energy) < 1e-5 * (startingEnergy - energy)) { break ; } } previousEnergy = energy ; /* recompute centers */ memset(masses, 0, sizeof(vl_uint32) * width * height) ; memset(centers, 0, sizeof(float) * (2 + numChannels) * numRegions) ; for (y = 0 ; y < (signed)height ; ++y) { for (x = 0 ; x < (signed)width ; ++x) { vl_index pixel = x + y * width ; vl_index region = segmentation[pixel] ; masses[region] ++ ; centers[region * (2 + numChannels) + 0] += x ; centers[region * (2 + numChannels) + 1] += y ; for (k = 0 ; k < (signed)numChannels ; ++k) { centers[region * (2 + numChannels) + k + 2] += atimage(x,y,k) ; } } } for (region = 0 ; region < (signed)numRegions ; ++region) { float mass = VL_MAX(masses[region], 1e-8) ; for (i = (2 + numChannels) * region ; i < (signed)(2 + numChannels) * (region + 1) ; ++i) { centers[i] /= mass ; } } } vl_free(masses) ; vl_free(centers) ; /* elimiate small regions */ { vl_uint32 * cleaned = vl_calloc(numPixels, sizeof(vl_uint32)) ; vl_uindex * segment = vl_malloc(sizeof(vl_uindex) * numPixels) ; vl_size segmentSize ; vl_uint32 label ; vl_uint32 cleanedLabel ; vl_size numExpanded ; vl_index const dx [] = {+1, -1, 0, 0} ; vl_index const dy [] = { 0, 0, +1, -1} ; vl_index direction ; vl_index pixel ; for (pixel = 0 ; pixel < (signed)numPixels ; ++pixel) { if (cleaned[pixel]) continue ; label = segmentation[pixel] ; numExpanded = 0 ; segmentSize = 0 ; segment[segmentSize++] = pixel ; /* find cleanedLabel as the label of an already cleaned region neihbour of this pixel */ cleanedLabel = label + 1 ; cleaned[pixel] = label + 1 ; x = pixel % width ; y = pixel / width ; for (direction = 0 ; direction < 4 ; ++direction) { vl_index xp = x + dx[direction] ; vl_index yp = y + dy[direction] ; vl_index neighbor = xp + yp * width ; if (0 <= xp && xp < (signed)width && 0 <= yp && yp < (signed)height && cleaned[neighbor]) { cleanedLabel = cleaned[neighbor] ; } } /* expand the segment */ while (numExpanded < segmentSize) { vl_index open = segment[numExpanded++] ; x = open % width ; y = open / width ; for (direction = 0 ; direction < 4 ; ++direction) { vl_index xp = x + dx[direction] ; vl_index yp = y + dy[direction] ; vl_index neighbor = xp + yp * width ; if (0 <= xp && xp < (signed)width && 0 <= yp && yp < (signed)height && cleaned[neighbor] == 0 && segmentation[neighbor] == label) { cleaned[neighbor] = label + 1 ; segment[segmentSize++] = neighbor ; } } } /* change label to cleanedLabel if the semgent is too small */ if (segmentSize < minRegionSize) { while (segmentSize > 0) { cleaned[segment[--segmentSize]] = cleanedLabel ; } } } /* restore base 0 indexing of the regions */ for (pixel = 0 ; pixel < (signed)numPixels ; ++pixel) cleaned[pixel] -- ; memcpy(segmentation, cleaned, numPixels * sizeof(vl_uint32)) ; vl_free(cleaned) ; vl_free(segment) ; } } vlfeat/vl/host.c0000644000175000017500000003707112237004745012523 0ustar dimadima/** @file host.c ** @brief Host - Definition ** @author Andrea Vedaldi ** @see @ref portability **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @page portability Portability features @author Andrea Vedaldi @tableofcontents Platform dependent details are isolated in the @ref host.h. This module provides functionalities to identify the host operating system, C compiler, and CPU architecture. It also provides a few features to abstract from such details. @see http://predef.sourceforge.net/index.php @see http://en.wikipedia.org/wiki/64-bit_computing @section host-os Host operating system The module defines a symbol to identify the host operating system: ::VL_OS_WIN for Windows, ::VL_OS_LINUX for Linux, ::VL_OS_MACOSX for Mac OS X, and so on. @section host-compiler Host compiler The module defines a symbol to identify the host compiler: ::VL_COMPILER_MSC for Microsoft Visual C++, ::VL_COMPILER_GNUC for GNU C, and so on. The (integer) value of such symbols corresponds the version of the compiler. The module defines a symbol to identify the data model of the compiler: ::VL_COMPILER_ILP32, ::VL_COMPILER_LP64, or ::VL_COMPILER_LLP64 (see Sect. @ref host-compiler-data-model). For convenience, it also defines a number of atomic types of prescribed width (::vl_int8, ::vl_int16, ::vl_int32, etc.). @remark While some of such functionalities are provided by the standard header @c stdint.h, the latter is not supported by all platforms. @subsection host-compiler-data-model Data models The C language defines a number of atomic data types (such as @c char, @c short, @c int and so on). The number of bits (width) used to represent each data type depends on the compiler data model. The different models are *ILP32* (@c int, @c long, and pointer 32 bit), *LP64* (@c int 32 bit, @c long and pointer 64 bit), *ILP64* (@c int, @c long, and pointer 64 bit), and *LLP64* (@c int, @c long 32 bit and pointer 64 -- and `long long` -- 64 bit). Note in particular that `long long` is 64 bit in all models of interest. The following table summarizes them:
    Compiler data models.
    Data model short int long long long void* Compiler
    ILP32 16 32 32 64 32 Most 32 bit architectures.
    LP64 16 32 64 64 64 UNIX-64 (Linux, Mac OS X)
    ILP64 16 64 64 64 64 Alpha, Cray
    SLIP64 64 64 64 64 64
    LLP64 16 32 32 64 64 Windows-64
    Macros such as ::VL_UINT32_C can be used to generate integer literal with the correct suffix for a type of a given width. @subsection host-compiler-other Other compiler-specific features The module provides the macro ::VL_EXPORT to declare symbols exported from the library and the macro ::VL_INLINE to declare inline functions. Such features are not part of the C89 standard, and change depending on the compiler. @par "Example:" The following header file declares a function @c f that should be visible from outside the library. @code #include VL_EXPORT void f () ; VL_EXPORT int i ; @endcode Notice that the macro ::VL_EXPORT needs not to be included again when the function is defined. @par "Example:" The following header file declares an inline function @c f: @code #include VL_INLINE int f() ; VL_INLINE int f() { return 1 ; } @endcode Here the first instruction defines the function @c f, where the second declares it. Notice that since this is an inline function, its definition must be found in the header file rather than in an implementation file. Notice also that definition and declaration can be merged. These macros translate according to the following tables:
    Macros for exporting library symbols
    Platform Macro name Value when building the library Value when importing the library
    Unix/GCC ::VL_EXPORT empty (assumes -visibility=hidden GCC option) __attribute__((visibility ("default")))
    Win/Visual C++ ::VL_EXPORT @c __declspec(dllexport) @c __declspec(dllimport)
    Macros for declaring inline functions
    Platform Macro name Value
    Unix/GCC ::VL_INLINE static inline
    Win/Visual C++ ::VL_INLINE static __inline
    @section host-arch Host CPU architecture The module defines a symbol to identify the host CPU architecture: ::VL_ARCH_IX86 for Intel x86, ::VL_ARCH_IA64 for Intel 64, and so on. @subsection host-arch-endianness Endianness The module defines a symbol to identify the host CPU endianness: ::VL_ARCH_BIG_ENDIAN for big endian and ::VL_ARCH_LITTLE_ENDIAN for little endian. The functions ::vl_swap_host_big_endianness_8(), ::vl_swap_host_big_endianness_4(), ::vl_swap_host_big_endianness_2() to change the endianness of data (from/to host and network order). Recall that endianness concerns the way multi-byte data types (such as 16, 32 and 64 bits integers) are stored into the addressable memory. All CPUs uses a contiguous address range to store atomic data types (e.g. a 16-bit integer could be assigned to the addresses 0x10001 and 0x10002), but the order may differ. - The convention is big endian, or in network order, if the most significant byte of the multi-byte data types is assigned to the smaller memory address. This is the convention used for instance by the PPC architecture. - The convention is little endian if the least significant byte is assigned to the smaller memory address. This is the convention used for instance by the x86 architecture. @remark The names “big endian” and “little endian” are a little confusing. “Big endian” means “big endian first”, i.e. the address of the most significant byte comes first. Similarly, “little endian” means “little endian first”, in the sense that the address of the least significant byte comes first. Endianness is a concern when data is either exchanged with processors that use different conventions, transmitted over a network, or stored to a file. For the latter two cases, one usually saves data in big endian (network) order regardless of the host CPU. @section host-threads Multi-threading The file defines #VL_THREADS_WIN if multi-threading support is enabled and the host supports Windows threads and #VL_THREADS_POSIX if it supports POSIX threads. **/ /** @def VL_OS_LINUX ** @brief Defined if the host operating system is Linux. **/ /** @def VL_OS_MACOSX ** @brief Defined if the host operating system is Mac OS X. **/ /** @def VL_OS_WIN ** @brief Defined if the host operating system is Windows (32 or 64) **/ /** @def VL_OS_WIN64 ** @brief Defined if the host operating system is Windows-64. **/ /** @def VL_COMPILER_GNUC ** @brief Defined if the host compiler is GNU C. ** ** This macro is defined if the compiler is GNUC. ** Its value is calculated as ** @code ** 10000 * MAJOR + 100 * MINOR + PATCHLEVEL ** @endcode ** @see @ref host-compiler **/ /** @def VL_COMPILER_MSC ** @brief Defined if the host compiler is Microsoft Visual C++. ** @see @ref host-compiler **/ /** @def VL_COMPILER_LCC ** @brief Defined if the host compiler is LCC. ** @deprecated The LCC is not supported anymore. ** @see @ref host-compiler **/ /** @def VL_COMPILER_LLP64 ** @brief Defined if the host compiler data model is LLP64. ** @see @ref host-compiler-data-model **/ /** @def VL_COMPILER_LP64 ** @brief Defined if the host compiler data model is LP64. ** @see @ref host-compiler-data-model **/ /** @def VL_COMPILER_ILP32 ** @brief Defined if the host compiler data model is ILP32. ** @see @ref host-compiler-data-model **/ /** @def VL_INT8_C(x) ** @brief Create an integer constant of the specified width and sign ** @param x integer constant. ** @return @a x with the correct suffix for the given sign and size. ** The suffix used depends on the @ref host-compiler-data-model. ** @par "Example:" ** The macro VL_INT64_C(1234) is expanded as @c 123L in ** a LP64 system and as @c 123LL in a LLP64 system. **/ /** @def VL_INT16_C(x) ** @copydoc VL_INT8_C */ /** @def VL_INT32_C(x) ** @copydoc VL_INT8_C */ /** @def VL_INT64_C(x) ** @copydoc VL_INT8_C */ /** @def VL_UINT8_C(x) ** @copydoc VL_INT8_C */ /** @def VL_UINT16_C(x) ** @copydoc VL_INT8_C */ /** @def VL_UINT32_C(x) ** @copydoc VL_INT8_C */ /** @def VL_UINT64_C(x) ** @copydoc VL_INT8_C */ /** @def VL_ARCH_IX86 ** @brief Defined if the host CPU is of the Intel x86 family. ** @see @ref host-arch **/ /** @def VL_ARCH_IA64 ** @brief Defined if the host CPU is of the Intel Architecture-64 family. ** @see @ref host-arch **/ /** @def VL_ARCH_LITTLE_ENDIAN ** @brief Defined if the host CPU is little endian ** @see @ref host-arch-endianness **/ /** @def VL_ARCH_BIG_ENDIAN ** @brief Defined if the host CPU is big endian ** @see @ref host-arch-endianness **/ /** @def VL_INLINE ** @brief Adds appropriate inline function qualifier ** @see @ref host-compiler-other **/ /** @def VL_EXPORT ** @brief Declares a DLL exported symbol ** @see @ref host-compiler-other **/ /** @def VL_DISABLE_SSE2 ** @brief Defined if SSE2 support if disabled ** ** Define this symbol during compliation of the library and linking ** to another project to disable VLFeat SSE2 support. **/ /** @def VL_DISABLE_THREADS ** @brief Defined if multi-threading support is disabled ** ** Define this symbol during compilation of the library and linking ** to another project to disable VLFeat multi-threading support. **/ /** @def VL_DISABLE_OPENMP ** @brief Defined if OpenMP support is disabled ** ** Define this symbol during compilation of the library and linking ** to another project to disable VLFeat OpenMP support. **/ /** @def VL_THREADS_WIN ** @brief Defined if the host uses Windows threads. ** @see @ref host-threads **/ /** @def VL_THREADS_POSIX ** @brief Defiend if the host uses POISX threads. ** @see @ref host-threads **/ /** --------------------------------------------------------------- */ #include "host.h" #include "generic.h" #include #if defined(VL_ARCH_IX86) || defined(VL_ARCH_IA64) || defined(VL_ARCH_X64) #define HAS_CPUID #else #undef HAS_CPUID #endif #if defined(HAS_CPUID) & defined(VL_COMPILER_MSC) #include VL_INLINE void _vl_cpuid (vl_int32* info, int function) { __cpuid(info, function) ; } #endif #if defined(HAS_CPUID) & defined(VL_COMPILER_GNUC) VL_INLINE void _vl_cpuid (vl_int32* info, int function) { #if defined(VL_ARCH_IX86) && (defined(__PIC__) || defined(__pic__)) /* This version is compatible with -fPIC on x386 targets. This special * case is required becaus * on such platform -fPIC alocates ebx as global offset table pointer. * Note that =r below will be mapped to a register different from ebx, * so the code is sound. */ __asm__ __volatile__ ("pushl %%ebx \n" /* save %ebx */ "cpuid \n" "movl %%ebx, %1 \n" /* save what cpuid just put in %ebx */ "popl %%ebx \n" /* restore the old %ebx */ : "=a"(info[0]), "=r"(info[1]), "=c"(info[2]), "=d"(info[3]) : "a"(function) : "cc") ; /* clobbered (cc=condition codes) */ #else /* no -fPIC or -fPIC with a 64-bit target */ __asm__ __volatile__ ("cpuid" : "=a"(info[0]), "=b"(info[1]), "=c"(info[2]), "=d"(info[3]) : "a"(function) : "cc") ; #endif } #endif void _vl_x86cpu_info_init (VlX86CpuInfo *self) { vl_int32 info [4] ; int max_func = 0 ; _vl_cpuid(info, 0) ; max_func = info[0] ; self->vendor.words[0] = info[1] ; self->vendor.words[1] = info[3] ; self->vendor.words[2] = info[2] ; if (max_func >= 1) { _vl_cpuid(info, 1) ; self->hasMMX = info[3] & (1 << 23) ; self->hasSSE = info[3] & (1 << 25) ; self->hasSSE2 = info[3] & (1 << 26) ; self->hasSSE3 = info[2] & (1 << 0) ; self->hasSSE41 = info[2] & (1 << 19) ; self->hasSSE42 = info[2] & (1 << 20) ; self->hasAVX = info[2] & (1 << 28) ; } } char * _vl_x86cpu_info_to_string_copy (VlX86CpuInfo const *self) { char * string = 0 ; int length = 0 ; while (string == 0) { if (length > 0) { string = vl_malloc(sizeof(char) * length) ; if (string == NULL) break ; } length = snprintf(string, length, "%s%s%s%s%s%s%s%s", self->vendor.string, self->hasMMX ? " MMX" : "", self->hasSSE ? " SSE" : "", self->hasSSE2 ? " SSE2" : "", self->hasSSE3 ? " SSE3" : "", self->hasSSE41 ? " SSE41" : "", self->hasSSE42 ? " SSE42" : "", self->hasAVX ? " AVX" : "") ; length += 1 ; } return string ; } /** ------------------------------------------------------------------ ** @brief Human readable static library configuration ** @return a new string with the static configuration. ** ** The string includes information about the compiler, the host, and ** other static configuration parameters. The string must be released ** by ::vl_free. **/ VL_EXPORT char * vl_static_configuration_to_string_copy () { char const * hostString = #ifdef VL_ARCH_X64 "X64" #endif #ifdef VL_ARCH_IA64 "IA64" #endif #ifdef VL_ARCH_IX86 "IX86" #endif #ifdef VL_ARCH_PPC "PPC" #endif ", " #ifdef VL_ARCH_BIG_ENDIAN "big_endian" #endif #ifdef VL_ARCH_LITTLE_ENDIAN "little_endian" #endif ; char compilerString [1024] ; char const * libraryString = #ifndef VL_DISABLE_THREADS #ifdef VL_THREADS_WIN "Windows_threads" #elif VL_THREADS_POSIX "POSIX_threads" #endif #else "No_threads" #endif #ifndef VL_DISABLE_SSE2 ", SSE2" #endif #if defined(_OPENMP) ", OpenMP" #endif ; snprintf(compilerString, 1024, #ifdef VL_COMPILER_MSC "Microsoft Visual C++ %d" #define v VL_COMPILER_MSC #endif #ifdef VL_COMPILER_GNUC "GNU C %d" #define v VL_COMPILER_GNUC #endif " " #ifdef VL_COMPILER_LP64 "LP64" #endif #ifdef VL_COMPILER_LLP64 "LP64" #endif #ifdef VL_COMPILER_ILP32 "ILP32" #endif , v) ; { char * string = 0 ; int length = 0 ; while (string == 0) { if (length > 0) { string = vl_malloc(sizeof(char) * length) ; if (string == NULL) break ; } length = snprintf(string, length, "%s, %s, %s", hostString, compilerString, libraryString) ; length += 1 ; } return string ; } } vlfeat/vl/generic.c0000644000175000017500000014762612237004745013172 0ustar dimadima/** @file generic.c ** @brief Generic - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. Copyright (C) 2013 Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @mainpage Vision Lab Features Library (VLFeat) @version __VLFEAT_VERSION__ @author The VLFeat Team @par Copyright © 2007-11 Andrea Vedaldi and Brian Fulkerson @par Copyright © 2012-13 The VLFeat Authors The VLFeat C library implements common computer vision algorithms, with a special focus on visual features, as used in state-of-the-art object recognition and image matching applications. VLFeat strives to be clutter-free, simple, portable, and well documented. @section main-contents Contents - **Visual feature detectors and descriptors** - @subpage sift - @subpage dsift - @subpage mser - @subpage covdet - @subpage scalespace - @subpage hog - @subpage fisher - @subpage vlad - @subpage liop - **Clustering and indexing** - @subpage kmeans - @subpage ikmeans.h "Integer K-means (IKM)" - @subpage hikmeans.h "Hierarchical Integer K-means (HIKM)" - @subpage gmm - @subpage aib - @subpage kdtree - **Segmentation** - @subpage slic - @subpage quickshift - **Statistical methods** - @subpage aib - @subpage homkermap - @subpage svm - **Utilities** - @subpage random - @subpage mathop.h "Math operations" - @subpage stringop.h "String operations" - @subpage imopv.h "Image operations" - @subpage pgm.h "PGM image format" - @subpage heap-def.h "Generic heap object (priority queue)" - @subpage rodrigues.h "Rodrigues formula" - @subpage mexutils.h "MATLAB MEX helper functions" - @subpage getopt_long.h "Drop-in @c getopt_long replacement" - **General support functionalities** - @subpage generic - @subpage portability - @ref resources - @subpage objects - @ref threads - @subpage matlab - @subpage metaprogram - @subpage dev - @subpage glossary **/ /** @page resources Memory and resource handling @author Andrea Vedaldi Some VLFeat functions return pointers to memory blocks or objects. Only ::vl_malloc, ::vl_calloc, ::vl_realloc and functions whose name contains either the keywords @c new or @c copy transfer the ownership of the memory block or object to the caller. The caller must dispose explicitly of all the resources it owns (by calling ::vl_free for a memory block, or the appropriate deletion function for an object). The memory allocation functions can be customized by ::vl_set_alloc_func (which sets the implementations of ::vl_malloc, ::vl_realloc, ::vl_calloc and ::vl_free). Remapping the memory allocation functions can be done only if there are no currently allocated VLFeat memory blocks or objects -- thus typically at the very beginning of a program. The memory allocation functions are a global property, shared by all threads. VLFeat uses three rules that simplify handling exceptions when used in combination which certain environment such as MATLAB. - The library allocates local memory only through the reprogrammable ::vl_malloc, ::vl_calloc, and ::vl_realloc functions. - The only resource referenced by VLFeat objects is memory (for instance, it is illegal for an object to reference an open file). Other resources such as files or threads may be allocated within a VLFeat function call, but they are all released before the function ends, or their ownership is directly transferred to the caller. - The global library state is an exception. It cannot reference any local object created by the caller and uses the standard C memory allocation functions. In this way, the VLFeat local state can be reset at any time simply by disposing of all the memory allocated by the library so far. The latter can be done easily by mapping the memory allocation functions to implementations that track the memory blocks allocated, and then disposing of all such blocks. Since the global state does not reference any local object nor uses the remapped memory functions, it is unaffected by such an operation; conversely, since no VLFeat object references anything but memory, this guarantees that all allocated resources are properly disposed (avoiding leaking resource). This is used extensively in the design of MATLAB MEX files (see @ref matlab). **/ /** @page objects Objects @author Andrea Vedaldi @tableofcontents Many VLFeat algorithms are available in the form of *objects*. The C language, used by VLFeat, does not support objects explicitly. Here an object is intended a C structure along with a number of functions (the object member functions or methods) operating on it. Ideally, the object data structure is kept opaque to the user, for example by defining it in the @c .c implementation files which are not accessible to the library user. Object names are capitalized and start with the Vl prefix (for example @c VlExampleObject). Object methods are lowercase and start with the vl__ suffix (e.g. @c vl_example_object_new). @section objects-lifecycle Object lifecycle Conceptually, an object undergoes four phases during its lifecylce: allocation, initialization, finalization, and deallocation: - **Allocation.** The memory to hold the object structure is allocated. This is usually done by calling a memory allocation function such as ::vl_calloc to reserve an object of the required size @c sizeof(VlExampleObject). Alternatively, the object can simply by allocated on the stack by declaring a local variable of type VlExampleObject. - **Initialization.** The object is initialized by assigning a value to its data members and potentially allocating a number of resources, including other objects or memory buffers. Initialization is done by methods containing the @c init keyword, e.g. @c vl_example_object_init. Several such methods may be provided. - **Finalization.** Initialization is undone by finalization, whose main purpose is to release any resource allocated and still owned by the object. Finalization is done by the @c vl_example_object_finalize method. - **Deallocation.** The memory holding the object structure is disposed of, for example by calling ::vl_free or automatically when the corresponding local variable is popped from the stack. In practice, most VlFeat object are supposed to be created on the heap. To this end, allocation/initialization and finalization/deallocation are combined into two operations: - **Creating a new object.** This allocates a new object on the heap and initializes it, combining allocation and initialization in a single operation. It is done by methods containing the @c new keyword, e.g. @c vl_example_object_new. - **Deleting an object.** This disposes of an object created by a @c new method, combining finalization and deallocation, for example @c vl_example_object_delete. @section objects-getters-setters Getters and setters Most objects contain a number of methods to get (getters) and set (setters) properties. These should contain the @c get and @c set keywords in their name, for example @code double x = vl_example_object_get_property () ; vl_example_object_set_property(x) ; @endcode **/ /** @page matlab MATLAB integration @author Andrea Vedaldi The VLFeat C library is designed to integrate seamlessly with MATLAB. Binary compatibility is simplified by the use of the C language (rather than C++). In addition, the library design follows certain restrictions that make it compatible with the MATLAB MEX interface. The main issue in calling a library function from a MATLAB MEX function is that MATLAB can abort the execution of the MEX function at any point, either due to an error, or directly upon a user request (Ctrl-C) (empirically, however, a MEX function seems to be incorruptible only during the invocation of certain functions of the MEX API such as @c mexErrMsgTxt). When a MEX function is interrupted, resources (memory blocks or objects) whose ownership was transferred from VLFeat to the MEX function may be leaked. Notice that interrupting a MEX function would similarly leak any memory block allocated within the MEX function. To solve this issue, MATLAB provides his own memory manager (@c mxMalloc, @c mxRealloc, ...). When a MEX file is interrupted or ends, all memory blocks allocated by using one of such functions are released, preventing leakage. In order to integrate VLFeat with this model in the most seamless way, VLFeat memory allocation functions (::vl_malloc, ::vl_realloc, ::vl_calloc) are mapped to the corresponding MEX memory allocation functions. Such functions automatically dispose of all the memory allocated by a MEX function when the function ends (even because of an exception). Because of the restrictions of the library design illustrated in @ref resources, this operation is safe and correctly dispose of VLFeat local state. As a consequence, it is possible to call @c mexErrMsgTxt at any point in the MEX function without worring about leaking resources. This however comes at the price of some limitations. Beyond the restrictions illustred in @ref resources, here we note that no VLFeat local resoruce (memory blocks or objects) can persist across MEX file invocations. This implies that any result produced by a VLFeat MEX function must be converted back to a MATLAB object such as a vector or a structure. In particular, there is no direct way of creating an object within a MEX file, returning it to MATLAB, and passing it again to another MEX file. **/ /** @page metaprogram Preprocessor metaprogramming @author Andrea Vedaldi Part of VLFeat code uses a simple form of perprocessor metaprogramming. This technique is used, similarly to C++ templates, to instantiate multiple version of a given algorithm for different data types (e.g. @c float and @c double). In most cases preprocessor metaprogramming is invisible to the library user, as it is used only internally. **/ /** @page glossary Glossary - Column-major. A M x N matrix A is stacked with column-major order as the sequence \f$(A_{11}, A_{21}, \dots, A_{12}, \dots)\f$. More in general, when stacking a multi dimensional array this indicates that the first index is the one varying most quickly, with the other followed in the natural order. - Opaque structure. A structure is opaque if the user is not supposed to access its member directly, but through appropriate interface functions. Opaque structures are commonly used to define objects. - Row-major. A M x N matrix A is stacked with row-major order as the sequence \f$(A_{11}, A_{12}, \dots, A_{21}, \dots)\f$. More in general, when stacking a multi dimensional array this indicates that the last index is the one varying most quickly, with the other followed in reverse order. - Feature frame. A feature frame is the geometrical description of a visual features. For instance, the frame of a @ref sift.h "SIFT feature" is oriented disk and the frame of @ref mser.h "MSER feature" is either a compact and connected set or a disk. - Feature descriptor. A feature descriptor is a quantity (usually a vector) which describes compactly the appearance of an image region (usually corresponding to a feature frame). **/ /** @page dev Developing the library @tableofcontents This page contains information useful to the developer of VLFeat. @section dev-copy Copyright A short copyright notice is added at the beginning of each file. For example:
    Copyright (C) 2013 Milan Sulc
    Copyright (C) 2012 Daniele Perrone.
    Copyright (C) 2011-13 Andrea Vedaldi.
    All rights reserved.
    
    This file is part of the VLFeat library and is made available under
    the terms of the BSD license (see the COPYING file).
    
    The copyright of each file is assigned to the authors of the file. Every author making a substantial contribution to a file should note its copyright by adding a line to the copyright list with the year of the modification. Year ranges are acceptable. Lines are never deleted, only appended, or potentially modified to list more years. @section dev-style Coding style
    • Look at existing code before you start. The general rule is: try to match the style of the existing code as much as possible.
    • No white spaces at the end of lines. White spaces introduce invisible changes in the code that are however picked up by control version systems such as Git.
    • Descriptive variable names. Most variable names start with a lower case letter and are capitalized, e.g., @c numElements. Only the following abbreviations are considered acceptable: @c num. The @c dimension of a vector is the number of elements it contains (for other objects that could be a @c size, a @c length, or a @c numElements). For multi-dimensional arrays, @c dimensions could indicate the array with each of the @c numDimensions dimensions.
    • Short variable names. For indexes in short for loops it is fine to use short index names such as @c i, @c j, and @c k. For example:
      for (i = 0 ; i < numEntries ; ++i) values[i] ++ ;
      
      is considered acceptable.
    • Function arguments. VLFeat functions that operate on an object (member functions) should be passed the object address as first argument; this argument should be called @c self. For example:
         void vl_object_do_something(VlObject *self) ;
      
      Multi-dimensional arrays should be specified first by their address, and then by their dimensions. For example
        void vl_use_array (float * array, vl_size numColumns, vl_size numRows) ; // good
        void vl_use_array (vl_size numColumns, vl_size numRows, float * array) ; // bad
      
      Arguments that are used as outputs should be specified first (closer to the left-hand side of an expression). For example
       void vl_sum_numbers (float * output, float input1, float input2) ; // good
       void vl_sum_numbers (float input1, float input2, float * output) ; // bad
      
      These rules can be combined. For example
       void vl_object_sum_to_array (VlObject * self, float * outArray,
              vl_size numColumns, vl_size numRows, float * inArray) ; // good
      
      Note that in this case no dimension for @c inArray is specified as it is assumed that @c numColumns and @c numRows are the dimensions of both arrays.
    @subsection dev-style-matlab MATLAB coding style
    • Help messages. Each @c .m file should include a standard help comment block (accessible from MATLAB @c help() command). The first line of the block has a space, the name of the function, 4 spaces, and a brief command description. The body of the help message is indented with 4 spaces. For example @code % VL_FUNCTION An example function % VL_FUNCTION() does nothing. @endcode The content HELP message itself should follow MATLAB default style. For example, rather than giving a list of formal input and output arguments as often done, one simply shows how to use the function, explaining along the way the different ways the function can be called and the format of the parameters.
    @section dev-doc Documenting the code The VLFeat C library code contains its own in documentation Doxygen format. The documentation consists in generic pages, such as the @ref index "index" and the page you are reading, and documentations for each library module, usually corresponding to a certain header file. - **Inline comments.** Inline Doxygen comments are discouraged except in the documentation of data members of structures. They start with a capital letter and end with a period. For example: @code struct VlExampleStructure { int aMember ; /\*\*< A useful data member. } @endcode - **Brief comments.** Brief Doxygen comments starts by a capital and end with a period. The documentation of all functions start with a brief comment. @subsection devl-doc-modules Documenting the library modules A library module groups a number of data types and functions that implement a certain functionaltiy of VLFeat. The documentation of a library module is generally organized as follows: 1. A page introducing the module and including a getting started section (3.g. @ref svm-starting) containing a short tutorial to quickly familiarize the user with the module (e.g. @ref svm). 2. One or more pages of detailed technical background discussing the algorithms implemented. These sections are used not just as part of the C API, but also as documentation for other APIs such as MATLAB (e.g. @ref svm-fundamentals). 3. One or more pages with the structure and function documentation (e.g. @ref svm.h). More in detail, consider a module called Example Module. Then one would typically have:
    • A header or declaration file @c example-module.h. Such a file has an heading of the type: @verbinclude example-module-doc.h This comment block contains a file directive, causing the file to be included in the documentation, a brief directive, specifying a short description of what the file is, and a list of authors. A (non-Doxygen) comment block with a short the copyright notice follows. The brief directive should include a @@ref directive to point to the main documentation page describing the module, if there is one.
    • An implementation or definition file @c example-module.c. This file has an heading of the type: @verbinclude example-module-doc.c This is similar to the declearation file, except for the content of the brief comment.
    @subsection devl-doc-functions Documenting functions @subsection devl-doc-structures Documenting structures @subsection devl-doc-structures Documenting objects As seen in @ref objects, VLFeat treats certain structures with an object-like semantics. Usually, a module defines exactly one such objects. In this case, the object member functions should be grouped (by using Doxygen grouping functionality) as - **Construct and destroy** for the @c vl_object_new, @c vl_object_delete and similar member functions. - **Set parameters** for setter functions. - **Retrieve parameters and data** for getter functions. - **Process data** for functions processing data. @subsection devl-doc-bib Bibliographic references Since version 0.9.14, the VLFeat C library documentation makes use of a proper bibliographic reference in BibTeX format (see the file @c docsrc/vlfeat.bib). Doxygen uses this file when it sees instances of the @@cite{xyz} command. Here @c xyz is a BibTeX key. For example, @c vlfeat.bib file contains the entry:
    @@inproceedings{martin97the-det-curve,
    	Author = {A. Martin and G. Doddington and T. Kamm and M. Ordowski and M. Przybocki},
    	Booktitle = {Proc. Conf. on Speech Communication and Technology},
    	Title = {The {DET} curve in assessment of detection task performance},
    	Year = {1997}}
    
    For example, the Doxygen directive @@cite{martin97the-det-curve} generates the output @cite{martin97the-det-curve}, which is a link to the corresponding entry in the bibliography. **/ /** @file generic.h @page generic General support functionalities @author Andrea Vedaldi VLFeat contains several support functionalities addressing the C preprocessors, using multiple threads (including parallel computations), handling errors, allocating memory, etc. These are described in the following pages: - @subpage resources - @subpage threads - @subpage misc **/ /** @page misc Preprocssor, library state, etc. @author Andrea Vedaldi @tableofcontents @section misc-preproc C preprocessor helpers VLFeat provides a few C preprocessor macros of general utility. These include stringification (::VL_STRINGIFY, ::VL_XSTRINGIFY) and concatenation (::VL_CAT, ::VL_XCAT) of symbols. @section misc-state VLFeat state and configuration parameters VLFeat has some global configuration parameters that can changed. Changing the configuration is thread unsave (@ref threads). Use ::vl_set_simd_enabled to toggle the use of a SIMD unit (Intel SSE code), ::vl_set_alloc_func to change the memory allocation functions, and ::vl_set_printf_func to change the logging function. @section misc-error Error handling Some VLFeat functions signal errors in a way similar to the standard C library. In case of error, a VLFeat function may return an error code directly, or an invalid result (for instance a negative file descriptor or a null pointer). Then ::vl_get_last_error and ::vl_get_last_error_message can be used to retrieve further details about the error (these functions should be used right after an error has occurred, before any other VLFeat call). @section misc-memory Memory allocation VLFeat uses the ::vl_malloc, ::vl_realloc, ::vl_calloc and ::vl_free functions to allocate memory. Normally these functions are mapped to the underlying standard C library implementations. However ::vl_set_alloc_func can be used to map them to other implementations. For instance, in MATALB MEX files these functions are mapped to the MATLAB equivalent which has a garbage collection mechanism to cope with interruptions during execution. @section misc-logging Logging VLFeat uses the macros ::VL_PRINT and ::VL_PRINTF to print progress or debug informations. These functions are normally mapped to the @c printf function of the underlying standard C library. However ::vl_set_printf_func can be used to map it to a different implementation. For instance, in MATLAB MEX files this function is mapped to @c mexPrintf. Setting the function to @c NULL disables logging. @section misc-time Measuring time VLFeat provides ::vl_tic and ::vl_toc as an easy way of measuring elapsed time. **/ /** @page threads Threading @tableofcontents VLFeat supports for threaded computations can be used to take advantage of multi-core architectures. Threading support includes: - Supporting using VLFeat functions and objects from multiple threads simultaneously. This is discussed in @ref threads-multiple. - Using multiple cores to accelerate computations. This is discussed in @ref threads-parallel. @section threads-multiple Using VLFeat from multiple threads VLFeat can be used from multiple threads simultaneously if proper rules are followed. - A VLFeat object instance is accessed only from one thread at any given time. Functions operating on objects (member functions) are conditionally thread safe: the same function may be called simultaneously from multiple threads provided that it operates on different, independent objects. However, modifying the same object from multiple threads (using the same or different member functions) is possible only from one thread at any given time, and should therefore be synchronized. Certain VLFeat objects may contain features specific to simplify multi-threaded operations (e.g. ::VlKDForest). - Thread-safe global functions are used. These include thread-specific operations such as retrieving the last error by ::vl_get_last_error and obtaining the thread-specific random number generator instance by ::vl_get_rand. In these cases, the functions operate on thread-specific data that VLFeat creates and maintains. Note in particular that each thread has an independent default random number generator (as returned by ::vl_get_rand). VLFeat objects that involve using random numbers will typically use the random number generator of the thread currently accessing the object (although an object-specific generator can be often be specified instead). - Any other global function is considered non-thread safe and is accessed exclusively by one thread at a time. A small number of operations are non-reentrant and affect all threads simultaneously. These are restricted to changing certain global configuration parameters, such as the memory allocation functions by ::vl_set_alloc_func. These operations are not thread safe and are preferably executed before multiple threads start to operate with the library. @section threads-parallel Parallel computations VLFeat uses OpenMP to implement parallel computations. VLFeat avoids changing OpenMP global state, such as the desired number of computational threads, as this may affect the rest of the application (e.g. MATLAB) in undesriable ways. Instead, it duplicates OpenMP controls when appropriate (this is similar to the method used by other libraries such as Intel MKL). The maximum number of threads available to the application can be obtained by ::vl_get_thread_limit. This limit is controlled by the OpenMP library (the function is a wrapper around @c omp_get_thread_limit), which in turn may determined that based on the number of computational cores or the value of the @c OMP_THREAD_LIMIT variable when the program is launched. The desired number of computational threads is set by ::vl_set_num_threads() and retrieved by ::vl_get_max_threads(). This number is a target value as well as an upper bound to the number of threads used by VLFeat. @c vl_set_num_threads(1) disables the use of multiple threads and @c vl_set_num_threads(0) uses OpenMP value (retrieved by calling @c omp_get_max_threads()). The actual number used in a specific computation is decided by OpenMP based on the number of threads available, accounting for example for nested parallelism when appropriate. @sa http://software.intel.com/sites/products/documentation/doclib/mkl_sa/11/mkl_userguide_win/GUID-C2295BC8-DD22-466B-94C9-5FAA79D4F56D.htm http://software.intel.com/sites/products/documentation/doclib/mkl_sa/11/mkl_userguide_win/index.htm#GUID-DEEF0363-2B34-4BAB-87FA-A75DBE842040.htm http://software.intel.com/sites/products/documentation/hpc/mkl/lin/MKL_UG_managing_performance/Using_Additional_Threading_Control.htm **/ #include "generic.h" #include #include #include #include #include #if defined(VL_OS_WIN) #include #endif #if ! defined(VL_DISABLE_THREADS) && defined(VL_THREADS_POSIX) #include #endif #if defined(VL_OS_MACOSX) || defined(VL_OS_LINUX) #include #endif #if defined(_OPENMP) #include #endif /* ---------------------------------------------------------------- */ /* Global and thread states */ /* ---------------------------------------------------------------- */ /* Thread state */ typedef struct _VlThreadState { /* errors */ int lastError ; char lastErrorMessage [VL_ERR_MSG_LEN] ; /* random number generator */ VlRand rand ; /* time */ #if defined(VL_OS_WIN) LARGE_INTEGER ticFreq ; LARGE_INTEGER ticMark ; #else clock_t ticMark ; #endif } VlThreadState ; /* Gobal state */ typedef struct _VlState { /* The thread state uses either a mutex (POSIX) or a critical section (Win) */ #if defined(VL_DISABLE_THREADS) VlThreadState * threadState ; #else #if defined(VL_THREADS_POSIX) pthread_key_t threadKey ; pthread_mutex_t mutex ; pthread_t mutexOwner ; pthread_cond_t mutexCondition ; size_t mutexCount ; #elif defined(VL_THREADS_WIN) DWORD tlsIndex ; CRITICAL_SECTION mutex ; #endif #endif /* VL_DISABLE_THREADS */ /* Configurable functions */ int (*printf_func) (char const * format, ...) ; void *(*malloc_func) (size_t) ; void *(*realloc_func) (void*,size_t) ; void *(*calloc_func) (size_t, size_t) ; void (*free_func) (void*) ; #if defined(VL_ARCH_IX86) || defined(VL_ARCH_X64) || defined(VL_ARCH_IA64) VlX86CpuInfo cpuInfo ; #endif vl_size numCPUs ; vl_bool simdEnabled ; vl_size numThreads ; } VlState ; /* Global state instance */ VlState _vl_state ; /* ----------------------------------------------------------------- */ VL_INLINE VlState * vl_get_state () ; VL_INLINE VlThreadState * vl_get_thread_specific_state () ; static void vl_lock_state (void) ; static void vl_unlock_state (void) ; static VlThreadState * vl_thread_specific_state_new (void) ; static void vl_thread_specific_state_delete (VlThreadState * self) ; /** @brief Get VLFeat version string ** @return the library version string. **/ char const * vl_get_version_string () { return VL_VERSION_STRING ; } /** @brief Get VLFeat configuration string. ** @return a new configuration string. ** ** The function returns a new string containing a human readable ** description of the library configuration. **/ char * vl_configuration_to_string_copy () { char * string = 0 ; int length = 0 ; char * staticString = vl_static_configuration_to_string_copy() ; char * cpuString = #if defined(VL_ARCH_IX86) || defined(VL_ARCH_X64) || defined(VL_ARCH_IA64) _vl_x86cpu_info_to_string_copy(&vl_get_state()->cpuInfo) ; #else "Generic CPU" ; #endif #if defined(DEBUG) int const debug = 1 ; #else int const debug = 0 ; #endif while (string == 0) { if (length > 0) { string = vl_malloc(sizeof(char) * length) ; if (string == NULL) break ; } length = snprintf(string, length, "VLFeat version %s\n" " Static config: %s\n" " %" VL_FMT_SIZE " CPU(s): %s\n" #if defined(_OPENMP) " OpenMP: max threads: %d (library: %" VL_FMT_SIZE ")\n" #endif " Debug: %s\n", vl_get_version_string (), staticString, vl_get_num_cpus(), cpuString, #if defined(_OPENMP) omp_get_max_threads(), vl_get_max_threads(), #endif VL_YESNO(debug)) ; length += 1 ; } if (staticString) vl_free(staticString) ; if (cpuString) vl_free(cpuString) ; return string ; } /** @internal @brief A printf that does not do anything */ static int do_nothing_printf (char const* format VL_UNUSED, ...) { return 0 ; } /** @internal@brief Lock VLFeat state ** ** The function locks VLFeat global state mutex. ** ** The mutex is recursive: locking multiple times from the same thread ** is a valid operations, but requires an equivalent number ** of calls to ::vl_unlock_state. ** ** @sa ::vl_unlock_state **/ static void vl_lock_state (void) { #if ! defined(VL_DISABLE_THREADS) #if defined(VL_THREADS_POSIX) VlState * state = vl_get_state () ; pthread_t thisThread = pthread_self () ; pthread_mutex_lock (&state->mutex) ; if (state->mutexCount >= 1 && pthread_equal (state->mutexOwner, thisThread)) { state->mutexCount ++ ; } else { while (state->mutexCount >= 1) { pthread_cond_wait (&state->mutexCondition, &state->mutex) ; } state->mutexOwner = thisThread ; state->mutexCount = 1 ; } pthread_mutex_unlock (&state->mutex) ; #elif defined(VL_THREADS_WIN) EnterCriticalSection (&vl_get_state()->mutex) ; #endif #endif } /** @internal@brief Unlock VLFeat state ** ** The function unlocks VLFeat global state mutex. ** ** @sa ::vl_lock_state **/ static void vl_unlock_state (void) { #if ! defined(VL_DISABLE_THREADS) #if defined(VL_THREADS_POSIX) VlState * state = vl_get_state () ; pthread_mutex_lock (&state->mutex) ; -- state->mutexCount ; if (state->mutexCount == 0) { pthread_cond_signal (&state->mutexCondition) ; } pthread_mutex_unlock (&state->mutex) ; #elif defined(VL_THREADS_WIN) LeaveCriticalSection (&vl_get_state()->mutex) ; #endif #endif } /** @internal@brief Return VLFeat global state ** ** The function returns a pointer to VLFeat global state. ** ** @return pointer to the global state structure. **/ VL_INLINE VlState * vl_get_state (void) { return &_vl_state ; } /** @internal@brief Get VLFeat thread state ** @return pointer to the thread state structure. ** ** The function returns a pointer to VLFeat thread state. **/ VL_INLINE VlThreadState * vl_get_thread_specific_state (void) { #ifdef VL_DISABLE_THREADS return vl_get_state()->threadState ; #else VlState * state ; VlThreadState * threadState ; vl_lock_state() ; state = vl_get_state() ; #if defined(VL_THREADS_POSIX) threadState = (VlThreadState *) pthread_getspecific(state->threadKey) ; #elif defined(VL_THREADS_WIN) threadState = (VlThreadState *) TlsGetValue(state->tlsIndex) ; #endif if (! threadState) { threadState = vl_thread_specific_state_new () ; } #if defined(VL_THREADS_POSIX) pthread_setspecific(state->threadKey, threadState) ; #elif defined(VL_THREADS_WIN) TlsSetValue(state->tlsIndex, threadState) ; #endif vl_unlock_state() ; return threadState ; #endif } /* ---------------------------------------------------------------- */ /** @brief Get the number of CPU cores of the host ** @return number of CPU cores. **/ vl_size vl_get_num_cpus (void) { return vl_get_state()->numCPUs ; } /** @fn ::vl_set_simd_enabled(vl_bool) ** @brief Toggle usage of SIMD instructions ** @param x @c true if SIMD instructions are used. ** ** Notice that SIMD instructions are used only if the CPU model ** supports them. Note alsoc that data alignment may restrict the use ** of such instructions. ** ** @see ::vl_cpu_has_sse2(), ::vl_cpu_has_sse3(), etc. **/ void vl_set_simd_enabled (vl_bool x) { vl_get_state()->simdEnabled = x ; } /** @brief Are SIMD instructons enabled? ** @return @c true if SIMD instructions are enabled. **/ vl_bool vl_get_simd_enabled (void) { return vl_get_state()->simdEnabled ; } /** @brief Check for AVX instruction set ** @return @c true if AVX is present. **/ vl_bool vl_cpu_has_avx (void) { #if defined(VL_ARCH_IX86) || defined(VL_ARCH_X64) || defined(VL_ARCH_IA64) return vl_get_state()->cpuInfo.hasAVX ; #else return VL_FALSE ; #endif } /** @brief Check for SSE3 instruction set ** @return @c true if SSE3 is present. **/ vl_bool vl_cpu_has_sse3 (void) { #if defined(VL_ARCH_IX86) || defined(VL_ARCH_X64) || defined(VL_ARCH_IA64) return vl_get_state()->cpuInfo.hasSSE3 ; #else return VL_FALSE ; #endif } /** @brief Check for SSE2 instruction set ** @return @c true if SSE2 is present. **/ vl_bool vl_cpu_has_sse2 (void) { #if defined(VL_ARCH_IX86) || defined(VL_ARCH_X64) || defined(VL_ARCH_IA64) return vl_get_state()->cpuInfo.hasSSE2 ; #else return VL_FALSE ; #endif } /* ---------------------------------------------------------------- */ #if 0 /** @brief Get the number of computational threads available. ** @return number of threads. ** @sa @ref threads-parallel **/ vl_size vl_get_thread_limit (void) { #if defined(_OPENMP) return omp_get_thread_limit() ; #else return 1 ; #endif } #endif /** @brief Get the maximum number of computational threads. ** @return number of threads. ** @sa vl_set_num_threads(), @ref threads-parallel **/ vl_size vl_get_max_threads (void) { #if defined(_OPENMP) return vl_get_state()->numThreads ; #else return 1 ; #endif } /** @brief Set the number of threads targeted for parallel computations. ** @param numThreads number of threads to use. ** @sa vl_get_max_threads(), @ref threads-parallel **/ void vl_set_num_threads ( #if defined(_OPENMP) vl_size numThreads) #else vl_size numThreads VL_UNUSED) #endif { #if defined(_OPENMP) if (numThreads == 0) { numThreads = omp_get_max_threads() ; } vl_get_state()->numThreads = numThreads ; #else return ; #endif } /* ---------------------------------------------------------------- */ /** @brief Set last VLFeat error ** @param error error code. ** @param errorMessage error message format string. ** @param ... format string arguments. ** @return error code. ** ** The function sets the code and optionally the error message ** of the last encountered error. @a errorMessage is the message ** format. It uses the @c printf convention and is followed by ** the format arguments. The maximum lenght of the error message is ** given by ::VL_ERR_MSG_LEN (longer messages are truncated). ** ** Passing @c NULL as @a errorMessage ** sets the error message to the empty string. **/ int vl_set_last_error (int error, char const * errorMessage, ...) { VlThreadState * state = vl_get_thread_specific_state() ; va_list args; va_start(args, errorMessage) ; if (errorMessage) { #ifdef VL_COMPILER_LCC vsprintf(state->lastErrorMessage, errorMessage, args) ; #else vsnprintf(state->lastErrorMessage, sizeof(state->lastErrorMessage)/sizeof(char), errorMessage, args) ; #endif } else { state->lastErrorMessage[0] = 0 ; } state->lastError = error ; va_end(args) ; return error ; } /** @brief Get the code of the last error ** @return error code. ** @sa ::vl_get_last_error_message. **/ int vl_get_last_error (void) { return vl_get_thread_specific_state()->lastError ; } /** @brief Get the last error message ** @return pointer to the error message. ** @sa ::vl_get_last_error. **/ char const * vl_get_last_error_message (void) { return vl_get_thread_specific_state()->lastErrorMessage ; } /* ---------------------------------------------------------------- */ /** @brief Set memory allocation functions ** @param malloc_func pointer to @c malloc. ** @param realloc_func pointer to @c realloc. ** @param calloc_func pointer to @c calloc. ** @param free_func pointer to @c free. **/ void vl_set_alloc_func (void *(*malloc_func) (size_t), void *(*realloc_func) (void*, size_t), void *(*calloc_func) (size_t, size_t), void (*free_func) (void*)) { VlState * state ; vl_lock_state () ; state = vl_get_state() ; state->malloc_func = malloc_func ; state->realloc_func = realloc_func ; state->calloc_func = calloc_func ; state->free_func = free_func ; vl_unlock_state () ; } /** @brief Allocate a memory block ** @param n size in bytes of the new block. ** @return pointer to the allocated block. ** ** This function allocates a memory block of the specified size. ** The synopsis is the same as the POSIX @c malloc function. **/ void * vl_malloc (size_t n) { return (vl_get_state()->malloc_func)(n) ; //return (memalign)(32,n) ; } /** @brief Reallocate a memory block ** @param ptr pointer to a memory block previously allocated. ** @param n size in bytes of the new block. ** @return pointer to the new block. ** ** This function reallocates a memory block to change its size. ** The synopsis is the same as the POSIX @c realloc function. **/ void * vl_realloc (void* ptr, size_t n) { return (vl_get_state()->realloc_func)(ptr, n) ; } /** @brief Free and clear a memory block ** @param n number of items to allocate. ** @param size size in bytes of an item. ** @return pointer to the new block. ** ** This function allocates and clears a memory block. ** The synopsis is the same as the POSIX @c calloc function. **/ void * vl_calloc (size_t n, size_t size) { return (vl_get_state()->calloc_func)(n, size) ; } /** @brief Free a memory block ** @param ptr pointer to the memory block. ** ** This function frees a memory block allocated by ::vl_malloc, ** ::vl_calloc, or ::vl_realloc. The synopsis is the same as the POSIX ** @c malloc function. **/ void vl_free (void *ptr) { (vl_get_state()->free_func)(ptr) ; } /* ---------------------------------------------------------------- */ /** @brief Set the printf function ** @param printf_func pointer to a @c printf implementation. ** Set @c print_func to NULL to disable printf. **/ void vl_set_printf_func (printf_func_t printf_func) { vl_get_state()->printf_func = printf_func ? printf_func : do_nothing_printf ; } /** @brief Get the printf function ** @return printf_func pointer to the @c printf implementation. ** @sa ::vl_set_printf_func. **/ printf_func_t vl_get_printf_func (void) { return vl_get_state()->printf_func ; } /* ---------------------------------------------------------------- */ /** @brief Get processor time ** @return processor time in seconds. ** @sa ::vl_tic, ::vl_toc **/ double vl_get_cpu_time () { #ifdef VL_OS_WIN VlThreadState * threadState = vl_get_thread_specific_state() ; LARGE_INTEGER mark ; QueryPerformanceCounter (&mark) ; return (double)mark.QuadPart / (double)threadState->ticFreq.QuadPart ; #else return (double)clock() / (double)CLOCKS_PER_SEC ; #endif } /** @brief Reset processor time reference ** The function resets VLFeat TIC/TOC time reference. There is one ** such reference per thread. ** @sa ::vl_get_cpu_time, ::vl_toc. **/ void vl_tic (void) { VlThreadState * threadState = vl_get_thread_specific_state() ; #ifdef VL_OS_WIN QueryPerformanceCounter (&threadState->ticMark) ; #else threadState->ticMark = clock() ; #endif } /** @brief Get elapsed time since tic ** @return elapsed time in seconds. ** ** The function ** returns the processor time elapsed since ::vl_tic was called last. ** ** @remark In multi-threaded applications, there is an independent ** timer for each execution thread. ** ** @remark On UNIX, this function uses the @c clock() system call. ** On Windows, it uses the @c QueryPerformanceCounter() system call, ** which is more accurate than @c clock() on this platform. **/ double vl_toc (void) { VlThreadState * threadState = vl_get_thread_specific_state() ; #ifdef VL_OS_WIN LARGE_INTEGER tocMark ; QueryPerformanceCounter(&tocMark) ; return (double) (tocMark.QuadPart - threadState->ticMark.QuadPart) / threadState->ticFreq.QuadPart ; #else return (double) (clock() - threadState->ticMark) / CLOCKS_PER_SEC ; #endif } /* ---------------------------------------------------------------- */ /** @brief Get the default random number generator. ** @return random number generator. ** ** The function returns a pointer to the default ** random number genrator. ** There is one such generator per thread. **/ VL_EXPORT VlRand * vl_get_rand (void) { return &vl_get_thread_specific_state()->rand ; } /* ---------------------------------------------------------------- */ /* Library construction and destruction routines */ /* --------------------------------------------------------------- */ /** @internal@brief Construct a new thread state object ** @return new state structure. **/ static VlThreadState * vl_thread_specific_state_new (void) { VlThreadState * self ; #if defined(DEBUG) printf("VLFeat DEBUG: thread constructor begins.\n") ; #endif self = malloc(sizeof(VlThreadState)) ; self->lastError = 0 ; self->lastErrorMessage[0] = 0 ; #if defined(VL_OS_WIN) QueryPerformanceFrequency (&self->ticFreq) ; self->ticMark.QuadPart = 0 ; #else self->ticMark = 0 ; #endif vl_rand_init (&self->rand) ; return self ; } /** @internal@brief Delete a thread state structure ** @param self thread state object. **/ static void vl_thread_specific_state_delete (VlThreadState * self) { #if defined(DEBUG) printf("VLFeat DEBUG: thread destructor begins.\n") ; #endif free (self) ; } /* ---------------------------------------------------------------- */ /* DLL entry and exit points */ /* ---------------------------------------------------------------- */ /* A constructor and a destructor must be called to initalize or dispose of VLFeat * state when the DLL is loaded or unloaded. This is obtained * in different ways depending on the operating system. */ #if (defined(VL_OS_LINUX) || defined(VL_OS_MACOSX)) && defined(VL_COMPILER_GNUC) static void vl_constructor () __attribute__ ((constructor)) ; static void vl_destructor () __attribute__ ((destructor)) ; #endif #if defined(VL_OS_WIN) static void vl_constructor () ; static void vl_destructor () ; BOOL WINAPI DllMain( HINSTANCE hinstDLL, // handle to DLL module DWORD fdwReason, // reason for calling function LPVOID lpReserved ) // reserved { VlState * state ; VlThreadState * threadState ; switch (fdwReason) { case DLL_PROCESS_ATTACH: /* Initialize once for each new process */ vl_constructor () ; break ; case DLL_THREAD_ATTACH: /* Do thread-specific initialization */ break ; case DLL_THREAD_DETACH: /* Do thread-specific cleanup */ #if ! defined(VL_DISABLE_THREADS) && defined(VL_THREADS_WIN) state = vl_get_state() ; threadState = (VlThreadState*) TlsGetValue(state->tlsIndex) ; if (threadState) { vl_thread_specific_state_delete (threadState) ; } #endif break; case DLL_PROCESS_DETACH: /* Perform any necessary cleanup */ vl_destructor () ; break; } return TRUE ; /* Successful DLL_PROCESS_ATTACH */ } #endif /* VL_OS_WIN */ /* ---------------------------------------------------------------- */ /* Library constructor and destructor */ /* ---------------------------------------------------------------- */ /** @internal @brief Initialize VLFeat state */ static void vl_constructor (void) { VlState * state ; #if defined(DEBUG) printf("VLFeat DEBUG: constructor begins.\n") ; #endif state = vl_get_state() ; #if ! defined(VL_DISABLE_THREADS) #if defined(DEBUG) printf("VLFeat DEBUG: constructing thread specific state.\n") ; #endif #if defined(VL_THREADS_POSIX) { typedef void (*destructorType)(void * ); pthread_key_create (&state->threadKey, (destructorType) vl_thread_specific_state_delete) ; pthread_mutex_init (&state->mutex, NULL) ; pthread_cond_init (&state->mutexCondition, NULL) ; } #elif defined(VL_THREADS_WIN) InitializeCriticalSection (&state->mutex) ; state->tlsIndex = TlsAlloc () ; #endif #else /* threading support disabled */ #if defined(DEBUG) printf("VLFeat DEBUG: constructing the generic thread state instance (threading support disabled).\n") ; #endif vl_get_state()->threadState = vl_thread_specific_state_new() ; #endif state->malloc_func = malloc ; state->realloc_func = realloc ; state->calloc_func = calloc ; state->free_func = free ; state->printf_func = printf ; /* on x86 platforms read the CPUID register */ #if defined(VL_ARCH_IX86) || defined(VL_ARCH_X64) || defined(VL_ARCH_IA64) _vl_x86cpu_info_init (&state->cpuInfo) ; #endif /* get the number of CPUs */ #if defined(VL_OS_WIN) { SYSTEM_INFO info; GetSystemInfo (&info) ; state->numCPUs = info.dwNumberOfProcessors ; } #elif defined(VL_OS_MACOSX) || defined(VL_OS_LINUX) state->numCPUs = sysconf(_SC_NPROCESSORS_ONLN) ; #else state->numCPUs = 1 ; #endif state->simdEnabled = VL_TRUE ; /* get the number of (OpenMP) threads used by the library */ #if defined(_OPENMP) state->numThreads = omp_get_max_threads() ; #else state->numThreads = 1 ; #endif #if defined(DEBUG) printf("VLFeat DEBUG: constructor ends.\n") ; #endif } /** @internal @brief Destruct VLFeat */ static void vl_destructor () { VlState * state ; #if defined(DEBUG) printf("VLFeat DEBUG: destructor begins.\n") ; #endif state = vl_get_state() ; #if ! defined(VL_DISABLE_THREADS) #if defined(DEBUG) printf("VLFeat DEBUG: destroying a thread specific state instance.\n") ; #endif #if defined(VL_THREADS_POSIX) { /* Delete the thread state of this thread as the destructor is not called by pthread_key_delete or after the key is deleted. When the library is unloaded, this thread should also be the last one using the library, so this is fine. */ VlThreadState * threadState = pthread_getspecific(state->threadKey) ; if (threadState) { vl_thread_specific_state_delete (threadState) ; pthread_setspecific(state->threadKey, NULL) ; } } pthread_cond_destroy (&state->mutexCondition) ; pthread_mutex_destroy (&state->mutex) ; pthread_key_delete (state->threadKey) ; #elif defined(VL_THREADS_WIN) { /* Delete the thread state of this thread as the destructor is not called by pthread_key_delete or after the key is deleted. When the library is unloaded, this thread should also be the last one using the library, so this is fine. */ VlThreadState * threadState = TlsGetValue(state->tlsIndex) ; if (threadState) { vl_thread_specific_state_delete (threadState) ; TlsSetValue(state->tlsIndex, NULL) ; } } TlsFree (state->tlsIndex) ; DeleteCriticalSection (&state->mutex) ; #endif #else #if defined(DEBUG) printf("VLFeat DEBUG: destroying the generic thread state instance (threading support disabled).\n") ; #endif vl_thread_specific_state_delete(vl_get_state()->threadState) ; #endif #if defined(DEBUG) printf("VLFeat DEBUG: destructor ends.\n") ; #endif } vlfeat/vl/host.h0000644000175000017500000004117212237004745012525 0ustar dimadima/** @file host.h ** @brief Host ** @author Andrea Vedaldi ** @sa @ref portability **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_HOST_H #define VL_HOST_H /** ------------------------------------------------------------------ ** @name Configuration options ** @{ */ #if defined(__DOXYGEN__) #define VL_DISABLE_THREADS #define VL_DISABLE_SSE2 #define VL_DISABLE_OPENMP #endif /** @} */ /** ------------------------------------------------------------------ ** @name Defining functions ** @{ */ #if defined(__DOXYGEN__) #define VL_EXPORT #define VL_INLINE #endif /** @} */ /** ------------------------------------------------------------------ ** @name C preprocessor helper macros ** @{ */ /** @brief Convert the argument to a string ** @param x value to be stringified. ** ** This macro stringifies the argument @a x by means of the ** # prerpocessor operator. ** ** The standard C preprocessor does not prescan arguments which are ** stringified, so ** ** @code ** #define A B ** char const * str = VL_STRINGIFY(A) ; ** @endcode ** ** initializes str with a pointer to the string ** "A", which mihgt be unexpected. To fix this issue, ** you can use ::VL_XSTRINGIFY. ** ** @sa ::VL_XSTRINGIFY **/ #define VL_STRINGIFY(x) # x /** @brief Expand and then convert the argument to a string ** @param x value to be macro-expanded and converted. ** ** This macro macro-expands the argument @a x and stringifies the ** result of the expansion. For instance ** ** @code ** #define A B ** char const * str = VL_STRINGIFY(A) ; ** @endcode ** ** initializes str with a pointer to the string ** "B". ** ** @sa ::VL_STRINGIFY **/ #define VL_XSTRINGIFY(x) VL_STRINGIFY(x) /** @brief Concatenate two arguments into a lexical unit ** @param x first argument to be concatenated. ** @param y second argument to be concatenated. ** ** This macro concatenates its arguments into a single lexical unit ** by means of the ## preprocessor operator. Notice that ** arguments concatenated by ## are not pre-expanded by ** the C preprocessor. To macro-expand the arguments and then ** concatenate them,use ::VL_XCAT. ** ** @see ::VL_XCAT **/ #define VL_CAT(x,y) x ## y /** @brief Expand and then concatenate two arguments into a lexical unit ** @param x first argument to be concatenated. ** @param y second argument to be concatenated. ** ** This macro is the same as ::VL_CAT, except that the arguments are ** macro expanded before being concatenated. ** ** @see ::VL_CAT **/ #define VL_XCAT(x,y) VL_CAT(x,y) /** @brief Expand and then concatenate three arguments into a lexical unit ** @param x first argument to be concatenated. ** @param y second argument to be concatenated. ** @param z third argument to be concatenated. ** ** This macro is the same as ::VL_XCAT, except that it has three arguments. ** ** @see ::VL_XCAT **/ #define VL_XCAT3(x,y,z) VL_XCAT(VL_XCAT(x,y),z) /** @brief Expand and then concatenate four arguments into a lexical unit ** @param x first argument to be concatenated. ** @param y second argument to be concatenated. ** @param z third argument to be concatenated. ** @param u fourth argument to be concatenated. ** ** This macro is the same as ::VL_XCAT, except that it has four arguments. ** ** @see ::VL_XCAT **/ #define VL_XCAT4(x,y,z,u) VL_XCAT(VL_XCAT3(x,y,z),u) /** @brief Expand and then concatenate five arguments into a lexical unit ** @param x first argument to be concatenated. ** @param y second argument to be concatenated. ** @param z third argument to be concatenated. ** @param u fourth argument to be concatenated. ** @param v fifth argument to be concatenated. ** ** This macro is the same as ::VL_XCAT, except that it has five arguments. ** ** @see ::VL_XCAT **/ #define VL_XCAT5(x,y,z,u,v) VL_XCAT(VL_XCAT4(x,y,z,u),v) /** @brief Convert a boolean to "yes" or "no" strings ** @param x boolean to convert. ** ** A pointer to either the string "yes" (if @a x is true) ** or the string "no". ** ** @par Example ** @code ** VL_PRINTF("Is x true? %s.", VL_YESNO(x)) ** @endcode **/ #define VL_YESNO(x) ((x)?"yes":"no") /** @} */ /* The following macros identify the host OS, architecture and compiler. They are derived from http://predef.sourceforge.net/ */ /** @name Identifying the host operating system ** @{ */ #if defined(linux) || \ defined(__linux) || \ defined(__linux__) || \ defined(__DOXYGEN__) #define VL_OS_LINUX 1 #endif #if (defined(__APPLE__) & defined(__MACH__)) || \ defined(__DOXYGEN__) #define VL_OS_MACOSX 1 #endif #if defined(__WIN32__) || \ defined(_WIN32) || \ defined(__DOXYGEN__) #define VL_OS_WIN 1 #endif #if defined(_WIN64) || \ defined(__DOXYGEN__) #define VL_OS_WIN64 1 #endif /** @} */ /** @name Identifying the host threading library ** @{ */ #if defined(VL_OS_MACOSX) || defined(VL_OS_LINUX) || \ defined(__DOXYGEN__) #define VL_THREADS_POSIX 1 #endif #if defined(VL_OS_WIN) || defined(VL_OS_WIN64) || \ defined(__DOXYGEN__) #define VL_THREADS_WIN 1 #endif /** @} */ /** @name Identifying the host compiler ** @{ */ #if defined(__GNUC__) || defined(__DOXYGEN__) # if defined(__GNUC_PATCHLEVEL__) # define VL_COMPILER_GNUC (__GNUC__ * 10000 \ + __GNUC_MINOR__ * 100 \ + __GNUC_PATCHLEVEL__) # else # define VL_COMPILER_GNUC (__GNUC__ * 10000 \ + __GNUC_MINOR__ * 100) # endif #endif #if defined(_MSC_VER) || defined(__DOXYGEN__) #define VL_COMPILER_MSC _MSC_VER #endif #if defined(__LCC__) || defined(__DOXYGEN__) #warning "LCC support is experimental!" #define VL_COMPILER_LCC 1 #endif /** @} */ /** @name Identifying the host CPU architecture ** @{ */ #if defined(i386) || \ defined(__i386__) || \ defined(__DOXYGEN__) #define VL_ARCH_IX86 300 #elif defined(__i486__) #define VL_ARCH_IX86 400 #elif defined(__i586__) #define VL_ARCH_IX86 500 #elif defined(__i686__) #define VL_ARCH_IX86 600 #elif defined(_M_IX86) #define VL_ARCH_IX86 _M_IX86 #endif #if defined(_M_X64) || \ defined(__amd64__) || \ defined(__amd64) || \ defined(__x86_64) || \ defined(__x86_64) #define VL_ARCH_X64 #endif #if defined(__ia64__) || \ defined(_IA64) || \ defined(__IA64) || \ defined(__ia64) || \ defined(_M_IA64) || \ defined(__DOXYGEN__) #define VL_ARCH_IA64 #endif /** @} */ /** @name Identifying the host data model ** @{ */ #if defined(__LLP64__) || \ defined(__LLP64) || \ defined(__LLP64) || \ (defined(VL_COMPILER_MSC) & defined(VL_OS_WIN64)) || \ (defined(VL_COMPILER_LCC) & defined(VL_OS_WIN64)) || \ defined(__DOXYGEN__) #define VL_COMPILER_LLP64 #endif #if defined(__LP64__) || \ defined(__LP64) || \ defined(__LP64) || \ (defined(VL_OS_MACOSX) & defined(VL_ARCH_IA64)) || \ defined(__DOXYGEN__) #define VL_COMPILER_LP64 #endif #if (!defined(VL_COMPILER_LLP64) & !defined(VL_COMPILER_LP64)) || \ defined(__DOXYGEN__) #define VL_COMPILER_ILP32 #endif /** @} */ /** @name Identifying the host endianness ** @{ */ #if defined(__LITTLE_ENDIAN__) || \ defined(VL_ARCH_IX86) || \ defined(VL_ARCH_IA64) || \ defined(VL_ARCH_X64) || \ defined(__DOXYGEN__) #define VL_ARCH_LITTLE_ENDIAN #endif #if defined(__DOXYGEN__) || \ !defined(VL_ARCH_LITTLE_ENDIAN) #define VL_ARCH_BIG_ENDIAN #endif /** @} */ #if defined(VL_COMPILER_MSC) & ! defined(__DOXYGEN__) # define VL_UNUSED # define VL_INLINE static __inline # define snprintf _snprintf # define isnan _isnan # ifdef VL_BUILD_DLL # ifdef __cplusplus # define VL_EXPORT extern "C" __declspec(dllexport) # else # define VL_EXPORT extern __declspec(dllexport) # endif # else # ifdef __cplusplus # define VL_EXPORT extern "C" __declspec(dllimport) # else # define VL_EXPORT extern __declspec(dllimport) # endif # endif #endif #if defined(VL_COMPILER_LCC) & ! defined(__DOXYGEN__) # define VL_UNUSED # define VL_INLINE static __inline # define snprintf _snprintf # define isnan _isnan VL_INLINE float fabsf(float x) { return (float) fabs((double) x) ; } # ifdef VL_BUILD_DLL # define VL_EXPORT extern __declspec(dllexport) # else # define VL_EXPORT extern # endif #endif #if defined(VL_COMPILER_GNUC) & ! defined(__DOXYGEN__) # define VL_UNUSED __attribute__((unused)) # define VL_INLINE static __inline__ # ifdef VL_BUILD_DLL # ifdef __cplusplus # define VL_EXPORT __attribute__((visibility ("default"))) extern "C" # else # define VL_EXPORT __attribute__((visibility ("default"))) extern # endif # else # ifdef __cplusplus # define VL_EXPORT extern "C" # else # define VL_EXPORT extern # endif # endif #endif VL_EXPORT char * vl_static_configuration_to_string_copy () ; /** ------------------------------------------------------------------ ** @name Atomic data types ** @{ **/ #define VL_TRUE 1 /**< @brief @c true (1) constant */ #define VL_FALSE 0 /**< @brief @c false (0) constant */ #if defined(VL_COMPILER_LP64) || defined(VL_COMPILER_LLP64) typedef long long vl_int64 ; /**< @brief Signed 64-bit integer. */ typedef int vl_int32 ; /**< @brief Signed 32-bit integer. */ typedef short vl_int16 ; /**< @brief Signed 16-bit integer. */ typedef char vl_int8 ; /**< @brief Signed 8-bit integer. */ typedef long long unsigned vl_uint64 ; /**< @brief Unsigned 64-bit integer. */ typedef int unsigned vl_uint32 ; /**< @brief Unsigned 32-bit integer. */ typedef short unsigned vl_uint16 ; /**< @brief Unsigned 16-bit integer. */ typedef char unsigned vl_uint8 ; /**< @brief Unsigned 8-bit integer. */ typedef int vl_int ; /**< @brief Same as @c int. */ typedef unsigned int vl_uint ; /**< @brief Same as unsigned int. */ typedef int vl_bool ; /**< @brief Boolean. */ typedef vl_int64 vl_intptr ; /**< @brief Integer holding a pointer. */ typedef vl_uint64 vl_uintptr ; /**< @brief Unsigned integer holding a pointer. */ typedef vl_uint64 vl_size ; /**< @brief Unsigned integer holding the size of a memory block. */ typedef vl_int64 vl_index ; /**< @brief Signed version of ::vl_size and ::vl_uindex */ typedef vl_uint64 vl_uindex ; /**< @brief Same as ::vl_size */ #endif #if defined(VL_COMPILER_ILP32) #ifdef VL_COMPILER_MSC typedef __int64 vl_int64 ; #else typedef long long vl_int64 ; #endif typedef int vl_int32 ; typedef short vl_int16 ; typedef char vl_int8 ; #ifdef VL_COMPILER_MSC typedef __int64 unsigned vl_uint64 ; #else typedef long long unsigned vl_uint64 ; #endif typedef int unsigned vl_uint32 ; typedef short unsigned vl_uint16 ; typedef char unsigned vl_uint8 ; typedef int vl_int ; typedef unsigned int vl_uint ; typedef int vl_bool ; typedef vl_int32 vl_intptr ; typedef vl_uint32 vl_uintptr ; typedef vl_uint32 vl_size ; typedef vl_int32 vl_index ; typedef vl_uint32 vl_uindex ; #endif /** @} */ /** @name Creating integer constants ** @{ */ #if defined(VL_COMPILER_LP64) || defined(__DOXYGEN__) #define VL_INT8_C(x) x #define VL_INT16_C(x) x #define VL_INT32_C(x) x #define VL_INT64_C(x) x ## L #define VL_UINT8_C(x) x #define VL_UINT16_C(x) x #define VL_UINT32_C(x) x ## U #define VL_UINT64_C(x) x ## UL #endif #if (defined(VL_COMPILER_LLP64) || defined(VL_COMPILER_ILP32)) \ & !defined(__DOXYGEN__) #define VL_INT8_C(x) x #define VL_INT16_C(x) x #define VL_INT32_C(x) x #define VL_INT64_C(x) x ## LL #define VL_UINT8_C(x) x #define VL_UINT16_C(x) x #define VL_UINT32_C(x) x ## U #define VL_UINT64_C(x) x ## ULL #endif /** @} */ /** ------------------------------------------------------------------ ** @name Printing the atomic data types ** @{ */ /* Lengths only: */ /** @def VL_FL_INT64 ** @brief @c printf length flag for ::vl_int64 and ::vl_uint64. **/ /** @def VL_FL_INT32 ** @brief @c printf length flag for ::vl_int32 and ::vl_uint32. **/ /** @def VL_FL_INT16 ** @brief @c printf length flag for ::vl_int16 and ::vl_uint16. **/ /** @def VL_FL_INT8 ** @brief @c printf length flag for ::vl_int8 and ::vl_uint8. **/ /** @def VL_FL_INDEX ** @brief @c printf length flag for ::vl_index and ::vl_uindex **/ #ifdef VL_COMPILER_MSC #define VL_FL_INT64 "I64" #else #define VL_FL_INT64 "ll" #endif #define VL_FL_INT32 "" #define VL_FL_INT16 "h" #define VL_FL_INT8 "hh" #if defined(VL_COMPILER_LP64) || defined(VL_COMPILER_LLP64) #define VL_FL_INDEX VL_FL_INT64 #endif #if defined(VL_COMPILER_ILP32) #define VL_FL_INDEX VL_FL_INT32 #endif /* Formats (but not conversions!): */ /** @def VL_FMT_SIZE ** @brief @c printf flag for ::vl_size **/ /** @def VL_FMT_INDEX ** @brief @c printf flag for ::vl_index **/ /** @def VL_FMT_UINDEX ** @brief @c printf flag for ::vl_uindex **/ /** @def VL_FMT_INTPTR ** @brief @c printf flag for ::vl_intptr **/ /** @def VL_FMT_UINTPTR ** @brief @c printf flag for ::vl_uintptr **/ #define VL_FMT_INDEX VL_FL_INDEX "d" #define VL_FMT_INTPTR VL_FMT_INDEX #define VL_FMT_UINDEX VL_FL_INDEX "u" #define VL_FMT_SIZE VL_FMT_UINDEX #define VL_FMT_UINTPTR VL_FMT_UINDEX /** @} */ /** ------------------------------------------------------------------ ** @name Atomic data types limits ** @{ */ /** @brief Largest integer (math constant) */ #define VL_BIG_INT 0x7FFFFFFFL /** @brief Smallest integer (math constant) */ #define VL_SMALL_INT (- VL_BIG_INT - 1) /** @brief Largest unsigned integer (math constant) */ #define VL_BIG_UINT 0xFFFFFFFFUL /** @} */ /** ------------------------------------------------------------------ ** @name Endianness detection and conversion ** @{ **/ VL_INLINE void vl_swap_host_big_endianness_8 (void *dst, void* src) ; VL_INLINE void vl_swap_host_big_endianness_4 (void *dst, void* src) ; VL_INLINE void vl_swap_host_big_endianness_2 (void *dst, void* src) ; /** @} */ /** ------------------------------------------------------------------ ** @name Obtaining host info at run time ** @{ */ typedef struct _VlX86CpuInfo { union { char string [0x20] ; vl_uint32 words [0x20 / 4] ; } vendor ; vl_bool hasAVX ; vl_bool hasSSE42 ; vl_bool hasSSE41 ; vl_bool hasSSE3 ; vl_bool hasSSE2 ; vl_bool hasSSE ; vl_bool hasMMX ; } VlX86CpuInfo ; void _vl_x86cpu_info_init (VlX86CpuInfo *self) ; char * _vl_x86cpu_info_to_string_copy (VlX86CpuInfo const *self) ; /** @} */ /** ------------------------------------------------------------------ ** @brief Host <-> big endian transformation for 8-bytes value ** ** @param dst destination 8-byte buffer. ** @param src source 8-byte bufffer. ** @see @ref host-arch-endianness. **/ VL_INLINE void vl_swap_host_big_endianness_8 (void *dst, void* src) { char *dst_ = (char*) dst ; char *src_ = (char*) src ; #if defined(VL_ARCH_BIG_ENDIAN) dst_ [0] = src_ [0] ; dst_ [1] = src_ [1] ; dst_ [2] = src_ [2] ; dst_ [3] = src_ [3] ; dst_ [4] = src_ [4] ; dst_ [5] = src_ [5] ; dst_ [6] = src_ [6] ; dst_ [7] = src_ [7] ; #else dst_ [0] = src_ [7] ; dst_ [1] = src_ [6] ; dst_ [2] = src_ [5] ; dst_ [3] = src_ [4] ; dst_ [4] = src_ [3] ; dst_ [5] = src_ [2] ; dst_ [6] = src_ [1] ; dst_ [7] = src_ [0] ; #endif } /** ------------------------------------------------------------------ ** @brief Host <-> big endian transformation for 4-bytes value ** ** @param dst destination 4-byte buffer. ** @param src source 4-byte bufffer. ** @sa @ref host-arch-endianness. **/ VL_INLINE void vl_swap_host_big_endianness_4 (void *dst, void* src) { char *dst_ = (char*) dst ; char *src_ = (char*) src ; #if defined(VL_ARCH_BIG_ENDIAN) dst_ [0] = src_ [0] ; dst_ [1] = src_ [1] ; dst_ [2] = src_ [2] ; dst_ [3] = src_ [3] ; #else dst_ [0] = src_ [3] ; dst_ [1] = src_ [2] ; dst_ [2] = src_ [1] ; dst_ [3] = src_ [0] ; #endif } /** ------------------------------------------------------------------ ** @brief Host <-> big endian transformation for 2-bytes value ** ** @param dst destination 2-byte buffer. ** @param src source 2-byte bufffer. ** @see @ref host-arch-endianness. **/ VL_INLINE void vl_swap_host_big_endianness_2 (void *dst, void* src) { char *dst_ = (char*) dst ; char *src_ = (char*) src ; #if defined(VL_ARCH_BIG_ENDIAN) dst_ [0] = src_ [0] ; dst_ [1] = src_ [1] ; #else dst_ [0] = src_ [1] ; dst_ [1] = src_ [0] ; #endif } /* VL_HOST_H */ #endif vlfeat/vl/covdet.c0000644000175000017500000022332712237004745013033 0ustar dimadima/** @file covdet.c ** @brief Covariant feature detectors - Definition ** @author Karel Lenc ** @author Andrea Vedaldi ** @author Michal Perdoch **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @page covdet Covariant feature detectors @auhtor Karel Lenc @author Andrea Vedaldi @author Michal Perdoch @ref covdet.h implements a number of covariant feature detectors, based on three cornerness measures (determinant of the Hessian, trace of the Hessian (aka Difference of Gaussians, and Harris). It supprots affine adaptation, orientation estimation, as well as Laplacian scale detection. **/ #include "covdet.h" #include /** @brief Reallocate buffer ** @param buffer ** @param bufferSize ** @param targetSize ** @return error code **/ static int _vl_resize_buffer (void ** buffer, vl_size * bufferSize, vl_size targetSize) { void * newBuffer ; if (*buffer == NULL) { *buffer = vl_malloc(targetSize) ; if (*buffer) { *bufferSize = targetSize ; return VL_ERR_OK ; } else { *bufferSize = 0 ; return VL_ERR_ALLOC ; } } newBuffer = vl_realloc(*buffer, targetSize) ; if (newBuffer) { *buffer = newBuffer ; *bufferSize = targetSize ; return VL_ERR_OK ; } else { return VL_ERR_ALLOC ; } } /** @brief Enlarge buffer ** @param buffer ** @param bufferSize ** @param targetSize ** @return error code **/ static int _vl_enlarge_buffer (void ** buffer, vl_size * bufferSize, vl_size targetSize) { if (*bufferSize >= targetSize) return VL_ERR_OK ; return _vl_resize_buffer(buffer,bufferSize,targetSize) ; } /* ---------------------------------------------------------------- */ /* Finding local extrema */ /* ---------------------------------------------------------------- */ /* Todo: make this generally available in the library */ typedef struct _VlCovDetExtremum2 { vl_index xi ; vl_index yi ; float x ; float y ; float peakScore ; float edgeScore ; } VlCovDetExtremum2 ; typedef struct _VlCovDetExtremum3 { vl_index xi ; vl_index yi ; vl_index zi ; float x ; float y ; float z ; float peakScore ; float edgeScore ; } VlCovDetExtremum3 ; VL_EXPORT vl_size vl_find_local_extrema_3 (vl_index ** extrema, vl_size * bufferSize, float const * map, vl_size width, vl_size height, vl_size depth, double threshold) ; VL_EXPORT vl_size vl_find_local_extrema_2 (vl_index ** extrema, vl_size * bufferSize, float const * map, vl_size width, vl_size height, double threshold) ; VL_EXPORT vl_bool vl_refine_local_extreum_3 (VlCovDetExtremum3 * refined, float const * map, vl_size width, vl_size height, vl_size depth, vl_index x, vl_index y, vl_index z) ; VL_EXPORT vl_bool vl_refine_local_extreum_2 (VlCovDetExtremum2 * refined, float const * map, vl_size width, vl_size height, vl_index x, vl_index y) ; /** @brief Find extrema in 3D function ** @param extrema ** @param bufferSize ** @param map a 3D array representing the map. ** @param width of the map. ** @param height of the map. ** @param deepth of the map. ** @param threshold minumum extremum value. ** @return number of extrema found. **/ vl_size vl_find_local_extrema_3 (vl_index ** extrema, vl_size * bufferSize, float const * map, vl_size width, vl_size height, vl_size depth, double threshold) { vl_index x, y, z ; vl_size const xo = 1 ; vl_size const yo = width ; vl_size const zo = width * height ; float const *pt = map + xo + yo + zo ; vl_size numExtrema = 0 ; vl_size requiredSize = 0 ; #define CHECK_NEIGHBORS_3(v,CMP,SGN) (\ v CMP ## = SGN threshold && \ v CMP *(pt + xo) && \ v CMP *(pt - xo) && \ v CMP *(pt + zo) && \ v CMP *(pt - zo) && \ v CMP *(pt + yo) && \ v CMP *(pt - yo) && \ \ v CMP *(pt + yo + xo) && \ v CMP *(pt + yo - xo) && \ v CMP *(pt - yo + xo) && \ v CMP *(pt - yo - xo) && \ \ v CMP *(pt + xo + zo) && \ v CMP *(pt - xo + zo) && \ v CMP *(pt + yo + zo) && \ v CMP *(pt - yo + zo) && \ v CMP *(pt + yo + xo + zo) && \ v CMP *(pt + yo - xo + zo) && \ v CMP *(pt - yo + xo + zo) && \ v CMP *(pt - yo - xo + zo) && \ \ v CMP *(pt + xo - zo) && \ v CMP *(pt - xo - zo) && \ v CMP *(pt + yo - zo) && \ v CMP *(pt - yo - zo) && \ v CMP *(pt + yo + xo - zo) && \ v CMP *(pt + yo - xo - zo) && \ v CMP *(pt - yo + xo - zo) && \ v CMP *(pt - yo - xo - zo) ) for (z = 1 ; z < (signed)depth - 1 ; ++z) { for (y = 1 ; y < (signed)height - 1 ; ++y) { for (x = 1 ; x < (signed)width - 1 ; ++x) { float value = *pt ; if (CHECK_NEIGHBORS_3(value,>,+) || CHECK_NEIGHBORS_3(value,<,-)) { numExtrema ++ ; requiredSize += sizeof(vl_index) * 3 ; if (*bufferSize < requiredSize) { int err = _vl_resize_buffer((void**)extrema, bufferSize, requiredSize + 2000 * 3 * sizeof(vl_index)) ; if (err != VL_ERR_OK) abort() ; } (*extrema) [3 * (numExtrema - 1) + 0] = x ; (*extrema) [3 * (numExtrema - 1) + 1] = y ; (*extrema) [3 * (numExtrema - 1) + 2] = z ; } pt += xo ; } pt += 2*xo ; } pt += 2*yo ; } return numExtrema ; } /** @brief Find extrema in 3D function ** @param extrema ** @param bufferSize ** @param map a 3D array representing the map. ** @param width of the map. ** @param height of the map. ** @param deepth of the map. ** @param threshold minumum extremum value. ** @return number of extrema found. **/ vl_size vl_find_local_extrema_2 (vl_index ** extrema, vl_size * bufferSize, float const* map, vl_size width, vl_size height, double threshold) { vl_index x, y ; vl_size const xo = 1 ; vl_size const yo = width ; float const *pt = map + xo + yo ; vl_size numExtrema = 0 ; vl_size requiredSize = 0 ; #define CHECK_NEIGHBORS_2(v,CMP,SGN) (\ v CMP ## = SGN threshold && \ v CMP *(pt + xo) && \ v CMP *(pt - xo) && \ v CMP *(pt + yo) && \ v CMP *(pt - yo) && \ \ v CMP *(pt + yo + xo) && \ v CMP *(pt + yo - xo) && \ v CMP *(pt - yo + xo) && \ v CMP *(pt - yo - xo) ) for (y = 1 ; y < (signed)height - 1 ; ++y) { for (x = 1 ; x < (signed)width - 1 ; ++x) { float value = *pt ; if (CHECK_NEIGHBORS_2(value,>,+) || CHECK_NEIGHBORS_2(value,<,-)) { numExtrema ++ ; requiredSize += sizeof(vl_index) * 2 ; if (*bufferSize < requiredSize) { int err = _vl_resize_buffer((void**)extrema, bufferSize, requiredSize + 2000 * 2 * sizeof(vl_index)) ; if (err != VL_ERR_OK) abort() ; } (*extrema) [2 * (numExtrema - 1) + 0] = x ; (*extrema) [2 * (numExtrema - 1) + 1] = y ; } pt += xo ; } pt += 2*xo ; } return numExtrema ; } /** @brief Refine extrema in 3D function ** @param refined refined extrema. ** @param map a 3D array representing the map. ** @param width of the map. ** @param height of the map. ** @param deepth of the map. ** @param x ** @param y ** @param z ** @return extrema refinement was stable. **/ VL_EXPORT vl_bool vl_refine_local_extreum_3 (VlCovDetExtremum3 * refined, float const * map, vl_size width, vl_size height, vl_size depth, vl_index x, vl_index y, vl_index z) { vl_size const xo = 1 ; vl_size const yo = width ; vl_size const zo = width * height ; double Dx=0,Dy=0,Dz=0,Dxx=0,Dyy=0,Dzz=0,Dxy=0,Dxz=0,Dyz=0 ; double A [3*3], b [3] ; #define at(dx,dy,dz) (*(pt + (dx)*xo + (dy)*yo + (dz)*zo)) #define Aat(i,j) (A[(i)+(j)*3]) float const * pt ; vl_index dx = 0 ; vl_index dy = 0 ; /*vl_index dz = 0 ;*/ vl_index iter ; int err ; assert (map) ; assert (1 <= x && x <= (signed)width - 2) ; assert (1 <= y && y <= (signed)height - 2) ; assert (1 <= z && z <= (signed)depth - 2) ; for (iter = 0 ; iter < 5 ; ++iter) { x += dx ; y += dy ; pt = map + x*xo + y*yo + z*zo ; /* compute the gradient */ Dx = 0.5 * (at(+1,0,0) - at(-1,0,0)) ; Dy = 0.5 * (at(0,+1,0) - at(0,-1,0)); Dz = 0.5 * (at(0,0,+1) - at(0,0,-1)) ; /* compute the Hessian */ Dxx = (at(+1,0,0) + at(-1,0,0) - 2.0 * at(0,0,0)) ; Dyy = (at(0,+1,0) + at(0,-1,0) - 2.0 * at(0,0,0)) ; Dzz = (at(0,0,+1) + at(0,0,-1) - 2.0 * at(0,0,0)) ; Dxy = 0.25 * (at(+1,+1,0) + at(-1,-1,0) - at(-1,+1,0) - at(+1,-1,0)) ; Dxz = 0.25 * (at(+1,0,+1) + at(-1,0,-1) - at(-1,0,+1) - at(+1,0,-1)) ; Dyz = 0.25 * (at(0,+1,+1) + at(0,-1,-1) - at(0,-1,+1) - at(0,+1,-1)) ; /* solve linear system */ Aat(0,0) = Dxx ; Aat(1,1) = Dyy ; Aat(2,2) = Dzz ; Aat(0,1) = Aat(1,0) = Dxy ; Aat(0,2) = Aat(2,0) = Dxz ; Aat(1,2) = Aat(2,1) = Dyz ; b[0] = - Dx ; b[1] = - Dy ; b[2] = - Dz ; err = vl_solve_linear_system_3(b, A, b) ; if (err != VL_ERR_OK) { b[0] = 0 ; b[1] = 0 ; b[2] = 0 ; break ; } /* Keep going if there is sufficient translation */ dx = (b[0] > 0.6 && x < (signed)width - 2 ? 1 : 0) + (b[0] < -0.6 && x > 1 ? -1 : 0) ; dy = (b[1] > 0.6 && y < (signed)height - 2 ? 1 : 0) + (b[1] < -0.6 && y > 1 ? -1 : 0) ; if (dx == 0 && dy == 0) break ; } /* check threshold and other conditions */ { double peakScore = at(0,0,0) + 0.5 * (Dx * b[0] + Dy * b[1] + Dz * b[2]) ; double alpha = (Dxx+Dyy)*(Dxx+Dyy) / (Dxx*Dyy - Dxy*Dxy) ; double edgeScore ; if (alpha < 0) { /* not an extremum */ edgeScore = VL_INFINITY_D ; } else { edgeScore = (0.5*alpha - 1) + sqrt(VL_MAX(0.25*alpha - 1,0)*alpha) ; } refined->xi = x ; refined->yi = y ; refined->zi = z ; refined->x = x + b[0] ; refined->y = y + b[1] ; refined->z = z + b[2] ; refined->peakScore = peakScore ; refined->edgeScore = edgeScore ; return err == VL_ERR_OK && vl_abs_d(b[0]) < 1.5 && vl_abs_d(b[1]) < 1.5 && vl_abs_d(b[2]) < 1.5 && 0 <= refined->x && refined->x <= (signed)width - 1 && 0 <= refined->y && refined->y <= (signed)height - 1 && 0 <= refined->z && refined->z <= (signed)depth - 1 ; } #undef Aat #undef at } /** @brief Refine extrema in 3D function ** @param refined refined extrema. ** @param map a 3D array representing the map. ** @param width of the map. ** @param height of the map. ** @param deepth of the map. ** @param x ** @param y ** @param z ** @return extrema refinement was stable. **/ VL_EXPORT vl_bool vl_refine_local_extreum_2 (VlCovDetExtremum2 * refined, float const * map, vl_size width, vl_size height, vl_index x, vl_index y) { vl_size const xo = 1 ; vl_size const yo = width ; double Dx=0,Dy=0,Dxx=0,Dyy=0,Dxy=0; double A [2*2], b [2] ; #define at(dx,dy) (*(pt + (dx)*xo + (dy)*yo )) #define Aat(i,j) (A[(i)+(j)*2]) float const * pt ; vl_index dx = 0 ; vl_index dy = 0 ; vl_index iter ; int err ; assert (map) ; assert (1 <= x && x <= (signed)width - 2) ; assert (1 <= y && y <= (signed)height - 2) ; for (iter = 0 ; iter < 5 ; ++iter) { x += dx ; y += dy ; pt = map + x*xo + y*yo ; /* compute the gradient */ Dx = 0.5 * (at(+1,0) - at(-1,0)) ; Dy = 0.5 * (at(0,+1) - at(0,-1)); /* compute the Hessian */ Dxx = (at(+1,0) + at(-1,0) - 2.0 * at(0,0)) ; Dyy = (at(0,+1) + at(0,-1) - 2.0 * at(0,0)) ; Dxy = 0.25 * (at(+1,+1) + at(-1,-1) - at(-1,+1) - at(+1,-1)) ; /* solve linear system */ Aat(0,0) = Dxx ; Aat(1,1) = Dyy ; Aat(0,1) = Aat(1,0) = Dxy ; b[0] = - Dx ; b[1] = - Dy ; err = vl_solve_linear_system_2(b, A, b) ; if (err != VL_ERR_OK) { b[0] = 0 ; b[1] = 0 ; break ; } /* Keep going if there is sufficient translation */ dx = (b[0] > 0.6 && x < (signed)width - 2 ? 1 : 0) + (b[0] < -0.6 && x > 1 ? -1 : 0) ; dy = (b[1] > 0.6 && y < (signed)height - 2 ? 1 : 0) + (b[1] < -0.6 && y > 1 ? -1 : 0) ; if (dx == 0 && dy == 0) break ; } /* check threshold and other conditions */ { double peakScore = at(0,0) + 0.5 * (Dx * b[0] + Dy * b[1]) ; double alpha = (Dxx+Dyy)*(Dxx+Dyy) / (Dxx*Dyy - Dxy*Dxy) ; double edgeScore ; if (alpha < 0) { /* not an extremum */ edgeScore = VL_INFINITY_D ; } else { edgeScore = (0.5*alpha - 1) + sqrt(VL_MAX(0.25*alpha - 1,0)*alpha) ; } refined->xi = x ; refined->yi = y ; refined->x = x + b[0] ; refined->y = y + b[1] ; refined->peakScore = peakScore ; refined->edgeScore = edgeScore ; return err == VL_ERR_OK && vl_abs_d(b[0]) < 1.5 && vl_abs_d(b[1]) < 1.5 && 0 <= refined->x && refined->x <= (signed)width - 1 && 0 <= refined->y && refined->y <= (signed)height - 1 ; } #undef Aat #undef at } /* ---------------------------------------------------------------- */ /* Covarant detector */ /* ---------------------------------------------------------------- */ #define VL_COVDET_MAX_NUM_ORIENTATIONS 4 #define VL_COVDET_MAX_NUM_LAPLACIAN_SCALES 4 #define VL_COVDET_AA_PATCH_RESOLUTION 20 #define VL_COVDET_AA_MAX_NUM_ITERATIONS 15 #define VL_COVDET_OR_NUM_ORIENTATION_HISTOGAM_BINS 36 #define VL_COVDET_AA_RELATIVE_INTEGRATION_SIGMA 3 #define VL_COVDET_AA_RELATIVE_DERIVATIVE_SIGMA 1 #define VL_COVDET_AA_MAX_ANISOTROPY 5 #define VL_COVDET_AA_CONVERGENCE_THRESHOLD 1.001 #define VL_COVDET_AA_ACCURATE_SMOOTHING VL_FALSE #define VL_COVDET_AA_PATCH_EXTENT (3*VL_COVDET_AA_RELATIVE_INTEGRATION_SIGMA) #define VL_COVDET_OR_ADDITIONAL_PEAKS_RELATIVE_SIZE 0.8 #define VL_COVDET_LAP_NUM_LEVELS 10 #define VL_COVDET_LAP_PATCH_RESOLUTION 16 #define VL_COVDET_DOG_DEF_PEAK_THRESHOLD 0.01 #define VL_COVDET_DOG_DEF_EDGE_THRESHOLD 10.0 #define VL_COVDET_HARRIS_DEF_PEAK_THRESHOLD 0.000002 #define VL_COVDET_HARRIS_DEF_EDGE_THRESHOLD 10.0 #define VL_COVDET_HESSIAN_DEF_PEAK_THRESHOLD 0.003 #define VL_COVDET_HESSIAN_DEF_EDGE_THRESHOLD 10.0 /** @brief Covariant feature detector */ struct _VlCovDet { VlScaleSpace *gss ; /**< Gaussian scale space. */ VlScaleSpace *css ; /**< Cornerness scale space. */ VlCovDetMethod method ; /**< feature extraction method. */ double peakThreshold ; /**< peak threshold. */ double edgeThreshold ; /**< edge threshold. */ vl_size octaveResolution ; /**< resolution of each octave. */ vl_index firstOctave ; /**< index of the first octave. */ double nonExtremaSuppression ; vl_size numNonExtremaSuppressed ; VlCovDetFeature *features ; vl_size numFeatures ; vl_size numFeatureBufferSize ; float * patch ; vl_size patchBufferSize ; vl_bool transposed ; VlCovDetFeatureOrientation orientations [VL_COVDET_MAX_NUM_ORIENTATIONS] ; VlCovDetFeatureLaplacianScale scales [VL_COVDET_MAX_NUM_LAPLACIAN_SCALES] ; vl_bool aaAccurateSmoothing ; float aaPatch [(2*VL_COVDET_AA_PATCH_RESOLUTION+1)*(2*VL_COVDET_AA_PATCH_RESOLUTION+1)] ; float aaPatchX [(2*VL_COVDET_AA_PATCH_RESOLUTION+1)*(2*VL_COVDET_AA_PATCH_RESOLUTION+1)] ; float aaPatchY [(2*VL_COVDET_AA_PATCH_RESOLUTION+1)*(2*VL_COVDET_AA_PATCH_RESOLUTION+1)] ; float aaMask [(2*VL_COVDET_AA_PATCH_RESOLUTION+1)*(2*VL_COVDET_AA_PATCH_RESOLUTION+1)] ; float lapPatch [(2*VL_COVDET_LAP_PATCH_RESOLUTION+1)*(2*VL_COVDET_LAP_PATCH_RESOLUTION+1)] ; float laplacians [(2*VL_COVDET_LAP_PATCH_RESOLUTION+1)*(2*VL_COVDET_LAP_PATCH_RESOLUTION+1)*VL_COVDET_LAP_NUM_LEVELS] ; vl_size numFeaturesWithNumScales [VL_COVDET_MAX_NUM_LAPLACIAN_SCALES + 1] ; } ; VlEnumerator vlCovdetMethods [VL_COVDET_METHOD_NUM] = { {"DoG" , (vl_index)VL_COVDET_METHOD_DOG }, {"Hessian", (vl_index)VL_COVDET_METHOD_HESSIAN }, {"HessianLaplace", (vl_index)VL_COVDET_METHOD_HESSIAN_LAPLACE }, {"HarrisLaplace", (vl_index)VL_COVDET_METHOD_HARRIS_LAPLACE }, {"MultiscaleHessian", (vl_index)VL_COVDET_METHOD_MULTISCALE_HESSIAN}, {"MultiscaleHarris", (vl_index)VL_COVDET_METHOD_MULTISCALE_HARRIS }, {0, 0 } } ; /** @brief Create a new object instance ** @param method method for covariant feature detection. ** @return new covariant detector. **/ VlCovDet * vl_covdet_new (VlCovDetMethod method) { VlCovDet * self = vl_calloc(sizeof(VlCovDet),1) ; self->method = method ; self->octaveResolution = 3 ; self->firstOctave = -1 ; switch (self->method) { case VL_COVDET_METHOD_DOG : self->peakThreshold = VL_COVDET_DOG_DEF_PEAK_THRESHOLD ; self->edgeThreshold = VL_COVDET_DOG_DEF_EDGE_THRESHOLD ; break ; case VL_COVDET_METHOD_HARRIS_LAPLACE: case VL_COVDET_METHOD_MULTISCALE_HARRIS: self->peakThreshold = VL_COVDET_HARRIS_DEF_PEAK_THRESHOLD ; self->edgeThreshold = VL_COVDET_HARRIS_DEF_EDGE_THRESHOLD ; break ; case VL_COVDET_METHOD_HESSIAN : case VL_COVDET_METHOD_HESSIAN_LAPLACE: case VL_COVDET_METHOD_MULTISCALE_HESSIAN: self->peakThreshold = VL_COVDET_HESSIAN_DEF_PEAK_THRESHOLD ; self->edgeThreshold = VL_COVDET_HESSIAN_DEF_EDGE_THRESHOLD ; break; default: assert(0) ; } self->nonExtremaSuppression = 0.5 ; self->features = NULL ; self->numFeatures = 0 ; self->numFeatureBufferSize = 0 ; self->patch = NULL ; self->patchBufferSize = 0 ; self->transposed = VL_FALSE ; self->aaAccurateSmoothing = VL_COVDET_AA_ACCURATE_SMOOTHING ; { vl_index const w = VL_COVDET_AA_PATCH_RESOLUTION ; vl_index i,j ; double step = (2.0 * VL_COVDET_AA_PATCH_EXTENT) / (2*w+1) ; double sigma = VL_COVDET_AA_RELATIVE_INTEGRATION_SIGMA ; for (j = -w ; j <= w ; ++j) { for (i = -w ; i <= w ; ++i) { double dx = i*step/sigma ; double dy = j*step/sigma ; self->aaMask[(i+w) + (2*w+1)*(j+w)] = exp(-0.5*(dx*dx+dy*dy)) ; } } } { /* Covers one octave of Laplacian filters, from sigma=1 to sigma=2. The spatial sampling step is 0.5. */ vl_index s ; for (s = 0 ; s < VL_COVDET_LAP_NUM_LEVELS ; ++s) { double sigmaLap = pow(2.0, -0.5 + (double)s / (VL_COVDET_LAP_NUM_LEVELS - 1)) ; double const sigmaImage = 1.0 / sqrt(2.0) ; double const step = 0.5 * sigmaImage ; double const sigmaDelta = sqrt(sigmaLap*sigmaLap - sigmaImage*sigmaImage) ; vl_size const w = VL_COVDET_LAP_PATCH_RESOLUTION ; vl_size const num = 2 * w + 1 ; float * pt = self->laplacians + s * (num * num) ; memset(pt, 0, num * num * sizeof(float)) ; #define at(x,y) pt[(x+w)+(y+w)*(2*w+1)] at(0,0) = - 4.0 ; at(-1,0) = 1.0 ; at(+1,0) = 1.0 ; at(0,1) = 1.0 ; at(0,-1) = 1.0 ; #undef at vl_imsmooth_f(pt, num, pt, num, num, num, sigmaDelta / step, sigmaDelta / step) ; #if 0 { char name [200] ; snprintf(name, 200, "/tmp/%f-lap.pgm", sigmaDelta) ; vl_pgm_write_f(name, pt, num, num) ; } #endif } } return self ; } /** @brief Reset object ** @param self object. ** ** This function removes any buffered features and frees other ** internal buffers. **/ void vl_covdet_reset (VlCovDet * self) { if (self->features) { vl_free(self->features) ; self->features = NULL ; } if (self->css) { vl_scalespace_delete(self->css) ; self->css = NULL ; } if (self->gss) { vl_scalespace_delete(self->gss) ; self->gss = NULL ; } } /** @brief Delete object instance ** @param self object. **/ void vl_covdet_delete (VlCovDet * self) { vl_covdet_reset(self) ; if (self->patch) vl_free (self->patch) ; vl_free(self) ; } /** @brief Append a feature to the internal buffer. ** @param self object. ** @param feature a pointer to the feature to append. ** @return status. ** ** The feature is copied. The function may fail with @c status ** equal to ::VL_ERR_ALLOC if there is insufficient memory. **/ int vl_covdet_append_feature (VlCovDet * self, VlCovDetFeature const * feature) { vl_size requiredSize ; assert(self) ; assert(feature) ; self->numFeatures ++ ; requiredSize = self->numFeatures * sizeof(VlCovDetFeature) ; if (requiredSize > self->numFeatureBufferSize) { int err = _vl_resize_buffer((void**)&self->features, &self->numFeatureBufferSize, (self->numFeatures + 1000) * sizeof(VlCovDetFeature)) ; if (err) { self->numFeatures -- ; return err ; } } self->features[self->numFeatures - 1] = *feature ; return VL_ERR_OK ; } /* ---------------------------------------------------------------- */ /* Process a new image */ /* ---------------------------------------------------------------- */ /** @brief Detect features in an image ** @param self object. ** @param image image to process. ** @param width image width. ** @param height image height. ** @return status. ** ** @a width and @a height must be at least one pixel. The function ** fails by returing ::VL_ERR_ALLOC if the memory is insufficient. **/ int vl_covdet_put_image (VlCovDet * self, float const * image, vl_size width, vl_size height) { vl_size const minOctaveSize = 16 ; vl_index lastOctave ; vl_index octaveFirstSubdivision ; vl_index octaveLastSubdivision ; VlScaleSpaceGeometry geom = vl_scalespace_get_default_geometry(width,height) ; assert (self) ; assert (image) ; assert (width >= 1) ; assert (height >= 1) ; /* (minOctaveSize - 1) 2^lastOctave <= min(width,height) - 1 */ lastOctave = vl_floor_d(vl_log2_d(VL_MIN((double)width-1,(double)height-1) / (minOctaveSize - 1))) ; if (self->method == VL_COVDET_METHOD_DOG) { octaveFirstSubdivision = -2 ; octaveLastSubdivision = self->octaveResolution ; } else if (self->method == VL_COVDET_METHOD_HESSIAN) { octaveFirstSubdivision = -1 ; octaveLastSubdivision = self->octaveResolution ; } else { octaveFirstSubdivision = 0 ; octaveLastSubdivision = self->octaveResolution - 1 ; } geom.width = width ; geom.height = height ; geom.firstOctave = self->firstOctave ; geom.lastOctave = lastOctave ; geom.octaveResolution = self->octaveResolution ; geom.octaveFirstSubdivision = octaveFirstSubdivision ; geom.octaveLastSubdivision = octaveLastSubdivision ; if (self->gss == NULL || ! vl_scalespacegeometry_is_equal (geom, vl_scalespace_get_geometry(self->gss))) { if (self->gss) vl_scalespace_delete(self->gss) ; self->gss = vl_scalespace_new_with_geometry(geom) ; if (self->gss == NULL) return VL_ERR_ALLOC ; } vl_scalespace_put_image(self->gss, image) ; return VL_ERR_OK ; } /* ---------------------------------------------------------------- */ /* Cornerness measures */ /* ---------------------------------------------------------------- */ /** @brief Scaled derminant of the Hessian filter ** @param hessian output image. ** @param image input image. ** @param width image width. ** @param height image height. ** @param step image sampling step (pixel size). ** @param sigma Gaussian smoothing of the input image. **/ static void _vl_det_hessian_response (float * hessian, float const * image, vl_size width, vl_size height, double step, double sigma) { float factor = (float) pow(sigma/step, 4.0) ; vl_index const xo = 1 ; /* x-stride */ vl_index const yo = width; /* y-stride */ vl_size r, c; float p11, p12, p13, p21, p22, p23, p31, p32, p33; /* setup input pointer to be centered at 0,1 */ float const *in = image + yo ; /* setup output pointer to be centered at 1,1 */ float *out = hessian + xo + yo; /* move 3x3 window and convolve */ for (r = 1; r < height - 1; ++r) { /* fill in shift registers at the beginning of the row */ p11 = in[-yo]; p12 = in[xo - yo]; p21 = in[ 0]; p22 = in[xo ]; p31 = in[+yo]; p32 = in[xo + yo]; /* setup input pointer to (2,1) of the 3x3 square */ in += 2; for (c = 1; c < width - 1; ++c) { float Lxx, Lyy, Lxy; /* fetch remaining values (last column) */ p13 = in[-yo]; p23 = *in; p33 = in[+yo]; /* Compute 3x3 Hessian values from pixel differences. */ Lxx = (-p21 + 2*p22 - p23); Lyy = (-p12 + 2*p22 - p32); Lxy = ((p11 - p31 - p13 + p33)/4.0f); /* normalize and write out */ *out = (Lxx * Lyy - Lxy * Lxy) * factor ; /* move window */ p11=p12; p12=p13; p21=p22; p22=p23; p31=p32; p32=p33; /* move input/output pointers */ in++; out++; } out += 2; } /* Copy the computed values to borders */ in = hessian + yo + xo ; out = hessian + xo ; /* Top row without corners */ memcpy(out, in, (width - 2)*sizeof(float)); out--; in -= yo; /* Left border columns without last row */ for (r = 0; r < height - 1; r++){ *out = *in; *(out + yo - 1) = *(in + yo - 3); in += yo; out += yo; } /* Bottom corners */ in -= yo; *out = *in; *(out + yo - 1) = *(in + yo - 3); /* Bottom row without corners */ out++; memcpy(out, in, (width - 2)*sizeof(float)); } /** @brief Scale-normalised Harris response ** @param harris output image. ** @param image input image. ** @param width image width. ** @param height image height. ** @param step image sampling step (pixel size). ** @param sigma Gaussian smoothing of the input image. ** @param sigmaI integration scale. ** @param alpha factor in the definition of the Harris score. **/ static void _vl_harris_response (float * harris, float const * image, vl_size width, vl_size height, double step, double sigma, double sigmaI, double alpha) { float factor = (float) pow(sigma/step, 4.0) ; vl_index k ; float * LxLx ; float * LyLy ; float * LxLy ; LxLx = vl_malloc(sizeof(float) * width * height) ; LyLy = vl_malloc(sizeof(float) * width * height) ; LxLy = vl_malloc(sizeof(float) * width * height) ; vl_imgradient_f (LxLx, LyLy, 1, width, image, width, height, width) ; for (k = 0 ; k < (signed)(width * height) ; ++k) { float dx = LxLx[k] ; float dy = LyLy[k] ; LxLx[k] = dx*dx ; LyLy[k] = dy*dy ; LxLy[k] = dx*dy ; } vl_imsmooth_f(LxLx, width, LxLx, width, height, width, sigmaI / step, sigmaI / step) ; vl_imsmooth_f(LyLy, width, LyLy, width, height, width, sigmaI / step, sigmaI / step) ; vl_imsmooth_f(LxLy, width, LxLy, width, height, width, sigmaI / step, sigmaI / step) ; for (k = 0 ; k < (signed)(width * height) ; ++k) { float a = LxLx[k] ; float b = LyLy[k] ; float c = LxLy[k] ; float determinant = a * b - c * c ; float trace = a + b ; harris[k] = factor * (determinant - alpha * (trace * trace)) ; } vl_free(LxLy) ; vl_free(LyLy) ; vl_free(LxLx) ; } /** @brief Difference of Gaussian ** @param dog output image. ** @param level1 input image at the smaller Gaussian scale. ** @param level2 input image at the larger Gaussian scale. ** @param width image width. ** @param height image height. **/ static void _vl_dog_response (float * dog, float const * level1, float const * level2, vl_size width, vl_size height) { vl_index k ; for (k = 0 ; k < (signed)(width*height) ; ++k) { dog[k] = level2[k] - level1[k] ; } } /* ---------------------------------------------------------------- */ /* Detect features */ /* ---------------------------------------------------------------- */ /** @brief Detect scale-space features ** @param method ** @return new covariant detector. **/ void vl_covdet_detect (VlCovDet * self) { VlScaleSpaceGeometry geom = vl_scalespace_get_geometry(self->gss) ; VlScaleSpaceGeometry cgeom ; float * levelxx = NULL ; float * levelyy = NULL ; float * levelxy = NULL ; vl_index o, s ; assert (self) ; assert (self->gss) ; /* clear previous detections if any */ self->numFeatures = 0 ; /* prepare buffers ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ cgeom = geom ; if (self->method == VL_COVDET_METHOD_DOG) { cgeom.octaveFirstSubdivision = -1 ; } if (!self->css || !vl_scalespacegeometry_is_equal(cgeom, vl_scalespace_get_geometry(self->css))) { if (self->css) vl_scalespace_delete(self->css) ; self->css = vl_scalespace_new_with_geometry(cgeom) ; } if (self->method == VL_COVDET_METHOD_HARRIS_LAPLACE || self->method == VL_COVDET_METHOD_MULTISCALE_HARRIS) { VlScaleSpaceOctaveGeometry oct = vl_scalespace_get_octave_geometry(self->gss, geom.firstOctave) ; levelxx = vl_malloc(oct.width * oct.height * sizeof(float)) ; levelyy = vl_malloc(oct.width * oct.height * sizeof(float)) ; levelxy = vl_malloc(oct.width * oct.height * sizeof(float)) ; } /* compute cornerness ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ for (o = cgeom.firstOctave ; o <= cgeom.lastOctave ; ++o) { VlScaleSpaceOctaveGeometry oct = vl_scalespace_get_octave_geometry(self->css, o) ; for (s = cgeom.octaveFirstSubdivision ; s <= cgeom.octaveLastSubdivision ; ++s) { float * level = vl_scalespace_get_level(self->gss, o, s) ; float * clevel = vl_scalespace_get_level(self->css, o, s) ; double sigma = vl_scalespace_get_level_sigma(self->css, o, s) ; switch (self->method) { case VL_COVDET_METHOD_DOG: _vl_dog_response(clevel, level, vl_scalespace_get_level(self->gss, o, s - 1), oct.width, oct.height) ; break ; case VL_COVDET_METHOD_HARRIS_LAPLACE: case VL_COVDET_METHOD_MULTISCALE_HARRIS: _vl_harris_response(clevel, level, oct.width, oct.height, oct.step, sigma, 1.4 * sigma, 0.05) ; break ; case VL_COVDET_METHOD_HESSIAN: case VL_COVDET_METHOD_HESSIAN_LAPLACE: case VL_COVDET_METHOD_MULTISCALE_HESSIAN: _vl_det_hessian_response(clevel, level, oct.width, oct.height, oct.step, sigma) ; break ; default: assert(0) ; } } } /* find and refine local maxima ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ { vl_index * extrema = NULL ; vl_size extremaBufferSize = 0 ; vl_size numExtrema ; vl_size index ; for (o = cgeom.firstOctave ; o <= cgeom.lastOctave ; ++o) { VlScaleSpaceOctaveGeometry octgeom = vl_scalespace_get_octave_geometry(self->css, o) ; double step = octgeom.step ; vl_size width = octgeom.width ; vl_size height = octgeom.height ; vl_size depth = cgeom.octaveLastSubdivision - cgeom.octaveFirstSubdivision + 1 ; switch (self->method) { case VL_COVDET_METHOD_DOG: case VL_COVDET_METHOD_HESSIAN: { /* scale-space extrema */ float const * octave = vl_scalespace_get_level(self->css, o, cgeom.octaveFirstSubdivision) ; numExtrema = vl_find_local_extrema_3(&extrema, &extremaBufferSize, octave, width, height, depth, 0.8 * self->peakThreshold); for (index = 0 ; index < numExtrema ; ++index) { VlCovDetExtremum3 refined ; VlCovDetFeature feature ; vl_bool ok ; memset(&feature, 0, sizeof(feature)) ; ok = vl_refine_local_extreum_3(&refined, octave, width, height, depth, extrema[3*index+0], extrema[3*index+1], extrema[3*index+2]) ; ok &= fabs(refined.peakScore) > self->peakThreshold ; ok &= refined.edgeScore < self->edgeThreshold ; if (ok) { double sigma = cgeom.baseScale * pow(2.0, o + (refined.z - cgeom.octaveFirstSubdivision) / cgeom.octaveResolution) ; feature.frame.x = refined.x * step ; feature.frame.y = refined.y * step ; feature.frame.a11 = sigma ; feature.frame.a12 = 0.0 ; feature.frame.a21 = 0.0 ; feature.frame.a22 = sigma ; feature.peakScore = refined.peakScore ; feature.edgeScore = refined.edgeScore ; vl_covdet_append_feature(self, &feature) ; } } break ; } default: { for (s = cgeom.octaveFirstSubdivision ; s < cgeom.octaveLastSubdivision ; ++s) { /* space extrema */ float const * level = vl_scalespace_get_level(self->css,o,s) ; numExtrema = vl_find_local_extrema_2(&extrema, &extremaBufferSize, level, width, height, 0.8 * self->peakThreshold); for (index = 0 ; index < numExtrema ; ++index) { VlCovDetExtremum2 refined ; VlCovDetFeature feature ; vl_bool ok ; memset(&feature, 0, sizeof(feature)) ; ok = vl_refine_local_extreum_2(&refined, level, width, height, extrema[2*index+0], extrema[2*index+1]); ok &= fabs(refined.peakScore) > self->peakThreshold ; ok &= refined.edgeScore < self->edgeThreshold ; if (ok) { double sigma = cgeom.baseScale * pow(2.0, o + (double)s / cgeom.octaveResolution) ; feature.frame.x = refined.x * step ; feature.frame.y = refined.y * step ; feature.frame.a11 = sigma ; feature.frame.a12 = 0.0 ; feature.frame.a21 = 0.0 ; feature.frame.a22 = sigma ; feature.peakScore = refined.peakScore ; feature.edgeScore = refined.edgeScore ; vl_covdet_append_feature(self, &feature) ; } } } break ; } } } /* next octave */ if (extrema) { vl_free(extrema) ; extrema = 0 ; } } /* Laplacian scale selection for certain methods */ switch (self->method) { case VL_COVDET_METHOD_HARRIS_LAPLACE : case VL_COVDET_METHOD_HESSIAN_LAPLACE : vl_covdet_extract_laplacian_scales (self) ; break ; default: break ; } if (self->nonExtremaSuppression) { vl_index i, j ; double tol = self->nonExtremaSuppression ; self->numNonExtremaSuppressed = 0 ; for (i = 0 ; i < (signed)self->numFeatures ; ++i) { double x = self->features[i].frame.x ; double y = self->features[i].frame.y ; double sigma = self->features[i].frame.a11 ; double score = self->features[i].peakScore ; for (j = 0 ; j < (signed)self->numFeatures ; ++j) { double dx_ = self->features[j].frame.x - x ; double dy_ = self->features[j].frame.y - y ; double sigma_ = self->features[j].frame.a11 ; double score_ = self->features[j].peakScore ; if (score_ == 0) continue ; if (sigma < (1+tol) * sigma_ && sigma_ < (1+tol) * sigma && vl_abs_d(dx_) < tol * sigma && vl_abs_d(dy_) < tol * sigma && vl_abs_d(score) > vl_abs_d(score_)) { self->features[j].peakScore = 0 ; self->numNonExtremaSuppressed ++ ; } } } j = 0 ; for (i = 0 ; i < (signed)self->numFeatures ; ++i) { VlCovDetFeature feature = self->features[i] ; if (self->features[i].peakScore != 0) { self->features[j++] = feature ; } } self->numFeatures = j ; } if (levelxx) vl_free(levelxx) ; if (levelyy) vl_free(levelyy) ; if (levelxy) vl_free(levelxy) ; } /* ---------------------------------------------------------------- */ /* Extract patches */ /* ---------------------------------------------------------------- */ /** @brief Helper for extracting patches ** @param self object. ** @param sigma1 actual patch smoothing along the first axis (out). ** @param sigma2 actual patch smoothing along the second axis (out). ** @param patch buffer. ** @param resolution patch resolution. ** @param extent patch extent. ** @param sigma desired smoothing in the patch frame. ** @param A linear transfomration from patch to image. ** @param T translation from patch to image. ** @param d1 first singular value @a A. ** @param d2 second singular value of @a A. **/ vl_bool vl_covdet_extract_patch_helper (VlCovDet * self, double * sigma1, double * sigma2, float * patch, vl_size resolution, double extent, double sigma, double (A_) [4], double (T_) [2], double d1, double d2) { vl_index o, s ; double factor ; double sigma_ ; float const * level ; vl_size width, height ; double step ; double A [4] = {A_[0], A_[1], A_[2], A_[3]} ; double T [2] = {T_[0], T_[1]} ; VlScaleSpaceGeometry geom = vl_scalespace_get_geometry(self->gss) ; VlScaleSpaceOctaveGeometry oct ; /* Starting from a pre-smoothed image at scale sigma_ because of the mapping A the resulting smoothing in the warped patch is S, where sigma_^2 I = A S A', S = sigma_^2 inv(A) inv(A)' = sigma_^2 V D^-2 V', A = U D V'. Thus we rotate A by V to obtain an axis-aligned smoothing: A = U*D, S = sigma_^2 D^-2. Then we search the scale-space for the best sigma_ such that the target smoothing is approximated from below: max sigma_(o,s) : simga_(o,s) factor <= sigma, factor = max{abs(D11), abs(D22)}. */ /* Determine the best level (o,s) such that sigma_(o,s) factor <= sigma. This can be obtained by scanning octaves from smalles to largest and stopping when no level in the octave satisfies the relation. Given the range of octave availables, do the best you can. */ factor = 1.0 / VL_MIN(d1, d2) ; for (o = geom.firstOctave + 1 ; o <= geom.lastOctave ; ++o) { s = vl_floor_d(vl_log2_d(sigma / (factor * geom.baseScale)) - o) ; s = VL_MAX(s, geom.octaveFirstSubdivision) ; s = VL_MIN(s, geom.octaveLastSubdivision) ; sigma_ = geom.baseScale * pow(2.0, o + (double)s / geom.octaveResolution) ; /*VL_PRINTF(".. %d D=%g %g; sigma_=%g factor*sigma_=%g\n", o, d1, d2, sigma_, factor* sigma_) ;*/ if (factor * sigma_ > sigma) { o -- ; break ; } } o = VL_MIN(o, geom.lastOctave) ; s = vl_floor_d(vl_log2_d(sigma / (factor * geom.baseScale)) - o) ; s = VL_MAX(s, geom.octaveFirstSubdivision) ; s = VL_MIN(s, geom.octaveLastSubdivision) ; sigma_ = geom.baseScale * pow(2.0, o + (double)s / geom.octaveResolution) ; if (sigma1) *sigma1 = sigma_ / d1 ; if (sigma2) *sigma2 = sigma_ / d2 ; /*VL_PRINTF("%d %d %g %g %g %g\n", o, s, factor, sigma_, factor * sigma_, sigma) ;*/ /* Now the scale space level to be used for this warping has been determined. If the patch is partially or completely out of the image boundary, create a padded copy of the required region first. */ level = vl_scalespace_get_level(self->gss, o, s) ; oct = vl_scalespace_get_octave_geometry(self->gss, o) ; width = oct.width ; height = oct.height ; step = oct.step ; A[0] /= step ; A[1] /= step ; A[2] /= step ; A[3] /= step ; T[0] /= step ; T[1] /= step ; { /* Warp the patch domain [x0hat,y0hat,x1hat,y1hat] to the image domain/ Obtain a box [x0,y0,x1,y1] enclosing that wrapped box, and then an integer vertexes version [x0i, y0i, x1i, y1i], making room for one pixel at the boundaty to simplify bilinear interpolation later on. */ vl_index x0i, y0i, x1i, y1i ; double x0 = +VL_INFINITY_D ; double x1 = -VL_INFINITY_D ; double y0 = +VL_INFINITY_D ; double y1 = -VL_INFINITY_D ; double boxx [4] = {extent, extent, -extent, -extent} ; double boxy [4] = {-extent, extent, extent, -extent} ; int i ; for (i = 0 ; i < 4 ; ++i) { double x = A[0] * boxx[i] + A[2] * boxy[i] + T[0] ; double y = A[1] * boxx[i] + A[3] * boxy[i] + T[1] ; x0 = VL_MIN(x0, x) ; x1 = VL_MAX(x1, x) ; y0 = VL_MIN(y0, y) ; y1 = VL_MAX(y1, y) ; } /* Leave one pixel border for bilinear interpolation. */ x0i = floor(x0) - 1 ; y0i = floor(y0) - 1 ; x1i = ceil(x1) + 1 ; y1i = ceil(y1) + 1 ; /* If the box [x0i,y0i,x1i,y1i] is not fully contained in the image domain, then create a copy of this region by padding the image. The image is extended by continuity. */ if (x0i < 0 || x1i > (signed)width-1 || y0i < 0 || y1i > (signed)height-1) { vl_index xi, yi ; /* compute the amount of l,r,t,b padding needed to complete the patch */ vl_index padx0 = VL_MAX(0, - x0i) ; vl_index pady0 = VL_MAX(0, - y0i) ; vl_index padx1 = VL_MAX(0, x1i - ((signed)width - 1)) ; vl_index pady1 = VL_MAX(0, y1i - ((signed)height - 1)) ; /* make enough room for the patch */ vl_index patchWidth = x1i - x0i + 1 ; vl_index patchHeight = y1i - y0i + 1 ; vl_size patchBufferSize = patchWidth * patchHeight * sizeof(float) ; if (patchBufferSize > self->patchBufferSize) { int err = _vl_resize_buffer((void**)&self->patch, &self->patchBufferSize, patchBufferSize) ; if (err) return vl_set_last_error(VL_ERR_ALLOC, NULL) ; } if (pady0 < patchHeight - pady1) { /* start by filling the central horizontal band */ for (yi = y0i + pady0 ; yi < y0i + patchHeight - pady1 ; ++ yi) { float *dst = self->patch + (yi - y0i) * patchWidth ; float const *src = level + yi * width + VL_MIN(VL_MAX(0, x0i),(signed)width-1) ; for (xi = x0i ; xi < x0i + padx0 ; ++xi) *dst++ = *src ; for ( ; xi < x0i + patchWidth - padx1 - 2 ; ++xi) *dst++ = *src++ ; for ( ; xi < x0i + patchWidth ; ++xi) *dst++ = *src ; } /* now extend the central band up and down */ for (yi = 0 ; yi < pady0 ; ++yi) { memcpy(self->patch + yi * patchWidth, self->patch + pady0 * patchWidth, patchWidth * sizeof(float)) ; } for (yi = patchHeight - pady1 ; yi < patchHeight ; ++yi) { memcpy(self->patch + yi * patchWidth, self->patch + (patchHeight - pady1 - 1) * patchWidth, patchWidth * sizeof(float)) ; } } else { /* should be handled better! */ memset(self->patch, 0, self->patchBufferSize) ; } #if 0 { char name [200] ; snprintf(name, 200, "/tmp/%20.0f-ext.pgm", 1e10*vl_get_cpu_time()) ; vl_pgm_write_f(name, patch, patchWidth, patchWidth) ; } #endif level = self->patch ; width = patchWidth ; height = patchHeight ; T[0] -= x0i ; T[1] -= y0i ; } } /* Resample by using bilinear interpolation. */ { float * pt = patch ; double yhat = -extent ; vl_index xxi ; vl_index yyi ; double stephat = extent / resolution ; for (yyi = 0 ; yyi < 2 * (signed)resolution + 1 ; ++yyi) { double xhat = -extent ; double rx = A[2] * yhat + T[0] ; double ry = A[3] * yhat + T[1] ; for (xxi = 0 ; xxi < 2 * (signed)resolution + 1 ; ++xxi) { double x = A[0] * xhat + rx ; double y = A[1] * xhat + ry ; vl_index xi = vl_floor_d(x) ; vl_index yi = vl_floor_d(y) ; double i00 = level[yi * width + xi] ; double i10 = level[yi * width + xi + 1] ; double i01 = level[(yi + 1) * width + xi] ; double i11 = level[(yi + 1) * width + xi + 1] ; double wx = x - xi ; double wy = y - yi ; assert(xi >= 0 && xi <= (signed)width - 1) ; assert(yi >= 0 && yi <= (signed)height - 1) ; *pt++ = (1.0 - wy) * ((1.0 - wx) * i00 + wx * i10) + wy * ((1.0 - wx) * i01 + wx * i11) ; xhat += stephat ; } yhat += stephat ; } } #if 0 { char name [200] ; snprintf(name, 200, "/tmp/%20.0f.pgm", 1e10*vl_get_cpu_time()) ; vl_pgm_write_f(name, patch, 2*resolution+1, 2*resolution+1) ; } #endif return VL_ERR_OK ; } /** @brief Helper for extracting patches ** @param self object. ** @param patch buffer. ** @param resolution patch resolution. ** @param extent patch extent. ** @param sigma desired smoothing in the patch frame. ** @param frame feature frame. ** ** The function considers a patch of extent [-extent,extent] ** on each side, with a side counting 2*resolution+1 pixels. ** In attempts to extract from the scale space a patch ** baed on the affine warping specified by @a frame in such a way ** that the resulting smoothing of the image is @a sigma (in the ** patch frame). ** ** The transformation is specified by the matrices @c A and @c T ** embedded in the feature @a frame. Note that this transformation maps ** pixels from the patch frame to the image frame. **/ vl_bool vl_covdet_extract_patch_for_frame (VlCovDet * self, float * patch, vl_size resolution, double extent, double sigma, VlFrameOrientedEllipse frame) { double A[2*2] = {frame.a11, frame.a21, frame.a12, frame.a22} ; double T[2] = {frame.x, frame.y} ; double D[4], U[4], V[4] ; vl_svd2(D, U, V, A) ; return vl_covdet_extract_patch_helper (self, NULL, NULL, patch, resolution, extent, sigma, A, T, D[0], D[3]) ; } /* ---------------------------------------------------------------- */ /* Affine shape */ /* ---------------------------------------------------------------- */ /** @brief Extract the affine shape for a feature frame ** @param self object. ** @param adapted the shape-adapted frame. ** @param frame the input frame. ** @return ::VL_ERR_OK if affine adaptation is successful. ** ** This function may fail if adaptation is unsuccessful or if ** memory is insufficient. **/ int vl_covdet_extract_affine_shape_for_frame (VlCovDet * self, VlFrameOrientedEllipse * adapted, VlFrameOrientedEllipse frame) { vl_index iter = 0 ; double A [2*2] = {frame.a11, frame.a21, frame.a12, frame.a22} ; double T [2] = {frame.x, frame.y} ; double U [2*2] ; double V [2*2] ; double D [2*2] ; double M [2*2] ; double P [2*2] ; double P_ [2*2] ; double Q [2*2] ; double sigma1, sigma2 ; double sigmaD = VL_COVDET_AA_RELATIVE_DERIVATIVE_SIGMA ; double factor ; double anisotropy ; double referenceScale ; vl_size const resolution = VL_COVDET_AA_PATCH_RESOLUTION ; vl_size const side = 2*VL_COVDET_AA_PATCH_RESOLUTION + 1 ; double const extent = VL_COVDET_AA_PATCH_EXTENT ; *adapted = frame ; while (1) { double lxx = 0, lxy = 0, lyy = 0 ; vl_index k ; int err ; /* A = U D V' */ vl_svd2(D, U, V, A) ; anisotropy = VL_MAX(D[0]/D[3], D[3]/D[0]) ; /* VL_PRINTF("anisot: %g\n", anisotropy); */ if (anisotropy > VL_COVDET_AA_MAX_ANISOTROPY) { /* diverged, give up with current solution */ break ; } /* make sure that the smallest singluar value stays fixed after the first iteration */ if (iter == 0) { referenceScale = VL_MIN(D[0], D[3]) ; factor = 1.0 ; } else { factor = referenceScale / VL_MIN(D[0],D[3]) ; } D[0] *= factor ; D[3] *= factor ; A[0] = U[0] * D[0] ; A[1] = U[1] * D[0] ; A[2] = U[2] * D[3] ; A[3] = U[3] * D[3] ; adapted->a11 = A[0] ; adapted->a21 = A[1] ; adapted->a12 = A[2] ; adapted->a22 = A[3] ; if (++iter >= VL_COVDET_AA_MAX_NUM_ITERATIONS) break ; err = vl_covdet_extract_patch_helper(self, &sigma1, &sigma2, self->aaPatch, resolution, extent, sigmaD, A, T, D[0], D[3]) ; if (err) return err ; if (self->aaAccurateSmoothing ) { double deltaSigma1 = sqrt(VL_MAX(sigmaD*sigmaD - sigma1*sigma1,0)) ; double deltaSigma2 = sqrt(VL_MAX(sigmaD*sigmaD - sigma2*sigma2,0)) ; double stephat = extent / resolution ; vl_imsmooth_f(self->aaPatch, side, self->aaPatch, side, side, side, deltaSigma1 / stephat, deltaSigma2 / stephat) ; } /* compute second moment matrix */ vl_imgradient_f (self->aaPatchX, self->aaPatchY, 1, side, self->aaPatch, side, side, side) ; for (k = 0 ; k < (signed)(side*side) ; ++k) { double lx = self->aaPatchX[k] ; double ly = self->aaPatchY[k] ; lxx += lx * lx * self->aaMask[k] ; lyy += ly * ly * self->aaMask[k] ; lxy += lx * ly * self->aaMask[k] ; } M[0] = lxx ; M[1] = lxy ; M[2] = lxy ; M[3] = lyy ; if (lxx == 0 || lyy == 0) { *adapted = frame ; break ; } /* decompose M = P * Q * P' */ vl_svd2 (Q, P, P_, M) ; /* Setting A <- A * dA results in M to change approximatively as M --> dA' M dA = dA' P Q P dA To make this proportional to the identity, we set dA ~= P Q^1/2 we also make it so the smallest singular value of A is unchanged. */ if (Q[3]/Q[0] < VL_COVDET_AA_CONVERGENCE_THRESHOLD && Q[0]/Q[3] < VL_COVDET_AA_CONVERGENCE_THRESHOLD) { break ; } { double Ap [4] ; double q0 = sqrt(Q[0]) ; double q1 = sqrt(Q[3]) ; Ap[0] = (A[0] * P[0] + A[2] * P[1]) / q0 ; Ap[1] = (A[1] * P[0] + A[3] * P[1]) / q0 ; Ap[2] = (A[0] * P[2] + A[2] * P[3]) / q1 ; Ap[3] = (A[1] * P[2] + A[3] * P[3]) / q1 ; memcpy(A,Ap,4*sizeof(double)) ; } } /* next iteration */ /* Make upright. Shape adaptation does not estimate rotation. This is fixed by default so that a selected axis is not rotated at all (usually this is the vertical axis for upright features). To do so, the frame is rotated as follows. */ { double A [2*2] = {adapted->a11, adapted->a21, adapted->a12, adapted->a22} ; double ref [2] ; double ref_ [2] ; double angle ; double angle_ ; double dangle ; double r1, r2 ; if (self->transposed) { /* up is the x axis */ ref[0] = 1 ; ref[1] = 0 ; } else { /* up is the y axis */ ref[0] = 0 ; ref[1] = 1 ; } vl_solve_linear_system_2 (ref_, A, ref) ; angle = atan2(ref[1], ref[0]) ; angle_ = atan2(ref_[1], ref_[0]) ; dangle = angle_ - angle ; r1 = cos(dangle) ; r2 = sin(dangle) ; adapted->a11 = + A[0] * r1 + A[2] * r2 ; adapted->a21 = + A[1] * r1 + A[3] * r2 ; adapted->a12 = - A[0] * r2 + A[2] * r1 ; adapted->a22 = - A[1] * r2 + A[3] * r1 ; } return VL_ERR_OK ; } /** @brief Extract the affine shape for the stored features ** @param self object. ** ** This function may discard features for which no affine ** shape can reliably be detected. **/ void vl_covdet_extract_affine_shape (VlCovDet * self) { vl_index i, j = 0 ; vl_size numFeatures = vl_covdet_get_num_features(self) ; VlCovDetFeature * feature = vl_covdet_get_features(self); for (i = 0 ; i < (signed)numFeatures ; ++i) { int status ; VlFrameOrientedEllipse adapted ; status = vl_covdet_extract_affine_shape_for_frame(self, &adapted, feature[i].frame) ; if (status == VL_ERR_OK) { feature[j] = feature[i] ; feature[j].frame = adapted ; ++ j ; } } self->numFeatures = j ; } /* ---------------------------------------------------------------- */ /* Orientation */ /* ---------------------------------------------------------------- */ static int _vl_covdet_compare_orientations_descending (void const * a_, void const * b_) { VlCovDetFeatureOrientation const * a = a_ ; VlCovDetFeatureOrientation const * b = b_ ; if (a->score > b->score) return -1 ; if (a->score < b->score) return +1 ; return 0 ; } /** @brief Extract the orientation(s) for a feature frame ** @param self object. ** @param numOrientations the number of detected orientations. ** @return an array of detected orientations with their scores. ** ** The returned array is a matrix of size @f$ 2 \times n @f$ ** where n is the number of detected orientations. ** ** The function returns @c NULL if memory is insufficient. **/ VlCovDetFeatureOrientation * vl_covdet_extract_orientations_for_frame (VlCovDet * self, vl_size * numOrientations, VlFrameOrientedEllipse frame) { int err ; vl_index k, i ; vl_index iter ; double extent = VL_COVDET_AA_PATCH_EXTENT ; vl_size resolution = VL_COVDET_AA_PATCH_RESOLUTION ; vl_size side = 2 * resolution + 1 ; vl_size const numBins = VL_COVDET_OR_NUM_ORIENTATION_HISTOGAM_BINS ; double hist [VL_COVDET_OR_NUM_ORIENTATION_HISTOGAM_BINS] ; double const binExtent = 2 * VL_PI / VL_COVDET_OR_NUM_ORIENTATION_HISTOGAM_BINS ; double const peakRelativeSize = VL_COVDET_OR_ADDITIONAL_PEAKS_RELATIVE_SIZE ; double maxPeakValue ; double A [2*2] = {frame.a11, frame.a21, frame.a12, frame.a22} ; double T [2] = {frame.x, frame.y} ; double U [2*2] ; double V [2*2] ; double D [2*2] ; double sigma1, sigma2 ; double sigmaD = 1.0 ; double theta0 ; assert(self); assert(numOrientations) ; /* The goal is to estimate a rotation R(theta) such that the patch given by the transformation A R(theta) has the strongest average gradient pointing right (or down for transposed conventions). To compensate for tha anisotropic smoothing due to warping, A is decomposed as A = U D V' and the patch is warped by U D only, meaning that the matrix R_(theta) will be estimated instead, where: A R(theta) = U D V' R(theta) = U D R_(theta) such that R(theta) = V R(theta). That is an extra rotation of theta0 = atan2(V(2,1),V(1,1)). */ /* axis aligned anisotropic smoothing for easier compensation */ vl_svd2(D, U, V, A) ; A[0] = U[0] * D[0] ; A[1] = U[1] * D[0] ; A[2] = U[2] * D[3] ; A[3] = U[3] * D[3] ; theta0 = atan2(V[1],V[0]) ; err = vl_covdet_extract_patch_helper(self, &sigma1, &sigma2, self->aaPatch, resolution, extent, sigmaD, A, T, D[0], D[3]) ; if (err) { *numOrientations = 0 ; return NULL ; } if (1) { double deltaSigma1 = sqrt(VL_MAX(sigmaD*sigmaD - sigma1*sigma1,0)) ; double deltaSigma2 = sqrt(VL_MAX(sigmaD*sigmaD - sigma2*sigma2,0)) ; double stephat = extent / resolution ; vl_imsmooth_f(self->aaPatch, side, self->aaPatch, side, side, side, deltaSigma1 / stephat, deltaSigma2 / stephat) ; } /* histogram of oriented gradients */ vl_imgradient_polar_f (self->aaPatchX, self->aaPatchY, 1, side, self->aaPatch, side, side, side) ; memset (hist, 0, sizeof(double) * numBins) ; for (k = 0 ; k < (signed)(side*side) ; ++k) { double modulus = self->aaPatchX[k] ; double angle = self->aaPatchY[k] ; double weight = self->aaMask[k] ; double x = angle / binExtent ; vl_index bin = vl_floor_d(x) ; double w2 = x - bin ; double w1 = 1.0 - w2 ; hist[(bin + numBins) % numBins] += w1 * (modulus * weight) ; hist[(bin + numBins + 1) % numBins] += w2 * (modulus * weight) ; } /* smooth histogram */ for (iter = 0; iter < 6; iter ++) { double prev = hist [numBins - 1] ; double first = hist [0] ; vl_index i ; for (i = 0; i < (signed)numBins - 1; ++i) { double curr = (prev + hist[i] + hist[(i + 1) % numBins]) / 3.0 ; prev = hist[i] ; hist[i] = curr ; } hist[i] = (prev + hist[i] + first) / 3.0 ; } /* find the histogram maximum */ maxPeakValue = 0 ; for (i = 0 ; i < (signed)numBins ; ++i) { maxPeakValue = VL_MAX (maxPeakValue, hist[i]) ; } /* find peaks within 80% from max */ *numOrientations = 0 ; for(i = 0 ; i < (signed)numBins ; ++i) { double h0 = hist [i] ; double hm = hist [(i - 1 + numBins) % numBins] ; double hp = hist [(i + 1 + numBins) % numBins] ; /* is this a peak? */ if (h0 > peakRelativeSize * maxPeakValue && h0 > hm && h0 > hp) { /* quadratic interpolation */ double di = - 0.5 * (hp - hm) / (hp + hm - 2 * h0) ; double th = binExtent * (i + di) + theta0 ; if (self->transposed) { /* the axis to the right is y, measure orientations from this */ th = th - VL_PI/2 ; } self->orientations[*numOrientations].angle = th ; self->orientations[*numOrientations].score = h0 ; *numOrientations += 1 ; //VL_PRINTF("%d %g\n", *numOrientations, th) ; if (*numOrientations >= VL_COVDET_MAX_NUM_ORIENTATIONS) break ; } } /* sort the oritentations by decreasing scores */ qsort(self->orientations, *numOrientations, sizeof(VlCovDetFeatureOrientation), _vl_covdet_compare_orientations_descending) ; return self->orientations ; } /** @brief Extract the orientation(s) for the stored features. ** @param self object. ** ** Note that, since more than one orientation can be detected ** for each feature, this function may create copies of them, ** one for each orientation. **/ void vl_covdet_extract_orientations (VlCovDet * self) { vl_index i, j ; vl_size numFeatures = vl_covdet_get_num_features(self) ; for (i = 0 ; i < (signed)numFeatures ; ++i) { vl_size numOrientations ; VlCovDetFeature feature = self->features[i] ; VlCovDetFeatureOrientation* orientations = vl_covdet_extract_orientations_for_frame(self, &numOrientations, feature.frame) ; for (j = 0 ; j < (signed)numOrientations ; ++j) { double A [2*2] = { feature.frame.a11, feature.frame.a21, feature.frame.a12, feature.frame.a22} ; double r1 = cos(orientations[j].angle) ; double r2 = sin(orientations[j].angle) ; VlCovDetFeature * oriented ; if (j == 0) { oriented = & self->features[i] ; } else { vl_covdet_append_feature(self, &feature) ; oriented = & self->features[self->numFeatures -1] ; } oriented->orientationScore = orientations[j].score ; oriented->frame.a11 = + A[0] * r1 + A[2] * r2 ; oriented->frame.a21 = + A[1] * r1 + A[3] * r2 ; oriented->frame.a12 = - A[0] * r2 + A[2] * r1 ; oriented->frame.a22 = - A[1] * r2 + A[3] * r1 ; } } } /* ---------------------------------------------------------------- */ /* Laplacian scales */ /* ---------------------------------------------------------------- */ /** @brief Extract the Laplacian scale(s) for a feature frame. ** @param self object. ** @param numScales the number of detected scales. ** @return an array of detected scales. ** ** The function returns @c NULL if memory is insufficient. **/ VlCovDetFeatureLaplacianScale * vl_covdet_extract_laplacian_scales_for_frame (VlCovDet * self, vl_size * numScales, VlFrameOrientedEllipse frame) { /* We try to explore one octave, with the nominal detection scale 1.0 (in the patch reference frame) in the middle. Thus the goal is to sample the response of the tr-Laplacian operator at logarithmically spaced scales in 1/sqrt(2), sqrt(2). To this end, the patch is warped with a smoothing of at most sigmaImage = 1 / sqrt(2) (beginning of the scale), sampled at roughly twice the Nyquist frequency (so step = 1 / (2*sqrt(2))). This maes it possible to approximate the Laplacian operator at that scale by simple finite differences. */ int err ; double const sigmaImage = 1.0 / sqrt(2.0) ; double const step = 0.5 * sigmaImage ; double actualSigmaImage ; vl_size const resolution = VL_COVDET_LAP_PATCH_RESOLUTION ; vl_size const num = 2 * resolution + 1 ; double extent = step * resolution ; double scores [VL_COVDET_LAP_NUM_LEVELS] ; double factor = 1.0 ; float const * pt ; vl_index k ; double A[2*2] = {frame.a11, frame.a21, frame.a12, frame.a22} ; double T[2] = {frame.x, frame.y} ; double D[4], U[4], V[4] ; double sigma1, sigma2 ; assert(self) ; assert(numScales) ; *numScales = 0 ; vl_svd2(D, U, V, A) ; err = vl_covdet_extract_patch_helper (self, &sigma1, &sigma2, self->lapPatch, resolution, extent, sigmaImage, A, T, D[0], D[3]) ; if (err) return NULL ; /* the actual smoothing after warping is never the target one */ if (sigma1 == sigma2) { actualSigmaImage = sigma1 ; } else { /* here we could compensate */ actualSigmaImage = sqrt(sigma1*sigma2) ; } /* now multiply by the bank of Laplacians */ pt = self->laplacians ; for (k = 0 ; k < VL_COVDET_LAP_NUM_LEVELS ; ++k) { vl_index q ; double score = 0 ; double sigmaLap = pow(2.0, -0.5 + (double)k / (VL_COVDET_LAP_NUM_LEVELS - 1)) ; /* note that the sqrt argument cannot be negative since by construction sigmaLap >= sigmaImage */ sigmaLap = sqrt(sigmaLap*sigmaLap - sigmaImage*sigmaImage + actualSigmaImage*actualSigmaImage) ; for (q = 0 ; q < (signed)(num * num) ; ++q) { score += (*pt++) * self->lapPatch[q] ; } scores[k] = score * sigmaLap * sigmaLap ; } /* find and interpolate maxima */ for (k = 1 ; k < VL_COVDET_LAP_NUM_LEVELS - 1 ; ++k) { double a = scores[k-1] ; double b = scores[k] ; double c = scores[k+1] ; double t = VL_COVDET_DOG_DEF_PEAK_THRESHOLD ; if ((((b > a) && (b > c)) || ((b < a) && (b < c))) && (vl_abs_d(b) >= t)) { double dk = - 0.5 * (c - a) / (c + a - 2 * b) ; double s = k + dk ; double sigmaLap = pow(2.0, -0.5 + s / (VL_COVDET_LAP_NUM_LEVELS - 1)) ; double scale ; sigmaLap = sqrt(sigmaLap*sigmaLap - sigmaImage*sigmaImage + actualSigmaImage*actualSigmaImage) ; scale = sigmaLap / 1.0 ; /* VL_PRINTF("** k:%d, s:%f, sigmaLapFilter:%f, sigmaLap%f, scale:%f (%f %f %f)\n", k,s,sigmaLapFilter,sigmaLap,scale,a,b,c) ; */ if (*numScales < VL_COVDET_MAX_NUM_LAPLACIAN_SCALES) { self->scales[*numScales].scale = scale * factor ; self->scales[*numScales].score = b + 0.5 * (c - a) * dk ; *numScales += 1 ; } } } return self->scales ; } /** @brief Extract the Laplacian scales for the stored features ** @param self object. ** ** Note that, since more than one orientation can be detected ** for each feature, this function may create copies of them, ** one for each orientation. **/ void vl_covdet_extract_laplacian_scales (VlCovDet * self) { vl_index i, j ; vl_bool dropFeaturesWithoutScale = VL_TRUE ; vl_size numFeatures = vl_covdet_get_num_features(self) ; memset(self->numFeaturesWithNumScales, 0, sizeof(self->numFeaturesWithNumScales)) ; for (i = 0 ; i < (signed)numFeatures ; ++i) { vl_size numScales ; VlCovDetFeature feature = self->features[i] ; VlCovDetFeatureLaplacianScale const * scales = vl_covdet_extract_laplacian_scales_for_frame(self, &numScales, feature.frame) ; self->numFeaturesWithNumScales[numScales] ++ ; if (numScales == 0 && dropFeaturesWithoutScale) { self->features[i].peakScore = 0 ; } for (j = 0 ; j < (signed)numScales ; ++j) { VlCovDetFeature * scaled ; if (j == 0) { scaled = & self->features[i] ; } else { vl_covdet_append_feature(self, &feature) ; scaled = & self->features[self->numFeatures -1] ; } scaled->laplacianScaleScore = scales[j].score ; scaled->frame.a11 *= scales[j].scale ; scaled->frame.a21 *= scales[j].scale ; scaled->frame.a12 *= scales[j].scale ; scaled->frame.a22 *= scales[j].scale ; } } if (dropFeaturesWithoutScale) { j = 0 ; for (i = 0 ; i < (signed)self->numFeatures ; ++i) { VlCovDetFeature feature = self->features[i] ; if (feature.peakScore) { self->features[j++] = feature ; } } self->numFeatures = j ; } } /* ---------------------------------------------------------------- */ /* Checking that features are inside an image */ /* ---------------------------------------------------------------- */ vl_bool _vl_covdet_check_frame_inside (VlCovDet * self, VlFrameOrientedEllipse frame, double margin) { double extent = margin ; double A [2*2] = {frame.a11, frame.a21, frame.a12, frame.a22} ; double T[2] = {frame.x, frame.y} ; double x0 = +VL_INFINITY_D ; double x1 = -VL_INFINITY_D ; double y0 = +VL_INFINITY_D ; double y1 = -VL_INFINITY_D ; double boxx [4] = {extent, extent, -extent, -extent} ; double boxy [4] = {-extent, extent, extent, -extent} ; VlScaleSpaceGeometry geom = vl_scalespace_get_geometry(self->gss) ; int i ; for (i = 0 ; i < 4 ; ++i) { double x = A[0] * boxx[i] + A[2] * boxy[i] + T[0] ; double y = A[1] * boxx[i] + A[3] * boxy[i] + T[1] ; x0 = VL_MIN(x0, x) ; x1 = VL_MAX(x1, x) ; y0 = VL_MIN(y0, y) ; y1 = VL_MAX(y1, y) ; } return 0 <= x0 && x1 <= geom.width-1 && 0 <= y0 && y1 <= geom.height-1 ; } /** @brief Drop features (partially) outside the image ** @param self object. ** @param margin geometric marging. ** ** The feature extent is defined by @c maring. A bounding box ** in the normalised feature frame containin a circle of radius ** @a maring is created and mapped to the image by ** the feature frame transformation. Then the feature ** is dropped if the bounding box is not contained in the image. ** ** For example, setting @c margin to zero drops a feature only ** if its center is not contained. ** ** Typically a valua of @c margin equal to 1 or 2 is used. **/ void vl_covdet_drop_features_outside (VlCovDet * self, double margin) { vl_index i, j = 0 ; vl_size numFeatures = vl_covdet_get_num_features(self) ; for (i = 0 ; i < (signed)numFeatures ; ++i) { vl_bool inside = _vl_covdet_check_frame_inside (self, self->features[i].frame, margin) ; if (inside) { self->features[j] = self->features[i] ; ++j ; } } self->numFeatures = j ; } /* ---------------------------------------------------------------- */ /* Setters and getters */ /* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */ /** @brief Get wether images are passed in transposed ** @param self ::VlCovDet object. ** @return whether images are transposed. **/ vl_bool vl_covdet_get_transposed (VlCovDet const * self) { return self->transposed ; } /** @brief Set the index of the first octave ** @param self ::VlCovDet object. ** @param t whether images are transposed. **/ void vl_covdet_set_transposed (VlCovDet * self, vl_bool t) { self->transposed = t ; } /* ---------------------------------------------------------------- */ /** @brief Get the edge threshold ** @param self ::VlCovDet object. ** @return the edge threshold. **/ double vl_covdet_get_edge_threshold (VlCovDet const * self) { return self->edgeThreshold ; } /** @brief Set the edge threshold ** @param self ::VlCovDet object. ** @param the edge threshold. ** ** The edge threshold must be non-negative. **/ void vl_covdet_set_edge_threshold (VlCovDet * self, double edgeThreshold) { assert(edgeThreshold >= 0) ; self->edgeThreshold = edgeThreshold ; } /* ---------------------------------------------------------------- */ /** @brief Get the peak threshold ** @param self ::VlCovDet object. ** @return the peak threshold. **/ double vl_covdet_get_peak_threshold (VlCovDet const * self) { return self->peakThreshold ; } /** @brief Set the peak threshold ** @param self ::VlCovDet object. ** @param the peak threshold. ** ** The peak threshold must be non-negative. **/ void vl_covdet_set_peak_threshold (VlCovDet * self, double peakThreshold) { assert(peakThreshold >= 0) ; self->peakThreshold = peakThreshold ; } /* ---------------------------------------------------------------- */ /** @brief Get the index of the first octave ** @param self ::VlCovDet object. ** @return index of the first octave. **/ vl_index vl_covdet_get_first_octave (VlCovDet const * self) { return self->firstOctave ; } /** @brief Set the index of the first octave ** @param self ::VlCovDet object. ** @param index of the first octave. ** ** Calling this function resets the detector. **/ void vl_covdet_set_first_octave (VlCovDet * self, vl_index o) { self->firstOctave = o ; vl_covdet_reset(self) ; } /* ---------------------------------------------------------------- */ /** @brief Get the octave resolution. ** @param self ::VlCovDet object. ** @return octave resolution. **/ vl_size vl_covdet_get_octave_resolution (VlCovDet const * self) { return self->octaveResolution ; } /** @brief Set the octave resolutuon. ** @param self ::VlCovDet object. ** @param octave resoltuion. ** ** Calling this function resets the detector. **/ void vl_covdet_set_octave_resolution (VlCovDet * self, vl_size r) { self->octaveResolution = r ; vl_covdet_reset(self) ; } /* ---------------------------------------------------------------- */ /** @brief Get whether affine adaptation uses accurate smoothing. ** @param self object. ** @return @c true if accurate smoothing is used. **/ vl_bool vl_covdet_get_aa_accurate_smoothing (VlCovDet const * self) { return self->aaAccurateSmoothing ; } /** @brief Set whether affine adaptation uses accurate smoothing. ** @param self object. ** @param x whether accurate smoothing should be usd. **/ void vl_covdet_set_aa_accurate_smoothing (VlCovDet * self, vl_bool x) { self->aaAccurateSmoothing = x ; } /* ---------------------------------------------------------------- */ /** @brief Get the non-extrema suppression threshold ** @param self object. ** @return threshold. **/ double vl_covdet_get_non_extrema_suppression_threshold (VlCovDet const * self) { return self->nonExtremaSuppression ; } /** @brief Set the non-extrema suppression threshod ** @param self object. ** @param x threshold. **/ void vl_covdet_set_non_extrema_suppression_threshold (VlCovDet * self, double x) { self->nonExtremaSuppression = x ; } /** @brief Get the number of non-extrema suppressed ** @param self object. ** @return number. **/ vl_size vl_covdet_get_num_non_extrema_suppressed (VlCovDet const * self) { return self->numNonExtremaSuppressed ; } /* ---------------------------------------------------------------- */ /** @brief Get number of stored frames ** @return number of frames stored in the detector. **/ vl_size vl_covdet_get_num_features (VlCovDet const * self) { return self->numFeatures ; } /** @brief Get the stored frames ** @return frames stored in the detector. **/ void * vl_covdet_get_features (VlCovDet * self) { return self->features ; } /** @brief Get the Gaussian scale space ** @return Gaussian scale space. ** ** A Gaussian scale space exists only after calling ::vl_covdet_put_image. ** Otherwise the function returns @c NULL. **/ VlScaleSpace * vl_covdet_get_gss (VlCovDet const * self) { return self->gss ; } /** @brief Get the cornerness measure scale space ** @return cornerness measure scale space. ** ** A cornerness measure scale space exists only after calling ** ::vl_covdet_detect. Otherwise the function returns @c NULL. **/ VlScaleSpace * vl_covdet_get_css (VlCovDet const * self) { return self->css ; } /** @brief Get the number of features found with a certain number of scales ** @param sellf object. ** @param numScales length of the histogram (out). ** @return histogram. ** ** Calling this function makes sense only after running a detector ** that uses the Laplacian as a secondary measure for scale ** detection **/ vl_size const * vl_covdet_get_laplacian_scales_statistics (VlCovDet const * self, vl_size * numScales) { *numScales = VL_COVDET_MAX_NUM_LAPLACIAN_SCALES ; return self->numFeaturesWithNumScales ; } vlfeat/vl/lbp.c0000644000175000017500000002130612237004736012315 0ustar dimadima/** @file lbp.c ** @brief Local Binary Patterns - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @file lbp.h ::VlLbp implements the local binary pattern features. An LBP feature [1] is a l2-normalized local histogram of quantized local binary patterns (LBP). @section lbp Local Binary Patterns A LBP is a string of bit obtained by binarizing a local neighbourhood of pixels with respect to the brightness of the central pixel. ::VlLbp implements only the case of 3x3 pixel neighbourhoods (this setting perform best in applications). Thus the LBP at location @f$ (x,y) @f$ is a string of eight bits. Each bit is equal to one if the corresponding pixel is brighter than the central one. Pixels are scanned starting from the one to the right in anti-clockwise sense. For example the first bit is one if, and only if, @f$ I(x+1,y) > I(x,y), and the second bit if, and only if, @f$ I(x+1,y-1) > I(x,y). @subsection lbp-quantization Quantized LBP For a 3x3 neighborhood, an LBP is a string of eight bits and so there are 256 possible LBPs. These are usually too many for a reliable statistics (histogram) to be computed. Therefore the 256 patterns are further quantized into a smaller number of patterns according to one of the following rules: - Uniform (::VlLbpUniform) There is one quantized pattern for each LBP that has exactly a transitions from 0 to 1 and one from 1 to 0 when scanned in anti-clockwise order, plus one quantized pattern comprising the two uniform LBPs, and one quantized pattern comprising all the other LBPs. This yields a total of 58 quantized patterns. The number of quantized LBPs, which depends on the quantization type, can be obtained by ::vl_lbp_get_dimension. @subsection lbp-histograms Histograms of LBPs The quantized LBP patterns are further grouped into local histograms. The image is divided into a number of cells of a prescribed size (@c cellSize). Then the quantized LBPs are aggregated into histogram by using bilinear interpolation along the two spatial dimensions (similar to HOG and SIFT). @subsection lbp-usage Usage First, one creates a ::VlLbp object instance by specifying the type of quantization (this initializes some internal tables to speedup the computation). Then, one obtains all the quantized LBPs histograms by calling ::vl_lbp_process. This function expects as input a buffer large enough to contain the computed features. If the image has size @c width x @c height, there are exactly @c floor(width/cellSize) x @c floor(height/cellSize) cells, each of which has a histogram of LBPs of size @c dimension (as returned by ::vl_lbp_get_dimension). Thus the required buffer has size @c floor(width/cellSize) x @c floor(height/cellSize) x @c dimension. ::VlLbp supports computing transposed LPBs as well. A transposed LBP is the LBP obtained by transposing the underlying image patch (regarded as a matrix). This can be useful to compute the features when the image is column major rather than row major. @section lbp-references References [1] T. Ojala, M. Pietikainen, and M. Maenpaa. "Multiresolution gray-scale and rotation invariant texture classification with local binary patterns". PAMI, 2010. **/ #include "lbp.h" #include "mathop.h" /* ---------------------------------------------------------------- */ /* Initialization helpers */ /* ---------------------------------------------------------------- */ static void _vl_lbp_init_uniform(VlLbp * self) { int i, j ; /* one bin for constant patterns, 8*7 for 2-uniform, one for rest */ self->dimension = 58 ; /* all but selected patterns map to 57 */ for (i = 0 ; i < 256 ; ++i) { self->mapping[i] = 57 ; } /* uniform patterns map to 56 */ self->mapping[0x00] = 56 ; self->mapping[0xff] = 56 ; /* now uniform pattenrs, in order */ /* locations: 0:E, 1:SE, 2:S, ..., 7:NE */ for (i = 0 ; i < 8 ; ++i) { /* string[i-1]=0, string[i]=1 */ for (j = 1 ; j <= 7 ; ++j) { /* length of sequence of ones */ /* string starting with j ones */ int unsigned string = (1 << j) - 1 ; /* put i zeroes in front */ string <<= i ; /* wrap around 8 bit boundaries */ string = (string | (string >> 8)) & 0xff ; /* optionally transpose the pattern */ if (self->transposed) { int unsigned original = string; int k ; /* flip the string left-right */ string = 0 ; for (k = 0 ; k < 8 ; ++k) { string <<= 1 ; string |= original & 0x1 ; original >>= 1 ; } /* rotate 90 degrees */ string <<= 3 ; string = (string | (string >> 8)) & 0xff ; } self->mapping[string] = i * 7 + (j-1) ; } } } /* ---------------------------------------------------------------- */ /** @brief Create a new LBP object ** @param type type of LBP features. ** @param transposed if @c true, then transpose each LBP pattern. ** @return new VlLbp object instance. **/ VlLbp * vl_lbp_new(VlLbpMappingType type, vl_bool transposed) { VlLbp * self = vl_malloc(sizeof(VlLbp)) ; if (self == NULL) { vl_set_last_error(VL_ERR_ALLOC, NULL) ; return NULL ; } self->transposed = transposed ; switch (type) { case VlLbpUniform: _vl_lbp_init_uniform(self) ; break ; default: exit(1) ; } return self ; } /** @brief Delete VlLbp object ** @param self object to delete. **/ void vl_lbp_delete(VlLbp * self) { vl_free(self) ; } /* ---------------------------------------------------------------- */ /** @brief Extract LBP features ** @param self LBP object. ** @param features buffer to write the features to. ** @param image image. ** @param width image width. ** @param height image height. ** @param cellSize size of the LBP cells. ** ** @a features is a @c numColumns x @c numRows x @c dimension where ** @c dimension is the dimension of a LBP feature obtained from ::vl_lbp_get_dimension, ** @c numColumns is equal to @c floor(width / cellSize), and similarly ** for @c numRows. **/ VL_EXPORT void vl_lbp_process (VlLbp * self, float * features, float * image, vl_size width, vl_size height, vl_size cellSize) { vl_size cwidth = width / cellSize; vl_size cheight = height / cellSize ; vl_size cstride = cwidth * cheight ; vl_size cdimension = vl_lbp_get_dimension(self) ; vl_index x,y,cx,cy,k,bin ; #define at(u,v) (*(image + width * (v) + (u))) #define to(u,v,w) (*(features + cstride * (w) + cwidth * (v) + (u))) /* accumulate pixel-level measurements into cells */ for (y = 1 ; y < (signed)height - 1 ; ++y) { float wy1 = (y + 0.5f) / (float)cellSize - 0.5f ; int cy1 = (int) vl_floor_f(wy1) ; int cy2 = cy1 + 1 ; float wy2 = wy1 - (float)cy1 ; wy1 = 1.0f - wy2 ; if (cy1 >= (signed)cheight) continue ; for (x = 1 ; x < (signed)width - 1; ++x) { float wx1 = (x + 0.5f) / (float)cellSize - 0.5f ; int cx1 = (int) vl_floor_f(wx1) ; int cx2 = cx1 + 1 ; float wx2 = wx1 - (float)cx1 ; wx1 = 1.0f - wx2 ; if (cx1 >= (signed)cwidth) continue ; { int unsigned bitString = 0 ; float center = at(x,y) ; if(at(x+1,y+0) > center) bitString |= 0x1 << 0; /* E */ if(at(x+1,y+1) > center) bitString |= 0x1 << 1; /* SE */ if(at(x+0,y+1) > center) bitString |= 0x1 << 2; /* S */ if(at(x-1,y+1) > center) bitString |= 0x1 << 3; /* SW */ if(at(x-1,y+0) > center) bitString |= 0x1 << 4; /* W */ if(at(x-1,y-1) > center) bitString |= 0x1 << 5; /* NW */ if(at(x+0,y-1) > center) bitString |= 0x1 << 6; /* N */ if(at(x+1,y-1) > center) bitString |= 0x1 << 7; /* NE */ bin = self->mapping[bitString] ; } if ((cx1 >= 0) & (cy1 >=0)) { to(cx1,cy1,bin) += wx1 * wy1; } if ((cx2 < (signed)cwidth) & (cy1 >=0)) { to(cx2,cy1,bin) += wx2 * wy1 ; } if ((cx1 >= 0) & (cy2 < (signed)cheight)) { to(cx1,cy2,bin) += wx1 * wy2 ; } if ((cx2 < (signed)cwidth) & (cy2 < (signed)cheight)) { to(cx2,cy2,bin) += wx2 * wy2 ; } } /* x */ } /* y */ /* normalize cells */ for (cy = 0 ; cy < (signed)cheight ; ++cy) { for (cx = 0 ; cx < (signed)cwidth ; ++ cx) { float norm = 0 ; for (k = 0 ; k < (signed)cdimension ; ++k) { norm += features[k * cstride] ; } norm = sqrtf(norm) + 1e-10f; ; for (k = 0 ; k < (signed)cdimension ; ++k) { features[k * cstride] = sqrtf(features[k * cstride]) / norm ; } features += 1 ; } } /* next cell to normalize */ } vlfeat/vl/quickshift.c0000644000175000017500000003436312237004736013721 0ustar dimadima/** @file quickshift.c ** @brief Quick shift - Definition ** @author Brian Fulkerson ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @page quickshift Quick shift image segmentation @author Brian Fulkerson @author Andrea Vedaldi @ref quickshift.h implements an image segmentation algorithm based on the quick shift clustering algorithm @cite{vedaldi08quick}. - @ref quickshift-intro - @ref quickshift-usage - @ref quickshift-tech @section quickshift-intro Overview Quick shift @cite{vedaldi08quick} is a fast mode seeking algorithm, similar to mean shift. The algorithm segments an RGB image (or any image with more than one channel) by identifying clusters of pixels in the joint spatial and color dimensions. Segments are local (superpixels) and can be used as a basis for further processing. Given an image, the algorithm calculates a forest of pixels whose branches are labeled with a distance value (::vl_quickshift_get_parents, ::vl_quickshift_get_dists). This specifies a hierarchical segmentation of the image, with segments corresponding to subtrees. Useful superpixels can be identified by cutting the branches whose distance label is above a given threshold (the threshold can be either fixed by hand, or determined by cross validation). Parameter influencing the algorithm are: - Kernel size. The pixel density and its modes are estimated by using a Parzen window estimator with a Gaussian kernel of the specified size (::vl_quickshift_set_kernel_size). The larger the size, the larger the neighborhoods of pixels considered. - Maximum distance. This (::vl_quickshift_set_max_dist) is the maximum distance between two pixels that the algorithm considers when building the forest. In principle, it can be infinity (so that a tree is returned), but in practice it is much faster to consider only relatively small distances (the maximum distance can be set to a small multiple of the kernel size). @section quickshift-usage Usage - Create a new quick shift object (::vl_quickshift_new). The object can be reused for multiple images of the same size. - Configure quick shift by setting the kernel size (::vl_quickshift_set_kernel_size) and the maximum gap (::vl_quickshift_set_max_dist). The latter is in principle not necessary, but useful to speedup processing. - Process an image (::vl_quickshift_process). - Retrieve the parents (::vl_quickshift_get_parents) and the distances (::vl_quickshift_get_dists). These can be used to segment the image in superpixels. - Delete the quick shift object (::vl_quickshift_delete). @section quickshift-tech Technical details For each pixel (x,y), quick shift regards @f$ (x,y,I(x,y)) @f$ as a sample from a d + 2 dimensional vector space. It then calculates the Parzen density estimate (with a Gaussian kernel of standard deviation @f$ \sigma @f$) @f[ E(x,y) = P(x,y,I(x,y)) = \sum_{x'y'} \frac{1}{(2\pi\sigma)^{d+2}} \exp \left( -\frac{1}{2\sigma^2} \left[ \begin{array}{c} x - x' \\ y - y' \\ I(x,y) - I(x',y') \\ \end{array} \right] \right) @f] Then quick shift construct a tree connecting each image pixel to its nearest neighbor which has greater density value. Formally, write @f$ (x',y') >_P (x,y) @f$ if, and only if, @f[ P(x',y',I(x',y')) > P(x,y,I(x,y))}. @f] Each pixel (x, y) is connected to the closest higher density pixel parent(x, y) that achieves the minimum distance in @f[ \mathrm{dist}(x,y) = \mathrm{min}_{(x',y') > P(x,y)} \left( (x - x')^2 + (y - y')^2 + \| I(x,y) - I(x',y') \|_2^2 \right). @f] **/ #include "quickshift.h" #include "mathop.h" #include #include #include /** ----------------------------------------------------------------- ** @internal ** @brief Computes the accumulated channel L2 distance between ** i,j + the distance between i,j ** ** @param I input image buffer ** @param N1 size of the first dimension of the image ** @param N2 size of the second dimension of the image ** @param K number of channels ** @param i1 first dimension index of the first pixel to compare ** @param i2 second dimension of the first pixel ** @param j1 index of the second pixel to compare ** @param j2 second dimension of the second pixel ** ** Takes the L2 distance between the values in I at pixel i and j, ** accumulating along K channels and adding in the distance ** between i,j in the image. ** ** @return the distance as described above **/ VL_INLINE vl_qs_type vl_quickshift_distance(vl_qs_type const * I, int N1, int N2, int K, int i1, int i2, int j1, int j2) { vl_qs_type dist = 0 ; int d1 = j1 - i1 ; int d2 = j2 - i2 ; int k ; dist += d1*d1 + d2*d2 ; /* For k = 0...K-1, d+= L2 distance between I(i1,i2,k) and * I(j1,j2,k) */ for (k = 0 ; k < K ; ++k) { vl_qs_type d = I [i1 + N1 * i2 + (N1*N2) * k] - I [j1 + N1 * j2 + (N1*N2) * k] ; dist += d*d ; } return dist ; } /** ----------------------------------------------------------------- ** @internal ** @brief Computes the accumulated channel inner product between i,j + the ** distance between i,j ** ** @param I input image buffer ** @param N1 size of the first dimension of the image ** @param N2 size of the second dimension of the image ** @param K number of channels ** @param i1 first dimension index of the first pixel to compare ** @param i2 second dimension of the first pixel ** @param j1 index of the second pixel to compare ** @param j2 second dimension of the second pixel ** ** Takes the channel-wise inner product between the values in I at ** pixel i and j, accumulating along K channels and adding in the ** inner product between i,j in the image. ** ** @return the inner product as described above **/ VL_INLINE vl_qs_type vl_quickshift_inner(vl_qs_type const * I, int N1, int N2, int K, int i1, int i2, int j1, int j2) { vl_qs_type ker = 0 ; int k ; ker += i1*j1 + i2*j2 ; for (k = 0 ; k < K ; ++k) { ker += I [i1 + N1 * i2 + (N1*N2) * k] * I [j1 + N1 * j2 + (N1*N2) * k] ; } return ker ; } /** ----------------------------------------------------------------- ** @brief Create a quick shift object ** @param image the image. ** @param height the height (number of rows) of the image. ** @param width the width (number of columns) of the image. ** @param channels the number of channels of the image. ** @return new quick shift object. ** ** The @c image is an array of ::vl_qs_type values with three ** dimensions (respectively @c widht, @c height, and @c ** channels). Typically, a color (e.g, RGB) image has three ** channels. The linear index of a pixel is computed with: ** @c channels * @c width* @c height + @c row + @c height * @c col. **/ VL_EXPORT VlQS * vl_quickshift_new(vl_qs_type const * image, int height, int width, int channels) { VlQS * q = vl_malloc(sizeof(VlQS)); q->image = (vl_qs_type *)image; q->height = height; q->width = width; q->channels = channels; q->medoid = VL_FALSE; q->tau = VL_MAX(height,width)/50; q->sigma = VL_MAX(2, q->tau/3); q->dists = vl_calloc(height*width, sizeof(vl_qs_type)); q->parents = vl_calloc(height*width, sizeof(int)); q->density = vl_calloc(height*width, sizeof(vl_qs_type)) ; return q; } /** ----------------------------------------------------------------- ** @brief Create a quick shift objet ** @param q quick shift object. **/ VL_EXPORT void vl_quickshift_process(VlQS * q) { vl_qs_type const *I = q->image; int *parents = q->parents; vl_qs_type *E = q->density; vl_qs_type *dists = q->dists; vl_qs_type *M = 0, *n = 0 ; vl_qs_type sigma = q->sigma ; vl_qs_type tau = q->tau; vl_qs_type tau2 = tau*tau; int K = q->channels, d; int N1 = q->height, N2 = q->width; int i1,i2, j1,j2, R, tR; d = 2 + K ; /* Total dimensions include spatial component (x,y) */ if (q->medoid) { /* n and M are only used in mediod shift */ M = (vl_qs_type *) vl_calloc(N1*N2*d, sizeof(vl_qs_type)) ; n = (vl_qs_type *) vl_calloc(N1*N2, sizeof(vl_qs_type)) ; } R = (int) ceil (3 * sigma) ; tR = (int) ceil (tau) ; /* ----------------------------------------------------------------- * n * -------------------------------------------------------------- */ /* If we are doing medoid shift, initialize n to the inner product of the * image with itself */ if (n) { for (i2 = 0 ; i2 < N2 ; ++ i2) { for (i1 = 0 ; i1 < N1 ; ++ i1) { n [i1 + N1 * i2] = vl_quickshift_inner(I,N1,N2,K, i1,i2, i1,i2) ; } } } /* ----------------------------------------------------------------- * E = - [oN'*F]', M * -------------------------------------------------------------- */ /* D_ij = d(x_i,x_j) E_ij = exp(- .5 * D_ij / sigma^2) ; F_ij = - E_ij E_i = sum_j E_ij M_di = sum_j X_j F_ij E is the parzen window estimate of the density 0 = dissimilar to everything, windowsize = identical */ for (i2 = 0 ; i2 < N2 ; ++ i2) { for (i1 = 0 ; i1 < N1 ; ++ i1) { int j1min = VL_MAX(i1 - R, 0 ) ; int j1max = VL_MIN(i1 + R, N1-1) ; int j2min = VL_MAX(i2 - R, 0 ) ; int j2max = VL_MIN(i2 + R, N2-1) ; /* For each pixel in the window compute the distance between it and the * source pixel */ for (j2 = j2min ; j2 <= j2max ; ++ j2) { for (j1 = j1min ; j1 <= j1max ; ++ j1) { vl_qs_type Dij = vl_quickshift_distance(I,N1,N2,K, i1,i2, j1,j2) ; /* Make distance a similarity */ vl_qs_type Fij = - exp(- Dij / (2*sigma*sigma)) ; /* E is E_i above */ E [i1 + N1 * i2] -= Fij ; if (M) { /* Accumulate votes for the median */ int k ; M [i1 + N1*i2 + (N1*N2) * 0] += j1 * Fij ; M [i1 + N1*i2 + (N1*N2) * 1] += j2 * Fij ; for (k = 0 ; k < K ; ++k) { M [i1 + N1*i2 + (N1*N2) * (k+2)] += I [j1 + N1*j2 + (N1*N2) * k] * Fij ; } } } /* j1 */ } /* j2 */ } /* i1 */ } /* i2 */ /* ----------------------------------------------------------------- * Find best neighbors * -------------------------------------------------------------- */ if (q->medoid) { /* Qij = - nj Ei - 2 sum_k Gjk Mik n is I.^2 */ /* medoid shift */ for (i2 = 0 ; i2 < N2 ; ++i2) { for (i1 = 0 ; i1 < N1 ; ++i1) { vl_qs_type sc_best = 0 ; /* j1/j2 best are the best indicies for each i */ vl_qs_type j1_best = i1 ; vl_qs_type j2_best = i2 ; int j1min = VL_MAX(i1 - R, 0 ) ; int j1max = VL_MIN(i1 + R, N1-1) ; int j2min = VL_MAX(i2 - R, 0 ) ; int j2max = VL_MIN(i2 + R, N2-1) ; for (j2 = j2min ; j2 <= j2max ; ++ j2) { for (j1 = j1min ; j1 <= j1max ; ++ j1) { vl_qs_type Qij = - n [j1 + j2 * N1] * E [i1 + i2 * N1] ; int k ; Qij -= 2 * j1 * M [i1 + i2 * N1 + (N1*N2) * 0] ; Qij -= 2 * j2 * M [i1 + i2 * N1 + (N1*N2) * 1] ; for (k = 0 ; k < K ; ++k) { Qij -= 2 * I [j1 + j2 * N1 + (N1*N2) * k] * M [i1 + i2 * N1 + (N1*N2) * (k + 2)] ; } if (Qij > sc_best) { sc_best = Qij ; j1_best = j1 ; j2_best = j2 ; } } } /* parents_i is the linear index of j which is the best pair * dists_i is the score of the best match */ parents [i1 + N1 * i2] = j1_best + N1 * j2_best ; dists[i1 + N1 * i2] = sc_best ; } } } else { /* Quickshift assigns each i to the closest j which has an increase in the * density (E). If there is no j s.t. Ej > Ei, then dists_i == inf (a root * node in one of the trees of merges). */ for (i2 = 0 ; i2 < N2 ; ++i2) { for (i1 = 0 ; i1 < N1 ; ++i1) { vl_qs_type E0 = E [i1 + N1 * i2] ; vl_qs_type d_best = VL_QS_INF ; vl_qs_type j1_best = i1 ; vl_qs_type j2_best = i2 ; int j1min = VL_MAX(i1 - tR, 0 ) ; int j1max = VL_MIN(i1 + tR, N1-1) ; int j2min = VL_MAX(i2 - tR, 0 ) ; int j2max = VL_MIN(i2 + tR, N2-1) ; for (j2 = j2min ; j2 <= j2max ; ++ j2) { for (j1 = j1min ; j1 <= j1max ; ++ j1) { if (E [j1 + N1 * j2] > E0) { vl_qs_type Dij = vl_quickshift_distance(I,N1,N2,K, i1,i2, j1,j2) ; if (Dij <= tau2 && Dij < d_best) { d_best = Dij ; j1_best = j1 ; j2_best = j2 ; } } } } /* parents is the index of the best pair */ /* dists_i is the minimal distance, inf implies no Ej > Ei within * distance tau from the point */ parents [i1 + N1 * i2] = j1_best + N1 * j2_best ; dists[i1 + N1 * i2] = sqrt(d_best) ; } } } if (M) vl_free(M) ; if (n) vl_free(n) ; } /** ----------------------------------------------------------------- ** @brief Delete quick shift object ** @param q quick shift object. **/ void vl_quickshift_delete(VlQS * q) { if (q) { if (q->parents) vl_free(q->parents); if (q->dists) vl_free(q->dists); if (q->density) vl_free(q->density); vl_free(q); } } vlfeat/vl/heap-def.h0000644000175000017500000003251512237004736013222 0ustar dimadima/** @file heap-def.h ** @brief Heap preprocessor metaprogram ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @file heap-def.h A heap organizes an array of objects in a priority queue. This module is a template metaprogram that defines heap operations on array of generic objects, or even generic object containers. - @ref heap-def-overview "Overview" - @ref heap-def-overview-general "General usage" - @ref heap-def-tech "Technical details" @section heap-def-overview Overview To use @ref heap-def.h one must specify at least a prefix and the data type for the heap elements: @code #define VL_HEAP_prefix my_heap #define VL_HEAP_type float #include @endcode This code fragment defines a number of functions prefixed by ::VL_HEAP_prefix, such as @c my_heap_push (::VL_HEAP_push) and @c my_heap_pop (::VL_HEAP_pop), that implement the heap operations. These functions operate on an array that has type ::VL_HEAP_array. By default, this is defined to be: @code #define VL_HEAP_array VL_HEAP_type* #define VL_HEAP_array_const VL_HEAP_type const* @endcode The array itself is accessed uniquely by means of two functions: - ::VL_HEAP_cmp, that compares two array elements. The default implementation assumes that ::VL_HEAP_type is numeric. - ::VL_HEAP_swap, that swaps two array elements. The default implementation assumes that ::VL_HEAP_type can be copied by the @c = operator. The heap state is a integer @c numElements (of type ::vl_size) counting the number of elements of the array that are currently part of the heap and the content of the first @c numElements elements of the array. The portion of the array that constitutes the heap satisfies a certain invariant property (heap property, @ref heap-def-tech). From a user viewpoint, the most important consequence is that the first element of the array (the one of index 0) is also the smallest (according to ::VL_HEAP_cmp). Elements are added to the heap by ::VL_HEAP_push and removed from the heap by ::VL_HEAP_pop. A push operation adds to the heap the array element immediately after the last element already in the heap (i.e. the element of index @c numElements) and increases the number of heap elements @c numElements. Elements in the heap are swapped as required in order to maintain the heap consistency. Similarly, a pop operation removes the first (smaller) element from the heap and decreases the number of heap elements @c numElements. The values of nodes currently in the heap can be updated by ::VL_HEAP_update. Notice however that using this function requires knowing the index of the element that needs to be updated up to the swapping operations that the heap performs to maintain consistency. Typically, this requires redefining ::VL_HEAP_swap to keep track of such changes (@ref heap-def-overview-general). @subsection heap-def-overview-general General usage The heap container may be mapped to any type by reimplementing ::VL_HEAP_cmp and ::VL_HEAP_swap explicitly. For instance the following code redefines ::VL_HEAP_cmp to deal with the case in which the heap is an array of structures: @code typedef struct _S { int x ; } S ; int s_cmp (S const * v, vl_uindex a, vl_uindex b) { return v[a].x - v[b].x ; } #define VL_HEAP_prefix s_heap #define VL_HEAP_type S #define VL_HEAP_cmp s_cmp #include @endcode In the following example, the heap itself is an arbitrary structure: @code typedef struct _H { int* array ; } H ; int h_cmp (H const * h, vl_uindex a, vl_uindex b) { return h->array[a] - h->array[b] ; } int h_swap (H * h, vl_uindex a, vl_uindex b) { int t = h->array[a] ; h->array[a] = h->array[b] ; h->array[b] = t ; } #define VL_HEAP_prefix h_heap #define VL_HEAP_swap h_swap #define VL_HEAP_cmp h_cmp #include @endcode @section heap-def-tech Technical details The heap is organised as a binary tree with the property (heap property) that any node is not larger than any of its children. In particular, the root is the smallest node. @ref heap-def.h uses the standard binary tree representation as a linear array. Tree nodes are mapped to array elements as follows: array[0] corresponds to the root, array[1] and array[2] to the root left and right children and so on. In this way, the tree structure is fully specified by the total number of nodes N. Assuming that the heap has N nodes (from array[0] to array[N-1]), adding the node array[N] to the heap is done by a push down operation: if the node array[N] is smaller than its parent (violating the heap property) it is pushed down by swapping it with the parent, and so on recursively. Removing the smallest element array[0] with an heap of N nodes is done by swapping array[0] with array[N-1]. If then array[0] is larger than any of its children, it is swapped with the smallest of the two and so on recursively (push up operation). Restoring the heap property after an element array[i] has been modified can be done by a push up or push down operation on that node. **/ #include "host.h" #include #ifndef VL_HEAP_prefix #error "VL_HEAP_prefix must be defined" #endif #ifndef VL_HEAP_array #ifndef VL_HEAP_type #error "VL_HEAP_type must be defined if VL_HEAP_array is not" #endif #define VL_HEAP_array VL_HEAP_type* #define VL_HEAP_array_const VL_HEAP_type const* #endif #ifndef VL_HEAP_array_const #define VL_HEAP_array_const VL_HEAP_array #endif #ifdef __DOXYGEN__ #define VL_HEAP_prefix HeapObject /**< Prefix of the heap functions */ #define VL_HEAP_type HeapType /**< Data type of the heap elements */ #define VL_HEAP_array HeapType* /**< Data type of the heap container */ #define VL_HEAP_array HeapType const* /**< Const data type of the heap container */ #endif /* ---------------------------------------------------------------- */ #ifndef VL_HEAP_DEF_H #define VL_HEAP_DEF_H /** @internal @brief Get index of parent node ** @param index a node index. ** @return index of the parent node. **/ VL_INLINE vl_uindex vl_heap_parent (vl_uindex index) { if (index == 0) return 0 ; return (index - 1) / 2 ; } /** @internal @brief Get index of left child ** @param index a node index. ** @return index of the left child. **/ VL_INLINE vl_uindex vl_heap_left_child (vl_uindex index) { return 2 * index + 1 ; } /** @internal @brief Get index of right child ** @param index a node index. ** @return index of the right child. **/ VL_INLINE vl_uindex vl_heap_right_child (vl_uindex index) { return vl_heap_left_child (index) + 1 ; } /* VL_HEAP_DEF_H */ #endif /* ---------------------------------------------------------------- */ #if ! defined(VL_HEAP_cmp) || defined(__DOXYGEN__) #define VL_HEAP_cmp VL_XCAT(VL_HEAP_prefix, _cmp) /** @brief Compare two heap elements ** @param array heap array. ** @param indexA index of the first element @c A to compare. ** @param indexB index of the second element @c B to comapre. ** @return a negative number if @c AB. **/ VL_INLINE VL_HEAP_type VL_HEAP_cmp (VL_HEAP_array_const array, vl_uindex indexA, vl_uindex indexB) { return array[indexA] - array[indexB] ; } /* VL_HEAP_cmp */ #endif /* ---------------------------------------------------------------- */ #if ! defined(VL_HEAP_swap) || defined(__DOXYGEN__) #define VL_HEAP_swap VL_XCAT(VL_HEAP_prefix, _swap) /** @brief Swap two heap elements ** @param array array of nodes. ** @param array heap array. ** @param indexA index of the first node to swap. ** @param indexB index of the second node to swap. ** ** The function swaps the two heap elements @a a and @ b. The function ** uses a temporary element and the copy operator, which must be ** well defined for the heap elements. **/ VL_INLINE void VL_HEAP_swap (VL_HEAP_array array, vl_uindex indexA, vl_uindex indexB) { VL_HEAP_type t = array [indexA] ; array [indexA] = array [indexB] ; array [indexB] = t ; } /* VL_HEAP_swap */ #endif /* ---------------------------------------------------------------- */ #if ! defined(VL_HEAP_up) || defined(__DOXYGEN__) #define VL_HEAP_up VL_XCAT(VL_HEAP_prefix, _up) /** @brief Heap up operation ** @param array pointer to the heap array. ** @param heapSize size of the heap. ** @param index index of the node to push up. **/ VL_INLINE void VL_HEAP_up (VL_HEAP_array array, vl_size heapSize, vl_uindex index) { vl_uindex leftIndex = vl_heap_left_child (index) ; vl_uindex rightIndex = vl_heap_right_child (index) ; /* no childer: stop */ if (leftIndex >= heapSize) return ; /* only left childer: easy */ if (rightIndex >= heapSize) { if (VL_HEAP_cmp (array, index, leftIndex) > 0) { VL_HEAP_swap (array, index, leftIndex) ; } return ; } /* both childern */ { if (VL_HEAP_cmp (array, leftIndex, rightIndex) < 0) { /* swap with left */ if (VL_HEAP_cmp (array, index, leftIndex) > 0) { VL_HEAP_swap (array, index, leftIndex) ; VL_HEAP_up (array, heapSize, leftIndex) ; } } else { /* swap with right */ if (VL_HEAP_cmp (array, index, rightIndex) > 0) { VL_HEAP_swap (array, index, rightIndex) ; VL_HEAP_up (array, heapSize, rightIndex) ; } } } } /* VL_HEAP_up */ #endif /* ---------------------------------------------------------------- */ #if ! defined(VL_HEAP_down) || defined(__DOXYGEN__) #define VL_HEAP_down VL_XCAT(VL_HEAP_prefix, _down) /** @brief Heap down operation ** @param array pointer to the heap node array. ** @param index index of the node to push up. **/ VL_INLINE void VL_HEAP_down (VL_HEAP_array array, vl_uindex index) { vl_uindex parentIndex ; if (index == 0) return ; parentIndex = vl_heap_parent (index) ; if (VL_HEAP_cmp (array, index, parentIndex) < 0) { VL_HEAP_swap (array, index, parentIndex) ; VL_HEAP_down (array, parentIndex) ; } } /* VL_HEAP_down */ #endif /* ---------------------------------------------------------------- */ #if ! defined(VL_HEAP_push) || defined(__DOXYGEN__) #define VL_HEAP_push VL_XCAT(VL_HEAP_prefix, _push) /** @brief Heap push operation ** @param array pointer to the heap array. ** @param heapSize (in/out) size of the heap. ** ** The function adds to the heap the element of index @c heapSize ** and increments @c heapSize. **/ VL_INLINE void VL_HEAP_push (VL_HEAP_array array, vl_size *heapSize) { VL_HEAP_down (array, *heapSize) ; *heapSize += 1 ; } /* VL_HEAP_push */ #endif /* ---------------------------------------------------------------- */ #if ! defined(VL_HEAP_pop) || defined(__DOXYGEN__) #define VL_HEAP_pop VL_XCAT(VL_HEAP_prefix, _pop) /** @brief Heap pop operation ** @param array pointer to the heap array. ** @param heapSize (in/out) size of the heap. ** @return index of the popped element. ** ** The function extracts from the heap the element of index 0 ** (the smallest element) and decreases @c heapSize. ** ** The element extracted is moved as the first element after ** the heap end (thus it has index @c heapSize). For convenience, ** this index is returned by the function. ** ** Popping from an empty heap is undefined. **/ VL_INLINE vl_uindex VL_HEAP_pop (VL_HEAP_array array, vl_size *heapSize) { assert (*heapSize) ; *heapSize -= 1 ; VL_HEAP_swap (array, 0, *heapSize) ; if (*heapSize > 1) { VL_HEAP_up (array, *heapSize, 0) ; } return *heapSize ; } /* VL_HEAP_pop */ #endif /* ---------------------------------------------------------------- */ #if ! defined(VL_HEAP_update) || defined(__DOXYGEN__) #define VL_HEAP_update VL_XCAT(VL_HEAP_prefix, _update) /** @brief Heap update operation ** @param array pointer to the heap array. ** @param heapSize size of the heap. ** @param index index of the node to update. ** ** The function updates the heap to account for a change to the ** element of index @c index in the heap. ** ** Notice that using this ** function requires knowing the index of the heap index of ** element that was changed. Since the heap swaps elements in the ** array, this is in general different from the index that that ** element had originally. **/ VL_INLINE void VL_HEAP_update (VL_HEAP_array array, vl_size heapSize, vl_uindex index) { VL_HEAP_up (array, heapSize, index) ; VL_HEAP_down (array, index) ; } /* VL_HEAP_update */ #endif /* ---------------------------------------------------------------- */ #undef VL_HEAP_cmp #undef VL_HEAP_swap #undef VL_HEAP_up #undef VL_HEAP_down #undef VL_HEAP_push #undef VL_HEAP_pop #undef VL_HEAP_update #undef VL_HEAP_prefix #undef VL_HEAP_type #undef VL_HEAP_array #undef VL_HEAP_array_const vlfeat/vl/mathop_avx.h0000644000175000017500000000253712237004745013720 0ustar dimadima/** @file mathop_avx.h ** @brief mathop for avx ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /* ---------------------------------------------------------------- */ #ifndef VL_MATHOP_AVX_H_INSTANTIATING #ifndef VL_MATHOP_AVX_H #define VL_MATHOP_AVX_H #undef FLT #define FLT VL_TYPE_DOUBLE #define VL_MATHOP_AVX_H_INSTANTIATING #include "mathop_avx.h" #undef FLT #define FLT VL_TYPE_FLOAT #define VL_MATHOP_AVX_H_INSTANTIATING #include "mathop_avx.h" /* VL_MATHOP_AVX_H */ #endif /* ---------------------------------------------------------------- */ /* VL_MATHOP_AVX_H_INSTANTIATING */ #else #ifndef VL_DISABLE_AVX #include "generic.h" #include "float.th" VL_EXPORT T VL_XCAT(_vl_distance_mahalanobis_sq_avx_, SFX) (vl_size dimension, T const * X, T const * MU, T const * S); VL_EXPORT T VL_XCAT(_vl_distance_l2_avx_, SFX) (vl_size dimension, T const * X, T const * Y); VL_EXPORT void VL_XCAT(_vl_weighted_sigma_avx_, SFX) (vl_size dimension, T * S, T const * X, T const * Y, T const W); VL_EXPORT void VL_XCAT(_vl_weighted_mean_avx_, SFX) (vl_size dimension, T * MU, T const * X, T const W); /* ! VL_DISABLE_AVX */ #endif #undef VL_MATHOP_AVX_H_INSTANTIATING #endif vlfeat/vl/array.c0000644000175000017500000001305112237004736012654 0ustar dimadima/** @file array.h ** @brief Array ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include "array.h" #include /** @brief Get number of elements in array ** @param self array. ** @return number of elements. **/ VL_EXPORT vl_size vl_array_get_num_elements (VlArray const * self) { vl_size numElements = 1 ; vl_uindex k ; if (self->numDimensions == 0) { return 0 ; } for (k = 0 ; k < self->numDimensions ; ++k) { numElements *= self->dimensions[k] ; } return numElements ; } /* ---------------------------------------------------------------- */ /* init & dealloc */ /* ---------------------------------------------------------------- */ /** @brief New numeric array ** @param self array to initialize. ** @param type data type. ** @param numDimensions number of dimensions. ** @param dimensions dimensions. ** ** The function initializes the specified array and allocates ** the necessary memory for storage. **/ VL_EXPORT VlArray * vl_array_init (VlArray* self, vl_type type, vl_size numDimensions, vl_size const * dimensions) { assert (numDimensions <= VL_ARRAY_MAX_NUM_DIMENSIONS) ; self->type = type ; self->numDimensions = numDimensions ; memcpy(self->dimensions, dimensions, sizeof(vl_size) * numDimensions) ; self->data = vl_malloc(vl_get_type_size(type) * vl_array_get_num_elements (self)) ; self->isEnvelope = VL_FALSE ; self->isSparse = VL_FALSE ; return self ; } /** @brief New numeric array envelope ** @param self array to initialize. ** @param data data to envelople. ** @param type data type. ** @param numDimensions number of dimensions. ** @param dimensions dimensions. ** ** The function initializes the specified array wrapping the ** specified buffer. **/ VL_EXPORT VlArray * vl_array_init_envelope (VlArray * self, void * data, vl_type type, vl_size numDimensions, vl_size const * dimensions) { assert (numDimensions <= VL_ARRAY_MAX_NUM_DIMENSIONS) ; self->type = type ; self->numDimensions = numDimensions ; memcpy(self->dimensions, dimensions, sizeof(vl_size) * numDimensions) ; self->data = data ; self->isEnvelope = VL_TRUE ; self->isSparse = VL_FALSE ; return self ; } /** @brief New numeric array with matrix shape ** @param self array to initialize. ** @param type type. ** @param numRows number of rows. ** @param numColumns number of columns. **/ VL_EXPORT VlArray * vl_array_init_matrix (VlArray * self, vl_type type, vl_size numRows, vl_size numColumns) { vl_size dimensions [2] = {numRows, numColumns} ; return vl_array_init (self, type, 2, dimensions) ; } /** @brief New numeric array envelpe with matrix shape ** @param self array to initialize. ** @param data data to envelope. ** @param type type. ** @param numRows number of rows. ** @param numColumns number of columns. **/ VL_EXPORT VlArray * vl_array_init_matrix_envelope (VlArray * self, void * data, vl_type type, vl_size numRows, vl_size numColumns) { vl_size dimensions [2] = {numRows, numColumns} ; return vl_array_init_envelope (self, data, type, 2, dimensions) ; } /** @brief Delete array ** @param self array. **/ VL_EXPORT void vl_array_dealloc (VlArray * self) { if (! self->isEnvelope) { if (self->data) { vl_free(self->data) ; self->data = NULL ; } } } /* ---------------------------------------------------------------- */ /* new & delete */ /* ---------------------------------------------------------------- */ /** @brief New numeric array ** @param type data type. ** @param numDimensions number of dimensions. ** @param dimensions dimensions. ** ** The function creates a new VLArray instance and allocates ** the necessary memory for storage. **/ VL_EXPORT VlArray * vl_array_new (vl_type type, vl_size numDimensions, vl_size const * dimensions) { VlArray * self = vl_malloc(sizeof(VlArray)) ; return vl_array_init(self, type, numDimensions, dimensions) ; } /** @brief New numeric array with matrix shape ** @param type type. ** @param numRows number of rows. ** @param numColumns number of columns. **/ VL_EXPORT VlArray * vl_array_new_matrix (vl_type type, vl_size numRows, vl_size numColumns) { vl_size dimensions [2] = {numRows, numColumns} ; return vl_array_new (type, 2, dimensions) ; } /** @brief New numeric array envelope ** @param data data to envelople. ** @param type data type. ** @param numDimensions number of dimensions. ** @param dimensions dimensions. **/ VL_EXPORT VlArray * vl_array_new_envelope (void * data, vl_type type, vl_size numDimensions, vl_size const * dimensions) { VlArray * self = vl_malloc(sizeof(VlArray)) ; return vl_array_init_envelope(self, data, type, numDimensions, dimensions) ; } /** @brief New numeric array envelpe with matrix shape ** @param data data to envelope. ** @param type type. ** @param numRows number of rows. ** @param numColumns number of columns. **/ VL_EXPORT VlArray * vl_array_new_matrix_envelope (void * data, vl_type type, vl_size numRows, vl_size numColumns) { vl_size dimensions [2] = {numRows, numColumns} ; return vl_array_new_envelope (data, type, 2, dimensions) ; } /** @brief Delete array ** @param self array. **/ VL_EXPORT void vl_array_delete (VlArray * self) { vl_array_dealloc(self) ; vl_free(self) ; } vlfeat/vl/random.h0000644000175000017500000000777012237004745013036 0ustar dimadima/** @file random.h ** @brief Random number generator (@ref random) ** @author Andrea Vedaldi ** @see @ref random **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_RANDOM_H #define VL_RANDOM_H #include "host.h" /** @brief Random numbber generator state */ typedef struct _VlRand { vl_uint32 mt [624] ; vl_uint32 mti ; } VlRand ; /** @name Setting and reading the state ** ** @{ */ VL_EXPORT void vl_rand_init (VlRand * self) ; VL_EXPORT void vl_rand_seed (VlRand * self, vl_uint32 s) ; VL_EXPORT void vl_rand_seed_by_array (VlRand * self, vl_uint32 const key [], vl_size keySize) ; /** @} */ /** @name Generate random numbers ** ** @{ */ VL_INLINE vl_uint64 vl_rand_uint64 (VlRand * self) ; VL_INLINE vl_int64 vl_rand_int63 (VlRand * self) ; VL_EXPORT vl_uint32 vl_rand_uint32 (VlRand * self) ; VL_INLINE vl_int32 vl_rand_int31 (VlRand * self) ; VL_INLINE double vl_rand_real1 (VlRand * self) ; VL_INLINE double vl_rand_real2 (VlRand * self) ; VL_INLINE double vl_rand_real3 (VlRand * self) ; VL_INLINE double vl_rand_res53 (VlRand * self) ; VL_INLINE vl_uindex vl_rand_uindex (VlRand * self, vl_uindex range) ; /** @} */ VL_EXPORT void vl_rand_permute_indexes (VlRand * self, vl_index* array, vl_size size) ; /* ---------------------------------------------------------------- */ /** @brief Generate a random index in a given range ** @param self random number generator. ** @param range range. ** @return an index sampled uniformly at random in the interval [0, @c range - 1] ** ** @remark Currently, this function uses a simple algorithm that ** may yield slightly biased samples if @c range is not a power of ** two. **/ VL_INLINE vl_uindex vl_rand_uindex (VlRand * self, vl_uindex range) { if (range <= 0xffffffff) { /* 32-bit version */ return (vl_rand_uint32 (self) % (vl_uint32)range) ; } else { /* 64-bit version */ return (vl_rand_uint64 (self) % range) ; } } /** @brief Generate a random UINT64 ** @param self random number generator. ** @return a random number in [0, 0xffffffffffffffff]. **/ VL_INLINE vl_uint64 vl_rand_uint64 (VlRand * self) { vl_uint64 a = vl_rand_uint32 (self) ; vl_uint64 b = vl_rand_uint32 (self) ; return (a << 32) | b ; } /** @brief Generate a random INT63 ** @param self random number generator. ** @return a random number in [0, 0x7fffffffffffffff]. **/ VL_INLINE vl_int64 vl_rand_int63 (VlRand * self) { return (vl_int64)(vl_rand_uint64 (self) >> 1) ; } /** @brief Generate a random INT31 ** @param self random number generator. ** @return a random number in [0, 0x7fffffff]. **/ VL_INLINE vl_int32 vl_rand_int31 (VlRand * self) { return (vl_int32)(vl_rand_uint32 (self) >> 1) ; } /** @brief Generate a random number in [0,1] ** @param self random number generator. ** @return a random number. **/ VL_INLINE double vl_rand_real1 (VlRand * self) { return vl_rand_uint32(self)*(1.0/4294967295.0); /* divided by 2^32-1 */ } /** @brief Generate a random number in [0,1) ** @param self random number generator. ** @return a random number. **/ VL_INLINE double vl_rand_real2 (VlRand * self) { return vl_rand_uint32(self)*(1.0/4294967296.0); /* divided by 2^32 */ } /** @brief Generate a random number in (0,1) ** @param self random number generator. ** @return a random number. **/ VL_INLINE double vl_rand_real3 (VlRand * self) { return (((double)vl_rand_uint32(self)) + 0.5)*(1.0/4294967296.0); /* divided by 2^32 */ } /** @brief Generate a random number in [0,1) with 53-bit resolution ** @param self random number generator. ** @return a random number. **/ VL_INLINE double vl_rand_res53 (VlRand * self) { vl_uint32 a = vl_rand_uint32(self) >> 5, b = vl_rand_uint32(self) >> 6 ; return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0) ; } /* VL_RANDOM_H */ #endif vlfeat/vl/gmm.c0000644000175000017500000014756512237004745012340 0ustar dimadima/** @file gmm.c ** @brief Gaussian Mixture Models - Implementation ** @author David Novotny ** @author Andrea Vedaldi **/ /* Copyright (C) 2013 David Novotny and Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @page gmm Gaussian Mixture Models (GMM) @author David Novotny @author Andrea Vedaldi @tableofcontents @ref gmm.h is an implementation of *Gaussian Mixture Models* (GMMs). The main functionality provided by this module is learning GMMs from data by maximum likelihood. Model optimization uses the Expectation Maximization (EM) algorithm @cite{dempster77maximum}. The implementation supports @c float or @c double data types, is parallelized, and is tuned to work reliably and effectively on datasets of visual features. Stability is obtained in part by regularizing and restricting the parameters of the GMM. @ref gmm-starting demonstreates how to use the C API to compute the FV representation of an image. For further details refer to: - @subpage gmm-fundamentals @section gmm-starting Getting started In order to use @ref gmm.h to learn a GMM from training data, create a new ::VlGMM object instance, set the parameters as desired, and run the training code. The following example learns @c numClusters Gaussian components from @c numData vectors of dimension @c dimension and storage class @c float using at most 100 EM iterations: @code float * means ; float * covariances ; float * priors ; float * posteriors ; double loglikelihood ; // create a new instance of a GMM object for float data gmm = vl_gmm_new (VL_TYPE_FLOAT, dimension, numClusters) ; // set the maximum number of EM iterations to 100 vl_gmm_set_max_num_iterations (gmm, 100) ; // set the initialization to random selection vl_gmm_set_initialization (gmm,VlGMMRand); // cluster the data, i.e. learn the GMM vl_gmm_cluster (gmm, data, numData); // get the means, covariances, and priors of the GMM means = vl_gmm_get_means(gmm); covariances = vl_gmm_get_covariances(gmm); priors = vl_gmm_get_priors(gmm); // get loglikelihood of the estimated GMM loglikelihood = vl_gmm_get_loglikelihood(gmm) ; // get the soft assignments of the data points to each cluster posteriors = vl_gmm_get_posteriors(gmm) ; @endcode @note ::VlGMM assumes that the covariance matrices of the GMM are diagonal. This reduces significantly the number of parameters to learn and is usually an acceptable compromise in vision applications. If the data is significantly correlated, it can be beneficial to de-correlate it by PCA rotation or projection in pre-processing. ::vl_gmm_get_loglikelihood is used to get the final loglikelihood of the estimated mixture, ::vl_gmm_get_means and ::vl_gmm_get_covariances to obtain the means and the diagonals of the covariance matrices of the estimated Gaussian modes, and ::vl_gmm_get_posteriors to get the posterior probabilities that a given point is associated to each of the modes (soft assignments). The learning algorithm, which uses EM, finds a local optimum of the objective function. Therefore the initialization is crucial in obtaining a good model, measured in term of the final loglikelihood. ::VlGMM supports a few methods (use ::vl_gmm_set_initialization to choose one) as follows: Method | ::VlGMMInitialization enumeration | Description ----------------------|-----------------------------------------|----------------------------------------------- Random initialization | ::VlGMMRand | Random initialization of the mixture parameters KMeans | ::VlGMMKMeans | Initialization of the mixture parameters using ::VlKMeans Custom | ::VlGMMCustom | User specified initialization Note that in the case of ::VlGMMKMeans initialization, an object of type ::VlKMeans object must be created and passed to the ::VlGMM instance (see @ref kmeans to see how to correctly set up this object). When a user wants to use the ::VlGMMCustom method, the initial means, covariances and priors have to be specified using the ::vl_gmm_set_means, ::vl_gmm_set_covariances and ::vl_gmm_set_priors methods. **/ /** @page gmm-fundamentals GMM fundamentals @tableofcontents A *Gaussian Mixture Model* (GMM) is a mixture of $K$ multivariate Gaussian distributions. In order to sample from a GMM, one samples first the component index $k \in \{1,\dots,K\}$ with *prior probability* $\pi_k$, and then samples the vector $\bx \in \mathbb{R}^d$ from the $k$-th Gaussian distribution $p(\bx|\mu_k,\Sigma_k)$. Here $\mu_k$ and $\Sigma_k$ are respectively the *mean* and *covariance* of the distribution. The GMM is completely specified by the parameters $\Theta=\{\pi_k,\mu_k,\Sigma_k; k = 1,\dots,K\}$ The density $p(\bx|\Theta)$ induced on the training data is obtained by marginalizing the component selector $k$, obtaining \[ p(\bx|\Theta) = \sum_{k=1}^{K} \pi_k p( \bx_i |\mu_k,\Sigma_k), \qquad p( \bx |\mu_k,\Sigma_k) = \frac{1}{\sqrt{(2\pi)^d\det\Sigma_k}} \exp\left[ -\frac{1}{2} (\bx-\mu_k)^\top\Sigma_k^{-1}(\bx-\mu_k) \right]. \] Learning a GMM to fit a dataset $X=(\bx_1, \dots, \bx_n)$ is usually done by maximizing the log-likelihood of the data: @f[ \ell(\Theta;X) = E_{\bx\sim\hat p} [ \log p(\bx|\Theta) ] = \frac{1}{n}\sum_{i=1}^{n} \log \sum_{k=1}^{K} \pi_k p(\bx_i|\mu_k, \Sigma_k) @f] where $\hat p$ is the empirical distribution of the data. An algorithm to solve this problem is introduced next. @section gmm-em Learning a GMM by expectation maximization The direct maximization of the log-likelihood function of a GMM is difficult due to the fact that the assignments of points to Gaussian mode is not observable and, as such, must be treated as a latent variable. Usually, GMMs are learned by using the *Expectation Maximization* (EM) algorithm @cite{dempster77maximum}. Consider in general the problem of estimating to the maximum likelihood a distribution $p(x|\Theta) = \int p(x,h|\Theta)\,dh$, where $x$ is a measurement, $h$ is a *latent variable*, and $\Theta$ are the model parameters. By introducing an auxiliary distribution $q(h|x)$ on the latent variable, one can use Jensen inequality to obtain the following lower bound on the log-likelihood: @f{align*} \ell(\Theta;X) = E_{x\sim\hat p} \log p(x|\Theta) &= E_{x\sim\hat p} \log \int p(x,h|\Theta) \,dh \\ &= E_{x\sim\hat p} \log \int \frac{p(x,h|\Theta)}{q(h|x)} q(h|x)\,dh \\ &\geq E_{x\sim\hat p} \int q(h) \log \frac{p(x,h|\Theta)}{q(h|x)}\,dh \\ &= E_{(x,q) \sim q(h|x) \hat p(x)} \log p(x,h|\Theta) - E_{(x,q) \sim q(h|x) \hat p(x)} \log q(h|x) @f} The first term of the last expression is the log-likelihood of the model where both the $x$ and $h$ are observed and joinlty distributed as $q(x|h)\hat p(x)$; the second term is the a average entropy of the latent variable, which does not depend on $\Theta$. This lower bound is maximized and becomes tight by setting $q(h|x) = p(h|x,\Theta)$ to be the posterior distribution on the latent variable $h$ (given the current estimate of the parameters $\Theta$). In fact: \[ E_{x \sim \hat p} \log p(x|\Theta) = E_{(x,h) \sim p(h|x,\Theta) \hat p(x)}\left[ \log \frac{p(x,h|\Theta)}{p(h|x,\Theta)} \right] = E_{(x,h) \sim p(h|x,\Theta) \hat p(x)} [ \log p(x|\Theta) ] = \ell(\Theta;X). \] EM alternates between updating the latent variable auxiliary distribution $q(h|x) = p(h|x,\Theta_t)$ (*expectation step*) given the current estimate of the parameters $\Theta_t$, and then updating the model parameters $\Theta_{t+1}$ by maximizing the log-likelihood lower bound derived (*maximization step*). The simplification is that in the maximization step both $x$ and $h$ are now ``observed'' quantities. This procedure converges to a local optimum of the model log-likelihood. @subsection gmm-expectation-step Expectation step In the case of a GMM, the latent variables are the point-to-cluster assignments $k_i, i=1,\dots,n$, one for each of $n$ data points. The auxiliary distribution $q(k_i|\bx_i) = q_{ik}$ is a matrix with $n \times K$ entries. Each row $q_{i,:}$ can be thought of as a vector of soft assignments of the data points $\bx_i$ to each of the Gaussian modes. Setting $q_{ik} = p(k_i | \bx_i, \Theta)$ yields \[ q_{ik} = \frac {\pi_k p(\bx_i|\mu_k,\Sigma_k)} {\sum_{l=1}^K \pi_l p(\bx_i|\mu_l,\Sigma_l)} \] where the Gaussian density $p(\bx_i|\mu_k,\Sigma_k)$ was given above. One important point to keep in mind when these probabilities are computed is the fact that the Gaussian densities may attain very low values and underflow in a vanilla implementation. Furthermore, VLFeat GMM implementation restricts the covariance matrices to be diagonal. In this case, the computation of the determinant of $\Sigma_k$ reduces to computing the trace of the matrix and the inversion of $\Sigma_k$ could be obtained by inverting the elements on the diagonal of the covariance matrix. @subsection gmm-maximization-step Maximization step The M step estimates the parameters of the Gaussian mixture components and the prior probabilities $\pi_k$ given the auxiliary distribution on the point-to-cluster assignments computed in the E step. Since all the variables are now ``observed'', the estimate is quite simple. For example, the mean $\mu_k$ of a Gaussian mode is obtained as the mean of the data points assigned to it (accounting for the strength of the soft assignments). The other quantities are obtained in a similar manner, yielding to: @f{align*} \mu_k &= { { \sum_{i=1}^n q_{ik} \bx_{i} } \over { \sum_{i=1}^n q_{ik} } }, \\ \Sigma_k &= { { \sum_{i=1}^n { q_{ik} (\bx_{i} - \mu_{k}) {(\bx_{i} - \mu_{k})}^T } } \over { \sum_{i=1}^n q_{ik} } }, \\ \pi_k &= { \sum_{i=1}^n { q_{ik} } \over { \sum_{i=1}^n \sum_{l=1}^K q_{il} } }. @f} @section gmm-fundamentals-init Initialization algorithms The EM algorithm is a local optimization method. As such, the quality of the solution strongly depends on the quality of the initial values of the parameters (i.e. of the locations and shapes of the Gaussian modes). @ref gmm.h supports the following cluster initialization algorithms: - Random data points. (::vl_gmm_init_with_random_data) This method sets the means of the modes by sampling at random a corresponding number of data points, sets the covariance matrices of all the modes are to the covariance of the entire dataset, and sets the prior probabilities of the Gaussian modes to be uniform. This initialization method is the fastest, simplest, as well as the one most likely to end in a bad local minimum. - KMeans initialization (::vl_gmm_init_with_kmeans) This method uses KMeans to pre-cluster the points. It then sets the means and covariances of the Gaussian distributions the sample means and covariances of each KMeans cluster. It also sets the prior probabilities to be proportional to the mass of each cluster. In order to use this initialization method, a user can specify an instance of ::VlKMeans by using the function ::vl_gmm_set_kmeans_init_object, or let ::VlGMM create one automatically. Alternatively, one can manually specify a starting point (::vl_gmm_set_priors, ::vl_gmm_set_means, ::vl_gmm_set_covariances). **/ #include "gmm.h" #include #include #include #ifdef _OPENMP #include #endif #ifndef VL_DISABLE_SSE2 #include "mathop_sse2.h" #endif #ifndef VL_DISABLE_AVX #include "mathop_avx.h" #endif /* ---------------------------------------------------------------- */ #ifndef VL_GMM_INSTANTIATING /* ---------------------------------------------------------------- */ #define VL_GMM_MIN_VARIANCE 1e-6 #define VL_GMM_MIN_POSTERIOR 1e-2 #define VL_GMM_MIN_PRIOR 1e-6 struct _VlGMM { vl_type dataType ; /**< Data type. */ vl_size dimension ; /**< Data dimensionality. */ vl_size numClusters ; /**< Number of clusters */ vl_size numData ; /**< Number of last time clustered data points. */ vl_size maxNumIterations ; /**< Maximum number of refinement iterations. */ vl_size numRepetitions ; /**< Number of clustering repetitions. */ int verbosity ; /**< Verbosity level. */ void * means; /**< Means of Gaussian modes. */ void * covariances; /**< Diagonals of covariance matrices of Gaussian modes. */ void * priors; /**< Weights of Gaussian modes. */ void * posteriors; /**< Probabilities of correspondences of points to clusters. */ double * sigmaLowBound ; /**< Lower bound on the diagonal covariance values. */ VlGMMInitialization initialization; /**< Initialization option */ VlKMeans * kmeansInit; /**< Kmeans object for initialization of gaussians */ double LL ; /**< Current solution loglikelihood */ vl_bool kmeansInitIsOwner; /**< Indicates whether a user provided the kmeans initialization object */ } ; /* ---------------------------------------------------------------- */ /* Life-cycle */ /* ---------------------------------------------------------------- */ static void _vl_gmm_prepare_for_data (VlGMM* self, vl_size numData) { if (self->numData < numData) { vl_free(self->posteriors) ; self->posteriors = vl_malloc(vl_get_type_size(self->dataType) * numData * self->numClusters) ; } self->numData = numData ; } /** @brief Create a new GMM object ** @param dataType type of data (::VL_TYPE_FLOAT or ::VL_TYPE_DOUBLE) ** @return new GMM object instance. **/ VlGMM * vl_gmm_new (vl_type dataType, vl_size dimension, vl_size numComponents) { vl_index i ; vl_size size = vl_get_type_size(dataType) ; VlGMM * self = vl_calloc(1, sizeof(VlGMM)) ; self->dataType = dataType; self->numClusters = numComponents ; self->numData = 0; self->dimension = dimension ; self->initialization = VlGMMRand; self->verbosity = 0 ; self->maxNumIterations = 50; self->numRepetitions = 1; self->sigmaLowBound = NULL ; self->priors = NULL ; self->covariances = NULL ; self->means = NULL ; self->posteriors = NULL ; self->kmeansInit = NULL ; self->kmeansInitIsOwner = VL_FALSE; self->priors = vl_calloc (numComponents, size) ; self->means = vl_calloc (numComponents * dimension, size) ; self->covariances = vl_calloc (numComponents * dimension, size) ; self->sigmaLowBound = vl_calloc (dimension, sizeof(double)) ; for (i = 0 ; i < (unsigned)self->dimension ; ++i) { self->sigmaLowBound[i] = 1e-4 ; } return self ; } /** @brief Reset state ** @param self object. ** ** The function reset the state of the GMM object. It deletes ** any stored posterior and other internal state variables. **/ void vl_gmm_reset (VlGMM * self) { if (self->posteriors) { vl_free(self->posteriors) ; self->posteriors = NULL ; self->numData = 0 ; } if (self->kmeansInit && self->kmeansInitIsOwner) { vl_kmeans_delete(self->kmeansInit) ; self->kmeansInit = NULL ; self->kmeansInitIsOwner = VL_FALSE ; } } /** @brief Deletes a GMM object ** @param self GMM object instance. ** ** The function deletes the GMM object instance created ** by ::vl_gmm_new. **/ void vl_gmm_delete (VlGMM * self) { if(self->means) vl_free(self->means); if(self->covariances) vl_free(self->covariances); if(self->priors) vl_free(self->priors); if(self->posteriors) vl_free(self->posteriors); if(self->kmeansInit && self->kmeansInitIsOwner) { vl_kmeans_delete(self->kmeansInit); } vl_free(self); } /* ---------------------------------------------------------------- */ /* Getters and setters */ /* ---------------------------------------------------------------- */ /** @brief Get data type ** @param self object ** @return data type. **/ vl_type vl_gmm_get_data_type (VlGMM const * self) { return self->dataType ; } /** @brief Get the number of clusters ** @param self object ** @return number of clusters. **/ vl_size vl_gmm_get_num_clusters (VlGMM const * self) { return self->numClusters ; } /** @brief Get the number of data points ** @param self object ** @return number of data points. **/ vl_size vl_gmm_get_num_data (VlGMM const * self) { return self->numData ; } /** @brief Get the log likelihood of the current mixture ** @param self object ** @return loglikelihood. **/ double vl_gmm_get_loglikelihood (VlGMM const * self) { return self->LL ; } /** @brief Get verbosity level ** @param self object ** @return verbosity level. **/ int vl_gmm_get_verbosity (VlGMM const * self) { return self->verbosity ; } /** @brief Set verbosity level ** @param self object ** @param verbosity verbosity level. **/ void vl_gmm_set_verbosity (VlGMM * self, int verbosity) { self->verbosity = verbosity ; } /** @brief Get means ** @param self object ** @return cluster means. **/ void const * vl_gmm_get_means (VlGMM const * self) { return self->means ; } /** @brief Get covariances ** @param self object ** @return diagonals of cluster covariance matrices. **/ void const * vl_gmm_get_covariances (VlGMM const * self) { return self->covariances ; } /** @brief Get priors ** @param self object ** @return priors of cluster gaussians. **/ void const * vl_gmm_get_priors (VlGMM const * self) { return self->priors ; } /** @brief Get posteriors ** @param self object ** @return posterior probabilities of cluster memberships. **/ void const * vl_gmm_get_posteriors (VlGMM const * self) { return self->posteriors ; } /** @brief Get maximum number of iterations ** @param self object ** @return maximum number of iterations. **/ vl_size vl_gmm_get_max_num_iterations (VlGMM const * self) { return self->maxNumIterations ; } /** @brief Set maximum number of iterations ** @param self VlGMM filter. ** @param maxNumIterations maximum number of iterations. **/ void vl_gmm_set_max_num_iterations (VlGMM * self, vl_size maxNumIterations) { self->maxNumIterations = maxNumIterations ; } /** @brief Get maximum number of repetitions. ** @param self object ** @return current number of repretitions for quantization. **/ vl_size vl_gmm_get_num_repetitions (VlGMM const * self) { return self->numRepetitions ; } /** @brief Set maximum number of repetitions ** @param self object ** @param numRepetitions maximum number of repetitions. ** The number of repetitions cannot be smaller than 1. **/ void vl_gmm_set_num_repetitions (VlGMM * self, vl_size numRepetitions) { assert (numRepetitions >= 1) ; self->numRepetitions = numRepetitions ; } /** @brief Get data dimension ** @param self object ** @return data dimension. **/ vl_size vl_gmm_get_dimension (VlGMM const * self) { return self->dimension ; } /** @brief Get initialization algorithm ** @param self object ** @return initialization algorithm. **/ VlGMMInitialization vl_gmm_get_initialization (VlGMM const * self) { return self->initialization ; } /** @brief Set initialization algorithm. ** @param self object ** @param init initialization algorithm. **/ void vl_gmm_set_initialization (VlGMM * self, VlGMMInitialization init) { self->initialization = init; } /** @brief Get KMeans initialization object. ** @param self object ** @return kmeans initialization object. **/ VlKMeans * vl_gmm_get_kmeans_init_object (VlGMM const * self) { return self->kmeansInit; } /** @brief Set KMeans initialization object. ** @param self object ** @param kmeans initialization KMeans object. **/ void vl_gmm_set_kmeans_init_object (VlGMM * self, VlKMeans * kmeans) { if (self->kmeansInit && self->kmeansInitIsOwner) { vl_kmeans_delete(self->kmeansInit) ; } self->kmeansInit = kmeans; self->kmeansInitIsOwner = VL_FALSE; } /** @brief Get the lower bound on the diagonal covariance values. ** @param self object ** @return lower bound on covariances. **/ double const * vl_gmm_get_covariance_lower_bounds (VlGMM const * self) { return self->sigmaLowBound; } /** @brief Set the lower bounds on diagonal covariance values. ** @param self object. ** @param bounds bounds. ** ** There is one lower bound per dimension. Use ::vl:gmm_set_covariance_lower_bound ** to set all of them to a given scalar. **/ void vl_gmm_set_covariance_lower_bounds (VlGMM * self, double const * bounds) { memcpy(self->sigmaLowBound, bounds, sizeof(double) * self->dimension) ; } /** @brief Set the lower bounds on diagonal covariance values. ** @param self object. ** @param bound bound. ** ** While there is one lower bound per dimension, this function sets ** all of them to the specified scalar. Use ::vl:gmm_set_covariance_lower_bounds ** to set them individually. **/ void vl_gmm_set_covariance_lower_bound (VlGMM * self, double bound) { int i ; for (i = 0 ; i < (signed)self->dimension ; ++i) { self->sigmaLowBound[i] = bound ; } } /* ---------------------------------------------------------------- */ /* Instantiate shuffle algorithm */ #define VL_SHUFFLE_type vl_uindex #define VL_SHUFFLE_prefix _vl_gmm #include "shuffle-def.h" /* #ifdef VL_GMM_INSTANTITATING */ #endif /* ---------------------------------------------------------------- */ #ifdef VL_GMM_INSTANTIATING /* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */ /* Posterior assignments */ /* ---------------------------------------------------------------- */ /** @fn vl_get_gmm_data_posterior_f(float*,vl_size,vl_size,float const*,float const*,vl_size,float const*,float const*) ** @brief Get Gaussian modes posterior probabilities ** @param posteriors posterior probabilities (output)/ ** @param numClusters number of modes in the GMM model. ** @param numData number of data elements. ** @param priors prior mode probabilities of the GMM model. ** @param means means of the GMM model. ** @param dimension data dimension. ** @param covariances diagonal covariances of the GMM model. ** @param data data. ** @return data log-likelihood. ** ** This is a helper function that does not require a ::VlGMM object ** instance to operate. **/ double VL_XCAT(vl_get_gmm_data_posteriors_, SFX) (TYPE * posteriors, vl_size numClusters, vl_size numData, TYPE const * priors, TYPE const * means, vl_size dimension, TYPE const * covariances, TYPE const * data) { vl_index i_d, i_cl; vl_size dim; double LL = 0; TYPE halfDimLog2Pi = (dimension / 2.0) * log(2.0*VL_PI); TYPE * logCovariances ; TYPE * logWeights ; TYPE * invCovariances ; #if (FLT == VL_TYPE_FLOAT) VlFloatVector3ComparisonFunction distFn = vl_get_vector_3_comparison_function_f(VlDistanceMahalanobis) ; #else VlDoubleVector3ComparisonFunction distFn = vl_get_vector_3_comparison_function_d(VlDistanceMahalanobis) ; #endif logCovariances = vl_malloc(sizeof(TYPE) * numClusters) ; invCovariances = vl_malloc(sizeof(TYPE) * numClusters * dimension) ; logWeights = vl_malloc(numClusters * sizeof(TYPE)) ; #if defined(_OPENMP) #pragma omp parallel for private(i_cl,dim) num_threads(vl_get_max_threads()) #endif for (i_cl = 0 ; i_cl < (signed)numClusters ; ++ i_cl) { TYPE logSigma = 0 ; if (priors[i_cl] < VL_GMM_MIN_PRIOR) { logWeights[i_cl] = - (TYPE) VL_INFINITY_D ; } else { logWeights[i_cl] = log(priors[i_cl]); } for(dim = 0 ; dim < dimension ; ++ dim) { logSigma += log(covariances[i_cl*dimension + dim]); invCovariances [i_cl*dimension + dim] = (TYPE) 1.0 / covariances[i_cl*dimension + dim]; } logCovariances[i_cl] = logSigma; } /* end of parallel region */ #if defined(_OPENMP) #pragma omp parallel for private(i_cl,i_d) reduction(+:LL) \ num_threads(vl_get_max_threads()) #endif for (i_d = 0 ; i_d < (signed)numData ; ++ i_d) { TYPE clusterPosteriorsSum = 0; TYPE maxPosterior = (TYPE)(-VL_INFINITY_D) ; for (i_cl = 0 ; i_cl < (signed)numClusters ; ++ i_cl) { TYPE p = logWeights[i_cl] - halfDimLog2Pi - 0.5 * logCovariances[i_cl] - 0.5 * distFn (dimension, data + i_d * dimension, means + i_cl * dimension, invCovariances + i_cl * dimension) ; posteriors[i_cl + i_d * numClusters] = p ; if (p > maxPosterior) { maxPosterior = p ; } } for (i_cl = 0 ; i_cl < (signed)numClusters ; ++i_cl) { TYPE p = posteriors[i_cl + i_d * numClusters] ; p = exp(p - maxPosterior) ; posteriors[i_cl + i_d * numClusters] = p ; clusterPosteriorsSum += p ; } LL += log(clusterPosteriorsSum) + (double) maxPosterior ; for (i_cl = 0 ; i_cl < (signed)numClusters ; ++i_cl) { posteriors[i_cl + i_d * numClusters] /= clusterPosteriorsSum ; } } /* end of parallel region */ vl_free(logCovariances); vl_free(logWeights); vl_free(invCovariances); return LL; } /* ---------------------------------------------------------------- */ /* Restarts zero-weighted Gaussians */ /* ---------------------------------------------------------------- */ static void VL_XCAT(_vl_gmm_maximization_, SFX) (VlGMM * self, TYPE * posteriors, TYPE * priors, TYPE * covariances, TYPE * means, TYPE const * data, vl_size numData) ; static vl_size VL_XCAT(_vl_gmm_restart_empty_modes_, SFX) (VlGMM * self, TYPE const * data) { vl_size dimension = self->dimension; vl_size numClusters = self->numClusters; vl_index i_cl, j_cl, i_d, d; vl_size zeroWNum = 0; TYPE * priors = (TYPE*)self->priors ; TYPE * means = (TYPE*)self->means ; TYPE * covariances = (TYPE*)self->covariances ; TYPE * posteriors = (TYPE*)self->posteriors ; //VlRand * rand = vl_get_rand() ; TYPE * mass = vl_calloc(sizeof(TYPE), self->numClusters) ; if (numClusters <= 1) { return 0 ; } /* compute statistics */ { vl_uindex i, k ; vl_size numNullAssignments = 0 ; for (i = 0 ; i < self->numData ; ++i) { for (k = 0 ; k < self->numClusters ; ++k) { TYPE p = ((TYPE*)self->posteriors)[k + i * self->numClusters] ; mass[k] += p ; if (p < VL_GMM_MIN_POSTERIOR) { numNullAssignments ++ ; } } } if (self->verbosity) { VL_PRINTF("gmm: sparsity of data posterior: %.1f%%\n", (double)numNullAssignments / (self->numData * self->numClusters) * 100) ; } } #if 0 /* search for cluster with negligible weight and reassign them to fat clusters */ for (i_cl = 0 ; i_cl < numClusters ; ++i_cl) { if (priors[i_cl] < 0.00001/numClusters) { double mass = priors[0] ; vl_index best = 0 ; for (j_cl = 1 ; j_cl < numClusters ; ++j_cl) { if (priors[j_cl] > mass) { mass = priors[j_cl] ; best = j_cl ; } } if (j_cl == i_cl) { /* this should never happen */ continue ; } j_cl = best ; zeroWNum ++ ; VL_PRINTF("gmm: restarting mode %d by splitting mode %d (with prior %f)\n", i_cl,j_cl,mass) ; priors[i_cl] = mass/2 ; priors[j_cl] = mass/2 ; for (d = 0 ; d < dimension ; ++d) { TYPE sigma2 = covariances[j_cl*dimension + d] ; TYPE sigma = VL_XCAT(vl_sqrt_,SFX)(sigma2) ; means[i_cl*dimension + d] = means[j_cl*dimension + d] + 0.001 * (vl_rand_real1(rand) - 0.5) * sigma ; covariances[i_cl*dimension + d] = sigma2 ; } } } #endif /* search for cluster with negligible weight and reassign them to fat clusters */ for (i_cl = 0 ; i_cl < (signed)numClusters ; ++i_cl) { double size = - VL_INFINITY_D ; vl_index best = -1 ; if (mass[i_cl] >= VL_GMM_MIN_POSTERIOR * VL_MAX(1.0, (double) self->numData / self->numClusters)) { continue ; } if (self->verbosity) { VL_PRINTF("gmm: mode %d is nearly empty (mass %f)\n", i_cl, mass[i_cl]) ; } /* Search for the cluster that (approximately) maximally contribute to make the log-likelihood small. */ for (j_cl = 0 ; j_cl < (signed)numClusters ; ++j_cl) { double size_ ; if (priors[j_cl] < VL_GMM_MIN_PRIOR) { continue ; } size_ = - 0.5 * (1.0 + log(2*VL_PI)) ; for(d = 0 ; d < (signed)dimension ; d++) { double sigma2 = covariances[j_cl * dimension + d] ; size_ -= 0.5 * log(sigma2) ; } size_ *= priors[j_cl] ; if (self->verbosity > 2) { VL_PRINTF("gmm: mode %d: prior %f, mass %f, score %f\n", j_cl, priors[j_cl], mass[j_cl], size_) ; } if (size_ > size) { size = size_ ; best = j_cl ; } } j_cl = best ; if (j_cl == i_cl || j_cl < 0) { if (self->verbosity) { VL_PRINTF("gmm: mode %d is empty, " "but no other mode to split could be found\n", i_cl) ; } continue ; } if (self->verbosity) { VL_PRINTF("gmm: reinitializing empty mode %d with mode %d (prior %f, mass %f, score %f)\n", i_cl, j_cl, priors[j_cl], mass[j_cl], size) ; } /* Search for the dimension with maximum variance. */ size = - VL_INFINITY_D ; best = - 1 ; for(d = 0; d < (signed)dimension; d++) { double sigma2 = covariances[j_cl * dimension + d] ; if (sigma2 > size) { size = sigma2 ; best = d ; } } /* Reassign points j_cl (mode to split) to i_cl (empty mode). */ { TYPE mu = means[best + j_cl * self->dimension] ; for(i_d = 0 ; i_d < (signed)self->numData ; ++ i_d) { TYPE p = posteriors[j_cl + self->numClusters * i_d] ; TYPE q = posteriors[i_cl + self->numClusters * i_d] ; /* ~= 0 */ if (data[best + i_d * self->dimension] < mu) { /* assign this point to i_cl */ posteriors[i_cl + self->numClusters * i_d] += p ; posteriors[j_cl + self->numClusters * i_d] = 0 ; } else { /* assign this point to j_cl */ posteriors[i_cl + self->numClusters * i_d] = 0 ; posteriors[j_cl + self->numClusters * i_d] += q ; } } } /* Re-estimate. */ VL_XCAT(_vl_gmm_maximization_, SFX) (self,posteriors,priors,covariances,means,data,self->numData) ; } return zeroWNum; } /* ---------------------------------------------------------------- */ /* Helpers */ /* ---------------------------------------------------------------- */ static void VL_XCAT(_vl_gmm_apply_bounds_, SFX)(VlGMM * self) { vl_uindex dim ; vl_uindex k ; vl_size numAdjusted = 0 ; TYPE * cov = (TYPE*)self->covariances ; double const * lbs = self->sigmaLowBound ; for (k = 0 ; k < self->numClusters ; ++k) { vl_bool adjusted = VL_FALSE ; for (dim = 0 ; dim < self->dimension ; ++dim) { if (cov[k * self->dimension + dim] < lbs[dim] ) { cov[k * self->dimension + dim] = lbs[dim] ; adjusted = VL_TRUE ; } } if (adjusted) { numAdjusted ++ ; } } if (numAdjusted > 0 && self->verbosity > 0) { VL_PRINT("gmm: detected %d of %d modes with at least one dimension " "with covariance too small (set to lower bound)\n", numAdjusted, self->numClusters) ; } } /* ---------------------------------------------------------------- */ /* EM - Maximization step */ /* ---------------------------------------------------------------- */ static void VL_XCAT(_vl_gmm_maximization_, SFX) (VlGMM * self, TYPE * posteriors, TYPE * priors, TYPE * covariances, TYPE * means, TYPE const * data, vl_size numData) { vl_size numClusters = self->numClusters; vl_index i_d, i_cl; vl_size dim ; TYPE * oldMeans ; double time = 0 ; if (self->verbosity > 1) { VL_PRINTF("gmm: em: entering maximization step\n") ; time = vl_get_cpu_time() ; } oldMeans = vl_malloc(sizeof(TYPE) * self->dimension * numClusters) ; memcpy(oldMeans, means, sizeof(TYPE) * self->dimension * numClusters) ; memset(priors, 0, sizeof(TYPE) * numClusters) ; memset(means, 0, sizeof(TYPE) * self->dimension * numClusters) ; memset(covariances, 0, sizeof(TYPE) * self->dimension * numClusters) ; #if defined(_OPENMP) #pragma omp parallel default(shared) private(i_d, i_cl, dim) \ num_threads(vl_get_max_threads()) #endif { TYPE * clusterPosteriorSum_, * means_, * covariances_ ; #if defined(_OPENMP) #pragma omp critical #endif { clusterPosteriorSum_ = vl_calloc(sizeof(TYPE), numClusters) ; means_ = vl_calloc(sizeof(TYPE), self->dimension * numClusters) ; covariances_ = vl_calloc(sizeof(TYPE), self->dimension * numClusters) ; } /* Accumulate weighted sums and sum of square differences. Once normalized, these become the means and covariances of each Gaussian mode. The squared differences will be taken w.r.t. the old means however. In this manner, one avoids doing two passes across the data. Eventually, these are corrected to account for the new means properly. In principle, one could set the old means to zero, but this may cause numerical instabilities (by accumulating large squares). */ #if defined(_OPENMP) #pragma omp for #endif for (i_d = 0 ; i_d < (signed)numData ; ++i_d) { for (i_cl = 0 ; i_cl < (signed)numClusters ; ++i_cl) { TYPE p = posteriors[i_cl + i_d * self->numClusters] ; vl_bool calculated = VL_FALSE ; /* skip very small associations for speed */ if (p < VL_GMM_MIN_POSTERIOR / numClusters) { continue ; } clusterPosteriorSum_ [i_cl] += p ; #ifndef VL_DISABLE_AVX if (vl_get_simd_enabled() && vl_cpu_has_avx()) { VL_XCAT(_vl_weighted_mean_sse2_, SFX) (self->dimension, means_+ i_cl * self->dimension, data + i_d * self->dimension, p) ; VL_XCAT(_vl_weighted_sigma_sse2_, SFX) (self->dimension, covariances_ + i_cl * self->dimension, data + i_d * self->dimension, oldMeans + i_cl * self->dimension, p) ; calculated = VL_TRUE; } #endif #ifndef VL_DISABLE_SSE2 if (vl_get_simd_enabled() && vl_cpu_has_sse2() && !calculated) { VL_XCAT(_vl_weighted_mean_sse2_, SFX) (self->dimension, means_+ i_cl * self->dimension, data + i_d * self->dimension, p) ; VL_XCAT(_vl_weighted_sigma_sse2_, SFX) (self->dimension, covariances_ + i_cl * self->dimension, data + i_d * self->dimension, oldMeans + i_cl * self->dimension, p) ; calculated = VL_TRUE; } #endif if(!calculated) { for (dim = 0 ; dim < self->dimension ; ++dim) { TYPE x = data[i_d * self->dimension + dim] ; TYPE mu = oldMeans[i_cl * self->dimension + dim] ; TYPE diff = x - mu ; means_ [i_cl * self->dimension + dim] += p * x ; covariances_ [i_cl * self->dimension + dim] += p * (diff*diff) ; } } } } /* accumulate */ #if defined(_OPENMP) #pragma omp critical #endif { for (i_cl = 0 ; i_cl < (signed)numClusters ; ++i_cl) { priors [i_cl] += clusterPosteriorSum_ [i_cl]; for (dim = 0 ; dim < self->dimension ; ++dim) { means [i_cl * self->dimension + dim] += means_ [i_cl * self->dimension + dim] ; covariances [i_cl * self->dimension + dim] += covariances_ [i_cl * self->dimension + dim] ; } } vl_free(means_); vl_free(covariances_); vl_free(clusterPosteriorSum_); } } /* parallel section */ /* at this stage priors[] contains the total mass of each cluster */ for (i_cl = 0 ; i_cl < (signed)numClusters ; ++ i_cl) { TYPE mass = priors[i_cl] ; /* do not update modes that do not recieve mass */ if (mass >= 1e-6 / numClusters) { for (dim = 0 ; dim < self->dimension ; ++dim) { means[i_cl * self->dimension + dim] /= mass ; covariances[i_cl * self->dimension + dim] /= mass ; } } } /* apply old to new means correction */ for (i_cl = 0 ; i_cl < (signed)numClusters ; ++ i_cl) { TYPE mass = priors[i_cl] ; if (mass >= 1e-6 / numClusters) { for (dim = 0 ; dim < self->dimension ; ++dim) { TYPE mu = means[i_cl * self->dimension + dim] ; TYPE oldMu = oldMeans[i_cl * self->dimension + dim] ; TYPE diff = mu - oldMu ; covariances[i_cl * self->dimension + dim] -= diff * diff ; } } } VL_XCAT(_vl_gmm_apply_bounds_,SFX)(self) ; { TYPE sum = 0; for (i_cl = 0 ; i_cl < (signed)numClusters ; ++i_cl) { sum += priors[i_cl] ; } sum = VL_MAX(sum, 1e-12) ; for (i_cl = 0 ; i_cl < (signed)numClusters ; ++i_cl) { priors[i_cl] /= sum ; } } if (self->verbosity > 1) { VL_PRINTF("gmm: em: maximization step completed in %.2f s\n", vl_get_cpu_time() - time) ; } vl_free(oldMeans); } /* ---------------------------------------------------------------- */ /* EM iterations */ /* ---------------------------------------------------------------- */ static double VL_XCAT(_vl_gmm_em_, SFX) (VlGMM * self, TYPE const * data, vl_size numData) { vl_size iteration, restarted ; double previousLL = (TYPE)(-VL_INFINITY_D) ; double LL = (TYPE)(-VL_INFINITY_D) ; double time = 0 ; _vl_gmm_prepare_for_data (self, numData) ; VL_XCAT(_vl_gmm_apply_bounds_,SFX)(self) ; for (iteration = 0 ; 1 ; ++ iteration) { double eps ; /* Expectation: assign data to Gaussian modes and compute log-likelihood. */ if (self->verbosity > 1) { VL_PRINTF("gmm: em: entering expectation step\n") ; time = vl_get_cpu_time() ; } LL = VL_XCAT(vl_get_gmm_data_posteriors_,SFX) (self->posteriors, self->numClusters, numData, self->priors, self->means, self->dimension, self->covariances, data) ; if (self->verbosity > 1) { VL_PRINTF("gmm: em: expectation step completed in %.2f s\n", vl_get_cpu_time() - time) ; } /* Check the termination conditions. */ if (self->verbosity) { VL_PRINTF("gmm: em: iteration %d: loglikelihood = %f (variation = %f)\n", iteration, LL, LL - previousLL) ; } if (iteration >= self->maxNumIterations) { if (self->verbosity) { VL_PRINTF("gmm: em: terminating because " "the maximum number of iterations " "(%d) has been reached.\n", self->maxNumIterations) ; } break ; } eps = vl_abs_d ((LL - previousLL) / (LL)); if ((iteration > 0) && (eps < 0.00001)) { if (self->verbosity) { VL_PRINTF("gmm: em: terminating because the algorithm " "fully converged (log-likelihood variation = %f).\n", eps) ; } break ; } previousLL = LL ; /* Restart empty modes. */ if (iteration > 1) { restarted = VL_XCAT(_vl_gmm_restart_empty_modes_, SFX) (self, data); if ((restarted > 0) & (self->verbosity > 0)) { VL_PRINTF("gmm: em: %d Gaussian modes restarted because " "they had become empty.\n", restarted); } } /* Maximization: reestimate the GMM parameters. */ VL_XCAT(_vl_gmm_maximization_, SFX) (self,self->posteriors,self->priors,self->covariances,self->means,data,numData) ; } return LL; } /* ---------------------------------------------------------------- */ /* Kmeans initialization of mixtures */ /* ---------------------------------------------------------------- */ static void VL_XCAT(_vl_gmm_init_with_kmeans_, SFX) (VlGMM * self, TYPE const * data, vl_size numData, VlKMeans * kmeansInit) { vl_size i_d ; vl_uint32 * assignments = vl_malloc(sizeof(vl_uint32) * numData); _vl_gmm_prepare_for_data (self, numData) ; memset(self->means,0,sizeof(TYPE) * self->numClusters * self->dimension) ; memset(self->priors,0,sizeof(TYPE) * self->numClusters) ; memset(self->covariances,0,sizeof(TYPE) * self->numClusters * self->dimension) ; memset(self->posteriors,0,sizeof(TYPE) * self->numClusters * numData) ; /* setup speified KMeans initialization object if any */ if (kmeansInit) { vl_gmm_set_kmeans_init_object (self, kmeansInit) ; } /* if a KMeans initalization object is still unavailable, create one */ if(self->kmeansInit == NULL) { vl_size ncomparisons = VL_MAX(numData / 4, 10) ; vl_size niter = 5 ; vl_size ntrees = 1 ; vl_size nrepetitions = 1 ; VlKMeansAlgorithm algorithm = VlKMeansANN ; VlKMeansInitialization initialization = VlKMeansRandomSelection ; VlKMeans * kmeansInitDefault = vl_kmeans_new(self->dataType,VlDistanceL2) ; vl_kmeans_set_initialization(kmeansInitDefault, initialization); vl_kmeans_set_max_num_iterations (kmeansInitDefault, niter) ; vl_kmeans_set_max_num_comparisons (kmeansInitDefault, ncomparisons) ; vl_kmeans_set_num_trees (kmeansInitDefault, ntrees); vl_kmeans_set_algorithm (kmeansInitDefault, algorithm); vl_kmeans_set_num_repetitions(kmeansInitDefault, nrepetitions); vl_kmeans_set_verbosity (kmeansInitDefault, self->verbosity); self->kmeansInit = kmeansInitDefault; self->kmeansInitIsOwner = VL_TRUE ; } /* Use k-means to assign data to clusters */ vl_kmeans_cluster (self->kmeansInit, data, self->dimension, numData, self->numClusters); vl_kmeans_quantize (self->kmeansInit, assignments, NULL, data, numData) ; /* Transform the k-means assignments in posteriors and estimates the mode parameters */ for(i_d = 0; i_d < numData; i_d++) { ((TYPE*)self->posteriors)[assignments[i_d] + i_d * self->numClusters] = (TYPE) 1.0 ; } /* Update cluster parameters */ VL_XCAT(_vl_gmm_maximization_, SFX) (self,self->posteriors,self->priors,self->covariances,self->means,data,numData); vl_free(assignments) ; } /* ---------------------------------------------------------------- */ /* Random initialization of mixtures */ /* ---------------------------------------------------------------- */ static void VL_XCAT(_vl_gmm_compute_init_sigma_, SFX) (VlGMM * self, TYPE const * data, TYPE * initSigma, vl_size dimension, vl_size numData) { vl_size dim; vl_uindex i; TYPE * dataMean ; memset(initSigma,0,sizeof(TYPE)*dimension) ; if (numData <= 1) return ; dataMean = vl_malloc(sizeof(TYPE)*dimension); memset(dataMean,0,sizeof(TYPE)*dimension) ; /* find mean of the whole dataset */ for(dim = 0 ; dim < dimension ; dim++) { for(i = 0 ; i < numData ; i++) { dataMean[dim] += data[i*dimension + dim]; } dataMean[dim] /= numData; } /* compute variance of the whole dataset */ for(dim = 0; dim < dimension; dim++) { for(i = 0; i < numData; i++) { TYPE diff = (data[i*self->dimension + dim] - dataMean[dim]) ; initSigma[dim] += diff*diff ; } initSigma[dim] /= numData - 1 ; } vl_free(dataMean) ; } static void VL_XCAT(_vl_gmm_init_with_rand_data_, SFX) (VlGMM * self, TYPE const * data, vl_size numData) { vl_uindex i, k, dim ; VlKMeans * kmeans ; _vl_gmm_prepare_for_data(self, numData) ; /* initilaize priors of gaussians so they are equal and sum to one */ for (i = 0 ; i < self->numClusters ; ++i) { ((TYPE*)self->priors)[i] = (TYPE) (1.0 / self->numClusters) ; } /* initialize diagonals of covariance matrices to data covariance */ VL_XCAT(_vl_gmm_compute_init_sigma_, SFX) (self, data, self->covariances, self->dimension, numData); for (k = 1 ; k < self->numClusters ; ++ k) { for(dim = 0; dim < self->dimension; dim++) { *((TYPE*)self->covariances + k * self->dimension + dim) = *((TYPE*)self->covariances + dim) ; } } /* use kmeans++ initialization to pick points at random */ kmeans = vl_kmeans_new(self->dataType,VlDistanceL2) ; vl_kmeans_init_centers_plus_plus(kmeans, data, self->dimension, numData, self->numClusters) ; memcpy(self->means, vl_kmeans_get_centers(kmeans), sizeof(TYPE) * self->dimension * self->numClusters) ; vl_kmeans_delete(kmeans) ; } /* ---------------------------------------------------------------- */ #else /* VL_GMM_INSTANTIATING */ /* ---------------------------------------------------------------- */ #ifndef __DOXYGEN__ #define FLT VL_TYPE_FLOAT #define TYPE float #define SFX f #define VL_GMM_INSTANTIATING #include "gmm.c" #define FLT VL_TYPE_DOUBLE #define TYPE double #define SFX d #define VL_GMM_INSTANTIATING #include "gmm.c" #endif /* VL_GMM_INSTANTIATING */ #endif /* ---------------------------------------------------------------- */ #ifndef VL_GMM_INSTANTIATING /* ---------------------------------------------------------------- */ /** @brief Create a new GMM object by copy ** @param self object. ** @return new copy. ** ** Most parameters, including the cluster priors, means, and ** covariances are copied. Data posteriors (available after ** initalization or EM) are not; nor is the KMeans object used for ** initialization, if any. **/ VlGMM * vl_gmm_new_copy (VlGMM const * self) { vl_size size = vl_get_type_size(self->dataType) ; VlGMM * gmm = vl_gmm_new(self->dataType, self->dimension, self->numClusters); gmm->initialization = self->initialization; gmm->maxNumIterations = self->maxNumIterations; gmm->numRepetitions = self->numRepetitions; gmm->verbosity = self->verbosity; gmm->LL = self->LL; memcpy(gmm->means, self->means, size*self->numClusters*self->dimension); memcpy(gmm->covariances, self->covariances, size*self->numClusters*self->dimension); memcpy(gmm->priors, self->priors, size*self->numClusters); return gmm ; } /** @brief Initialize mixture before EM takes place using random initialization ** @param self GMM object instance. ** @param data data points which should be clustered. ** @param dimension dimensionality of the data points. ** @param numData number of data points. ** @param numClusters number of gaussians which should be estimated. **/ void vl_gmm_init_with_rand_data (VlGMM * self, void const * data, vl_size numData) { vl_gmm_reset (self) ; switch (self->dataType) { case VL_TYPE_FLOAT : _vl_gmm_init_with_rand_data_f (self, (float const *)data, numData) ; break ; case VL_TYPE_DOUBLE : _vl_gmm_init_with_rand_data_d (self, (double const *)data, numData) ; break ; default: abort() ; } } /** @brief Initializes the GMM using KMeans ** @param self GMM object instance. ** @param data data points which should be clustered. ** @param dimension dimensionality of the data points. ** @param numData number of data points. ** @param numClusters number of gaussians which should be estimated. ** @param kmeansInit KMeans object to use. **/ void vl_gmm_init_with_kmeans (VlGMM * self, void const * data, vl_size numData, VlKMeans * kmeansInit) { vl_gmm_reset (self) ; switch (self->dataType) { case VL_TYPE_FLOAT : _vl_gmm_init_with_kmeans_f (self, (float const *)data, numData, kmeansInit) ; break ; case VL_TYPE_DOUBLE : _vl_gmm_init_with_kmeans_d (self, (double const *)data, numData, kmeansInit) ; break ; default: abort() ; } } #if 0 #include #endif /** @brief Run GMM clustering - includes initialization and EM ** @param self GMM object instance. ** @param data data points which should be clustered. ** @param dimension dimensionality of the data points. ** @param numData number of data points. ** @param numClusters number of gaussians which should be estimated. **/ double vl_gmm_cluster (VlGMM * self, void const * data, vl_size numData) { void * bestPriors = NULL ; void * bestMeans = NULL; void * bestCovariances = NULL; void * bestPosteriors = NULL; vl_size size = vl_get_type_size(self->dataType) ; double bestLL = -VL_INFINITY_D; vl_uindex repetition; assert(self->numRepetitions >=1) ; bestPriors = vl_malloc(size * self->numClusters) ; bestMeans = vl_malloc(size * self->dimension * self->numClusters) ; bestCovariances = vl_malloc(size * self->dimension * self->numClusters) ; bestPosteriors = vl_malloc(size * self->numClusters * numData) ; #if 0 feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW); #endif for (repetition = 0 ; repetition < self->numRepetitions ; ++ repetition) { double LL ; double timeRef ; if (self->verbosity) { VL_PRINTF("gmm: clustering: starting repetition %d of %d\n", repetition + 1, self->numRepetitions) ; } /* initialize a new mixture model */ timeRef = vl_get_cpu_time() ; switch (self->initialization) { case VlGMMKMeans : vl_gmm_init_with_kmeans (self, data, numData, NULL) ; break ; case VlGMMRand : vl_gmm_init_with_rand_data (self, data, numData) ; break ; case VlGMMCustom : break ; default: abort() ; } if (self->verbosity) { VL_PRINTF("gmm: model initialized in %.2f s\n", vl_get_cpu_time() - timeRef) ; } /* fit the model to data by running EM */ timeRef = vl_get_cpu_time () ; LL = vl_gmm_em (self, data, numData) ; if (self->verbosity) { VL_PRINTF("gmm: optimization terminated in %.2f s with loglikelihood %f\n", vl_get_cpu_time() - timeRef, LL) ; } if (LL > bestLL || repetition == 0) { void * temp ; temp = bestPriors ; bestPriors = self->priors ; self->priors = temp ; temp = bestMeans ; bestMeans = self->means ; self->means = temp ; temp = bestCovariances ; bestCovariances = self->covariances ; self->covariances = temp ; temp = bestPosteriors ; bestPosteriors = self->posteriors ; self->posteriors = temp ; bestLL = LL; } } vl_free (self->priors) ; vl_free (self->means) ; vl_free (self->covariances) ; vl_free (self->posteriors) ; self->priors = bestPriors ; self->means = bestMeans ; self->covariances = bestCovariances ; self->posteriors = bestPosteriors ; self->LL = bestLL; if (self->verbosity) { VL_PRINTF("gmm: all repetitions terminated with final loglikelihood %f\n", self->LL) ; } return bestLL ; } /** @brief Invoke the EM algorithm. ** @param self GMM object instance. ** @param data data points which should be clustered. ** @param numData number of data points. **/ double vl_gmm_em (VlGMM * self, void const * data, vl_size numData) { switch (self->dataType) { case VL_TYPE_FLOAT: return _vl_gmm_em_f (self, (float const *)data, numData) ; break ; case VL_TYPE_DOUBLE: return _vl_gmm_em_d (self, (double const *)data, numData) ; break ; default: abort() ; } return 0 ; } /** @brief Explicitly set the initial means for EM. ** @param self GMM object instance. ** @param means initial values of means. **/ void vl_gmm_set_means (VlGMM * self, void const * means) { memcpy(self->means,means, self->dimension * self->numClusters * vl_get_type_size(self->dataType)); } /** @brief Explicitly set the initial sigma diagonals for EM. ** @param self GMM object instance. ** @param covariances initial values of covariance matrix diagonals. **/ void vl_gmm_set_covariances (VlGMM * self, void const * covariances) { memcpy(self->covariances,covariances, self->dimension * self->numClusters * vl_get_type_size(self->dataType)); } /** @brief Explicitly set the initial priors of the gaussians. ** @param self GMM object instance. ** @param priors initial values of the gaussian priors. **/ void vl_gmm_set_priors (VlGMM * self, void const * priors) { memcpy(self->priors,priors, self->numClusters * vl_get_type_size(self->dataType)); } /* VL_GMM_INSTANTIATING */ #endif #undef SFX #undef TYPE #undef FLT #undef VL_GMM_INSTANTIATING vlfeat/vl/fisher.c0000644000175000017500000004113312237004745013020 0ustar dimadima/** @file fisher.c ** @brief Fisher - Declaration ** @author David Novotny **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @page fisher Fisher Vector encoding (FV) @author David Novotny @author Andrea Vedaldi @ref fisher.h implements the Fisher Vectors (FV) image representation @cite{perronnin06fisher} @cite{perronnin10improving}. A FV is a statistics capturing the distribution of a set of vectors, usually a set of local image descriptors. @ref fisher-starting demonstrates how to use the C API to compute the FV representation of an image. For further details refer to: - @subpage fisher-fundamentals - Fisher Vector definition. - @subpage fisher-derivation - Deriving the Fisher Vectors as a Fisher Kernel. - @subpage fisher-kernel - The Fisher Kernel in general. @section fisher-starting Getting started The Fisher Vector encoding of a set of features is obtained by using the function ::vl_fisher_encode. Note that the function requires a @ref gmm "Gaussian Mixture Model" (GMM) of the encoded feature distribution. In the following code, the result of the coding process is stored in the @c enc array and the improved fisher vector normalization is used. @code float * means ; float * covariances ; float * priors ; float * posteriors ; float * enc; // create a GMM object and cluster input data to get means, covariances // and priors of the estimated mixture gmm = vl_gmm_new (VL_TYPE_FLOAT) ; vl_gmm_cluster (gmm, data, dimension, numData, numClusters); // allocate space for the encoding enc = vl_malloc(sizeof(float) * 2 * dimension * numClusters); // run fisher encoding vl_fisher_encode (enc, VL_F_TYPE, vl_gmm_get_means(gmm), dimension, numClusters, vl_gmm_get_covariances(gmm), vl_gmm_get_priors(gmm), dataToEncode, numDataToEncode, VL_FISHER_FLAG_IMPROVED ) ; @endcode The performance of the standard Fisher Vector can be significantly improved @cite{perronnin10improving} by using appropriate @ref fisher-normalization normalizations. These are controlled by the @c flag parameter of ::vl_fisher_encode. @page fisher-fundamentals Fisher vector fundamentals @tableofcontents This page describes the *Fisher Vector* (FV) of @cite{perronnin06fisher} @cite{perronnin10improving}. See @ref fisher for an overview of the C API and @ref fisher-kernel for its relation to the more general notion of Fisher kernel. The FV is an image representation obtained by pooling local image features. It is frequently used as a global image descriptor in visual classification. While the FV can be @ref fisher-kernel "derived" as a special, approximate, and improved case of the general Fisher Kernel framework, it is easy to describe directly. Let $I = (\bx_1,\dots,\bx_N)$ be a set of $D$ dimensional feature vectors (e.g. SIFT descriptors) extracted from an image. Let $\Theta=(\mu_k,\Sigma_k,\pi_k:k=1,\dots,K)$ be the parameters of a @ref gmm "Gaussian Mixture Model" fitting the distribution of descriptors. The GMM associates each vector $\bx_i$ to a mode $k$ in the mixture with a strength given by the posterior probability: \[ q_{ik} = \frac {(\bx_i - \mu_k)^T \Sigma_k^{-1} (\bx_i - \mu_k)} {\sum_{t=1}^K (\bx_i - \mu_t)^T \Sigma_t^{-1} (\bx_i - \mu_t)}. \] For each mode $k$, consider the mean and covariance deviation vectors @f{align*} u_{jk} &= {1 \over {N \sqrt{\pi_k}}} \sum_{i=1}^{N} q_{ik} \frac{x_{ji} - \mu_{ik}}{\sigma_i}, \\ v_{jk} &= {1 \over {N \sqrt{2 \pi_k}}} \sum_{i=1}^{N} q_{ik} \left[ \left(\frac{x_{ji} - \mu_{ik}}{\sigma_j}\right)^2 - 1 \right]. @f} where $j=1,2,\dots,D$ spans the vector dimensions. The FV of image $I$ is the stacking of the vectors $\bu_k$ and then of the vectors $\bv_k$ for each of the $K$ modes in the Gaussian mixtures: \[ \Phi(I) = \begin{bmatrix} \vdots \\ \bu_k \\ \vdots \\ \bv_k \\ \vdots \end{bmatrix}. \] @section fisher-normalization Normalization and improved Fisher vectors The *improved* Fisher Vector @cite{perronnin10improving} (IFV) improves the classification performance of the representation by using to ideas: 1. *Non-linear additive kernel.* The Hellinger's kernel (or Bhattacharya coefficient) can be used instead of the linear one at no cost by signed squared rooting. This is obtained by applying the function $|z| \sign z$ to each dimension of the vector $\Phi(I)$. Other @ref homkermap "additive kernels" can also be used at an increased space or time cost. 2. *Normalization.* Before using the representation in a linear model (e.g. a @ref svm "support vector machine"), the vector $\Phi(I)$ is further normalized by the $l^2$ norm (note that the standard Fisher vector is normalized by the number of encoded feature vectors). After square-rooting and normalization, the IFV is often used in a linear classifier such as an @ref svm "SVM". @page fisher-derivation Fisher vector derivation The FV of @cite{perronnin06fisher} is a special case of the @ref fisher-kernel "Fisher kernel" construction. It is designed to encode local image features in a format that is suitable for learning and comparison with simple metrics such as the Euclidean. In this construction, an image is modeled as a collection of $D$-dimensional feature vectors $I=(\bx_1,\dots,\bx_n)$ generated by a GMM with $K$ components $\Theta=(\mu_k,\Sigma_k,\pi_k:k=1,\dots,K)$. The covariance matrices are assumed to be diagonal, i.e. $\Sigma_k = \diag \bsigma_k^2$, $\bsigma_k \in \real^D_+$. The generative model of *one* feature vector $\bx$ is given by the GMM density function: \[ p(\bx|\Theta) = \sum_{k=1}^K \pi_k p(\bx|\Theta_k), \quad p(\bx|\Theta_k) = \frac{1}{(2\pi)^\frac{D}{2} (\det \Sigma_k)^{\frac{1}{2}}} \exp \left[ -\frac{1}{2} (\bx - \mu_k)^\top \Sigma_k^{-1} (\bx - \mu_k) \right] \] where $\Theta_k = (\mu_k,\Sigma_k)$. The Fisher Vector requires computing the derivative of the log-likelihood function with respect to the various model parameters. Consider in particular the parameters $\Theta_k$ of a mode. Due to the exponent in the Gaussian density function, the derivative can be written as \[ \nabla_{\Theta_k} p(\bx|\Theta_k) = p(\bx|\Theta_k) g(\bx|\Theta_k) \] for a simple vector function $g$. The derivative of the log-likelihood function is then \[ \nabla_{\Theta_k} \log p(\bx|\Theta) = \frac{\pi_k p(\bx|\Theta_k)}{\sum_{t=1}^K \pi_k p(\bx|\Theta_k)} g(\bx|\Theta_k) = q_k(\bx) g(\bx|\Theta_k) \] where $q_k(\bx)$ is the soft-assignment of the point $\bx$ to the mode $k$. We make the approximation that $q_k(\bx)\approx 1$ if $\bx$ is sampled from mode $k$ and $\approx 0$ otherwise @cite{perronnin06fisher}. Hence one gets: \[ E_{\bx \sim p(\bx|\Theta)} [ \nabla_{\Theta_k} \log p(\bx|\Theta) \nabla_{\Theta_t} \log p(\bx|\Theta)^\top ] \approx \begin{cases} \pi_k E_{\bx \sim p(\bx|\Theta_k)} [ g(\bx|\Theta_k) g(\bx|\Theta_k)^\top], & t = k, \\ 0, & t\not=k. \end{cases} \] Thus under this approximation there is no correlation between the parameters of the various Gaussian modes. The function $g$ can be further broken down as the stacking of the derivative w.r.t. the mean and the diagonal covariance. \[ g(\bx|\Theta_k) = \begin{bmatrix} g(\bx|\mu_k) \\ g(\bx|\bsigma_k) \end{bmatrix}, \quad [g(\bx|\mu_k)]_j = \frac{x_j - \mu_{jk}}{\sigma_{jk}^2}, \quad [g(\bx|\bsigma_k^2)]_j = \frac{1}{2\sigma_{jk}^2} \left( \left(\frac{x_j - \mu_{jk}}{\sigma_{jk}}\right)^2 - 1 \right) \] Thus the covariance of the model (Fisher information) is diagonal and the diagonal entries are given by \[ H_{\mu_{jk}} = \pi_k E[g(\bx|\mu_{jk})g(\bx|\mu_{jk})] = \frac{\pi_k}{\sigma_{jk}^2}, \quad H_{\sigma_{jk}^2} = \frac{\pi_k}{2 \sigma_{jk}^4}. \] where in the calculation it was used the fact that the fourth moment of the standard Gaussian distribution is 3. Multiplying the inverse square root of the matrix $H$ by the derivative of the log-likelihood function results in the Fisher vector encoding of one image feature $\bx$: \[ \Phi_{\mu_{jk}}(\bx) = H_{\mu_{jk}}^{-\frac{1}{2}} q_k(\bx) g(\bx|\mu_{jk}) = q_k(\bx) \frac{x_j - \mu_{jk}}{\sqrt{\pi_k}\sigma_{jk}}, \qquad \Phi_{\sigma^2_{jk}}(\bx) = \frac{q_k(\bx)}{\sqrt{2 \pi_k}} \left( \left(\frac{x_j - \mu_{jk}}{\sigma_{jk}}\right)^2 - 1 \right) \] Assuming that features are sampled i.i.d. from the GMM results in the formulas given in @ref fisher-fundamentals (note the normalization factor). Note that: * The Fisher components relative to the prior probabilities $\pi_k$ have been ignored. This is because they have little effect on the representation @cite{perronnin10improving}. * Technically, the derivation of the Fisher Vector for multiple image features requires the number of features to be the same in both images. Ultimately, however, the representation can be computed by using any number of features. @page fisher-kernel Fisher kernel This page discusses the Fisher Kernels (FK) of @cite{jaakkola98exploiting} and shows how the FV of @cite{perronnin06fisher} can be derived from it as a special case. The FK induces a similarity measures between data points $\bx$ and $\bx'$ from a parametric generative model $p(\bx|\Theta)$ of the data. The parameter $\Theta$ of the model is selected to fit the a-priori distribution of the data, and is usually the Maximum Likelihood (MLE) estimate obtained from a set of training examples. Once the generative model is learned, each particular datum $\bx$ is represented by looking at how it affects the MLE parameter estimate. This effect is measured by computing the gradient of the log-likelihood term corresponding to $\bx$: \[ \hat\Phi(\bx) = \nabla_\Theta \log p(\bx|\Theta) \] The vectors $\hat\Phi(\bx)$ should be appropriately scaled before they can be meaningfully compared. This is obtained by *whitening* the data by multiplying the vectors by the inverse of the square root of their *covariance matrix*. The covariance matrix can be obtained from the generative model $p(\bx|\Theta)$ itself. Since $\Theta$ is the ML parameter and $\hat\Phi(\bx)$ is the gradient of the log-likelihood function, its expected value $E[\hat\Phi(\bx)]$ is zero. Thus, since the vectors are already centered, their covariance matrix is simply: \[ H = E_{\bx \sim p(\bx|\Theta)} [\hat\Phi(\bx) \hat\Phi(\bx)^\top] \] Note that $H$ is also the *Fisher information matrix* of the model. The final FV encoding $\Phi(\bx)$ is given by the whitened gradient of the log-likelihood function, i.e.: \[ \Phi(\bx) = H^{-\frac{1}{2}} \nabla_\Theta \log p(\bx|\Theta). \] Taking the inner product of two such vectors yields the *Fisher kernel*: \[ K(\bx,\bx') = \langle \Phi(\bx),\Phi(\bx') \rangle = \nabla_\Theta \log p(\bx|\Theta)^\top H^{-1} \nabla_\Theta \log p(\bx'|\Theta). \] **/ #include "fisher.h" #include "gmm.h" #include "mathop.h" #include #include #include #ifndef VL_FISHER_INSTANTIATING #endif #ifdef VL_FISHER_INSTANTIATING static void VL_XCAT(_vl_fisher_encode_, SFX) (TYPE * enc, TYPE const * means, vl_size dimension, vl_size numClusters, TYPE const * covariances, TYPE const * priors, TYPE const * data, vl_size numData, int flags) { vl_size dim; vl_index i_cl, i_d; TYPE * posteriors ; TYPE * sqrtInvSigma; posteriors = vl_malloc(sizeof(TYPE) * numClusters * numData); sqrtInvSigma = vl_malloc(sizeof(TYPE) * dimension * numClusters); memset(enc, 0, sizeof(TYPE) * 2 * dimension * numClusters) ; for (i_cl = 0 ; i_cl < (signed)numClusters ; ++i_cl) { for(dim = 0; dim < dimension; dim++) { sqrtInvSigma[i_cl*dimension + dim] = sqrt(1.0 / covariances[i_cl*dimension + dim]); } } VL_XCAT(vl_get_gmm_data_posteriors_, SFX)(posteriors, numClusters, numData, priors, means, dimension, covariances, data) ; #if defined(_OPENMP) #pragma omp parallel for default(shared) private(i_cl, i_d, dim) num_threads(vl_get_max_threads()) #endif for(i_cl = 0; i_cl < (signed)numClusters; ++ i_cl) { TYPE uprefix; TYPE vprefix; TYPE * uk = enc + i_cl*dimension ; TYPE * vk = enc + i_cl*dimension + numClusters * dimension ; if (priors[i_cl] < 1e-6) { continue ; } for(i_d = 0; i_d < (signed)numData; i_d++) { TYPE p = posteriors[i_cl + i_d * numClusters] ; if (p == 0) continue ; for(dim = 0; dim < dimension; dim++) { TYPE diff = data[i_d*dimension + dim] - means[i_cl*dimension + dim] ; diff *= sqrtInvSigma[i_cl*dimension + dim] ; *(uk + dim) += p * diff ; *(vk + dim) += p * (diff * diff - 1); } } uprefix = 1/(numData*sqrt(priors[i_cl])); vprefix = 1/(numData*sqrt(2*priors[i_cl])); for(dim = 0; dim < dimension; dim++) { *(uk + dim) = *(uk + dim) * uprefix; *(vk + dim) = *(vk + dim) * vprefix; } } vl_free(posteriors); vl_free(sqrtInvSigma) ; if (flags & VL_FISHER_FLAG_SQUARE_ROOT) { for(dim = 0; dim < 2 * dimension * numClusters ; dim++) { TYPE z = enc [dim] ; if (z >= 0) { enc[dim] = VL_XCAT(vl_sqrt_, SFX)(z) ; } else { enc[dim] = - VL_XCAT(vl_sqrt_, SFX)(- z) ; } } } if (flags & VL_FISHER_FLAG_NORMALIZED) { TYPE n = 0 ; for(dim = 0 ; dim < 2 * dimension * numClusters ; dim++) { TYPE z = enc [dim] ; n += z * z ; } n = VL_XCAT(vl_sqrt_, SFX)(n) ; n = VL_MAX(n, 1e-12) ; for(dim = 0 ; dim < 2 * dimension * numClusters ; dim++) { enc[dim] /= n ; } } } /* VL_FISHER_INSTANTIATING */ #else #ifndef __DOXYGEN__ #define FLT VL_TYPE_FLOAT #define TYPE float #define SFX f #define VL_FISHER_INSTANTIATING #include "fisher.c" #define FLT VL_TYPE_DOUBLE #define TYPE double #define SFX d #define VL_FISHER_INSTANTIATING #include "fisher.c" #endif #endif /* ================================================================ */ #ifndef VL_FISHER_INSTANTIATING /** @brief Fisher vector encoding of a set of vectors. ** @param dataType the type of the input data (::VL_TYPE_DOUBLE or ::VL_TYPE_FLOAT). ** @param enc Fisher vector (output). ** @param means Gaussian mixture means. ** @param dimension dimension of the data. ** @param numClusters number of Gaussians mixture components. ** @param covariances Gaussian mixture diagonal covariances. ** @param priors Gaussian mixture prior probabilities. ** @param data vectors to encode. ** @param numData number of vectors to encode. ** @param flags options. ** ** @a means and @a covariances have @a dimension rows and @a numCluster columns. ** @a priors is a vector of size @a numCluster. @a data has @a dimension ** rows and @a numData columns. @a enc is a vecotr of size equal ** to twice the product of @a dimension and @a numClusters. ** All these vectors and matrices have the same class, as specified ** by @a dataType. ** ** @a flag can be used to control several options: ** ::VL_FISHER_FLAG_SQUARE_ROOT, ::VL_FISHER_FLAG_NORMALIZED, ** ::VL_FISHER_FLAG_IMPROVED. ** ** @sa @ref fisher **/ VL_EXPORT void vl_fisher_encode (void * enc, vl_type dataType, void const * means, vl_size dimension, vl_size numClusters, void const * covariances, void const * priors, void const * data, vl_size numData, int flags ) { switch(dataType) { case VL_TYPE_FLOAT: _vl_fisher_encode_f ((float *) enc, (float const *) means, dimension, numClusters, (float const *) covariances, (float const *) priors, (float const *) data, numData, flags); break; case VL_TYPE_DOUBLE: _vl_fisher_encode_d ((double *) enc, (double const *) means, dimension, numClusters, (double const *) covariances, (double const *) priors, (double const *) data, numData, flags); break; default: abort(); } } #endif #undef SFX #undef TYPE #undef FLT #undef VL_FISHER_INSTANTIATING vlfeat/vl/homkermap.c0000644000175000017500000004607112237004745013531 0ustar dimadima/** @file homkermap.c ** @brief Homogeneous kernel map - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. Copyright (C) 2013 Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @file homkermap.h @page homkermap Homogeneous kernel map @author Andrea Vedaldi @tableofcontents @ref homkermap.h implements the homogeneous kernel maps introduced in @cite{vedaldi10efficient},@cite{vedaldi12efficient}. Such maps are efficient linear representations of popular kernels such as the intersection, $\chi^2$, and Jensen-Shannon ones. @section homkermap-starting Getting started The homogeneous kernel map is implemented as an object of type ::VlHomogeneousKernelMap. To use thois object, first create an instance by using ::vl_homogeneouskernelmap_new, then use ::vl_homogeneouskernelmap_evaluate_d or ::vl_homogeneouskernelmap_evaluate_f (depdening on whether the data is @c double or @c float) to compute the feature map $ \Psi(x) $. When done, dispose of the object by calling ::vl_homogeneouskernelmap_delete. @code double gamma = 1.0 ; int order = 1 ; double period = -1 ; // use default double psi [3] ; vl_size psiStride = 1 ; double x = 0.5 ; VlHomogeneousKernelMap * hom = vl_homogeneouskernelmap_new( VlHomogeneousKernelChi2, gamma, order, period, VlHomogeneousKernelMapWindowRectangular) ; vl_homogeneouskernelmap_evaluate_d(hom, psi, psiStride, x) ; vl_homogeneouskernelmap_delete(x) ; @endcode The constructor ::vl_homogeneouskernelmap_new takes the kernel type @c kernel (see ::VlHomogeneousKernelType), the homogeneity order @c gamma (use one for the standard $1$-homogeneous kernels), the approximation order @c order (usually order one is enough), the period @a period (use a negative value to use the default period), and a window type @c window (use ::VlHomogeneousKernelMapWindowRectangular if unsure). The approximation order trades off the quality and dimensionality of the approximation. The resulting feature map $ \Psi(x) $, computed by ::vl_homogeneouskernelmap_evaluate_d or ::vl_homogeneouskernelmap_evaluate_f , is 2*order+1 dimensional. The code pre-computes the map $ \Psi(x) $ for efficient evaluation. The table spans values of $ x $ in the range $[2^{-20}, 2^{8}) $. In particular, values smaller than $ 2^{-20} $ are treated as zeroes (which results in a null feature). @section homkermap-fundamentals Fundamentals The homogeneous kernel map is a finite dimensional linear approximation of homogeneous kernels, including the intersection, $\chi^2$, and Jensen-Shannon kernels. These kernels are frequently used in computer vision applications because they are particular suited to data in the format of histograms, which includes many common visual descriptors. Let $x,y \in \mathbb{R}_+$ be non-negative scalars and let $k(x,y) \in \mathbb{R}$ be an homogeneous kernel such as the $\chi^2$ and or the intersection ones: @f[ k_{\mathrm{inters}}(x,y) = \min\{x, y\}, \quad k_{\chi^2}(x,y) = 2 \frac{(x - y)^2}{x+y}. @f] For vectorial data $ \mathbf{x},\mathbf{y} \in \mathbb{R}_+^d $, the homogeneous kernels is defined as an additive combination of scalar kernels $K(\mathbf{x},\mathbf{y}) = \sum_{i=1}^d k(x_i,y_i)$. The homogeneous kernel map of order $n$ is a vector function $\Psi(x) \in \mathbb{R}^{2n+1}$ such that, for any choice of $x, y \in \mathbb{R}_+$, the following approximation holds: @f[ k(x,y) \approx \langle \Psi(x), \Psi(y) \rangle. @f] Given the feature map for the scalar case, the corresponding feature map $\Psi(\mathbf{x})$ for the vectorial case is obtained by stacking $[\Psi(x_1), \dots, \Psi(x_n)]$. Note that the stacked feature $\Psi(\mathbf{x})$ has dimension $d(2n+1)$. Using linear analysis tools (e.g. a linear support vector machine) on top of dataset that has been encoded by the homogeneous kernel map is therefore approximately equivalent to using a method based on the corresponding non-linear kernel. @subsection homkermap-overview-negative Extension to the negative reals Any positive (semi-)definite kernel $k(x,y)$ defined on the non-negative reals $x,y \in \mathbb{R}_+$ can be extended to the entire real line by using the definition: @f[ k_\pm(x,y) = \operatorname{sign}(x) \operatorname{sign}(y) k(|x|,|y|). @f] The homogeneous kernel map implements this extension by defining $\Psi_\pm(x) = \operatorname{sign}(x) \Psi(|x|)$. Note that other extensions are possible, such as @f[ k_\pm(x,y) = H(xy) \operatorname{sign}(y) k(|x|,|y|) @f] where $H$ is the Heaviside function, but may result in higher dimensional feature maps. @subsection homkermap-overview-homogeneity Homogeneity degree Any (1-)homogeneous kernel $k_1(x,y)$ can be extended to a so called $\gamma$-homgeneous kernel $k_\gamma(x,y)$ by the definition @f[ k_\gamma(x,y) = (xy)^{\frac{\gamma}{2}} \frac{k_1(x,y)}{\sqrt{xy}} @f] Smaller values of $\gamma$ enhance the kernel non-linearity and are sometimes beneficial in applications (see @cite{vedaldi10efficient},@cite{vedaldi12efficient} for details). @subsection homkermap-overview-window Windowing and period This section discusses aspects of the homogeneous kernel map which are more technical and may be skipped. The homogeneous kernel map approximation is based on periodizing the kernel; given the kernel signature @f[ \mathcal{K}(\lambda) = k(e^{\frac{\lambda}{2}}, e^{-\frac{\lambda}{2}}) @f] the homogeneous kernel map is a feature map for the windowed and periodized kernel whose signature is given by @f[ \hat{\mathcal{K}}(\lambda) = \sum_{i=-\infty}^{+\infty} \mathcal{K}(\lambda + k \Lambda) W(\lambda + k \Lambda) @f] where $W(\lambda)$ is a windowing function and $\Lambda$ is the period. This implementation of the homogeneous kernel map supports the use of a uniform window ($ W(\lambda) = 1 $) or of a rectangular window ($ W(\lambda) = \operatorname{rect}(\lambda/\Lambda) $). Note that $ \lambda = \log(y/x) $ is equal to the logarithmic ratio of the arguments of the kernel. Empirically, the rectangular window seems to have a slight edge in applications. @section homkermap-details Implementation details This implementation uses the expressions given in @cite{vedaldi10efficient},@cite{vedaldi11efficient} to compute in closed form the maps $\Psi(x)$ for the supported kernel types. For efficiency reasons, it precomputes $\Psi(x)$ for a large range of values of the argument when the homogeneous kernel map object is created. The internal table stores $\Psi(x) \in \mathbb{R}^{2n+1}$ by sampling $x\geq 0$. This uses the internal decomposition of IEEE floating point representations (@c float and @c double) in mantissa and exponent:
      x = mantissa * (2**exponent),
      minExponent <= exponent <= maxExponent,
      1 <= matnissa < 2.
    
    Each octave is further sampled in @c numSubdivisions sublevels. When the map $\Psi(x)$ is evaluated, @c x is decomposed again into exponent and mantissa to index the table. The output is obtained by bilinear interpolation from the appropriate table entries. **/ /* ---------------------------------------------------------------- */ #ifndef VL_HOMKERMAP_INSTANTIATING /* ---------------------------------------------------------------- */ #include "homkermap.h" #include "mathop.h" #include struct _VlHomogeneousKernelMap { VlHomogeneousKernelType kernelType ; double gamma ; VlHomogeneousKernelMapWindowType windowType ; vl_size order ; double period ; vl_size numSubdivisions ; double subdivision ; vl_index minExponent ; vl_index maxExponent ; double * table ; } ; /** @internal @brief Sample the kernel specturm ** @param self homogeneous kernel map. ** @param omega sampling frequency. ** @return the spectrum sampled at @a omega. **/ VL_INLINE double vl_homogeneouskernelmap_get_spectrum (VlHomogeneousKernelMap const * self, double omega) { assert (self) ; switch (self->kernelType) { case VlHomogeneousKernelIntersection: return (2.0 / VL_PI) / (1 + 4 * omega*omega) ; case VlHomogeneousKernelChi2: return 2.0 / (exp(VL_PI * omega) + exp(-VL_PI * omega)) ; case VlHomogeneousKernelJS: return (2.0 / log(4.0)) * 2.0 / (exp(VL_PI * omega) + exp(-VL_PI * omega)) / (1 + 4 * omega*omega) ; default: abort() ; } } /* helper */ VL_INLINE double sinc(double x) { if (x == 0.0) return 1.0 ; return sin(x) / x ; } /** @internal @brief Sample the smoothed kernel spectrum ** @param self homogeneous kernel map. ** @param omega sampling frequency. ** @return the spectrum sampled at @a omega after smoothing. **/ VL_INLINE double vl_homogeneouskernelmap_get_smooth_spectrum (VlHomogeneousKernelMap const * self, double omega) { double kappa_hat = 0 ; double omegap ; double epsilon = 1e-2 ; double const omegaRange = 2.0 / (self->period * epsilon) ; double const domega = 2 * omegaRange / (2 * 1024.0 + 1) ; assert (self) ; switch (self->windowType) { case VlHomogeneousKernelMapWindowUniform: kappa_hat = vl_homogeneouskernelmap_get_spectrum(self, omega) ; break ; case VlHomogeneousKernelMapWindowRectangular: for (omegap = - omegaRange ; omegap <= omegaRange ; omegap += domega) { double win = sinc((self->period/2.0) * omegap) ; win *= (self->period/(2.0*VL_PI)) ; kappa_hat += win * vl_homogeneouskernelmap_get_spectrum(self, omegap + omega) ; } kappa_hat *= domega ; /* project on the postivie orthant (see PAMI) */ kappa_hat = VL_MAX(kappa_hat, 0.0) ; break ; default: abort() ; } return kappa_hat ; } /* ---------------------------------------------------------------- */ /* Constructors and destructors */ /* ---------------------------------------------------------------- */ /** @brief Create a new homgeneous kernel map ** @param kernelType type of homogeneous kernel. ** @param gamma kernel homogeneity degree. ** @param order approximation order. ** @param period kernel period. ** @param windowType type of window used to truncate the kernel. ** @return the new homogeneous kernel map. ** ** The function intializes a new homogeneous kernel map for the ** specified kernel type, homogeneity degree, approximation order, ** period, and truncation window. See @ref homkermap-fundamentals for ** details. ** ** The homogeneity degree @c gamma must be positive (the standard ** kernels are obtained by setting @c gamma to 1). When unsure, set ** @c windowType to ::VlHomogeneousKernelMapWindowRectangular. The @c ** period should be non-negative; specifying a negative or null value ** causes the function to switch to a default value. ** ** The function returns @c NULL if there is not enough free memory. **/ VlHomogeneousKernelMap * vl_homogeneouskernelmap_new (VlHomogeneousKernelType kernelType, double gamma, vl_size order, double period, VlHomogeneousKernelMapWindowType windowType) { int tableWidth, tableHeight ; VlHomogeneousKernelMap * self = vl_malloc(sizeof(VlHomogeneousKernelMap)) ; if (! self) return NULL ; assert(gamma > 0) ; assert(kernelType == VlHomogeneousKernelIntersection || kernelType == VlHomogeneousKernelChi2 || kernelType == VlHomogeneousKernelJS) ; assert(windowType == VlHomogeneousKernelMapWindowUniform || windowType == VlHomogeneousKernelMapWindowRectangular) ; if (period < 0) { switch (windowType) { case VlHomogeneousKernelMapWindowUniform: switch (kernelType) { case VlHomogeneousKernelChi2: period = 5.86 * sqrt(order + 0) + 3.65 ; break ; case VlHomogeneousKernelJS: period = 6.64 * sqrt(order + 0) + 7.24 ; break ; case VlHomogeneousKernelIntersection: period = 2.38 * log(order + 0.8) + 5.6 ; break ; } break ; case VlHomogeneousKernelMapWindowRectangular: switch (kernelType) { case VlHomogeneousKernelChi2: period = 8.80 * sqrt(order + 4.44) - 12.6 ; break ; case VlHomogeneousKernelJS: period = 9.63 * sqrt(order + 1.00) - 2.93; break ; case VlHomogeneousKernelIntersection: period = 2.00 * log(order + 0.99) + 3.52 ; break ; } break ; } period = VL_MAX(period, 1.0) ; } self->kernelType = kernelType ; self->windowType = windowType ; self->gamma = gamma ; self->order = order ; self->period = period ; self->numSubdivisions = 8 + 8*order ; self->subdivision = 1.0 / self->numSubdivisions ; self->minExponent = -20 ; self->maxExponent = 8 ; tableHeight = (int) (2*self->order + 1) ; tableWidth = (int) (self->numSubdivisions * (self->maxExponent - self->minExponent + 1)) ; self->table = vl_malloc (sizeof(double) * (tableHeight * tableWidth + 2*(1+self->order))) ; if (! self->table) { vl_free(self) ; return NULL ; } { vl_index exponent ; vl_uindex i, j ; double * tablep = self->table ; double * kappa = self->table + tableHeight * tableWidth ; double * freq = kappa + (1+self->order) ; double L = 2.0 * VL_PI / self->period ; /* precompute the sampled periodicized spectrum */ j = 0 ; i = 0 ; while (i <= self->order) { freq[i] = j ; kappa[i] = vl_homogeneouskernelmap_get_smooth_spectrum(self, j * L) ; ++ j ; if (kappa[i] > 0 || j >= 3*i) ++ i ; } /* fill table */ for (exponent = self->minExponent ; exponent <= self->maxExponent ; ++ exponent) { double x, Lxgamma, Llogx, xgamma ; double sqrt2kappaLxgamma ; double mantissa = 1.0 ; for (i = 0 ; i < self->numSubdivisions ; ++i, mantissa += self->subdivision) { x = ldexp(mantissa, (int)exponent) ; xgamma = pow(x, self->gamma) ; Lxgamma = L * xgamma ; Llogx = L * log(x) ; *tablep++ = sqrt(Lxgamma * kappa[0]) ; for (j = 1 ; j <= self->order ; ++j) { sqrt2kappaLxgamma = sqrt(2.0 * Lxgamma * kappa[j]) ; *tablep++ = sqrt2kappaLxgamma * cos(freq[j] * Llogx) ; *tablep++ = sqrt2kappaLxgamma * sin(freq[j] * Llogx) ; } } /* next mantissa */ } /* next exponent */ } return self ; } /** @brief Delete an object instance. ** @param self object. ** The function deletes the specified map object. **/ void vl_homogeneouskernelmap_delete (VlHomogeneousKernelMap * self) { vl_free(self->table) ; self->table = NULL ; vl_free(self) ; } /* ---------------------------------------------------------------- */ /* Retrieve data and parameters */ /* ---------------------------------------------------------------- */ /** @brief Get the map order. ** @param self object. ** @return the map order. **/ vl_size vl_homogeneouskernelmap_get_order (VlHomogeneousKernelMap const * self) { assert(self) ; return self->order ; } /** @brief Get the map dimension. ** @param self object. ** @return the map dimension (2 @c order +1). **/ vl_size vl_homogeneouskernelmap_get_dimension (VlHomogeneousKernelMap const * self) { assert(self) ; return 2 * self->order + 1 ; } /** @brief Get the kernel type. ** @param self object. ** @return kernel type. **/ VlHomogeneousKernelType vl_homogeneouskernelmap_get_kernel_type (VlHomogeneousKernelMap const * self) { assert(self) ; return self->kernelType ; } /** @brief Get the window type. ** @param self object. ** @return window type. **/ VlHomogeneousKernelMapWindowType vl_homogeneouskernelmap_get_window_type (VlHomogeneousKernelMap const * self) { assert(self) ; return self->windowType ; } /* ---------------------------------------------------------------- */ /* Process data */ /* ---------------------------------------------------------------- */ /** @fn ::vl_homogeneouskernelmap_evaluate_d(VlHomogeneousKernelMap const*,double*,vl_size,double) ** @brief Evaluate map ** @param self map object. ** @param destination output buffer. ** @param stride stride of the output buffer. ** @param x value to expand. ** ** The function evaluates the feature map on @a x and stores the ** resulting 2*order+1 dimensional vector to ** @a destination[0], @a destination[stride], @a destination[2*stride], .... **/ /** @fn ::vl_homogeneouskernelmap_evaluate_f(VlHomogeneousKernelMap const*,float*,vl_size,double) ** @copydetails ::vl_homogeneouskernelmap_evaluate_d(VlHomogeneousKernelMap const*,double*,vl_size,double) **/ #define FLT VL_TYPE_FLOAT #define VL_HOMKERMAP_INSTANTIATING #include "homkermap.c" #define FLT VL_TYPE_DOUBLE #define VL_HOMKERMAP_INSTANTIATING #include "homkermap.c" /* VL_HOMKERMAP_INSTANTIATING */ #endif /* ---------------------------------------------------------------- */ #ifdef VL_HOMKERMAP_INSTANTIATING /* ---------------------------------------------------------------- */ #include "float.th" void VL_XCAT(vl_homogeneouskernelmap_evaluate_,SFX) (VlHomogeneousKernelMap const * self, T * destination, vl_size stride, double x) { /* break value into exponent and mantissa */ int exponent ; int unsigned j ; double mantissa = frexp(x, &exponent) ; double sign = (mantissa >= 0.0) ? +1.0 : -1.0 ; mantissa *= 2*sign ; exponent -- ; if (mantissa == 0 || exponent <= self->minExponent || exponent >= self->maxExponent) { for (j = 0 ; j < 2*self->order+1 ; ++j) { *destination = (T) 0.0 ; destination += stride ; } return ; } { vl_size featureDimension = 2*self->order + 1 ; double const * v1 = self->table + (exponent - self->minExponent) * self->numSubdivisions * featureDimension ; double const * v2 ; double f1, f2 ; mantissa -= 1.0 ; while (mantissa >= self->subdivision) { mantissa -= self->subdivision ; v1 += featureDimension ; } v2 = v1 + featureDimension ; for (j = 0 ; j < featureDimension ; ++j) { f1 = *v1++ ; f2 = *v2++ ; *destination = (T) sign * ((f2 - f1) * (self->numSubdivisions * mantissa) + f1) ; destination += stride ; } } } #undef FLT #undef VL_HOMKERMAP_INSTANTIATING /* VL_HOMKERMAP_INSTANTIATING */ #endif vlfeat/vl/mathop.c0000644000175000017500000006070012237004745013031 0ustar dimadima/** @file mathop.c ** @brief Math operations - Definition ** @author Andrea Vedaldi, David Novotny **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @file mathop.h @section mathop-usage-vector-comparison Comparing vectors @ref mathop.h includes a number of functions to quickly compute distances or similarity of pairs of vector. Applications include clustering and evaluation of SVM-like classifiers. Use ::vl_get_vector_comparison_function_f or ::vl_get_vector_comparison_function_d obtain an approprite function to comprare vectors of floats or doubles, respectively. Such functions are usually optimized (for instance, on X86 platforms they use the SSE vector extension) and are several times faster than a naive implementation. ::vl_eval_vector_comparison_on_all_pairs_f and ::vl_eval_vector_comparison_on_all_pairs_d can be used to evaluate the comparison function on all pairs of one or two sequences of vectors. Let @f$ \mathbf{x} = (x_1,\dots,x_d) @f$ and @f$ \mathbf{y} = (y_1,\dots,y_d) @f$ be two vectors. The following comparison functions are supported:
    @f$ l^1 @f$ ::VlDistanceL1 @f$ \sum_{i=1}^d |x_i - y_i| @f$ l1 distance (squared intersection metric)
    @f$ l^2 @f$ ::VlDistanceL2 @f$\sum_{i=1}^d (x_i - y_i)^2@f$ Squared Euclidean disance
    @f$ \chi^2 @f$ ::VlDistanceChi2 @f$\sum_{i=1}^d \frac{(x_i - y_i)^2}{x_i + y_i}@f$ Squared chi-square distance
    - ::VlDistanceHellinger @f$\sum_{i=1}^d (\sqrt{x_i} - \sqrt{y_i})^2@f$ Squared Hellinger's distance
    - ::VlDistanceJS @f$ \sum_{i=1}^d \left( x_i \log\frac{2x_i}{x_i+y_i} + y_i \log\frac{2y_i}{x_i+y_i} \right) @f$ Squared Jensen-Shannon distance
    @f$ l^1 @f$ ::VlKernelL1 @f$ \sum_{i=1}^d \min\{ x_i, y_i \} @f$ intersection kernel
    @f$ l^2 @f$ ::VlKernelL2 @f$\sum_{i=1}^d x_iy_i @f$ linear kernel
    @f$ \chi^2 @f$ ::VlKernelChi2 @f$\sum_{i=1}^d 2 \frac{x_iy_i}{x_i + y_i}@f$ chi-square kernel
    - ::VlKernelHellinger @f$\sum_{i=1}^d 2 \sqrt{x_i y_i}@f$ Hellinger's kernel (Bhattacharya coefficient)
    - ::VlKernelJS @f$ \sum_{i=1}^d \left( \frac{x_i}{2} \log_2\frac{x_i+y_i}{x_i} + \frac{y_i}{2} \log_2\frac{x_i+y_i}{y_i} \right) @f$ Jensen-Shannon kernel
    @remark The definitions have been choosen so that corresponding kernels and distances are related by the equation: @f[ d^2(\mathbf{x},\mathbf{y}) = k(\mathbf{x},\mathbf{x}) +k(\mathbf{y},\mathbf{y}) -k(\mathbf{x},\mathbf{y}) -k(\mathbf{y},\mathbf{x}) @f] This means that each of these distances can be interpreted as a squared distance or metric in the corresponding reproducing kernel Hilbert space. Notice in particular that the @f$ l^1 @f$ or Manhattan distance is also a squared distance in this sense. **/ /** @fn vl_get_vector_comparison_function_f(VlVectorComparisonType) ** ** @brief Get vector comparison function from comparison type ** @param type vector comparison type. ** @return comparison function. **/ /** @fn vl_get_vector_comparison_function_d(VlVectorComparisonType) ** @brief Get vector comparison function from comparison type ** @sa vl_get_vector_comparison_function_f **/ /** @fn vl_eval_vector_comparison_on_all_pairs_f(float*,vl_size, ** float const*,vl_size,float const*,vl_size,VlFloatVectorComparisonFunction) ** ** @brief Evaluate vector comparison function on all vector pairs ** @param result comparison matrix (output). ** @param dimension number of vector components (rows of @a X and @a Y). ** @param X data matrix X. ** @param Y data matrix Y. ** @param numDataX number of vectors in @a X (columns of @a X) ** @param numDataY number of vectros in @a Y (columns of @a Y) ** @param function vector comparison function. ** ** The function evaluates @a function on all pairs of columns ** from matrices @a X and @a Y, filling a @a numDataX by @a numDataY ** matrix. ** ** If @a Y is a null pointer the function compares all columns from ** @a X with themselves. **/ /** @fn vl_eval_vector_comparison_on_all_pairs_d(double*,vl_size, ** double const*,vl_size,double const*,vl_size,VlDoubleVectorComparisonFunction) ** @brief Evaluate vector comparison function on all vector pairs ** @sa vl_eval_vector_comparison_on_all_pairs_f **/ /* ---------------------------------------------------------------- */ #ifndef VL_MATHOP_INSTANTIATING #include "mathop.h" #include "mathop_sse2.h" #include "mathop_avx.h" #include #undef FLT #define FLT VL_TYPE_FLOAT #define VL_MATHOP_INSTANTIATING #include "mathop.c" #undef FLT #define FLT VL_TYPE_DOUBLE #define VL_MATHOP_INSTANTIATING #include "mathop.c" #endif /* ---------------------------------------------------------------- */ #ifdef VL_MATHOP_INSTANTIATING #include "float.th" #undef COMPARISONFUNCTION_TYPE #undef COMPARISONFUNCTION3_TYPE #if (FLT == VL_TYPE_FLOAT) # define COMPARISONFUNCTION_TYPE VlFloatVectorComparisonFunction # define COMPARISONFUNCTION3_TYPE VlFloatVector3ComparisonFunction #else # define COMPARISONFUNCTION_TYPE VlDoubleVectorComparisonFunction # define COMPARISONFUNCTION3_TYPE VlDoubleVector3ComparisonFunction #endif /* ---------------------------------------------------------------- */ VL_EXPORT T VL_XCAT(_vl_distance_l2_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T acc = 0.0 ; while (X < X_end) { T d = *X++ - *Y++ ; acc += d * d ; } return acc ; } VL_EXPORT T VL_XCAT(_vl_distance_l1_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T acc = 0.0 ; while (X < X_end) { T d = *X++ - *Y++ ; acc += VL_MAX(d, -d) ; } return acc ; } VL_EXPORT T VL_XCAT(_vl_distance_chi2_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T acc = 0.0 ; while (X < X_end) { T a = *X++ ; T b = *Y++ ; T delta = a - b ; T denom = (a + b) ; T numer = delta * delta ; if (denom) { T ratio = numer / denom ; acc += ratio ; } } return acc ; } VL_EXPORT T VL_XCAT(_vl_distance_hellinger_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T acc = 0.0 ; while (X < X_end) { T a = *X++ ; T b = *Y++ ; #if (FLT == VL_TYPE_FLOAT) acc += a + b - 2.0 * sqrtf (a*b) ; #else acc += a + b - 2.0 * sqrt (a*b) ; #endif } return acc ; } VL_EXPORT T VL_XCAT(_vl_distance_js_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T acc = 0.0 ; while (X < X_end) { T x = *X++ ; T y = *Y++ ; if (x) acc += x - x * VL_XCAT(vl_log2_,SFX)(1 + y/x) ; if (y) acc += y - y * VL_XCAT(vl_log2_,SFX)(1 + x/y) ; } return acc ; } VL_EXPORT T VL_XCAT(_vl_kernel_l2_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T acc = 0.0 ; while (X < X_end) { T a = *X++ ; T b = *Y++ ; acc += a * b ; } return acc ; } VL_EXPORT T VL_XCAT(_vl_kernel_l1_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T acc = 0.0 ; while (X < X_end) { T a = *X++ ; T b = *Y++ ; T a_ = VL_XCAT(vl_abs_, SFX) (a) ; T b_ = VL_XCAT(vl_abs_, SFX) (b) ; acc += a_ + b_ - VL_XCAT(vl_abs_, SFX) (a - b) ; } return acc / ((T)2) ; } VL_EXPORT T VL_XCAT(_vl_kernel_chi2_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T acc = 0.0 ; while (X < X_end) { T a = *X++ ; T b = *Y++ ; T denom = (a + b) ; if (denom) { T numer = 2 * a * b ; T ratio = numer / denom ; acc += ratio ; } } return acc ; } VL_EXPORT T VL_XCAT(_vl_kernel_hellinger_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T acc = 0.0 ; while (X < X_end) { T a = *X++ ; T b = *Y++ ; #if (FLT == VL_TYPE_FLOAT) acc += sqrtf (a*b) ; #else acc += sqrt (a*b) ; #endif } return acc ; } VL_EXPORT T VL_XCAT(_vl_kernel_js_, SFX) (vl_size dimension, T const * X, T const * Y) { T const * X_end = X + dimension ; T acc = 0.0 ; while (X < X_end) { T x = *X++ ; T y = *Y++ ; if (x) acc += x * VL_XCAT(vl_log2_,SFX)(1 + y/x) ; if (y) acc += y * VL_XCAT(vl_log2_,SFX)(1 + x/y) ; } return (T)0.5 * acc ; } VL_EXPORT T VL_XCAT(_vl_distance_mahalanobis_sq_, SFX) (vl_size dimension, T const * X, T const * MU, T const * S) { T const * X_end = X + dimension ; T acc = 0.0 ; while (X < X_end) { T d = *X++ - *MU++ ; acc += d * d / (*S++) ; } return acc ; } /* ---------------------------------------------------------------- */ VL_EXPORT COMPARISONFUNCTION_TYPE VL_XCAT(vl_get_vector_comparison_function_, SFX)(VlVectorComparisonType type) { COMPARISONFUNCTION_TYPE function = 0 ; switch (type) { case VlDistanceL2 : function = VL_XCAT(_vl_distance_l2_, SFX) ; break ; case VlDistanceL1 : function = VL_XCAT(_vl_distance_l1_, SFX) ; break ; case VlDistanceChi2 : function = VL_XCAT(_vl_distance_chi2_, SFX) ; break ; case VlDistanceHellinger : function = VL_XCAT(_vl_distance_hellinger_, SFX) ; break ; case VlDistanceJS : function = VL_XCAT(_vl_distance_js_, SFX) ; break ; case VlKernelL2 : function = VL_XCAT(_vl_kernel_l2_, SFX) ; break ; case VlKernelL1 : function = VL_XCAT(_vl_kernel_l1_, SFX) ; break ; case VlKernelChi2 : function = VL_XCAT(_vl_kernel_chi2_, SFX) ; break ; case VlKernelHellinger : function = VL_XCAT(_vl_kernel_hellinger_, SFX) ; break ; case VlKernelJS : function = VL_XCAT(_vl_kernel_js_, SFX) ; break ; default: abort() ; } #ifndef VL_DISABLE_SSE2 /* if a SSE2 implementation is available, use it */ if (vl_cpu_has_sse2() && vl_get_simd_enabled()) { switch (type) { case VlDistanceL2 : function = VL_XCAT(_vl_distance_l2_sse2_, SFX) ; break ; case VlDistanceL1 : function = VL_XCAT(_vl_distance_l1_sse2_, SFX) ; break ; case VlDistanceChi2 : function = VL_XCAT(_vl_distance_chi2_sse2_, SFX) ; break ; case VlKernelL2 : function = VL_XCAT(_vl_kernel_l2_sse2_, SFX) ; break ; case VlKernelL1 : function = VL_XCAT(_vl_kernel_l1_sse2_, SFX) ; break ; case VlKernelChi2 : function = VL_XCAT(_vl_kernel_chi2_sse2_, SFX) ; break ; default: break ; } } #endif #ifndef VL_DISABLE_AVX /* if an AVX implementation is available, use it */ if (vl_cpu_has_avx() && vl_get_simd_enabled()) { switch (type) { case VlDistanceL2 : function = VL_XCAT(_vl_distance_l2_avx_, SFX) ; break ; default: break ; } } #endif return function ; } /* ---------------------------------------------------------------- */ VL_EXPORT COMPARISONFUNCTION3_TYPE VL_XCAT(vl_get_vector_3_comparison_function_, SFX)(VlVectorComparisonType type) { COMPARISONFUNCTION3_TYPE function = 0 ; switch (type) { case VlDistanceMahalanobis : function = VL_XCAT(_vl_distance_mahalanobis_sq_, SFX) ; break ; default: abort() ; } #ifndef VL_DISABLE_SSE2 /* if a SSE2 implementation is available, use it */ if (vl_cpu_has_sse2() && vl_get_simd_enabled()) { switch (type) { case VlDistanceMahalanobis : function = VL_XCAT(_vl_distance_mahalanobis_sq_sse2_, SFX) ; break ; default: break ; } } #endif #ifndef VL_DISABLE_AVX /* if an AVX implementation is available, use it */ if (vl_cpu_has_avx() && vl_get_simd_enabled()) { switch (type) { case VlDistanceMahalanobis : function = VL_XCAT(_vl_distance_mahalanobis_sq_avx_, SFX) ; break ; default: break ; } } #endif return function ; } /* ---------------------------------------------------------------- */ VL_EXPORT void VL_XCAT(vl_eval_vector_comparison_on_all_pairs_, SFX) (T * result, vl_size dimension, T const * X, vl_size numDataX, T const * Y, vl_size numDataY, COMPARISONFUNCTION_TYPE function) { vl_uindex xi ; vl_uindex yi ; if (dimension == 0) return ; if (numDataX == 0) return ; assert (X) ; if (Y) { if (numDataY == 0) return ; for (yi = 0 ; yi < numDataY ; ++ yi) { for (xi = 0 ; xi < numDataX ; ++ xi) { *result++ = (*function)(dimension, X, Y) ; X += dimension ; } X -= dimension * numDataX ; Y += dimension ; } } else { T * resultTransp = result ; Y = X ; for (yi = 0 ; yi < numDataX ; ++ yi) { for (xi = 0 ; xi <= yi ; ++ xi) { T z = (*function)(dimension, X, Y) ; X += dimension ; *result = z ; *resultTransp = z ; result += 1 ; resultTransp += numDataX ; } X -= dimension * (yi + 1) ; Y += dimension ; result += numDataX - (yi + 1) ; resultTransp += 1 - (yi + 1) * numDataX ; } } } /* VL_MATHOP_INSTANTIATING */ #endif /* ---------------------------------------------------------------- */ /* Numerical analysis */ /* ---------------------------------------------------------------- */ #ifndef VL_MATHOP_INSTANTIATING /** @brief SVD of a 2x2 real matrix ** @param S 2x2 real diagonal matrix of the singular values (out). ** @param U first 2x2 real orthonormal matrix (out). ** @param V second 2x2 real orthonormal matrix (out). ** @param M 2x2 matrix. ** ** The function comptues the SVD decomposition of the 2x2 ** real matrix @f$ M @f$: ** @f[ ** M = U \operatorname S V^\top ** @f] ** where @f$ U @f$ and @f$ V @f$ are real orthonormal matrices ** and @f$ S @f$ is the diagonal matrix of the singular values ** in decreasing order. ** ** @par Algorithm ** ** The fist step is to find rotation matrices @f$ U_1 @f$ and ** @f$ V_1 @f$ such taht ** @f[ ** M = U_1 R V_1^\top, \quad ** U_1 = \begin{barray} c_{u1} & - s_{u1} \\ s_{u1} & c_{u1} \end{barray}, \quad ** V_1 = \begin{barray} c_{v1} & - s_{v1} \\ s_{v1} & c_{v1} \end{barray}, \quad ** R = \begin{barray} f & g \\ 0 & h \end{barray}. ** @f] ** Gives a 2x2 triangular matrix. The second step is to call ** ::vl_lapack_dlasv2 on the matrix @f$ R @f$ obtaining ** @f[ ** M = U_1 (U_2 S V_2^\top) V_2. ** @f] **/ void vl_svd2 (double* S, double *U, double *V, double const *M) { double m11 = M[0] ; double m21 = M[1] ; double m12 = M[2] ; double m22 = M[3] ; double cu1 = m11 ; double su1 = m21 ; double norm = sqrt(cu1*cu1 + su1*su1) ; double cu2, su2, cv2, sv2 ; double f, g, h ; double smin, smax ; cu1 /= norm ; su1 /= norm ; f = cu1 * m11 + su1 * m21 ; g = cu1 * m12 + su1 * m22 ; h = - su1 * m12 + cu1 * m22 ; vl_lapack_dlasv2 (&smin, &smax, &sv2, &cv2, &su2, &cu2, f, g, h) ; assert(S) ; S[0] = smax ; S[1] = 0 ; S[2] = 0 ; S[3] = smin ; if (U) { U[0] = cu2*cu1 - su2*su1 ; U[1] = su2*cu1 + cu2*su1 ; U[2] = - cu2*su1 - su2*cu1 ; U[3] = - su2*su1 + cu2*cu1 ; } if (V) { V[0] = cv2 ; V[1] = sv2 ; V[2] = - sv2 ; V[3] = cv2 ; } } /** @brief SVD of a 2x2 upper triangular matrix (LAPACK @c dlasv2 equivalent) ** @param smin smallest (in modulus) singular value (out). ** @param smax largest (in modulus) singuarl value (out). ** @param sv second component of the right singular vector of @c smax (out). ** @param cv first component of the right singular vector of @c smax (out). ** @param su second component of the left singular vector of @c smax (out). ** @param cu first component of the left singular vector of @c smax (out). ** @param f first entry of the upper triangular matrix. ** @param g second entry of the upper triangular matrix. ** @param h third entry of the upper triangular matrix. ** ** @f[ ** \begin{bmatrix} f & g \\ 0 & h \end{bmatrix} ** = ** \begin{bmatrix} cv & - sv \\ sv & cv \end{bmatrix} ** \begon{bmatrix} smax & 0 \\ 0 & smin \end{bmatrix} ** \begin{bmatrix} cv & - sv \\ sv & cv \end{bmatrix} ** @f] ** ** Z.Bai and J.Demmel, ** "Computing the Generalized Singular Value Decomposition", ** SIAM J. Sci. Comput., Vol. 14, No. 6, pp. 1464-1486, November 1993 **/ #define isign(i) ((i)<0 ? (-1) : (+1)) /* integer sign function */ #define sign(x) ((x)<0.0 ? (-1) : (+1)) /* double sign function */ void vl_lapack_dlasv2 (double *smin, double *smax, double *sv, double *cv, double *su, double *cu, double f, double g, double h) { double svt, cvt, sut, cut; /* temporary sv, cv, su, and cu */ double ft = f, gt = g, ht = h; /* temporary f, g, h */ double fa = fabs(f), ga = fabs(g), ha = fabs(h); /* |f|, |g|, and |h| */ int pmax = 1 ; /* pointer to max abs entry */ int swap = 0 ; /* is swapped */ int glarge = 0 ; /* is g very large */ int tsign ; /* tmp sign */ double fmh ; /* |f| -|h| */ double d ; /* (|f| -|h|)/|f| */ double dd ; /* d*d */ double q ; /* g/f */ double qq ; /* q*q */ double s ; /* (|f| + |h|)/|f| */ double ss ; /* s*s */ double spq ; /* sqrt(ss + qq) */ double dpq ; /* sqrt(dd + qq) */ double a ; /* (spq + dpq)/2 */ double tmp ; /* temporaries */ double tt; /* make fa >= ha */ if (fa < ha) { pmax = 3 ; tmp =ft ; ft = ht ; ht = tmp ; /* swap ft and ht */ tmp =fa ; fa = ha ; ha = tmp ; /* swap fa and ha */ swap = 1 ; } if (ga == 0.0) { /* diagonal */ *smin = ha ; *smax = fa ; /* identity matrix */ cut = 1.0 ; sut = 0.0 ; cvt = 1.0 ; svt = 0.0 ; } else { /* not diagonal */ if (ga > fa) { /* g is the largest entry */ pmax = 2 ; if ((fa / ga) < VL_EPSILON_D) { /* g is very large */ glarge = 1 ; *smax = ga ; /* 1 ulp */ if (ha > 1.0) { *smin = fa / (ga / ha) ; /* 2 ulps */ } else { *smin = (fa / ga) * ha ; /* 2 ulps */ } cut = 1.0 ; sut = ht / gt ; cvt = 1.0 ; svt = ft / gt ; } } if (glarge == 0) { /* normal case */ fmh = fa - ha ; /* 1ulp */ if (fmh == fa) { /* cope with infinite f or h */ d = 1.0 ; } else { d = fmh / fa ; /* note 0<=d<=1.0, 2 ulps */ } q = gt / ft ; /* note |q|<1/EPS, 1 ulp */ s = 2.0 - d ; /* note s>=1.0, 3 ulps */ dd = d*d ; qq = q*q ; ss = s*s ; spq = sqrt(ss + qq) ; /* note 1<=spq<=1+1/EPS, 5 ulps */ if (d == 0.0) { dpq = fabs(q) ; /* 0 ulp */ } else { dpq = sqrt(dd + qq) ; /* note 0<=dpq<=1+1/EPS, 3.5 ulps */ } a = 0.5 * (spq + dpq) ; /* note 1<=a<=1 + |q|, 6 ulps */ *smin = ha / a; /* 7 ulps */ *smax = fa * a; /* 7 ulps */ if (qq==0.0) { /* qq underflow */ if (d==0.0) { tmp = sign(ft)*2*sign(gt); /* 0ulp */ } else { tmp = gt/(sign(ft)*fmh) + q/s; /* 6 ulps */ } } else { tmp = (q/(spq + s) + q/(dpq + d))*(1.0 + a); /* 17 ulps */ } /* if qq */ tt = sqrt(tmp*tmp + 4.0) ; /* 18.5 ulps */ cvt = 2.0 / tt ; /* 19.5 ulps */ svt = tmp / tt ; /* 36.5 ulps */ cut = (cvt + svt*q) / a ; /* 46.5 ulps */ sut = (ht / ft) * svt / a ; /* 45.5 ulps */ } /* if g not large */ } /* if ga */ if (swap == 1) { *cu = svt ; *su = cvt ; *cv = sut ; *sv = cut ; } else { *cu = cut ; *su = sut ; *cv = cvt ; *sv = svt ; } /* correct the signs of smax and smin */ if (pmax==1) { tsign = sign(*cv) * sign(*cu) * sign(f) ; } if (pmax==2) { tsign = sign(*sv) * sign(*cu) * sign(g) ; } if (pmax==3) { tsign = sign(*sv) * sign(*su) * sign(h) ; } *smax = isign(tsign) * (*smax); *smin = isign(tsign * sign(f) * sign(h)) * (*smin) ; } /** @brief Solve a 3x3 linear system ** @param x result. ** @param A system matrix. ** @param b coefficients. ** ** The function computes a solution to @f$ Ax =b @f$ for a 3x3 ** matrix. **/ VL_EXPORT int vl_solve_linear_system_3 (double * x, double const * A, double const *b) { int err ; double M[3*4] ; M[0] = A[0] ; M[1] = A[1] ; M[2] = A[2] ; M[3] = A[3] ; M[4] = A[4] ; M[5] = A[5] ; M[6] = A[6] ; M[7] = A[7] ; M[8] = A[8] ; M[9] = b[0] ; M[10] = b[1] ; M[11] = b[2] ; err = vl_gaussian_elimination(M,3,4) ; x[0] = M[9] ; x[1] = M[10] ; x[2] = M[11] ; return err ; } /** @brief Solve a 2x2 linear system ** @param x result. ** @param A system matrix. ** @param b coefficients. ** ** The function computes a solution to @f$ Ax =b @f$ for a 2x2 ** matrix. **/ VL_EXPORT int vl_solve_linear_system_2 (double * x, double const * A, double const *b) { int err ; double M[2*3] ; M[0] = A[0] ; M[1] = A[1] ; M[2] = A[2] ; M[3] = A[3] ; M[4] = b[0]; M[5] = b[1] ; err = vl_gaussian_elimination(M,2,3) ; x[0] = M[4] ; x[1] = M[5] ; return err ; } /** @brief Gaussian elimination ** @param M matrix. ** @param numRows number of rows of @c M. ** @param numColumns number of columns of @c M. ** ** The function runs Gaussian elimination with pivoting ** on the matrix @a M in place. ** @c numRows must be not larger than @c numColumns. ** ** Let @f$ M = [A, b] @f$ to obtain the solution to the linear ** system @f$ Ax=b @f$ (as the last column of @c M after ** elimination). ** ** Let @f$ M = [A, I] @f$ to compute the inverse of @c A in ** a similar manner. **/ VL_EXPORT vl_bool vl_gaussian_elimination (double * A, vl_size numRows, vl_size numColumns) { vl_index i, j, ii, jj ; assert(A) ; assert(numRows <= numColumns) ; #define Aat(i,j) A[(i) + (j)*numRows] /* Gauss elimination */ for(j = 0 ; j < (signed)numRows ; ++j) { double maxa = 0 ; double maxabsa = 0 ; vl_index maxi = -1 ; double tmp ; #if 0 { vl_index iii, jjj ; for (iii = 0 ; iii < 2 ; ++iii) { for (jjj = 0 ; jjj < 3 ; ++jjj) { VL_PRINTF("%5.2g ", Aat(iii,jjj)) ; } VL_PRINTF("\n") ; } VL_PRINTF("\n") ; } #endif /* look for the maximally stable pivot */ for (i = j ; i < (signed)numRows ; ++i) { double a = Aat(i,j) ; double absa = vl_abs_d (a) ; if (absa > maxabsa) { maxa = a ; maxabsa = absa ; maxi = i ; } } i = maxi ; /* if singular give up */ if (maxabsa < 1e-10) return VL_ERR_OVERFLOW ; /* swap j-th row with i-th row and normalize j-th row */ for(jj = j ; jj < (signed)numColumns ; ++jj) { tmp = Aat(i,jj) ; Aat(i,jj) = Aat(j,jj) ; Aat(j,jj) = tmp ; Aat(j,jj) /= maxa ; } #if 0 { vl_index iii, jjj ; VL_PRINTF("after swap %d %d\n", j, i); for (iii = 0 ; iii < 2 ; ++iii) { for (jjj = 0 ; jjj < 3 ; ++jjj) { VL_PRINTF("%5.2g ", Aat(iii,jjj)) ; } VL_PRINTF("\n") ; } VL_PRINTF("\n") ; } #endif /* elimination */ for (ii = j+1 ; ii < (signed)numRows ; ++ii) { double x = Aat(ii,j) ; for (jj = j ; jj < (signed)numColumns ; ++jj) { Aat(ii,jj) -= x * Aat(j,jj) ; } } #if 0 { VL_PRINTF("after elimination\n"); vl_index iii, jjj ; for (iii = 0 ; iii < 2 ; ++iii) { for (jjj = 0 ; jjj < 3 ; ++jjj) { VL_PRINTF("%5.2g ", Aat(iii,jjj)) ; } VL_PRINTF("\n") ; } VL_PRINTF("\n") ; } #endif } /* backward substitution */ for (i = numRows - 1 ; i > 0 ; --i) { /* substitute in all rows above */ for (ii = i - 1 ; ii >= 0 ; --ii) { double x = Aat(ii,i) ; /* j = numRows */ for (j = numRows ; j < (signed)numColumns ; ++j) { Aat(ii,j) -= x * Aat(i,j) ; } } } #if 0 { VL_PRINTF("after substitution\n"); vl_index iii, jjj ; for (iii = 0 ; iii < 2 ; ++iii) { for (jjj = 0 ; jjj < 3 ; ++jjj) { VL_PRINTF("%5.2g ", Aat(iii,jjj)) ; } VL_PRINTF("\n") ; } VL_PRINTF("\n") ; } #endif return VL_ERR_OK ; } /* VL_MATHOP_INSTANTIATING */ #endif #undef VL_MATHOP_INSTANTIATING vlfeat/vl/float.th0000644000175000017500000000534012237004745013036 0ustar dimadima/** @file float.th ** @brief Float - Template ** @author Andrea Vedaldi, David Novotny **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #include "generic.h" #undef T #undef SFX #undef VSIZE #undef VSFX #undef VTYPE #undef VSIZEavx #undef VSFXavx #undef VTYPEavx #if (FLT == VL_TYPE_FLOAT) # define T float # define SFX f #elif (FLT == VL_TYPE_DOUBLE) # define T double # define SFX d #elif (FLT == VL_TYPE_UINT32) # define T vl_uint32 # define SFX ui32 #elif (FLT == VL_TYPE_INT32) # define T vl_int32 # define SFX i32 #endif #ifdef __AVX__ #if (FLT == VL_TYPE_FLOAT) # define VSIZEavx 8 # define VSFXavx s # define VTYPEavx __m256 #elif (FLT == VL_TYPE_DOUBLE) # define VSIZEavx 4 # define VSFXavx d # define VTYPEavx __m256d #endif #define VALIGNEDavx(x) (! (((vl_uintptr)(x)) & 0x1F)) #define VMULavx VL_XCAT(_mm256_mul_p, VSFX) #define VDIVavx VL_XCAT(_mm256_div_p, VSFX) #define VADDavx VL_XCAT(_mm256_add_p, VSFX) #define VHADDavx VL_XCAT(_mm_hadd_p, VSFX) #define VHADD2avx VL_XCAT(_mm256_hadd_p, VSFX) #define VSUBavx VL_XCAT(_mm256_sub_p, VSFX) #define VSTZavx VL_XCAT(_mm256_setzero_p, VSFX) #define VLD1avx VL_XCAT(_mm256_broadcast_s, VSFX) #define VLDUavx VL_XCAT(_mm256_loadu_p, VSFX) #define VST1avx VL_XCAT(_mm256_store_s, VSFX) #define VST2avx VL_XCAT(_mm256_store_p, VSFX) #define VST2Uavx VL_XCAT(_mm256_storeu_p, VSFX) #define VPERMavx VL_XCAT(_mm256_permute2f128_p, VSFX) //#define VCSTavx VL_XCAT( _mm256_castps256_ps128, VSFX) #define VCSTavx VL_XCAT5(_mm256_castp,VSFX,256_p,VSFX,128) /* __AVX__ */ #endif #ifdef __SSE2__ #if (FLT == VL_TYPE_FLOAT) # define VSIZE 4 # define VSFX s # define VTYPE __m128 #elif (FLT == VL_TYPE_DOUBLE) # define VSIZE 2 # define VSFX d # define VTYPE __m128d #endif #define VALIGNED(x) (! (((vl_uintptr)(x)) & 0xF)) #define VMAX VL_XCAT(_mm_max_p, VSFX) #define VMUL VL_XCAT(_mm_mul_p, VSFX) #define VDIV VL_XCAT(_mm_div_p, VSFX) #define VADD VL_XCAT(_mm_add_p, VSFX) #define VSUB VL_XCAT(_mm_sub_p, VSFX) #define VSTZ VL_XCAT(_mm_setzero_p, VSFX) #define VLD1 VL_XCAT(_mm_load1_p, VSFX) #define VLDU VL_XCAT(_mm_loadu_p, VSFX) #define VST1 VL_XCAT(_mm_store_s, VSFX) #define VSET1 VL_XCAT(_mm_set_s, VSFX) #define VSHU VL_XCAT(_mm_shuffle_p, VSFX) #define VNEQ VL_XCAT(_mm_cmpneq_p, VSFX) #define VAND VL_XCAT(_mm_and_p, VSFX) #define VANDN VL_XCAT(_mm_andnot_p, VSFX) #define VST2 VL_XCAT(_mm_store_p, VSFX) #define VST2U VL_XCAT(_mm_storeu_p, VSFX) /* __SSE2__ */ #endif vlfeat/vl/svmdataset.c0000644000175000017500000002755412237004745013726 0ustar dimadima/** @file svmdataset.c ** @brief SVM Dataset - Definition ** @author Daniele Perrone ** @author Andrea Vedaldi **/ /* Copyright (C) 2012 Daniele Perrone. Copyright (C) 2013 Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @file svmdataset.h @tableofcontents @author Daniele Perrone @author Andrea Vedaldi The SVM solver object ::VlSvm, supporting SVM learning in VLFeat, uses an abstraction mechanism to work on arbitrary data types. This module provides an helper object, ::VlSvmDataset, that simplify taking advantage of this functionality, supporting for example different data types and the computation of feature maps out of the box. @section svmdataset-starting Getting started As discussed in @ref svm-advanced, most linear SVM solvers, such as the ones implemented in VLFeat in @ref svm, require only two operations to be defined on the data: - *Inner product* between a data point $\bx$ and the model vector $\bw$. This is implemented by a function of type ::VlSvmInnerProductFunction. - *Accumulation* of a dataobint $\bx$ to the model vector $\bw$: $\bw \leftarrow \bw + \alpha \bx$. This is implemented by a function of the type ::VlSvmAccumulateFunction . The SVM solver needs to know nothing about the data once these two operations are defined. These functions can do any number of things, such as supporting different formats for the data (dense or sparse, float or double), computing feature maps, or expanding compressed representations such as Product Quantization. VLFeat provides the helper object ::VlSvmDataset to support some of these functionalities out of the box (it is important to remark that its use with the SVM solver ::VlSvm is entirely optional). Presently, ::VlSvmDataset supports: - @c float and @c double dense arrays. - The on-the-fly application of the homogeneous kernel map to implement additive non-linear kernels (see @ref homkermap). For example, to learn a linear SVM on SINGLE data: @code int main() { vl_size const numData = 4 ; vl_size const dimension = 2 ; single x [dimension * numData] = { 0.0, -0.5, 0.6, -0.3, 0.0, 0.5, 0.6, 0.0} ; double y [numData] = {1, 1, -1, 1} ; double lambda = 0.01; double * const model ; double bias ; VlSvmDataset * dataset = vl_svmdataset_new (VL_TYPE_SINGLE, x, dimension, numData) ; VlSvm * svm = vl_svm_new_with_dataset (VlSvmSolverSgd, dataset, y, lambda) ; vl_svm_train(svm) ; model = vl_svm_get_model(svm) ; bias = vl_svm_get_bias(svm) ; printf("model w = [ %f , %f ] , bias b = %f \n", model[0], model[1], bias); vl_svm_delete(svm) ; vl_svmdataset_delete(dataset) ; return 0; } @endcode **/ /* ---------------------------------------------------------------- */ #ifndef VL_SVMDATASET_INSTANTIATING /* ---------------------------------------------------------------- */ #include "svmdataset.h" #include #include struct VlSvmDataset_ { vl_type dataType ; /**< Data type. */ void * data ; /**< Pointer to data. */ vl_size numData ; /**< Number of wrapped data. */ vl_size dimension ; /**< Data point dimension. */ VlHomogeneousKernelMap * hom ; /**< Homogeneous kernel map (optional). */ void * homBuffer ; /**< Homogeneous kernel map buffer. */ vl_size homDimension ; /**< Homogeneous kernel map dimension. */ } ; /* templetized parts of the implementation */ #define FLT VL_TYPE_FLOAT #define VL_SVMDATASET_INSTANTIATING #include "svmdataset.c" #define FLT VL_TYPE_DOUBLE #define VL_SVMDATASET_INSTANTIATING #include "svmdataset.c" /** @brief Create a new object wrapping a dataset. ** @param dataType of data (@c float and @c double supported). ** @param data pointer to the data. ** @param dimension the dimension of a data vector. ** @param numData number of wrapped data vectors. ** @return new object. ** ** The function allocates and returns a new SVM dataset object ** wrapping the data pointed by @a data. Note that no copy is made ** of data, so the caller should keep the data allocated as the object exists. ** ** @sa ::vl_svmdataset_delete **/ VlSvmDataset* vl_svmdataset_new (vl_type dataType, void *data, vl_size dimension, vl_size numData) { VlSvmDataset * self ; assert(dataType == VL_TYPE_DOUBLE || dataType == VL_TYPE_FLOAT) ; assert(data) ; self = vl_calloc(1, sizeof(VlSvmDataset)) ; if (self == NULL) return NULL ; self->dataType = dataType ; self->data = data ; self->dimension = dimension ; self->numData = numData ; self->hom = NULL ; self->homBuffer = NULL ; return self ; } /** @brief Delete the object. ** @param self object to delete. ** ** The function frees the resources allocated by ** ::vl_svmdataset_new(). Notice that the wrapped data will *not* ** be freed as it is not owned by the object. **/ void vl_svmdataset_delete (VlSvmDataset *self) { if (self->homBuffer) { vl_free(self->homBuffer) ; self->homBuffer = 0 ; } vl_free (self) ; } /** @brief Get the wrapped data. ** @param self object. ** @return a pointer to the wrapped data. **/ void* vl_svmdataset_get_data (VlSvmDataset const *self) { return self->data ; } /** @brief Get the number of wrapped data elements. ** @param self object. ** @return number of wrapped data elements. **/ vl_size vl_svmdataset_get_num_data (VlSvmDataset const *self) { return self->numData ; } /** @brief Get the dimension of the wrapped data. ** @param self object. ** @return dimension of the wrapped data. **/ vl_size vl_svmdataset_get_dimension (VlSvmDataset const *self) { if (self->hom) { return self->dimension * vl_homogeneouskernelmap_get_dimension(self->hom) ; } return self->dimension ; } /** @brief Get the homogeneous kernel map object. ** @param self object. ** @return homogenoeus kernel map object (or @c NULL if any). **/ VlHomogeneousKernelMap * vl_svmdataset_get_homogeneous_kernel_map (VlSvmDataset const *self) { assert(self) ; return self->hom ; } /** @brief Set the homogeneous kernel map object. ** @param self object. ** @param hom homogeneous kernel map object to use. ** ** After changing the kernel map, the inner product and accumulator ** function should be queried again (::vl_svmdataset_get_inner_product_function ** adn ::vl_svmdataset_get_accumulate_function). ** ** Set this to @c NULL to avoid using a kernel map. ** ** Note that this does *not* transfer the ownership of the object ** to the function. Furthermore, ::VlSvmDataset holds to the ** object until it is destroyed or the object is replaced or removed ** by calling this function again. **/ void vl_svmdataset_set_homogeneous_kernel_map (VlSvmDataset * self, VlHomogeneousKernelMap * hom) { assert(self) ; self->hom = hom ; self->homDimension = 0 ; if (self->homBuffer) { vl_free (self->homBuffer) ; self->homBuffer = 0 ; } if (self->hom) { self->homDimension = vl_homogeneouskernelmap_get_dimension(self->hom) ; self->homBuffer = vl_calloc(self->homDimension, vl_get_type_size(self->dataType)) ; } } /** @brief Get the accumulate function ** @param self object. ** @return a pointer to the accumulate function to use with this data. **/ VlSvmAccumulateFunction vl_svmdataset_get_accumulate_function(VlSvmDataset const *self) { if (self->hom == NULL) { switch (self->dataType) { case VL_TYPE_FLOAT: return (VlSvmAccumulateFunction) vl_svmdataset_accumulate_f ; break ; case VL_TYPE_DOUBLE: return (VlSvmAccumulateFunction) vl_svmdataset_accumulate_d ; break ; } } else { switch (self->dataType) { case VL_TYPE_FLOAT: return (VlSvmAccumulateFunction) vl_svmdataset_accumulate_hom_f ; break ; case VL_TYPE_DOUBLE: return (VlSvmAccumulateFunction) vl_svmdataset_accumulate_hom_d ; break ; } } assert(0) ; return NULL ; } /** @brief Get the inner product function. ** @param self object. ** @return a pointer to the inner product function to use with this data. **/ VlSvmInnerProductFunction vl_svmdataset_get_inner_product_function (VlSvmDataset const *self) { if (self->hom == NULL) { switch (self->dataType) { case VL_TYPE_FLOAT: return (VlSvmInnerProductFunction) _vl_svmdataset_inner_product_f ; break ; case VL_TYPE_DOUBLE: return (VlSvmInnerProductFunction) _vl_svmdataset_inner_product_d ; break ; default: assert(0) ; } } else { switch (self->dataType) { case VL_TYPE_FLOAT: return (VlSvmInnerProductFunction) _vl_svmdataset_inner_product_hom_f ; break ; case VL_TYPE_DOUBLE: return (VlSvmInnerProductFunction) _vl_svmdataset_inner_product_hom_d ; break ; default: assert(0) ; } } return NULL; } /* VL_SVMDATASET_INSTANTIATING */ #endif /* ---------------------------------------------------------------- */ #ifdef VL_SVMDATASET_INSTANTIATING /* ---------------------------------------------------------------- */ #include "float.th" double VL_XCAT(_vl_svmdataset_inner_product_,SFX) (VlSvmDataset const *self, vl_uindex element, double const *model) { double product = 0 ; T* data = ((T*)self->data) + self->dimension * element ; T* end = data + self->dimension ; while (data != end) { product += (*data++) * (*model++) ; } return product ; } void VL_XCAT(vl_svmdataset_accumulate_,SFX)(VlSvmDataset const *self, vl_uindex element, double *model, const double multiplier) { T* data = ((T*)self->data) + self->dimension * element ; T* end = data + self->dimension ; while (data != end) { *model += (*data++) * multiplier ; model++ ; } } double VL_XCAT(_vl_svmdataset_inner_product_hom_,SFX) (VlSvmDataset const *self, vl_uindex element, double const *model) { double product = 0 ; T* data = ((T*)self->data) + self->dimension * element ; T* end = data + self->dimension ; T* bufEnd = ((T*)self->homBuffer)+ self->homDimension ; while (data != end) { /* TODO: zeros in data could be optimized by skipping over them */ T* buf = self->homBuffer ; VL_XCAT(vl_homogeneouskernelmap_evaluate_,SFX)(self->hom, self->homBuffer, 1, (*data++)) ; while (buf != bufEnd) { product += (*buf++) * (*model++) ; } } return product ; } void VL_XCAT(vl_svmdataset_accumulate_hom_,SFX)(VlSvmDataset const *self, vl_uindex element, double *model, const double multiplier) { T* data = ((T*)self->data) + self->dimension * element ; T* end = data + self->dimension ; T* bufEnd = ((T*)self->homBuffer)+ self->homDimension ; while (data != end) { /* TODO: zeros in data could be optimized by skipping over them */ T* buf = self->homBuffer ; VL_XCAT(vl_homogeneouskernelmap_evaluate_,SFX)(self->hom, self->homBuffer, 1, (*data++)) ; while (buf != bufEnd) { *model += (*buf++) * multiplier ; model++ ; } } } #undef FLT #undef VL_SVMDATASET_INSTANTIATING /* VL_SVMDATASET_INSTANTIATING */ #endif vlfeat/vl/hikmeans.h0000644000175000017500000001031612237004736013343 0ustar dimadima/** @file hikmeans.h ** @brief Hierarchical Integer K-Means Clustering ** @author Brian Fulkerson **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_HIKMEANS_H #define VL_HIKMEANS_H #include "generic.h" #include "ikmeans.h" struct _VLHIKMTree ; struct _VLHIKMNode ; /** @brief HIKM tree node ** ** The number of children @a K is not bigger than the @a K parameter ** of the HIKM tree. **/ typedef struct _VlHIKMNode { VlIKMFilt *filter ; /**< IKM filter for this node*/ struct _VlHIKMNode **children ; /**< Node children (if any) */ } VlHIKMNode ; /** @brief HIKM tree */ typedef struct _VlHIKMTree { int M ; /**< IKM: data dimensionality */ int K ; /**< IKM: K */ int max_niters ; /**< IKM: maximum # of iterations */ int method ; /**< IKM: method */ int verb ; /**< Verbosity level */ int depth ; /**< Depth of the tree */ VlHIKMNode * root; /**< Tree root node */ } VlHIKMTree ; /** @name Create and destroy ** @{ **/ VL_EXPORT VlHIKMTree *vl_hikm_new (int method) ; VL_EXPORT void vl_hikm_delete (VlHIKMTree *f) ; /** @} */ /** @name Retrieve data and parameters ** @{ **/ VL_INLINE int vl_hikm_get_ndims (VlHIKMTree const *f) ; VL_INLINE int vl_hikm_get_K (VlHIKMTree const *f) ; VL_INLINE int vl_hikm_get_depth (VlHIKMTree const *f) ; VL_INLINE int vl_hikm_get_verbosity (VlHIKMTree const *f) ; VL_INLINE int vl_hikm_get_max_niters (VlHIKMTree const *f) ; VL_INLINE VlHIKMNode const * vl_hikm_get_root (VlHIKMTree const *f) ; /** @} */ /** @name Set parameters ** @{ **/ VL_INLINE void vl_hikm_set_verbosity (VlHIKMTree *f, int verb) ; VL_INLINE void vl_hikm_set_max_niters (VlHIKMTree *f, int max_niters) ; /** @} */ /** @name Process data ** @{ **/ VL_EXPORT void vl_hikm_init (VlHIKMTree *f, int M, int K, int depth) ; VL_EXPORT void vl_hikm_train (VlHIKMTree *f, vl_uint8 const *data, int N) ; VL_EXPORT void vl_hikm_push (VlHIKMTree *f, vl_uint *asgn, vl_uint8 const *data, int N) ; /** @} */ /** ------------------------------------------------------------------ ** @brief Get data dimensionality ** @param f HIKM tree. ** @return data dimensionality. **/ VL_INLINE int vl_hikm_get_ndims (VlHIKMTree const* f) { return f-> M ; } /** ------------------------------------------------------------------ ** @brief Get K ** @param f HIKM tree. ** @return K. **/ VL_INLINE int vl_hikm_get_K (VlHIKMTree const* f) { return f-> K ; } /** ------------------------------------------------------------------ ** @brief Get depth ** @param f HIKM tree. ** @return depth. **/ VL_INLINE int vl_hikm_get_depth (VlHIKMTree const* f) { return f-> depth ; } /** ------------------------------------------------------------------ ** @brief Get verbosity level ** @param f HIKM tree. ** @return verbosity level. **/ VL_INLINE int vl_hikm_get_verbosity (VlHIKMTree const* f) { return f-> verb ; } /** ------------------------------------------------------------------ ** @brief Get maximum number of iterations ** @param f HIKM tree. ** @return maximum number of iterations. **/ VL_INLINE int vl_hikm_get_max_niters (VlHIKMTree const* f) { return f-> max_niters ; } /** ------------------------------------------------------------------ ** @brief Get maximum number of iterations ** @param f HIKM tree. ** @return maximum number of iterations. **/ VL_INLINE VlHIKMNode const * vl_hikm_get_root (VlHIKMTree const* f) { return f-> root ; } /** ------------------------------------------------------------------ ** @brief Set verbosity level ** @param f HIKM tree. ** @param verb verbosity level. **/ VL_INLINE void vl_hikm_set_verbosity (VlHIKMTree *f, int verb) { f-> verb = verb ; } /** ------------------------------------------------------------------ ** @brief Set maximum number of iterations ** @param f HIKM tree. ** @param max_niters maximum number of iterations. **/ VL_INLINE void vl_hikm_set_max_niters (VlHIKMTree *f, int max_niters) { f-> max_niters = max_niters ; } /* VL_HIKMEANS_H */ #endif vlfeat/vl/kdtree.c0000644000175000017500000010422412237004745013017 0ustar dimadima/** @file kdtree.c ** @brief KD-tree - Definition ** @author Andrea Vedaldi, David Novotny **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @page kdtree KD-trees and forests @author Andrea Vedaldi, David Novotny @ref kdtree.h implements a KD-tree object, a data structure that can efficiently index moderately dimensional vector spaces. Both best-bin-first @cite{beis97shape} and randomized KD-tree forests are implemented @cite{silpa-anan08optimised},@cite{muja09fast}. Applications include fast matching of feature descriptors. - @ref kdtree-overview - @ref kdtree-tech @section kdtree-overview Overview To create a ::VlKDForest object use ::vl_kdforest_new specifying the dimensionality of the data and the number of trees in the forest. With one tree only, the algorithm is analogous to @cite{beis97shape} (best-bin KDTree). Multiple trees correspond to the randomized KDTree forest as in @cite{silpa-anan08optimised},@cite{muja09fast}. To let the KD-tree index some data use ::vl_kdforest_build. Note that for efficiency KD-tree does not copy the data but retains a pointer to it. Therefore the data must exist (and not change) until the KD-tree is deleted. To delete the KD-tree object, use ::vl_kdforest_delete. To find the N nearest neighbors to a query point first instantiate a ::VlKDForestSearcher and then start search using a ::vl_kdforest_query with the searcher object as an argument. To set a maximum number of comparisons per query and calculate approximate nearest neighbors use ::vl_kdforest_set_max_num_comparisons. @section kdtree-tech Technical details ::VlKDForest implements the best-bin-first kd-tree of @cite{beis97shape}. Construction. Given a set of points @f$ x_1,\dots,x_n \in \mathbb{R}^d @f$, the algorithm recursively partitions the @e d dimensional Euclidean space @f$ \mathbb{R}^d @f$ into (hyper-) rectangles. Partitions are organized into a binary tree with the root corresponding to the whole space @f$ \mathbb{R}^d @f$. The algorithm refines each partition by dividing it into two halves by thresholding along a given dimension. Both the splitting dimension and the threshold are determined as a statistic of the data points contained in the partition. The splitting dimension is the one which has largest sample variance and the splitting threshold is either the sample mean or the median. Leaves are atomic partitions and they contain a list of zero or more data points (typically one). Querying. Querying amounts to finding the N data points closer to a given query point @f$ x_q \in \mathbb{R}^d @f$. This is done by branch-and-bound. A search state is an active partition (initially the root) and it is weighed by the lower bound on the distance of any point in the partition and the query point. Such a lower bound is trivial to compute because partitions are hyper-rectangles. Querying usage. As said before a user has to create an instance ::VlKDForestSearcher using ::vl_kdforest_new_searcher in order to be able to make queries. When a user wants to delete a KD-Tree all the searchers bound to the given KD-Forest are erased automatically. If a user wants to delete some of the searchers before the KD-Tree erase, he could do it using the vl_kdforest_delete_searcher method. **/ #include "kdtree.h" #include "generic.h" #include "random.h" #include "mathop.h" #include #if defined(_OPENMP) #include #endif #define VL_HEAP_prefix vl_kdforest_search_heap #define VL_HEAP_type VlKDForestSearchState #define VL_HEAP_cmp(v,x,y) (v[x].distanceLowerBound - v[y].distanceLowerBound) #include "heap-def.h" #define VL_HEAP_prefix vl_kdtree_split_heap #define VL_HEAP_type VlKDTreeSplitDimension #define VL_HEAP_cmp(v,x,y) (v[x].variance - v[y].variance) #include "heap-def.h" #define VL_HEAP_prefix vl_kdforest_neighbor_heap #define VL_HEAP_type VlKDForestNeighbor #define VL_HEAP_cmp(v,x,y) (v[y].distance - v[x].distance) #include "heap-def.h" /** ------------------------------------------------------------------ ** @internal ** @brief Allocate a new node from the tree pool **/ static vl_uindex vl_kdtree_node_new (VlKDTree * tree, vl_uindex parentIndex) { VlKDTreeNode * node = NULL ; vl_uindex nodeIndex = tree->numUsedNodes ; tree -> numUsedNodes += 1 ; assert (tree->numUsedNodes <= tree->numAllocatedNodes) ; node = tree->nodes + nodeIndex ; node -> parent = parentIndex ; node -> lowerChild = 0 ; node -> upperChild = 0 ; node -> splitDimension = 0 ; node -> splitThreshold = 0 ; return nodeIndex ; } /** ------------------------------------------------------------------ ** @internal ** @brief Compare KDTree index entries for sorting **/ VL_INLINE int vl_kdtree_compare_index_entries (void const * a, void const * b) { double delta = ((VlKDTreeDataIndexEntry const*)a) -> value - ((VlKDTreeDataIndexEntry const*)b) -> value ; if (delta < 0) return -1 ; if (delta > 0) return +1 ; return 0 ; } /** ------------------------------------------------------------------ ** @internal ** @brief Build KDTree recursively ** @param forest forest to which the tree belongs. ** @param tree tree being built. ** @param nodeIndex node to process. ** @param dataBegin begin of data for this node. ** @param dataEnd end of data for this node. ** @param depth depth of this node. **/ static void vl_kdtree_build_recursively (VlKDForest * forest, VlKDTree * tree, vl_uindex nodeIndex, vl_uindex dataBegin, vl_uindex dataEnd, unsigned int depth) { vl_uindex d, i, medianIndex, splitIndex ; VlKDTreeNode * node = tree->nodes + nodeIndex ; VlKDTreeSplitDimension * splitDimension ; /* base case: there is only one data point */ if (dataEnd - dataBegin <= 1) { if (tree->depth < depth) tree->depth = depth ; node->lowerChild = - dataBegin - 1; node->upperChild = - dataEnd - 1 ; return ; } /* compute the dimension with largest variance > 0 */ forest->splitHeapNumNodes = 0 ; for (d = 0 ; d < forest->dimension ; ++ d) { double mean = 0 ; /* unnormalized */ double secondMoment = 0 ; double variance = 0 ; vl_size numSamples = VL_KDTREE_VARIANCE_EST_NUM_SAMPLES; vl_bool useAllData = VL_FALSE; if(dataEnd - dataBegin <= VL_KDTREE_VARIANCE_EST_NUM_SAMPLES) { useAllData = VL_TRUE; numSamples = dataEnd - dataBegin; } for (i = 0; i < numSamples ; ++ i) { vl_uint32 sampleIndex; vl_index di; double datum ; if(useAllData == VL_TRUE) { sampleIndex = (vl_uint32)i; } else { sampleIndex = (vl_rand_uint32(forest->rand) % VL_KDTREE_VARIANCE_EST_NUM_SAMPLES); } sampleIndex += dataBegin; di = tree->dataIndex[sampleIndex].index ; switch(forest->dataType) { case VL_TYPE_FLOAT: datum = ((float const*)forest->data) [di * forest->dimension + d] ; break ; case VL_TYPE_DOUBLE: datum = ((double const*)forest->data) [di * forest->dimension + d] ; break ; default: abort() ; } mean += datum ; secondMoment += datum * datum ; } mean /= numSamples ; secondMoment /= numSamples ; variance = secondMoment - mean * mean ; if (variance <= 0) continue ; /* keep splitHeapSize most varying dimensions */ if (forest->splitHeapNumNodes < forest->splitHeapSize) { VlKDTreeSplitDimension * splitDimension = forest->splitHeapArray + forest->splitHeapNumNodes ; splitDimension->dimension = (unsigned int)d ; splitDimension->mean = mean ; splitDimension->variance = variance ; vl_kdtree_split_heap_push (forest->splitHeapArray, &forest->splitHeapNumNodes) ; } else { VlKDTreeSplitDimension * splitDimension = forest->splitHeapArray + 0 ; if (splitDimension->variance < variance) { splitDimension->dimension = (unsigned int)d ; splitDimension->mean = mean ; splitDimension->variance = variance ; vl_kdtree_split_heap_update (forest->splitHeapArray, forest->splitHeapNumNodes, 0) ; } } } /* additional base case: the maximum variance is equal to 0 (overlapping points) */ if (forest->splitHeapNumNodes == 0) { node->lowerChild = - dataBegin - 1 ; node->upperChild = - dataEnd - 1 ; return ; } /* toss a dice to decide the splitting dimension (variance > 0) */ splitDimension = forest->splitHeapArray + (vl_rand_uint32(forest->rand) % VL_MIN(forest->splitHeapSize, forest->splitHeapNumNodes)) ; node->splitDimension = splitDimension->dimension ; /* sort data along largest variance dimension */ for (i = dataBegin ; i < dataEnd ; ++ i) { vl_index di = tree->dataIndex[i].index ; double datum ; switch (forest->dataType) { case VL_TYPE_FLOAT: datum = ((float const*)forest->data) [di * forest->dimension + splitDimension->dimension] ; break ; case VL_TYPE_DOUBLE: datum = ((double const*)forest->data) [di * forest->dimension + splitDimension->dimension] ; break ; default: abort() ; } tree->dataIndex [i] .value = datum ; } qsort (tree->dataIndex + dataBegin, dataEnd - dataBegin, sizeof (VlKDTreeDataIndexEntry), vl_kdtree_compare_index_entries) ; /* determine split threshold */ switch (forest->thresholdingMethod) { case VL_KDTREE_MEAN : node->splitThreshold = splitDimension->mean ; for (splitIndex = dataBegin ; splitIndex < dataEnd && tree->dataIndex[splitIndex].value <= node->splitThreshold ; ++ splitIndex) ; splitIndex -= 1 ; /* If the mean does not provide a proper partition, fall back to * median. This usually happens if all points have the same * value and the zero variance test fails for numerical accuracy * reasons. In this case, also due to numerical accuracy, the * mean value can be smaller, equal, or larger than all * points. */ if (dataBegin <= splitIndex && splitIndex + 1 < dataEnd) break ; case VL_KDTREE_MEDIAN : medianIndex = (dataBegin + dataEnd - 1) / 2 ; splitIndex = medianIndex ; node -> splitThreshold = tree->dataIndex[medianIndex].value ; break ; default: abort() ; } /* divide subparts */ node->lowerChild = vl_kdtree_node_new (tree, nodeIndex) ; vl_kdtree_build_recursively (forest, tree, node->lowerChild, dataBegin, splitIndex + 1, depth + 1) ; node->upperChild = vl_kdtree_node_new (tree, nodeIndex) ; vl_kdtree_build_recursively (forest, tree, node->upperChild, splitIndex + 1, dataEnd, depth + 1) ; } /** ------------------------------------------------------------------ ** @brief Create new KDForest object ** @param dataType type of data (::VL_TYPE_FLOAT or ::VL_TYPE_DOUBLE) ** @param dimension data dimensionality. ** @param numTrees number of trees in the forest. ** @param distance type of distance norm (::VlDistanceL1 or ::VlDistanceL2). ** @return new KDForest. **/ VlKDForest * vl_kdforest_new (vl_type dataType, vl_size dimension, vl_size numTrees, VlVectorComparisonType distance) { VlKDForest * self = vl_calloc (sizeof(VlKDForest), 1) ; assert(dataType == VL_TYPE_FLOAT || dataType == VL_TYPE_DOUBLE) ; assert(dimension >= 1) ; assert(numTrees >= 1) ; self -> rand = vl_get_rand () ; self -> dataType = dataType ; self -> numData = 0 ; self -> data = 0 ; self -> dimension = dimension ; self -> numTrees = numTrees ; self -> trees = 0 ; self -> thresholdingMethod = VL_KDTREE_MEDIAN ; self -> splitHeapSize = VL_MIN(numTrees, VL_KDTREE_SPLIT_HEAP_SIZE) ; self -> splitHeapNumNodes = 0 ; self -> distance = distance; self -> maxNumNodes = 0 ; self -> numSearchers = 0 ; self -> headSearcher = 0 ; switch (self->dataType) { case VL_TYPE_FLOAT: self -> distanceFunction = (void(*)(void)) vl_get_vector_comparison_function_f (distance) ; break; case VL_TYPE_DOUBLE : self -> distanceFunction = (void(*)(void)) vl_get_vector_comparison_function_d (distance) ; break ; default : abort() ; } return self ; } /** ------------------------------------------------------------------ ** @brief Create a KDForest searcher object, used for processing queries ** @param kdforest a forest to which the queries should be pointing. ** @return KDForest searcher object. ** ** A searcher is an object attached to the forest which must be created ** before running the queries. Each query has to be invoked with the ** searcher as its argument. ** ** When using a multi-threaded approach a user should at first instantiate ** a correct number of searchers - each used in one thread. ** Then in each thread a query to the given searcher could be run. ** **/ VlKDForestSearcher * vl_kdforest_new_searcher (VlKDForest * kdforest) { VlKDForestSearcher * self = vl_calloc(sizeof(VlKDForestSearcher), 1); if(kdforest->numSearchers == 0) { kdforest->headSearcher = self; self->previous = NULL; self->next = NULL; } else { VlKDForestSearcher * lastSearcher = kdforest->headSearcher; while (1) { if(lastSearcher->next) { lastSearcher = lastSearcher->next; } else { lastSearcher->next = self; self->previous = lastSearcher; self->next = NULL; break; } } } kdforest->numSearchers++; self->forest = kdforest; self->searchHeapArray = vl_malloc (sizeof(VlKDForestSearchState) * kdforest->maxNumNodes) ; self->searchIdBook = vl_calloc (sizeof(vl_uindex), kdforest->numData) ; return self ; } /** ------------------------------------------------------------------ ** @brief Delete object ** @param self object. **/ void vl_kdforestsearcher_delete (VlKDForestSearcher * self) { if (self->previous && self->next) { self->previous->next = self->next; self->next->previous = self->previous; } else if (self->previous && !self->next) { self->previous->next = NULL; } else if (!self->previous && self->next) { self->next->previous = NULL; self->forest->headSearcher = self->next; } else { self->forest->headSearcher = NULL; } self->forest->numSearchers -- ; vl_free(self->searchHeapArray) ; vl_free(self->searchIdBook) ; vl_free(self) ; } VlKDForestSearcher * vl_kdforest_get_searcher (VlKDForest const * self, vl_uindex pos) { VlKDForestSearcher * lastSearcher = self->headSearcher ; vl_uindex i ; for(i = 0; (i < pos) & (lastSearcher != NULL) ; ++i) { lastSearcher = lastSearcher->next ; } return lastSearcher ; } /** ------------------------------------------------------------------ ** @brief Delete KDForest object ** @param self KDForest object to delete ** @sa ::vl_kdforest_new **/ void vl_kdforest_delete (VlKDForest * self) { vl_uindex ti ; VlKDForestSearcher * searcher ; while ((searcher = vl_kdforest_get_searcher(self, 0))) { vl_kdforestsearcher_delete(searcher) ; } if (self->trees) { for (ti = 0 ; ti < self->numTrees ; ++ ti) { if (self->trees[ti]) { if (self->trees[ti]->nodes) vl_free (self->trees[ti]->nodes) ; if (self->trees[ti]->dataIndex) vl_free (self->trees[ti]->dataIndex) ; vl_free (self->trees[ti]) ; } } vl_free (self->trees) ; } vl_free (self) ; } /** ------------------------------------------------------------------ ** @internal @brief Compute tree bounds recursively ** @param tree KDTree object instance. ** @param nodeIndex node index to start from. ** @param searchBounds 2 x numDimension array of bounds. **/ static void vl_kdtree_calc_bounds_recursively (VlKDTree * tree, vl_uindex nodeIndex, double * searchBounds) { VlKDTreeNode * node = tree->nodes + nodeIndex ; vl_uindex i = node->splitDimension ; double t = node->splitThreshold ; node->lowerBound = searchBounds [2 * i + 0] ; node->upperBound = searchBounds [2 * i + 1] ; //VL_PRINT("%f %f\n",node->lowerBound,node->upperBound); if (node->lowerChild > 0) { searchBounds [2 * i + 1] = t ; vl_kdtree_calc_bounds_recursively (tree, node->lowerChild, searchBounds) ; searchBounds [2 * i + 1] = node->upperBound ; } if (node->upperChild > 0) { searchBounds [2 * i + 0] = t ; vl_kdtree_calc_bounds_recursively (tree, node->upperChild, searchBounds) ; searchBounds [2 * i + 0] = node->lowerBound ; } } /** ------------------------------------------------------------------ ** @brief Build KDTree from data ** @param self KDTree object ** @param numData number of data points. ** @param data pointer to the data. ** ** The function builds the KDTree by processing the data @a data. For ** efficiency, KDTree does not copy the data, but retains a pointer to it. ** Therefore the data must survive (and not change) until the KDTree ** is deleted. **/ void vl_kdforest_build (VlKDForest * self, vl_size numData, void const * data) { vl_uindex di, ti ; vl_size maxNumNodes ; double * searchBounds; /* need to check: if alredy built, clean first */ self->data = data ; self->numData = numData ; self->trees = vl_malloc (sizeof(VlKDTree*) * self->numTrees) ; maxNumNodes = 0 ; for (ti = 0 ; ti < self->numTrees ; ++ ti) { self->trees[ti] = vl_malloc (sizeof(VlKDTree)) ; self->trees[ti]->dataIndex = vl_malloc (sizeof(VlKDTreeDataIndexEntry) * self->numData) ; for (di = 0 ; di < self->numData ; ++ di) { self->trees[ti]->dataIndex[di].index = di ; } self->trees[ti]->numUsedNodes = 0 ; /* num. nodes of a complete binary tree with numData leaves */ self->trees[ti]->numAllocatedNodes = 2 * self->numData - 1 ; self->trees[ti]->nodes = vl_malloc (sizeof(VlKDTreeNode) * self->trees[ti]->numAllocatedNodes) ; self->trees[ti]->depth = 0 ; vl_kdtree_build_recursively (self, self->trees[ti], vl_kdtree_node_new(self->trees[ti], 0), 0, self->numData, 0) ; maxNumNodes += self->trees[ti]->numUsedNodes ; } searchBounds = vl_malloc(sizeof(double) * 2 * self->dimension); for (ti = 0 ; ti < self->numTrees ; ++ ti) { double * iter = searchBounds ; double * end = iter + 2 * self->dimension ; while (iter < end) { *iter++ = - VL_INFINITY_F ; *iter++ = + VL_INFINITY_F ; } vl_kdtree_calc_bounds_recursively (self->trees[ti], 0, searchBounds) ; } vl_free(searchBounds); self -> maxNumNodes = maxNumNodes; } /** ------------------------------------------------------------------ ** @internal @brief **/ vl_uindex vl_kdforest_query_recursively (VlKDForestSearcher * searcher, VlKDTree * tree, vl_uindex nodeIndex, VlKDForestNeighbor * neighbors, vl_size numNeighbors, vl_size * numAddedNeighbors, double dist, void const * query) { VlKDTreeNode const * node = tree->nodes + nodeIndex ; vl_uindex i = node->splitDimension ; vl_index nextChild, saveChild ; double delta, saveDist ; double x ; double x1 = node->lowerBound ; double x2 = node->splitThreshold ; double x3 = node->upperBound ; VlKDForestSearchState * searchState ; searcher->searchNumRecursions ++ ; switch (searcher->forest->dataType) { case VL_TYPE_FLOAT : x = ((float const*) query)[i] ; break ; case VL_TYPE_DOUBLE : x = ((double const*) query)[i] ; break ; default : abort() ; } /* base case: this is a leaf node */ if (node->lowerChild < 0) { vl_index begin = - node->lowerChild - 1 ; vl_index end = - node->upperChild - 1 ; vl_index iter ; for (iter = begin ; iter < end && (searcher->forest->searchMaxNumComparisons == 0 || searcher->searchNumComparisons < searcher->forest->searchMaxNumComparisons) ; ++ iter) { vl_index di = tree->dataIndex [iter].index ; /* multiple KDTrees share the database points and we must avoid * adding the same point twice */ if (searcher->searchIdBook[di] == searcher->searchId) continue ; searcher->searchIdBook[di] = searcher->searchId ; /* compare the query to this point */ switch (searcher->forest->dataType) { case VL_TYPE_FLOAT: dist = ((VlFloatVectorComparisonFunction)searcher->forest->distanceFunction) (searcher->forest->dimension, ((float const *)query), ((float const*)searcher->forest->data) + di * searcher->forest->dimension) ; break ; case VL_TYPE_DOUBLE: dist = ((VlDoubleVectorComparisonFunction)searcher->forest->distanceFunction) (searcher->forest->dimension, ((double const *)query), ((double const*)searcher->forest->data) + di * searcher->forest->dimension) ; break ; default: abort() ; } searcher->searchNumComparisons += 1 ; /* see if it should be added to the result set */ if (*numAddedNeighbors < numNeighbors) { VlKDForestNeighbor * newNeighbor = neighbors + *numAddedNeighbors ; newNeighbor->index = di ; newNeighbor->distance = dist ; vl_kdforest_neighbor_heap_push (neighbors, numAddedNeighbors) ; } else { VlKDForestNeighbor * largestNeighbor = neighbors + 0 ; if (largestNeighbor->distance > dist) { largestNeighbor->index = di ; largestNeighbor->distance = dist ; vl_kdforest_neighbor_heap_update (neighbors, *numAddedNeighbors, 0) ; } } } /* next data point */ return nodeIndex ; } #if 0 assert (x1 <= x2 && x2 <= x3) ; assert (node->lowerChild >= 0) ; assert (node->upperChild >= 0) ; #endif /* * x1 x2 x3 * x (---|---] * (--x|---] * (---|x--] * (---|---] x */ delta = x - x2 ; saveDist = dist + delta*delta ; if (x <= x2) { nextChild = node->lowerChild ; saveChild = node->upperChild ; if (x <= x1) { delta = x - x1 ; saveDist -= delta*delta ; } } else { nextChild = node->upperChild ; saveChild = node->lowerChild ; if (x > x3) { delta = x - x3 ; saveDist -= delta*delta ; } } if (*numAddedNeighbors < numNeighbors || neighbors[0].distance > saveDist) { searchState = searcher->searchHeapArray + searcher->searchHeapNumNodes ; searchState->tree = tree ; searchState->nodeIndex = saveChild ; searchState->distanceLowerBound = saveDist ; vl_kdforest_search_heap_push (searcher->searchHeapArray , &searcher->searchHeapNumNodes) ; } return vl_kdforest_query_recursively (searcher, tree, nextChild, neighbors, numNeighbors, numAddedNeighbors, dist, query) ; } /** ------------------------------------------------------------------ ** @brief Query the forest ** @param selft object. ** @param neighbors list of nearest neighbors found (output). ** @param numNeighbors number of nearest neighbors to find. ** @param query query point. ** @return number of tree leaves visited. ** ** A neighbor is represented by an instance of the structure ** ::VlKDForestNeighbor. Each entry contains the index of the ** neighbor (this is an index into the KDTree data) and its distance ** to the query point. Neighbors are sorted by increasing distance. **/ vl_size vl_kdforest_query (VlKDForest * self, VlKDForestNeighbor * neighbors, vl_size numNeighbors, void const * query) { VlKDForestSearcher * searcher = vl_kdforest_get_searcher(self, 0) ; if (searcher == NULL) { searcher = vl_kdforest_new_searcher(self) ; } return vl_kdforestsearcher_query(searcher, neighbors, numNeighbors, query) ; } /** ------------------------------------------------------------------ ** @brief Query the forest ** @param self object. ** @param neighbors list of nearest neighbors found (output). ** @param numNeighbors number of nearest neighbors to find. ** @param query query point. ** @return number of tree leaves visited. ** ** A neighbor is represented by an instance of the structure ** ::VlKDForestNeighbor. Each entry contains the index of the ** neighbor (this is an index into the KDTree data) and its distance ** to the query point. Neighbors are sorted by increasing distance. **/ vl_size vl_kdforestsearcher_query (VlKDForestSearcher * self, VlKDForestNeighbor * neighbors, vl_size numNeighbors, void const * query) { vl_uindex i, ti ; vl_bool exactSearch = self->forest->searchMaxNumComparisons == 0 ; VlKDForestSearchState * searchState ; vl_size numAddedNeighbors = 0 ; assert (neighbors) ; assert (numNeighbors > 0) ; assert (query) ; /* this number is used to differentiate a query from the next */ self -> searchId += 1 ; self -> searchNumRecursions = 0 ; self->searchNumComparisons = 0 ; self->searchNumSimplifications = 0 ; /* put the root node into the search heap */ self->searchHeapNumNodes = 0 ; for (ti = 0 ; ti < self->forest->numTrees ; ++ ti) { searchState = self->searchHeapArray + self->searchHeapNumNodes ; searchState -> tree = self->forest->trees[ti] ; searchState -> nodeIndex = 0 ; searchState -> distanceLowerBound = 0 ; vl_kdforest_search_heap_push (self->searchHeapArray, &self->searchHeapNumNodes) ; } /* branch and bound */ while (exactSearch || self->searchNumComparisons < self->forest->searchMaxNumComparisons) { /* pop the next optimal search node */ VlKDForestSearchState * searchState ; /* break if search space completed */ if (self->searchHeapNumNodes == 0) { break ; } searchState = self->searchHeapArray + vl_kdforest_search_heap_pop (self->searchHeapArray, &self->searchHeapNumNodes) ; /* break if no better solution may exist */ if (numAddedNeighbors == numNeighbors && neighbors[0].distance < searchState->distanceLowerBound) { self->searchNumSimplifications ++ ; break ; } vl_kdforest_query_recursively (self, searchState->tree, searchState->nodeIndex, neighbors, numNeighbors, &numAddedNeighbors, searchState->distanceLowerBound, query) ; } /* sort neighbors by increasing distance */ for (i = numAddedNeighbors ; i < numNeighbors ; ++ i) { neighbors[i].index = -1 ; neighbors[i].distance = VL_NAN_F ; } while (numAddedNeighbors) { vl_kdforest_neighbor_heap_pop (neighbors, &numAddedNeighbors) ; } return self->searchNumComparisons ; } /** ------------------------------------------------------------------ ** @brief Run multiple queries ** @param self object. ** @param indexes assignments of points. ** @param distances distances of query points. ** @param numQueries number of query points. ** @param numNeighbors number of nearest neighbors to be found for each data point ** ** @a indexes and @a distances are @a numNeighbors by @a numQueries ** matrices containing the indexes and distances of the nearest neighbours ** for each of the @a numQueries queries @a queries. ** ** This function is similar to ::vl_kdforest_query. The main ** difference is that the function can use multiple cores to query ** large amounts of data. ** ** @sa ::vl_kdforest_query. **/ vl_size vl_kdforest_query_with_array (VlKDForest * self, vl_uint32 * indexes, vl_size numNeighbors, vl_size numQueries, void * distances, void const * queries) { vl_size numComparisons = 0; vl_type dataType = vl_kdforest_get_data_type(self) ; vl_size dimension = vl_kdforest_get_data_dimension(self) ; #ifdef _OPENMP #pragma omp parallel default(shared) num_threads(vl_get_max_threads()) #endif { vl_index qi ; vl_size thisNumComparisons = 0 ; VlKDForestSearcher * searcher ; VlKDForestNeighbor * neighbors ; #ifdef _OPENMP #pragma omp critical #endif { searcher = vl_kdforest_new_searcher(self) ; neighbors = vl_calloc (sizeof(VlKDForestNeighbor), numNeighbors) ; } #ifdef _OPENMP #pragma omp for #endif for(qi = 0 ; qi < (signed)numQueries; ++ qi) { switch (dataType) { case VL_TYPE_FLOAT: { vl_size ni; thisNumComparisons += vl_kdforestsearcher_query (searcher, neighbors, numNeighbors, (float const *) (queries) + qi * dimension) ; for (ni = 0 ; ni < numNeighbors ; ++ni) { indexes [qi*numNeighbors + ni] = (vl_uint32) neighbors[ni].index ; if (distances){ *((float*)distances + qi*numNeighbors + ni) = neighbors[ni].distance ; } } break ; } case VL_TYPE_DOUBLE: { vl_size ni; thisNumComparisons += vl_kdforestsearcher_query (searcher, neighbors, numNeighbors, (double const *) (queries) + qi * dimension) ; for (ni = 0 ; ni < numNeighbors ; ++ni) { indexes [qi*numNeighbors + ni] = (vl_uint32) neighbors[ni].index ; if (distances){ *((double*)distances + qi*numNeighbors + ni) = neighbors[ni].distance ; } } break ; } default: abort() ; } } #ifdef _OPENMP #pragma omp critical #endif { numComparisons += thisNumComparisons ; vl_kdforestsearcher_delete (searcher) ; vl_free (neighbors) ; } } return numComparisons ; } /** ------------------------------------------------------------------ ** @brief Get the number of nodes of a given tree ** @param self KDForest object. ** @param treeIndex index of the tree. ** @return number of trees. **/ vl_size vl_kdforest_get_num_nodes_of_tree (VlKDForest const * self, vl_uindex treeIndex) { assert (treeIndex < self->numTrees) ; return self->trees[treeIndex]->numUsedNodes ; } /** ------------------------------------------------------------------ ** @brief Get the detph of a given tree ** @param self KDForest object. ** @param treeIndex index of the tree. ** @return number of trees. **/ vl_size vl_kdforest_get_depth_of_tree (VlKDForest const * self, vl_uindex treeIndex) { assert (treeIndex < self->numTrees) ; return self->trees[treeIndex]->depth ; } /** ------------------------------------------------------------------ ** @brief Get the number of trees in the forest ** ** @param self KDForest object. ** @return number of trees. **/ vl_size vl_kdforest_get_num_trees (VlKDForest const * self) { return self->numTrees ; } /** ------------------------------------------------------------------ ** @brief Set the maximum number of comparisons for a search ** ** @param self KDForest object. ** @param n maximum number of leaves. ** ** This function sets the maximum number of comparisons for a ** nearest neighbor search. Setting it to 0 means unbounded comparisons. ** ** @sa ::vl_kdforest_query, ::vl_kdforest_get_max_num_comparisons. **/ void vl_kdforest_set_max_num_comparisons (VlKDForest * self, vl_size n) { self->searchMaxNumComparisons = n ; } /** ------------------------------------------------------------------ ** @brief Get the maximum number of comparisons for a search ** ** @param self KDForest object. ** @return maximum number of leaves. ** ** @sa ::vl_kdforest_set_max_num_comparisons. **/ vl_size vl_kdforest_get_max_num_comparisons (VlKDForest * self) { return self->searchMaxNumComparisons ; } /** ------------------------------------------------------------------ ** @brief Set the thresholding method ** @param self KDForest object. ** @param method one of ::VlKDTreeThresholdingMethod. ** ** @sa ::vl_kdforest_get_thresholding_method **/ void vl_kdforest_set_thresholding_method (VlKDForest * self, VlKDTreeThresholdingMethod method) { assert(method == VL_KDTREE_MEDIAN || method == VL_KDTREE_MEAN) ; self->thresholdingMethod = method ; } /** ------------------------------------------------------------------ ** @brief Get the thresholding method ** ** @param self KDForest object. ** @return thresholding method. ** ** @sa ::vl_kdforest_set_thresholding_method **/ VlKDTreeThresholdingMethod vl_kdforest_get_thresholding_method (VlKDForest const * self) { return self->thresholdingMethod ; } /** ------------------------------------------------------------------ ** @brief Get the dimension of the data ** @param self KDForest object. ** @return dimension of the data. **/ vl_size vl_kdforest_get_data_dimension (VlKDForest const * self) { return self->dimension ; } /** ------------------------------------------------------------------ ** @brief Get the data type ** @param self KDForest object. ** @return data type (one of ::VL_TYPE_FLOAT, ::VL_TYPE_DOUBLE). **/ vl_type vl_kdforest_get_data_type (VlKDForest const * self) { return self->dataType ; } /** ------------------------------------------------------------------ ** @brief Get the forest linked to the searcher ** @param self object. ** @return correspoinding KD-Forest. **/ VlKDForest * vl_kdforestsearcher_get_forest (VlKDForestSearcher const * self) { return self->forest; } vlfeat/vl/hikmeans.c0000644000175000017500000001661312237004736013344 0ustar dimadima/** @file hikmeans.c ** @brief Hierarchical Integer K-Means Clustering - Declaration ** @author Brian Fulkerson ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @file hikmeans.h ** @brief Hierarchical integer K-Means clustering ** ** Hierarchical integer K-Means clustering (HIKM) is a simple ** hierarchical version of integer K-Means (@ref ikmeans.h ** "IKM"). The algorithm recursively applies integer K-means to create ** more refined partitions of the data. ** ** Create a tree with ::vl_hikm_new() and delete it with ** ::vl_hikm_delete(). Use ::vl_hikm_train() to build the tree ** from training data and ::vl_hikm_push() to project new data down ** a HIKM tree. ** ** @section hikm-tree HIKM tree ** ** The HIKM tree is represented by a ::VlHIKMTree structure, which ** contains a tree composed of ::VlHIKMNode. Each node is an ** integer K-means filter which partitions the data into @c K ** clusters. **/ #include #include #include #include #include "hikmeans.h" /** ------------------------------------------------------------------ ** @internal ** @brief Copy a subset of the data to a buffer ** ** @param data Data ** @param ids Data labels ** @param N Number of indices ** @param M Data dimensionality ** @param id Label of data to copy ** @param N2 Number of data copied (out) ** ** @return a new buffer with a copy of the selected data. **/ vl_uint8* vl_hikm_copy_subset (vl_uint8 const * data, vl_uint * ids, int N, int M, vl_uint id, int *N2) { int i ; int count = 0; /* count how many data points with this label there are */ for (i = 0 ; i < N ; i++) if (ids[i] == id) count ++ ; *N2 = count ; /* copy each datum to the buffer */ { vl_uint8 * new_data = vl_malloc (sizeof(vl_uint8) * M * count); count = 0; for (i = 0 ; i < N ; i ++) if (ids[i] == id) { memcpy(new_data + count * M, data + i * M, sizeof(vl_uint8) * M); count ++ ; } *N2 = count ; return new_data ; } } /** ------------------------------------------------------------------ ** @brief Compute HIKM clustering. ** ** @param tree HIKM tree to initialize. ** @param data Data to cluster. ** @param N Number of data points. ** @param K Number of clusters for this node. ** @param height Tree height. ** ** @remark height cannot be smaller than 1. ** ** @return a new HIKM node representing a sub-clustering. **/ static VlHIKMNode * xmeans (VlHIKMTree *tree, vl_uint8 const *data, int N, int K, int height) { VlHIKMNode *node = vl_malloc (sizeof(VlHIKMNode)) ; vl_uint *ids = vl_malloc (sizeof(vl_uint) * N) ; node-> filter = vl_ikm_new (tree -> method) ; node-> children = (height == 1) ? 0 : vl_malloc (sizeof(VlHIKMNode*) * K) ; vl_ikm_set_max_niters (node->filter, tree->max_niters) ; vl_ikm_set_verbosity (node->filter, tree->verb - 1 ) ; vl_ikm_init_rand_data (node->filter, data, tree->M, N, K) ; vl_ikm_train (node->filter, data, N) ; vl_ikm_push (node->filter, ids, data, N) ; /* recurse for each child */ if (height > 1) { int k ; for (k = 0 ; k < K ; k ++) { int partition_N ; int partition_K ; vl_uint8 *partition ; partition = vl_hikm_copy_subset (data, ids, N, tree->M, k, &partition_N) ; partition_K = VL_MIN (K, partition_N) ; node->children [k] = xmeans (tree, partition, partition_N, partition_K, height - 1) ; vl_free (partition) ; if (tree->verb > tree->depth - height) { VL_PRINTF("hikmeans: branch at depth %d: %6.1f %% completed\n", tree->depth - height, (double) (k+1) / K * 100) ; } } } vl_free (ids) ; return node ; } /** ------------------------------------------------------------------ ** @internal ** @brief Delete node ** ** @param node to delete. ** ** The function deletes recursively @a node and all its descendent. **/ static void xdelete (VlHIKMNode *node) { if(node) { int k ; if (node->children) { for(k = 0 ; k < vl_ikm_get_K (node->filter) ; ++k) xdelete (node->children[k]) ; vl_free (node->children) ; } if (node->filter) vl_ikm_delete (node->filter) ; vl_free(node); } } /** ------------------------------------------------------------------ ** @brief New HIKM tree ** @param method clustering method. ** @return new HIKM tree. **/ VL_EXPORT VlHIKMTree * vl_hikm_new (int method) { VlHIKMTree *f = vl_malloc (sizeof(VlHIKMTree)) ; f -> M = 0 ; f -> K = 0 ; f -> max_niters = 200 ; f -> method = method ; f -> verb = 0 ; f -> depth = 0 ; f -> root = 0 ; return f ; } /** ------------------------------------------------------------------ ** @brief Delete HIKM tree ** @param f HIKM tree. **/ VL_EXPORT void vl_hikm_delete (VlHIKMTree *f) { if (f) { xdelete (f -> root) ; vl_free (f) ; } } /** ------------------------------------------------------------------ ** @brief Initialize HIKM tree ** ** @param f HIKM tree. ** @param M Data dimensionality. ** @param K Number of clusters per node. ** @param depth Tree depth. ** ** @remark @a depth cannot be smaller than 1. ** ** @return a new HIKM tree representing the clustering. **/ VL_EXPORT void vl_hikm_init (VlHIKMTree *f, int M, int K, int depth) { assert(depth > 0) ; assert(M > 0) ; assert(K > 0) ; xdelete (f -> root) ; f -> root = 0; f -> M = M ; f -> K = K ; f -> depth = depth ; } /** ------------------------------------------------------------------ ** @brief Train HIKM tree ** @param f HIKM tree. ** @param data Data to cluster. ** @param N Number of data. **/ VL_EXPORT void vl_hikm_train (VlHIKMTree *f, vl_uint8 const *data, int N) { f -> root = xmeans (f, data, N, VL_MIN(f->K, N), f->depth) ; } /** ------------------------------------------------------------------ ** @brief Project data down HIKM tree ** ** @param f HIKM tree. ** @param asgn Path down the tree (out). ** @param data Data to project. ** @param N Number of data. ** ** The function writes to @a asgn the path of the data @a data ** down the HIKM tree @a f. The parameter @a asgn must point to ** an array of @c M by @c N elements, where @c M is the depth of ** the HIKM tree and @c N is the number of data point to process. **/ VL_EXPORT void vl_hikm_push (VlHIKMTree *f, vl_uint *asgn, vl_uint8 const *data, int N) { int i, d, M = vl_hikm_get_ndims (f), depth = vl_hikm_get_depth (f) ; /* for each datum */ for(i = 0 ; i < N ; i++) { VlHIKMNode *node = f->root ; d = 0 ; while (node) { /* vl_uint best = vl_ikm_push_one (vl_ikm_get_centers (node->filter), data + i * M, M, vl_ikm_get_K (node->filter)) ; */ vl_uint best ; vl_ikm_push (node->filter, &best, data + i * M, 1) ; asgn [i*depth + d] = best ; ++ d ; if (!node->children) break ; node = node->children [best] ; } } } vlfeat/vl/imopv_sse2.c0000644000175000017500000001703412237004745013631 0ustar dimadima/** @file imopv_sse2.c ** @brief Vectorized image operations - SSE2 - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #if ! defined(VL_DISABLE_SSE2) & ! defined(__SSE2__) #error "Compiling with SSE2 enabled, but no __SSE2__ defined" #endif #if ! defined(VL_DISABLE_SSE2) #ifndef VL_IMOPV_SSE2_INSTANTIATING #include #include "imopv.h" #include "imopv_sse2.h" #define FLT VL_TYPE_FLOAT #define VL_IMOPV_SSE2_INSTANTIATING #include "imopv_sse2.c" #define FLT VL_TYPE_DOUBLE #define VL_IMOPV_SSE2_INSTANTIATING #include "imopv_sse2.c" /* ---------------------------------------------------------------- */ /* VL_IMOPV_SSE2_INSTANTIATING */ #else #include "float.th" /* ---------------------------------------------------------------- */ void VL_XCAT3(_vl_imconvcol_v, SFX, _sse2) (T* dst, vl_size dst_stride, T const* src, vl_size src_width, vl_size src_height, vl_size src_stride, T const* filt, vl_index filt_begin, vl_index filt_end, int step, unsigned int flags) { vl_index x = 0 ; vl_index y ; vl_index dheight = (src_height - 1) / step + 1 ; vl_bool use_simd = VALIGNED(src_stride) ; vl_bool transp = flags & VL_TRANSPOSE ; vl_bool zeropad = (flags & VL_PAD_MASK) == VL_PAD_BY_ZERO ; double totcol = 0 ; double simdcol = 0 ; /* let filt point to the last sample of the filter */ filt += filt_end - filt_begin ; while (x < (signed)src_width) { /* Calculate dest[x,y] = sum_p image[x,p] filt[y - p] * where supp(filt) = [filt_begin, filt_end] = [fb,fe]. * * CHUNK_A: y - fe <= p < 0 * completes VL_MAX(fe - y, 0) samples * CHUNK_B: VL_MAX(y - fe, 0) <= p < VL_MIN(y - fb, height - 1) * completes fe - VL_MAX(fb, height - y) + 1 samples * CHUNK_C: completes all samples */ T const *filti ; vl_index stop ; if ((x + VSIZE < (signed)src_width) & VALIGNED(src + x) & use_simd) { /* ---------------------------------------------- Vectorized */ for (y = 0 ; y < (signed)src_height ; y += step) { union {VTYPE v ; T x [VSIZE] ; } acc ; VTYPE v, c ; T const *srci ; acc.v = VSTZ () ; v = VSTZ() ; filti = filt ; stop = filt_end - y ; srci = src + x - stop * src_stride ; if (stop > 0) { if (zeropad) { v = VSTZ () ; } else { v = * (VTYPE*) (src + x) ; } while (filti > filt - stop) { c = VLD1 (filti--) ; acc.v = VADD (acc.v, VMUL (v, c)) ; srci += src_stride ; } } stop = filt_end - VL_MAX(filt_begin, y - (signed)src_height + 1) + 1 ; while (filti > filt - stop) { v = * (VTYPE*) srci ; c = VLD1 (filti--) ; acc.v = VADD (acc.v, VMUL (v, c)) ; srci += src_stride ; } if (zeropad) v = VSTZ () ; stop = filt_end - filt_begin + 1; while (filti > filt - stop) { c = VLD1 (filti--) ; acc.v = VADD (acc.v, VMUL (v, c)) ; } if (transp) { *dst = acc.x[0] ; dst += dst_stride ; *dst = acc.x[1] ; dst += dst_stride ; #if(VSIZE == 4) *dst = acc.x[2] ; dst += dst_stride ; *dst = acc.x[3] ; dst += dst_stride ; #endif dst += 1 * 1 - VSIZE * dst_stride ; } else { *dst = acc.x[0] ; dst += 1 ; *dst = acc.x[1] ; dst += 1 ; #if(VSIZE == 4) *dst = acc.x[2] ; dst += 1 ; *dst = acc.x[3] ; dst += 1 ; #endif dst += 1 * dst_stride - VSIZE * 1 ; } } /* next y */ if (transp) { dst += VSIZE * dst_stride - dheight * 1 ; } else { dst += VSIZE * 1 - dheight * dst_stride ; } x += VSIZE ; simdcol += VSIZE ; totcol += VSIZE ; } else { /* ------------------------------------------------- Vanilla */ for (y = 0 ; y < (signed)src_height ; y += step) { T acc = 0 ; T v = 0, c ; T const* srci ; filti = filt ; stop = filt_end - y ; srci = src + x - stop * src_stride ; if (stop > 0) { if (zeropad) { v = 0 ; } else { v = *(src + x) ; } while (filti > filt - stop) { c = *filti-- ; acc += v * c ; srci += src_stride ; } } stop = filt_end - VL_MAX(filt_begin, y - (signed)src_height + 1) + 1 ; while (filti > filt - (signed)stop) { v = *srci ; c = *filti-- ; acc += v * c ; srci += src_stride ; } if (zeropad) v = 0 ; stop = filt_end - filt_begin + 1 ; while (filti > filt - stop) { c = *filti-- ; acc += v * c ; } if (transp) { *dst = acc ; dst += 1 ; } else { *dst = acc ; dst += dst_stride ; } } /* next y */ if (transp) { dst += 1 * dst_stride - dheight * 1 ; } else { dst += 1 * 1 - dheight * dst_stride ; } x += 1 ; totcol += 1 ; } /* next x */ } } /* ---------------------------------------------------------------- */ #if 0 void VL_XCAT(_vl_imconvcoltri_v, SFX, sse2) (T* dst, int dst_stride, T const* src, int src_width, int src_height, int src_stride, int filt_size, int step, unsigned int flags) { int x = 0 ; int y ; int dheight = (src_height - 1) / step + 1 ; vl_bool use_simd = ((src_stride & ALIGNSTRIDE) == 0) && (! (flags & VL_NO_SIMD)) ; vl_bool transp = flags & VL_TRANSPOSE ; vl_bool zeropad = (flags & VL_PAD_MASK) == VL_PAD_BY_ZERO ; T * buff = vl_malloc(sizeof(T) * (src_height + filt_size)) ; #define fa (1.0 / (double) (filt_size + 1)) T scale = fa*fa*fa*fa ; buff += filt_size ; while (x < src_width) { T const *srci ; use_simd = 0 ; if ((x + VSIZE < src_width) & (((vl_ptrint)(src + x) & ALIGNPTR) == 0) & use_simd) { } else { int stridex = transp ? dst_stride : 1 ; int stridey = transp ? 1 : dst_stride ; srci = src + x + src_stride * (src_height - 1) ; /* integrate backward the column */ buff [src_height - 1] = *srci ; for (y = src_height-2 ; y >= 0 ; --y) { srci -= src_stride ; buff [y] = buff [y+1] + *srci ; } if (zeropad) { for ( ; y >= - filt_size ; --y) { buff [y] = buff [y+1] ; } } else { for ( ; y >= - filt_size ; --y) { buff [y] = buff[y+1] + *srci ; } } /* compute the filter forward */ for (y = - filt_size ; y < src_height - filt_size ; ++y) { buff [y] = buff [y] - buff [y + filt_size] ; } if (! zeropad) { for (y = src_height - filt_size ; y < src_height ; ++y) { buff [y] = buff [y] - buff [src_height-1] * (src_height - filt_size - y) ; } } /* integrate forward the column */ for (y = - filt_size + 1 ; y < src_height ; ++y) { buff [y] += buff [y - 1] ; } /* compute the filter backward */ for (y = src_height - 1 ; y >= 0 ; --y) { dst [x*stridex + y*stridey] = scale * (buff [y] - buff [y - filt_size]) ; } } /* next y */ x += 1 ; } vl_free (buff - filt_size) ; } #endif #undef FLT #undef VL_IMOPV_SSE2_INSTANTIATING #endif /* ! VL_DISABLE_SSE2 */ #endif vlfeat/vl/hog.h0000644000175000017500000000533012237004736012321 0ustar dimadima/** @file hog.h ** @brief Histogram of Oriented Gradients (@ref hog) ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_HOG_H #define VL_HOG_H #include "generic.h" enum VlHogVariant_ { VlHogVariantDalalTriggs, VlHogVariantUoctti } ; typedef enum VlHogVariant_ VlHogVariant ; struct VlHog_ { VlHogVariant variant ; vl_size dimension ; vl_size numOrientations ; vl_bool transposed ; vl_bool useBilinearOrientationAssigment ; /* left-right flip permutation */ vl_index * permutation ; /* glyphs */ float * glyphs ; vl_size glyphSize ; /* helper vectors */ float * orientationX ; float * orientationY ; /* buffers */ float * hog ; float * hogNorm ; vl_size hogWidth ; vl_size hogHeight ; } ; typedef struct VlHog_ VlHog ; VL_EXPORT VlHog * vl_hog_new (VlHogVariant variant, vl_size numOrientations, vl_bool transposed) ; VL_EXPORT void vl_hog_delete (VlHog * self) ; VL_EXPORT void vl_hog_process (VlHog * self, float * features, float const * image, vl_size width, vl_size height, vl_size numChannels, vl_size cellSize) ; VL_EXPORT void vl_hog_put_image (VlHog * self, float const * image, vl_size width, vl_size height, vl_size numChannels, vl_size cellSize) ; VL_EXPORT void vl_hog_put_polar_field (VlHog * self, float const * modulus, float const * angle, vl_bool directed, vl_size width, vl_size height, vl_size cellSize) ; VL_EXPORT void vl_hog_extract (VlHog * self, float * features) ; VL_EXPORT vl_size vl_hog_get_height (VlHog * self) ; VL_EXPORT vl_size vl_hog_get_width (VlHog * self) ; VL_EXPORT void vl_hog_render (VlHog const * self, float * image, float const * features, vl_size width, vl_size height) ; VL_EXPORT vl_size vl_hog_get_dimension (VlHog const * self) ; VL_EXPORT vl_index const * vl_hog_get_permutation (VlHog const * self) ; VL_EXPORT vl_size vl_hog_get_glyph_size (VlHog const * self) ; VL_EXPORT vl_bool vl_hog_get_use_bilinear_orientation_assignments (VlHog const * self) ; VL_EXPORT void vl_hog_set_use_bilinear_orientation_assignments (VlHog * self, vl_bool x) ; /* VL_HOG_H */ #endif vlfeat/vl/array.h0000644000175000017500000000513612237004736012666 0ustar dimadima/** @file array.h ** @brief Array - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_ARRAY_H #define VL_ARRAY_H #include "generic.h" /** @brief Maximum number of array dimensions */ #define VL_ARRAY_MAX_NUM_DIMENSIONS 16 /** @brief Numeric array */ typedef struct _VlArray { vl_type type ; vl_bool isEnvelope ; vl_bool isSparse ; vl_size numDimensions ; vl_size dimensions [VL_ARRAY_MAX_NUM_DIMENSIONS] ; void * data ; void * rowPointers ; void * columnPointers ; } VlArray ; /** @name Get data and parameters ** @{ */ /** @brief Get number of dimensions ** @param self array. ** @return number of dimensions. **/ VL_INLINE vl_size vl_array_get_num_dimensions (VlArray const * self) { return self->numDimensions ; } /** @brief Get dimensions ** @param self array. ** @return dimensions. **/ VL_INLINE vl_size const * vl_array_get_dimensions (VlArray const * self) { return self->dimensions ; } /** @brief Get data ** @param self array. ** @return data. **/ VL_INLINE void * vl_array_get_data (VlArray const * self) { return self->data; } /** @brief Get type ** @param self array. ** @return type. **/ VL_INLINE vl_type vl_array_get_data_type (VlArray const * self) { return self->type ; } VL_EXPORT vl_size vl_array_get_num_elements (VlArray const * self) ; /** @{ */ /** @name Constructing and destroying ** @{ */ VL_EXPORT VlArray * vl_array_init (VlArray * self, vl_type type, vl_size numDimension, vl_size const * dimensions) ; VL_EXPORT VlArray * vl_array_init_envelope (VlArray *self, void * data, vl_type type, vl_size numDimension, vl_size const * dimensions) ; VL_EXPORT VlArray * vl_array_init_matrix (VlArray * self, vl_type type, vl_size numRows, vl_size numColumns) ; VL_EXPORT VlArray * vl_array_init_matrix_envelope (VlArray * self, void * data, vl_type type, vl_size numRows, vl_size numColumns) ; VL_EXPORT VlArray * vl_array_new (vl_type type, vl_size numDimension, vl_size const * dimensions) ; VL_EXPORT VlArray * vl_array_new_envelope (void * data, vl_type type, vl_size numDimension, vl_size const * dimensions) ; VL_EXPORT VlArray * vl_array_new_matrix (vl_type type, vl_size numRows, vl_size numColumns) ; VL_EXPORT VlArray * vl_array_new_matrix_envelope (void * data, vl_type type, vl_size numRows, vl_size numColumns) ; VL_EXPORT void vl_array_dealloc (VlArray * self) ; VL_EXPORT void vl_array_delete (VlArray * self) ; /** @} */ /* VL_ARRAY_H */ #endif vlfeat/vl/quickshift.h0000644000175000017500000001255712237004736013727 0ustar dimadima/** @file quickshift.h ** @brief Quick shift (@ref quickshift) ** @author Andrea Vedaldi ** @author Brian Fulkerson **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_QUICKSHIFT_H #define VL_QUICKSHIFT_H #include "generic.h" #include "mathop.h" /** @brief quick shift datatype */ typedef double vl_qs_type ; /** @brief quick shift infinity constant */ #define VL_QS_INF VL_INFINITY_D /* Change to _F for float math */ /** ------------------------------------------------------------------ ** @brief quick shift results ** ** This implements quick shift mode seeking. **/ typedef struct _VlQS { vl_qs_type *image ; /**< height x width x channels feature image */ int height; /**< height of the image */ int width; /**< width of the image */ int channels; /**< number of channels in the image */ vl_bool medoid; vl_qs_type sigma; vl_qs_type tau; int *parents ; vl_qs_type *dists ; vl_qs_type *density ; } VlQS ; /** @name Create and destroy ** @{ **/ VL_EXPORT VlQS* vl_quickshift_new (vl_qs_type const * im, int height, int width, int channels); VL_EXPORT void vl_quickshift_delete (VlQS *q) ; /** @} */ /** @name Process data ** @{ **/ VL_EXPORT void vl_quickshift_process (VlQS *q) ; /** @} */ /** @name Retrieve data and parameters ** @{ **/ VL_INLINE vl_qs_type vl_quickshift_get_max_dist (VlQS const *q) ; VL_INLINE vl_qs_type vl_quickshift_get_kernel_size (VlQS const *q) ; VL_INLINE vl_bool vl_quickshift_get_medoid (VlQS const *q) ; VL_INLINE int * vl_quickshift_get_parents (VlQS const *q) ; VL_INLINE vl_qs_type * vl_quickshift_get_dists (VlQS const *q) ; VL_INLINE vl_qs_type * vl_quickshift_get_density (VlQS const *q) ; /** @} */ /** @name Set parameters ** @{ **/ VL_INLINE void vl_quickshift_set_max_dist (VlQS *f, vl_qs_type tau) ; VL_INLINE void vl_quickshift_set_kernel_size (VlQS *f, vl_qs_type sigma) ; VL_INLINE void vl_quickshift_set_medoid (VlQS *f, vl_bool medoid) ; /** @} */ /* ------------------------------------------------------------------- * Inline functions implementation * ---------------------------------------------------------------- */ /** ------------------------------------------------------------------ ** @brief Get tau. ** @param q quick shift object. ** @return the maximum distance in the feature space between nodes in the ** quick shift tree. **/ VL_INLINE vl_qs_type vl_quickshift_get_max_dist (VlQS const *q) { return q->tau ; } /** ------------------------------------------------------------------ ** @brief Get sigma. ** @param q quick shift object. ** @return the standard deviation of the kernel used in the Parzen density ** estimate. **/ VL_INLINE vl_qs_type vl_quickshift_get_kernel_size (VlQS const *q) { return q->sigma ; } /** ------------------------------------------------------------------ ** @brief Get medoid. ** @param q quick Shift object. ** @return @c true if medoid shift is used instead of quick shift. **/ VL_INLINE vl_bool vl_quickshift_get_medoid (VlQS const *q) { return q->medoid ; } /** ------------------------------------------------------------------ ** @brief Get parents. ** @param q quick shift object. ** @return a @c height x @c width matrix where each element contains the ** linear index of its parent node. The node is a root if its ** value is its own linear index. **/ VL_INLINE int * vl_quickshift_get_parents (VlQS const *q) { return q->parents ; } /** ------------------------------------------------------------------ ** @brief Get dists. ** @param q quick shift object. ** @return for each pixel, the distance in feature space to the pixel ** that is its parent in the quick shift tree. The distance is ** set to 'inf' if the pixel is a root node. **/ VL_INLINE vl_qs_type * vl_quickshift_get_dists (VlQS const *q) { return q->dists ; } /** ------------------------------------------------------------------ ** @brief Get density. ** @param q quick shift object. ** @return the estimate of the density at each pixel. **/ VL_INLINE vl_qs_type * vl_quickshift_get_density (VlQS const *q) { return q->density ; } /** ------------------------------------------------------------------ ** @brief Set sigma ** @param q quick shift object. ** @param sigma standard deviation of the kernel used in the Parzen density ** estimate. **/ VL_INLINE void vl_quickshift_set_kernel_size (VlQS *q, vl_qs_type sigma) { q -> sigma = sigma ; } /** ------------------------------------------------------------------ ** @brief Set max distance ** @param q quick shift object. ** @param tau the maximum distance in the feature space between nodes in the ** quick shift tree. **/ VL_INLINE void vl_quickshift_set_max_dist (VlQS *q, vl_qs_type tau) { q -> tau = tau ; } /** ------------------------------------------------------------------ ** @brief Set medoid ** @param q quick shift object. ** @param medoid @c true to use kernelized medoid shift, @c false (default) uses ** quick shift. **/ VL_INLINE void vl_quickshift_set_medoid (VlQS *q, vl_bool medoid) { q -> medoid = medoid ; } #endif vlfeat/vl/aib.c0000644000175000017500000005171712237004736012304 0ustar dimadima/** @file aib.c ** @brief AIB - Definition ** @author Brian Fulkerson ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @page aib Agglomerative Information Bottleneck (AIB) @author Brian Fulkerson @author Andrea Vedaldi @ref aib.h implemens the Agglomerative Information Bottleneck (AIB) algorithm as first described in @cite{slonim99agglomerative}. AIB takes a discrete valued feature @f$x@f$ and a label @f$c@f$ and gradually compresses @f$x@f$ by iteratively merging values which minimize the loss in mutual information @f$I(x,c)@f$. While the algorithm is equivalent to the one described in @cite{slonim99agglomerative}, it has some speedups that enable handling much larger datasets. Let N be the number of feature values and C the number of labels. The algorithm of @cite{slonim99agglomerative} is @f$O(N^2)@f$ in space and @f$O(C N^3)@f$ in time. This algorithm is @f$O(N)@f$ space and @f$O(C N^2)@f$ time in common cases (@f$O(C N^3)@f$ in the worst case). @section aib-overview Overview Given a discrete feature @f$x \in \mathcal{X} = \{x_1,\dots,x_N\}@f$ and a category label @f$c = 1,\dots,C@f$ with joint probability @f$p(x,c)@f$, AIB computes a compressed feature @f$[x]_{ij}@f$ by merging two values @f$x_i@f$ and @f$x_j@f$. Among all the pairs @f$ij@f$, AIB chooses the one that yields the smallest loss in the mutual information @f[ D_{ij} = I(x,c) - I([x]_{ij},c) = \sum_c p(x_i) \log \frac{p(x_i,c)}{p(x_i)p(c)} + \sum_c p(x_i) \log \frac{p(x_i,c)}{p(x_i)p(c)} - \sum_c (p(x_i)+p(x_j)) \log \frac {p(x_i,c)+p(x_i,c)}{(p(x_i)+p(x_j))p(c)} @f] AIB iterates this procedure until the desired level of compression is achieved. @section aib-algorithm Algorithm details Computing @f$D_{ij}@f$ requires @f$O(C)@f$ operations. For example, in standard AIB we need to calculate @f[ D_{ij} = I(x,c) - I([x]_{ij},c) = \sum_c p(x_i) \log \frac{p(x_i,c)}{p(x_i)p(c)} + \sum_c p(x_i) \log \frac{p(x_i,c)}{p(x_i)p(c)} - \sum_c (p(x_i)+p(x_j)) \log \frac {p(x_i,c)+p(x_i,c)}{(p(x_i)+p(x_j))p(c)} @f] Thus in a basic implementation of AIB, finding the optimal pair @f$ij@f$ of feature values requires @f$O(CN^2)@f$ operations in total. In order to join all the @f$N@f$ values, we repeat this procedure @f$O(N)@f$ times, yielding @f$O(N^3 C)@f$ time and @f$O(1)@f$ space complexity (this does not account for the space need to store the input). The complexity can be improved by reusing computations. For instance, we can store the matrix @f$D = [ D_{ij} ]@f$ (which requires @f$O(N^2)@f$ space). Then, after joining @f$ij@f$, all of the matrix D except the rows and columns (the matrix is symmetric) of indexes i and j is unchanged. These two rows and columns are deleted and a new row and column, whose computation requires @f$O(NC)@f$ operations, are added for the merged value @f$x_{ij}@f$. Finding the minimal element of the matrix still requires @f$O(N^2)@f$ operations, so the complexity of this algorithm is @f$O(N^2C + N^3)@f$ time and @f$O(N^2)@f$ space. We can obtain a much better expected complexity as follows. First, instead of storing the whole matrix D, we store the smallest element (index and value) of each row as @f$(q_i, D_i)@f$ (notice that this is also the best element of each column since D is symmetric). This requires @f$O(N)@f$ space and finding the minimal element of the matrix requires @f$O(N)@f$ operations. After joining @f$ij@f$, we have to efficiently update this representation. This is done as follows: - The entries @f$(q_i,D_i)@f$ and @f$(q_j,D_j)@f$ are deleted. - A new entry @f$(q_{ij},D_{ij})@f$ for the joint value @f$x_{ij}@f$ is added. This requires @f$O(CN)@f$ operations. - We test which other entries @f$(q_{k},D_{k})@f$ need to be updated. Recall that @f$(q_{k},D_{k})@f$ means that, before the merge, the value closest to @f$x_k@f$ was @f$x_{q_k}@f$ at a distance @f$D_k@f$. Then - If @f$q_k \not = i@f$, @f$q_k \not = j@f$ and @f$D_{k,ij} \geq D_k@f$, then @f$q_k@f$ is still the closest element and we do not do anything. - If @f$q_k \not = i@f$, @f$q_k \not = j@f$ and @f$D_{k,ij} < D_k@f$, then the closest element is @f$ij@f$ and we update the entry in constant time. - If @f$q_k = i@f$ or @f$q_k = j@f$, then we need to re-compute the closest element in @f$O(CN)@f$ operations. This algorithm requires only @f$O(N)@f$ space and @f$O(\gamma(N) C N^2)@f$ time, where @f$\gamma(N)@f$ is the expected number of times we fall in the last case. In common cases one has @f$\gamma(N) \approx \mathrm{const.}@f$, so the time saving is significant. **/ #include "aib.h" #include #include #include #include /* The maximum value which beta may take */ #define BETA_MAX DBL_MAX /** ------------------------------------------------------------------ ** @internal ** @brief Normalizes an array of probabilities to sum to 1 ** ** @param P The array of probabilities ** @param nelem The number of elements in the array ** ** @return Modifies P to contain values which sum to 1 **/ void vl_aib_normalize_P (double * P, vl_uint nelem) { vl_uint i; double sum = 0; for(i=0; ibeta to find the minimum value and fills @a minbeta and ** @a besti and @a bestj with this information. **/ void vl_aib_min_beta (VlAIB * aib, vl_uint * besti, vl_uint * bestj, double * minbeta) { vl_uint i; *minbeta = aib->beta[0]; *besti = 0; *bestj = aib->bidx[0]; for(i=0; inentries; i++) { if(aib->beta[i] < *minbeta) { *minbeta = aib->beta[i]; *besti = i; *bestj = aib->bidx[i]; } } } /** ------------------------------------------------------------------ ** @internal ** @brief Merges two nodes i,j in the internal datastructure ** ** @param aib A pointer to the internal data structure ** @param i The index of one member of the pair to merge ** @param j The index of the other member of the pair to merge ** @param new The index of the new node which corresponds to the union of ** (@a i, @a j). ** ** Nodes are merged by replacing the entry @a i with the union of @c ** ij, moving the node stored in last position (called @c lastnode) ** back to jth position and the entry at the end. ** ** After the nodes have been merged, it updates which nodes should be ** considered on the next iteration based on which beta values could ** potentially change. The merged node will always be part of this ** list. **/ void vl_aib_merge_nodes (VlAIB * aib, vl_uint i, vl_uint j, vl_uint new) { vl_uint last_entry = aib->nentries - 1 ; vl_uint c, n ; /* clear the list of nodes to update */ aib->nwhich = 0; /* make sure that i is smaller than j */ if(i > j) { vl_uint tmp = j; j = i; i = tmp; } /* ----------------------------------------------------------------- * Merge entries i and j, storing the result in i * -------------------------------------------------------------- */ aib-> Px [i] += aib->Px[j] ; aib-> beta [i] = BETA_MAX ; aib-> nodes[i] = new ; for (c = 0; c < aib->nlabels; c++) aib-> Pcx [i*aib->nlabels + c] += aib-> Pcx [j*aib->nlabels + c] ; /* ----------------------------------------------------------------- * Move last entry to j * -------------------------------------------------------------- */ aib-> Px [j] = aib-> Px [last_entry]; aib-> beta [j] = aib-> beta [last_entry]; aib-> bidx [j] = aib-> bidx [last_entry]; aib-> nodes [j] = aib-> nodes [last_entry]; for (c = 0 ; c < aib->nlabels ; c++) aib-> Pcx[j*aib->nlabels + c] = aib-> Pcx [last_entry*aib->nlabels + c] ; /* delete last entry */ aib-> nentries -- ; /* ----------------------------------------------------------------- * Scan for entries to update * -------------------------------------------------------------- */ /* * After mergin entries i and j, we need to update all other entries * that had one of these two as closest match. We also need to * update the renewend entry i. This is added by the loop below * since bidx [i] = j exactly because i was merged. * * Additionaly, since we moved the last entry back to the entry j, * we need to adjust the valeus of bidx to reflect this. */ for (n = 0 ; n < aib->nentries; n++) { if(aib->bidx[n] == i || aib->bidx[n] == j) { aib->bidx [n] = 0; aib->beta [n] = BETA_MAX; aib->which [aib->nwhich++] = n ; } else if(aib->bidx[n] == last_entry) { aib->bidx[n] = j ; } } } /** ------------------------------------------------------------------ ** @internal ** @brief Updates @c aib->beta and @c aib->bidx according to @c aib->which ** ** @param aib AIB data structure. ** ** The function calculates @c beta[i] and @c bidx[i] for the nodes @c ** i listed in @c aib->which. @c beta[i] is the minimal variation of mutual ** information (or other score) caused by merging entry @c i with another entry ** and @c bidx[i] is the index of this best matching entry. ** ** Notice that for each entry @c i that we need to update, a full ** scan of all the other entries must be performed. **/ void vl_aib_update_beta (VlAIB * aib) { #define PLOGP(x) ((x)*log((x))) vl_uint i; double * Px = aib->Px; double * Pcx = aib->Pcx; double * tmp = vl_malloc(sizeof(double)*aib->nentries); vl_uint a, b, c ; /* * T1 = I(x,c) - I([x]_ij) = A + B - C * * A = \sum_c p(xa,c) \log ( p(xa,c) / p(xa) ) * B = \sum_c p(xb,c) \log ( p(xb,c) / p(xb) ) * C = \sum_c (p(xa,c)+p(xb,c)) \log ((p(xa,c)+p(xb,c)) / (p(xa)+p(xb))) * * C = C1 + C2 * C1 = \sum_c (p(xa,c)+p(xb,c)) \log (p(xa,c)+p(xb,c)) * C2 = - (p(xa)+p(xb) \log (p(xa)+p(xb)) */ /* precalculate A and B */ for (a = 0; a < aib->nentries; a++) { tmp[a] = 0; for (c = 0; c < aib->nlabels; c++) { double Pac = Pcx [a*aib->nlabels + c] ; if(Pac != 0) tmp[a] += Pac * log (Pac / Px[a]) ; } } /* for each entry listed in which */ for (i = 0 ; i < aib->nwhich; i++) { a = aib->which[i]; /* for each other entry */ for(b = 0 ; b < aib->nentries ; b++) { double T1 = 0 ; if (a == b || Px [a] == 0 || Px [b] == 0) continue ; T1 = PLOGP ((Px[a] + Px[b])) ; /* - C2 */ T1 += tmp[a] + tmp[b] ; /* + A + B */ for (c = 0 ; c < aib->nlabels; ++ c) { double Pac = Pcx [a*aib->nlabels + c] ; double Pbc = Pcx [b*aib->nlabels + c] ; if (Pac == 0 && Pbc == 0) continue; T1 += - PLOGP ((Pac + Pbc)) ; /* - C1 */ } /* * Now we have beta(a,b). We check wether this is the best beta * for entries a and b. */ { double beta = T1 ; if (beta < aib->beta[a]) { aib->beta[a] = beta; aib->bidx[a] = b; } if (beta < aib->beta[b]) { aib->beta[b] = beta; aib->bidx[b] = a; } } } } vl_free(tmp); } /** ------------------------------------------------------------------ ** @internal @brief Calculates the current information and entropy ** ** @param aib A pointer to the internal data structure ** @param I The current mutual information (out). ** @param H The current entropy (out). ** ** Calculates the current mutual information and entropy of Pcx and sets ** @a I and @a H to these new values. **/ void vl_aib_calculate_information(VlAIB * aib, double * I, double * H) { vl_uint r, c; *H = 0; *I = 0; /* * H(x) = - sum_x p(x) \ log p(x) * I(x,c) = sum_xc p(x,c) \ log (p(x,c) / p(x)p(c)) */ /* for each entry */ for(r = 0 ; r< aib->nentries ; r++) { if (aib->Px[r] == 0) continue ; *H += -log(aib->Px[r]) * aib->Px[r] ; for(c=0; cnlabels; c++) { if (aib->Pcx[r*aib->nlabels+c] == 0) continue; *I += aib->Pcx[r*aib->nlabels+c] * log (aib->Pcx[r*aib->nlabels+c] / (aib->Px[r]*aib->Pc[c])) ; } } } /** ------------------------------------------------------------------ ** @brief Allocates and initializes the internal data structure ** ** @param Pcx A pointer to a 2D array of probabilities ** @param nvalues The number of rows in the array ** @param nlabels The number of columns in the array ** ** Creates a new @a VlAIB struct containing pointers to all the data that ** will be used during the AIB process. ** ** Allocates memory for the following: ** - Px (nvalues*sizeof(double)) ** - Pc (nlabels*sizeof(double)) ** - nodelist (nvalues*sizeof(vl_uint)) ** - which (nvalues*sizeof(vl_uint)) ** - beta (nvalues*sizeof(double)) ** - bidx (nvalues*sizeof(vl_uint)) ** - parents ((2*nvalues-1)*sizeof(vl_uint)) ** - costs (nvalues*sizeof(double)) ** ** Since it simply copies to pointer to Pcx, the total additional memory ** requirement is: ** ** (3*nvalues+nlabels)*sizeof(double) + 4*nvalues*sizeof(vl_uint) ** ** @returns An allocated and initialized @a VlAIB pointer **/ VlAIB * vl_aib_new(double * Pcx, vl_uint nvalues, vl_uint nlabels) { VlAIB * aib = vl_malloc(sizeof(VlAIB)); vl_uint i ; aib->verbosity = 0 ; aib->Pcx = Pcx ; aib->nvalues = nvalues ; aib->nlabels = nlabels ; vl_aib_normalize_P (aib->Pcx, aib->nvalues * aib->nlabels) ; aib->Px = vl_aib_new_Px (aib->Pcx, aib->nvalues, aib->nlabels) ; aib->Pc = vl_aib_new_Pc (aib->Pcx, aib->nvalues, aib->nlabels) ; aib->nentries = aib->nvalues ; aib->nodes = vl_aib_new_nodelist(aib->nentries) ; aib->beta = vl_malloc(sizeof(double) * aib->nentries) ; aib->bidx = vl_malloc(sizeof(vl_uint) * aib->nentries) ; for(i = 0 ; i < aib->nentries ; i++) aib->beta [i] = BETA_MAX ; /* Initially we must consider all nodes */ aib->nwhich = aib->nvalues; aib->which = vl_aib_new_nodelist (aib->nwhich) ; aib->parents = vl_malloc(sizeof(vl_uint)*(aib->nvalues*2-1)); /* Initially, all parents point to a nonexistent node */ for (i = 0 ; i < 2 * aib->nvalues - 1 ; i++) aib->parents [i] = 2 * aib->nvalues ; /* Allocate cost output vector */ aib->costs = vl_malloc (sizeof(double) * (aib->nvalues - 1 + 1)) ; return aib ; } /** ------------------------------------------------------------------ ** @brief Deletes AIB data structure ** @param aib data structure to delete. **/ void vl_aib_delete (VlAIB * aib) { if (aib) { if (aib-> nodes) vl_free (aib-> nodes); if (aib-> beta) vl_free (aib-> beta); if (aib-> bidx) vl_free (aib-> bidx); if (aib-> which) vl_free (aib-> which); if (aib-> Px) vl_free (aib-> Px); if (aib-> Pc) vl_free (aib-> Pc); if (aib-> parents) vl_free (aib-> parents); if (aib-> costs) vl_free (aib-> costs); vl_free (aib) ; } } /** ------------------------------------------------------------------ ** @brief Runs AIB on Pcx ** ** @param aib AIB object to process ** ** The function runs Agglomerative Information Bottleneck (AIB) on ** the joint probability table @a aib->Pcx which has labels along the ** columns and feature values along the rows. AIB iteratively merges ** the two values of the feature @c x that causes the smallest ** decrease in mutual information between the random variables @c x ** and @c c. ** ** Merge operations are arranged in a binary tree. The nodes of the ** tree correspond to the original feature values and any other value ** obtained as a result of a merge operation. The nodes are indexed ** in breadth-first order, starting from the leaves. The first index ** is zero. In this way, the leaves correspond directly to the ** original feature values. In total there are @c 2*nvalues-1 nodes. ** ** The results may be accessed through vl_aib_get_parents which ** returns an array with one element per tree node. Each ** element is the index the parent node. The root parent is equal to ** zero. The array has @c 2*nvalues-1 elements. ** ** Feature values with null probability are ignored by the algorithm ** and their nodes have parents indexing a non-existent tree node (a ** value bigger than @c 2*nvalues-1). ** ** Then the function will also compute the information level after each ** merge. vl_get_costs will return a vector with the information level ** after each merge. @a ** cost has @c nvalues entries: The first is the value of the cost ** functional before any merge, and the others are the cost after the ** @c nvalues-1 merges. ** **/ VL_EXPORT void vl_aib_process(VlAIB *aib) { vl_uint i, besti, bestj, newnode, nodei, nodej; double I, H; double minbeta; /* Calculate initial value of cost function */ vl_aib_calculate_information (aib, &I, &H) ; aib->costs[0] = I; /* Initially which = all */ /* For each merge */ for(i = 0 ; i < aib->nvalues - 1 ; i++) { /* update entries in aib-> which */ vl_aib_update_beta(aib); /* find best pair of nodes to merge */ vl_aib_min_beta (aib, &besti, &bestj, &minbeta); if(minbeta == BETA_MAX) /* only null-probability entries remain */ break; /* Add the parent pointers for the new node */ newnode = aib->nvalues + i ; nodei = aib->nodes[besti]; nodej = aib->nodes[bestj]; aib->parents [nodei] = newnode ; aib->parents [nodej] = newnode ; aib->parents [newnode] = 0 ; /* Merge the nodes which produced the minimum beta */ vl_aib_merge_nodes (aib, besti, bestj, newnode) ; vl_aib_calculate_information (aib, &I, &H) ; aib->costs[i+1] = I; if (aib->verbosity > 0) { VL_PRINTF ("aib: (%5d,%5d)=%5d dE: %10.3g I: %6.4g H: %6.4g updt: %5d\n", nodei, nodej, newnode, minbeta, I, H, aib->nwhich) ; } } /* fill ignored entries with NaNs */ for(; i < aib->nvalues - 1 ; i++) aib->costs[i+1] = VL_NAN_D ; } vlfeat/vl/ikmeans.h0000644000175000017500000001060012237004736013167 0ustar dimadima/** @file ikmeans.h ** @brief Integer K-Means clustering ** @author Brian Fulkerson ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_IKMEANS_H #define VL_IKMEANS_H #include "generic.h" #include "random.h" typedef vl_int32 vl_ikm_acc ; /**< IKM accumulator data type */ /** ------------------------------------------------------------------ ** @brief IKM algorithms **/ enum VlIKMAlgorithms { VL_IKM_LLOYD, /**< Lloyd algorithm */ VL_IKM_ELKAN /**< Elkan algorithm */ } ; /** ------------------------------------------------------------------ ** @brief IKM quantizer **/ typedef struct _VlIKMFilt { int M ; /**< data dimensionality */ int K ; /**< number of centers */ int method ; /**< Learning method */ int max_niters ; /**< Lloyd: maximum number of iterations */ int verb ; /**< verbosity level */ vl_ikm_acc *centers ; /**< centers */ vl_ikm_acc *inter_dist ; /**< centers inter-distances */ } VlIKMFilt ; /** @name Create and destroy ** @{ **/ VL_EXPORT VlIKMFilt *vl_ikm_new (int method) ; VL_EXPORT void vl_ikm_delete (VlIKMFilt *f) ; /** @} */ /** @name Process data ** @{ **/ VL_EXPORT void vl_ikm_init (VlIKMFilt *f, vl_ikm_acc const *centers, int M, int K) ; VL_EXPORT void vl_ikm_init_rand (VlIKMFilt *f, int M, int K) ; VL_EXPORT void vl_ikm_init_rand_data (VlIKMFilt *f, vl_uint8 const *data, int M, int N, int K) ; VL_EXPORT int vl_ikm_train (VlIKMFilt *f, vl_uint8 const *data, int N) ; VL_EXPORT void vl_ikm_push (VlIKMFilt *f, vl_uint *asgn, vl_uint8 const *data, int N) ; VL_EXPORT vl_uint vl_ikm_push_one (vl_ikm_acc const *centers, vl_uint8 const *data, int M, int K) ; /** @} */ /** @name Retrieve data and parameters ** @{ **/ VL_INLINE int vl_ikm_get_ndims (VlIKMFilt const *f) ; VL_INLINE int vl_ikm_get_K (VlIKMFilt const *f) ; VL_INLINE int vl_ikm_get_verbosity (VlIKMFilt const *f) ; VL_INLINE int vl_ikm_get_max_niters (VlIKMFilt const *f) ; VL_INLINE vl_ikm_acc const * vl_ikm_get_centers (VlIKMFilt const *f) ; /** @} */ /** @name Set parameters ** @{ **/ VL_INLINE void vl_ikm_set_verbosity (VlIKMFilt *f, int verb) ; VL_INLINE void vl_ikm_set_max_niters (VlIKMFilt *f, int max_niters) ; /** @} */ /** ------------------------------------------------------------------ ** @brief Get data dimensionality ** @param f IKM filter. ** @return data dimensionality. **/ VL_INLINE int vl_ikm_get_ndims (VlIKMFilt const* f) { return f-> M ; } /** ------------------------------------------------------------------ ** @brief Get the number of centers K ** @param f IKM filter. ** @return number of centers K. **/ VL_INLINE int vl_ikm_get_K (VlIKMFilt const* f) { return f-> K ; } /** ------------------------------------------------------------------ ** @brief Get verbosity level ** @param f IKM filter. ** @return verbosity level. **/ VL_INLINE int vl_ikm_get_verbosity (VlIKMFilt const* f) { return f-> verb ; } /** ------------------------------------------------------------------ ** @brief Get maximum number of iterations ** @param f IKM filter. ** @return maximum number of iterations. **/ VL_INLINE int vl_ikm_get_max_niters (VlIKMFilt const* f) { return f-> max_niters ; } /** ------------------------------------------------------------------ ** @brief Get maximum number of iterations ** @param f IKM filter. ** @return maximum number of iterations. **/ VL_INLINE vl_ikm_acc const * vl_ikm_get_centers (VlIKMFilt const* f) { return f-> centers ; } /** ------------------------------------------------------------------ ** @brief Set verbosity level ** @param f IKM filter. ** @param verb verbosity level. **/ VL_INLINE void vl_ikm_set_verbosity (VlIKMFilt *f, int verb) { f-> verb = VL_MAX(0,verb) ; } /** ------------------------------------------------------------------ ** @brief Set maximum number of iterations ** @param f IKM filter. ** @param max_niters maximum number of iterations. **/ VL_INLINE void vl_ikm_set_max_niters (VlIKMFilt *f, int max_niters) { f-> max_niters = max_niters ; } /* VL_IKMEANS_H */ #endif vlfeat/vl/liop.h0000644000175000017500000000435012237004745012510 0ustar dimadima/** @file liop.h ** @brief Local Intensity Order Pattern (LIOP) descriptor (@ref liop) ** @author Hana Sarbortova ** @author Andrea Vedaldi ** @see @ref liop **/ /* Copyright (C) 2013 Hana Sarbortova and Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_LIOP_H #define VL_LIOP_H #include "generic.h" /** @brief LIOP descriptor extractor object */ typedef struct _VlLiopDesc { vl_int numNeighbours; /**< Number of neighbours. */ vl_int numSpatialBins; /**< Number of bins. */ float intensityThreshold; /**< Weight threshold. */ vl_size dimension; /**< LIOP descriptor size. */ /* Pixels in the circular patch */ vl_size patchSideLength ; vl_size patchSize ; /* only circular neighbourhood */ vl_uindex * patchPixels ; float * patchIntensities ; vl_uindex * patchPermutation ; /* Neighbourhoods of each pixel (samples in a circle) */ float neighRadius; /**< Point to neighbour radius (distance). */ float * neighIntensities ; vl_uindex * neighPermutation ; double * neighSamplesX ; double * neighSamplesY ; } VlLiopDesc ; /** @name Construct and destroy ** @{ */ VL_EXPORT VlLiopDesc * vl_liopdesc_new (vl_int numNeighbours, vl_int numSpatialBins, float radius, vl_size sideLength) ; VL_EXPORT VlLiopDesc * vl_liopdesc_new_basic (vl_size sideLength) ; VL_EXPORT void vl_liopdesc_delete (VlLiopDesc * self) ; /** @} */ /** @name Get data and parameters ** @{ */ VL_EXPORT vl_size vl_liopdesc_get_dimension (VlLiopDesc const * self) ; VL_EXPORT vl_size vl_liopdesc_get_num_neighbours (VlLiopDesc const * self) ; VL_EXPORT float vl_liopdesc_get_intensity_threshold (VlLiopDesc const * self) ; VL_EXPORT vl_size vl_liopdesc_get_num_spatial_bins (VlLiopDesc const * self) ; VL_EXPORT double vl_liopdesc_get_neighbourhood_radius (VlLiopDesc const * self) ; VL_EXPORT void vl_liopdesc_set_intensity_threshold (VlLiopDesc * self, float x) ; /** @} */ /** @name Compute LIOP descriptor ** @{ */ VL_EXPORT void vl_liopdesc_process (VlLiopDesc * liop, float * desc, float const * patch) ; /** @} */ /* VL_LIOP_H */ #endif vlfeat/vl/pgm.c0000644000175000017500000003203512237004745012324 0ustar dimadima/** @file pgm.c ** @brief Portable graymap format (PGM) parser - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. Copyright (C) 2013 Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @file pgm.h This module implements basic input and ouptut of images in PGM format. Extracting an image encoded in PGM format from an imput file stream involves the following steps: - use ::vl_pgm_extract_head to extract the image meta data (size and bit depth); - allocate a buffer to store the image data; - use ::vl_pgm_extract_data to extract the image data to the allocated buffer. Writing an image in PGM format to an ouptut file stream can be done by using ::vl_pgm_insert. To quickly read/write a PGM image from/to a given file, use ::vl_pgm_read_new() and ::vl_pgm_write(). To to the same from a buffer in floating point format use ::vl_pgm_read_new_f() and ::vl_pgm_write_f(). **/ #include "pgm.h" #include #include #include /** ------------------------------------------------------------------ ** @internal @brief Remove all characters to the next new-line. ** @param f file to strip. ** @return number of characters removed. **/ static int remove_line(FILE* f) { int count = 0 ; int c ; while (1) { c = fgetc(f) ; ++ count ; switch(c) { case '\n' : goto quit_remove_line ; case EOF : -- count ; goto quit_remove_line ; } } quit_remove_line : return count ; } /** ------------------------------------------------------------------ ** @internal @brief Remove white-spaces and comments. ** @param f file to strip. ** @return number of characters removed. **/ static int remove_blanks(FILE* f) { int count = 0 ; int c ; while (1) { c = fgetc(f) ; switch(c) { case '\t' : case '\n' : case '\r' : case ' ' : ++ count ; break ; case '#' : count += 1 + remove_line(f) ; break ; case EOF : goto quit_remove_blanks ; default: ungetc(c, f) ; goto quit_remove_blanks ; } } quit_remove_blanks: return count ; } /** ------------------------------------------------------------------ ** @brief Get PGM image number of pixels. ** @param im PGM image descriptor. ** @return number of pixels of the image. ** ** The functions returns the number of pixels of the PGM image @a im. ** ** To calculate the image data size in bytes, this value must be ** multiplied by the number of byte per pixels (see ** ::vl_pgm_get_bpp()). **/ VL_EXPORT vl_size vl_pgm_get_npixels (VlPgmImage const *im) { return im->width * im->height ; } /** ------------------------------------------------------------------ ** @brief Get PGM image bytes per pixel. ** @param im PGM image descriptor. ** @return number of bytes per pixel. ** ** The function returns the number of bytes for each pixel of the ** PGM image @a im. **/ VL_EXPORT vl_size vl_pgm_get_bpp (VlPgmImage const *im) { return (im->max_value >= 256) + 1 ; } /** ------------------------------------------------------------------ ** @brief Extract PGM header from stream. ** @param f input file. ** @param im image structure to fill. ** @return error code. ** ** The function extracts from the file @a f the meta-data section of ** an image encoded in PGM format. The function fills the structure ** ::VlPgmImage accordingly. ** ** The error may be either ::VL_ERR_PGM_INV_HEAD or ::VL_ERR_PGM_INV_META ** depending whether the error occurred in decoding the header or ** meta section of the PGM file. **/ VL_EXPORT int vl_pgm_extract_head (FILE* f, VlPgmImage *im) { char magic [2] ; int c ; int is_raw ; int width ; int height ; int max_value ; size_t sz ; vl_bool good ; /* ----------------------------------------------------------------- * check magic number * -------------------------------------------------------------- */ sz = fread(magic, 1, 2, f) ; if (sz < 2) { return vl_set_last_error(VL_ERR_PGM_INV_HEAD, "Invalid PGM header") ; } good = magic [0] == 'P' ; switch (magic [1]) { case '2' : /* ASCII format */ is_raw = 0 ; break ; case '5' : /* RAW format */ is_raw = 1 ; break ; default : good = 0 ; break ; } if( ! good ) { return vl_set_last_error(VL_ERR_PGM_INV_HEAD, "Invalid PGM header") ; } /* ----------------------------------------------------------------- * parse width, height, max_value * -------------------------------------------------------------- */ good = 1 ; c = remove_blanks(f) ; good &= c > 0 ; c = fscanf(f, "%d", &width) ; good &= c == 1 ; c = remove_blanks(f) ; good &= c > 0 ; c = fscanf(f, "%d", &height) ; good &= c == 1 ; c = remove_blanks(f) ; good &= c > 0 ; c = fscanf(f, "%d", &max_value) ; good &= c == 1 ; /* must end with a single blank */ c = fgetc(f) ; good &= c == '\n' || c == '\t' || c == ' ' || c == '\r' ; if(! good) { return vl_set_last_error(VL_ERR_PGM_INV_META, "Invalid PGM meta information"); } if(! max_value >= 65536) { return vl_set_last_error(VL_ERR_PGM_INV_META, "Invalid PGM meta information"); } /* exit */ im-> width = width ; im-> height = height ; im-> max_value = max_value ; im-> is_raw = is_raw ; return 0 ; } /** ------------------------------------------------------------------ ** @brief Extract PGM data from stream. ** @param f input file. ** @param im PGM image descriptor. ** @param data data buffer to fill. ** @return error code. ** ** The function extracts from the file @a f the data section of an ** image encoded in PGM format. The function fills the buffer @a data ** according. The buffer @a data should be ::vl_pgm_get_npixels() by ** ::vl_pgm_get_bpp() bytes large. **/ VL_EXPORT int vl_pgm_extract_data (FILE* f, VlPgmImage const *im, void *data) { vl_size bpp = vl_pgm_get_bpp(im) ; vl_size data_size = vl_pgm_get_npixels(im) ; vl_bool good = 1 ; size_t c ; /* ----------------------------------------------------------------- * read data * -------------------------------------------------------------- */ /* In RAW mode we read directly an array of bytes or shorts. In the latter case, however, we must take care of the endianess. PGM files are sorted in big-endian format. If our architecture is little endian, we must do a conversion. */ if (im->is_raw) { c = fread( data, bpp, data_size, f ) ; good = (c == data_size) ; /* adjust endianess */ #if defined(VL_ARCH_LITTLE_ENDIAN) if (bpp == 2) { vl_uindex i ; vl_uint8 *pt = (vl_uint8*) data ; for(i = 0 ; i < 2 * data_size ; i += 2) { vl_uint8 tmp = pt [i] ; pt [i] = pt [i+1] ; pt [i+1] = tmp ; } } #endif } /* In ASCII mode we read a sequence of decimal numbers separated by whitespaces. */ else { vl_uindex i ; int unsigned v ; for(good = 1, i = 0 ; i < data_size && good ; ++i) { c = fscanf(f, " %ud", &v) ; if (bpp == 1) { * ((vl_uint8* ) data + i) = (vl_uint8) v ; } else { * ((vl_uint16*) data + i) = (vl_uint16) v ; } good &= c == 1 ; } } if(! good ) { return vl_set_last_error(VL_ERR_PGM_INV_DATA, "Invalid PGM data") ; } return 0 ; } /** ------------------------------------------------------------------ ** @brief Insert a PGM image into a stream. ** @param f output file. ** @param im PGM image meta-data. ** @param data image data. ** @return error code. **/ VL_EXPORT int vl_pgm_insert(FILE* f, VlPgmImage const *im, void const *data) { vl_size bpp = vl_pgm_get_bpp (im) ; vl_size data_size = vl_pgm_get_npixels (im) ; size_t c ; /* write preamble */ fprintf(f, "P5\n%d\n%d\n%d\n", (signed)im->width, (signed)im->height, (signed)im->max_value) ; /* take care of endianness */ #if defined(VL_ARCH_LITTLE_ENDIAN) if (bpp == 2) { vl_uindex i ; vl_uint8* temp = vl_malloc (2 * data_size) ; memcpy(temp, data, 2 * data_size) ; for(i = 0 ; i < 2 * data_size ; i += 2) { vl_uint8 tmp = temp [i] ; temp [i] = temp [i+1] ; temp [i+1] = tmp ; } c = fwrite(temp, 2, data_size, f) ; vl_free (temp) ; } else { #endif c = fwrite(data, bpp, data_size, f) ; #if defined(VL_ARCH_LITTLE_ENDIAN) } #endif if(c != data_size) { return vl_set_last_error(VL_ERR_PGM_IO, "Error writing PGM data") ; } return 0 ; } /** ------------------------------------------------------------------ ** @brief Read a PGM file. ** @param name file name. ** @param im a pointer to the PGM image structure to fill. ** @param data a pointer to the pointer to the allocated buffer. ** @return error code. ** ** The function reads a PGM image from file @a name and initializes ** the structure @a im and the buffer @a data accordingly. ** ** The ownership of the buffer @a data is transfered to the caller. ** @a data should be freed by means of ::vl_free(). ** ** @bug Only PGM files with 1 BPP are supported. **/ VL_EXPORT int vl_pgm_read_new (char const *name, VlPgmImage *im, vl_uint8** data) { int err = 0 ; FILE *f = fopen (name, "rb") ; if (! f) { return vl_set_last_error(VL_ERR_PGM_IO, "Error opening PGM file `%s' for reading", name) ; } err = vl_pgm_extract_head(f, im) ; if (err) { fclose (f) ; return err ; } if (vl_pgm_get_bpp(im) > 1) { return vl_set_last_error(VL_ERR_BAD_ARG, "PGM with BPP > 1 not supported") ; } *data = vl_malloc (vl_pgm_get_npixels(im) * sizeof(vl_uint8)) ; err = vl_pgm_extract_data(f, im, *data) ; if (err) { vl_free (data) ; fclose (f) ; } fclose (f) ; return err ; } /** ------------------------------------------------------------------ ** @brief Read floats from a PGM file. ** @param name file name. ** @param im a pointer to the PGM image structure to fill. ** @param data a pointer to the pointer to the allocated buffer. ** @return error code. ** ** The function reads a PGM image from file @a name and initializes ** the structure @a im and the buffer @a data accordingly. The buffer ** @a data is an array of floats in the range [0, 1]. ** ** The ownership of the buffer @a data is transfered to the caller. ** @a data should be freed by means of ::vl_free(). ** ** @bug Only PGM files with 1 BPP are supported. **/ VL_EXPORT int vl_pgm_read_new_f (char const *name, VlPgmImage *im, float** data) { int err = 0 ; size_t npixels ; vl_uint8 *idata ; err = vl_pgm_read_new (name, im, &idata) ; if (err) { return err ; } npixels = vl_pgm_get_npixels(im) ; *data = vl_malloc (sizeof(float) * npixels) ; { size_t k ; float scale = 1.0f / (float)im->max_value ; for (k = 0 ; k < npixels ; ++ k) (*data)[k] = scale * idata[k] ; } vl_free (idata) ; return 0 ; } /** ------------------------------------------------------------------ ** @brief Write bytes to a PGM file. ** @param name file name. ** @param data data to write. ** @param width width of the image. ** @param height height of the image. ** @return error code. ** ** The function dumps the image @a data to the PGM file of the specified ** name. This is an helper function simplifying the usage of ** vl_pgm_insert(). **/ VL_EXPORT int vl_pgm_write (char const *name, vl_uint8 const* data, int width, int height) { int err = 0 ; VlPgmImage pgm ; FILE *f = fopen (name, "wb") ; if (! f) { return vl_set_last_error(VL_ERR_PGM_IO, "Error opening PGM file '%s' for writing", name) ; } pgm.width = width ; pgm.height = height ; pgm.is_raw = 1 ; pgm.max_value = 255 ; err = vl_pgm_insert (f, &pgm, data) ; fclose (f) ; return err ; } /** ------------------------------------------------------------------- ** @brief Write floats to PGM file ** @param name file name. ** @param data data to write. ** @param width width of the image. ** @param height height of the image. ** @return error code. ** ** The function dumps the image @a data to the PGM file of the ** specified name. The data is re-scaled to fit in the range 0-255. ** This is an helper function simplifying the usage of ** vl_pgm_insert(). **/ VL_EXPORT int vl_pgm_write_f (char const *name, float const* data, int width, int height) { int err = 0 ; int k ; float min = + VL_INFINITY_F ; float max = - VL_INFINITY_F ; float scale ; vl_uint8 * buffer = vl_malloc (sizeof(float) * width * height) ; for (k = 0 ; k < width * height ; ++k) { min = VL_MIN(min, data [k]) ; max = VL_MAX(max, data [k]) ; } scale = 255 / (max - min + VL_EPSILON_F) ; for (k = 0 ; k < width * height ; ++k) { buffer [k] = (vl_uint8) ((data [k] - min) * scale) ; } err = vl_pgm_write (name, buffer, width, height) ; vl_free (buffer) ; return err ; } vlfeat/vl/svmdataset.h0000644000175000017500000000530012237004745013714 0ustar dimadima/** @file svmdataset.h ** @brief SVM Dataset ** @author Daniele Perrone ** @author Andrea Vedaldi **/ /* Copyright (C) 2012 Daniele Perrone. Copyright (C) 2013 Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_SVMDATASET_H #define VL_SVMDATASET_H #include "generic.h" #include "homkermap.h" struct VlSvm_ ; /** @typedef VlSvmDataset ** @brief SVM dataset object ** ** This objects contain a training set to be used in combination with ** the SVM solver object ::VlSvm. Its main purpose is to implement ** the two basic operations inner product (::VlSvmInnerProductFunction) ** and accumulation (::VlSvmAccumulateFunction). ** ** See @ref svm and @ref svm-advanced for further information. **/ #ifndef __DOXYGEN__ struct VlSvmDataset_ ; typedef struct VlSvmDataset_ VlSvmDataset ; #else typedef OPAQUE VlSvmDataset ; #endif /** @name SVM callbacks ** @{ */ typedef void (*VlSvmDiagnosticFunction) (struct VlSvm_ *svm, void *data) ; typedef double (*VlSvmLossFunction) (double inner, double label) ; typedef double (*VlSvmDcaUpdateFunction) (double alpha, double inner, double norm2, double label) ; typedef double (*VlSvmInnerProductFunction)(const void *data, vl_uindex element, double *model) ; typedef void (*VlSvmAccumulateFunction) (const void *data, vl_uindex element, double *model, double multiplier) ; /* typedef double (*VlSvmSquareNormFunction) (const void *data, vl_uindex element) ; */ /** @} */ /** @name Create and destroy ** @{ **/ VL_EXPORT VlSvmDataset* vl_svmdataset_new (vl_type dataType, void *data, vl_size dimension, vl_size numData) ; VL_EXPORT void vl_svmdataset_delete (VlSvmDataset * dataset) ; /** @} */ /** @name Set parameters ** @{ **/ VL_EXPORT void vl_svmdataset_set_homogeneous_kernel_map (VlSvmDataset * self, VlHomogeneousKernelMap * hom) ; /** @} */ /** @name Get data and parameters ** @{ **/ VL_EXPORT void* vl_svmdataset_get_data (VlSvmDataset const *self) ; VL_EXPORT vl_size vl_svmdataset_get_num_data (VlSvmDataset const *self) ; VL_EXPORT vl_size vl_svmdataset_get_dimension (VlSvmDataset const *self) ; VL_EXPORT void* vl_svmdataset_get_map (VlSvmDataset const *self) ; VL_EXPORT vl_size vl_svmdataset_get_mapDim (VlSvmDataset const *self) ; VL_EXPORT VlSvmAccumulateFunction vl_svmdataset_get_accumulate_function (VlSvmDataset const *self) ; VL_EXPORT VlSvmInnerProductFunction vl_svmdataset_get_inner_product_function (VlSvmDataset const * self) ; VL_EXPORT VlHomogeneousKernelMap * vl_svmdataset_get_homogeneous_kernel_map (VlSvmDataset const * self) ; /** @} */ /* VL_SVMDATASET_H */ #endif vlfeat/vl/generic.h0000644000175000017500000001475712237004745013175 0ustar dimadima/** @file generic.h ** @brief Generic (@ref generic) ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. Copyright (C) 2013 Andrea Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_GENERIC_H #define VL_GENERIC_H #include "host.h" #include "random.h" #include #include #include #include /** @brief Library version string */ #define VL_VERSION_STRING "0.9.17" /** @brief Maximum length (in characters) of an error message */ #define VL_ERR_MSG_LEN 1024 /** @name Type identifiers for atomic data types ** @{ */ #define VL_TYPE_FLOAT 1 /**< @c float type */ #define VL_TYPE_DOUBLE 2 /**< @c double type */ #define VL_TYPE_INT8 3 /**< @c ::vl_int8 type */ #define VL_TYPE_UINT8 4 /**< @c ::vl_uint8 type */ #define VL_TYPE_INT16 5 /**< @c ::vl_int16 type */ #define VL_TYPE_UINT16 6 /**< @c ::vl_uint16 type */ #define VL_TYPE_INT32 7 /**< @c ::vl_int32 type */ #define VL_TYPE_UINT32 8 /**< @c ::vl_uint32 type */ #define VL_TYPE_INT64 9 /**< @c ::vl_int64 type */ #define VL_TYPE_UINT64 10 /**< @c ::vl_uint64 type */ typedef vl_uint32 vl_type ; /** @brief Get the name of a data type. ** @param type data type. ** @return data name of the data type. ** ** @c type is one of ::VL_TYPE_FLOAT, ::VL_TYPE_DOUBLE, ** ::VL_TYPE_INT8, ::VL_TYPE_INT16, ::VL_TYPE_INT32, ::VL_TYPE_INT64, ** ::VL_TYPE_UINT8, ::VL_TYPE_UINT16, ::VL_TYPE_UINT32, ::VL_TYPE_UINT64. **/ VL_INLINE char const * vl_get_type_name (vl_type type) { switch (type) { case VL_TYPE_FLOAT : return "float" ; case VL_TYPE_DOUBLE : return "double" ; case VL_TYPE_INT8 : return "int8" ; case VL_TYPE_INT16 : return "int16" ; case VL_TYPE_INT32 : return "int32" ; case VL_TYPE_INT64 : return "int64" ; case VL_TYPE_UINT8 : return "int8" ; case VL_TYPE_UINT16 : return "int16" ; case VL_TYPE_UINT32 : return "int32" ; case VL_TYPE_UINT64 : return "int64" ; default: return NULL ; } } /** @brief Get data type size. ** @param type data type. ** @return size (in byte) ** ** @c type is one of ::VL_TYPE_FLOAT, ::VL_TYPE_DOUBLE, ** ::VL_TYPE_INT8, ::VL_TYPE_INT16, ::VL_TYPE_INT32, ::VL_TYPE_INT64, ** ::VL_TYPE_UINT8, ::VL_TYPE_UINT16, ::VL_TYPE_UINT32, ::VL_TYPE_UINT64. **/ VL_INLINE vl_size vl_get_type_size (vl_type type) { vl_size dataSize = 0 ; switch (type) { case VL_TYPE_DOUBLE : dataSize = sizeof(double) ; break ; case VL_TYPE_FLOAT : dataSize = sizeof(float) ; break ; case VL_TYPE_INT64 : case VL_TYPE_UINT64 : dataSize = sizeof(vl_int64) ; break ; case VL_TYPE_INT32 : case VL_TYPE_UINT32 : dataSize = sizeof(vl_int32) ; break ; case VL_TYPE_INT16 : case VL_TYPE_UINT16 : dataSize = sizeof(vl_int16) ; break ; case VL_TYPE_INT8 : case VL_TYPE_UINT8 : dataSize = sizeof(vl_int8) ; break ; default: abort() ; } return dataSize ; } /** @} */ VL_EXPORT char const * vl_get_version_string (void) ; VL_EXPORT char * vl_configuration_to_string_copy (void) ; VL_EXPORT void vl_set_simd_enabled (vl_bool x) ; VL_EXPORT vl_bool vl_get_simd_enabled (void) ; VL_EXPORT vl_bool vl_cpu_has_avx (void) ; VL_EXPORT vl_bool vl_cpu_has_sse3 (void) ; VL_EXPORT vl_bool vl_cpu_has_sse2 (void) ; VL_EXPORT vl_size vl_get_num_cpus (void) ; VL_EXPORT vl_size vl_get_max_threads (void) ; VL_EXPORT void vl_set_num_threads (vl_size n) ; VL_EXPORT VlRand * vl_get_rand (void) ; #if 0 VL_EXPORT vl_size vl_get_thread_limit (void) ; #endif /** ------------------------------------------------------------------ ** @name Error handling ** @{ */ #define VL_ERR_OK 0 /**< No error */ #define VL_ERR_OVERFLOW 1 /**< Buffer overflow error */ #define VL_ERR_ALLOC 2 /**< Resource allocation error */ #define VL_ERR_BAD_ARG 3 /**< Bad argument or illegal data error */ #define VL_ERR_IO 4 /**< Input/output error */ #define VL_ERR_EOF 5 /**< End-of-file or end-of-sequence error */ #define VL_ERR_NO_MORE 5 /**< End-of-sequence @deprecated */ VL_EXPORT int vl_get_last_error (void) ; VL_EXPORT char const * vl_get_last_error_message (void) ; VL_EXPORT int vl_set_last_error (int error, char const * errorMessage, ...) ; /** @} */ /** ------------------------------------------------------------------ ** @name Memory allocation ** @{ */ VL_EXPORT void vl_set_alloc_func (void *(*malloc_func) (size_t), void *(*realloc_func) (void*,size_t), void *(*calloc_func) (size_t, size_t), void (*free_func) (void*)) ; VL_EXPORT void *vl_malloc (size_t n) ; VL_EXPORT void *vl_realloc (void *ptr, size_t n) ; VL_EXPORT void *vl_calloc (size_t n, size_t size) ; VL_EXPORT void *vl_memalign (size_t n, size_t size) ; VL_EXPORT void vl_free (void* ptr) ; /** @} */ /** ------------------------------------------------------------------ ** @name Logging ** @{ */ /** @brief Customizable printf function pointer type */ typedef int(*printf_func_t) (char const *format, ...) ; VL_EXPORT void vl_set_printf_func (printf_func_t printf_func) ; VL_EXPORT printf_func_t vl_get_printf_func (void) ; /** @def VL_PRINTF ** @brief Call user-customizable @c printf function ** ** The function calls the user customizable @c printf. **/ /** @def VL_PRINT ** @brief Same as ::VL_PRINTF (legacy code) **/ #define VL_PRINTF (*vl_get_printf_func()) #define VL_PRINT (*vl_get_printf_func()) /** @} */ /** ------------------------------------------------------------------ ** @name Common operations ** @{ */ /** @brief Compute the minimum between two values ** @param x value ** @param y value ** @return the minimum of @a x and @a y. **/ #define VL_MIN(x,y) (((x)<(y))?(x):(y)) /** @brief Compute the maximum between two values ** @param x value. ** @param y value. ** @return the maximum of @a x and @a y. **/ #define VL_MAX(x,y) (((x)>(y))?(x):(y)) /** @brief Signed left shift operation ** @param x value. ** @param n number of shift positions. ** @return @c x << n . ** The macro is equivalent to the builtin @c << operator, but it ** supports negative shifts too. **/ #define VL_SHIFT_LEFT(x,n) (((n)>=0)?((x)<<(n)):((x)>>-(n))) /* @} */ /** ------------------------------------------------------------------ ** @name Measuring time ** @{ **/ VL_EXPORT void vl_tic (void) ; VL_EXPORT double vl_toc (void) ; VL_EXPORT double vl_get_cpu_time (void) ; /** @} */ /* VL_GENERIC_H */ #endif vlfeat/vl/rodrigues.h0000644000175000017500000000141212237004745013544 0ustar dimadima/** @file rodrigues.h ** @brief Rodrigues formulas ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-13 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @file rodrigues.h @section rodrigues Rodrigues formulas - Use ::vl_rodrigues to compute the Rodrigues formula and its derivative. - Use ::vl_irodrigues to compute the inverse Rodrigues formula and its derivative. **/ #ifndef VL_RODRIGUES #define VL_RODRIGUES #include "generic.h" VL_EXPORT void vl_rodrigues (double* R_pt, double* dR_pt, const double* om_pt) ; VL_EXPORT void vl_irodrigues (double* om_pt, double* dom_pt, const double* R_pt) ; /* VL_RODRIGUES */ #endif vlfeat/vl/shuffle-def.h0000644000175000017500000000472612237004736013744 0ustar dimadima/** @file shuffle-def.h ** @brief Shuffle preprocessor metaprogram ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @file shuffle-def.h @todo large array compatibility. **/ #include "host.h" #include "random.h" #include #ifndef VL_SHUFFLE_prefix #error "VL_SHUFFLE_prefix must be defined" #endif #ifndef VL_SHUFFLE_array #ifndef VL_SHUFFLE_type #error "VL_SHUFFLE_type must be defined if VL_SHUFFLE_array is not" #endif #define VL_SHUFFLE_array VL_SHUFFLE_type* #endif #ifdef __DOXYGEN__ #define VL_SHUFFLE_prefix ShufflePrefix /**< Prefix of the shuffle functions */ #define VL_SHUFFLE_type ShuffleType /**< Data type of the shuffle elements */ #define VL_SHUFFLE_array ShuffleType* /**< Data type of the shuffle container */ #endif /* ---------------------------------------------------------------- */ #if ! defined(VL_SHUFFLE_swap) || defined(__DOXYGEN__) #define VL_SHUFFLE_swap VL_XCAT(VL_SHUFFLE_prefix, _swap) /** @brief Swap two array elements ** @param array shuffle array. ** @param indexA index of the first element to swap. ** @param indexB index of the second element to swap. ** ** The function swaps the two elements @a a and @ b. The function ** uses a temporary element of type ::VL_SHUFFLE_type ** and the copy operator @c =. **/ VL_INLINE void VL_SHUFFLE_swap (VL_SHUFFLE_array array, vl_uindex indexA, vl_uindex indexB) { VL_SHUFFLE_type t = array [indexA] ; array [indexA] = array [indexB] ; array [indexB] = t ; } /* VL_SHUFFLE_swap */ #endif /* ---------------------------------------------------------------- */ #if ! defined(VL_SHUFFLE_shuffle) || defined(__DOXYGEN__) #define VL_SHUFFLE_shuffle VL_XCAT(VL_SHUFFLE_prefix, _shuffle) /** @brief Shuffle ** @param array (in/out) pointer to the array. ** @param size size of the array. ** @param rand random number generator to use. ** ** The function randomly permutes the array. **/ VL_INLINE void VL_SHUFFLE_shuffle (VL_SHUFFLE_array array, vl_size size, VlRand * rand) { vl_uindex n = size ; while (n > 1) { vl_uindex k = vl_rand_uindex (rand, n) ; n -- ; VL_SHUFFLE_swap (array, n, k) ; } } /* VL_SHUFFLE_shuffle */ #endif #undef VL_SHUFFLE_prefix #undef VL_SHUFFLE_swap #undef VL_SHUFFLE_shuffle #undef VL_SHUFFLE_type #undef VL_SHUFFLE_array vlfeat/vl/mser.c0000644000175000017500000007205212237004745012512 0ustar dimadima/** @file mser.c ** @brief MSER - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-13 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @page mser Maximally Stable Extremal Regions (MSER) @author Andrea Vedaldi *Maximally Stable Extremal Regions* (MSER) @cite{matas03robust} is a standard local feature detector. MSER extracts as features the connected components of the level sets of the (intensity) image. Among all such regions, the ones that are locally maximally stable are selected. MSERs are affine co-variant, as well as largely co-variant to generic diffeomorphic transformations. @ref mser.h implements the MSER feature detector. This version is capable of working on images of arbitrary dimensions (e.g. volumes). @tableofcontents @section mser-overview Maximally Stable Extremal Regions Overview Running the MSER filter usually involves the following steps: - Initialize the MSER filter by ::vl_mser_new(). The filter can be reused for images of the same size. - Compute the MSERs by ::vl_mser_process(). - Optionally fit ellipsoids to the MSERs by ::vl_mser_ell_fit(). - Retrieve the results by ::vl_mser_get_regions() (and optionally ::vl_mser_get_ell()). - Optionally retrieve filter statistics by ::vl_mser_get_stats(). - Delete the MSER filter by ::vl_mser_delete(). @section mser-definition MSER definition An extremal region @f$R_l@f$ of an image is a connected component of the level set @f$S_l = \{ x : I(x) \leq l \}@f$. @image html mser-er.png For each intensity @f$l@f$, one has multiple disjoint extremal regions in the level set @f$S_l@f$. Let @f$l@f$ span a finite number of values @f$\mathcal{L}=\{0,\dots,M-1\}@f$ (a sampling of the image range). One obtains a family of regions @f$R_l@f$; by connecting two regions @f$R_l@f$and @f$R_{l+1}@f$ if, and only if, @f$R_l\subset R_{l+1}@f$, regions form a tree: @image html mser-tree.png The maximally stable extremal regions are extremal regions which satisfy a stability criterion. Here we use a criterion which is similar but not identical to the original paper. This definition is somewhat simpler both to understand and code (it also runs faster). Let @f$B(R_l)=(R_l,R_{l+1},\dots,R_{l+\Delta})@f$ be the branch of the tree rooted at @f$R_l@f$. We associate to the branch the (in)stability score @f[ v(R_l) = \frac{|R_{l+\Delta} - R_l|}{|R_l|}. @f] The score is low if the regions along the branch have similar area (and thus similar shape). We aim to select maximally stable branches; then a maximally stable region is just a representative region selected from a maximally stable branch (for simplicity we select @f$R_l@f$, but one could choose for example @f$R_{l+\Delta/2}@f$). Roughly speaking, a branch is maximally stable if it is a local minimum of the (in)stability score. More accurately, we start by assuming that all branches are maximally stable. Then we consider each branch @f$B(R_{l})@f$ and its parent branch @f$B(R_{l+1}):R_{l+1}\supset R_l@f$ (notice that, due to the discrete nature of the calculations, they might be geometrically identical) and we mark as unstable the less stable one, i.e.: - if @f$v(R_l)v(R_{l+1})@f$, mark @f$R_{l}@f$ as unstable; - otherwise, do nothing. This criterion selects among nearby regions the ones that are more stable. We optionally refine the selection by running (starting from the bigger and going to the smaller regions) the following tests: - @f$a_- \leq |R_{l}|/|R_{\infty}| \leq a_+@f$: exclude MSERs too small or too big (@f$|R_{\infty}|@f$ is the area of the image). - @f$v(R_{l}) < v_+@f$: exclude MSERs too unstable. - For any MSER @f$R_l@f$, find the parent MSER @f$R_{l'}@f$ and check if @f$|R_{l'} - R_l|/|R_l'| < d_+@f$: remove duplicated MSERs.
    parameter alt. name standard value set by
    @f$\Delta@f$ @c delta 5 ::vl_mser_set_delta()
    @f$a_+@f$ @c max_area 0.75 ::vl_mser_set_max_area()
    @f$a_-@f$ @c min_area 3.0/@f$|R_\infty|@f$ ::vl_mser_set_min_area()
    @f$v_+@f$ @c max_var 0.25 ::vl_mser_set_max_variation()
    @f$d_+@f$ @c min_diversity 0.2 ::vl_mser_set_min_diversity()
    @section mser-vol Volumetric images The code supports images of arbitrary dimension. For instance, it is possible to find the MSER regions of volumetric images or time sequences. See ::vl_mser_new() for further details @section mser-ell Ellipsoids Usually extremal regions are returned as a set of ellipsoids fitted to the actual regions (which have arbitrary shape). The fit is done by calculating the mean and variance of the pixels composing the region: @f[ \mu_l = \frac{1}{|R_l|}\sum_{x\in R_l}x, \qquad \Sigma_l = \frac{1}{|R_l|}\sum_{x\in R_l} (x-\mu_l)^\top(x-\mu_l) @f] Ellipsoids are fitted by ::vl_mser_ell_fit(). Notice that for a n dimensional image, the mean has n components and the variance has n(n+1)/2 independent components. The total number of components is obtained by ::vl_mser_get_ell_dof() and the total number of fitted ellipsoids by ::vl_mser_get_ell_num(). A matrix with an ellipsoid per column is returned by ::vl_mser_get_ell(). The column is the stacking of the mean and of the independent components of the variance, in the order (1,1),(1,2),..,(1,n), (2,2),(2,3).... In the calculations, the pixel coordinate @f$x=(x_1,...,x_n)@f$ use the standard index order and ranges. @section mser-algo Algorithm The algorithm is quite efficient. While some details may be tricky, the overall idea is easy to grasp. - Pixels are sorted by increasing intensity. - Pixels are added to a forest by increasing intensity. The forest has the following properties: - All the descendent of a certain pixels are subset of an extremal region. - All the extremal regions are the descendants of some pixels. - Extremal regions are extracted from the region tree and the extremal regions tree is calculated. - Stable regions are marked. - Duplicates and other bad regions are removed. @remark The extremal region tree which is calculated is a subset of the actual extremal region tree. In particular, it does not contain redundant entries extremal regions that coincide as sets. So, for example, in the calculated extremal region tree, the parent @f$R_q@f$ of an extremal region @f$R_{l}@f$ may or may not correspond to @f$R_{l+1}@f$, depending whether @f$q\leq l+1@f$ or not. These subtleties are important when calculating the stability tests. **/ #include "mser.h" #include #include #include /** ------------------------------------------------------------------- ** @brief Advance N-dimensional subscript ** ** The function increments by one the subscript @a subs indexing an ** array the @a ndims dimensions @a dims. ** ** @param ndims number of dimensions. ** @param dims dimensions. ** @param subs subscript to advance. **/ VL_INLINE void adv(int ndims, int const *dims, int *subs) { int d = 0 ; while(d < ndims) { if( ++subs[d] < dims[d] ) return ; subs[d++] = 0 ; } } /** ------------------------------------------------------------------- ** @brief Climb the region forest to reach aa root ** ** The function climbs the regions forest @a r starting from the node ** @a idx to the corresponding root. ** ** To speed-up the operation, the function uses the ** VlMserReg::shortcut field to quickly jump to the root. After the ** root is reached, all the used shortcut are updated. ** ** @param r regions' forest. ** @param idx stating node. ** @return index of the reached root. **/ VL_INLINE vl_uint climb (VlMserReg* r, vl_uint idx) { vl_uint prev_idx = idx ; vl_uint next_idx ; vl_uint root_idx ; /* move towards root to find it */ while (1) { /* next jump to the root */ next_idx = r [idx] .shortcut ; /* recycle shortcut to remember how we came here */ r [idx] .shortcut = prev_idx ; /* stop if the root is found */ if( next_idx == idx ) break ; /* next guy */ prev_idx = idx ; idx = next_idx ; } root_idx = idx ; /* move backward to update shortcuts */ while (1) { /* get previously visited one */ prev_idx = r [idx] .shortcut ; /* update shortcut to point to the new root */ r [idx] .shortcut = root_idx ; /* stop if the first visited node is reached */ if( prev_idx == idx ) break ; /* next guy */ idx = prev_idx ; } return root_idx ; } /** ------------------------------------------------------------------- ** @brief Create a new MSER filter ** ** Initializes a new MSER filter for images of the specified ** dimensions. Images are @a ndims -dimensional arrays of dimensions ** @a dims. ** ** @param ndims number of dimensions. ** @param dims dimensions. **/ VL_EXPORT VlMserFilt* vl_mser_new (int ndims, int const* dims) { VlMserFilt* f ; int *strides, k ; f = vl_calloc (sizeof(VlMserFilt), 1) ; f-> ndims = ndims ; f-> dims = vl_malloc (sizeof(int) * ndims) ; f-> subs = vl_malloc (sizeof(int) * ndims) ; f-> dsubs = vl_malloc (sizeof(int) * ndims) ; f-> strides = vl_malloc (sizeof(int) * ndims) ; /* shortcuts */ strides = f-> strides ; /* copy dims to f->dims */ for(k = 0 ; k < ndims ; ++k) { f-> dims [k] = dims [k] ; } /* compute strides to move into the N-dimensional image array */ strides [0] = 1 ; for(k = 1 ; k < ndims ; ++k) { strides [k] = strides [k-1] * dims [k-1] ; } /* total number of pixels */ f-> nel = strides [ndims-1] * dims [ndims-1] ; /* dof of ellipsoids */ f-> dof = ndims * (ndims + 1) / 2 + ndims ; /* more buffers */ f-> perm = vl_malloc (sizeof(vl_uint) * f-> nel) ; f-> joins = vl_malloc (sizeof(vl_uint) * f-> nel) ; f-> r = vl_malloc (sizeof(VlMserReg) * f-> nel) ; f-> er = 0 ; f-> rer = 0 ; f-> mer = 0 ; f-> rmer = 0 ; f-> ell = 0 ; f-> rell = 0 ; /* other parameters */ f-> delta = 5 ; f-> max_area = 0.75 ; f-> min_area = 3.0 / f-> nel ; f-> max_variation = 0.25 ; f-> min_diversity = 0.2 ; return f ; } /** ------------------------------------------------------------------- ** @brief Delete MSER filter ** ** The function releases the MSER filter @a f and all its resources. ** ** @param f MSER filter to be deleted. **/ VL_EXPORT void vl_mser_delete (VlMserFilt* f) { if(f) { if(f-> acc ) vl_free( f-> acc ) ; if(f-> ell ) vl_free( f-> ell ) ; if(f-> er ) vl_free( f-> er ) ; if(f-> r ) vl_free( f-> r ) ; if(f-> joins ) vl_free( f-> joins ) ; if(f-> perm ) vl_free( f-> perm ) ; if(f-> strides) vl_free( f-> strides) ; if(f-> dsubs ) vl_free( f-> dsubs ) ; if(f-> subs ) vl_free( f-> subs ) ; if(f-> dims ) vl_free( f-> dims ) ; if(f-> mer ) vl_free( f-> mer ) ; vl_free (f) ; } } /** ------------------------------------------------------------------- ** @brief Process image ** ** The functions calculates the Maximally Stable Extremal Regions ** (MSERs) of image @a im using the MSER filter @a f. ** ** The filter @a f must have been initialized to be compatible with ** the dimensions of @a im. ** ** @param f MSER filter. ** @param im image data. **/ VL_EXPORT void vl_mser_process (VlMserFilt* f, vl_mser_pix const* im) { /* shortcuts */ vl_uint nel = f-> nel ; vl_uint *perm = f-> perm ; vl_uint *joins = f-> joins ; int ndims = f-> ndims ; int *dims = f-> dims ; int *subs = f-> subs ; int *dsubs = f-> dsubs ; int *strides = f-> strides ; VlMserReg *r = f-> r ; VlMserExtrReg *er = f-> er ; vl_uint *mer = f-> mer ; int delta = f-> delta ; int njoins = 0 ; int ner = 0 ; int nmer = 0 ; int nbig = 0 ; int nsmall = 0 ; int nbad = 0 ; int ndup = 0 ; int i, j, k ; /* delete any previosuly computed ellipsoid */ f-> nell = 0 ; /* ----------------------------------------------------------------- * Sort pixels by intensity * -------------------------------------------------------------- */ { vl_uint buckets [ VL_MSER_PIX_MAXVAL ] ; /* clear buckets */ memset (buckets, 0, sizeof(vl_uint) * VL_MSER_PIX_MAXVAL ) ; /* compute bucket size (how many pixels for each intensity value) */ for(i = 0 ; i < (int) nel ; ++i) { vl_mser_pix v = im [i] ; ++ buckets [v] ; } /* cumulatively add bucket sizes */ for(i = 1 ; i < VL_MSER_PIX_MAXVAL ; ++i) { buckets [i] += buckets [i-1] ; } /* empty buckets computing pixel ordering */ for(i = nel ; i >= 1 ; ) { vl_mser_pix v = im [ --i ] ; vl_uint j = -- buckets [v] ; perm [j] = i ; } } /* initialize the forest with all void nodes */ for(i = 0 ; i < (int) nel ; ++i) { r [i] .parent = VL_MSER_VOID_NODE ; } /* ----------------------------------------------------------------- * Compute regions and count extremal regions * -------------------------------------------------------------- */ /* In the following: idx : index of the current pixel val : intensity of the current pixel r_idx : index of the root of the current pixel n_idx : index of the neighbors of the current pixel nr_idx : index of the root of the neighbor of the current pixel */ /* process each pixel by increasing intensity */ for(i = 0 ; i < (int) nel ; ++i) { /* pop next node xi */ vl_uint idx = perm [i] ; vl_mser_pix val = im [idx] ; vl_uint r_idx ; /* add the pixel to the forest as a root for now */ r [idx] .parent = idx ; r [idx] .shortcut = idx ; r [idx] .area = 1 ; r [idx] .height = 1 ; r_idx = idx ; /* convert the index IDX into the subscript SUBS; also initialize DSUBS to (-1,-1,...,-1) */ { vl_uint temp = idx ; for(k = ndims - 1 ; k >= 0 ; --k) { dsubs [k] = -1 ; subs [k] = temp / strides [k] ; temp = temp % strides [k] ; } } /* examine the neighbors of the current pixel */ while (1) { vl_uint n_idx = 0 ; vl_bool good = 1 ; /* Compute the neighbor subscript as NSUBS+SUB, the corresponding neighbor index NINDEX and check that the neighbor is within the image domain. */ for(k = 0 ; k < ndims && good ; ++k) { int temp = dsubs [k] + subs [k] ; good &= (0 <= temp) && (temp < dims [k]) ; n_idx += temp * strides [k] ; } /* The neighbor should be processed if the following conditions are met: 1. The neighbor is within image boundaries. 2. The neighbor is indeed different from the current node (the opposite happens when DSUB=(0,0,...,0)). 3. The neighbor is already in the forest, meaning that it has already been processed. */ if (good && n_idx != idx && r [n_idx] .parent != VL_MSER_VOID_NODE ) { vl_mser_pix nr_val = 0 ; vl_uint nr_idx = 0 ; int hgt = r [ r_idx] .height ; int n_hgt = r [nr_idx] .height ; /* Now we join the two subtrees rooted at R_IDX = ROOT( IDX) NR_IDX = ROOT(N_IDX). Note that R_IDX = ROOT(IDX) might change as we process more neighbors, so we need keep updating it. */ r_idx = climb(r, idx) ; nr_idx = climb(r, n_idx) ; /* At this point we have three possibilities: (A) ROOT(IDX) == ROOT(NR_IDX). In this case the two trees have already been joined and we do not do anything. (B) I(ROOT(IDX)) == I(ROOT(NR_IDX)). In this case the pixel IDX is extending an extremal region with the same intensity value. Since ROOT(NR_IDX) will NOT be an extremal region of the full image, ROOT(IDX) can be safely added as children of ROOT(NR_IDX) if this reduces the height according to the union rank heuristic. (C) I(ROOT(IDX)) > I(ROOT(NR_IDX)). In this case the pixel IDX is starting a new extremal region. Thus ROOT(NR_IDX) WILL be an extremal region of the final image and the only possibility is to add ROOT(NR_IDX) as children of ROOT(IDX), which becomes parent. */ if( r_idx != nr_idx ) { /* skip if (A) */ nr_val = im [nr_idx] ; if( nr_val == val && hgt < n_hgt ) { /* ROOT(IDX) becomes the child */ r [r_idx] .parent = nr_idx ; r [r_idx] .shortcut = nr_idx ; r [nr_idx] .area += r [r_idx] .area ; r [nr_idx] .height = VL_MAX(n_hgt, hgt+1) ; joins [njoins++] = r_idx ; } else { /* cases ROOT(IDX) becomes the parent */ r [nr_idx] .parent = r_idx ; r [nr_idx] .shortcut = r_idx ; r [r_idx] .area += r [nr_idx] .area ; r [r_idx] .height = VL_MAX(hgt, n_hgt + 1) ; joins [njoins++] = nr_idx ; /* count if extremal */ if (nr_val != val) ++ ner ; } /* check b vs c */ } /* check a vs b or c */ } /* neighbor done */ /* move to next neighbor */ k = 0 ; while(++ dsubs [k] > 1) { dsubs [k++] = -1 ; if(k == ndims) goto done_all_neighbors ; } } /* next neighbor */ done_all_neighbors : ; } /* next pixel */ /* the last root is extremal too */ ++ ner ; /* save back */ f-> njoins = njoins ; f-> stats. num_extremal = ner ; /* ----------------------------------------------------------------- * Extract extremal regions * -------------------------------------------------------------- */ /* Extremal regions are extracted and stored into the array ER. The structure R is also updated so that .SHORTCUT indexes the corresponding extremal region if any (otherwise it is set to VOID). */ /* make room */ if (f-> rer < ner) { if (er) vl_free (er) ; f->er = er = vl_malloc (sizeof(VlMserExtrReg) * ner) ; f->rer = ner ; } ; /* save back */ f-> nmer = ner ; /* count again */ ner = 0 ; /* scan all regions Xi */ for(i = 0 ; i < (int) nel ; ++i) { /* pop next node xi */ vl_uint idx = perm [i] ; vl_mser_pix val = im [idx] ; vl_uint p_idx = r [idx] .parent ; vl_mser_pix p_val = im [p_idx] ; /* is extremal ? */ vl_bool is_extr = (p_val > val) || idx == p_idx ; if( is_extr ) { /* if so, add it */ er [ner] .index = idx ; er [ner] .parent = ner ; er [ner] .value = im [idx] ; er [ner] .area = r [idx] .area ; /* link this region to this extremal region */ r [idx] .shortcut = ner ; /* increase count */ ++ ner ; } else { /* link this region to void */ r [idx] .shortcut = VL_MSER_VOID_NODE ; } } /* ----------------------------------------------------------------- * Link extremal regions in a tree * -------------------------------------------------------------- */ for(i = 0 ; i < ner ; ++i) { vl_uint idx = er [i] .index ; do { idx = r[idx] .parent ; } while (r[idx] .shortcut == VL_MSER_VOID_NODE) ; er[i] .parent = r[idx] .shortcut ; er[i] .shortcut = i ; } /* ----------------------------------------------------------------- * Compute variability of +DELTA branches * -------------------------------------------------------------- */ /* For each extremal region Xi of value VAL we look for the biggest * parent that has value not greater than VAL+DELTA. This is dubbed * `top parent'. */ for(i = 0 ; i < ner ; ++i) { /* Xj is the current region the region and Xj are the parents */ int top_val = er [i] .value + delta ; int top = er [i] .shortcut ; /* examine all parents */ while (1) { int next = er [top] .parent ; int next_val = er [next] .value ; /* Break if: * - there is no node above the top or * - the next node is above the top value. */ if (next == top || next_val > top_val) break ; /* so next could be the top */ top = next ; } /* calculate branch variation */ { int area = er [i ] .area ; int area_top = er [top] .area ; er [i] .variation = (float) (area_top - area) / area ; er [i] .max_stable = 1 ; } /* Optimization: since extremal regions are processed by * increasing intensity, all next extremal regions being processed * have value at least equal to the one of Xi. If any of them has * parent the parent of Xi (this comprises the parent itself), we * can safely skip most intermediate node along the branch and * skip directly to the top to start our search. */ { int parent = er [i] .parent ; int curr = er [parent] .shortcut ; er [parent] .shortcut = VL_MAX (top, curr) ; } } /* ----------------------------------------------------------------- * Select maximally stable branches * -------------------------------------------------------------- */ nmer = ner ; for(i = 0 ; i < ner ; ++i) { vl_uint parent = er [i ] .parent ; vl_mser_pix val = er [i ] .value ; float var = er [i ] .variation ; vl_mser_pix p_val = er [parent] .value ; float p_var = er [parent] .variation ; vl_uint loser ; /* Notice that R_parent = R_{l+1} only if p_val = val + 1. If not, this and the parent region coincide and there is nothing to do. */ if(p_val > val + 1) continue ; /* decide which one to keep and put that in loser */ if(var < p_var) loser = parent ; else loser = i ; /* make loser NON maximally stable */ if(er [loser] .max_stable) { -- nmer ; er [loser] .max_stable = 0 ; } } f-> stats. num_unstable = ner - nmer ; /* ----------------------------------------------------------------- * Further filtering * -------------------------------------------------------------- */ /* It is critical for correct duplicate detection to remove regions * from the bottom (smallest one first). */ { float max_area = (float) f-> max_area * nel ; float min_area = (float) f-> min_area * nel ; float max_var = (float) f-> max_variation ; float min_div = (float) f-> min_diversity ; /* scan all extremal regions (intensity value order) */ for(i = ner-1 ; i >= 0L ; --i) { /* process only maximally stable extremal regions */ if (! er [i] .max_stable) continue ; if (er [i] .variation >= max_var ) { ++ nbad ; goto remove ; } if (er [i] .area > max_area) { ++ nbig ; goto remove ; } if (er [i] .area < min_area) { ++ nsmall ; goto remove ; } /* * Remove duplicates */ if (min_div < 1.0) { vl_uint parent = er [i] .parent ; int area, p_area ; float div ; /* check all but the root mser */ if((int) parent != i) { /* search for the maximally stable parent region */ while(! er [parent] .max_stable) { vl_uint next = er [parent] .parent ; if(next == parent) break ; parent = next ; } /* Compare with the parent region; if the current and parent * regions are too similar, keep only the parent. */ area = er [i] .area ; p_area = er [parent] .area ; div = (float) (p_area - area) / (float) p_area ; if (div < min_div) { ++ ndup ; goto remove ; } } /* remove dups end */ } continue ; remove : er [i] .max_stable = 0 ; -- nmer ; } /* check next region */ f-> stats .num_abs_unstable = nbad ; f-> stats .num_too_big = nbig ; f-> stats .num_too_small = nsmall ; f-> stats .num_duplicates = ndup ; } /* ----------------------------------------------------------------- * Save the result * -------------------------------------------------------------- */ /* make room */ if (f-> rmer < nmer) { if (mer) vl_free (mer) ; f->mer = mer = vl_malloc( sizeof(vl_uint) * nmer) ; f->rmer = nmer ; } /* save back */ f-> nmer = nmer ; j = 0 ; for (i = 0 ; i < ner ; ++i) { if (er [i] .max_stable) mer [j++] = er [i] .index ; } } /** ------------------------------------------------------------------- ** @brief Fit ellipsoids ** ** @param f MSER filter. ** ** @sa @ref mser-ell **/ VL_EXPORT void vl_mser_ell_fit (VlMserFilt* f) { /* shortcuts */ int nel = f-> nel ; int dof = f-> dof ; int *dims = f-> dims ; int ndims = f-> ndims ; int *subs = f-> subs ; int njoins = f-> njoins ; vl_uint *joins = f-> joins ; VlMserReg *r = f-> r ; vl_uint *mer = f-> mer ; int nmer = f-> nmer ; vl_mser_acc *acc = f-> acc ; vl_mser_acc *ell = f-> ell ; int d, index, i, j ; /* already fit ? */ if (f->nell == f->nmer) return ; /* make room */ if (f->rell < f->nmer) { if (f->ell) vl_free (f->ell) ; f->ell = vl_malloc (sizeof(float) * f->nmer * f->dof) ; f->rell = f-> nmer ; } if (f->acc == 0) { f->acc = vl_malloc (sizeof(float) * f->nel) ; } acc = f-> acc ; ell = f-> ell ; /* ----------------------------------------------------------------- * Integrate moments * -------------------------------------------------------------- */ /* for each dof */ for(d = 0 ; d < f->dof ; ++d) { /* start from the upper-left pixel (0,0,...,0) */ memset (subs, 0, sizeof(int) * ndims) ; /* step 1: fill acc pretending that each region has only one pixel */ if(d < ndims) { /* 1-order ................................................... */ for(index = 0 ; index < nel ; ++ index) { acc [index] = subs [d] ; adv(ndims, dims, subs) ; } } else { /* 2-order ................................................... */ /* map the dof d to a second order moment E[x_i x_j] */ i = d - ndims ; j = 0 ; while(i > j) { i -= j + 1 ; j ++ ; } /* initialize acc with x_i * x_j */ for(index = 0 ; index < nel ; ++ index){ acc [index] = subs [i] * subs [j] ; adv(ndims, dims, subs) ; } } /* step 2: integrate */ for(i = 0 ; i < njoins ; ++i) { vl_uint index = joins [i] ; vl_uint parent = r [index] .parent ; acc [parent] += acc [index] ; } /* step 3: save back to ellpises */ for(i = 0 ; i < nmer ; ++i) { vl_uint idx = mer [i] ; ell [d + dof*i] = acc [idx] ; } } /* next dof */ /* ----------------------------------------------------------------- * Compute central moments * -------------------------------------------------------------- */ for(index = 0 ; index < nmer ; ++index) { float *pt = ell + index * dof ; vl_uint idx = mer [index] ; float area = r [idx] .area ; for(d = 0 ; d < dof ; ++d) { pt [d] /= area ; if(d >= ndims) { /* remove squared mean from moment to get variance */ i = d - ndims ; j = 0 ; while(i > j) { i -= j + 1 ; j ++ ; } pt [d] -= pt [i] * pt [j] ; } } } /* save back */ f-> nell = nmer ; } vlfeat/vl/ikmeans_elkan.tc0000644000175000017500000002363512237004736014534 0ustar dimadima/** @file ikmeans_elkan.tc ** @brief Integer K-Means - Elkan Algorithm - Definition ** @author Andrea Vedaldi **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @internal ** Square root of an integer value ** ** @author Jim Ulery **/ static unsigned long isqrt(unsigned long val) { unsigned long temp, g=0, b = 0x8000, bshft = 15; do { if (val >= (temp = (((g << 1) + b)<>= 1); return g; } /** @internal ** ** Update inter cluster distance table. **/ static void vl_ikm_elkan_update_inter_dist (VlIKMFilt *f) { int i, k, kp, K = f-> K, M = f-> M ; vl_ikm_acc dist, delta ; /* inter cluster distances */ for(k = 0 ; k < K ; ++ k) { for(kp = 0 ; kp < K ; ++ kp) { dist = 0 ; if (k != kp) { for(i = 0 ; i < M ; ++i) { delta = f->centers [kp*M + i] - f->centers [k*M + i] ; dist += delta * delta ; } } f->inter_dist [k*K + kp] = f->inter_dist [kp*K + k] = dist >> 2 ; } } } /** @internal ** @brief Helper function to initialize filter for Triangle algorithm ** @param f filter. **/ static void vl_ikm_init_elkan (VlIKMFilt *f) { if (f-> inter_dist) { vl_free (f-> inter_dist) ; } f-> inter_dist = vl_malloc (sizeof(vl_ikm_acc) * f->K*f->K) ; vl_ikm_elkan_update_inter_dist (f) ; } /** @internal ** @brief Elkan algorithm ** @param f IKM quantizer. ** @param data Data to quantize. ** @param N Number of data elements. **/ static int vl_ikm_train_elkan (VlIKMFilt* f, vl_uint8 const* data, int N) { /* REMARK !! All distances are squared !! */ int i,pass,c,cp,x,cx ; int dist_calc = 0 ; int K = f-> K, M = f-> M ; vl_ikm_acc dist ; vl_ikm_acc *m_pt = vl_malloc(sizeof(vl_ikm_acc)* M*K) ; /* new centers (temp) */ vl_ikm_acc *u_pt = vl_malloc(sizeof(vl_ikm_acc)* N) ; /* upper bound (may str) */ char *r_pt = vl_malloc(sizeof(char) * 1*N) ; /* flag: u is strict */ vl_ikm_acc *s_pt = vl_malloc(sizeof(vl_ikm_acc)* K) ; /* min cluster dist. */ vl_ikm_acc *l_pt = vl_malloc(sizeof(vl_ikm_acc)* N*K) ; /* lower bound */ vl_ikm_acc *d_pt = f-> inter_dist ; /* half inter clst dist */ vl_uint *asgn = vl_malloc (sizeof(vl_uint) * N) ; vl_uint *counts=vl_malloc (sizeof(vl_uint) * N) ; int done = 0 ; /* do passes */ vl_ikm_elkan_update_inter_dist (f) ; /* init */ memset(l_pt, 0, sizeof(vl_ikm_acc) * N*K ) ; memset(u_pt, 0, sizeof(vl_ikm_acc) * N ) ; memset(r_pt, 0, sizeof(char) * N ) ; for(x = 0 ; x < N ; ++x) { vl_ikm_acc best_dist ; /* do first cluster `by hand' */ dist_calc ++ ; for(dist = 0, i = 0 ; i < M ; ++i) { vl_ikm_acc delta = data[x*M + i] - f->centers[i] ; dist += delta*delta ; } cx = 0 ; best_dist = dist ; l_pt[x] = dist ; /* do other clusters */ for(c = 1 ; c < K ; ++c) { if(d_pt[K*cx+c] < best_dist) { /* might need to be updated */ dist_calc++ ; for(dist=0, i = 0 ; i < M ; ++i) { vl_ikm_acc delta = data[x*M + i] - f->centers[c*M + i] ; dist += delta*delta ; } /* lower bound */ l_pt[N*c + x] = dist ; if(dist < best_dist) { best_dist = dist ; cx = c ; } } } asgn[x] = cx ; u_pt[x] = best_dist ; } /* -------------------------------------------------------------------- * Passes * ------------------------------------------------------------------ */ for (pass = 0 ; 1 ; ++ pass) { /* ------------------------------------------------------------------ * Re-calculate means * ---------------------------------------------------------------- */ memset(m_pt, 0, sizeof(vl_ikm_acc) * M * K) ; memset(counts, 0, sizeof(vl_ikm_acc) * K) ; /* accumulate */ for(x = 0 ; x < N ; ++x) { int cx = asgn[x] ; ++ counts[ cx ] ; for(i = 0 ; i < M ; ++i) { m_pt[cx*M + i] += data[x*M + i] ; } } /* normalize */ for(c = 0 ; c < K ; ++c) { vl_ikm_acc n = counts[c] ; if(n > 0) { for(i = 0 ; i < M ; ++i) { m_pt[c*M + i] /= n ; } } else { for(i = 0 ; i < M ; ++i) { /*m_pt[c*M + i] = data[pairs_pt[c].j*M + i] ;*/ } } } /* ------------------------------------------------------------------ * Update bounds * --------------------------------------------------------------- */ for(c = 0 ; c < K ; ++c) { /* distance d(m(c),c) and update c */ dist_calc++ ; for(dist = 0, i = 0 ; i < M ; ++i) { vl_ikm_acc delta = m_pt[c*M + i] - f->centers[c*M + i] ; f->centers[c*M + i] = m_pt[c*M +i] ; dist += delta*delta ; } for(x = 0 ; x < N ; ++x) { vl_ikm_acc lxc = l_pt[c*N + x] ; int cx = (int) asgn[x] ; /* lower bound */ if(dist < lxc) { lxc = (vl_ikm_acc) (lxc + dist - 2*(isqrt(lxc)+1)*(isqrt(dist)+1)) ; } else { lxc = 0 ; } l_pt[c*N + x] = lxc ; /* upper bound */ if(c == cx) { vl_ikm_acc ux = u_pt[x] ; u_pt[x] = (vl_ikm_acc) (ux + dist + 2 * (isqrt(ux)+1)*(isqrt(dist)+1)) ; r_pt[x] = 1 ; } } } /* inter cluster distances */ for(c = 0 ; c < K ; ++c) { for(cp = 0 ; cp < K ; ++cp) { dist = 0 ; if( c != cp ) { dist_calc++; for(i = 0 ; i < M ; ++i) { vl_ikm_acc delta = f->centers[ cp*M + i ] - f->centers[ c*M + i ] ; dist += delta*delta ; } } d_pt[c*K+cp] = d_pt[cp*K+c] = dist>>2 ; } } /* closest cluster distance */ for(c = 0 ; c < K ; ++c) { vl_ikm_acc best_dist = VL_BIG_INT ; for(cp = 0 ; cp < K ; ++cp) { dist = d_pt[c*K+cp] ; if(c != cp && dist < best_dist) best_dist = dist ; } s_pt[c] = best_dist >> 2 ; } /* ------------------------------------------------------------------ * Assign data to centers * ---------------------------------------------------------------- */ done = 1 ; for(x=0 ; x < N ; ++x) { int cx = (int) asgn[x] ; vl_ikm_acc ux = u_pt[x] ; /* ux is an upper bound of the distance of x to its current center cx. s_pt[cx] is half of the minum distance between the cluster cx and any other cluster center. If ux <= s_pt[cx] then x remains attached to cx. */ if(ux <= s_pt[cx]) continue ; for(c = 0 ; c < K ; ++c) { vl_ikm_acc dist = 0 ; /* so x might need to be re-associated from cx to c. We can exclude c if 1 - cx = c (trivial) or 2 - u(x) <= l(x,c) as this implies d(x,cx) <= d(x,c) or 3 - u(x) <= d(cx,c)/2 as this implies d(x,cx) <= d(x,c). */ if(c == cx || ux <= l_pt[N*c + x] || ux <= d_pt[K*c + cx] ) continue ; /* we need to make a true comparison */ /* if u_pt[x] is stale (i.e. not strictly equal to d(x,cx)), then re-calcualte it. */ if( r_pt[x] ) { dist_calc++; for(dist = 0, i = 0 ; i < M ; ++i) { vl_ikm_acc delta = data[ x*M + i ] - f->centers[ cx*M + i ] ; dist += delta*delta ; } ux = u_pt[x] = dist ; r_pt[x] = 0 ; /* now that u_pt[x] is updated, we check the conditions again */ if( ux <= l_pt[N*c + x] || ux <= d_pt[K*c + cx] ) continue ; } /* no way... we need to compute the distance d(x,c) */ dist_calc++ ; for(dist = 0, i = 0 ; i < M ; ++i) { vl_ikm_acc delta = data[ x*M + i ] - f->centers[ c*M + i ] ; dist += delta*delta ; } l_pt[N*c + x] = dist ; if( dist < ux ) { ux = u_pt[x] = dist ; /* r_pt[x] already 0 */ asgn[x] = c ; done = 0 ; } } } /* next data point */ /* stopping condition */ if(done || pass == f->max_niters) { break ; } } vl_free (counts) ; vl_free (asgn) ; vl_free (l_pt) ; vl_free (s_pt) ; vl_free (r_pt) ; vl_free (u_pt) ; vl_free (m_pt) ; if (f-> verb) { VL_PRINTF ("ikm: Elkan algorithm: total iterations: %d\n", pass) ; VL_PRINTF ("ikm: Elkan algorithm: distance calculations: %d (speedup: %.2f)\n", dist_calc, (float)N*K*(pass+2) / dist_calc -1) ; } return 0 ; } /** @internal ** @brief Elkan algorithm ** @param f IKM quantizer. ** @param asgn Assignment of data to centers (out). ** @param data Data to quantize. ** @param N Number of data elements. **/ static void vl_ikm_push_elkan (VlIKMFilt *f, vl_uint *asgn, vl_uint8 const *data, int N) { vl_uint i,c,cx,x, dist_calc = 0, K = f-> K, M = f-> M ; vl_ikm_acc dist, best_dist ; vl_ikm_acc *d_pt = f-> inter_dist ; /* assign data to centers */ for(x=0 ; x < (vl_uint)N ; ++x) { best_dist = VL_BIG_INT ; cx = 0 ; for(c = 0 ; c < K ; ++c) { if(d_pt[K*cx+c] < best_dist) { /* might need to be updated */ dist_calc ++ ; for(dist=0, i = 0 ; i < M ; ++i) { vl_ikm_acc delta = data[x*M + i] - f->centers[c*M + i] ; dist += delta*delta ; } /* u_pt is strict at the beginning */ if(dist < best_dist) { best_dist = dist ; cx = c ; } } } asgn [x] = cx ; } } /* * Local Variables: * * mode: C * * End: * */ vlfeat/vl/vlad.h0000644000175000017500000000240412237004745012471 0ustar dimadima/** @file vlad.h ** @brief VLAD encoding (@ref vlad) ** @author David Novotny ** @author Andrea Vedaldi ** @see @ref vlad **/ /* Copyright (C) 2013 David Novotny and Andera Vedaldi. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_VLAD_H #define VL_VLAD_H #include "generic.h" /** @name VLAD options ** @{ */ #define VL_VLAD_FLAG_NORMALIZE_COMPONENTS (0x1 << 0) #define VL_VLAD_FLAG_SQUARE_ROOT (0x1 << 1) #define VL_VLAD_FLAG_UNNORMALIZED (0x1 << 2) #define VL_VLAD_FLAG_NORMALIZE_MASS (0x1 << 3) /** @def VL_VLAD_FLAG_NORMALIZE_COMPONENTS ** @brief Normalize each VLAD component individually. **/ /** @def VL_VLAD_FLAG_SQUARE_ROOT ** @brief Use signed squared-root. **/ /** @def VL_VLAD_FLAG_UNNORMALIZED ** @brief Do not globally normalize the VLAD descriptor. **/ /** @def VL_VLAD_FLAG_NORMALIZE_MASS ** @brief Normalize each component by the number of features assigned to it. **/ /** @} */ VL_EXPORT void vl_vlad_encode (void * enc, vl_type dataType, void const * means, vl_size dimension, vl_size numClusters, void const * data, vl_size numData, void const * assignments, int flags) ; /* VL_VLAD_H */ #endif vlfeat/vl/kmeans.c0000644000175000017500000021351012237004745013016 0ustar dimadima/** @file kmeans.c ** @brief K-means - Declaration ** @author Andrea Vedaldi, David Novotny **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. Copyright (C) 2013 Andrea Vedaldi and David Novotny. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ /** @page kmeans K-means clustering @author Andrea Vedaldi @author David Novotny @tableofcontents @ref kmeans.h implements a number of algorithm for **K-means quantization**: Lloyd @cite{lloyd82least}, an accelerated version by Elkan @cite{elkan03using}, and a large scale algorithm based on Approximate Nearest Neighbors (ANN). All algorithms support @c float or @c double data and can use the $l^1$ or the $l^2$ distance for clustering. Furthermore, all algorithms can take advantage of multiple CPU cores. Please see @subpage kmeans-fundamentals for a technical description of K-means and of the algorithms implemented here. @section kmeans-starting Getting started The goal of K-means is to partition a dataset into $K$ “compact” clusters. The following example demonstrates using @ref kmeans.h in the C programming language to partition @c numData @c float vectors into compute @c numCenters clusters using Lloyd's algorithm: @code #include double energy ; double * centers ; // Use float data and the L2 distance for clustering KMeans * kmeans = vl_kmeans_new (VLDistanceL2, VL_TYPE_FLOAT) ; // Use Lloyd algorithm vl_kmeans_set_algorithm (kmeans, VlKMeansLloyd) ; // Initialize the cluster centers by randomly sampling the data vl_kmeans_init_centers_with_rand_data (kmeans, data, dimension, numData, numCenters) ; // Run at most 100 iterations of cluster refinement using Lloyd algorithm vl_kmeans_set_max_num_iterations (kmeans, 100) ; vl_kmeans_refine_centers (kmeans, data, numData) ; // Obtain the energy of the solution energy = vl_kmeans_get_energy(kmeans) ; // Obtain the cluster centers centers = vl_kmeans_get_centers(kmeans) ; @endcode Once the centers have been obtained, new data points can be assigned to clusters by using the ::vl_kmeans_quantize function: @code vl_uint32 * assignments = vl_malloc(sizeof(vl_uint32) * numData) ; float * distances = vl_malloc(sizeof(float) * numData) ; vl_kmeans_quantize(kmeans, assignments, distances, data, numData) ; @endcode Alternatively, one can directly assign new pointers to the closest centers, without bothering with a ::VlKMeans object. There are several considerations that may impact the performance of KMeans. First, since K-means is usually based local optimization algorithm, the **initialization method** is important. The following initialization methods are supported: Method | Function | Description ---------------|-----------------------------------------|----------------------------------------------- Random samples | ::vl_kmeans_init_centers_with_rand_data | Random data points K-means++ | ::vl_kmeans_init_centers_plus_plus | Random selection biased towards diversity Custom | ::vl_kmeans_set_centers | Choose centers (useful to run quantization only) See @ref kmeans-init for further details. The initialization methods use a randomized selection of the data points; the random number generator init is controlled by ::vl_rand_init. The second important choice is the **optimization algorithm**. The following optimization algorithms are supported: Algorithm | Symbol | See | Description ------------|------------------|-------------------|----------------------------------------------- Lloyd | ::VlKMeansLloyd | @ref kmeans-lloyd | Alternate EM-style optimization Elkan | ::VlKMeansElkan | @ref kmeans-elkan | A speedup using triangular inequalities ANN | ::VlKMeansANN | @ref kmeans-ann | A speedup using approximated nearest neighbors See the relative sections for further details. These algorithm are iterative, and stop when either a **maximum number of iterations** (::vl_kmeans_set_max_num_iterations) is reached, or when the energy changes sufficiently slowly in one iteration (::vl_kmeans). All the three algorithms support multithreaded computations. The number of threads used is usually controlled globally by ::vl_set_num_threads. **/ /** @page kmeans-fundamentals K-means fundamentals @tableofcontents Given $n$ points $\bx_1,\dots,\bx_n \in \real^d$, the goal of K-means is find $K$ `centers` $\bc_1,\dots,\bc_m \in \real^d$ and `assignments` $q_1,\dots,q_n \in \{1,\dots,K\}$ of the points to the centers such that the sum of distances \[ E(\bc_1,\dots,\bc_k,q_1,\dots,q_n) = \sum_{i=1}^n \|\bx_i - \bc_{q_i} \|_p^p \] is minimized. $K$-means is obtained for the case $p=2$ ($l^2$ norm), because in this case the optimal centers are the means of the input vectors assigned to them. Here the generalization $p=1$ ($l^1$ norm) will also be considered. Up to normalization, the K-means objective $E$ is also the average reconstruction error if the original points are approximated with the cluster centers. Thus K-means is used not only to group the input points into cluster, but also to `quantize` their values. K-means is widely used in computer vision, for example in the construction of vocabularies of visual features (visual words). In these applications the number $n$ of points to cluster and/or the number $K$ of clusters is often large. Unfortunately, minimizing the objective $E$ is in general a difficult combinatorial problem, so locally optimal or approximated solutions are sought instead. The basic K-means algorithm alternate between re-estimating the centers and the assignments (@ref kmeans-lloyd). Combined with a good initialization strategy (@ref kmeans-init) and, potentially, by re-running the optimization from a number of randomized starting states, this algorithm may attain satisfactory solutions in practice. However, despite its simplicity, Lloyd's algorithm is often too slow. A good replacement is Elkan's algorithm (@ref kmeans-elkan), which uses the triangular inequality to cut down significantly the cost of Lloyd's algorithm. Since this algorithm is otherwise equivalent, it should often be preferred. For very large problems (millions of point to clusters and hundreds, thousands, or more clusters to find), even Elkan's algorithm is not sufficiently fast. In these cases, one can resort to a variant of Lloyd's algorithm that uses an approximated nearest neighbors routine (@ref kmeans-ann). @section kmeans-init Initialization methods All the $K$-means algorithms considered here find locally optimal solutions; as such the way they are initialized is important. @ref kmeans.h supports the following initialization algorithms: @par Random data samples The simplest initialization method is to sample $K$ points at random from the input data and use them as initial values for the cluster centers. @par K-means++ @cite{arthur07k-means} proposes a randomized initialization of the centers which improves upon random selection. The first center $\bc_1$ is selected at random from the data points $\bx_1, \dots, \bx_n $ and the distance from this center to all points $\|\bx_i - \bc_1\|_p^p$ is computed. Then the second center $\bc_2$ is selected at random from the data points with probability proportional to the distance. The procedure is repeated to obtain the other centers by using the minimum distance to the centers collected so far. @section kmeans-lloyd Lloyd's algorithm The most common K-means method is Lloyd's algorithm @cite{lloyd82least}. This algorithm is based on the observation that, while jointly optimizing clusters and assignment is difficult, optimizing one given the other is easy. Lloyd's algorithm alternates the steps: 1. **Quantization.** Each point $\bx_i$ is reassigned to the center $\bc_{q_j}$ closer to it. This requires finding for each point the closest among $K$ other points, which is potentially slow. 2. **Center estimation.** Each center $\bc_q$ is updated to minimize its average distances to the points assigned to it. It is easy to show that the best center is the mean or median of the points, respectively if the $l^2$ or $l^1$ norm is considered. A naive implementation of the assignment step requires $O(dnK)$ operations, where $d$ is the dimensionality of the data, $n$ the number of data points, and $K$ the number of centers. Updating the centers is much cheaper: $O(dn)$ operations suffice to compute the $K$ means and a slightly higher cost is required for the medians. Clearly, the bottleneck is the assignment computation, and this is what the other K-means algorithm try to improve. During the iterations, it can happen that a cluster becomes empty. In this case, K-means automatically **“restarts” the cluster** center by selecting a training point at random. @section kmeans-elkan Elkan's algorithm Elkan's algorithm @cite{elkan03using} is a variation of Lloyd alternate optimization algorithm (@ref kmeans-lloyd) that uses the triangular inequality to avoid many distance calculations when assigning points to clusters. While much faster than Lloyd, Elkan's method uses storage proportional to the umber of clusters by data points, which makes it unpractical for a very large number of clusters. The idea of this algorithm is that, if a center update does not move them much, then most of the point-to-center computations can be avoided when the point-to-center assignments are recomputed. To detect which distances need evaluation, the triangular inequality is used to lower and upper bound distances after a center update. Elkan algorithms uses two key observations. First, one has \[ \|\bx_i - \bc_{q_i}\|_p \leq \|\bc - \bc_{q_i}\|_p / 2 \quad\Rightarrow\quad \|\bx_i - \bc_{q_i}\|_p \leq \|\bx_i - \bc\|_p. \] Thus if the distance between $\bx_i$ and its current center $\bc_{q_i}$ is less than half the distance of the center $\bc_{q_i}$ to another center $\bc$, then $\bc$ can be skipped when the new assignment for $\bx_i$ is searched. Checking this requires keeping track of all the inter-center distances, but centers are typically a small fraction of the training data, so overall this can be a significant saving. In particular, if this condition is satisfied for all the centers $\bc \not= \bc_{q_i}$, the point $\bx_i$ can be skipped completely. Furthermore, the condition can be tested also based on an upper bound $UB_i$ of $\|\bx_i - \bc_{q_i}\|_p$. Second, if a center $\bc$ is updated to $\hat{\bc}$, then the new distance from $\bx$ to $\hat{\bc}$ is bounded from below and above by \[ \|\bx - \bc\|_p - \|bc - \hat\bc\|_p \leq \|\bx - \hat{\bc}\|_p \leq \|\bx - \hat{\bc}\|_p + \|\bc + \hat{\bc}\|_p. \] This allows to maintain an upper bound on the distance of $\bx_i$ to its current center $\bc_{q_i}$ and a lower bound to any other center $\bc$: @f{align*} UB_i & \leftarrow UB_i + \|\bc_{q_i} - \hat{\bc}_{q_i} \|_p \\ LB_i(\bc) & \leftarrow LB_i(\bc) - \|\bc -\hat \bc\|_p. @f} Thus the K-means algorithm becomes: 1. **Initialization.** Compute $LB_i(\bc) = \|\bx_i -\hat \bc\|_p$ for all points and centers. Find the current assignments $q_i$ and bounds $UB_i$ by finding the closest centers to each point: $UB_i = \min_{\bc} LB_i(\bc)$. 2. **Center estimation.** 1. Recompute all the centers based on the new means; call the updated version $\hat{\bc}$. 2. Update all the bounds based on the distance $\|\bc - \hat\bc\|_p$ as explained above. 3. Set $\bc \leftarrow \hat\bc$ for all the centers and go to the next iteration. 3. **Quantization.** 1. Skip any point $\bx_i$ such that $UB_i \leq \frac{1}{2} \|\bc_{q_i} - \bc\|_p$ for all centers $\bc \not= \bc_{q_i}$. 2. For each remaining point $\bx_i$ and center $\bc \not= \bc_{q_i}$: 1. Skip $\bc$ if \[ UB_i \leq \frac{1}{2} \| \bc_{q_i} - \bc \| \quad\text{or}\quad UB_i \leq LB_i(\bc). \] The first condition reflects the first observation above; the second uses the bounds to decide if $\bc$ can be closer than the current center $\bc_{q_i}$ to the point $\bx_i$. If the center cannot be skipped, continue as follows. 3. Skip $\bc$ if the condition above is satisfied after making the upper bound tight: \[ UB_i = LB_i(\bc_{q_i}) = \| \bx_i - \bc_{q_i} \|_p. \] Note that the latter calculation can be done only once for $\bx_i$. If the center cannot be skipped still, continue as follows. 4. Tighten the lower bound too: \[ LB_i(\bc) = \| \bx_i - \bc \|_p. \] At this point both $UB_i$ and $LB_i(\bc)$ are tight. If $LB_i < UB_i$, then the point $\bx_i$ should be reassigned to $\bc$. Update $q_i$ to the index of center $\bc$ and reset $UB_i = LB_i(\bc)$. @section kmeans-ann ANN algorithm The *Approximate Nearest Neighbor* (ANN) K-means algorithm @cite{beis97shape} @cite{silpa-anan08optimised} @cite{muja09fast} is a variant of Lloyd's algorithm (@ref kmeans-lloyd) uses a best-bin-first randomized KD-tree algorithm to approximately (and quickly) find the closest cluster center to each point. The KD-tree implementation is based on @ref kdtree. The algorithm can be summarized as follows: 1. **Quantization.** Each point $\bx_i$ is reassigned to the center $\bc_{q_j}$ closer to it. This starts by indexing the $K$ centers by a KD-tree and then using the latter to quickly find the closest center for every training point. The search is approximated to further improve speed. This opens up the possibility that a data point may receive an assignment that is *worse* than the current one. This is avoided by checking that the new assignment estimated by using ANN is an improvement; otherwise the old assignment is kept. 2. **Center estimation.** Each center $\bc_q$ is updated to minimize its average distances to the points assigned to it. It is easy to show that the best center is the mean or median of the points, respectively if the $l^2$ or $l^1$ norm is considered. The key is to trade-off carefully the speedup obtained by using the ANN algorithm and the loss in accuracy when retrieving neighbors. Due to the curse of dimensionality, KD-trees become less effective for higher dimensional data, so that the search cost, which in the best case is logarithmic with this data structure, may become effectively linear. This is somehow mitigated by the fact that new a new KD-tree is computed at each iteration, reducing the likelihood that points may get stuck with sub-optimal assignments. Experiments with the quantization of 128-dimensional SIFT features show that the ANN algorithm may use one quarter of the comparisons of Elkan's while retaining a similar solution accuracy. */ #include "kmeans.h" #include "generic.h" #include "mathop.h" #include #ifdef _OPENMP #include #endif /* ================================================================ */ #ifndef VL_KMEANS_INSTANTIATING /** ------------------------------------------------------------------ ** @brief Reset state ** ** The function reset the state of the KMeans object. It deletes ** any stored centers, releasing the corresponding memory. This ** cancels the effect of seeding or setting the centers, but ** does not change the other configuration parameters. **/ VL_EXPORT void vl_kmeans_reset (VlKMeans * self) { self->numCenters = 0 ; self->dimension = 0 ; if (self->centers) vl_free(self->centers) ; if (self->centerDistances) vl_free(self->centerDistances) ; self->centers = NULL ; self->centerDistances = NULL ; } /** ------------------------------------------------------------------ ** @brief Create a new KMeans object ** @param dataType type of data (::VL_TYPE_FLOAT or ::VL_TYPE_DOUBLE) ** @param distance distance. ** @return new KMeans object instance. **/ VL_EXPORT VlKMeans * vl_kmeans_new (vl_type dataType, VlVectorComparisonType distance) { VlKMeans * self = vl_calloc(1, sizeof(VlKMeans)) ; self->algorithm = VlKMeansLloyd ; self->distance = distance ; self->dataType = dataType ; self->verbosity = 0 ; self->maxNumIterations = 100 ; self->numRepetitions = 1 ; self->centers = NULL ; self->centerDistances = NULL ; self->numTrees = 3; self->maxNumComparisons = 100; vl_kmeans_reset (self) ; return self ; } /** ------------------------------------------------------------------ ** @brief Create a new KMeans object by copy ** @param kmeans KMeans object to copy. ** @return new copy. **/ VL_EXPORT VlKMeans * vl_kmeans_new_copy (VlKMeans const * kmeans) { VlKMeans * self = vl_malloc(sizeof(VlKMeans)) ; self->algorithm = kmeans->algorithm ; self->distance = kmeans->distance ; self->dataType = kmeans->dataType ; self->verbosity = kmeans->verbosity ; self->maxNumIterations = kmeans->maxNumIterations ; self->numRepetitions = kmeans->numRepetitions ; self->dimension = kmeans->dimension ; self->numCenters = kmeans->numCenters ; self->centers = NULL ; self->centerDistances = NULL ; self->numTrees = kmeans->numTrees; self->maxNumComparisons = kmeans->maxNumComparisons; if (kmeans->centers) { vl_size dataSize = vl_get_type_size(self->dataType) * self->dimension * self->numCenters ; self->centers = vl_malloc(dataSize) ; memcpy (self->centers, kmeans->centers, dataSize) ; } if (kmeans->centerDistances) { vl_size dataSize = vl_get_type_size(self->dataType) * self->numCenters * self->numCenters ; self->centerDistances = vl_malloc(dataSize) ; memcpy (self->centerDistances, kmeans->centerDistances, dataSize) ; } return self ; } /** ------------------------------------------------------------------ ** @brief Deletes a KMeans object ** @param self KMeans object instance. ** ** The function deletes the KMeans object instance created ** by ::vl_kmeans_new. **/ VL_EXPORT void vl_kmeans_delete (VlKMeans * self) { vl_kmeans_reset (self) ; vl_free (self) ; } /* an helper structure */ typedef struct _VlKMeansSortWrapper { vl_uint32 * permutation ; void const * data ; vl_size stride ; } VlKMeansSortWrapper ; /* ---------------------------------------------------------------- */ /* Instantiate shuffle algorithm */ #define VL_SHUFFLE_type vl_uindex #define VL_SHUFFLE_prefix _vl_kmeans #include "shuffle-def.h" /* #ifdef VL_KMEANS_INSTANTITATING */ #endif /* ================================================================ */ #ifdef VL_KMEANS_INSTANTIATING /* ---------------------------------------------------------------- */ /* Set centers */ /* ---------------------------------------------------------------- */ static void VL_XCAT(_vl_kmeans_set_centers_, SFX) (VlKMeans * self, TYPE const * centers, vl_size dimension, vl_size numCenters) { self->dimension = dimension ; self->numCenters = numCenters ; self->centers = vl_malloc (sizeof(TYPE) * dimension * numCenters) ; memcpy ((TYPE*)self->centers, centers, sizeof(TYPE) * dimension * numCenters) ; } /* ---------------------------------------------------------------- */ /* Random seeding */ /* ---------------------------------------------------------------- */ static void VL_XCAT(_vl_kmeans_init_centers_with_rand_data_, SFX) (VlKMeans * self, TYPE const * data, vl_size dimension, vl_size numData, vl_size numCenters) { vl_uindex i, j, k ; VlRand * rand = vl_get_rand () ; self->dimension = dimension ; self->numCenters = numCenters ; self->centers = vl_malloc (sizeof(TYPE) * dimension * numCenters) ; { vl_uindex * perm = vl_malloc (sizeof(vl_uindex) * numData) ; #if (FLT == VL_TYPE_FLOAT) VlFloatVectorComparisonFunction distFn = vl_get_vector_comparison_function_f(self->distance) ; #else VlDoubleVectorComparisonFunction distFn = vl_get_vector_comparison_function_d(self->distance) ; #endif TYPE * distances = vl_malloc (sizeof(TYPE) * numCenters) ; /* get a random permutation of the data point */ for (i = 0 ; i < numData ; ++i) perm[i] = i ; _vl_kmeans_shuffle (perm, numData, rand) ; for (k = 0, i = 0 ; k < numCenters ; ++ i) { /* compare the next data point to all centers collected so far to detect duplicates (if there are enough left) */ if (numCenters - k < numData - i) { vl_bool duplicateDetected = VL_FALSE ; VL_XCAT(vl_eval_vector_comparison_on_all_pairs_, SFX)(distances, dimension, data + dimension * perm[i], 1, (TYPE*)self->centers, k, distFn) ; for (j = 0 ; j < k ; ++j) { duplicateDetected |= (distances[j] == 0) ; } if (duplicateDetected) continue ; } /* ok, it is not a duplicate so we can accept it! */ memcpy ((TYPE*)self->centers + dimension * k, data + dimension * perm[i], sizeof(TYPE) * dimension) ; k ++ ; } vl_free(distances) ; vl_free(perm) ; } } /* ---------------------------------------------------------------- */ /* kmeans++ seeding */ /* ---------------------------------------------------------------- */ static void VL_XCAT(_vl_kmeans_init_centers_plus_plus_, SFX) (VlKMeans * self, TYPE const * data, vl_size dimension, vl_size numData, vl_size numCenters) { vl_uindex x, c ; VlRand * rand = vl_get_rand () ; TYPE * distances = vl_malloc (sizeof(TYPE) * numData) ; TYPE * minDistances = vl_malloc (sizeof(TYPE) * numData) ; #if (FLT == VL_TYPE_FLOAT) VlFloatVectorComparisonFunction distFn = vl_get_vector_comparison_function_f(self->distance) ; #else VlDoubleVectorComparisonFunction distFn = vl_get_vector_comparison_function_d(self->distance) ; #endif self->dimension = dimension ; self->numCenters = numCenters ; self->centers = vl_malloc (sizeof(TYPE) * dimension * numCenters) ; for (x = 0 ; x < numData ; ++x) { minDistances[x] = (TYPE) VL_INFINITY_D ; } /* select the first point at random */ x = vl_rand_uindex (rand, numData) ; c = 0 ; while (1) { TYPE energy = 0 ; TYPE acc = 0 ; TYPE thresh = (TYPE) vl_rand_real1 (rand) ; memcpy ((TYPE*)self->centers + c * dimension, data + x * dimension, sizeof(TYPE) * dimension) ; c ++ ; if (c == numCenters) break ; VL_XCAT(vl_eval_vector_comparison_on_all_pairs_, SFX) (distances, dimension, (TYPE*)self->centers + (c - 1) * dimension, 1, data, numData, distFn) ; for (x = 0 ; x < numData ; ++x) { minDistances[x] = VL_MIN(minDistances[x], distances[x]) ; energy += minDistances[x] ; } for (x = 0 ; x < numData - 1 ; ++x) { acc += minDistances[x] ; if (acc >= thresh * energy) break ; } } vl_free(distances) ; vl_free(minDistances) ; } /* ---------------------------------------------------------------- */ /* Quantization */ /* ---------------------------------------------------------------- */ static void VL_XCAT(_vl_kmeans_quantize_, SFX) (VlKMeans * self, vl_uint32 * assignments, TYPE * distances, TYPE const * data, vl_size numData) { vl_index i ; #ifdef _OPENMP vl_size numThreads = vl_get_max_threads() ; #endif #if (FLT == VL_TYPE_FLOAT) VlFloatVectorComparisonFunction distFn = vl_get_vector_comparison_function_f(self->distance) ; #else VlDoubleVectorComparisonFunction distFn = vl_get_vector_comparison_function_d(self->distance) ; #endif #ifdef _OPENMP #pragma omp parallel default(none) \ shared(self, distances, assignments, numData, distFn, data) \ num_threads(numThreads) #endif { /* vl_malloc cannot be used here if mapped to MATLAB malloc */ TYPE * distanceToCenters = malloc(sizeof(TYPE) * self->numCenters) ; #ifdef _OPENMP #pragma omp for #endif for (i = 0 ; i < (signed)numData ; ++i) { vl_uindex k ; TYPE bestDistance = (TYPE) VL_INFINITY_D ; VL_XCAT(vl_eval_vector_comparison_on_all_pairs_, SFX)(distanceToCenters, self->dimension, data + self->dimension * i, 1, (TYPE*)self->centers, self->numCenters, distFn) ; for (k = 0 ; k < self->numCenters ; ++k) { if (distanceToCenters[k] < bestDistance) { bestDistance = distanceToCenters[k] ; assignments[i] = (vl_uint32)k ; } } if (distances) distances[i] = bestDistance ; } free(distanceToCenters) ; } } /* ---------------------------------------------------------------- */ /* ANN quantization */ /* ---------------------------------------------------------------- */ static void VL_XCAT(_vl_kmeans_quantize_ann_, SFX) (VlKMeans * self, vl_uint32 * assignments, TYPE * distances, TYPE const * data, vl_size numData, vl_bool update) { #if (FLT == VL_TYPE_FLOAT) VlFloatVectorComparisonFunction distFn = vl_get_vector_comparison_function_f(self->distance) ; #else VlDoubleVectorComparisonFunction distFn = vl_get_vector_comparison_function_d(self->distance) ; #endif VlKDForest * forest = vl_kdforest_new(self->dataType,self->dimension,self->numTrees, self->distance) ; vl_kdforest_set_max_num_comparisons(forest,self->maxNumComparisons); vl_kdforest_set_thresholding_method(forest,VL_KDTREE_MEDIAN); vl_kdforest_build(forest,self->numCenters,self->centers); #ifdef _OPENMP #pragma omp parallel default(none) \ num_threads(vl_get_max_threads()) \ shared(self, forest, update, assignments, distances, data, numData, distFn) #endif { VlKDForestNeighbor neighbor ; VlKDForestSearcher * searcher ; vl_index x; #ifdef _OPENMP #pragma omp critical #endif searcher = vl_kdforest_new_searcher (forest) ; #ifdef _OPENMP #pragma omp for #endif for(x = 0 ; x < (signed)numData ; ++x) { vl_kdforestsearcher_query (searcher, &neighbor, 1, (TYPE const *) (data + x*self->dimension)); if (distances) { if(!update) { distances[x] = (TYPE) neighbor.distance; assignments[x] = (vl_uint32) neighbor.index ; } else { TYPE prevDist = (TYPE) distFn(self->dimension, data + self->dimension * x, (TYPE*)self->centers + self->dimension *assignments[x]); if (prevDist > (TYPE) neighbor.distance) { distances[x] = (TYPE) neighbor.distance ; assignments[x] = (vl_uint32) neighbor.index ; } else { distances[x] = prevDist ; } } } else { assignments[x] = (vl_uint32) neighbor.index ; } } /* end for */ } /* end of parallel region */ vl_kdforest_delete(forest); } /* ---------------------------------------------------------------- */ /* Helper functions */ /* ---------------------------------------------------------------- */ /* The sorting routine is used to find increasing permutation of each * data dimension. This is used to quickly find the median for l1 * distance clustering. */ VL_INLINE TYPE VL_XCAT3(_vl_kmeans_, SFX, _qsort_cmp) (VlKMeansSortWrapper * array, vl_uindex indexA, vl_uindex indexB) { return ((TYPE*)array->data) [array->permutation[indexA] * array->stride] - ((TYPE*)array->data) [array->permutation[indexB] * array->stride] ; } VL_INLINE void VL_XCAT3(_vl_kmeans_, SFX, _qsort_swap) (VlKMeansSortWrapper * array, vl_uindex indexA, vl_uindex indexB) { vl_uint32 tmp = array->permutation[indexA] ; array->permutation[indexA] = array->permutation[indexB] ; array->permutation[indexB] = tmp ; } #define VL_QSORT_prefix VL_XCAT3(_vl_kmeans_, SFX, _qsort) #define VL_QSORT_array VlKMeansSortWrapper* #define VL_QSORT_cmp VL_XCAT3(_vl_kmeans_, SFX, _qsort_cmp) #define VL_QSORT_swap VL_XCAT3(_vl_kmeans_, SFX, _qsort_swap) #include "qsort-def.h" static void VL_XCAT(_vl_kmeans_sort_data_helper_, SFX) (VlKMeans * self, vl_uint32 * permutations, TYPE const * data, vl_size numData) { vl_uindex d, x ; for (d = 0 ; d < self->dimension ; ++d) { VlKMeansSortWrapper array ; array.permutation = permutations + d * numData ; array.data = data + d ; array.stride = self->dimension ; for (x = 0 ; x < numData ; ++x) { array.permutation[x] = (vl_uint32)x ; } VL_XCAT3(_vl_kmeans_, SFX, _qsort_sort)(&array, numData) ; } } /* ---------------------------------------------------------------- */ /* Lloyd refinement */ /* ---------------------------------------------------------------- */ static double VL_XCAT(_vl_kmeans_refine_centers_lloyd_, SFX) (VlKMeans * self, TYPE const * data, vl_size numData) { vl_size c, d, x, iteration ; double previousEnergy = VL_INFINITY_D ; double energy ; TYPE * distances = vl_malloc (sizeof(TYPE) * numData) ; vl_uint32 * assignments = vl_malloc (sizeof(vl_uint32) * numData) ; vl_size * clusterMasses = vl_malloc (sizeof(vl_size) * numData) ; vl_uint32 * permutations = NULL ; vl_size * numSeenSoFar = NULL ; VlRand * rand = vl_get_rand () ; vl_size totNumRestartedCenters = 0 ; vl_size numRestartedCenters = 0 ; if (self->distance == VlDistanceL1) { permutations = vl_malloc(sizeof(vl_uint32) * numData * self->dimension) ; numSeenSoFar = vl_malloc(sizeof(vl_size) * self->numCenters) ; VL_XCAT(_vl_kmeans_sort_data_helper_, SFX)(self, permutations, data, numData) ; } for (energy = VL_INFINITY_D, iteration = 0; 1 ; ++ iteration) { /* assign data to cluters */ VL_XCAT(_vl_kmeans_quantize_, SFX)(self, assignments, distances, data, numData) ; /* compute energy */ energy = 0 ; for (x = 0 ; x < numData ; ++x) energy += distances[x] ; if (self->verbosity) { VL_PRINTF("kmeans: Lloyd iter %d: energy = %g\n", iteration, energy) ; } /* check termination conditions */ if (iteration >= self->maxNumIterations) { if (self->verbosity) { VL_PRINTF("kmeans: Lloyd terminating because maximum number of iterations reached\n") ; } break ; } if (energy == previousEnergy) { if (self->verbosity) { VL_PRINTF("kmeans: Lloyd terminating because the algorithm fully converged\n") ; } break ; } /* begin next iteration */ previousEnergy = energy ; /* update clusters */ memset(clusterMasses, 0, sizeof(vl_size) * numData) ; for (x = 0 ; x < numData ; ++x) { clusterMasses[assignments[x]] ++ ; } numRestartedCenters = 0 ; switch (self->distance) { case VlDistanceL2: memset(self->centers, 0, sizeof(TYPE) * self->dimension * self->numCenters) ; for (x = 0 ; x < numData ; ++x) { TYPE * cpt = (TYPE*)self->centers + assignments[x] * self->dimension ; TYPE const * xpt = data + x * self->dimension ; for (d = 0 ; d < self->dimension ; ++d) { cpt[d] += xpt[d] ; } } for (c = 0 ; c < self->numCenters ; ++c) { TYPE * cpt = (TYPE*)self->centers + c * self->dimension ; if (clusterMasses[c] > 0) { TYPE mass = clusterMasses[c] ; for (d = 0 ; d < self->dimension ; ++d) { cpt[d] /= mass ; } } else { vl_uindex x = vl_rand_uindex(rand, numData) ; numRestartedCenters ++ ; for (d = 0 ; d < self->dimension ; ++d) { cpt[d] = data[x * self->dimension + d] ; } } } break ; case VlDistanceL1: for (d = 0 ; d < self->dimension ; ++d) { vl_uint32 * perm = permutations + d * numData ; memset(numSeenSoFar, 0, sizeof(vl_size) * self->numCenters) ; for (x = 0; x < numData ; ++x) { c = assignments[perm[x]] ; if (2 * numSeenSoFar[c] < clusterMasses[c]) { ((TYPE*)self->centers) [d + c * self->dimension] = data [d + perm[x] * self->dimension] ; } numSeenSoFar[c] ++ ; } /* restart the centers as required */ for (c = 0 ; c < self->numCenters ; ++c) { if (clusterMasses[c] == 0) { TYPE * cpt = (TYPE*)self->centers + c * self->dimension ; vl_uindex x = vl_rand_uindex(rand, numData) ; numRestartedCenters ++ ; for (d = 0 ; d < self->dimension ; ++d) { cpt[d] = data[x * self->dimension + d] ; } } } } break ; default: abort(); } /* done compute centers */ totNumRestartedCenters += numRestartedCenters ; if (self->verbosity && numRestartedCenters) { VL_PRINTF("kmeans: Lloyd iter %d: restarted %d centers\n", iteration, numRestartedCenters) ; } } /* next Lloyd iteration */ if (permutations) { vl_free(permutations) ; } if (numSeenSoFar) { vl_free(numSeenSoFar) ; } vl_free(distances) ; vl_free(assignments) ; vl_free(clusterMasses) ; return energy ; } static double VL_XCAT(_vl_kmeans_update_center_distances_, SFX) (VlKMeans * self) { #if (FLT == VL_TYPE_FLOAT) VlFloatVectorComparisonFunction distFn = vl_get_vector_comparison_function_f(self->distance) ; #else VlDoubleVectorComparisonFunction distFn = vl_get_vector_comparison_function_d(self->distance) ; #endif if (! self->centerDistances) { self->centerDistances = vl_malloc (sizeof(TYPE) * self->numCenters * self->numCenters) ; } VL_XCAT(vl_eval_vector_comparison_on_all_pairs_, SFX)(self->centerDistances, self->dimension, self->centers, self->numCenters, NULL, 0, distFn) ; return self->numCenters * (self->numCenters - 1) / 2 ; } static double VL_XCAT(_vl_kmeans_refine_centers_ann_, SFX) (VlKMeans * self, TYPE const * data, vl_size numData) { vl_size c, d, x, iteration ; double previousEnergy = VL_INFINITY_D ; double energy ; vl_uint32 * permutations = NULL ; vl_size * numSeenSoFar = NULL ; VlRand * rand = vl_get_rand () ; vl_size totNumRestartedCenters = 0 ; vl_size numRestartedCenters = 0 ; vl_uint32 * assignments = vl_malloc (sizeof(vl_uint32) * numData) ; vl_size * clusterMasses = vl_malloc (sizeof(vl_size) * numData) ; TYPE * distances = vl_malloc (sizeof(TYPE) * numData) ; if (self->distance == VlDistanceL1) { permutations = vl_malloc(sizeof(vl_uint32) * numData * self->dimension) ; numSeenSoFar = vl_malloc(sizeof(vl_size) * self->numCenters) ; VL_XCAT(_vl_kmeans_sort_data_helper_, SFX)(self, permutations, data, numData) ; } for (energy = VL_INFINITY_D, iteration = 0; 1 ; ++ iteration) { double eps; /* assign data to cluters */ VL_XCAT(_vl_kmeans_quantize_ann_, SFX)(self, assignments, distances, data, numData, iteration > 0) ; /* compute energy */ energy = 0 ; for (x = 0 ; x < numData ; ++x) energy += distances[x] ; if (self->verbosity) { VL_PRINTF("kmeans: ANN iter %d: energy = %g\n", iteration, energy) ; } /* check termination conditions */ if (iteration >= self->maxNumIterations) { if (self->verbosity) { VL_PRINTF("kmeans: ANN terminating because the maximum number of iterations has been reached\n") ; } break ; } eps = (previousEnergy - energy)/previousEnergy; if (energy == previousEnergy || eps < 0.00001) { if (self->verbosity) { VL_PRINTF("kmeans: ANN terminating because the algorithm fully converged\n") ; } break ; } /* begin next iteration */ previousEnergy = energy ; /* update clusters */ memset(clusterMasses, 0, sizeof(vl_size) * numData) ; for (x = 0 ; x < numData ; ++x) { clusterMasses[assignments[x]] ++ ; } numRestartedCenters = 0 ; switch (self->distance) { case VlDistanceL2: memset(self->centers, 0, sizeof(TYPE) * self->dimension * self->numCenters) ; for (x = 0 ; x < numData ; ++x) { TYPE * cpt = (TYPE*)self->centers + assignments[x] * self->dimension ; TYPE const * xpt = data + x * self->dimension ; for (d = 0 ; d < self->dimension ; ++d) { cpt[d] += xpt[d] ; } } for (c = 0 ; c < self->numCenters ; ++c) { TYPE * cpt = (TYPE*)self->centers + c * self->dimension ; if (clusterMasses[c] > 0) { TYPE mass = clusterMasses[c] ; for (d = 0 ; d < self->dimension ; ++d) { cpt[d] /= mass ; } } else { vl_uindex x = vl_rand_uindex(rand, numData) ; numRestartedCenters ++ ; for (d = 0 ; d < self->dimension ; ++d) { cpt[d] = data[x * self->dimension + d] ; } } } break ; case VlDistanceL1: for (d = 0 ; d < self->dimension ; ++d) { vl_uint32 * perm = permutations + d * numData ; memset(numSeenSoFar, 0, sizeof(vl_size) * self->numCenters) ; for (x = 0; x < numData ; ++x) { c = assignments[perm[x]] ; if (2 * numSeenSoFar[c] < clusterMasses[c]) { ((TYPE*)self->centers) [d + c * self->dimension] = data [d + perm[x] * self->dimension] ; } numSeenSoFar[c] ++ ; } /* restart the centers as required */ for (c = 0 ; c < self->numCenters ; ++c) { if (clusterMasses[c] == 0) { TYPE * cpt = (TYPE*)self->centers + c * self->dimension ; vl_uindex x = vl_rand_uindex(rand, numData) ; numRestartedCenters ++ ; for (d = 0 ; d < self->dimension ; ++d) { cpt[d] = data[x * self->dimension + d] ; } } } } break ; default: VL_PRINT("bad distance set: %d\n",self->distance); abort(); } /* done compute centers */ totNumRestartedCenters += numRestartedCenters ; if (self->verbosity && numRestartedCenters) { VL_PRINTF("kmeans: ANN iter %d: restarted %d centers\n", iteration, numRestartedCenters) ; } } if (permutations) { vl_free(permutations) ; } if (numSeenSoFar) { vl_free(numSeenSoFar) ; } vl_free(distances) ; vl_free(assignments) ; vl_free(clusterMasses) ; return energy ; } /* ---------------------------------------------------------------- */ /* Elkan refinement */ /* ---------------------------------------------------------------- */ static double VL_XCAT(_vl_kmeans_refine_centers_elkan_, SFX) (VlKMeans * self, TYPE const * data, vl_size numData) { vl_size d, iteration ; vl_index x ; vl_uint32 c, j ; vl_bool allDone ; TYPE * distances = vl_malloc (sizeof(TYPE) * numData) ; vl_uint32 * assignments = vl_malloc (sizeof(vl_uint32) * numData) ; vl_size * clusterMasses = vl_malloc (sizeof(vl_size) * numData) ; VlRand * rand = vl_get_rand () ; #if (FLT == VL_TYPE_FLOAT) VlFloatVectorComparisonFunction distFn = vl_get_vector_comparison_function_f(self->distance) ; #else VlDoubleVectorComparisonFunction distFn = vl_get_vector_comparison_function_d(self->distance) ; #endif TYPE * nextCenterDistances = vl_malloc (sizeof(TYPE) * self->numCenters) ; TYPE * pointToClosestCenterUB = vl_malloc (sizeof(TYPE) * numData) ; vl_bool * pointToClosestCenterUBIsStrict = vl_malloc (sizeof(vl_bool) * numData) ; TYPE * pointToCenterLB = vl_malloc (sizeof(TYPE) * numData * self->numCenters) ; TYPE * newCenters = vl_malloc(sizeof(TYPE) * self->dimension * self->numCenters) ; TYPE * centerToNewCenterDistances = vl_malloc (sizeof(TYPE) * self->numCenters) ; vl_uint32 * permutations = NULL ; vl_size * numSeenSoFar = NULL ; double energy ; vl_size totDistanceComputationsToInit = 0 ; vl_size totDistanceComputationsToRefreshUB = 0 ; vl_size totDistanceComputationsToRefreshLB = 0 ; vl_size totDistanceComputationsToRefreshCenterDistances = 0 ; vl_size totDistanceComputationsToNewCenters = 0 ; vl_size totDistanceComputationsToFinalize = 0 ; vl_size totNumRestartedCenters = 0 ; if (self->distance == VlDistanceL1) { permutations = vl_malloc(sizeof(vl_uint32) * numData * self->dimension) ; numSeenSoFar = vl_malloc(sizeof(vl_size) * self->numCenters) ; VL_XCAT(_vl_kmeans_sort_data_helper_, SFX)(self, permutations, data, numData) ; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* Initialization */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* An iteration is: get_new_centers + reassign + get_energy. This counts as iteration 0, where get_new_centers is assumed to be performed before calling the train function by the initialization function */ /* update distances between centers */ totDistanceComputationsToInit += VL_XCAT(_vl_kmeans_update_center_distances_, SFX)(self) ; /* assigmen points to the initial centers and initialize bounds */ memset(pointToCenterLB, 0, sizeof(TYPE) * self->numCenters * numData) ; for (x = 0 ; x < (signed)numData ; ++x) { TYPE distance ; /* do the first center */ assignments[x] = 0 ; distance = distFn(self->dimension, data + x * self->dimension, (TYPE*)self->centers + 0) ; pointToClosestCenterUB[x] = distance ; pointToClosestCenterUBIsStrict[x] = VL_TRUE ; pointToCenterLB[0 + x * self->numCenters] = distance ; totDistanceComputationsToInit += 1 ; /* do other centers */ for (c = 1 ; c < self->numCenters ; ++c) { /* Can skip if the center assigned so far is twice as close as its distance to the center under consideration */ if (((self->distance == VlDistanceL1) ? 2.0 : 4.0) * pointToClosestCenterUB[x] <= ((TYPE*)self->centerDistances) [c + assignments[x] * self->numCenters]) { continue ; } distance = distFn(self->dimension, data + x * self->dimension, (TYPE*)self->centers + c * self->dimension) ; pointToCenterLB[c + x * self->numCenters] = distance ; totDistanceComputationsToInit += 1 ; if (distance < pointToClosestCenterUB[x]) { pointToClosestCenterUB[x] = distance ; assignments[x] = c ; } } } /* compute UB on energy */ energy = 0 ; for (x = 0 ; x < (signed)numData ; ++x) { energy += pointToClosestCenterUB[x] ; } if (self->verbosity) { VL_PRINTF("kmeans: Elkan iter 0: energy = %g, dist. calc. = %d\n", energy, totDistanceComputationsToInit) ; } /* #define SANITY*/ #ifdef SANITY { int xx ; int cc ; TYPE tol = 1e-5 ; VL_PRINTF("inconsistencies after initial assignments:\n"); for (xx = 0 ; xx < numData ; ++xx) { for (cc = 0 ; cc < self->numCenters ; ++cc) { TYPE a = pointToCenterLB[cc + xx * self->numCenters] ; TYPE b = distFn(self->dimension, data + self->dimension * xx, (TYPE*)self->centers + self->dimension * cc) ; if (cc == assignments[xx]) { TYPE z = pointToClosestCenterUB[xx] ; if (z+tolb+tol) VL_PRINTF("LB %d %d = %f > %f\n", cc, xx, a, b) ; } } } #endif /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* Iterations */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ for (iteration = 1 ; 1; ++iteration) { vl_size numDistanceComputationsToRefreshUB = 0 ; vl_size numDistanceComputationsToRefreshLB = 0 ; vl_size numDistanceComputationsToRefreshCenterDistances = 0 ; vl_size numDistanceComputationsToNewCenters = 0 ; vl_size numRestartedCenters = 0 ; /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* Compute new centers */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ memset(clusterMasses, 0, sizeof(vl_size) * numData) ; for (x = 0 ; x < (signed)numData ; ++x) { clusterMasses[assignments[x]] ++ ; } switch (self->distance) { case VlDistanceL2: memset(newCenters, 0, sizeof(TYPE) * self->dimension * self->numCenters) ; for (x = 0 ; x < (signed)numData ; ++x) { TYPE * cpt = newCenters + assignments[x] * self->dimension ; TYPE const * xpt = data + x * self->dimension ; for (d = 0 ; d < self->dimension ; ++d) { cpt[d] += xpt[d] ; } } for (c = 0 ; c < self->numCenters ; ++c) { TYPE * cpt = newCenters + c * self->dimension ; if (clusterMasses[c] > 0) { TYPE mass = clusterMasses[c] ; for (d = 0 ; d < self->dimension ; ++d) { cpt[d] /= mass ; } } else { /* restart the center */ vl_uindex x = vl_rand_uindex(rand, numData) ; numRestartedCenters ++ ; for (d = 0 ; d < self->dimension ; ++d) { cpt[d] = data[x * self->dimension + d] ; } } } break ; case VlDistanceL1: for (d = 0 ; d < self->dimension ; ++d) { vl_uint32 * perm = permutations + d * numData ; memset(numSeenSoFar, 0, sizeof(vl_size) * self->numCenters) ; for (x = 0; x < (signed)numData ; ++x) { c = assignments[perm[x]] ; if (2 * numSeenSoFar[c] < clusterMasses[c]) { newCenters [d + c * self->dimension] = data [d + perm[x] * self->dimension] ; } numSeenSoFar[c] ++ ; } } /* restart the centers as required */ for (c = 0 ; c < self->numCenters ; ++c) { if (clusterMasses[c] == 0) { TYPE * cpt = newCenters + c * self->dimension ; vl_uindex x = vl_rand_uindex(rand, numData) ; numRestartedCenters ++ ; for (d = 0 ; d < self->dimension ; ++d) { cpt[d] = data[x * self->dimension + d] ; } } } break ; default: abort(); } /* done compute centers */ /* compute the distance from the old centers to the new centers */ for (c = 0 ; c < self->numCenters ; ++c) { TYPE distance = distFn(self->dimension, newCenters + c * self->dimension, (TYPE*)self->centers + c * self->dimension) ; centerToNewCenterDistances[c] = distance ; numDistanceComputationsToNewCenters += 1 ; } /* make the new centers current */ { TYPE * tmp = self->centers ; self->centers = newCenters ; newCenters = tmp ; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* Reassign points to a centers */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* Update distances between centers. */ numDistanceComputationsToRefreshCenterDistances += VL_XCAT(_vl_kmeans_update_center_distances_, SFX)(self) ; for (c = 0 ; c < self->numCenters ; ++c) { nextCenterDistances[c] = (TYPE) VL_INFINITY_D ; for (j = 0 ; j < self->numCenters ; ++j) { if (j == c) continue ; nextCenterDistances[c] = VL_MIN(nextCenterDistances[c], ((TYPE*)self->centerDistances) [j + c * self->numCenters]) ; } } /* Update upper bounds on point-to-closest-center distances based on the center variation. */ for (x = 0 ; x < (signed)numData ; ++x) { TYPE a = pointToClosestCenterUB[x] ; TYPE b = centerToNewCenterDistances[assignments[x]] ; if (self->distance == VlDistanceL1) { pointToClosestCenterUB[x] = a + b ; } else { #if (FLT == VL_TYPE_FLOAT) TYPE sqrtab = sqrtf (a * b) ; #else TYPE sqrtab = sqrt (a * b) ; #endif pointToClosestCenterUB[x] = a + b + 2.0 * sqrtab ; } pointToClosestCenterUBIsStrict[x] = VL_FALSE ; } /* Update lower bounds on point-to-center distances based on the center variation. */ #if defined(_OPENMP) #pragma omp parallel for default(shared) private(x,c) num_threads(vl_get_max_threads()) #endif for (x = 0 ; x < (signed)numData ; ++x) { for (c = 0 ; c < self->numCenters ; ++c) { TYPE a = pointToCenterLB[c + x * self->numCenters] ; TYPE b = centerToNewCenterDistances[c] ; if (a < b) { pointToCenterLB[c + x * self->numCenters] = 0 ; } else { if (self->distance == VlDistanceL1) { pointToCenterLB[c + x * self->numCenters] = a - b ; } else { #if (FLT == VL_TYPE_FLOAT) TYPE sqrtab = sqrtf (a * b) ; #else TYPE sqrtab = sqrt (a * b) ; #endif pointToCenterLB[c + x * self->numCenters] = a + b - 2.0 * sqrtab ; } } } } #ifdef SANITY { int xx ; int cc ; TYPE tol = 1e-5 ; VL_PRINTF("inconsistencies before assignments:\n"); for (xx = 0 ; xx < numData ; ++xx) { for (cc = 0 ; cc < self->numCenters ; ++cc) { TYPE a = pointToCenterLB[cc + xx * self->numCenters] ; TYPE b = distFn(self->dimension, data + self->dimension * xx, (TYPE*)self->centers + self->dimension * cc) ; if (cc == assignments[xx]) { TYPE z = pointToClosestCenterUB[xx] ; if (z+tolb+tol) VL_PRINTF("LB %d %d = %f > %f (assign = %d)\n", cc, xx, a, b, assignments[xx]) ; } } } #endif /* Scan the data and do the reassignments. Use the bounds to skip as many point-to-center distance calculations as possible. */ allDone = VL_TRUE ; #if defined(_OPENMP) #pragma omp parallel for \ default(none) \ shared(self,numData, \ pointToClosestCenterUB,pointToCenterLB, \ nextCenterDistances,pointToClosestCenterUBIsStrict, \ assignments,data,distFn,allDone) \ private(c,x) \ reduction(+:numDistanceComputationsToRefreshUB,numDistanceComputationsToRefreshLB) \ num_threads(vl_get_max_threads()) #endif for (x = 0 ; x < (signed)numData ; ++ x) { /* A point x sticks with its current center assignmets[x] the UB to d(x, c[assigmnets[x]]) is not larger than half the distance of c[assigments[x]] to any other center c. */ if (((self->distance == VlDistanceL1) ? 2.0 : 4.0) * pointToClosestCenterUB[x] <= nextCenterDistances[assignments[x]]) { continue ; } for (c = 0 ; c < self->numCenters ; ++c) { vl_uint32 cx = assignments[x] ; TYPE distance ; /* The point is not reassigned to a given center c if either: 0 - c is already the assigned center 1 - The UB of d(x, c[assignments[x]]) is smaller than half the distance of c[assigments[x]] to c, OR 2 - The UB of d(x, c[assignmets[x]]) is smaller than the LB of the distance of x to c. */ if (cx == c) { continue ; } if (((self->distance == VlDistanceL1) ? 2.0 : 4.0) * pointToClosestCenterUB[x] <= ((TYPE*)self->centerDistances) [c + cx * self->numCenters]) { continue ; } if (pointToClosestCenterUB[x] <= pointToCenterLB [c + x * self->numCenters]) { continue ; } /* If the UB is loose, try recomputing it and test again */ if (! pointToClosestCenterUBIsStrict[x]) { distance = distFn(self->dimension, data + self->dimension * x, (TYPE*)self->centers + self->dimension * cx) ; pointToClosestCenterUB[x] = distance ; pointToClosestCenterUBIsStrict[x] = VL_TRUE ; pointToCenterLB[cx + x * self->numCenters] = distance ; numDistanceComputationsToRefreshUB += 1 ; if (((self->distance == VlDistanceL1) ? 2.0 : 4.0) * pointToClosestCenterUB[x] <= ((TYPE*)self->centerDistances) [c + cx * self->numCenters]) { continue ; } if (pointToClosestCenterUB[x] <= pointToCenterLB [c + x * self->numCenters]) { continue ; } } /* Now the UB is strict (equal to d(x, assignments[x])), but we still could not exclude that x should be reassigned to c. We therefore compute the distance, update the LB, and check if a reassigmnet must be made */ distance = distFn(self->dimension, data + x * self->dimension, (TYPE*)self->centers + c * self->dimension) ; numDistanceComputationsToRefreshLB += 1 ; pointToCenterLB[c + x * self->numCenters] = distance ; if (distance < pointToClosestCenterUB[x]) { assignments[x] = c ; pointToClosestCenterUB[x] = distance ; allDone = VL_FALSE ; /* the UB strict flag is already set here */ } } /* assign center */ } /* next data point */ totDistanceComputationsToRefreshUB += numDistanceComputationsToRefreshUB ; totDistanceComputationsToRefreshLB += numDistanceComputationsToRefreshLB ; totDistanceComputationsToRefreshCenterDistances += numDistanceComputationsToRefreshCenterDistances ; totDistanceComputationsToNewCenters += numDistanceComputationsToNewCenters ; totNumRestartedCenters += numRestartedCenters ; #ifdef SANITY { int xx ; int cc ; TYPE tol = 1e-5 ; VL_PRINTF("inconsistencies after assignments:\n"); for (xx = 0 ; xx < numData ; ++xx) { for (cc = 0 ; cc < self->numCenters ; ++cc) { TYPE a = pointToCenterLB[cc + xx * self->numCenters] ; TYPE b = distFn(self->dimension, data + self->dimension * xx, (TYPE*)self->centers + self->dimension * cc) ; if (cc == assignments[xx]) { TYPE z = pointToClosestCenterUB[xx] ; if (z+tolb+tol) VL_PRINTF("LB %d %d = %f > %f (assign = %d)\n", cc, xx, a, b, assignments[xx]) ; } } } #endif /* compute UB on energy */ energy = 0 ; for (x = 0 ; x < (signed)numData ; ++x) { energy += pointToClosestCenterUB[x] ; } if (self->verbosity) { vl_size numDistanceComputations = numDistanceComputationsToRefreshUB + numDistanceComputationsToRefreshLB + numDistanceComputationsToRefreshCenterDistances + numDistanceComputationsToNewCenters ; VL_PRINTF("kmeans: Elkan iter %d: energy <= %g, dist. calc. = %d\n", iteration, energy, numDistanceComputations) ; if (numRestartedCenters) { VL_PRINTF("kmeans: Elkan iter %d: restarted %d centers\n", iteration, energy, numRestartedCenters) ; } if (self->verbosity > 1) { VL_PRINTF("kmeans: Elkan iter %d: total dist. calc. per type: " "UB: %.1f%% (%d), LB: %.1f%% (%d), " "intra_center: %.1f%% (%d), " "new_center: %.1f%% (%d)\n", iteration, 100.0 * numDistanceComputationsToRefreshUB / numDistanceComputations, numDistanceComputationsToRefreshUB, 100.0 *numDistanceComputationsToRefreshLB / numDistanceComputations, numDistanceComputationsToRefreshLB, 100.0 * numDistanceComputationsToRefreshCenterDistances / numDistanceComputations, numDistanceComputationsToRefreshCenterDistances, 100.0 * numDistanceComputationsToNewCenters / numDistanceComputations, numDistanceComputationsToNewCenters) ; } } /* check termination conditions */ if (iteration >= self->maxNumIterations) { if (self->verbosity) { VL_PRINTF("kmeans: Elkan terminating because maximum number of iterations reached\n") ; } break ; } if (allDone) { if (self->verbosity) { VL_PRINTF("kmeans: Elkan terminating because the algorithm fully converged\n") ; } break ; } } /* next Elkan iteration */ /* compute true energy */ energy = 0 ; for (x = 0 ; x < (signed)numData ; ++ x) { vl_uindex cx = assignments [x] ; energy += distFn(self->dimension, data + self->dimension * x, (TYPE*)self->centers + self->dimension * cx) ; totDistanceComputationsToFinalize += 1 ; } { vl_size totDistanceComputations = totDistanceComputationsToInit + totDistanceComputationsToRefreshUB + totDistanceComputationsToRefreshLB + totDistanceComputationsToRefreshCenterDistances + totDistanceComputationsToNewCenters + totDistanceComputationsToFinalize ; double saving = (double)totDistanceComputations / (iteration * self->numCenters * numData) ; if (self->verbosity) { VL_PRINTF("kmeans: Elkan: total dist. calc.: %d (%.2f %% of Lloyd)\n", totDistanceComputations, saving * 100.0) ; if (totNumRestartedCenters) { VL_PRINTF("kmeans: Elkan: there have been %d restarts\n", totNumRestartedCenters) ; } } if (self->verbosity > 1) { VL_PRINTF("kmeans: Elkan: total dist. calc. per type: " "init: %.1f%% (%d), UB: %.1f%% (%d), LB: %.1f%% (%d), " "intra_center: %.1f%% (%d), " "new_center: %.1f%% (%d), " "finalize: %.1f%% (%d)\n", 100.0 * totDistanceComputationsToInit / totDistanceComputations, totDistanceComputationsToInit, 100.0 * totDistanceComputationsToRefreshUB / totDistanceComputations, totDistanceComputationsToRefreshUB, 100.0 *totDistanceComputationsToRefreshLB / totDistanceComputations, totDistanceComputationsToRefreshLB, 100.0 * totDistanceComputationsToRefreshCenterDistances / totDistanceComputations, totDistanceComputationsToRefreshCenterDistances, 100.0 * totDistanceComputationsToNewCenters / totDistanceComputations, totDistanceComputationsToNewCenters, 100.0 * totDistanceComputationsToFinalize / totDistanceComputations, totDistanceComputationsToFinalize) ; } } if (permutations) { vl_free(permutations) ; } if (numSeenSoFar) { vl_free(numSeenSoFar) ; } vl_free(distances) ; vl_free(assignments) ; vl_free(clusterMasses) ; vl_free(nextCenterDistances) ; vl_free(pointToClosestCenterUB) ; vl_free(pointToClosestCenterUBIsStrict) ; vl_free(pointToCenterLB) ; vl_free(newCenters) ; vl_free(centerToNewCenterDistances) ; return energy ; } /* ---------------------------------------------------------------- */ static double VL_XCAT(_vl_kmeans_refine_centers_, SFX) (VlKMeans * self, TYPE const * data, vl_size numData) { switch (self->algorithm) { case VlKMeansLloyd: return VL_XCAT(_vl_kmeans_refine_centers_lloyd_, SFX)(self, data, numData) ; break ; case VlKMeansElkan: return VL_XCAT(_vl_kmeans_refine_centers_elkan_, SFX)(self, data, numData) ; break ; case VlKMeansANN: return VL_XCAT(_vl_kmeans_refine_centers_ann_, SFX)(self, data, numData) ; break ; default: abort() ; } } /* VL_KMEANS_INSTANTIATING */ #else #ifndef __DOXYGEN__ #define FLT VL_TYPE_FLOAT #define TYPE float #define SFX f #define VL_KMEANS_INSTANTIATING #include "kmeans.c" #define FLT VL_TYPE_DOUBLE #define TYPE double #define SFX d #define VL_KMEANS_INSTANTIATING #include "kmeans.c" #endif /* VL_KMEANS_INSTANTIATING */ #endif /* ================================================================ */ #ifndef VL_KMEANS_INSTANTIATING /** ------------------------------------------------------------------ ** @brief Set centers ** @param self KMeans object. ** @param centers centers to copy. ** @param dimension data dimension. ** @param numCenters number of centers. **/ VL_EXPORT void vl_kmeans_set_centers (VlKMeans * self, void const * centers, vl_size dimension, vl_size numCenters) { vl_kmeans_reset (self) ; switch (self->dataType) { case VL_TYPE_FLOAT : _vl_kmeans_set_centers_f (self, (float const *)centers, dimension, numCenters) ; break ; case VL_TYPE_DOUBLE : _vl_kmeans_set_centers_d (self, (double const *)centers, dimension, numCenters) ; break ; default: abort() ; } } /** ------------------------------------------------------------------ ** @brief init centers by randomly sampling data ** @param self KMeans object. ** @param data data to sample from. ** @param dimension data dimension. ** @param numData nmber of data points. ** @param numCenters number of centers. ** ** The function inits the KMeans centers by randomly sampling ** the data @a data. **/ VL_EXPORT void vl_kmeans_init_centers_with_rand_data (VlKMeans * self, void const * data, vl_size dimension, vl_size numData, vl_size numCenters) { vl_kmeans_reset (self) ; switch (self->dataType) { case VL_TYPE_FLOAT : _vl_kmeans_init_centers_with_rand_data_f (self, (float const *)data, dimension, numData, numCenters) ; break ; case VL_TYPE_DOUBLE : _vl_kmeans_init_centers_with_rand_data_d (self, (double const *)data, dimension, numData, numCenters) ; break ; default: abort() ; } } /** ------------------------------------------------------------------ ** @brief Seed centers by the KMeans++ algorithm ** @param self KMeans object. ** @param data data to sample from. ** @param dimension data dimension. ** @param numData nmber of data points. ** @param numCenters number of centers. **/ VL_EXPORT void vl_kmeans_init_centers_plus_plus (VlKMeans * self, void const * data, vl_size dimension, vl_size numData, vl_size numCenters) { vl_kmeans_reset (self) ; switch (self->dataType) { case VL_TYPE_FLOAT : _vl_kmeans_init_centers_plus_plus_f (self, (float const *)data, dimension, numData, numCenters) ; break ; case VL_TYPE_DOUBLE : _vl_kmeans_init_centers_plus_plus_d (self, (double const *)data, dimension, numData, numCenters) ; break ; default: abort() ; } } /** ------------------------------------------------------------------ ** @brief Quantize data ** @param self KMeans object. ** @param assignments data to closest center assignments (output). ** @param distances data to closest center distance (output). ** @param data data to quantize. ** @param numData number of data points to quantize. **/ VL_EXPORT void vl_kmeans_quantize (VlKMeans * self, vl_uint32 * assignments, void * distances, void const * data, vl_size numData) { switch (self->dataType) { case VL_TYPE_FLOAT : _vl_kmeans_quantize_f (self, assignments, distances, (float const *)data, numData) ; break ; case VL_TYPE_DOUBLE : _vl_kmeans_quantize_d (self, assignments, distances, (double const *)data, numData) ; break ; default: abort() ; } } /** ------------------------------------------------------------------ ** @brief Quantize data using approximate nearest neighbours (ANN). ** @param self KMeans object. ** @param assignments data to centers assignments (output). ** @param distances data to closes center distance (output) ** @param data data to quantize. ** @param numData number of data points. ** @param update choose wether to update current assignments. ** ** The function uses an ANN procedure to compute the approximate ** nearest neighbours of the input data point. ** ** Setting @a update to ::VL_TRUE will cause the algorithm ** to *update existing assignments*. This means that each ** element of @a assignments and @a distances is updated ony if the ** ANN procedure can find a better assignment of the existing one. **/ VL_EXPORT void vl_kmeans_quantize_ann (VlKMeans * self, vl_uint32 * assignments, void * distances, void const * data, vl_size numData, vl_bool update) { switch (self->dataType) { case VL_TYPE_FLOAT : _vl_kmeans_quantize_ann_f (self, assignments, distances, (float const *)data, numData, update) ; break ; case VL_TYPE_DOUBLE : _vl_kmeans_quantize_ann_d (self, assignments, distances, (double const *)data, numData, update) ; break ; default: abort() ; } } /** ------------------------------------------------------------------ ** @brief Refine center locations. ** @param self KMeans object. ** @param data data to quantize. ** @param numData number of data points. ** @return K-means energy at the end of optimization. ** ** The function calls the underlying K-means quantization algorithm ** (@ref VlKMeansAlgorithm) to quantize the specified data @a data. ** The function assumes that the cluster centers have already ** been assigned by using one of the seeding functions, or by ** setting them. **/ VL_EXPORT double vl_kmeans_refine_centers (VlKMeans * self, void const * data, vl_size numData) { assert (self->centers) ; switch (self->dataType) { case VL_TYPE_FLOAT : return _vl_kmeans_refine_centers_f (self, (float const *)data, numData) ; case VL_TYPE_DOUBLE : return _vl_kmeans_refine_centers_d (self, (double const *)data, numData) ; default: abort() ; } } /** ------------------------------------------------------------------ ** @brief Cluster data. ** @param self KMeans object. ** @param data data to quantize. ** @param dimension data dimension. ** @param numData number of data points. ** @param numCenters number of clusters. ** @return K-means energy at the end of optimization. ** ** The function initializes the centers by using the initialization ** algorithm set by ::vl_kmeans_set_initialization and refines them ** by the quantization algorithm set by ::vl_kmeans_set_algorithm. ** The process is repeated one or more times (see ** ::vl_kmeans_set_num_repetitions) and the resutl with smaller ** energy is retained. **/ VL_EXPORT double vl_kmeans_cluster (VlKMeans * self, void const * data, vl_size dimension, vl_size numData, vl_size numCenters) { vl_uindex repetition ; double bestEnergy = VL_INFINITY_D ; void * bestCenters = NULL ; for (repetition = 0 ; repetition < self->numRepetitions ; ++ repetition) { double energy ; double timeRef ; if (self->verbosity) { VL_PRINTF("kmeans: repetition %d of %d\n", repetition + 1, self->numRepetitions) ; } timeRef = vl_get_cpu_time() ; switch (self->initialization) { case VlKMeansRandomSelection : vl_kmeans_init_centers_with_rand_data (self, data, dimension, numData, numCenters) ; break ; case VlKMeansPlusPlus : vl_kmeans_init_centers_plus_plus (self, data, dimension, numData, numCenters) ; break ; default: abort() ; } if (self->verbosity) { VL_PRINTF("kmeans: K-means initialized in %.2f s\n", vl_get_cpu_time() - timeRef) ; } timeRef = vl_get_cpu_time () ; energy = vl_kmeans_refine_centers (self, data, numData) ; if (self->verbosity) { VL_PRINTF("kmeans: K-means terminated in %.2f s with energy %g\n", vl_get_cpu_time() - timeRef, energy) ; } /* copy centers to output if current solution is optimal */ /* check repetition == 0 as well in case energy = NaN, which */ /* can happen if the data contain NaNs */ if (energy < bestEnergy || repetition == 0) { void * temp ; bestEnergy = energy ; if (bestCenters == NULL) { bestCenters = vl_malloc(vl_get_type_size(self->dataType) * self->dimension * self->numCenters) ; } /* swap buffers */ temp = bestCenters ; bestCenters = self->centers ; self->centers = temp ; } /* better energy */ } /* next repetition */ vl_free (self->centers) ; self->centers = bestCenters ; return bestEnergy ; } /* VL_KMEANS_INSTANTIATING */ #endif #undef SFX #undef TYPE #undef FLT #undef VL_KMEANS_INSTANTIATING vlfeat/vl/scalespace.h0000644000175000017500000000675212237004745013660 0ustar dimadima/** @file scalespace.h ** @brief Scale Space (@ref scalespace) ** @author Andrea Vedaldi ** @author Karel Lenc ** @author Michal Perdoch **/ /* Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. All rights reserved. This file is part of the VLFeat library and is made available under the terms of the BSD license (see the COPYING file). */ #ifndef VL_SCALESPACE_H #define VL_SCALESPACE_H #include "generic.h" #include "imopv.h" #include "mathop.h" /* ---------------------------------------------------------------- */ /* VlScaleSpaceGeometry */ /* ---------------------------------------------------------------- */ /** @brief Geometry of a scale space ** ** There are a few restrictions on the valid geometrties. */ typedef struct _VlScaleSpaceGeometry { vl_size width ; /**< Image width */ vl_size height ; /**< Image height */ vl_index firstOctave ; /**< Index of the fisrt octave */ vl_index lastOctave ; /**< Index of the last octave */ vl_size octaveResolution ; /**< Number of octave subdivisions */ vl_index octaveFirstSubdivision ; /**< Index of the first octave subdivsion */ vl_index octaveLastSubdivision ; /**< Index of the last octave subdivision */ double baseScale ; /**< Base smoothing (smoothing of octave 0, level 0) */ double nominalScale ; /**< Nominal smoothing of the original image */ } VlScaleSpaceGeometry ; VL_EXPORT vl_bool vl_scalespacegeometry_is_equal (VlScaleSpaceGeometry a, VlScaleSpaceGeometry b) ; /* ---------------------------------------------------------------- */ /* VlScaleSpaceOctaveGeometry */ /* ---------------------------------------------------------------- */ /** @brief Geometry of one octave of a scale space */ typedef struct _VlScaleSpaceOctaveGeometry { vl_size width ; /**< Width (number of pixels) */ vl_size height ; /**< Height (number of pixels) */ double step ; /**< Sampling step (size of a pixel) */ } VlScaleSpaceOctaveGeometry ; /* ---------------------------------------------------------------- */ /* VlScaleSpace */ /* ---------------------------------------------------------------- */ typedef struct _VlScaleSpace VlScaleSpace ; /** @name Create and destroy ** @{ **/ VL_EXPORT VlScaleSpaceGeometry vl_scalespace_get_default_geometry(vl_size width, vl_size height) ; VL_EXPORT VlScaleSpace * vl_scalespace_new (vl_size width, vl_size height) ; VL_EXPORT VlScaleSpace * vl_scalespace_new_with_geometry (VlScaleSpaceGeometry geom) ; VL_EXPORT VlScaleSpace * vl_scalespace_new_copy (VlScaleSpace* src); VL_EXPORT VlScaleSpace * vl_scalespace_new_shallow_copy (VlScaleSpace* src); VL_EXPORT void vl_scalespace_delete (VlScaleSpace *self) ; /** @} */ /** @name Process data ** @{ **/ VL_EXPORT void vl_scalespace_put_image (VlScaleSpace *self, float const* image); /** @} */ /** @name Retrieve data and parameters ** @{ **/ VL_EXPORT VlScaleSpaceGeometry vl_scalespace_get_geometry (VlScaleSpace const * self) ; VL_EXPORT VlScaleSpaceOctaveGeometry vl_scalespace_get_octave_geometry (VlScaleSpace const * self, vl_index o) ; VL_EXPORT float * vl_scalespace_get_level (VlScaleSpace * self, vl_index o, vl_index s) ; VL_EXPORT float const * vl_scalespace_get_level_const (VlScaleSpace const * self, vl_index o, vl_index s) ; VL_EXPORT double vl_scalespace_get_level_sigma (VlScaleSpace const *self, vl_index o, vl_index s) ; /** @} */ /* VL_SCALESPACE_H */ #endif