From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jonathan Larmour To: gdb-patches@sourceware.cygnus.com Cc: Alex Schuilenburg Subject: ser-unix.c:do_unix_readchar() Don't timeout when told not to Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <38D5D64F.CB756366@redhat.co.uk> X-SW-Source: 2000-q1/msg00803.html A while back, folks in the eCos team reported that you could get "Watchdog has expired. Target detached." messages even when the watchdog wasn't set. The GDB team reacted in disbelief :-). After getting irritated by it this evening, I looked for and found the problem: do_unix_readchar() could still return SERIAL_TIMEOUT, even when the requested timeout was -1 (i.e. infinite). The attached patch fixes the problem, and I used the opportunity to make the code slightly more robust, and more similar to e.g. do_hardwire_readchar in the same file. I don't have write permission, so please check this in. Thanks, Jifl 2000-03-20 Jonathan Larmour * ser-unix.c (do_unix_readchar): Reorganise to be more robust, particularly ensuring it can't return SERIAL_TIMEOUT when told not to time out. -- Red Hat, 35 Cambridge Place, Cambridge, UK. CB2 1NS Tel: +44 (1223) 728762 "Plan to be spontaneous tomorrow." || These opinions are all my own fault Index: ser-unix.c =================================================================== RCS file: /cvs/src/src/gdb/ser-unix.c,v retrieving revision 1.2 diff -u -5 -p -c -r1.2 ser-unix.c *** ser-unix.c 2000/02/09 08:52:47 1.2 --- ser-unix.c 2000/03/20 07:30:48 *************** do_unix_readchar (serial_t scb, int time *** 908,920 **** /* We have to be able to keep the GUI alive here, so we break the original timeout into steps of 1 second, running the "keep the GUI alive" hook each time through the loop. Also, timeout = 0 means to poll, so we just set the delta to 0, so we ! will only go through the loop once. */ ! delta = (timeout == 0 ? 0 : 1); while (1) { /* N.B. The UI may destroy our world (for instance by calling remote_stop,) in which case we want to get out of here as --- 908,920 ---- /* We have to be able to keep the GUI alive here, so we break the original timeout into steps of 1 second, running the "keep the GUI alive" hook each time through the loop. Also, timeout = 0 means to poll, so we just set the delta to 0, so we ! will only go through the loop once. timeout < 0 means to wait forever. */ ! delta = (timeout <= 0 ? 0 : 1); while (1) { /* N.B. The UI may destroy our world (for instance by calling remote_stop,) in which case we want to get out of here as *************** do_unix_readchar (serial_t scb, int time *** 926,980 **** { if (ui_loop_hook (0)) return SERIAL_TIMEOUT; } ! status = ser_unix_wait_for (scb, delta); timeout -= delta; ! /* If we got a character or an error back from wait_for, then we can ! break from the loop before the timeout is completed. */ ! if (status != SERIAL_TIMEOUT) ! { ! break; ! } ! /* If we have exhausted the original timeout, then generate ! a SERIAL_TIMEOUT, and pass it out of the loop. */ ! else if (timeout == 0) ! { ! status = SERIAL_TIMEOUT; ! break; } - } - - if (status < 0) - return status; ! while (1) ! { ! status = read (scb->fd, scb->buf, BUFSIZ); ! if (status != -1 || errno != EINTR) ! break; ! } ! ! if (status <= 0) ! { ! if (status == 0) ! return SERIAL_TIMEOUT; /* 0 chars means timeout [may need to ! distinguish between EOF & timeouts ! someday] */ ! else ! return SERIAL_ERROR; /* Got an error from read */ } - - scb->bufcnt = status; - scb->bufcnt--; - scb->bufp = scb->buf; - return *scb->bufp++; } /* Perform operations common to both old and new readchar. */ /* Return the next character from the input FIFO. If the FIFO is --- 926,967 ---- { if (ui_loop_hook (0)) return SERIAL_TIMEOUT; } ! status = ser_unix_wait_for (scb, timeout < 0 ? timeout : delta); timeout -= delta; ! /* If we got an error back from wait_for, then we can return */ ! if (status == SERIAL_ERROR) ! return status; ! status = read (scb->fd, scb->buf, BUFSIZ); ! if (status <= 0) ! { ! if (status == 0) ! { ! if (timeout != 0) ! continue; ! else ! return SERIAL_TIMEOUT; /* 0 chars means timeout [may need to ! distinguish between EOF & timeouts ! someday] */ ! } ! else if (errno == EINTR) ! continue; ! else ! return SERIAL_ERROR; /* Got an error from read */ } ! scb->bufcnt = status; ! scb->bufcnt--; ! scb->bufp = scb->buf; ! return *scb->bufp++; } } /* Perform operations common to both old and new readchar. */ /* Return the next character from the input FIFO. If the FIFO is >From eliz@gnu.org Sat Apr 01 00:00:00 2000 From: Eli Zaretskii To: shebs@apple.com Cc: msnyder@cygnus.com, jtc@redback.com, gdb-patches@sourceware.cygnus.com Subject: Re: gdb.texinfo broken? Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <200003260516.AAA27674@mescaline.gnu.org> References: <38D6CF69.6844@cygnus.com> <200003211819.NAA12435@indy.delorie.com> <200003221655.LAA14175@indy.delorie.com> <38DA7A75.2E59FB7B@apple.com> X-SW-Source: 2000-q1/msg01034.html Content-length: 505 To make this even more entertaining, there are patched versions of 3.12; so for instance my RH 6.1 machine comes with a patched texinfo 3.12f (or 3.12h?, it's not in front of me) where this bug is fixed. Ys, this was corrected in 3.12d, I think. Eli, could you commit this patch please? Thanks... I'm currently on the road with no access to the machine where I have the ssh setup. So either please until March 30, or someone else could install the change. Sorry about the inconvenience. >From ac131313@cygnus.com Sat Apr 01 00:00:00 2000 From: Andrew Cagney To: shebs@apple.com Cc: GDB Patches Subject: Re: [PATCH] Fix texinfo problems... Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <38DC6763.563424A2@cygnus.com> References: <38DB1875.4B504618@cygnus.com> <38DBB937.126C95E@apple.com> X-SW-Source: 2000-q1/msg01022.html Content-length: 1462 Stan Shebs wrote: > > Andrew Cagney wrote: > > > > Hello, > > > > I've applied the attatched patch. It probably isn't elegant and > > probably isn't the best way of handling this :-/ However, after applying > > it I'm able to use makeinfo versions 3.12, 3.12f and 4.0 :-) > > *Please* don't add the node links back!! I went to some trouble to get > rid of them all, because they make for an utter nightmare when you're > trying to add new material. They're only useful if you want to link > nodes in some fashion other than that implied by the chapter/section > structure, and as of yet I haven't heard anyone come up with a good > rationale for linking in any other way. > > The replication of the TOC node with ifinfo and ifhtml is sufficient > to make the manual generate correctly with three versions of texinfo, > so I'm mystified as to why you think these other changes are necessary... I'm sorry, but please _don't_ delete them until I've cut this 5.0 branch :-) Without top level node entries I found that makeinfo 3.12 I was using failed. As soon as the branch goes through, you're encouraged to strip them out, I'd expect the next relese to require makeinfo 4.0. This is also why I moved the ``chapter'' and ``node'' entries from the included *.texi files into gdb.texinfo. It made it possible for me to add correct entries for those included subjects. (I discovered C-c C-u C-e :-) If there is a correct way, please fix. sorry, Andrew >From thz@Lennartz-electronic.DE Sat Apr 01 00:00:00 2000 From: Thomas Zenker To: gdb-patches@sourceware.cygnus.com Subject: [PATCH] compile for ARM in rdi-share under 4.4BSD Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <20000204115700.A23323@mezcal.tue.le> X-SW-Source: 2000-q1/msg00124.html Content-length: 817 Hi, here are 3 small changes I propose to apply to the rdi library in gdb/rdi-share: 1. hsys.c: to compile under 4.4BSD derived systems (FreeBSD, NetBSD...) sys_errlist should not be declared in hsys.c. NEED_SYSERRLIST is set already by configure, so we can use it. 2. unixcomm.c: 4.4BSD derived systems define BSD, but are posix compliant and we should not work with the old compatibility stuff. Because of that I undef BSD in case of FBSD etc and include sys/ioctl to get the flags. 3. unixcomm.c: if the TIOCEXCL flags exists set serial line for exclusive use. These patches are against CVS archive of today. -- Thomas Zenker c/o Lennartz electronic GmbH Bismarckstrasse 136, D-72072 Tuebingen, Germany Phone: +49-(0)7071-93550 Email: thz@lennartz-electronic.de >From fnasser@redhat.com Sat Apr 01 00:00:00 2000 From: Fernando Nasser To: Grant Edwards Cc: Fernando Nasser , gdb-patches@sourceware.cygnus.com Subject: Re: Patch for RDI target code to allow user-specified devices Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <38B2AF5F.5322CE42@redhat.com> References: <20000221141155.A31206@visi.com> <38B1C28D.50BC5918@cygnus.com> <20000221223021.A12670@visi.com> X-SW-Source: 2000-q1/msg00301.html Content-length: 743 Hi Grant, thanks for yior understanding... and for all the improvements. I will be waiting for the revised patch and I will check it in. Grant Edwards wrote: > > BTW, the parallel port code does seem to work, in case anybody was > wondering. :) > Oh Gosh! How am I going to test this? My boards are all serial and the only other thing I have access to is Ethernet. I wonder if anybody uses the parallel conection... I guess you have something with parallel connection, or you wouldn't know it is not working, right? -- Fernando Nasser Red Hat, Inc. - Toronto E-Mail: fnasser@redhat.com 2323 Yonge Street, Suite #300 Tel: 416-482-2661 ext. 311 Toronto, Ontario M4P 2C9 Fax: 416-482-6299 >From kingdon@redhat.com Sat Apr 01 00:00:00 2000 From: Jim Kingdon To: kingdon@redhat.com Cc: gdb-patches@sourceware.cygnus.com, blizzard@mozilla.org Subject: Re: dlclose() Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <200002200521.AAA29598@devserv.devel.redhat.com> References: <200002161953.OAA07411@devserv.devel.redhat.com> X-SW-Source: 2000-q1/msg00251.html Content-length: 5806 > Here's another patch for the dlclose() problem we've been talking > about (5130 in bugzilla.redhat.com and all). Early feedback seems to be positive (thanks Chris), so here is a slightly revised version (cleans up some of the free'ing). As far as I know this is ready to check in. Of course, if people want to weigh in that could help make it clear. 2000-02-20 Jim Kingdon * solib.c (find_solib): New argument recheck. * solib.c (solib_add): Pass it as 1, and add logic to delete shared libraries which aren't still in the inferior. (struct so_list): New field found_me, for solib_add. * solib.c (other find_solib callers): Pass recheck as 0. Index: solib.c =================================================================== RCS file: /cvs/src/src/gdb/solib.c,v retrieving revision 1.1.1.10 diff -u -r1.1.1.10 solib.c --- solib.c 1999/11/17 02:30:28 1.1.1.10 +++ solib.c 2000/02/20 05:17:18 @@ -31,6 +31,7 @@ #include "gdb_string.h" #include #include +#include #ifndef SVR4_SHARED_LIBS /* SunOS shared libs need the nlist structure. */ @@ -143,6 +144,11 @@ char so_name[MAX_PATH_SIZE]; /* shared object lib name (FIXME) */ char symbols_loaded; /* flag: symbols read in yet? */ char from_tty; /* flag: print msgs? */ + + /* Flag for use within solib_add: have we seen this library actually + still mapped in the inferior this pass? */ + char found_me; + struct objfile *objfile; /* objfile for loaded lib */ struct section_table *sections; struct section_table *sections_end; @@ -181,8 +187,7 @@ static int symbol_add_stub PARAMS ((PTR)); -static struct so_list * - find_solib PARAMS ((struct so_list *)); +static struct so_list *find_solib (struct so_list *, int); static struct link_map * first_link_map_member PARAMS ((void)); @@ -975,8 +980,10 @@ */ static struct so_list * -find_solib (so_list_ptr) - struct so_list *so_list_ptr; /* Last lm or NULL for first one */ +find_solib (struct so_list *so_list_ptr, + /* Nonzero if we should read all the entries from the inferior, + not just the ones at the end of the list. */ + int recheck) { struct so_list *so_list_next = NULL; struct link_map *lm = NULL; @@ -985,7 +992,9 @@ if (so_list_ptr == NULL) { /* We are setting up for a new scan through the loaded images. */ - if ((so_list_next = so_list_head) == NULL) + so_list_next = so_list_head; + if (so_list_next == NULL + || recheck) { /* We have not already read in the dynamic linking structures from the inferior, lookup the address of the base structure. */ @@ -1002,7 +1011,8 @@ { /* We have been called before, and are in the process of walking the shared library list. Advance to the next shared object. */ - if ((lm = LM_NEXT (so_list_ptr)) == NULL) + lm = LM_NEXT (so_list_ptr); + if (recheck || lm == NULL) { /* We have hit the end of the list, so check to see if any were added, but be quiet if we can't read from the target any more. */ @@ -1020,7 +1030,7 @@ } so_list_next = so_list_ptr->next; } - if ((so_list_next == NULL) && (lm != NULL)) + if ((so_list_next == NULL || recheck) && (lm != NULL)) { /* Get next link map structure from inferior image and build a local abbreviated load_map structure */ @@ -1188,7 +1198,7 @@ /* Count how many new section_table entries there are. */ so = NULL; count = 0; - while ((so = find_solib (so)) != NULL) + while ((so = find_solib (so, 0)) != NULL) { if (so->so_name[0] && !match_main (so->so_name)) { @@ -1201,7 +1211,7 @@ /* Add these section table entries to the target's table. */ old = target_resize_to_sections (target, count); - while ((so = find_solib (so)) != NULL) + while ((so = find_solib (so, 0)) != NULL) { if (so->so_name[0]) { @@ -1215,9 +1225,13 @@ } } + for (so = so_list_head; so != NULL; so = so->next) + so->found_me = 0; + /* Now add the symbol files. */ - while ((so = find_solib (so)) != NULL) + while ((so = find_solib (so, 1)) != NULL) { + so->found_me = 1; if (so->so_name[0] && re_exec (so->so_name) && !match_main (so->so_name)) { @@ -1240,6 +1254,42 @@ } } + { + struct so_list *prev; + prev = NULL; + for (so = so_list_head; so != NULL; so = so->next) + { + if (!so->found_me) + { + /* FIXME: need analogue to disable_breakpoints_in_shlibs but + just for this one struct so_list. */ + + if (so->sections != NULL) + free (so->sections); + + free_objfile (so->objfile); + + /* Punt the issue of the section tables that we put in the + target vector. The excuse is that they are basically + used for coredumps rather than running programs, and + with coredumps we don't unload shared libraries. */ + + assert (so->abfd != NULL); + if (!bfd_close (so->abfd)) + warning ("cannot close \"%s\": %s", + so->so_name, bfd_errmsg (bfd_get_error ())); + + if (prev == NULL) + so_list_head = so->next; + else + prev->next = so->next; + + free (so); + } + prev = so; + } + } + /* Getting new symbols may change our opinion about what is frameless. */ if (so_last) @@ -1289,7 +1339,7 @@ addr_fmt = "016l"; #endif - while ((so = find_solib (so)) != NULL) + while ((so = find_solib (so, 0)) != NULL) { if (so->so_name[0]) { @@ -1347,7 +1397,7 @@ { register struct so_list *so = 0; /* link map state variable */ - while ((so = find_solib (so)) != NULL) + while ((so = find_solib (so, 0)) != NULL) { if (so->so_name[0]) { >From ac131313@cygnus.com Sat Apr 01 00:00:00 2000 From: Andrew Cagney To: GDB Patches Subject: RFA: Deprecate remote protocol sequence-ID Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <38DAF122.3CA0E862@cygnus.com> X-SW-Source: 2000-q1/msg00977.html Content-length: 309 I'd like to put forward the proposal that the sequence-id: $sequence-id:packet-data#checksum be clearly deprecated. GDB doesn't produce them and all known targets do nothing useful with them. Further, the syntax is dangerous as it restricts (in a very bizare way) the contents of actual packets. Andrew >From ac131313@cygnus.com Sat Apr 01 00:00:00 2000 From: Andrew Cagney To: Scott Bambrough Cc: GDB Patches Subject: Re: RFC: Patch to arm-tdep.c -- Register flavors Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <38AA1597.CD9A8670@cygnus.com> References: <38A9C3F4.20C62065@cygnus.com> <38A9E368.E309E33C@netwinder.org> X-SW-Source: 2000-q1/msg00166.html Content-length: 407 Scott Bambrough wrote: > > Fernando, > > I have a couple of minor nits: > > Could you submit a unified diff instead of the context diff. It would be easier > to read. Personally I prefer diff -up. FWIW, both unified and context diffs are acceptable as patch submittions (see CONTRIBUTE). While I might personally prefer context diffs (showing my age?) I get to read and accept both. enjoy, Andrew >From msnyder@cygnus.com Sat Apr 01 00:00:00 2000 From: Michael Snyder To: Toshiyasu Morita Cc: gdb-patches@sourceware.cygnus.com Subject: Re: [PATCH]: Allow struct compare in expressions. Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <38D94D62.6951@cygnus.com> References: <200003222218.OAA02705@netcom.com> X-SW-Source: 2000-q1/msg00923.html Content-length: 5378 Toshiyasu Morita wrote: > > Does this compare ignore the padding in the struct? Nope. It's a binary compare, like memcmp. > > > > > > The following change allows GDB to evaluate (and set watchpoints on) > > expressions of the form (a == b) and (a != b), where a and b are > > simple C structs or unions. It would be possible to extend this > > further by allowing simple binary comparison for classes that don't > > have an operator== method: I leave that as an exercise for someone > > else. > > > > Jim Blandy, David Taylor, I think both of your approvals is required. > > > > 2000-03-22 Michael Snyder > > > > * eval.c (evaluate_subexp_standard): allow for simple comparison > > of structures, in the absense of C++ method symbols. > > * symtab.c (total_number_of_methods): make public, for use above. > > * symtab.h (total_number_of_methods): publish prototype. > > > > Index: ChangeLog > > =================================================================== > > RCS file: /cvs/src/src/gdb/ChangeLog,v > > retrieving revision 1.163 > > diff -c -r1.163 ChangeLog > > *** ChangeLog 2000/03/22 09:45:01 1.163 > > --- ChangeLog 2000/03/22 20:38:33 > > *************** > > *** 1,3 **** > > --- 1,10 ---- > > + 2000-03-22 Michael Snyder > > + > > + * eval.c (evaluate_subexp_standard): allow for simple comparison > > + of structures, in the absense of C++ method symbols. > > + * symtab.c (total_number_of_methods): make public, for use above. > > + * symtab.h (total_number_of_methods): publish prototype. > > + > > 2000-03-22 Mark Kettenis > > > > * config/i386/tm-i386aix.h (I386_AIX_TARGET): Remove. > > Index: eval.c > > =================================================================== > > RCS file: /cvs/src/src/gdb/eval.c,v > > retrieving revision 1.2 > > diff -c -r1.2 eval.c > > *** eval.c 2000/03/14 17:01:04 1.2 > > --- eval.c 2000/03/22 20:38:34 > > *************** > > *** 1448,1454 **** > > arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside); > > if (noside == EVAL_SKIP) > > goto nosideret; > > ! if (binop_user_defined_p (op, arg1, arg2)) > > { > > return value_x_binop (arg1, arg2, op, OP_NULL, noside); > > } > > --- 1448,1459 ---- > > arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside); > > if (noside == EVAL_SKIP) > > goto nosideret; > > ! > > ! /* NOTE: because BINOP_EQUAL is a legal operaton for > > ! C structs (as opposed to C++ classes), revert to > > ! simple value comparison if the type has no methods. */ > > ! if (binop_user_defined_p (op, arg1, arg2) && > > ! total_number_of_methods (arg1->type) > 0) > > { > > return value_x_binop (arg1, arg2, op, OP_NULL, noside); > > } > > *************** > > *** 1463,1469 **** > > arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside); > > if (noside == EVAL_SKIP) > > goto nosideret; > > ! if (binop_user_defined_p (op, arg1, arg2)) > > { > > return value_x_binop (arg1, arg2, op, OP_NULL, noside); > > } > > --- 1468,1479 ---- > > arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside); > > if (noside == EVAL_SKIP) > > goto nosideret; > > ! > > ! /* NOTE: because BINOP_NOTEQUAL is a legal operaton for > > ! C structs (as opposed to C++ classes), revert to > > ! simple value comparison if the type has no methods. */ > > ! if (binop_user_defined_p (op, arg1, arg2) && > > ! total_number_of_methods (arg1->type) > 0) > > { > > return value_x_binop (arg1, arg2, op, OP_NULL, noside); > > } > > Index: symtab.c > > =================================================================== > > RCS file: /cvs/src/src/gdb/symtab.c,v > > retrieving revision 1.2 > > diff -c -r1.2 symtab.c > > *** symtab.c 2000/02/08 04:39:02 1.2 > > --- symtab.c 2000/03/22 20:38:34 > > *************** > > *** 2217,2225 **** > > reader because the type of the baseclass might still be stubbed > > when the definition of the derived class is parsed. */ > > > > ! static int total_number_of_methods PARAMS ((struct type * type)); > > ! > > ! static int > > total_number_of_methods (type) > > struct type *type; > > { > > --- 2217,2223 ---- > > reader because the type of the baseclass might still be stubbed > > when the definition of the derived class is parsed. */ > > > > ! int > > total_number_of_methods (type) > > struct type *type; > > { > > Index: symtab.h > > =================================================================== > > RCS file: /cvs/src/src/gdb/symtab.h,v > > retrieving revision 1.4 > > diff -c -r1.4 symtab.h > > *** symtab.h 2000/03/21 22:37:42 1.4 > > --- symtab.h 2000/03/22 20:38:34 > > *************** > > *** 1462,1467 **** > > --- 1462,1472 ---- > > extern int > > in_prologue PARAMS ((CORE_ADDR pc, CORE_ADDR func_start)); > > > > + /* Number of method symbols for TYPE > > + (and all its base classes) */ > > + extern int > > + total_number_of_methods PARAMS ((struct type * type)); > > + > > extern struct symbol * > > fixup_symbol_section PARAMS ((struct symbol *, struct objfile *)); > > > > >From dima@Chg.RU Sat Apr 01 00:00:00 2000 From: Dmitry Sivachenko To: gdb-patches@sourceware.cygnus.com Subject: changes to gdb.texinfo Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <200001021829.VAA60882@netserv1.chg.ru> X-SW-Source: 2000-q1/msg00003.html Content-length: 2709 WHOOPS! It seems I forgot to attach ther patch itself. Here is it: --- gdb.texinfo.old Sun Jan 2 20:55:42 2000 +++ gdb.texinfo Sun Jan 2 20:57:35 2000 @@ -6373,13 +6373,13 @@ @item CAP(@var{c}) If @var{c} is a lower case letter, it returns its upper case -equivalent, otherwise it returns its argument +equivalent, otherwise it returns its argument. @item CHR(@var{i}) Returns the character whose ordinal value is @var{i}. @item DEC(@var{v}) -Decrements the value in the variable @var{v}. Returns the new value. +Decrements the value in the variable @var{v} by one. Returns the new value. @item DEC(@var{v},@var{i}) Decrements the value in the variable @var{v} by @var{i}. Returns the @@ -6396,7 +6396,7 @@ Returns the index of the last member of @var{a}. @item INC(@var{v}) -Increments the value in the variable @var{v}. Returns the new value. +Increments the value in the variable @var{v} by one. Returns the new value. @item INC(@var{v},@var{i}) Increments the value in the variable @var{v} by @var{i}. Returns the @@ -6417,8 +6417,8 @@ @item ORD(@var{x}) Returns the ordinal value of its argument. For example, the ordinal -value of a character is its ASCII value (on machines supporting the -ASCII character set). @var{x} must be of an ordered type, which include +value of a character is its @sc{ascii} value (on machines supporting the +@sc{ascii} character set). @var{x} must be of an ordered type, which include integral, character and enumerated types. @item SIZE(@var{x}) @@ -6463,7 +6463,7 @@ @item Character constants consist of a single character enclosed by a pair of like quotes, either single (@code{'}) or double (@code{"}). They may -also be expressed by their ordinal value (their ASCII value, usually) +also be expressed by their ordinal value (their @sc{ascii} value, usually) followed by a @samp{C}. @item @@ -8684,7 +8684,7 @@ suppressed. Response @var{data} can be run-length encoded to save space. A @samp{*} -means that the next character is an ASCII encoding giving a repeat count +means that the next character is an @sc{ascii} encoding giving a repeat count which stands for that many repetitions of the character preceding the @samp{*}. The encoding is @code{n+29}, yielding a printable character where @code{n >=3} (which is where rle starts to win). The printable @@ -9179,7 +9179,7 @@ @item @code{O}@var{XX...} @tab -@var{XX...} is hex encoding of ASCII data. This can happen at any time +@var{XX...} is hex encoding of @sc{ascii} data. This can happen at any time while the program is running and the debugger should continue to wait for 'W', 'T', etc. Hope you will apply it. Thanks again, --dima >From ac131313@cygnus.com Sat Apr 01 00:00:00 2000 From: Andrew Cagney To: GDB Patches Subject: [PATCH] MI - when MI interface output additional status info Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <38B0ED28.94ACAE2B@cygnus.com> X-SW-Source: 2000-q1/msg00272.html Content-length: 8177 Hello, The attatched patch tweeks breakpoint.c and infrun.c so that additional status information is included when MI reports that the target has halted. Any known problems with this one? Yes. At present the code uses the test: if (interpreter_p && strcmp (interpreter_p, "mi") == 0) which is pretty MI specific. It should be using some other more generic mechanism - the info it provides in this case is probably useful for any GUI. I figure resolving that can be held of until the next UI enters the scene. enjoy, Andrew Mon Feb 21 13:57:27 2000 Andrew Cagney * breakpoint.c (print_it_typical, watchpoint_check, print_one_breakpoint, mention): When MI include additional target status information. * infrun.c (print_stop_reason, normal_stop): Ditto. Index: breakpoint.c =================================================================== RCS file: /cvs/src/src/gdb/breakpoint.c,v retrieving revision 1.1.1.24 diff -p -r1.1.1.24 breakpoint.c *** breakpoint.c 2000/02/03 04:14:25 1.1.1.24 --- breakpoint.c 2000/02/21 07:08:46 *************** print_it_typical (bs) *** 1909,1914 **** --- 1909,1916 ---- #ifdef UI_OUT annotate_breakpoint (bs->breakpoint_at->number); ui_out_text (uiout, "\nBreakpoint "); + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + ui_out_field_string (uiout, "reason", "breakpoint-hit"); ui_out_field_int (uiout, "bkptno", bs->breakpoint_at->number); ui_out_text (uiout, ", "); return PRINT_SRC_AND_LOC; *************** print_it_typical (bs) *** 2052,2057 **** --- 2054,2061 ---- { annotate_watchpoint (bs->breakpoint_at->number); #ifdef UI_OUT + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + ui_out_field_string (uiout, "reason", "watchpoint-trigger"); mention (bs->breakpoint_at); ui_out_list_begin (uiout, "value"); ui_out_text (uiout, "\nOld value = "); *************** print_it_typical (bs) *** 2080,2085 **** --- 2084,2091 ---- case bp_read_watchpoint: #ifdef UI_OUT + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + ui_out_field_string (uiout, "reason", "read-watchpoint-trigger"); mention (bs->breakpoint_at); ui_out_list_begin (uiout, "value"); ui_out_text (uiout, "\nValue = "); *************** print_it_typical (bs) *** 2102,2107 **** --- 2108,2115 ---- if (bs->old_val != NULL) { annotate_watchpoint (bs->breakpoint_at->number); + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + ui_out_field_string (uiout, "reason", "access-watchpoint-trigger"); mention (bs->breakpoint_at); ui_out_list_begin (uiout, "value"); ui_out_text (uiout, "\nOld value = "); *************** print_it_typical (bs) *** 2114,2119 **** --- 2122,2129 ---- else { mention (bs->breakpoint_at); + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + ui_out_list_begin (uiout, "value"); ui_out_field_string (uiout, "reason", "access-watchpoint-trigger"); ui_out_text (uiout, "\nValue = "); } *************** print_it_typical (bs) *** 2148,2157 **** --- 2158,2175 ---- here. */ case bp_finish: + #ifdef UI_OUT + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + ui_out_field_string (uiout, "reason", "function-finished"); + #endif return PRINT_UNKNOWN; break; case bp_until: + #ifdef UI_OUT + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + ui_out_field_string (uiout, "reason", "location-reached"); + #endif return PRINT_UNKNOWN; break; *************** watchpoint_check (p) *** 2360,2365 **** --- 2378,2385 ---- will be deleted already. So we have no choice but print the information here. */ #ifdef UI_OUT + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + ui_out_field_string (uiout, "reason", "watchpoint-scope"); ui_out_text (uiout, "\nWatchpoint "); ui_out_field_int (uiout, "wpnum", bs->breakpoint_at->number); ui_out_text (uiout, " deleted because the program has left the block in\n\ *************** print_one_breakpoint (struct breakpoint *** 3446,3451 **** --- 3466,3478 ---- #endif } + #ifdef UI_OUT + /* Output the count also if it is zero, but only if this is + mi. FIXME: Should have a better test for this. */ + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + if (show_breakpoint_hit_counts && b->hit_count == 0) + ui_out_field_int (uiout, "times", b->hit_count); + #endif if (b->ignore_count) { *************** mention (b) *** 4446,4455 **** --- 4473,4496 ---- break; #endif case bp_breakpoint: + #ifdef UI_OUT + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + { + say_where = 0; + break; + } + #endif printf_filtered ("Breakpoint %d", b->number); say_where = 1; break; case bp_hardware_breakpoint: + #ifdef UI_OUT + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + { + say_where = 0; + break; + } + #endif printf_filtered ("Hardware assisted breakpoint %d", b->number); say_where = 1; break; *************** mention (b) *** 4505,4510 **** --- 4546,4555 ---- } #ifdef UI_OUT do_cleanups (old_chain); + #endif + #ifdef UI_OUT + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + return; #endif printf_filtered ("\n"); } Index: infrun.c =================================================================== RCS file: /cvs/src/src/gdb/infrun.c,v retrieving revision 1.2 diff -p -r1.2 infrun.c *** infrun.c 2000/02/09 08:52:45 1.2 --- infrun.c 2000/02/21 07:09:17 *************** print_stop_reason (enum inferior_stop_re *** 3223,3228 **** --- 3223,3235 ---- case END_STEPPING_RANGE: /* We are done with a step/next/si/ni command. */ /* For now print nothing. */ + #ifdef UI_OUT + /* Print a message only if not in the middle of doing a "step n" + operation for n > 1 */ + if (!step_multi || !stop_step) + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + ui_out_field_string (uiout, "reason", "end-stepping-range"); + #endif break; case BREAKPOINT_HIT: /* We found a breakpoint. */ *************** print_stop_reason (enum inferior_stop_re *** 3232,3237 **** --- 3239,3246 ---- /* The inferior was terminated by a signal. */ #ifdef UI_OUT annotate_signalled (); + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + ui_out_field_string (uiout, "reason", "exited-signalled"); ui_out_text (uiout, "\nProgram terminated with signal "); annotate_signal_name (); ui_out_field_string (uiout, "signal-name", target_signal_to_name (stop_info)); *************** print_stop_reason (enum inferior_stop_re *** 3264,3275 **** --- 3273,3288 ---- annotate_exited (stop_info); if (stop_info) { + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + ui_out_field_string (uiout, "reason", "exited"); ui_out_text (uiout, "\nProgram exited with code "); ui_out_field_fmt (uiout, "exit-code", "0%o", (unsigned int) stop_info); ui_out_text (uiout, ".\n"); } else { + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + ui_out_field_string (uiout, "reason", "exited-normally"); ui_out_text (uiout, "\nProgram exited normally.\n"); } #else *************** The same program may be running in anoth *** 3445,3451 **** --- 3458,3474 ---- default: internal_error ("Unknown value."); } + #ifdef UI_OUT + /* For mi, have the same behavior every time we stop: + print everything but the source line. */ + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + source_flag = LOC_AND_ADDRESS; + #endif + #ifdef UI_OUT + if (interpreter_p && strcmp (interpreter_p, "mi") == 0) + ui_out_field_int (uiout, "thread-id", pid_to_thread_id (inferior_pid)); + #endif /* The behavior of this routine with respect to the source flag is: SRC_LINE: Print only source line >From hjl@lucon.org Sat Apr 01 00:00:00 2000 From: "H . J . Lu" To: Mark Kettenis Cc: gdb-patches@sourceware.cygnus.com, gdb@sourceware.cygnus.com Subject: Re: A revised patch for dlclose Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <20000307173547.A1068@lucon.org> References: <20000307120800.A27315@valinux.com> <200003080058.e280wga00453@delius.kettenis.local> <20000307170321.A884@lucon.org> <200003080119.e281Jul00524@delius.kettenis.local> X-SW-Source: 2000-q1/msg00577.html Content-length: 1172 On Wed, Mar 08, 2000 at 02:19:56AM +0100, Mark Kettenis wrote: > Date: Tue, 7 Mar 2000 17:03:21 -0800 > From: "H . J . Lu" > Cc: gdb-patches@sourceware.cygnus.com, gdb@sourceware.cygnus.com > Content-Type: text/plain; charset=us-ascii > > > HJ, please stop wasting your time pushing this patch. The patch has > > several bad points, that you cannot fix without considerable changes > > to the way solib.c handles and caches the link map. > > I just pointed out gdb needed to check the unloaded DSOs when handling > the BPSTAT_WHAT_CHECK_SHLIBS and BPSTAT_WHAT_CHECK_SHLIBS_RESUME_FROM_HOOK > events. It is a serious bug to me and it should be fixed in 5.0. I > don't care how it is fixed. > > But I, and I hope most of the other GDB maintainers, do care how it is > fixed! That is fine with me as long as it is fixed in 5.0. There is no excuse not to get gdb to work with dlclose. "I don't like the way it fixes the bug" doesn't count unless you can provide a different approach. I think it is unreasonable to have a perfect fix for every bug. We can work a better one after 5.0 if we don't have the time now. H.J. >From dima@Chg.RU Sat Apr 01 00:00:00 2000 From: Dmitry Sivachenko To: gdb-patches@sourceware.cygnus.com Subject: Small changes to gdb.texinfo Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <200001021759.UAA60795@netserv1.chg.ru> X-SW-Source: 2000-q1/msg00002.html Content-length: 174 Hello! The patch below is the proposed changes to gdb.texinfo. This changes ASCII->@sc{ascii} and several others small fixes. Please apply it. Thank you in advance, Dima. >From jimb@cygnus.com Sat Apr 01 00:00:00 2000 From: Jim Blandy To: Jimmy Guo Cc: gdb-patches@sourceware.cygnus.com Subject: Re: 2nd try: (patch) hpjyg03: (buildsym|language).[ch] Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: References: X-SW-Source: 2000-q1/msg00245.html Content-length: 627 > > Revision of patch hpjyg03: > > Use buildsym.c:add_free_pendings() to manage addition to free_pendings; > > Yanked out subfiles change to end_symtab() in the original patch > > submission. > > Okay. I think David Taylor still needs to approve the language.[ch] > changes, but I approve the buildsym.[ch] changes. I applied this. 2000-02-18 Jim Blandy From Jimmy Guo : * buildsym.h (add_free_pendings): Declare. * buildsym.c (add_free_pendings): New function. (make_blockvector): 32x64 fix using longest_local_hex_string(). (start_subfile): initialize variable 'subfile'. >From ac131313@cygnus.com Sat Apr 01 00:00:00 2000 From: Andrew Cagney To: GDB Patches Subject: Re: Heads up - Alpha ISO-C fixes Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <38C060E8.845E7324@cygnus.com> References: <38BF7D8C.BE18FAAF@cygnus.com> X-SW-Source: 2000-q1/msg00490.html Content-length: 5157 Andrew Cagney wrote: > diff -upr gdb-19991116.orig/gdb/findvar.c gdb-19991116/gdb/findvar.c > +++ gdb-19991116/gdb/findvar.c Tue Nov 23 14:50:48 1999 The attatched cleans up part of findvar.c Andrew PS: part of the problem is that include/ansidecl.h is defining ``PTR'' as ``char *''. Ignoring that, these changes are due anyway. Sat Mar 4 11:49:21 2000 Andrew Cagney * defs.h (store_address, store_unsigned_integer, store_address): Replace PTR with void* in delcaration. * findvar.c (extract_signed_integer, extract_unsigned_integer, extract_long_unsigned_integer, extract_address, store_signed_integer, store_unsigned_integer, store_address): Convert definition to ISO-C. Replace PTR with void*. Index: gdb/defs.h =================================================================== RCS file: /cvs/src/src/gdb/defs.h,v retrieving revision 1.6 diff -p -r1.6 defs.h *** defs.h 2000/03/04 00:40:40 1.6 --- defs.h 2000/03/04 00:56:04 *************** extern int extract_long_unsigned_integer *** 1038,1048 **** extern CORE_ADDR extract_address (void *, int); ! extern void store_signed_integer (PTR, int, LONGEST); ! extern void store_unsigned_integer (PTR, int, ULONGEST); ! extern void store_address (PTR, int, LONGEST); /* Setup definitions for host and target floating point formats. We need to consider the format for `float', `double', and `long double' for both target --- 1038,1048 ---- extern CORE_ADDR extract_address (void *, int); ! extern void store_signed_integer (void *, int, LONGEST); ! extern void store_unsigned_integer (void *, int, ULONGEST); ! extern void store_address (void *, int, LONGEST); /* Setup definitions for host and target floating point formats. We need to consider the format for `float', `double', and `long double' for both target Index: gdb/findvar.c =================================================================== RCS file: /cvs/src/src/gdb/findvar.c,v retrieving revision 1.3 diff -p -r1.3 findvar.c *** findvar.c 2000/03/02 06:50:50 1.3 --- findvar.c 2000/03/04 00:56:07 *************** static int read_relative_register_raw_by *** 57,66 **** you lose #endif ! LONGEST ! extract_signed_integer (addr, len) ! PTR addr; ! int len; { LONGEST retval; unsigned char *p; --- 57,64 ---- you lose #endif ! LONGEST ! extract_signed_integer (void *addr, int len) { LONGEST retval; unsigned char *p; *************** That operation is not available on integ *** 94,102 **** } ULONGEST ! extract_unsigned_integer (addr, len) ! PTR addr; ! int len; { ULONGEST retval; unsigned char *p; --- 92,98 ---- } ULONGEST ! extract_unsigned_integer (void *addr, int len) { ULONGEST retval; unsigned char *p; *************** That operation is not available on integ *** 130,139 **** function returns 1 and sets *PVAL. Otherwise it returns 0. */ int ! extract_long_unsigned_integer (addr, orig_len, pval) ! PTR addr; ! int orig_len; ! LONGEST *pval; { char *p, *first_addr; int len; --- 126,132 ---- function returns 1 and sets *PVAL. Otherwise it returns 0. */ int ! extract_long_unsigned_integer (void *addr, int orig_len, LONGEST *pval) { char *p, *first_addr; int len; *************** extract_long_unsigned_integer (addr, ori *** 177,185 **** } CORE_ADDR ! extract_address (addr, len) ! PTR addr; ! int len; { /* Assume a CORE_ADDR can fit in a LONGEST (for now). Not sure whether we want this to be true eventually. */ --- 170,176 ---- } CORE_ADDR ! extract_address (void *addr, int len) { /* Assume a CORE_ADDR can fit in a LONGEST (for now). Not sure whether we want this to be true eventually. */ *************** extract_address (addr, len) *** 187,196 **** } void ! store_signed_integer (addr, len, val) ! PTR addr; ! int len; ! LONGEST val; { unsigned char *p; unsigned char *startaddr = (unsigned char *) addr; --- 178,184 ---- } void ! store_signed_integer (void *addr, int len, LONGEST val) { unsigned char *p; unsigned char *startaddr = (unsigned char *) addr; *************** store_signed_integer (addr, len, val) *** 217,226 **** } void ! store_unsigned_integer (addr, len, val) ! PTR addr; ! int len; ! ULONGEST val; { unsigned char *p; unsigned char *startaddr = (unsigned char *) addr; --- 205,211 ---- } void ! store_unsigned_integer (void *addr, int len, ULONGEST val) { unsigned char *p; unsigned char *startaddr = (unsigned char *) addr; *************** store_unsigned_integer (addr, len, val) *** 250,259 **** gdb-local memory pointed to by "addr" for "len" bytes. */ void ! store_address (addr, len, val) ! PTR addr; ! int len; ! LONGEST val; { store_unsigned_integer (addr, len, val); } --- 235,241 ---- gdb-local memory pointed to by "addr" for "len" bytes. */ void ! store_address (void *addr, int len, LONGEST val) { store_unsigned_integer (addr, len, val); } >From ac131313@cygnus.com Sat Apr 01 00:00:00 2000 From: Andrew Cagney To: Nick Clifton Cc: gdb-patches@sourceware.cygnus.com Subject: Re: Add support for WinCE toolchains Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <38B32F68.71A4EB6A@cygnus.com> References: <200002222339.PAA09009@elmo.cygnus.com> X-SW-Source: 2000-q1/msg00317.html Content-length: 3780 Nick Clifton wrote: > > Hi Guys, > > May I have permission to apply the following patch please ? It adds > support for toolchains which are targeted at Microsoft's WinCE > execution environment. For the moment this means the sh-pe, mips-pe > and arm-wince-pe toolchains. > > Cheers > Nick > > 2000-02-22 Nick Clifton Chris Faylor > * config/arm/tm-arm.h: Add WinCE support. > * config/mips/tm-mips.h: Add WinCE support. > * config/sh/tm-sh.h: Add WinCE support. Nick, I'm not sure about these changes. Would having config/{arm,mips,sh}/tm-wince.h files be better? The patches look very wince specific. Andrew PS Don't forget to put any new files through GNU indent and to touch up the contributor notices. > Index: config/arm/tm-arm.h > =================================================================== > RCS file: /cvs/src//src/gdb/config/arm/tm-arm.h,v > retrieving revision 1.1.1.9 > diff -p -r1.1.1.9 tm-arm.h > *** tm-arm.h 2000/02/05 07:29:52 1.1.1.9 > --- tm-arm.h 2000/02/22 23:31:33 > *************** void arm_fix_call_dummy (char *dummy, CO > *** 475,480 **** > --- 475,491 ---- > > CORE_ADDR arm_get_next_pc (CORE_ADDR pc); > > + /* Windows CE needs to do single stepping by forcing a trap into memory and > + it is little-endian. */ > + > + #ifdef _WIN32_WCE > + #define SOFTWARE_SINGLE_STEP_P 1 > + #define SOFTWARE_SINGLE_STEP(sig, bp_p) wince_software_single_step (sig, bp_p) > + void wince_software_single_step (unsigned int, int); > + #undef TARGET_BYTE_ORDER_SELECTABLE > + #define TARGET_BYTE_ORDER LITTLE_ENDIAN > + #endif > + > /* Macros for setting and testing a bit in a minimal symbol that marks > it as Thumb function. The MSB of the minimal symbol's "info" field > is used for this purpose. This field is already being used to store > > Index: config/mips/tm-mips.h > =================================================================== > RCS file: /cvs/src//src/gdb/config/mips/tm-mips.h,v > retrieving revision 1.1.1.11 > diff -p -r1.1.1.11 tm-mips.h > *** tm-mips.h 1999/12/22 21:45:14 1.1.1.11 > --- tm-mips.h 2000/02/22 23:31:34 > *************** struct value; > *** 45,50 **** > --- 45,61 ---- > #define MIPS_EABI 0 > #endif > > + /* Windows CE needs to do single stepping by forcing a trap into memory and > + it is little-endian. */ > + > + #ifdef _WIN32_WCE > + #define SOFTWARE_SINGLE_STEP_P 1 > + #define SOFTWARE_SINGLE_STEP(sig, bp_p) wince_software_single_step (sig, bp_p) > + void wince_software_single_step (unsigned int, int); > + #undef TARGET_BYTE_ORDER_SELECTABLE > + #define TARGET_BYTE_ORDER LITTLE_ENDIAN > + #endif > + > #if !defined (TARGET_MONITOR_PROMPT) > #define TARGET_MONITOR_PROMPT "" > #endif > > Index: config/sh/tm-sh.h > =================================================================== > RCS file: /cvs/src//src/gdb/config/sh/tm-sh.h,v > retrieving revision 1.1.1.8 > diff -p -r1.1.1.8 tm-sh.h > *** tm-sh.h 1999/12/14 01:05:42 1.1.1.8 > --- tm-sh.h 2000/02/22 23:31:35 > *************** extern CORE_ADDR sh_skip_prologue PARAMS > *** 54,59 **** > --- 54,70 ---- > > #define SAVED_PC_AFTER_CALL(frame) (ADDR_BITS_REMOVE(read_register(PR_REGNUM))) > > + /* Windows CE needs to do single stepping by forcing a trap into memory and > + it is little-endian. */ > + > + #ifdef _WIN32_WCE > + #define SOFTWARE_SINGLE_STEP_P 1 > + #define SOFTWARE_SINGLE_STEP(sig, bp_p) wince_software_single_step (sig, bp_p) > + void wince_software_single_step (unsigned int, int); > + #undef TARGET_BYTE_ORDER_SELECTABLE > + #define TARGET_BYTE_ORDER LITTLE_ENDIAN > + #endif > + > /* Stack grows downward. */ > > #define INNER_THAN(lhs,rhs) ((lhs) < (rhs)) >From dan@cgsoftware.com Sat Apr 01 00:00:00 2000 From: dan@cgsoftware.com (Daniel Berlin+list.gdb-patches) To: Jimmy Guo Cc: "Daniel Berlin+list.gdb-patches" , Chris Faylor , gdb-patches@sourceware.cygnus.com Subject: Re: patch: regression: C++ overload Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <8zz96nfm.fsf@dan.resnet.rochester.edu> References: X-SW-Source: 2000-q1/msg00974.html Content-length: 949 Jimmy Guo writes: > >There weren't any regressions caused by the problem, you just get 2 > >less unexpected passes, so i didn't notice any problems. > > I should have caught that when I merged HP WDB's source up to 3/21's > yesterday. > > Actually the testing caught this when I ran the tests at our HP aCC > pass, for which we are used to PASSs, but got XFAs for these test points > with odd number of arguments (and then appeared on and off at repeated > print commands, which points to some sort of UMR problem). I can't run those tests yet, i haven't figured out how to convince it to let me, or they aren't the tests you are talking about. I'm adding some testsuite tests to gdb.c++/overload.exp for multiarg overloads. I had a feeling something was wrong when i could do stuff on beos i couldn't do on FreeBSD, but like i said, i hadn't had time to investigate. I'm looking at the RTTI patch you sent me. > > - Jimmy >From ac131313@cygnus.com Sat Apr 01 00:00:00 2000 From: Andrew Cagney To: Robert Lipe Cc: gdb-patches@sourceware.cygnus.com Subject: Re: PATCH: GNU C extention in uw-thread.c Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <38A7E54F.AEE506F0@cygnus.com> References: <20000123153115.A7072@rjlhome.sco.com> X-SW-Source: 2000-q1/msg00141.html Content-length: 959 Robert Lipe wrote: > > CALL_BASE uses __FUNCTION__ which is a GNU C extension. > > This might not be the best way to deal with this, but it allows compilation > on non-GNU compilers. FYI, an equivalent patch was applied by Nick Duff. thanks, Andrew > > RJL > > Index: uw-thread.c > =================================================================== > RCS file: /cvs/gdb/gdb/gdb/uw-thread.c,v > retrieving revision 1.1.1.1 > diff -u -p -r1.1.1.1 uw-thread.c > --- uw-thread.c 2000/01/18 00:54:24 1.1.1.1 > +++ uw-thread.c 2000/01/23 21:31:57 > @@ -152,6 +152,10 @@ do { \ > * > * Otherwise, issue an error message and return nonlocally. > */ > +#if !defined (__FUNCTION__) > +# define __FUNCTION__ > +#endif > + > #define CALL_BASE(call) \ > do { \ > if (!lwp_infpid ()) \ >From msnyder@cygnus.com Sat Apr 01 00:00:00 2000 From: Michael Snyder To: Andrew Cagney Cc: gdb-patches@sourceware.cygnus.com Subject: Re: [PATCH] Document the ThreadInfo remote protocol queries Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <38D90CE6.4D18@cygnus.com> References: <200003202316.PAA07888@cleaver.cygnus.com> <38D6FCE2.EBD9830F@cygnus.com> <38D7C38C.6CB0@cygnus.com> <38D85C2F.FF89881D@cygnus.com> X-SW-Source: 2000-q1/msg00906.html Content-length: 130 Andrew Cagney wrote: > Should ``C'' also be suceeded by something like ``qThread''? Is ``C'' > still used? 'qC' is still used. >From kettenis@wins.uva.nl Sat Apr 01 00:00:00 2000 From: Mark Kettenis To: gdb-patches@sourceware.cygnus.com Subject: [RFA] Eliminate TARGET_{EXTRACT|STORE}_FLOATING hooks Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <200003291906.e2TJ6PK00265@delius.kettenis.local> X-SW-Source: 2000-q1/msg01107.html Content-length: 1339 Hi, Now that I've removed the evil TARGET_{EXTRACT|STORE}_FLOATING definitions from `config/i386/tm-linux.h' we might as well remove the hooks from `findvar.c' too. OK to check this in? Mark 2000-03-29 Mark Kettenis * findvar.c (extract_floating): Remove reference to TARGET_EXTRACT_FLOATING. (store_floating): Remove reference to TARGET_STORE_FLOATING. Index: findvar.c =================================================================== RCS file: /cvs/src/src/gdb/findvar.c,v retrieving revision 1.4 diff -u -p -r1.4 findvar.c --- findvar.c 2000/03/04 01:05:48 1.4 +++ findvar.c 2000/03/29 18:25:19 @@ -289,10 +289,6 @@ extract_floating (void *addr, int len) else floatformat_to_doublest (TARGET_LONG_DOUBLE_FORMAT, addr, &dretval); } -#ifdef TARGET_EXTRACT_FLOATING - else if (TARGET_EXTRACT_FLOATING (addr, len, &dretval)) - return dretval; -#endif else { error ("Can't deal with a floating point number of %d bytes.", len); @@ -333,10 +329,6 @@ store_floating (void *addr, int len, DOU else floatformat_from_doublest (TARGET_LONG_DOUBLE_FORMAT, &val, addr); } -#ifdef TARGET_STORE_FLOATING - else if (TARGET_STORE_FLOATING (addr, len, val)) - return; -#endif else { error ("Can't deal with a floating point number of %d bytes.", len); >From ac131313@cygnus.com Sat Apr 01 00:00:00 2000 From: Andrew Cagney To: Michael Snyder Cc: Mark Kettenis , gdb-patches@sourceware.cygnus.com Subject: Re: [PATCH] Replace ../include/wait.h with gdb_wait.h. Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <38A241CA.1634F124@cygnus.com> References: <38A12872.13D194C4@cygnus.com> <200002091429.e19ETk916570@delius.kettenis.local> X-SW-Source: 2000-q1/msg00107.html Content-length: 5234 Michael, I only committed the #include fix in: > 2000-02-09 Mark Kettenis > > * linux-thread.c: Include defs.h before gdb_wait.h. > (linuxthreads_attach): Use WSETSTOP instead of __W_STOPCODE. > (linuxthreads_create_inferior): Likewise. > > * gdb_wait.h (WSETEXIT): Define in terms of W_EXITCODE if defined. > (WSETSTOP): Define in terms of W_STOPCODE if defined. I'll leave the other changes to you. You'd know if there was a reason behind the way it was done. If it is actually all ok, then I can check the rest in. Andrew Mark Kettenis wrote: > > Date: Wed, 09 Feb 2000 19:42:26 +1100 > From: Andrew Cagney > > FYI, > > I've just checked in the attatched patch. It replaces the sometimes > convoluted sequence: > > [snip] > > Great! > > So far this has only been verified on for the d10v-elf target. Please > report / submit patches for other targets. > > There is a problem with `linux-thread.c', where `gdb_wait.h' is included > before config.h. This means that HAVE_SYS_WAIT_H and HAVE_WAIT_H are > still undefined and the system headers are never used. > > Since `linux-thread.c' uses __W_STOPCODE, and `gdb_wait.h' doesn't > provide a fallback macro I get a linker failure. Moving up the > include for `defs.h' solves this problem. > > The rest of GDB seems to be using WSETSTOP, so it seems appropriate to > use that macro instead of __W_STOPCODE in `linux-thread.c'. I changed > the definition of WSETSTOP and WSETEXIT in `gdb_wait.h' to use > W_STOPCODE and W_EXITCODE if they are available. All BSD-derived > systems and systems that try to be source-compatible with BSD (like > Linux and the Hurd) should have those macros. The change is merely > cosmetic but there might be systems out there that really use a > different way to store this information. > > Feel free to do with this patch what you want as long as you make sure > that `gdb_wait.h' is included after `config.h' in `linux-thread.c' :-). > > Mark > > PS Andrew, concering coding-style, current practice in a lot of GNU > packages is to use extra whitespace after `#' like in the following > example: > > #ifndef foobar > # ifdef foo > # define foobar foo > # else > # define foobar bar > # endif > #endif > > This makes things a bit more readable. The patch below doesn't do > this, but is it OK to use this style in GDB in the future? > > 2000-02-09 Mark Kettenis > > * linux-thread.c: Include defs.h before gdb_wait.h. > (linuxthreads_attach): Use WSETSTOP instead of __W_STOPCODE. > (linuxthreads_create_inferior): Likewise. > > * gdb_wait.h (WSETEXIT): Define in terms of W_EXITCODE if defined. > (WSETSTOP): Define in terms of W_STOPCODE if defined. > > Index: gdb/linux-thread.c > =================================================================== > RCS file: /cvs/src/src/gdb/linux-thread.c,v > retrieving revision 1.2 > diff -u -r1.2 linux-thread.c > --- gdb/linux-thread.c 2000/02/09 08:52:46 1.2 > +++ gdb/linux-thread.c 2000/02/09 14:23:02 > @@ -47,13 +47,13 @@ > linuxthreads package heavily relies on wait() synchronization to keep > them correct. */ > > +#include "defs.h" > #include /* for pid_t */ > #include /* for PT_* flags */ > #include "gdb_wait.h" /* for WUNTRACED and __WCLONE flags */ > #include /* for struct sigaction and NSIG */ > #include > > -#include "defs.h" > #include "target.h" > #include "inferior.h" > #include "gdbcore.h" > @@ -1129,7 +1129,7 @@ > linuxthreads_breakpoints_inserted = 1; > linuxthreads_breakpoint_last = -1; > linuxthreads_wait_last = -1; > - linuxthreads_exit_status = __W_STOPCODE(0); > + WSETSTOP (linuxthreads_exit_status, 0); > > child_ops.to_attach (args, from_tty); > > @@ -1189,7 +1189,7 @@ > linuxthreads_find_trap (inferior_pid, 1); > > linuxthreads_wait_last = -1; > - linuxthreads_exit_status = __W_STOPCODE(0); > + WSETSTOP (linuxthreads_exit_status, 0); > } > > linuxthreads_inferior_pid = 0; > @@ -1601,7 +1601,7 @@ > linuxthreads_breakpoints_inserted = 1; > linuxthreads_breakpoint_last = -1; > linuxthreads_wait_last = -1; > - linuxthreads_exit_status = __W_STOPCODE(0); > + WSETSTOP (linuxthreads_exit_status, 0); > > if (linuxthreads_max) > linuxthreads_attach_pending = 1; > Index: gdb/gdb_wait.h > =================================================================== > RCS file: /cvs/src/src/gdb/gdb_wait.h,v > retrieving revision 1.1 > diff -u -r1.1 gdb_wait.h > --- gdb/gdb_wait.h 2000/02/09 08:52:45 1.1 > +++ gdb/gdb_wait.h 2000/02/09 14:23:07 > @@ -86,11 +86,19 @@ > #endif > > #ifndef WSETEXIT > +#ifdef W_EXITCODE > +#define WSETEXIT(w,status) ((w) = W_EXITCODE(status, 0)) > +#else > #define WSETEXIT(w,status) ((w) = (0 | ((status) << 8))) > #endif > +#endif > > #ifndef WSETSTOP > +#ifndef W_STOPCODE > +#define WSETSTOP(w,sig) ((w) = W_STOPCODE(sig)) > +#else > #define WSETSTOP(w,sig) ((w) = (0177 | ((sig) << 8))) > +#endif > #endif > > /* >From jsm@cygnus.com Sat Apr 01 00:00:00 2000 From: Jason Molenda To: Jim Kingdon Cc: ezannoni@cygnus.com, gdb-patches@sourceware.cygnus.com Subject: Re: Remove gdb.base/annota2.exp Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <20000104124255.A556@cygnus.com> References: <200001020540.AAA31521@devserv.devel.redhat.com> <14450.18810.565455.834962@kwikemart.cygnus.com> <200001041950.OAA22296@devserv.devel.redhat.com> X-SW-Source: 2000-q1/msg00007.html Content-length: 893 Hi folks, I'm just back from vacation. I'll be digging through e-mail for the next day or so. :-) On Tue, Jan 04, 2000 at 02:50:32PM -0500, Jim Kingdon wrote: > > It seems that the file was correctly removed from the cvs repository > > some time ago. I suspect something went wrong on sourceware. > > If you run "cvs import" (like Jason does to get the sources to > sourceware) and a file has been removed, you need to manually remove > it. Not that I _know_ that's what happened but it sounds like it. Yeah, that's it. The whole importing business was supposed to be temporary--I remember a year ago Stan saying that we were only going to do it for another month or two--so I look at each snapshot diff by hand, and if I see files being removed, I remove them from the sourceware cvs repo by hand. I'm not too surprised I missed one, thanks for catching it. Jason Free the Software! >From fnasser@cygnus.com Sat Apr 01 00:00:00 2000 From: Fernando Nasser To: Andrew Cagney Cc: Fernando Nasser , gdb-patches@sourceware.cygnus.com Subject: Re: RFA: Prologue cache fix Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <38C412AC.952A1FA4@cygnus.com> References: <38B4073E.281C4CE0@redhat.com> <38BB65F6.44D991A2@cygnus.com> X-SW-Source: 2000-q1/msg00544.html Content-length: 2032 Andrew Cagney wrote: > > Fernando Nasser wrote: > > > > This patch fixes a problem that happens when gdb reconnects to a > > target. Targets that have a prologue cache must invalidate its contents > > or they can assume wrong things based on stale data. > > I'm wondering when exactly this prologue_cache provides real benefit? > So do I. I have tried to track down the history of this but it was lost in a merge of old... The FR30 target has the same cache and I am not sure were the first version appeared. > The only other possibility I can think of is is something like an > inferior function call where GDB comes back to that exact same address. > For a recursive call, the register info would be wrong. > > So anyone enlighten me as to when exactly this thing kicks in? :-) > The author justified this with the following comment: /* (...) When performing a backtrace, GDB will usually ask to scan the same function twice in a row (once to get the frame chain, and once to fill in the extra frame information). */ This would slow backtraces on targets with slow comm links. Maybe the right fix should have been prevent the two calls in the first place. But, if I am not mistaken, this is not trivial. So, the author came with this cache. I wonder if the author thought of recursion. At a first sight it seems wrong. > If the prologue_cache is purged at the same time as the frame obstack > then the two have the same lifetime. If that is the case then I think > that the prologue analysis might as well be left in the frame object in > ``struct frame_extra_info''. > Seems more logical. I vote to eliminate the prologue cache (as it seems that it has at least two serious bugs) and cope with the performance penalty until a valid optimization is found. What do you think? -- Fernando Nasser Red Hat - Toronto E-Mail: fnasser@cygnus.com 2323 Yonge Street, Suite #300 Tel: 416-482-2661 ext. 311 Toronto, Ontario M4P 2C9 Fax: 416-482-6299 >From fnasser@cygnus.com Sat Apr 01 00:00:00 2000 From: Fernando Nasser To: Nick Clifton Cc: ac131313@cygnus.com, gdb-patches@sourceware.cygnus.com Subject: Re: RFC: Patch to arm-tdep.c -- Register flavors Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <38AAEADC.9568B1B3@cygnus.com> References: <200002161819.KAA30075@elmo.cygnus.com> X-SW-Source: 2000-q1/msg00193.html Content-length: 904 Nick Clifton wrote: > > : Also are the functions: > : > : > ! /* From opcodes/arm-dis.c */ > : > ! > : > ! extern int get_arm_regname_num_options (void); > : > ! > : > ! extern int set_arm_regname_option (int option); > : > > : > ! extern int get_arm_regnames (int option, const char **setname, > : > ! const char **setdescription, > : > ! const char ***regnames); > : > : available in a header file (Nick?). That would indicate an ongoing > : committment, on the part of the opcode maintainers, to support these > : interfaces. > > They will be... I am about to check in the following patch: > Thank you Nick. I will adapt :-) -- Fernando Nasser Red Hat - Toronto E-Mail: fnasser@cygnus.com 2323 Yonge Street, Suite #300 Tel: 416-482-2661 ext. 311 Toronto, Ontario M4P 2C9 Fax: 416-482-6299 >From ac131313@cygnus.com Sat Apr 01 00:00:00 2000 From: Andrew Cagney To: GDB Patches Subject: [PATCH] MI - new directory gdb/mi/ Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: <38B0EE2A.67E55C03@cygnus.com> X-SW-Source: 2000-q1/msg00273.html Content-type: multipart/mixed; boundary="----------=_1583534362-29877-25" This is a multi-part message in MIME format... ------------=_1583534362-29877-25 Content-length: 202 Hello, The attatched is the contents of this new directory. Andrew Mon Feb 21 13:57:27 2000 Andrew Cagney * mi: New directory. MI interface to GDB. gdb.mi.tar.bz2 ------------=_1583534362-29877-25 Content-Type: application/x-bzip2; charset=binary; name="gdb.mi.tar.bz2" Content-Disposition: inline; filename="gdb.mi.tar.bz2" Content-Transfer-Encoding: base64 Content-Length: 85083 QlpoOTFBWSZTWaNtyz8Cxht/3/+2I0l///////////////8BAIIBAQQCIRIE ACACCGHSHvgAAAAAAUAAAAAAAAAAAAAAAAAAAKoAAAAAAAAAAKAAAAAAAAAJ AAAAAAAAAAAUAoAAAoAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkBRQAAAAABQAUAAAA RSKAAAAABQAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAACgAAAAAKAAAAAAAAAAA AAAAAAAAAAAAAACQAABQAAAAACgAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAo VKlAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAUAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQEGAAmAAJgAAAAAAAA AAAAAAACDAATAAEwAAAAAAAAAAAAAAABBgAJgACYAAAAAAAAAAAAAAAAgwAE wABMAAAAAAAAAAAAAAAACqJCCNANGQTI9NAST08jTTVPyKfpop7Uh6jeqM2V AGg9QGgGgGPSgVEkEEBAEACAE0ABNGjIAI0aIxDQynponlT1P1IBkD5YIe4y X9n4EV+18ip8iX7pUSlKUkv377vxIfwvBHgUq1/4wjDFWJbEsS+RCSf2Hxfc mGoRppCKsI/ibH8T+J/G2V4K8GNP5VK02u04bN8/9Q2O7sCYSJTFJYiqRUsi LJJEVQiqiRaSRKoEqInY7o/lbP/qLAcKEYKkg2Uf7iiSbKIkSlkbFUqKKSUF RCbJE//L0SE9qjRSKqpSlFVKKioVKoqoVVVFKpSRSoU/xJ/KVhpKqKpVQqkp UlVD/2VJMVEpQlKpQpQqpKpKVFKiVUSqqiiopVUiqVSSVKKUilFRUiqRUqpK RSgqiqiqSKqqqpSpVRSqpSqqVUkpQqiKlEVRKpSqlSpUoVJRUKqVRUqJSpOU xEpgMUhiqURVISqVSRKqAKMYlTYp/aiqJpWNk0lUqsYMFJVSlKqFYqTFIVjE rCqTFSqVUlUwYTEVKilYMMFFMYpVYYUqlUrDDFKqVUhVQqkVVKkUqlSVVSkl SorGJiqlQqjExiUqKYmIYpFVKqSYxVVSqjGKxSVTEmAVJQORsqf+Klo/0U+r 7Nv7B1KFVVVKJ2PFTRpphjljZp4sK3GNmlcMaN3i4ctjYxpu2bJo4OWximlT hjCqYxjduVwNOVNE2UqopWzdW4rEbnLRiaVWE00bKnqn8akmP/FyYbp/5O7R pjHowlUPRWildxy4Y0ps7lbtKw2N27caeCtlTSJUjFaP/uwx3V+Zy6mlN3RT SnRSbFd3Zs0Y2YqbN2m6tmzDdRinBTSm6m7YnKv+KbB0f+b1YaJXi3T86fg+ ad3KUpUcsYlB4qw9XkjRjGzZsYrY82w2bG6VpWlaYxN1bMYrTE3bMRsVVTFS StmGNE2aR4OGN1Tc8jqmm6nVy9r/0erbSvpX2c0FTdS1lpuLytcZR+1zq2Qu t9U0Hq2fY9iBN1CeSpHxIqpVSVUpUT/WrCvvVGKklVKr5OGJpSKpVFKkpSVU qjqqI3VI0qUqUpFUKqNKTFQ0pwqaKRVSVWlGFSlSqKqQp2TzY+Ctjljqpw6t n/5Y0k83V9CvNWKKn0MYrc//D/Bjo+phPN9Tl9ZwbqpWnVWn1vobu72vg+lJ PV/6OjxdHCuyvFjGzd4NjdjzPe4fY8HV0SVKiOQcqiqdGMQ+SmlfMdlVUKpV KqVSqKqfJUwqkxWFVVUqqxTBUqVUpUqlUpVQqoVJQpjGKkpVVijFRKpVSKqq qqqqlVVCqqklVIqpwx0FPIwwopQ4bKqabq+bZOjdhWMVSqlKpU3Nm6lKpuxi JJ0UxuNgqqlVBUpJXDEmKJVKpTGDFFYrEqjCiTFRjGMVVMfJiSaVGlVTEpOF TFIaKjTTA0+1/c02Bjqwe8OSnJ3Ox0f8nLHdw7OyqYbJsxjdjCqVw0w2VimK V8FYbt3o00qUqqlSpU4UxVYxWJMUeSQnKkdFJ4qSKo/+x+g9xweZTcw+wpoo 9p8TDco2KfcaNjRhyfI2NGjY0cnsPoODc3KYYYNymH0H1nQ6k3KdzqU6nmKN FH3lFFH/I+ZhSU+J4n2HsNh5FIngKTRgw+B2HwDDRh5lGxRSkpRopMKPgbDz Dg8DcYU4KPIbmE6HJSnBhh5EeQwNFFKJSKcD0NDRGH5GE/aUbBQpwYUophCl GChhhP3GGFNDg0ODYwaJg+s0U7FFKcGCnc9DD3HBT6B2OBue07H0HUdSmjk+ R+k6HJ9BToJoSlD+YoeRTqdDsaPUpJ7T3GHU8zD1KMKU5MNFDqbmFFMKYMKb mgew0TCU0YUKKbGIpTcobDqYYcntODY3Njk0h9BUeJUHUo7nydn2HBSoVSVU ilaMPtfY7PtbHU9Gnq0HU3U3btJpSodVY6NmKrgrsqtMVVYrGyvQ3MbMOBpw oxSqqsYwVNnQbOHyfif8z9J8ldzZ96vc2fg9z4Pg9jZsYVjs83ybq2V5vxae DqcOGK+0+12burhw83i83LD6m7Cpjlp9ToeauHk8XueTyY7u7zeD/8uGHV2e jlWzl/6vVjyad3VsOWMSnVhyqUpXZw3bDZVUibqlV1Vwrly0rY4fe5clPB9j Hi4fsej2Ozg9Hg82nvYxs5Y0aexwd3kpW7hups09j1abO72P/o8Gx3fI5ejz dnxfi5ejZ5PrfS+tWH2KFepp9bTY9H3PvaT9bwRs0aNFaYxjdjGMbD+tVV+5 pNz8jGzSvNWOSkFVI3aYJpKjSmKit2yVStIY02MNPk2YhRU2KxVbJu0w7sbK HcpilKkKo4SpI0qTSqrunJUpVU5cpUqpJyxgVUVKGKMVKqd1JiUPJ9DzdH4P U08B8kfa8nZJpsV+Ds+D6m5uV9CpMcomPrfqfW3OjGzu6KJyeB9yfNOzl8Xi 5d2nZ4var61MT6j4ve2bH6WmPobMKqqaKxjTTEwaaYxMV7FYlaUwkpX1MT1V SpNKOjGPqUcKVWxVOzTo2cKdVTBsYgxiqwlMMVVcMRsqMUxsxjDFYwKrFaaT Bitk04btlbtzSqlRWmzZs2bqTcpNNmNlKUxWlKppjE5VwcMNkqSOrGPNWynL ZhTTCV9T0aSNlSuzd1bOW7BuqqjG7HVWNMRwju/gNPAj5vJ9KR4KVXm+9ubu qT5PwVh6vwdH2vm+xw82N0+x9jq7NmyvqcOT3ntdG5X3MSpJjT2qer63vbO6 sdEkrEklU0SSsK3STGO6scqlVEjTSMBw4STGz7HVj3vRw8HRJNOHmfa6va6O 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 E0KlVKlJ/WJMYkVFRUqSkKilUVSoqKqpKUkiqSUqRSkqSlUpRKlRUpVSSlIq pVUUVKqSUkkUkqCKf6GPsV/epkIqik2VSpJSlKkUokqpVVRKomyoe9piQUpK pNgphUqpH3MMSKKklVKVIpSSqJVFVKqqKqqKpVVUhVVQqqqqiqVKVUiUqCqi VRUpFUkqqqpUKqVSpRFUSqclQwpVJRSlEopUqFFQVCqlKhW0TRpNJFKD6Ho8 mkblRKU8z/8n+Bono+T972PF1OApSlTdpjQqbmzRFbnV6uCeSp7GJiIpX7yk kiYpNKTFIpUSdlYSoUqIpUKRpIe080DZsMbKVNNKBVSCqj3qRiolKkqkqofS pioqpseR2f1qmn+H5nzSWoX+xjyhHD4nsf6Sqxv+jqx/U/Y0xjGMafqY7NzT w5vg+Tu7q/IgfUkkn0Eh/I9ifMnwYdTTCkVT+p/eTxVCVVUkmkmwOEmEwklS qeb3OXD3KqvQ9zY9rGOVOWzlu7sbsVs2VurdTGzhsnKtmzdu3blY4act3CtO G52Orcr2sY6Ox2V1dXLls5acK6uWmzhu2GzhXY7ndQqSSpFKhJ3Y8FSSkrQp SVSqkr5tKrGiUqJPiVGKkKklRSSYYJhKJUGzYYgrFTCisTCqxX1NJJpNIqSV imMMQVjExUkVWMYmFSKVUlQrBiRKVCpUjGMQYqqjDDBMYwqsVKpVJSopSikq iYwrDFFKCpURVIUqqFUKVJSkUpVKoKqVSlJVQVjFYrFVMVESq+hWkFKrRjBM VDdpiJVQ0VIpKjFYVKqMMKYhpho0Kqqopj+s9xjQ2ViqFVhhBUpUpFKlMVUx FUqsdCsEpUVSRpUxUIqiscNNNIiqfzFNNzYYSlQpUqqlRVRVKpSlSqSiUUjR UkqVEqkwKhBjEjAaH9if5FKp9yfrV4PocP8TGx9ThuiYo0lNJjHk/Q/W+59z hw2V1U6H5z9xH/scINBJorTlVMhwNU2CTGbJUUMY2RiNkxmMsKySwui8aZ/E UJI0CjE9j6D6Wm56oKYNPzva/sbD8DlhHxbMSMIqMYdmmHRiNlGlKqjGKrFG Kj+ZX9amyIpsqHk5Yk0VKpKpVQ2KpSdmGNKxFChSUdysfwq5eTY8FeCfcfuM MPuEP/wf+Yhg6uXV5Gx9ru2bt3dPzseD2OzhOH7XDGx+1XZ0ebd4vBP6X7FY N36Ur9ybJU2Gxj8x3bNJU95J8yUjSVGJSer/8h/rGz3H2D6DSaaOD2P3NzSv 4ihiofF3dGxXVucHBh+98H8xuU2YNPtPU2bG7k+b+s/EpPF4EeqonCepUkKq eLBVSpSRMJ73BukPrfSe50bIrHI0fS+pPej2MP+Z1Rw/tY9773g83m3Featm 7g2cOHCfxK6qnBUwqU8WBj6FTyKp5sPY7P43KTGkdTyNHDEH+p2dHtfidk7P Nh83vdx3eLEej62OSk9EcP+DonD5PBuex4tn4uyQ9ikPJ6urqr+ZPB3bPNy7 PA3YbBs6N2xR4sVwpid3d1eLu/FJN2k2eD/nf+T6n/2dX+gro9HgndjZ2Y00 jzYNn0vFOE0+LT2ntV7Xds0r3K5dFVuaeLYx1eDE6MNKjdobqU+Lk8SafB2P E8G7zd2Jy6OWitJyrZulMaK8TYx4t0/zGmGlDdTofBTk/5nd/erybmHo7vFj yT87g3R+5+Kej+5ublHwP9po0nZ9aPV4vFUPJ/zEcmI9w8VdTR0Ox3cp+ZSn dDDZ8H85hyfU4fJ9TY9DY3dWjkmzSH7mzZ5obGKp+tjzV+ox8GnCleDHsPR7 VcsVFVVKqFUiqkqkpRUpSqopSVVVA7KFctnAxu3Q0Yrds4bpDdXdUxVVFUnK p+l/Ce52bq6sMOxOqV8WmErqp81aU3Un0vc96GnU+JyaR8FdH0Dlj85jZFKe BynVpjTD71J5q6N1aN3vbtm7Tc2aJ0O5+B0HvcPg7Oj0Vjhu6qrl1K2KnZ8k 4Q3Sp/+iI6FT/i2OrdOTs2aRors9zq/2uWyTycNJyNNEaaMVs2PJNk3Nkf8F ebQrT7WmnodGni7N2mNmz2NPte8wqMebGnB6uh0bvBo/U9xjgejwKdHdMMPE 9GjDl9DHRu6NPJJPQUeasVJ0OjZ2Yk2SpiYVhiUqq02bH8aaPVSerBimitNJ gxsVCmju2Nk0SjEbpU0FTRp5NGjo3TxaI6GPa/M/e9XtP9r3NEnL0O5Vd2Gl NKabPc8Wmz2nDlo8zc9Xue1wr6H8Yn6n2qdnweTu04OXsfQmx3U2Jhw/OmzH 9D2p3TufoYiH/SjQwxU/kfyJJ+thPgod1ebyYf6iv9bu2bpsVKdmmmlVU/tY xFUmlTB/mbtn8bZpu+DQ3Vs7saU97sx9LZsr6HVun5NMbPrdD1fI8DwfFWNz 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 kkrT2K3fzJ7Tl3bKxKOpFe1j7ld2HDZsx3U5exO46o/ScnuOhhT4nsTxGjYp 3Oh/Ie1saPROB5qOTR8m74H1v8r6Ce56ur4uCuhwfrJh7VOD0fc6vvfgnyOS ldHdJMR/KofI5HwOqNjso9h6sTspwUniU7pXR9jD4JsnxPN4FOp1OR3Pg+J4 Nj5u7TT6Fe9XCbGFU9rsxy7u7ujY5bpJ0dVTZX6ymNPydUxU09WJJoqD7DwM BSonJU8FN04YYVy000JHsP+Z4nB/Cxpw+w8j3nvP3FMH53ofUehyew+lPuew Nz1eTTTTZs0f6Gz7H9p9Lcn0HR8nJsrqn52n1PqbJ4nDDDkwcMPsK3NkbtHt Nj+BJNn4DTh8lHL+N5N3dMNh6H9LZu830Psfi6PJXuPUqnR3PYnm9DYfa6vm /aeCScHc8XgdU/F6MHkU5eZ+J3eLu6oFUpU/lVieibMMGlH9LQaT6VYqKlcq xhTcqYqMRhiYmiqYjzSk5e19ScHc8nqqblY9GDq9XoT3mimw4KbHV4tjY5TR 708mmzZu4I8js83CtnuU7n+g8Tl5OjA7v0GhTTq6mPxfWrl5sebg/a7sd0r6 W7zVjGzY9x7G7Zs7n8rGH0sbHsO5sYfJujo/ESTkopRJFe5VN32vJ8lN26dG laOjZ3ebZ72xwaRSvxU9jdjTZjl4Mcups7MbuDc4VibnRo0fQ9WOiNmD6m7k 3Vsr3K9HLsrD6nLk/hPzmnDY5d1cFbDqQ7Hk0+g4fU+B0O57inU+J8jweDyK fJwepseZ3Pk3fQ8GzHxcPeeZjwdXZ/rdT+h/rcHudDHLl4Ojc9p8H0Pc3OjT g6vRuVThiYxgxHvODR5m5u8XvYfJT6ToeBonvOidzSdxu8RofU2Ymio6J3V3 Y08Hg6nxPJh4OB4m59p+oUo9BRh9Z/pfyOx1dT6SsTwYnieo9HKeTg8Ddy6P 7zTTRsNxs9B7kk06OHJ7zoaJw+T+J9r97d3U08mHmVJ8Hgep7DhsfsY8D2Hd 8n6D3GNPFydingp3PF2VD2qKUNyofgoni0TG7/aejydTl8HZ7To8lQpPuejs 8HvdWN2n3Gnq8nwTRHqV1OzE/qPE9U8XyVjdXZjGmMY2Oj7X7j4nydXidnvf ex+x9J8Wjgp6NHsV3K9Dg4Tup7TRhSVWyjDHsMST1NjG46mG5OjT3NzdPad2 xj5k4TTyeBylOgpT4JuHU8TzHk6P2Orl5PB73Rp7HQYo3dnmHdjwO6e9yOHt MHQoeLHgrRPa3Gm6vBWKMVuR2cNim42O53DwQbHk6ndoU5fwtMacN2yuyGmy nQo4P7zl9hu2NE9TTSvRs5bPMp1aeLl6tm70cKmj0dWk0eY4cuH5zubOqp8S p3eJ8HRO6jRRueJ4PsO5pHi/xmODzKjyT4GjY0P3JJ8GmzBIrzPNicHk4PB2 HJjdNjYwfcaaJ5p5PVs2Oj+Jp4v725oU7leiuio8lU83RVT4vcUxDRRwfacH LsVPMKnDZhisIp2Vu0n4OjZ3eb2tOT4McPrOXVXDufY/M+LzeD8HR5PE9g6u zR7jxdU4ebySTg9j4vJ0ebc/WdXQ0dSAqSsU3bE2NCvJRs0w82mm7Z7mzEnJ R4DDCsO7DyY807uzo+09DHZ1GPMe02bNPxdGxwUUYYx6HJybFNjDxPI6nZ+L g6Epw2NGnkPUYdjTsh1KV0KcKjobsPieLlTZTZpWn3n87ubJ1cNJ96e5FK0r uYbhwU7NHi5afSrybnvaeSOjDY7lG5hPqfB73macGJJuU6HmbGipOVeDyVOh oxTDc03NNj6zh4sV5PA7nk9w6HdT4HY0lfSbJ2PeYbKdGPce16nsbKbvF5HQ 9h5NknIUU2HtV6n8LdNBNK3ewphTueDFaV5H9TR0HQ3eqJyw3Y8zSbmj71Rp uYm7xRsnZu6tP6jh/pdnU4bGOzxdj5OB6n2uW7wP0q2bOzds6sdnk2Kkn3H2 N3wMeam51OG5pwe53dGjDY7lO6miu4m58jhjc3TumDDRwYU3K7mPycNjHKcJ Oh9j4tk5OzRwfFjE2KcmHtaTyGnVTRopj73vGKPF5G5sdHi06OD3mw8X9bg+ op5vxd0TSnUrc3R1Ukf0OGFeJWKOCqdHxGkrR3PJhsnmwqmFHkpP2J/a/Ap0 Ng8ymjo+LqfiU8BRTl9CvMPe9yDq7vM9zsUVwp8huN3LljzOGx5KYnLdOjT3 J1cDhy6HQ5cDTGnkmxJ2SqpQ2bn3nuaPzvqeDT6SlFcur6Wjdow97g9TZ6vq YcuTzVVejDqaaeww0qjyCoxXCjG5h0V0NzCTuVEUweZs97oY5YeZ0O6tNlHR /qOTTup4uE7ntPQ6ndyeLs9D8x9B8mzGzG7sYfE9jq9GHVOBudWE+KejybNk nD87T7GldTl3Nn6HuadWyujR9ojkx7zwPQ9DTwaNHDTT5nVDFO7q3Vj2Pm0b NGHVOxhh0O5SuGx8DyNiNHxKx2fBsY5eD+Uj2PE6lPxTwex1PI81I9jHxPJ1 dHQ83Do7pSqlU5Y9Gj0KdVTZwkmzdpVPU9gxOjZuVw2cq2TweTR9bg2blSuX i4Nmx5OpXgcH3mHL6Hvfe8Epsw8Ds6jDGNNH3vY9rlJO50PYfW6G6TZ4Pi+a eJp4n7E+wo8EqTowjliTq/OV9KngU+Dlp2OVfBseAk5SqqCVSJVSJVSVVUSq D5mm7kxI/U9ps2OryST8n0uh7ynQ+LDq8T7ldmzl8WzgbvNwbH9B8TTh+TTl wfmPc4OFT6XAcp0KjoknBWz2sbKeLDofBwYPkww4U7uxs0cncYmjh2NGGmK9 zlpynscnc2YKVSjkpj2lT4FTwNnQp1NMOTdJMebE4KNB0MODRTCqdFdHg6uF U+5uaTu3bntdjg+o6uH7HVhXVybncxMcNz8nJinkUnZRFVwU02PE0eRTR5Dc 0e4btx7Twbno8GH4uGGyo6ik8TZs/UMUeB4lGnYnk/zvV1fBjwfU5NnQ2V0P Fjc+5ufA3T8z3q830I9ju+LGAVGiuqmmyhiKg2MQ7q9GxgpwYYqFVDdUjE0p OGm7SODsfI8jwOHL6T6HzdDk2TRUafB4ndo6OHd9RyOHD/rdTE81clHV4sdB 3PB/M02fWbGG6vsU5NK9x9p2Yafyvi5d387+1weB3KblJSU0+BjHubNG57T0 OBsdjcwwp/e0fE6HY5OzTc5UU9zyST2lbmxu5U5dz4nKSf1Dcjl+BTDg6k0d RiNzYxy+tu2Hm5cj6jd+k2ODT2tJ7XmeB1bFDlJOp/G3dThIn2FHkcjFKabm mh5uWho/iN2DRX+sp4qeBSmx+Y/wbOzxcGmjqdCp9jqG7Tge82PU3H6ThscG 59Zhpu4O6vqe0w+w8mHZ70w6oP0KbtOp9ZjZwVNNjGx5Hc2erY+5Oh1P1nQ8 Dc3cO7EblOTZuVo2MOrY9qSfa6GyuThJOhh2HQ4bGE3dFd1biOyo0eLgw3Nz Y/qftP6G70cPFHVWGzo0/Q/Oehs+1Oroeav2Nzse4x/AV3U0p5HVw7JJWx7F d37X0qP3ingfM6H5Orq7Ozo9pOVUer4tKo/UeB1fvexXBof0HsOA4dTyStjg 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 P2HQ+w6HgckkfhD5TwHmLpYSNkzCgqJLpJQpSjD9JubGClNhhTY+40U3J4jR /iP5j5n/gepT8jc2PU5IfMpD2nodzwP0km5RTzHxHJwaOR5FHQowpJo+g+g9 xo4KdinB6n5jsYRuBhScFMPA7nsPaaNGjR4HY5HQ8jDDoMFP+g3MPEwph7yf oJwfWdDR1PI4GHQ9TR9R9ifykn3D7yGmD8Sgw/qVBsIaGFCv/NuQxw3NxSGO GENjCKaRilSqMfvYkY3Cn9yjCooo3OUmKVTRJMKRKG6q5GNklblI3KjSKjCT BhVUqqrhSYqaJibj9BSRSkGNg5bkJopRRphUfcxGzYSY6FSYIbjEmHBSJhRU kbodBisUVVSaNMJNFFVINGicFaUVUjCnCSnQqcK5KbGFKQ2KJKUilOQk2OVS TdKSiqmGjSkimiKVCpRSVJMDBNKRoSpoVSGxQPI0cvE6EGioUqSSVRRUYMJ/ 3CQpQkP4zCIf+hRsKf0lJiU6sYgqlf5kY/FojCtlT+wkaKkqomJhB/epK7HJ Gj0UpT9SpJiQqv/QwYlSKSqU/hfwJE/wP2PwRoiR6FP5UijQUe8eJcP6q3qL BQWnkeEoqIRlkJaR9YvDMHSMJUeoyGUN8lqjyDPGaMoekbJyC4Z4kk0RtFhE lD0Oh0Op4H/yODzO5sfsPI2dj/E7jGM5LlLhhNY0zCYRULBeFDTUUSuvA6WA aQwDUM0XS6SzEl1JpP2n4J8Eqf3Nnqp+L5pu8Ujl8H1vqaR/3PzP3ORPyT3q 9qk+4fiMHkKTYo9x6GE9VP72xjsex5uhufUe86HvPzuif4jdfAxK2WcjTUZr QGeURhSQbKUHmSH3CoVH+YeZ8Hqo9jY00YPzH+NpJwbH+D9j6iQ7p3VJ5FT+ YoR4qRIqqqqqpKpCNni+p4H73Vp+5s6Pmro/4Prdx9x/A8XL/U+11eL2PQ9D Zs83ghHsVVeCp/CoJ+hX8imKkn2JRPoJUjlTYqqFUkYqJPgVEGlSVX97GClK UiGyqpPBWlBVRIqlNIwRiiToomK+QFIoiQ96P5g2bFKUqVSSqSN1ScKR4J8T EknQqbFFU4UdlNIpNKqiqlUqqpVKVSvzMYSqqqqRWyqrEUrFMVVVRWKmKUql UVSUqUqKVRUpUqqqFVJFUqmKxVKlUqpFVKqqpUqiqlUVVVSqKlVisSlJRipi UpTGDAqqqqVUpUqVSpsqSeSomlEk2VCTFJ/kP85T9AwYYP8wbB/a4YiVRD9J Uk+BKjSoPEVImKVSqglUCqBJ/9FJ4qk0VJ1P3PqfpfFs/Waejdu/FsnD+Zsx p+Tontcm7h9r/GdT/c3P+DT/e5bKx73k6nDwVT0ebo/S/MfnPB0UlKx6NNGH DHdy2bOzlpwxX6no3aNPBH2q0rZw80dHg7mjB5OWPe9rDh/E+DZVVs+LT+BX m8HybNNNjSuG6tjFaUmKxSk82yPa+BT2sFbva5RTwFbvJjo2Y+CuEqVXuY+D umNPBu/0OrG5ju9zE8T3ODh9zDZ+18XsdGzd7VdlY8GPVu3Vp0eTSPY8W7sx ydGzhpsctjuep6MV3e18k6vBy6uroips/eB+4pI8jzPiND4h9pspUqvR4O7R ue95tmyPzuXVp7GnU04VNlTD+Fjs+hhpwmz+B/tfyuzsrxTyV/g+TwJXYx6u j2vUnyfNhJIP4X0vFK/hMSvqf858VjMVu43GFKEss13gXEd5JY0GBstc0kvO 9r+RBs6PY8U7vcn51fS4Y3VOqfN6jxeL5jT0erwK9qSfUbOjYqsPF9SPJ5tz d2ODTSNjRyfI0+bh7jTExU6BXk8XtEmDFHV7Fe17ntfiw9HzHsfU2dHg8FVH q8jg8WPY9ru5bjTTk0e1s6Gj2HuYow8HJK9z9Anicn3myqpp3Y5e54PadnDH Rs9j8zdwdXRXQ7O75HLSd3sYnJ95/vPI8DqcPc9GPNuYf2nieJT5noaMMMHL 6mOjoo9BjxGx+DZucMbt1dDditOhs/QaY2V71cNPBy/4HJu6uGmlYx8HR0cG zhhs9zlsbN3g7t2zu2dHKuWKNOro05Y4aV0bldG7G7dUpyxs0rl2VjTHZ6uH vcMbsY8Fdndu2bGNm7Zs0VWzTh3Yquzd4OWH/Q6NmzY3cGlafodmytN1abpN MYNPe08HDZ1V1V0dnk0dHk3d2zZP0t3k4bOGOGNleDdw7ODl4PB1aN3Lqbmz hs2VjZHm3bm7lpiu7q7OHZw4Y7O7wdnm5cuzGOX0tHDybtO7Rhy5fa04Vs3Y d3Rhs5VXdy03bpy8G7s2OjxdWnVSqm5VVuw0rGODZXDq02cNN2zZVeCuXZhu V8GnDZ979Cse1WjR+TdsmmPsfk7sToV0cp+Ts2Y0J1dWGzsxsV2bt34uGN3D D2HZSbJo5YeTZ4uGOHR9DDqnV0cPN3eDqdGlOXR4N2zxaMU9VdGzlivY/Sr4 NPNOHdW7GyoeKsaYe87MPapj4PNT6HRunRjh+Lwfk4bKj3vI0rTGm7obMeLq xWkmOWnL3NzyfFj4urEbsTHd9L5PNp0V6vxers5eLux5NOjxej4vNJu9Xk+a urZ1cPY0xX+54tHxY2T4vE9WjyVyfix83yeTl5Giv1uHm9js0mKxu+TGzd3c E7lIrxPN4tNjorTH3K8XDHwRu9XdwbOzd8XRw/W6u5PRyaT3Pg0008WPF/3M SOiq4e1untbq2eKvE5Nm7qaTyVy3fWfFy3bq9j2GzTY0w0rHdh2bOqtParlT 6HJ83ucuzl5tOg5VWzEeihs+50aaV0YwYp9b6HVPwbno5PB3dkpp2eDkMNzo 9HLs0p8VcI5Opy6OhufFs07Mct2NlaVp3fk7O78HRppjo6OjwV9rlwO7Zppy +LZN1dVPFPcx4qnm7sY9ru/M3bPN8nJ+To0ehXk5cNOzTRhj3PRy7uru7Oqq exw7NndU2ad2nRJ2eTR0eD3vY7t0xNk3PrebyeJh/ier7Efie89xNH8ppJBM fyJhIjFQ2FUpNKkOVQ/+LTCiKRUE/pVJwVJJiiYoSMVIiqE0NIqSVJSMJRh9 J8z+Af2EqUUbJ7nkYT9pKfAeBhJH+sqSnmeDSeYqSP/w81eh/92z/G9r/ybP /wrThwTlps+DZInRSRHyV/YpFVCI2VJD7CnJ/3nuaSvRg96q+DBVEYkFJMDB WFFSlVVRUiqQlMYIqf8ytJpA2VUVJpUFVJpKQ2K0UmKmkU/zKjFJNlHwKjCk +k+kfuPAD8Dck6FHdKJJ9h/SGEH9BSUpKdzsFEQcpG0bKPEflS3Dabio95Wo cSUONobH8Zjh9ydG7Z/SfyMbqaeaTs8n8Z3OTDDDZ8jY2KUpT/3GGFKUpSlK KUUo3KUophg5SR7xK+o+kkjR7n7nQr2OE8XoY03Tsbt3oaY8HJy9rl/O/of0 G7qburTq+5sGjxd1fF0cuHk/reLh1dXyY6lKdCmisbHRp/nV4uWyTQ4aNCtG hphitKMUqsNFejGyujdu4Nn6X3I/+DsrENn9To4eDY09iSdn2JJ6uj+1/ecP A2O7zdXyV7Xgwrhu8XsehJJPQFEIoSkSjRhhSUkpRSUKUpRSlBKRT0MIYKUb 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 /KfQbk4CnkdFfQTlsSSk7mxUqYiq8HzTySexGip3KibmHQhPOSaHVXqj2knx HU/gPaf5HV5Or87T+Bj4PYx9jhjZhp970eLs5fk/e6ve+Tdp8Xg6NPBy8X3v Rp1fJ1bJ9Tq8yuGxivB3bt2z+t0erRsxjHR6q2bNnyexu/Fs7Orsxp0cN1dW MbPF5uGzxaY3PVhy2eTs/hdXVpypXV7WPucNPY2dle9TwfirZyp+LTRu7G7z aVpp4sdW6bO7Do6PF4vF1OquXcpw6Pm0002Y9jTFU2cNngbvB4HCtMNnDTlj Z7Gxpw2bq6NnR7XZy2OXR0cuGxpTxbscNlUr3NmNNMNPewx/C2buzGMebdMH RymNmA0kn/FJMB4uGz0cvF1bPV2ebh6NnVWnCuR1Y9Xg6OjsxjdjliuXDq4f 5Xg7P1NnDwf8m7T4O7hPBs3eLT6W7hsrZw827ZVadleatKVs5MY2dH1MdG6w 7hwjJCssMocpeKywScJnmubnIOBRhg6GjuNjodgcFCKYU95ucHsPgdzqbnY6 Hcp2Nz2mFOTY/Ao3HJueZyeB8zg9h0N0+5+lunJuYfoV9ytPm/F4tmnufgp4 mx4lOE9yt27Zww9D1HcdByro9r4Ojsx2Y4eT72ni7PwcOrYbvF+LT8Gz2PR+ g7HYfWUlKejlw6u5WmlY9iYrHubN2zlw09Uk05eb5qcGmMNlU6urd9Ldoexs /E2Gw8DudTzPrOhsp5HJhhwaNDoPE+J7T6T6ToPE6HYp1FKYdzY7nBhO5Ruc n3mG5SPE+sww6Gxhh2NHJh7jc0bD0NzxKdx3Oo0clPcdDDRRSe4w3HsMGxsd Dc6n1Gw0bHq5OTueJ6ngG5yYcHQ+B9Z2OScJT2HDGnLH1n/s02bsN3gru00/ Bun3pJu+l0FOhufY09Xiwd2O7Do83UbOz1cPe8D3qcnzdHJ2Nk5cuWzYdDRs 0bDqfmYbnDDZuxKh7X1Nie0+kw5J0PV5FYbNj6Cndu9z0OD7nVjl9Todn0vs ST6zo+04dXsOhpPB7TobHmUblHilNj0actj1KctnsdE6tO6pow3Pe3eTTc06 GOXZXRU4aeL4N3Dg+Z1Or8zZ3Ry6vg04eD0Y7O7HRT6VP8j5PR6PI2VOjhU+ pj1f5mw9Tu5U0/SbPk6Oj+hy5fB1fpV5K9zc/Mrq+b4OHg3Y3e9NjSoqtK6M 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 iPZ3d3VubO/c3bth0Ox2NDR3Ozt4O5wdnZVV/2UNHQ6nc7noTR6ur2jZ5o7N nU5Op1MN3ZMJyjyUbDk2OTkw5fErkp9jqrSOp2cnU6mDsdXIvBg5YaNjc5OT CbHce45eI7HZop8zqdzudzDsdHLl4vBJ9b6W6e9j0MNymGHyHJ3Hc2PeaKKf xqNjqldU3cseDPYeAfcU7lD7nkVo4KPUPvNOGyOzwOjTds7uEnQU2J4jRwNH tMMPcbE3FNCjY6GHQ6ngbnBQ6HA0aMHcpTubk9WxxPcm45NjxOTDwST6yVuQ 0T4HQ6MdDY6FFJPpfUOjYk4Tlh5FKUeDdPpV+L4D+k83tdzqd0k6N1NkU+RG 5k8lN13TYxRicjwKaNOw0w0btzTobGxooqYYT3lJpThWnB0K2V7zZjdjd/3n 0mwmxRKfvPqJ1dWzw+g9DGpIeHu7OR5k2OVFVp5G6abOyuTY2ODg/pP6jwPm dDqdybE5KUnidTudylODoaNHUww+Z1JwPuPqPYcjuMPA7GxuJPI8TwH3nsPA w0U0dSnsNz0HY5NE0eZsRODYwfmPsKU9rD7DDZ8z3EmHJ0bsH0D8eWj7XU80 hTq01Nz04KpjSsPUxPYPB6yQ6jg5Oh7HR4jc2fQYTJy+XZsaIdxsU0ckw6Gi no07K5Orqx4NzR1KYaND6WnodDc6vBk8iU0Y7N3KYiniMN2lY8GlbuFfe4cn JyUph0NGj5mGH0m4Ox5nc6DY5OTCfSbnyPE8SpPMw7OTyfEe14D1hG54tDqK NEVujDZ2e0U2bGzcno2N1bmQjd3O5OzhwOiJ6FKYckoo7G5oqU9h3HBs6pJu Ycuhwp3VFKe1h4nmcm7l6qcKrTFTqepoadlVu8jRwep0E0clKeRuaNHmYYe0 5Owp0OTRgpoU9ho6m50Oh7zRomnsTxD2ug2KcHUeRgdmmGw56HBsTg2kh9zY 3NOcOCcCk6uhgHabCThodmpInQU0eZybnQdjccup4qmKwpSnJwMOD0OiacMd 5XQ7t2lVpWGGMSuxTwbO7SsbuhU9DzMODqdTRo8jDDk7nY2OTk4KfE2NCncJ jwhHDzbClOqDl2a6lJiib8qTmmzrCN3RjqNDh4GtE6lPU4PAqbuqsRuB4nwM PFuxuUxiqrGHUxpsbMadFY02KYaPrPqPqHY7DYeB1TqeREp2KU8DDDoU9h9Z 2ODzOg9R5mxMOgpsbG5o9Dg4ODuaKKU8jocGx6nB5nQ4SdDscAnB9JwOh1MK bFOTY8zsCbj0bjhTsruUx1fEp5HxMOpo0KbnvKYdwHB1Yo8TTwK3cMbsNNHg klODxMPEpRT2mGHJycnidDgww/qdA7PBElFSJKH0nYdxRyU6knsGDgeZudD4 GAmISHIkhTox4vIwxXVXc+Z1Nj/zT/sf8XY9LwvIsWLS04lFj2PUxNdcQaiS JUeN7GatvY7i6lxIsKj1lRD7RWcRjZCKmQXnmVTl9j7H4t32OE8jxKdBsf8x 3Nz85Sf7Cp5Gx2aeh2bIPR+tu2bPqYkmkk9x0bj3ujxNO52VJ/uUnipGlCq0 pKqaVVTl0fI0h7lROW7BwpOqmhXBQ2UFbsOipipNJUng7GGm4xDwNJiOGMKq HR9rHCq8HDSOxUnCnVR/1FbpFcJUbJW6p1VOjdubGzhUrZskdD87cnKuDGMV Ikqng4VsxiP+x/2uhw2eLg0mKjqrq6sf3P1Opo3K3VjxYJipJ5IVNihieo/B 4B6DY3VOU08m7GHRjg6qUpVSqaVDFVRu6nDH0NOWmJVbNNMKbMY5cEcNK2cG JpVdW6MSbvvMfnNn/B9Lhu7P9Z3OybKaafwNGxU6vE3TZ/rfWaV0eTh5OXVP sPExNFVXuV9r2nr9z1fNWPkV+D9j72k4fvbOX8LHQxpurTZu+obHRo3MdWPz urTq5cuGPqd2zo2Y3d2OzHDdWzs04aburdp2cKrdOjo2bNjDSmOrGzo2bMbu jTqabt27HV0OjG7hjToacurq4cuhw6OhdW1xWyTVNTovj4lpRpqLy2R4iR3X YojzV71JuUK6scvBj5upWNFbv2u59RWxVK8HZs4fU7uFcuVSfYqSaU6PArFU 4TlMfi9XLT9Sv2NH4KmiqaTxYk8GMHtU+CuGzT8Wz/BUPM4cuGyv+TA6PaY9 qq9j2NPa2DD86uXgYnubuip/QrsmN04dX0NHk5YpUfuV3dnDQ8VTFfFXtUxX c4dGhP0OWH5kpycODQ9zq+p3bPY5VWGFPR9bEbqV0YjZXZ3MPFX0nyVPVXLZ 8mK7PNXVj9Lgm6o8FHgqcuzB5qeKvkp0UjHonds+hun9Co5U81T7HvMfaqqn i0xisUqUpVbMbNMejGPMxicMO6tFVsqPUpu9jgx8ye5Td9LTZp/xV/mVjZy3 bPB9hppo0976GmxsVHVUxWj6WPc2YVWKmKn1q/a0xVT5K2V2fFppN3wH4K+D qmE81fsPedHmqOzxY7KKrweaYrhjzVPweTHxbse82Y8FT7CvwYxIcFSqT7lP tU+ah7lD7nZ3bPBw4NlE+h4vc0KpPmUh/Gr7ntYeD+t4uqNkk+SkfQ/Wfpfu fJu7qk+Suyk9iur4lYxW5StPc0+T5JjdVerT6XV7W7uabqxXvU2Ry3NN3grG zo4OqU7sHL8z+d+l4OXB5PwT/Y0N38qnCn+J5PxT9rZuckk/0qn6FDwUdVQ9 ipJ2fufmdX6z8z6X0OXgng2bOWNPk838jd8FbPofSfS2PBO7HvV4PsY9o4Tq burZsrdR6qd1Hkp9bdg/lUxJUh+dR+5p2fS/U/ej2N3ydHqfSdW7onmxw7PJ +l7W76WHdVOGO7R0OFQd3Vpp7FMcmnQ0/a3eDqr1dXi3O6sUlKd3zbPJ9TZ5 p0Vu9jZj4tlOjluVpMVWzcqVWNK6jlW7GCuG7SSPc6uXo6GOhXm9WKdXVPqP zP1KaVSpU0pgx2e1shipslFVKqm6iY/cxh4K+CpjTErl6NH+0qPqK8Vd2z0P F+58zwej4NPc7Ozd8Ekx1U7qeTc80830pJu6uXi9jo5dHi+B+ZJOUk2eDs/Q +183IiI6Ugc5BLqJQPOfGUJJI982MDcopRFFNH+kwaFJFKRT/i3NIg0UNKMC lKkShUk3KiIYYY2KMFJKUmipCikSYUiaGDloibFCikbFIwpI3URP+c/1P9TS SHBR0FHIqQ0VDCiUUkMIoaJRKUT/c/UTBhT/5ilTFK/zvNjQo2GJhgqj8ipV SYkqG6YmFN27ZNNNMMVCsVhjDGKUUxjZJpUQYpKxUKqUrdpEryYjZsUxs00r STFEpUKKqVVVMClKqklRSqqqjBFUjg0xCTgpDSaGIqpBWmNNK3NOExMCTRUk YpJPqEnsEn7jCYSH0jRSlaTD85MP+ds2fUB+Ykj9wYODBRuUk0CPvNBhgwhh gpgphgiMGiQpJRRDCkhsKfsGg0MOpoG4w3GGG5sbE7E+02NDYoaJTClKJSkk psSjClCmxPznJo0Sh0OhNjRJwFOSUYUmEowlHAbDc0NDBh1G4YcEpgOBhhSa FDgnU2GCmihTYUYUMFJodTY0KRSko2IoclMFJucjDco2FEwpgwSYTYphoaMD RSaGjRo0KCYbH6TY/A7n6zDkFKGwpuKUbDwDQR4hwRNzBGhokimChGgmGiJw ODg4CTcpJNykwjgeQbhK0/7hP+x2PYBP3P3E4J5B9JSf0BPUhhNihPIUgpKK EkpHqQmEwfQp7Bo3YejGzgU+L4BEfFGw4JQ5HwKMFMGDCU6kdSg+Bhy3U7Gj g8CaMMOxTqbGG5hh1OphybmxyYbGxsYUYHJyOpsbFPMbHc0YcEdDBwTocGxo 2Pg5OBit1UqvoJ7Q0aKbh0OTCU6Gx4jCbim5gpRsaPAU7kpsUKUUaMHQo4KY SimGx0E2NFGimHJhNhhijQ0YbjYbkwhhwNGNDydmOR0NxNG53DcbnU4Q6HB2 NDYdXJXJ1U6nkcnI5NzChodihRR3KaJ4FOpKYbnJue4/kP7Sn9phh/CaP7Sl MNho0bGxsU2NGjRo2GxsO42FO4+o/qOpwbGjsxw9ph4j0K9z1V6GjY6NH8j3 vzHvYDc4Pmp8USQ8DwPIdyk5P/mG5h1MeL+NXZOD/I+44OWxJ+kpH85/Ofcf sP+RyeZ0PJ/9CP0kcjDowUByQwhKUkCgop1KTCkilKUk+lTCUpJIVSCKSEpG 5QGFClJESlJD7Ekk+TBy2EwooKUhKUkUpKUokpKURKSSgUUSIpSSKUCT2EhT 8xE0TCkmESlJHYUwlJJhSDQSkpINFMFJQkn0FKfxijQwphomDClJSlMMKSMN FKUpSlKUwkYMKUpSlKUwphSlKUpSlKKUpSlKUpgphSlKUpSlKKUpowwUpSil NEwkij+o3P6D0PuP4D2Gg4KKUSiilJQpOxTCYUYYYYKKKKSlKUUUkjRyKUO4 3MDcbkQpSSJowlDCMFCiilJRQUUCYYKJSmAwlKUlKRRSUpMGGClKKTBTBSGj 9JIofCiIlQREkRJ1qChhO8cQkn+lJKNn9rdJP/gVGif5X/E/9E/F97dFFVFV SjuV/3thPByn/6v2P+Twf3vadlST8x/90OHQdEHKiKk9TlJ5k+4wdho/0nsS TlJPQ2STh0MTcQ9yCvFXuY7N02T/qT1NhU7tycHJXCSYm6pJU8nRu4P8z/5H i8HvYj0Oydmke1J5JMHZEewUD/OqH0EKkmhQoqUqSlKUSFKSipSpSqIqlSlG PpOxCRgpIntO46P7nJspiSY/3vg0bqjwbvm5TdNIcsJg+pR2G5I8Sj9BIw0a OSUVPkTCqTyIVonZBg0U9Xk3OyT/g80NyeYORD3JifSdDhKOicJI8ih7lSTS CP9SvYrzbGClRjExJjD/WqK0mE5JSdHxeiSfE8WxHklE9zlER7VQ6lDlpBcS I0UUoiqkqpJX/aUxSkUqQvZ9BXYr5KVWj/yYTwRUN3uYTofEkiT6G7dInm9W PR0bug3dTYmKjhNjSEcJE8Dk5TkmgT7ykTZ0NlKpWNDc2Tokh5CoUqUVH5ys JVPYQxhKlCoFKHBP/2VPsVMVSvrMeho08GzY/7DcfgbNhWh+To2aTl0E4KSn 3NKfckm4dHL2q0iqJwpDkqfBwx2bt1VSqQaaPY8EqGHU8H4p82NzZ1UxEk9H DhsPi83c5PNPVPB2cjwMTdTq5RoQwrZ0STqeR0QPA4SQ81K7sdnRow5STGB6 k9T6ndKm45NjhuwqSq2eJ7Hmm6OCexKR4lSujqrqVhimzHgqsYxjxNI2cOp7 SlKUqSD/oYMPeQrFQfX+DRpSoglKRj/uMRoqOpPrPqPE+KfQbJGOHqoSeqpJ p+DCqTTTD8FPzJT8VJ96Ru8GkSPIoFFIoqSRKHomEwOp5HiU4U+lwIRwfiYk SYUj8HQ7HKdEfFJ1DCQqcpJHU0m4pNGJg2MYmkhOpQcofYpiYiJXkrH0GJsm JIxU+pJu0aaN00H8xST6g8VJHyUYqTCilKiqKpVSUVKfe0YjRQ2UmFRSilUK +DyPuHdByPofcfSTs81bHc+CfMmkk9DsxRwU4HsOx/1Me0nmnvcvJKPwR0T4 FT2OhIexHV+lJNk8j1STzB9DY0SHig+CpQRupUqqjqIqVUnJDwKKKklKkpUi lD8FfBQmiUpKj/yYYRJRSUooqlSfYqT8RSNEr85SMFEpUpUpU6PkxNyoPm9C doYPsPuT0aHDsUegfUrhR9CiTolSNlRDZ1btmmxJgqH0vakmHZ5Or6WGjR8E 7Do7HDdKj8CckR4k4bpJpHdEk8FIToYg8Ek4OpPc+t2CbHLlCoquSmDZIHoV UiVB/ZEMMP+hud3sH1N0k8z9qSfJI8Tcj8w9x3ToT2kI80g6oKqIr3GySY8i kx+gVIUqD0KjBX4qTClPewYVJSnoqaVJIqoR6t2DoJ7Bj2PNJ3eb1cIcpOUf YryKkpUpQ7FMKSpJRH0m7/vRp2d3g0Y+sP403acp1JwUkTscvtPSP8j/mf2O r6QdkqVUod1Y+Cva8jQxg3VExNGhwlMNhiaTSkh96DEmFbk9o/rP53Q0/Sn2 kw8E8FTo/jYquzuN2E6oNPFiSacpTsgnJA9ypUqVUfUqf1qE2UnZOh2KDwV+ hX1tn0pU+bokB9AVJSilUpKKpKlFKKUn0GJJNEKND9T731Hsdnk/MkiqSPB7 zQ7JNj6E/JPU/SYjH6U7GGhMSd0Ym6EcmJO7ZOp2SIpVH0nzeBsr0ST8xweC YKpjESfrRwU7kfJOUjwP3JJpI5bpyR+1JKknB5m42cOjwdyPgUPkfJiJooPe 83L5nk2Nj5JiYilV8XL6SuCpJ7SV+lEbq0fa+t7Uk4Jh+pOjRueKJG4h9bA2 FT5ExJOU0r5JXq2I9glSFKH3KwoxR7mjCkpFKgnujsjxH7GzZhjYQ+0p4JJi nkklKYjFYxhUU+QrEqq08yaHzMJWNjhuw0E9Xmk2exJK7PEnRpUkqYnKTEp9 z6XCqqj0OHL0bDT7T7WivY/BNJolP1pRspwVVbMQ6OjZJ7ke17UnzTs9xPVE 9idioYqG6fYxoit1e9D3oH1vY9D4OUk5STugUVUk/BFTHoTuaNI9CkjFJhR6 o+AqiofQwxioiqlVH4VEYo0VRVCo1R9J9p9hXdXg9XY00VJPcw/Bsbordsw+ 98Wyq2P3G7ScJ7QbvYntSTdh8kj0fJPqewaOE+RPkU0YxJ0fJPJuVspsqSKq Rs2Gx4Eh1Rs02JWmK0+k6k+Q3EfiUhgqlFKpRKUpClKSQpRRUKVIVKiege1T umGJJ6k8THRUrZOw0YSK9FNFbt2N0k0cvJKpTg0VJPJH3uDu81dh4FYaMfid TsOHdTlO7qIdCQ6JNjkpOUkqbvF1VJMSd1bp81QcJyeJuOyPpJ4OW6Tsjo+x 4OzucpJUdEk6J5kK3cO7Exy/BJ4nqmzqpwPFpVKwVh/lCeSSHtKUSpSlJUUU UUUlQpRKUpSlKFKUpVJSKVJKUpUUVKVP4SkUrCVJRRH3qiYKRFIpSk6sSYmx Rh8yHdJ+HVBPYj7UPJJh9Z+5DsJ+KpK+aSdASdBUPtfU+w+b3krSfNweLCV6 JJ4A3CKnqVEewpCeSonoqdin0vpYToej5vI5R7DqckOT3KnsTSIcIfa2fSlc E3eYqJUkUo9CGMKpKlKknyKT6j+A/Aleh/AxjdJNyQwOo+r5HtSSiPoMViSf Qikjuh1B1RHqYgTyJFJ+s7FES5SiNokPrq0RDsRLodRQOFIcExKT9h/oDuU3 TlP8H875o2SpI6q8B2MJsdH+U+sn8xVHY/yEn/I6mycuT/Ao2JNjZOiNEf/M /8D8ETZUf9B/2n/wOTd0cPa9zZNlRu9qsYoxUpcaS2XisbZEkfCSPY6lBhSO d8jzfWx7T/3Mbo5fnbuhJ9b7mEj+E/MafxuBG2xl4z2Qz1Co/E6kVq3Wkkoo kk2Eoo61SpBU7hY1148ZafeMDhYjKZKUVhiMUKpVYVw08WPrK+16MKlT8iVS 0bxjY2AcqpwC6SDRJBpOD+VybEk/+J5nQ0SeBSHgUIoUnBTqPUrA2NzANzY0 V9nMRpusvkPgS2R91iHlS8z0OdUYW+x/mcP9TGMYrH4I3Tuk6J/iBGxsxI6H i2Kmz/YrlCNOhiaVVVVaYIxK4T/Gxs83U/yOWxisKqU8lY6PJsw2PJp4knkV Jy9Hd+5OGzxYldzR4NlbNndhum7Rj2NmNGlY2Y2bNmlTds4bMaeLGjyEYo9F OWh4k9E5PVOrDuTc9T1U8HVVVMNMcPk9TxR4nZJycuU2PY7j0eD0YxRKijvF twPxmqRqtRRzEcaoVol3yNcjhI+x/vMH9CP5zkOFKUpUVXRJKG4wSKFI/Qkq P+1/MpVSpKqN2zgcCNNFSlFVFVKqqkUrlGw2SdWxUisUklSlVRwpOgR2MfvV jxHLyYxMVVSq6DkxpVVVKqqnRilYwwVKqq2RsTHRXdUdDcj/gVSoqVKKqlKq u7uKqKqdVRh/2IdkkxR4MKlNlIorGMMVRjGKxRwk9ESSHVUkk4VJIh2Q4TEK UqpU4SUxXkmMYxy2RMbKVVSlKqqilKpSoqlVhVSmGMTGEYVhTFdmzZyolKN3 D/uVu0xWKdkrGmG5IjROEUpUqq6JKk2HV/8VQYTcUlQKqlbIQ4J5t3kOHLTF FVKVFKqvJDyHQqmKpVUpVKqpGErHU4OQ3I0H4HD2OrZVRJVVVVTqlSPQk7ng RPNNjsdSdXRVSVKVVV5mx2cMPAnJ1DZPI0ITSSQ4Hm5RsqTTg4UYqYVKVUqK VKpRho4YkpRSqlRFPUSpiFKiKqVDdhwaJpFI3Yx/QrBU6qTElVVIqqqStlbm NE0qRTFQxWNjow6P8bsTsTu6OEnViqoVU7JG6Pc9DSYmilRVVUpWFY9psebZ s4I4aH+CPe3K2bIqe0xIxSTglUnm5IpFJSkmN2jTzVjh7mhitJVV2Y7mmz4I 2NOxyx5NHCYoY6J5PMqKKJSVHiUnBJ1cJGypVRSlVVTsxIVOjdsx7mOrTFVp jh6sYxs8XQ6PNy3KqqpUTTDkj0Q7CYoStk/nfwvoVWDGMY0HAT4nUpJXdVFS qrsE6or2nwRP9jh7TyOWm6jlXUUKT2k9VNnBKp0VPmSup4ieTsJKqpuRs4UT TYSUbonIUjhEe9HzU3PmlGHJ0KpUpUqjQnRipPVRVGKlTuDYnKGkmmxVcMYq kqiqKqKryUY2cG7FYpFUSqaTYiobKxPg0lKorZCmxOEYMKlKVVV6IlRhFd1K keZ4GkmxPROqaDk7icpPmjBIHdsPAfJ5uyq3aNKpW7du2NzdjdieZOUQ4bPB 3dVKVVKPcxFPRNJGybIKruYTzTo4PVIqpKVwrZ0U0dFKpSoclSPkaPRQ3Kk7 CiSdyOUOUjZGgxNyfNDlHkdhW50TwMYMdmmjTGGNGKmlVKqKqUpVJ7kYqMY4 Soj3vBJK9G40E5bpDSVFGydkw0SJ5qeKDwVKSKqSRVRVJTySTc2Q5RiGEk6M KxKqbpjTzT2Ox3Ux1UdE9rsw0qq0aInRNEkxPm00HdUndFFeoh0aVufBT1bE 2KqbFVGKVXwRW4dh3PJ5ER5I5YjYkqGlbCmmKw4bJNnsUjQqVhMe4jybJpI9 R4JBHBs9GjHuB4ppIdHkK9wfxA9z+8xVCYFFFEiiohRPoKlFIpUgpUhRSKVJ SiUlFFCUUkopMBP9UIpDHVR3VKp8yiYj2KQY/uUxBUJ8EgUnge1g7lI6qSNK gNnvMEjkr5lJJiUkScFMSo/6GGCHQqR/xdzZ/O/pP8R/3GxJsPqP8ZybPrVE hipEf9ZucD6WyT/MPuH9pMP/kJKbIHKpKSpCVUhPyfyvA+ROw3J8j6DCR8lU jRow0KVE0aKUwDDDDRh0MNE2bNGiVK0aKU0abH8hiGFFNGClFFUEopW5W6in 1GxpSjZsqqrCTSKbpiYFSUqVwSKkTGxuUpRJiST2H/Or5pPoKknoVJhSTh2P afoSYgw+xjTRWjRitFaGjGhiopphUSKqqUxhWGmhoYpPAj7HqfzFNKKqMKSi pSmGGGJpiJT+cUdDZJ+kqOqve0YSSP8atLCI7BsJyj6zlJHkivUUpWJP2v1H kUpSilRXQxIopEqU/tVE0SkpJFAVNMMRQUqKUQqFJN0n/Ur4Kf/Mp4lJK/jD +NpJ6HRhXkPxfUp0bG72HR+tMaNn/aP+KUpKUFH1iYUphElKH8weBT8TzdH/ WVGEqbmmI6FIbPYw0Vu8zyTScO5B3KIUdw0k2TY+ZHvPIh7X5MCfQcmJDcqI r2PeTZ5inoUx9wmPgTq4T/wVH0KMKYU2NmJGDYwYVImGGJKVRUiUTH4NJMVI 0OwNzxhH9IgqIMHZJ2MdnmfW/Skfgm6myDsJ96dWg/FsVRhVVA2KEfgsiBio 0SlEKeR/Q+EkInV0VU3FcKYqKiNMTGjDGGwRHtPR4G43PEpuT2nBs/Q2N2nu VhodXVJI5Y9hsmK6nVOGzhuxwrscuiuE4SbsdXDY0dXxOjg3OG50Kww6GHRo dih0cKacqdG5wko9WJDl1dHUpTqp1aOppSsadTCp3bDSHCCokippsbGm54OS qw5KbjROBsHBJ1f9Lc2SV3bPg0R7SpI+CPpJSTqVwToo0UR3U02dDqrTA03M MR4CoxW7FMFTGJIoxhiU+SYiNDoYkk4J6KGK4NFSTTdTSnR5NOStjE05Oxob FNHRJPNUbJBsKilSYCvJ5EBNJ/6tOwjyJSVJJVEVFJKkilUVISoTGIYdFFOi GJSklSipKqSkpTEqMKmGGClFUVJKUqKqUiqVKSqkpKFUqolVKpUqVUhSoqpU VSSpRVVBSpKqVUkFSQn+hhIwKgqSRSlRSlSpR/6qYKipSipKhRVUqUqoqVJU qkqqipEV8UfWadjkT0g2JISdUbv+5wTq7lehj7DY6lRhUPRIKwpExKSKiNke 1pOymzCo9jkjY+JQ0qKUpJKUkUpBSiGFSQ/JSSaUqKFRSiVTRgMClKmGGKKo lUVpTBX86sKVFSKoKSpSdijcqaVKqMCsUqkpRVFCmipJupJoVKSoqqJSpIh+ SpNw+SMSBsgqEr5pJhSVVEUnqMJHZ5H7FBSqUSUqPgRGyEj7yNOEoVRFJLIh MQ9BsGj4GxMfxn/JUkkqlJIe17nkf/Cp2Q7j8iQlPyeikpSfaYw0R5lSFJOA hyxFSp+oxIfIr/Ir+slG4qn0NzRodTqYYweaUbI9wqN0fYfS0e9wSTdGh+90 fwJwRGEe98nsKe2EfgcCQnvCVsVTRuNGyRWyUppKmKfcYmNMbFSpG6pgwxJi gMYxsWSTFJSUkkxUkJgPikkaSOqmBP0P8p5NHUj70+5GOjzfqJg7o6HxBRKQ UpST5FQmxXZUKUkqjYxHik0Gkk0OEdRU0fpbo7lPYn71Yr/EVj95hj5mEpJ9 xgYKU5Y5MTdojSopp9KY0rZiYpp0Nlf87GhFRRWMGKlVJUf/BUg0/6GB96kw 9j7SSnUJ/SURSokhpujlXglVjEfrebyNHipwVwrFYrFYpsps2TZjGjChsklK 0YlSqxjH8o5FPkUpKSSlDBQ2ew3SToNOWgwJyUHmqSOhKKRSVSqgoqFUHorl 8E5K0mnR/OxpNzwTTcxUkmyNKjFNEilJSpMbmmkpuIbpjdp9qSfxlRJVKkUS SqQ+CPcn8iPa8HzOEkR2DEhX1GxPpVHD6iH+5KqkJKVVT5lKFRFKklSUppEh UJiSolV4H8BX2ngbDg3NlJ+pjDxPFPAwwR8ypJpUlI0lUmimJowoY/3NNEpU kqaUrGEUUViiVSOZFYjzfcfE2fUSo+xX2IOCJPcqH4pOqPxKPzmkD6UntOr/ 2aDudyYg9HgkJ9pJylFK/c+h9ZX1KpRiCpPegOHU+9WjT8WJVE0o2Vs0+LD+ YiPpJD8kblKU2VMQcNH1CpO6PMoh83DQ2Jiv+hT6ROoolAoexo+o/JykkmlG lY5YkYeqlUlV8z6lVRSmHgxJGI/1jZNFVoYMVUUpRSvvVNFRTTFRRikYVFV5 KkmilKNIoVTFSTErFSqFUpRUqRhRRRMSU7JJomEOWIH4qk3KTYpVBRUPuIk/ 2FIST73J9aJ9LgwaVEVKVjCT8BRDh4nc4PE2NjGKrYphVTCj4NMP1mzTcfuc tIqo+k0fnNJsbmOrqYVWzTq0k2dVY4cMRopUOTDgRSToVGxSlK5FbIjQnROT qcFTc3cN05KwcpjZo2DTE0lNOHgYjsctyojlMOXU0Ox2PROHDyRHQH+1h2CR 4E/OTk7p2PAw6mHgNjoeR1NJyYSpyOT+VU2KOTTE3K0YxjqUaKpStyjYpWCm KTFNMHIeJBW5So3I3Uwm5waGiqebZw6HZ1STk5FKjcxHVQ7FNimysKbKYU4T c9xI0SYpG7udhiH2H2JpOVT4sfnV9pNz6k0YUrEj8DT7X4DzQ8ESdz0PqSJ6 sJP4X8Z4p3H9IoYn1vzFe9URipiiMVFTGH9JudmlVX2nyVUkibH51PQHoSpX An0uH7k0iNiUTwKfgqRSpKUQqkpRsUSf86mkVCqck8n+tHc0dxpRTBRUilKl H72GKVSKlKSviQ+sf+J/pP9R+45JJOyoJDsh+CsdkmEYkkk/wP9BTqfUA/0m jY/6T1NhsdXRKoB7Hgk/QUf2lJ7Er6Er3o+0idErRyUfyEkrgn6x4jxNkk4K ftUiUqBSoP9BQn8qkhoVJioYT7kwSftQODGIfuCmImioilE9pUboCOD2tJsV DcqPoPicInkHBN2hg6TRW1hQ4RQy18l3V9gRCEOolB/UHoSUolE/WdQ6jyQP a9GBMUFKkiYqVQwokpTDGKlRFFVUDFSFPVMTCmlYVIqsUKoqo0YYqqiqqlUq ilVKqRSoKqUlVSQqpKSipUiikTqKkkxpBPuRjEk9XvdXoqaSq/hYPyOSR3Ul VD65JJsk6FSppJEdx7DZGEio6uUYTwP2HsKeg+ClUqiqSqKpVKURVElKbqhV MdTIP4n7Hqw4RNImkmMVW7yCNIpUk2UTwKh0JFD1MDBKp9QU2cJj/5vFs0my o0Uj7D6Ew/E9j4hJI+R7zAx8WCpHq5fEeD1Vppo8myjds3VKj+0r2qjg0VUM UxVOGBiVNOWNGmzTEmyVsSqeJJP+00equUUn6CKUKST0QR5p4CaJEnBSJ8nB 2JpToYTCq94xg/uTDCUkquDEmH3lKYMJTQP+4j2UY8T4KeiPAMH95DZH8xsE f/ocPYTqlVIxQwoSHB0GJ/Y2DCVWmMTqbHDCmOhjScmEY7sYm6Nn6jwP1n8J +88z6j9Y7n9JT1U8VTyYrk8UwqnkKpuaVNzZUikxs0TDzJEfzHRJIwn/SY3T o2NJOCnsKmJNmHRUGDqmNnBWIP7ioJudH7zqHtHqUC8bjAvlhmG0XyodR7Rk ERCM88DzV1PQr2PU0Kxowkm6PejZoxKxGyTA2OiTgw3CUKiNxQMKCiSUhOT7 Uie80k2dHRiuisSToV+4qfUwYkmyOHR9I+oUfSMNwjqcK4dzox3Y2Y2MV5Gm 7ducCmEROClD4Gx5tHBG5MJKAqSqkOFSTCYxArxJiTydT6X7YR9qewgboblS iiN2yB+BUn0iUpJSbpNwTB+IoifeiuU8WzToH8bdGkn6jwFUoqlSFFKpUwVS f3pUep7EweB4qqUnorEShSlVJSooVCho0kV4H6j6DRhP4Cn3oP2io/+SnZHQ 97wR4nKuCvcYeQpNGGMVJKqqlSsDSMbGwYTSmxTFNEMSMaMEw0UVhjGEwjFK qYYwhUqRKqMKGGijQqGmwminkkPEnBJJg5cD/ek+opUqTg0cnQmFVSk3PAUl J0YMUUj5N3zOCpju8CbB1NG6SaUlKw0NGJUw00NJSlKVVUm6mlGlNxjEmjEq iblaK0pMFYYpSt1QYrEihumw+ZO4HuY+ZpFPMnop/KbDcRsfxOHvbp7ik9pX 4CFPIqcKqVEKleD4sTRFUpVSqRSVpRhKoSomlNFH8ijFKrYpI2Kj6So2VWMT 6ipFVuTGKkonCocnuRK/eaeZhJy83m3SewepKMIqjlhpJNFJ7DHmrR3I7o9y P+d7Wjgdwp4n8LGKxo0ewxHmordsaYmxWPtaUrZs2TDlITs+SCVjsnyVPpQq blBHwCeZgTclbo0TEpVJWGJFRZJIlUiGJ9ho0R/rNhHgnvB4HtSTRHkowlUR jGDSp6KNzYqkr+RurSNKhwaer7Bp8nRIjhCoqnV8WnZ7BhSCbomOzZWmldEx ibNJ2bMNmzcjuRP0t27gqSJIbKSSpBKPofAk+sTdRT61RHB+TYkTxN3grhio 7KqjsjuVVTqh0Ng/RIRFbPzHuaUqIR5uzG5IqKp0MaabGk9rSR7VK0wT7xWK lU8lSTCqpFSooPIrCkdVA6tlY6pSlNNN2hWyaYabJJNmKqaGKxCjFOjd7lY0 KVG6krGORSNKSVTSgw5YphhsT3lOjZEbOjCRg2KSTsVJSpGOTDopVSqR4KPx cHCVp3VGioqpE8XA+84Nx1cBinikqJ9Zpif/V/uFGJJ5IqSpSoOBPJp1FPV0 SOESTyNj8mMKfSopw00aUxpTqKRiiHQroU6FOqowVHix0aFdVTDRJU4OSkNK 9GDgdGOCqjdR5BUSPgeqSR7BRGhwkr5KjyUPAqSdTc0Yw7MHmVKcpOEpT6WP pMT1fB6mP/JXDqdynUndTGgY8CpGKMPVEn2I+96qgUMKf1lSpRMKh+hUUSih VKlRSlJjGFAUiVJTFMKKlVCRSiKiI0fghiNlIlIViNh4JSlFKSpSo0EkhQUq MKUbDCqSaGilYIpUwqTDEpUxiVjFVgpUkxEkVI0xgUipDRSGKmFTEYUkjCkp oYMKVMMY0orDGKqmNMYxRiTRppSoTzKSYjRiKV7UU6J9joknwDxPRRHkVIpS PRPRDCOpEnolJBMef9jzYfdPmqSEcI0NipMYwY8mmDRy827StmPi0cGiPM/y GjRwUlMME0cjB8ymKVuYClDFJhTFJhTcUHIpNCiTDYwqSSkqUFUFU0U4NMTS v3FdHL+h0NjgqpIUqkqKo2YjFKlKRKqVUYYGKlKEdklY2MJglKaHRKaTk7m5 pOFJsVOWxiKrFcK0bsRoo0lTTEdGj3GkmB4KYbKxQqVSRWOyabNOGmKrdJMV TCqpiqUpSo0rCqpphgqoGglbDRuaMKMVJEmyFNHdUxODqToVwdDgbkqsKNNJ HBTSsVVFUgMKwUmIqnRWmNmmiYqNKbJU3K0aYOE3Ym6tjSilKDExFTYpjlSM KKblRSpMVFVJKqJuYbqnDZKp/kabmm6jSFUaMNNMVCUqpU3YqYwjQxhRhidE dm4nCiacFbqrCYxWmGjZoxNGKqnA0aYYdFYUqqkppU2KqKwwwbths2GFGGzG MTHDlocNGGNhppDg4SpsNN27TdslVWMbKbK3KbJKlUUqimjTCmmAUwppTSVK 2UpUmCtioYaYMVJspsbMRpWxKUpU5KHBUkaU2MODDSaFVQqbEaaE0VNKMKCi q2SnCqrSUbKYUpVFRUpQqkpNKRWO7xbOGN25op4NJ/MfymyRPBTo8B3HiaRs aMRjDEbqxjBpJhppoVKKK0wdlSVRMVimlDSkV1VilGlJuVSqlMNMBWE0qabm GFUQomFKU2KTRips0wUUqkUafoaGilVNySMCNiNIsGgsjoMJHmUqt0xMRKlE w/Y4DEjRNkww3DiG6QskrTZh0VGlK6tmkqpWmKrEbKYkolHIphRSOSsFVUU3 GGjRo0RSjq0xGjYxMKaYrBoYYaKGFFVimJorAoqUVVKpTRoxpSNNGGkKro2d BsQ/hEVuo4KkN1RpRwxjhhjGzDZ1KxsSmgYG5E04FFKUSiilOCjCUaMGlMNM eDlicKqYImyTSSYEdTZCY4TZ6tJNklSSRpJUkJTRpI4RuTc6KkYcKVW6bJQm NJoKkKJMIYRiGEmkmGhsSJUYkxWkRuCpujYJMESok5VJOEbopTEgjRpIbuBh +1hj8x7nzCPvQYH3PkSbNlFbq3DEqVI+xjH9bH51Gn2puppQrqwjSqxpoUxi TTTTSMUqmKFU000p+sJ1Qh+0ifJUiTxQT1fxkh/vLARH0HtJ7VKoqkRSpU9z GKwxEfQKRJGilKQlIVJCdhNKk/OJJSkKxTExGJSsVhjCqlMYpSeiomJ5v/cp TzJgjkop6q9qtFKaMMJPpck8HqeCaTZpWBhiYbMfQOTd7G7EYJSYY6Du96D4 PRU/9Ujc6KlVKKOXkR9KlNOg/QU7JKG7RsaGwjFU5UxU/Yr2MVjGww9SSpNi p/c5OVRNJXVoxSqn0kYMeqT2Kr7VO5oxhIqlYKpSqdD7yafAeJ8m5HoVCncY rxYiP3K0H6jCSkh4Cckie4+R8x/Ie98z4uymGMfex2OiKSYlSFDsEqT2vapW wpKpJ3OGhPa9xgbnQpo5Pae1/cHc6K2KR7SlKVR8UqqGGik4YYmgsitmGFKY xGMYqIxUlUlSVUH1KjFJsfMiYTCklKifFVVHBypVKpVKw0U4QqRSuVYqaKHm klQlE6onoFRRUlKSeRUfYwxJGhUSY2KkxJ9A80PoYQbI9rciOqIxR7yp4EU9 FfFSDCpH8QhSh/GikkkxNjwRJHUmkPaOin/eYlJIxjQp1K0egHwVKUiqKqSJ KQqSeYgpCR0SBSg+JKHq9hh7DQbDh9rRW43VNyhTdhupGzduaJ8ynLTc0Upo qYrhWK4YVDSqqRVJpVYVyVuVurdWKnBKTBhgpwbJBNjgNG7RMJsK8ykOiE+y DwOzzTFDugpKjg4HVSlTZj/KfwoeCuXmP4FY8Xm+Thu/2qxsxs4bN1G4/2lE fpKJ0KKUbnuEwkjRR/EUHBSinJ0OpTRGxTYoMODDD3u7/sbMTq/uY3aY8HVw 081aeLE4dWMfuebgibB6OrE8ysfEw8Gk7vF4OroknKSYkmGPJSqrHi00r/e5 YbHDs8ndpRHmUpKSUiiSUoUFJHsPYYf4ynUo7FCHmKdzgwJSdinkPYOx7Tse B0Gik7lIkwo5FOpSnU6CdCblClHtPUwdTwMO5Q7FKKcjock0SnoYeh1PM0di nibupT2O4xPaYdSngeLROrukeJSSdx3YkPE5erZ2TwdDox1PRo05dx4uhhuY nmSu6oVhwaSOHk6HVs6MdXDdTcbGNkU8nZueLcwdzhu6mzQpTo4NJNEowxK0 NGjE6nc5O7dsmOit27Tg2V0Ojl6jh3bDHQ7vB5urg5eDh0NjslQruVGBp2R0 bjDhJK8h2ebEcGMMOhNIo5KSU6sJGxw00GySYcsVydzc8EUjobGxwdzRhuK4 RpuYeh5I4dXV0VOpUo2dmnBsjZwPNyaJw3MYk8nRs5Torlw0Q5B4BSTYoopy bthoqTSbK0ldXgQboGxSlENk6Ddo0kKEabNMGmDYU2MU4VsVJNidncx6IJTu 4dnJ2JjQ3Kjd5mmidjzOGzR1Vs4OCp1K2PMxumhuJ6qbKkdU8Hi4VW6d3Dhs dRTc8xyjoN3c2FPIrdow9Hqmw8nV3dXc4O7Y8nQVParR4GGPNW7zaOrB5Kd1 NlBSlO7zex1Yw7puknQ5eDHm8DzbnI5aNHDs7GjybNnUeDdHYrxdUxyrlUeT RiSNGJh2FO6nVSsew3aeLHBw7urDwdnJ4p0bN3AxO5s0qNldXinBsPEpik4c uWiaVExXZXZphSlUr2NNjZE5KMSk4VGnYYPVseDSTYqHdSIxWxoYdjonDk6O T2K6DzTqcmzFdEk6tGzc4NnRg3OVYNhoo0GiKeJo7nV6iuFOGMKbnmjDYT5n V3aYcPNOz9bsmHCcKlPB7Duebd3KdzlMOh0YTSonV5sJGng6uXBudDoYGCu5 iMMFTYow4ad3c3SG6pwYqeRjh0SSmz3Hc7nq5bm5h1Q4KR7SpudHVp3bGBUo eBu7nm4aOE4RNK82jGMYKo7qmmPc5Y8Dd3e52GmOGO52bnqk9ymm6tnVTxY2 dlSTxScMeBybkcHZ3dTlBp5Op1exh1dHKB1bDDcrhpjl2Ykdldim5piR2cvV 3Vhu6HJ3PA0U7GyCk3ewU0UpRTdMN0k6nodDTTsej0bG7yHscm71bNz0MR4j 0E9FRh5tjSpo6tjDRJuN0aGhhjRo7lE3Ue1FctjDHQ6DR0dTdw9SVUTSoTd6 Ozo0PE5MJ7GnorRsUO4pVeBSclNHY4cqqlVPNy4J4qgrDumk7q7tCYcsTs8y tiRieRUphoUpKVSpClKKFKinJ1Mdm7xPUOTYwYPI8WFYrcntHtctOinDwbsN mimHVTDRUo5NhgwaFJTY8zcmJsN04PI4OTQ2eAnknkwcnd4vI8G5MdWIbOw7 GxydFaOA7tNh0PJW7dSTFFKjdU0xp4KbDsYPJpPF3VjgqVToU8HtYTZ5sSJy 0eLSVTEUYYbNOzo9G5sJODZsbMbpWxu9io3KndJN2MbsHorqqJOGxiI6CmFG ieTE8DTDlUblDxUY4OzRVPExMNjZh5nB6PNubp1UqUkpy7oOrYlPJRs08SiU 02aaK8GMKVJSm6nm8WiaO7Rjcro7mmjlTFHm0wjyU83J3aOVeSiNlJpUmEqV U83d5NythHVUnBjh6pJoxUVU9Ek3PE6vR5jc2PM2OTwPFjo2dGGnq6nmaNyu FebTc8TG5inZwnocHDyOE4aT0OXmrSjs83gaR3U8jTZu7PRjucOHVgo081MK OTTwNIrsx5sbuzs9HZycKcO7SSbq6tHDTzJJSh4NnQ7GxJpps0clTyHdFPVU ngVEU2THcxEdVHYqTuqOimDonsFRw5PB3I5Jyp3eClOzE3eB5Njc6Nip5N2H QTlwdzwbk5dnLRTgrqaNmMNxXROhP4DzeLdG7DSmivJWNlctN1aPJ6P0OXY3 bHtNk6ppNHVsU0fyn8hoh0J4n+Uw0Ow/sHdGKK9rFe4j0eL1dVcGKaebo7NJ ph5tNOybpubJWHBo2e12bHsHDdTZVYxiscNNMctnds0rdVSlU2VjGmlK00rG 7sxpWzFO7TThWzGGmysK3Y4aMGNlHDTE7qitOWlViiqcqcqo0rThw03bK3aM buysR0CsNOG7SdCnDcOBhVSkoqlJhjlwnJs0bvk8DHCmzSOrqfBunQ6MYbmH Qjc2Y002HBo6Jy4bBuisFHZ0G7Zjk5STwY5ThGODqcJpu8GjocHQ0ww8DHY8 HV0dTR0eDTsSJNCdBUJUlKFI7MKVXU6mk4dEm4nLYjE2EVD/YqGhOSGxylGy cng0aTSKTgRjs3bsNmzl5Ojc4cHCuVY0xWNmGOWnZ4t3ZwbKcNk2cMTZVbux w5Y5ctng04dTq2Nzc6G53KbHB2dDZpMU2V0bO7dj5nB3Oo2KU0dzCaKcFHc0 8GzuquStzdwOSvBTdRWGxWPJW7zeLk4bHU6NGytmJjsYNngpsbtitGJu2aNP 5zzVDqdG7h3cuVUVVsr9CsTyKxw0xVjUacorScDueBJgHvP8D6wcPQqSlPYR J6sGiOCkn+YwfQfM3exDyQeJPFNilYkVph7wrTY9FMbsaVsT6nLT3vYY6KnQ e4wr0Kxjsrdo3aVj3McNzwaSlcOXKuHCt2NjZ4N27d0cOXdJNgOCdyhDoJSC bilEFCjsOBoaNElMFI5KIpoSYDRgJ1HQ2OxNzYR3FJokUm4kolCSkikYKMAp Ckg3JuTCjRMBTRScG52NyNGGjgbnJg4HBSOTY3NzgYbkwrc4Oppudoh/cMSD un2OEndHiT2ijuHCROQx2YjR80FEYoG6tkpVOg5JTcVKScoqo4TwdEw5RG5J DCUmKHRIcPewmk/FjHmjHY8BTqNEbk6od0TBNE7DYlejZDuVDSlSlVVdFein CKPVPvH6T8xE5ROCkbqiYD2jB9gpVUVGFKFCTSoVhWFUJPFGiHUpCmjFJN1R JpYkkkf8FSSSYm6JSIewVVPVIwe8d2w0KVwImGhhIaUkU0n+x9Z3PF3USVHZ yowivqKfnKqpswrDBKwmEiFYKRiBOz6UP+tWJI970PNyTu7qwEUwojwQqJhK 6J0dxUkj1JRKYx6P6xSlRSjwKYTTDCqTCmimmMNFBoxWGFOxjStkr0N02SlR KUSjTGElQnCPacOWyMRoqMVScFbkSSGjBiRJG7ZD4qknKdFJR0RpyUiT1JBK xoxpXV7myaNzc0eZ+wwp4GOCSKoFUStKVDR8j9Z9LDE/W4FDwUj2vRJPJs7M bGnB5PBh4MTY3Kcmxho0dg6upwdBSvadjD7X2MHoklHqJ4MBsdDFKfoV4mI0 nV5K6G5wPM2OU4OBNxwdBsaKlPYruox0MdncpiU7u5om5WzxN2jqKNjlXBT0 PAxug95hhTqcnRNOpW46t06vVwnZ0DodDsadHm2Rw+ZydRU2O52PJpVHm9zE 3eDR3R1bu6jwN2DwaD2vEdjDHYcDRopppGiaYYY5cGxu8XU0nKMMKGKOipJw rDDyPA4NkocHtPE0cFTyJwafyGGE2FNjxPR4tzxODkpsk9TcbnmaaN1Gx7id joehsepw9x3PV2HBujBDZMPJIp4KxU4KrqwPEU8CnQbmNKeTdu0dToYTY4NJ 2PBTyPIw5OhU8HV3bOzg4eDZjh4sdB4sNnc6nV4m5yYd3Yrq07PAicp4OqYT o4SvBSPYmkepRMR0e5PQ8E0e5Hq6pJ2PoT9hisPtdUN3/OKiQqpIqSU9RhhH YSUk6H0Ke9XsV/zqTzeTCOz4wj5DEkewjEUUwfQk/7lCd0ifIok8iPpPck+I 4TdE+0oOEkR3I+5R9zTZI97xB7GxNHuSYnJIKkiSclSMJ4GmIPionsJskT3I OG8I3fUngrHvYaSpVCG6Me89yEHmJ8ihDk7sOER7FKqlKhSFSVEpSldDRKYU 2fUTxOxU/OrA8z/rKQew6PR6ElGw3aHZ/Sn9Bif2MSYiGlTHkHZJ8ynKkkn3 qAlKIfJSqQ7qVSQ0TxT2HKJDsmxNEhKjkHCpJFbFCNIn/OVEUpBOUT5iqJVV sj/Aj3JJiVRyinQrlHdPBK+gdSPEeJybmm6J9Jw6qVs0TSaKKbEU2buhTHQx jgrFbFHBox0NNGk2aaOjTY0YbDTCsN3BW6aRWzYqlUwqpNG5hhswTSSVGjY4 Nk2bqkpsjZu6KVFctmm5TApiVycGxNiNFTCsYNjSsGJIYPi0mJA/Wf0Cj8zD E8j+8/tE2FI4I9roxDu5afwJ96MMSKoooqfE2SdSp+Smj9KB72j2GPkfipIG w0wRsppP7yo0bMexuiTGzDhpNK5Se0kxP53+ck2YaKp/cVPmfUp0G5/ekME/ wSSPpD5E+SPadie5y/QSSeCTklQ9yVVPiYYxTyK3KpU0RKFSnZUT9R9Bhw3M JU3MNhyjZpswYNFYVUoqlG6mNFKlKV0KMFE3KRsmMaVNiqUlKQwVKJDc3Q3Q 0mwlV4KYlRRXJSN3gcuENhyVNnzOCO72tgqHzTGMKVicEdyh0VE7lJ3JTSom KqpUpWMJMFQUpKmMO4x4Gj/K6PE8klYj+xgjFCVGMYxUVHqxVJpVcGH0FPNT 6R9CiqKorHtP40Ry8Rp6H4FSfWKwlUUoiojYe5Cbj2p+0qG4+5Jso+QwYlXR DZpE2JMRIqTTh4IpI3BhH5P2HJw/iVMPm2NH1FdSQown1qHk0jk3dDFbhy3F NNkpw2I6qbKEw6sdDhy0Oo5Urk9TDs3TgrdTlTDGzTYrSupoxwqcK4KdTQ2a SdVRTgkaVJKo2KimzY6OWzs0w6tk4bqjducFGip/Gx/AU7DZUGFdGDSSVJKO DBsYY7EqjDGJg/hNOG7Cup3bNmzZBVKpHJ3YeBUm5yxXDDSScAwwFSmlHCpV TgU3KjdpUw3ViuzR0bMKbHAkJSikpKcEhpGCVRJ0fWkkUPIYToTFJMMYIaDq DxVJVJKqH7yoTlIkdDcrBSpOpgMQnQfoO7wdxwIYdBJpOR+xUlP95Gg7nkN0 kif0ERT6UPewk7E7NPwVP4lfcYfxKfxMMVSTRRor/ObMBWyTclMYSfmKR/ef pRwjT/OpsFcqVSqlIlVVUVTxJJPqK+KhSvaY9H8jZpFJsU3fafUaHxKjhU+g poqcKkbKFKR7yf8ihGORIxVVIn4lJyUmjsr61UqKip+3cU7HQ/J9bDl9yYYb nJTkpuR5m5wcq2aVo3TZ4NCqwqtKmJWxKxuwxyxiupuMU5MOx6GHicHA4Oxu dinV2dzByMOrq05V2cmGFNMdh4uzceDwdFV4MeLSsNxp4u5py5MG5TRubv7z ucNnB0NydWjhwmFOxPI6mGxsN2h7CngdThNOSjwKm7wJhw4MSinJ6mGjR2Td +Zs7O7wOzunQxhWz0O45NzoVwrE6NjCqqt3m6q80rSblOzo5StmMVhjZyqbt zY2bEaSpsr1Oh0NyvNwcNijo7tOx0NjobG7StmzG5urR2PUoxu5ep1OhudBT CmjBuweLT1acGjhK/M2Joh2bt0rZivN1MNmxjybNETQlGxNClE8kafA/Q8BR QqKinoidkkn6FQ9ibp70NIHmpJ5FYqSKpDCowwYwrEpSkSqUrGGJETsIjGFR UqKkiShX5nmpUU9x6DiCnVukHc5JEpURFIw3bqxOoe06FKKMEww+BhiVSPgr R+ojBTZpTDSYpuxiv3imKkpQqSkipWyqaTDRpScNGDYjGJNz/3lbtKqNiYUJ iKgcsYcphiJsqTDdhiKhVSVQVJKlKhCpUqvgTyEni+ofefWnJR0ERweRgeaP VUKUlKhUfFuaE2NiuT4k2Gz4m4NJ5JB6FOUp6K3K0qnKooeakVUqpSiqkklV VKqRVBSoqpElKpSpSiqVKV0SNHVoR2IqPkdyk/cIp6lQVHdIRwSUdDSIqVyV +5VcE/Q/kbNHV72ntMV+52e1Nyfwqe88QnmSHV9x/WwqpDZAbKYkaJKqQqkh UmzGCqpRVQnsbCMQe9OEe0e4wwwwdj95oPoNERP4iAqQfsVD3JR/KfBGJ7FK qvkabnzVJT+YTHCkNFOxUMUmko6tGjRKwwVUVSKoVSqJSkrGFUxXCSaVJD9j GBFRFShUGlRDH72JhVVJCjkpilTliJoqioNKj6YgpJwk0wqsP4BpNKT+cr+B oO5Kk0+9o3JMPUkJ2OH8yp4q9HmqVjErYeiTDyJSjwQwwVRVUlUlVFSsIqKk xiMRsqbCaOhpKfJE9BSqoqqpUlSpUSVVKRUiVT/rpMUhuNiSKqJTBRoMkR7y kCoVJB+Jsf6CSuqSSfMkT1PofrfY7n8Ctyn6QP4E/EMKmK/oYMVP+5XVpiVK kKbmE2NGGGN2mitJI4CUTFRKSpIYqMJUiFVImKiMVIqVJHCUYScKblNGyY0l RHCNmJhGKYpMYTRTCoSkVBVGCpTDCYVCKo0UPgUmxRsqlI2MGlKaExRVUomM SVJMSdxSGikaUKoaKmFDSoxQwoklVIUwwMSpKqJSojCpKUJVKYxNlEmNKxFR UYVhilMQlVDCpjCYR0Oj6lP9J/gbO4nBE3UGOxppsf5jodCkJhSlNylKfymj DRThOjkeTB2aNgpDoP0oT3I+ZRPpSj1SJ4k+bqm580Y9qSeh/eTwBiHZUJP3 FBpUdyUpSdhDDd2KNgOpNivRonJTZJokh2DQH+cmx9B4mHJE6CT/Sj73cKU+ 9hKwqdyR3VIGhP0vJIj2tExCuWJCYJuPQ0n1HzUw3JVVIYTkoY0BVJVSsRTs lTolVsYmxwoqiqVSqVSqK0kNPJMYfnOhJKSUolKSJSkfcSbGxIK/iVHV2bJh pNKfQaPzGkbp8niODYwpHd9RweZCVUhVSRs3Tux2V5JE9B+w7HJOqvVg5aGx pyOzdI/3p7WDYEVNzCmKVD8wVOzTwTQ9iKVKpQcI/MTxHAmyifsYxI95IehP KJITZHmVKUieSpOhJFOCJT/7GDEh/ifsKw4UmkqqqqmmCPMqTZRMKiCqTFSq T/kpI6lKVKUmlElVPAeaScNJ8lJVT3im4qYK6k0Y3KkcKSNzxGJN3sUmJUKx HiTENEqUqnc4GzY2PMJhiVOisKk6pOjCRu8mzTFd0U/xGMaeRjRSq6IdFbml UqqK2KwqqpKKUqqqpUp/jRoYmnCphpXU4bPAYhTxMaTQqjCmClRFVPJhpJp4 MNFY0nkbJg2KKqTdh4K5H1FIopSUn/IwwkYUUpRSlCchsjweBVOqJpUUwYTR 3YdzgcKTQqmKP4yjRpFYjElSnL/9XRsnmxsbmzSVo0ViQ6oVKqTdN27SInYU wnimJ8VRJ7X+RSPvSJX6kj/gr8xA6kSVsknzKpXRsQ/E+JjSnxJPiPMmGEpS UmFJJhShSMKPibp/IfExOUonBSe5UVScFfQqSfUpuUcqg7ipOVQcKhMUk2Km lGlTSifYkSdX1JJiokeqh+4ftew0iGle5WCmxSYT3OGNKVjGCSVScKiTdQnB UhipBVEbGzBpSClNKiboqRIxVUSShFJ/oYw2UcNJiKqlVyqGKkqlaUUxw0pi sbOg3adCsVDhU4kgqJKJRVFU0rFRRUpU/FUhsUVsqMVVMYdFJ0CkGyKk0YqV XLdXdskRPyJh6lP2PtVDB7zGCaSIkVPU9xRT2uTQ0pEpJSJVrhbURSAfN7e3 tp9HBdcT3PpdrlfQ8rtdr6Xa/89y6zH/GiBgYENM3FFGsojWMYqRTYpRKk2K /kV/KlaKUpSpSilClRNxUKqqfJK4FOqrRVVUqVKUK0xNg/A/JSUqVSKlPwUY qqKpFSpUUpSpKpKlJShUklIUkpVYSYkMVIWIVQqg+lJUidHAfijY2YYcFE4G xRSkpUYaSN1KoFFVUopEjgUMTGCUYqJiKJWIrsxOimkJsSqVUmFJ+AlaE0dU 6D+N5PzIfqFKFQqlSKVSqklSf3qkPIqSKpJpUqjgH6zoiR2UjYnmclSlNJBG idx5lSbkSinQ/uNySHAqDUiSFQfeqDSSSf8JIkjHIeoqfA8HiSE0knUUwkp/ wNmOqYRUU3eDQ0aNKwYqlSaURpjEVSqVSJVNKUqMSlUqiQpUSYSbNCaQQ6lS COTcfuR7UfuKY9WP5SmxhgYUeRTRoYKxJiTFYrE3EVUaUxKU/MbGFUpWw4KT Tg0NmmDFTYaFYYYUoqpphhOFDBspiUVUNDRoaKYioxVFKkVDg3NGlUqSq4Uj EbsGKYwqSoYKoVKKkKjFYoqps0xJpicEibmzZVU3V81Y03Jp+9jkblbMU+au GmKxRijEbsYk0lNI00rRuaKGxppjSpiyRSmlGKxsVNNk0xphowjZIpSmKjZB hsYh1TzMJU2Nw7HRI+A3NKRUr2qNkaTEf+boKUlKpKpKSLEKkqhJikEKn9R3 DTRI4RXtDsf9xU/5ypCqSlClRGFImFRMKkwpVFSlKTCFOzSTdE8CiHA3MKH1 D2P6SGj/pUhKqQlKIpVCilEhRUkVSRKUpUqgqhSlKhKUQpUVRVVUhSkUqREq pBVSlEKKKVIpUpUKVSiVKkhVCUoklVEUpSpBUlJCopUqFShSpEqUVUilSlKF SKUFKEVUgpQlKkKVFFElFFKlJKSqiRSlKRSoUpJHQoMKVUlFRSqUqUlVVJVS SHA7lVSpK/E/2lKKKMf8T2PRUpPVEVIqnaEdScngJPyJ6HY3OD2KGKKlFKkw xWGFClJVU+CoT4FJGk2HmxwpNkYlUehhhoqVJiYg3KYk8HicNFSopucDhJ4P yYYcJOCm5DhUSbuqVUqp/c+TE0p/pU8zR/UK0lSeSRI6COyT5GkTBSkbpyeZ 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 QqSO5seZupoodycuh1Y2OHB2Dk6NPRUdkpuqOWGN06HDE0NnDhg6FdjDTsbH Cq5OXU4YeLqdTSujQroqdUFdh0Ow0IdkrojqUo6tzd0Hg0clNPFiurDk6uXJ hsYxupydmmxskdmPFs2U0dXQxw4O54ODYrdjo2N3Lg/aTuaVO51K6EjY04I3 TGlMVSmOzyGh3KpsbIcmxsVJw8Dqdjo7HLTdybCm5u0Gmzh0dDoYTo2VsqjS sOjk0ctHZscnBjcU6uG7TAVuo3bFTZ0dDsdDlVU7uGhOrzMOjxVNm7DSph4K YpsdSmk4PI3TBseANxoUpoqR3RTo4HdsYbIOynmp0NnRo8VOTY7HDZGxuYcH mU4eZXJWk0VOrY4KUjTxY7OQ8GGjhsaYnJy7NJwdDh0Gh1eDs0nRwniYmimj k8DSaNjDxYYUxh2MYdXcw4CdHBh0NnQ8BwaKcNjgpu2VwThNHJuTycGxUkx2 Ohu5UpuYjk7K3N27dVGOGBspslcuSaeB1OTolMOpU00kODuxJOqYxipEqaU3 cuzqcG7oV3NJ2NJsOrTTRRhskeQ7tk7Kh2d2IdUk7qwdWDk4UxwUbFSbMGhj ApNzc0aNxiTTFYTCpwKblUbsaGjGlNJox1PFpI8TdUYk6pODl3K2O5swrgwx Wimz3q8yaeR5lKd3k4HgTTqdm7o82ydnZOBu3HUop5tIVKx2OynZseRs2U6v Mw5Hds5GxHU8Xibkrcm7qx1GnVKdCuDxbOGytOU2DoaabOTRwYPBsOUmzsaG 6tiVKOxu07OTRpN3B0NJu3FbMKrdTRSqKnU4PIY2bnmw06OCmMN2HRsdFSuD DqMbuTkbowngw3SpuSuVNzg8nDhuwqKU2SnU6NN0wqbm5s6tNNN2OzwY6NOj gqbGyqcseau7R5u6uE3UiR3QYYY6NjdOBXBGxwIpGJ4uHJs6NzToTsUaKY3K 2aSbEebY2NjRiDSmFHVobps7HJXKSeCNynoV0NOzqrYrs8mOzxbOjsabqqq6 sdHRw+ls06nByV0OoYRNyJhTQjq0NzzdmjzPNo0diqmmHKdHYnVpGHimyjGK NI8HCUo7q4ditnZs4VTZwrwcN1btjlyxurGzdw4blabMVj2OWGm5OVFUHYpK o7qkndVVIdlDHds0VQSqlU3VsVSqpimlTl1bN1VsO7R2dTlod3KbMdToCO6b scPNiHVUbpsbnd0bjTooYOD0NmjYKU7sJMG7l1eLc6q5bE8XCU7odDDhXLEV 1MI3dmHBsbJwbO6SaNjs8RRUdEh0SpsikngHc4G42So3RUmIUOwmCNBSOHR0 J0OUNxOCp/G5QYnciVOSKm5GjYNIjZI2HAmidCYJiaI6mFVhwYni0quzq7ql Y5dXDdw6Ojh0buDT2Nmxsp0V0dmMbJWmmnDk3Nym5yw3OzZpwJXCdG5ubDYo 2NHUbBh1TqxXCY4McDg2PExs4Vu4Ozk2DdXDds8G47OhuquFVjhSuWlTQ4aN EmNjFRiiWyVXZCThSaaVUrdiKxuxjQpjExS2RsSdDG6PBFNjdK5aHgxpRors Vs6bp0cq5SodnZs3dnV2bsOEqnDq5Y4djg6jo6EDsJDYmDkhNjDcRTc0UaKU 3Kdgwwm5owpRGFGBsTZTcqbCbKJhQbmGzTRTY2CdHBjqqOyOXQpDhUSYUg6D EYkkrdUpOxMTYQpGyBywmhBTROBiScJwRijDZExjQqpG7DEbE3aTlRoN0YaJ uoUo0hJhsR2bkaNHDlHCJujdGI3SY6EqNINmE2RGkjDTZGITEKaQ6nLonLca SpSsRU4VuiSOykkSpKkE8ifiRVBSPeQ6FJPrSVFNgaKJTTudTFFTq0hiSUrG DDZJpwhTQ2FNNiiNlFPxFRUqq7h/gWJEjyK0kOqNH5mJpUI6o9B7UqjzYmKo RKVJPBs6tLB2KJ2LIj1H0FOwnsGEj7zqT7D6WIhopPmaUrGDFH4sYlUqlUrT CVVY+p9onBsg2Tc+9OjZ8UitNKxRTSI0Kw2FFK8iehUEpXkKnqUDSgNDR8mI 8yjZJCpCiTq5PvKfEnJPij4JKopFKaVIYpGCiikiciJKmClFFKKps2Y0NFYr T9ZNGjSSaYiimkVpibKJoqqkx3UxoqbKwqaNmNFVVMSYbmySbtEqsKVTDGGj Zu0VoqbpNG6bkK2NNMKw0VjCmI0bMKklVsYorSqqlKrGKYpVTSmFSpVVW7ZS mFTcYTEbGGm7DdswRo0KbmmMYVSVRSpiqbm7Q0Bo2TSVVKwrdK0xhjGCpukT GmISYiMboYkcEjRwbI3dlVwlT4voaTgfMbjZuYNxwCpjyFGFK6Cjkpy5Yp1N Gx0SSm45Tk7HJp2bpslYPk7NybKTqVuaHQqTo6tFJo6nB0HR2cDkVyOCODTo NE0bJs6t3B3ODhwTkPEw0nYo5JI7lEBTsiGNFCODzVJ4HBsw7FTsNiqp0VEY EehSGPEwfaqKPIQ2eJsbqbvJU0nVsxVRUVR5Nm5pNGzY5YpubJJpg4buG5W7 62JJNNKlcupsnQ2YU2VhRKiKKiYeiRIoqilQnmPiU3SoPsQGyVSqSOhRIcty kmjoYUpNFSqk2TE00hgp5ntPM8CsUxTEpT2ODY0KpNiYYSk3U0k0kKlKKaKK kwwqid0P2AYaU4OE/c4Kr4mSRPkaPFSNCTDSoaVQ3cK7GySJo8B4G55GMVGK wwMMKwoSsGGFHCqVJicsBpUkbKVsPsRVCoqVJPyRwkT7VIqiFUie0qROApAP 0lA0UiJikh9JUkNFSDSiYUbqSqgmFBIopJSpCGkoYJUkKURiVAmlP2qJ+xUi JpUQblSPR0BiQ3V4I+t/geb1KbDFMJy00kmjDHCRwbDhonZUnRXCTl7zlUxs 0qSeRUCaPgYcBPExD95HxP4Rg2NH4qVQ3YwYxUfnfmT2oNMG5iUofSYTDZFJ PB8n2D3vJ9TGJGKIw+KE4KifUoibij3H2FI0aOE3RTluJuKkqkKkGxJW5Oqd ifYfwsR+Kh7yJYjc+9HViIfI8mg7PI8FSaOTTZXZh5N3RpuppN2laMbNMNKa eTE6o4MburgVy6G7ZOGmiJOByUpTdTFOzTRNzYwYUMNDzKablJsqlAG4qmGj QkkUqQkUpFMJhWJTGNGCY2Q2FaYVK2aYYVVDZps0VNjDCUpNlKViaNE0m6VE o2RpRoxu0jQpiJUmGyKkwqKlSim5WFTBTG6saMRhVJio3Vo2SSqpGFcMNytK TZWJBW6sK4KjChVNm43MNIqbDCSRVVVSqrZhiNKYlTqpiq2YnJSNE4MTCqFV OFVUYhGKhiSUkjcYaKKUwqaMYMJhpKbsaNGBo0NjdiGKKbMVVYrGE3RppNFM KYVjBiqMVIpWFYmySaSmzCjTY0qmFGG6dx+k7nwHkTR5E6J0UrspThP8xQwG 4/Ibu6p+spiKo3epo/SeCqnsewepGGnsKOqoFUFUqlKlKPvUmJXiaYBVIfkq A2aYhVSYqP3KI+0qSNFJSpJSoKqqkpUVRN1SOXvSMT6yQp8HwJMH71VUTupK wxRVJTsaejT7UQ3cB2HtSTxVCcJ9x9zSaFCHsEnKT3qg0MPgYaZpE+5wSp0f WT7zGx6khhg2JI97EfgqHuRD5I/F7BJJPk9H0KViq8zTRpikpPxOr+sUr3nm pVKpVKpVKpVKpVKpVKpVKxGk2Rux5nsYaJHtUiT9hUQmkqE+IKg7pIyE0O5K bIhG6jYSpEDFTSaSKlSdwph8Wx5GwdVGxRSnxejDdjH2FE2KhKUm6m7gYlU3 KwpNypNikbORiTdFficOWh7Ckwo4dDRs2cippKKbtE4dTqcjDkYbMSNOpicq dSk6uorRoHKKwrlpXR0FRiSSckp5Ck4FdQOR+9KcNmFVpoe93TYpVNJGIh6i Gn5zyPceZSUwV4PB6J9Bu6I+sdxOjzYrFKj1SKbpJImyJPuSHYj9pA2SOx3Q mxPQe0Up1eR3KkmylMPI0bkk2JsxODl6viKjCpXgVopNI/Bj61PepwJFSTdS lPk5KnCbjcUxu0nYwwnLdoqK8kbH3qqvpPUok+BGkcNjwJ1NMSjFRspPxPYP a8Xye55HxP6zoR3QYKknq/ah3HxJRSfuP5zRopiUwmz7SE0Cqnmf7T6Q7I/y pJHsQaCCd0hSOAkTBUkUqROhJI+s6iPAqaR/akqQcqaKkpUqiqnBuYNIqqJI mAVIYVJJhKx+1CeSkkPxSjYqQ5Kk8UR7T5PrT6GPoPtKKSmKiNndj7UqNlVV VpSfcU/Y/mY3OGCIqtlSbqiqlFUlbsYVWlYoqqqjStNMUxVbsVNGKlaYxWzE wqVpiVhgqYxMDH+DSTZU2Vio5VH73kgw6p2FQUqCVFKUiRRUUkqSVVE9qD9K SeoGEf/zfYQ+xJ96VH8Jj7DlSafESHd9BsUnkI/wdk6JEnzKkqiKqVUKgqRU UidRQ4ISf7SFAlKkkqpFVKVKURBh3PApRVRSilRFUlVSpEUoSaI0iYlPug+o ipJsJipufYJ6JVQqPYlJJ7nQpgV4pIHi82JJ5lBVIpRKKkB7EEf5kcIkx9Qk jAr3PsT+U/5P/+uH1HkiDE5VVV9jFUpXZEn7DHYp3VJiVCvwaGKbtkdH1n/+ lSGz5I+hD+MrEKqsVPJ0bEVWzEmFUxhNmIaaPA2Y3RsjcO53KbvyUY0ExIrk mDkfJCdBDxJJO6JNhPpYElMbqlUPrKifoUSSfoVIJ+k/FyhDoUiT6X1GnB95 h4kKRNEpKKUqFVRKZIRGGJJ7HmfalSfzMYlUpVVUqP7nuIwfEU2Uhh1TBuqE 2TskTyVoOqjq6Gw7CeSfmPe/6zD/nUpVUmKp+dRiVUYwxTTGJ/mhHQ8TqoqU FJIqpKR+dJMMSlUKYpKwVSGJVRVQqVjGEFJKKpVVQxUlUMVGKRiqVRhiTGP1 tMUrSsVgYpVVKqpEklKqoKqVKJ/aUpQpSMSooKqKVUkkqIShFKQKqIk8ERiS o2NFQVpoxUaJUkJwrECsNGkjRFE9TRohNiGkmknCFRJKpBVSIOAhSofEe45f SbopFQaYqiJ9IisVMI9yY0qQmkUiPkkOw3R8FMSNz8mjHQrQ0mE/JjyfxkY7 qqUqolf6E4SIpU+obId1D6CkPzkqGGDD8T+cgTYlP5yTY2KcsRiKk8jSaKlJ U0FdTSR5NxMSP3sSblMUMOGyjsoqiqKoqiqKqKoqiqKorDJJuJTRskEbJFKC d1CfcqabpiVUSTdUnKgf3K/jeTHdU3VPUj2vclUUxWElVFJVP8qpiUqiilSS poxKrCUYMRUSTZUkw/EfBo3PYkExSqUpVbmGAopVfBFBSnwVVSbP5WDB1Cn1 lIleR7Bsgqva0xIdTc4codk7qTgNGyI0eJs3N0fYqQp0SRsPRXJ3OCQ7jZIq VUVSqKoUbpU6FNKSqkjFHoNkY06Co9w+qf2mOryKVFVU3MMKU+oxiUolDTBB iJX9KpNNGJikmFEkoqkoopUqko2CsJTRWBKipJ3YwqtMIxiKrGGKMUiUoO53 MbKVQbEqSYhQpSJSYlQR4tkTwP2J1ST9qkFKgps+pUiT2nvdFRKk9hTsVGz5 tOA3KHqMMGEUTo5Yn9pXB9BPxDSB9iohXsRPNI/7TZ2UNipVQfgKj//0IqGy olVPIUk97BiSPgUhhKHZpuqtH9SexgUqJPAoP4kSFJ0KQlKUqI6iKTwRJXuf FI/pU0kPAqCqRHgpHQqDk6JJSSR2QmhP1j9AnBof3PJHo0Sd1SqmkV+lTSoi vB4HtJOpu+aChSqlKVh6tNAp9JuY4TZgVJ6JB6E+QmD+0PoD8XBT8iYNFf4O zBR5E+5ywqSTRUpXDDAxhhFKP9r/i/AY+gbH5FclCh/mKwp0MeJORJCaTR3Y 0Uk/YUSRRSEKApCkgoopRIqUqEkKqQkopImyJGh2MYSPFRJ9/qcQSclJI3SS iSTCFSQUqIlVEf62kGSSQmlJSqpHsB1DY+w2hHz979DzafvPkabqk9WPYlcJ /CkmN0k0pTYKYdSmFE0aIGxp+ls3YVKpwrDl0KxpMcscKxumEaRwcm5omyOz hsxoqbm5UkaSlKMUoqPyNJjc6uTRs0NjsnKcGmJRSUrc6JTRTcow0KcqftVs cFMJSo7uTRsdG6cldDFMSaKmySpsNxjhw3NGzlRiUo2STgwOrY6upgd251Tk dmk4SSqqU6JJ1Tsmx2U6CuDd2eRTGzuNGJorClYSmFJ3Y02KVo7OjCqTRUaa TSNFU3NFSaaE0SibMTZ0K5T+SCmFPEw6tzBsqadDQmjYxHoRSUkrFN0rZokx poYiih2UbJJo0eKvI0mxumK3MdypwJiB1VN02VFSlJSmMYbKYrGIxoUpwaQ7 uiaN0bJKUqmKRubEDDqcsbqbipy5JhsaTY/adTAnkT/mIekhEaPQ7o7GGinY x6JE/UUQeSiPRSJE0FFKj0PADkn9ZSioFKSJSkKQoB1JJ1SHAeRITudyvBh7 zR/eJ9b95+c8wR9qQD0Gip9j9D9bQ0aJoNGlKJpJJppGhUiiQ/qbPziNlREf xESjckwTSKElIFFEko/M7E0popSUhSB9x9ZophRs2EJsUooSRSUITRhMJIpR /sMKp7SQnzP+85EpKkklRSpSqFJ2YPJKRSjxMYNMSaRiRjQw8UbH+hoNlRGz uUI6n7zsYf/7NxN0kThOzsknqqSaI7KBu/OcgRSSdSkkwpJPmbpP3q0R7ySw iM4/wah8xsEnrJNAoHASXA+luYHqSfvDlX0vB7HdPsN0jZu4OE2PyY/Y0hsp DdXRVOWIn6VG6mzGJJy3KlVpsrTuSA/aUj/+HsPU0Ik95h+Y5Op/YbGj6XtR VKpSilfrUY6gk/iYeKfxkfJwbEPqRE//+LuSKcKEhRtuWfg= ------------=_1583534362-29877-25-- >From dan@cgsoftware.com Sat Apr 01 00:00:00 2000 From: Daniel Berlin To: gdb-patches@sourceware.cygnus.com Subject: [PATCH]: Allow rank_one_type to see through reference types Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-id: X-SW-Source: 2000-q1/msg00033.html Content-length: 513 This patch (against the latest cvs) allows rank_one_type to see through reference types, rather than claim the overload is incompatbile.Since we can cast to references anyway, it shouldn't claim they were incompatible, and at worst, if we can't figure out how to cast it, you'll get an error when it tries to cast it. This helps overload resolution quite a bit. I can now successfully use all STL containers's member functions, when combined with my other patch. Next up, the exception handling stuff. --Dan From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jonathan Larmour To: gdb-patches@sourceware.cygnus.com Cc: Alex Schuilenburg Subject: ser-unix.c:do_unix_readchar() Don't timeout when told not to Date: Sun, 19 Mar 2000 23:42:00 -0000 Message-ID: <38D5D64F.CB756366@redhat.co.uk> X-SW-Source: 2000-03/msg00364.html Message-ID: <20000319234200.VO-mBG-Bxz7l8zvF_1Dv4Mu4Hxu4GtGFVoftetJVJTI@z> A while back, folks in the eCos team reported that you could get "Watchdog has expired. Target detached." messages even when the watchdog wasn't set. The GDB team reacted in disbelief :-). After getting irritated by it this evening, I looked for and found the problem: do_unix_readchar() could still return SERIAL_TIMEOUT, even when the requested timeout was -1 (i.e. infinite). The attached patch fixes the problem, and I used the opportunity to make the code slightly more robust, and more similar to e.g. do_hardwire_readchar in the same file. I don't have write permission, so please check this in. Thanks, Jifl 2000-03-20 Jonathan Larmour * ser-unix.c (do_unix_readchar): Reorganise to be more robust, particularly ensuring it can't return SERIAL_TIMEOUT when told not to time out. -- Red Hat, 35 Cambridge Place, Cambridge, UK. CB2 1NS Tel: +44 (1223) 728762 "Plan to be spontaneous tomorrow." || These opinions are all my own fault Index: ser-unix.c =================================================================== RCS file: /cvs/src/src/gdb/ser-unix.c,v retrieving revision 1.2 diff -u -5 -p -c -r1.2 ser-unix.c *** ser-unix.c 2000/02/09 08:52:47 1.2 --- ser-unix.c 2000/03/20 07:30:48 *************** do_unix_readchar (serial_t scb, int time *** 908,920 **** /* We have to be able to keep the GUI alive here, so we break the original timeout into steps of 1 second, running the "keep the GUI alive" hook each time through the loop. Also, timeout = 0 means to poll, so we just set the delta to 0, so we ! will only go through the loop once. */ ! delta = (timeout == 0 ? 0 : 1); while (1) { /* N.B. The UI may destroy our world (for instance by calling remote_stop,) in which case we want to get out of here as --- 908,920 ---- /* We have to be able to keep the GUI alive here, so we break the original timeout into steps of 1 second, running the "keep the GUI alive" hook each time through the loop. Also, timeout = 0 means to poll, so we just set the delta to 0, so we ! will only go through the loop once. timeout < 0 means to wait forever. */ ! delta = (timeout <= 0 ? 0 : 1); while (1) { /* N.B. The UI may destroy our world (for instance by calling remote_stop,) in which case we want to get out of here as *************** do_unix_readchar (serial_t scb, int time *** 926,980 **** { if (ui_loop_hook (0)) return SERIAL_TIMEOUT; } ! status = ser_unix_wait_for (scb, delta); timeout -= delta; ! /* If we got a character or an error back from wait_for, then we can ! break from the loop before the timeout is completed. */ ! if (status != SERIAL_TIMEOUT) ! { ! break; ! } ! /* If we have exhausted the original timeout, then generate ! a SERIAL_TIMEOUT, and pass it out of the loop. */ ! else if (timeout == 0) ! { ! status = SERIAL_TIMEOUT; ! break; } - } - - if (status < 0) - return status; ! while (1) ! { ! status = read (scb->fd, scb->buf, BUFSIZ); ! if (status != -1 || errno != EINTR) ! break; ! } ! ! if (status <= 0) ! { ! if (status == 0) ! return SERIAL_TIMEOUT; /* 0 chars means timeout [may need to ! distinguish between EOF & timeouts ! someday] */ ! else ! return SERIAL_ERROR; /* Got an error from read */ } - - scb->bufcnt = status; - scb->bufcnt--; - scb->bufp = scb->buf; - return *scb->bufp++; } /* Perform operations common to both old and new readchar. */ /* Return the next character from the input FIFO. If the FIFO is --- 926,967 ---- { if (ui_loop_hook (0)) return SERIAL_TIMEOUT; } ! status = ser_unix_wait_for (scb, timeout < 0 ? timeout : delta); timeout -= delta; ! /* If we got an error back from wait_for, then we can return */ ! if (status == SERIAL_ERROR) ! return status; ! status = read (scb->fd, scb->buf, BUFSIZ); ! if (status <= 0) ! { ! if (status == 0) ! { ! if (timeout != 0) ! continue; ! else ! return SERIAL_TIMEOUT; /* 0 chars means timeout [may need to ! distinguish between EOF & timeouts ! someday] */ ! } ! else if (errno == EINTR) ! continue; ! else ! return SERIAL_ERROR; /* Got an error from read */ } ! scb->bufcnt = status; ! scb->bufcnt--; ! scb->bufp = scb->buf; ! return *scb->bufp++; } } /* Perform operations common to both old and new readchar. */ /* Return the next character from the input FIFO. If the FIFO is >From ac131313@cygnus.com Mon Mar 20 00:20:00 2000 From: Andrew Cagney To: Philippe GIACINTI Cc: gdb-patches@sourceware.cygnus.com Subject: Re: [PATCH] update: minor fixes in remote.c Date: Mon, 20 Mar 2000 00:20:00 -0000 Message-id: <38D5DEF3.B5482CF4@cygnus.com> References: <14549.54618.39052.823724@gargle.gargle.HOWL> X-SW-Source: 2000-03/msg00365.html Content-length: 1458 Philippe GIACINTI wrote: > @@ -3439,7 +3439,8 @@ > int todo; > int i; > > - todo = min (len, max_buf_size / 2); /* num bytes that will fit */ > + todo = min (len, max_buf_size / 2 - 2); /* num bytes that will fit */ > + /* -2 for leading $ and trailing # + checksum (2 hex chars) */ > > /* construct "m"","" */ > /* sprintf (buf, "m%lx,%x", (unsigned long) memaddr, todo); */ > > If the host side needs to read for example 500 bytes and assuming that the > maximum buffer size is 400 chars, then without the fix, the remote side will > be asked to send min (500, 400/2)=200 bytes, its answer will then be: > $ ... 200 hex encoded bytes = 400 chars #CS = 400 + 4 chars which is greater > than the max buffer size and will lead to an error from the host side. > So we need to subtract 4 chars (i.e.: 2 hex encoded bytes) from requested > number of bytes. I'm still not sure that there is a problem here (I'm not saying that there isn't though). Several changes late last year and the testsuite addition remote.exp addressed/tested many of the buffer overflow problems that were lingering in that code. Do you have a debug session or test case that demonstrates the problem? One thing to keep in mind is that, when receiving packets, the ``$'' and ``#NN'' are not included in the size of incomming packets as the remote code does not use the packet buffer for those characters. Andrew >From ac131313@cygnus.com Mon Mar 20 01:03:00 2000 From: Andrew Cagney To: Tom Tromey Cc: gdb-patches@sourceware.cygnus.com Subject: Re: Patch: make "!" a command unconditionally Date: Mon, 20 Mar 2000 01:03:00 -0000 Message-id: <38D5E957.7604102@cygnus.com> References: <87itz9cabi.fsf@cygnus.com> <38BB5D9F.1A9BF1B3@cygnus.com> <200002290701.XAA15591@ferrule.cygnus.com> X-SW-Source: 2000-03/msg00366.html Content-length: 2223 Tom Tromey wrote: > > >>>>> "Andrew" == Andrew Cagney writes: > > Andrew> From memory this has been suggested before. The problem pointed out > Andrew> last time was that you need to specify: > > Andrew> ``!'' > > I suggested it last time but didn't supply a patch. > I agree it would be nice to eliminate the space. > That's probably more than a 20 second hack though :-( > > Andrew> I think there also may have been a debate over ``!'' as a > Andrew> shell escape vs ``!'' for history. (personally it didn't > Andrew> worry me). Fernando? > > This doesn't bother me either. For these kinds of tools "!" is more > typically a shell escape. FYI, I've checked in the attatched. > Speaking of history, I wish gdb would pick up bash's "C-o" > (operate-and-get-next) binding. Hmm, operate-and-get-next (C-o) Accept the current line for execution and fetch the next line relative to the current line from the history for editing. Any argument is ignored. learn something new every day. Probably involves tweeks to the readline interface. Andrew Mon Mar 20 19:58:45 2000 Andrew Cagney * command.c (_initialize_command): Document requirements for ``!'' command. Index: command.c =================================================================== RCS file: /cvs/src/src/gdb/command.c,v retrieving revision 1.2 diff -p -r1.2 command.c *** command.c 2000/02/09 08:52:45 1.2 --- command.c 2000/03/20 08:59:25 *************** _initialize_command () *** 1678,1683 **** --- 1678,1689 ---- "Execute the rest of the line as a shell command. \n\ With no arguments, run an inferior shell."); + /* NOTE: cagney/2000-03-20: Being able to enter ``(gdb) !ls'' would + be a really useful feature. Unfortunatly, the below wont do + this. Instead it adds support for the form ``(gdb) ! ls'' + (i.e. the space is required). If the ``!'' command below is + added the complains about no ``!'' command would be replaced by + complains about how the ``!'' command is broken :-) */ if (xdb_commands) add_com_alias ("!", "shell", class_support, 0); >From Philippe.Giacinti@sxb.bsf.alcatel.fr Mon Mar 20 01:10:00 2000 From: Philippe GIACINTI To: Andrew Cagney Cc: Philippe GIACINTI , gdb-patches@sourceware.cygnus.com Subject: Re: [PATCH] update: minor fixes in remote.c Date: Mon, 20 Mar 2000 01:10:00 -0000 Message-id: <14549.60108.37967.719735@gargle.gargle.HOWL> References: <14549.54618.39052.823724@gargle.gargle.HOWL> <38D5DEF3.B5482CF4@cygnus.com> X-SW-Source: 2000-03/msg00367.html Content-length: 2140 Andrew Cagney wrote: > Philippe GIACINTI wrote: > > > @@ -3439,7 +3439,8 @@ > > int todo; > > int i; > > > > - todo = min (len, max_buf_size / 2); /* num bytes that will fit */ > > + todo = min (len, max_buf_size / 2 - 2); /* num bytes that will fit */ > > + /* -2 for leading $ and trailing # + checksum (2 hex chars) */ > > > > /* construct "m"","" */ > > /* sprintf (buf, "m%lx,%x", (unsigned long) memaddr, todo); */ > > > > If the host side needs to read for example 500 bytes and assuming that the > > maximum buffer size is 400 chars, then without the fix, the remote side will > > be asked to send min (500, 400/2)=200 bytes, its answer will then be: > > $ ... 200 hex encoded bytes = 400 chars #CS = 400 + 4 chars which is greater > > than the max buffer size and will lead to an error from the host side. > > So we need to subtract 4 chars (i.e.: 2 hex encoded bytes) from requested > > number of bytes. > > I'm still not sure that there is a problem here (I'm not saying that > there isn't though). Several changes late last year and the testsuite > addition remote.exp addressed/tested many of the buffer overflow > problems that were lingering in that code. > > Do you have a debug session or test case that demonstrates the problem? > > One thing to keep in mind is that, when receiving packets, the ``$'' and > ``#NN'' are not included in the size of incomming packets as the remote > code does not use the packet buffer for those characters. > > Andrew > OK, you're right. I've checked with the last snapshot, and the problem doesn't happen anymore. I had this problem with GDB-4.18 (see attached log) and fixed it with the previous patch. Sorry for the inconvenience ... Anyway, the first part of the patch (using set_thread) should be OK. Regards. -- Philippe Giacinti - Alcatel Business Systems - PCD/SMB/SWPCC - CC S0645 1, route du Dr Albert Schweitzer - 67408 Illkirch Cedex - FRANCE Tel: +33 (0)3.90.67.62.10 - Fax: +33 (0)3.90.67.77.93 mailto:Philippe.Giacinti@sxb.bsf.alcatel.fr