From 8b0dafdc16eff31ee5f4acc8544b45b2ae287a7d Mon Sep 17 00:00:00 2001 From: "Internet Software Consortium, Inc" <@isc.org> Date: Tue, 11 Feb 2014 09:01:28 -0700 Subject: 9.9.5rc2 --- CHANGES | 51 +- README | 13 +- bin/named/server.c | 40 +- bin/nsupdate/Makefile.in | 4 +- bin/tests/system/conf.sh.in | 1 + bin/tests/system/emptyzones/clean.sh | 1 + bin/tests/system/emptyzones/ns1/empty.db | 16 + bin/tests/system/emptyzones/ns1/named1.conf | 52 + bin/tests/system/emptyzones/ns1/named2.conf | 50 + bin/tests/system/emptyzones/ns1/rfc1918.zones | 19 + bin/tests/system/emptyzones/ns1/root.hint | 20 + bin/tests/system/emptyzones/setup.sh | 1 + bin/tests/system/emptyzones/tests.sh | 35 + bin/tests/system/xfer/prereq.sh | 10 +- contrib/queryperf/queryperf.c | 15 +- doc/arm/Bv9ARM.pdf | 1366 ++++++++++++------------- lib/dns/api | 2 +- lib/dns/dispatch.c | 17 +- lib/dns/include/dns/Makefile.in | 7 +- lib/dns/rdata/generic/rrsig_46.c | 32 +- lib/export/isc/Makefile.in | 4 +- lib/irs/api | 4 +- lib/irs/include/irs/Makefile.in | 4 +- lib/irs/include/irs/resconf.h | 14 +- lib/irs/resconf.c | 81 +- lib/isc/Makefile.in | 7 +- lib/isc/api | 4 +- lib/isc/include/isc/Makefile.in | 14 +- lib/isc/include/isc/tm.h | 46 + lib/isc/tm.c | 445 ++++++++ lib/isc/unix/time.c | 30 +- lib/isc/win32/libisc.def.in | 2 + lib/isc/win32/libisc.dsp.in | 8 + lib/isc/win32/libisc.mak.in | 24 + lib/isc/win32/libisc.vcxproj.filters.in | 8 +- lib/isc/win32/libisc.vcxproj.in | 4 +- lib/isc/win32/strptime.c | 392 ------- lib/isc/win32/time.c | 31 +- srcid | 2 +- version | 2 +- 40 files changed, 1644 insertions(+), 1234 deletions(-) create mode 100644 bin/tests/system/emptyzones/clean.sh create mode 100644 bin/tests/system/emptyzones/ns1/empty.db create mode 100644 bin/tests/system/emptyzones/ns1/named1.conf create mode 100644 bin/tests/system/emptyzones/ns1/named2.conf create mode 100644 bin/tests/system/emptyzones/ns1/rfc1918.zones create mode 100644 bin/tests/system/emptyzones/ns1/root.hint create mode 100644 bin/tests/system/emptyzones/setup.sh create mode 100644 bin/tests/system/emptyzones/tests.sh create mode 100644 lib/isc/include/isc/tm.h create mode 100644 lib/isc/tm.c delete mode 100644 lib/isc/win32/strptime.c diff --git a/CHANGES b/CHANGES index fc36de2b..c3cc99a5 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,45 @@ + --- 9.9.5rc2 released --- + +3710. [bug] Address double dns_zone_detach when switching to + using automatic empty zones from regular zones. + [RT #35177] + +3709. [port] Use built-in versions of strptime() and timegm() + on all platforms to avoid portability issues. + [RT #35183] + +3708. [bug] Address a portentry locking issue in dispatch.c. + [RT #35128] + +3707. [bug] irs_resconf_load now returns ISC_R_FILENOTFOUND + on a missing resolv.conf file and initializes the + structure as if it had been configured with: + + nameserver ::1 + nameserver 127.0.0.1 + + Note: Callers will need to be updated to treat + ISC_R_FILENOTFOUND as a qualified success or else + they will leak memory. The following code fragment + will work with both old and new versions without + changing the behaviour of the existing code. + + resconf = NULL; + result = irs_resconf_load(mctx, "/etc/resolv.conf", + &resconf); + if (result != ISC_SUCCESS) { + if (resconf != NULL) + irs_resconf_destroy(&resconf); + .... + } + + [RT #35194] + +3706. [contrib] queryperf: Fixed a possible integer overflow when + printing results. [RT #35182] + +3704. [protocol] Accept integer timestamps in RRSIG records. [RT #35185] + --- 9.9.5rc1 released --- 3701. [func] named-checkconf can now obscure shared secrets @@ -28,7 +70,8 @@ 3693. [security] memcpy was incorrectly called with overlapping ranges resulting in malformed names being generated on some platforms. This could cause INSIST failures - when serving NSEC3 signed zones. [RT #35120] + when serving NSEC3 signed zones (CVE-2014-0591). + [RT #35120] 3692. [bug] Two calls to dns_db_getoriginnode were fatal if there was no data at the node. [RT #35080] @@ -128,8 +171,10 @@ 3657. [port] Some readline clones don't accept NULL pointers when calling add_history. [RT #34842] -3656. [bug] Treat an all zero netmask as invalid when generating - the localnets acl. [RT #34687] +3656. [security] Treat an all zero netmask as invalid when generating + the localnets acl. (The prior behavior could + allow unexpected matches when using some versions + of Winsock: CVE-2013-6320.) [RT #34687] 3655. [cleanup] Simplify TCP message processing when requesting a zone transfer. [RT #34825] diff --git a/README b/README index e0e7b5f6..718b71a9 100644 --- a/README +++ b/README @@ -53,8 +53,9 @@ BIND 9 BIND 9.9.5 - BIND 9.9.5 is a maintenance release, and includes the following - functional enhancements: + BIND 9.9.5 is a maintenance release, and patches the security + flaws described in CVE-2013-6320 and CVE-2014-0591. It also + includes the following functional enhancements: - "named" now preserves the capitalization of names when responding to queries. @@ -63,10 +64,10 @@ BIND 9.9.5 - When re-signing a zone, the new "dnssec-signzone -Q" option drops signatures from keys that are still published but are no longer active. - - "named-checkconf -px" will print the contents of configuration - files with the shared secrets obscured, making it easier to - share configuration (e.g. when submitting a bug report) - without revealing private information. + - "named-checkconf -px" will print the contents of configuration + files with the shared secrets obscured, making it easier to + share configuration (e.g. when submitting a bug report) + without revealing private information. BIND 9.9.4 diff --git a/bin/named/server.c b/bin/named/server.c index 057dac1b..77a4e440 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -1324,26 +1324,22 @@ on_disable_list(const cfg_obj_t *disablelist, dns_name_t *zonename) { return (ISC_FALSE); } -static void -check_dbtype(dns_zone_t **zonep, unsigned int dbtypec, const char **dbargv, +static isc_result_t +check_dbtype(dns_zone_t *zone, unsigned int dbtypec, const char **dbargv, isc_mem_t *mctx) { char **argv = NULL; unsigned int i; - isc_result_t result; + isc_result_t result = ISC_R_SUCCESS; - result = dns_zone_getdbtype(*zonep, &argv, mctx); - if (result != ISC_R_SUCCESS) { - dns_zone_detach(zonep); - return; - } + CHECK(dns_zone_getdbtype(zone, &argv, mctx)); /* * Check that all the arguments match. */ for (i = 0; i < dbtypec; i++) if (argv[i] == NULL || strcmp(argv[i], dbargv[i]) != 0) { - dns_zone_detach(zonep); + CHECK(ISC_R_FAILURE); break; } @@ -1351,8 +1347,11 @@ check_dbtype(dns_zone_t **zonep, unsigned int dbtypec, const char **dbargv, * Check that there are not extra arguments. */ if (i == dbtypec && argv[i] != NULL) - dns_zone_detach(zonep); + result = ISC_R_FAILURE; + + cleanup: isc_mem_free(mctx, argv); + return (result); } static isc_result_t @@ -1964,12 +1963,21 @@ create_empty_zone(dns_zone_t *zone, dns_name_t *name, dns_view_t *view, * Is the existing zone the ok to use? */ if (zone != NULL) { - if (db != NULL) - check_dbtype(&zone, rbt_dbtypec, rbt_dbtype, - view->mctx); - else - check_dbtype(&zone, empty_dbtypec, empty_dbtype, - view->mctx); + unsigned int typec; + const char **dbargv; + + if (db != NULL) { + typec = rbt_dbtypec; + dbargv = rbt_dbtype; + } else { + typec = empty_dbtypec; + dbargv = empty_dbtype; + } + + result = check_dbtype(zone, typec, dbargv, view->mctx); + if (result != ISC_R_SUCCESS) + zone = NULL; + if (zone != NULL && dns_zone_gettype(zone) != dns_zone_master) zone = NULL; if (zone != NULL && dns_zone_getfile(zone) != NULL) diff --git a/bin/nsupdate/Makefile.in b/bin/nsupdate/Makefile.in index 09e6c140..fbfac3fb 100644 --- a/bin/nsupdate/Makefile.in +++ b/bin/nsupdate/Makefile.in @@ -25,8 +25,10 @@ top_srcdir = @top_srcdir@ READLINE_LIB = @READLINE_LIB@ +DST_GSSAPI_INC = @DST_GSSAPI_INC@ + CINCLUDES = ${LWRES_INCLUDES} ${DNS_INCLUDES} ${BIND9_INCLUDES} \ - ${ISC_INCLUDES} ${ISCCFG_INCLUDES} @DST_GSSAPI_INC@ + ${ISC_INCLUDES} ${ISCCFG_INCLUDES} ${DST_GSSAPI_INC} CDEFINES = @USE_GSSAPI@ CWARNINGS = diff --git a/bin/tests/system/conf.sh.in b/bin/tests/system/conf.sh.in index 26a79716..cec9b950 100644 --- a/bin/tests/system/conf.sh.in +++ b/bin/tests/system/conf.sh.in @@ -61,6 +61,7 @@ SAMPLE=$TOP/lib/export/samples/sample SUBDIRS="acl additional allow_query addzone autosign builtin cacheclean case checkconf @CHECKDS@ checknames checkzone @COVERAGE@ database dlv dlvauto dlz dlzexternal dname dns64 dnssec ecdsa + emptyzones formerr forward glue gost ixfr inline limits logfileconfig lwresd masterfile masterformat metadata notify nsupdate pending pkcs11 redirect resolver rndc rpz rrl rrsetorder rsabigexponent diff --git a/bin/tests/system/emptyzones/clean.sh b/bin/tests/system/emptyzones/clean.sh new file mode 100644 index 00000000..66b3a17f --- /dev/null +++ b/bin/tests/system/emptyzones/clean.sh @@ -0,0 +1 @@ +rm -f ns1/named.conf diff --git a/bin/tests/system/emptyzones/ns1/empty.db b/bin/tests/system/emptyzones/ns1/empty.db new file mode 100644 index 00000000..d807099a --- /dev/null +++ b/bin/tests/system/emptyzones/ns1/empty.db @@ -0,0 +1,16 @@ +; Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC") +; +; Permission to use, copy, modify, and/or distribute this software for any +; purpose with or without fee is hereby granted, provided that the above +; copyright notice and this permission notice appear in all copies. +; +; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +; PERFORMANCE OF THIS SOFTWARE. + +@ 0 SOA . . 0 0 0 0 0 +@ 0 NS . diff --git a/bin/tests/system/emptyzones/ns1/named1.conf b/bin/tests/system/emptyzones/ns1/named1.conf new file mode 100644 index 00000000..565ec294 --- /dev/null +++ b/bin/tests/system/emptyzones/ns1/named1.conf @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2004, 2007, 2009, 2013 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2000, 2001 Internet Software Consortium. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* $Id: named.conf,v 1.15 2009/05/29 23:47:49 tbox Exp $ */ + +key rndc_key { + algorithm hmac-sha256; + secret "1234abcd8765"; +}; + +controls { + inet 10.53.0.1 port 9953 allow { any; } keys { rndc_key; }; +}; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + deny-answer-addresses { 192.0.2.0/24; 2001:db8:beef::/48; } + except-from { "example.org"; }; + deny-answer-aliases { "example.org"; } + except-from { "goodcname.example.net"; + "gooddname.example.net"; }; + allow-query {!10.53.0.8; any; }; +}; + +zone "." { + type hint; + file "root.hint"; +}; + +include "rfc1918.zones"; diff --git a/bin/tests/system/emptyzones/ns1/named2.conf b/bin/tests/system/emptyzones/ns1/named2.conf new file mode 100644 index 00000000..fbc5becd --- /dev/null +++ b/bin/tests/system/emptyzones/ns1/named2.conf @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2004, 2007, 2009, 2013 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2000, 2001 Internet Software Consortium. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* $Id: named.conf,v 1.15 2009/05/29 23:47:49 tbox Exp $ */ + +key rndc_key { + algorithm hmac-sha256; + secret "1234abcd8765"; +}; + +controls { + inet 10.53.0.1 port 9953 allow { any; } keys { rndc_key; }; +}; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + deny-answer-addresses { 192.0.2.0/24; 2001:db8:beef::/48; } + except-from { "example.org"; }; + deny-answer-aliases { "example.org"; } + except-from { "goodcname.example.net"; + "gooddname.example.net"; }; + allow-query {!10.53.0.8; any; }; +}; + +zone "." { + type hint; + file "root.hint"; +}; diff --git a/bin/tests/system/emptyzones/ns1/rfc1918.zones b/bin/tests/system/emptyzones/ns1/rfc1918.zones new file mode 100644 index 00000000..e2f4ac4c --- /dev/null +++ b/bin/tests/system/emptyzones/ns1/rfc1918.zones @@ -0,0 +1,19 @@ +zone "10.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "16.172.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "17.172.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "18.172.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "19.172.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "20.172.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "21.172.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "22.172.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "23.172.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "24.172.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "25.172.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "26.172.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "27.172.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "28.172.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "29.172.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "30.172.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "31.172.IN-ADDR.ARPA" { type master; file "empty.db"; }; +zone "168.192.IN-ADDR.ARPA" { type master; file "empty.db"; }; + diff --git a/bin/tests/system/emptyzones/ns1/root.hint b/bin/tests/system/emptyzones/ns1/root.hint new file mode 100644 index 00000000..2fd180e3 --- /dev/null +++ b/bin/tests/system/emptyzones/ns1/root.hint @@ -0,0 +1,20 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 2000, 2001 Internet Software Consortium. +; +; Permission to use, copy, modify, and/or distribute this software for any +; purpose with or without fee is hereby granted, provided that the above +; copyright notice and this permission notice appear in all copies. +; +; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +; PERFORMANCE OF THIS SOFTWARE. + +; $Id: root.hint,v 1.7 2007/06/19 23:47:05 tbox Exp $ + +$TTL 999999 +. IN NS a.root-servers.nil. +a.root-servers.nil. IN A 10.53.0.2 diff --git a/bin/tests/system/emptyzones/setup.sh b/bin/tests/system/emptyzones/setup.sh new file mode 100644 index 00000000..1faa70e3 --- /dev/null +++ b/bin/tests/system/emptyzones/setup.sh @@ -0,0 +1 @@ +cp -f ns1/named1.conf ns1/named.conf diff --git a/bin/tests/system/emptyzones/tests.sh b/bin/tests/system/emptyzones/tests.sh new file mode 100644 index 00000000..755d89d5 --- /dev/null +++ b/bin/tests/system/emptyzones/tests.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# +# Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC") +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 +n=0 + +n=`expr $n + 1` +echo "I:check that switching to automatic empty zones works ($n)" +ret=0 +$RNDC -c ../common/rndc.conf -s 10.53.0.1 -p 9953 reload > /dev/null || ret=1 +sleep 5 +cp ns1/named2.conf ns1/named.conf +$RNDC -c ../common/rndc.conf -s 10.53.0.1 -p 9953 reload > /dev/null || ret=1 +sleep 5 +$DIG +vc version.bind txt ch @10.53.0.1 -p 5300 > /dev/null || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +exit $status diff --git a/bin/tests/system/xfer/prereq.sh b/bin/tests/system/xfer/prereq.sh index c8a1f808..4949de9e 100644 --- a/bin/tests/system/xfer/prereq.sh +++ b/bin/tests/system/xfer/prereq.sh @@ -14,11 +14,17 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -# $Id: prereq.sh,v 1.2 2011/03/12 23:47:42 tbox Exp $ +# $Id$ if $PERL -e 'use Net::DNS;' 2>/dev/null then - : + if $PERL -e 'use Net::DNS; die if $Net::DNS::VERSION == 0.73;' 2>/dev/null + then + : + else + echo "I:Net::DNS version 0.73 has a bug that causes this test to fail: please update." >&2 + exit 1 + fi else echo "I:This test requires the Net::DNS library." >&2 exit 1 diff --git a/contrib/queryperf/queryperf.c b/contrib/queryperf/queryperf.c index 6b153271..0738cc29 100644 --- a/contrib/queryperf/queryperf.c +++ b/contrib/queryperf/queryperf.c @@ -2170,12 +2170,21 @@ main(int argc, char **argv) { printf("[Status] Processing input data\n"); while ((sending = keep_sending(&got_eof)) == TRUE || - queries_outstanding() > 0) { - print_interval_statistics(); + queries_outstanding() > 0) + { + if (num_queries_sent_interval > 0){ + /* + * After statistics are printed, send_query() + * needs to be called at least once so that + * time_of_first_query_interval is reset + */ + print_interval_statistics(); + } adjust_rate = FALSE; while ((sending = keep_sending(&got_eof)) == TRUE && - queries_outstanding() < max_queries_outstanding) { + queries_outstanding() < max_queries_outstanding) + { int len = next_input_line(input_line, input_length); if (len == 0) { got_eof = TRUE; diff --git a/doc/arm/Bv9ARM.pdf b/doc/arm/Bv9ARM.pdf index e8b38986..ef343561 100644 --- a/doc/arm/Bv9ARM.pdf +++ b/doc/arm/Bv9ARM.pdf @@ -13634,7 +13634,7 @@ endobj stream xte\6 tݡ0 00 R"t ȋ>??w^Z׺75 rpr tP(W琅CfL9g0]#5@ xDDD0rp'/g+_.+ .[ ;9a@=0j@`YIPC@` `w@:@p5\8d\@y {N!v l0f[G3{$ӆ!NǬtypGOk8`4+s=]!.NPcG2'gn.@gk(wuuO= ' .` '&cNcn[ lnN -{fXE0lɥ w}L `u?@# ܿ,vNjxcߏs:B^F4;Wc!d` (B<W} SL70};A`?6x.Yu%#rA˂GP9pro:# ?de^7=*7tux^psr?Fr~sOo4 +{fXE0lɥ w}L `u?@# ܿ,vNjxcߏs:B^F4;Wc!d` (B<W} SL70};A`?6x.S5U =rA˂GP9pro:# ?de^7=*7tux^psr?Fr~sOo4 0a֏Oo?x= a.Ab9Y /z{xœ*2#Dj,8Ey;on Aߋ(X>.3vmsW`gϨ" rn蚗ߡRw9_ҹ_8=e4%v>oFk(?`Lٽ`4&9[~;26cL|r)Sjl( b7Vh9,IRe߷R%= t(%LǏ)>1٥^2O %>pjÕr{2wBx(S|Duޡ{:ґ2G9C{ɕ<|?K@F),w? ah%ٱo^{6 @-%~jwXjz1i%u3^g`d+K[De]Y?>Hj,kѸh8 v_ [J֮9m=?\k>ଇ*ѳ,Y W7}C#ZR$`bGοa9gS%\/hC|?s ؅g)m}vk.b&O +uqf`a,I㯽/ݛ'P6ߢH?ٹ9mHr7:pMRY# 'WKC|-mW躖nᲶ03=j-,nebi;Hl<)L.Yڷ)wL=(L|)='-@.Y[a-Zypx9>穾*|,4 = a{ZwLVqCo,H;_7Gg[Gx dD*~JS/ *FjQjw ]_-q;,1t2ߥƐ{:֧o$c-Nߍ tz"t'>(hSM]ۅ0 SPKDdOj n|KHtޑ+㢟S'@6iC,g3BpΡφn;ɦc _7T,Q1TiHBWL8 ,. u2)=Oڴ, Aqr^T!12)N\)Rb6Cb5ޛ;mHL^Ȭݸ {>m@zN׻B]@)p[j6덶BSHQר.ثN`Gz^n)?892x%3ZJ]\^SXAr}[(0@elmiEW9QѲCۯA=g>MF{Q=*k+ki@ħW:x<"}<=ѥ䃏DKXx( {jdqXPvπiA;@y*oLOxOc -@YUʳ;BiM.\r;UR')眄 @i/_ Ar0FxYjCĞjbnU?uW#,MߥJBQlX-ebtx]s<:XQw-N;N?VlvG,%9'bη9|1.!]D=RԌݬIg=h_5r/  tv;0endstream +*s"}Y ;҉{Y]pݯXo}UZ: h)8fEDsqTM:ùɸX!l ΄,17bg&fܽY'jeAt ]wV^%RtΏl阦jϸ3m>YjCĞjbnU?uW#,MߥJBQlX-ebtx]s<:XQw-N;N?VlvG,%9'bη9|1.!]D=RԌݬIg=h_5r/  tv;0Aendstream endobj 2131 0 obj << /Type /Font @@ -13666,14 +13666,14 @@ endobj /FirstChar 67 /LastChar 85 /Widths 2825 0 R -/BaseFont /BILQGW+URWPalladioL-Bold-Slant_167 +/BaseFont /ZKJAMS+URWPalladioL-Bold-Slant_167 /FontDescriptor 2129 0 R >> endobj 2129 0 obj << /Ascent 708 /CapHeight 672 /Descent -266 -/FontName /BILQGW+URWPalladioL-Bold-Slant_167 +/FontName /ZKJAMS+URWPalladioL-Bold-Slant_167 /ItalicAngle -9 /StemV 123 /XHeight 471 @@ -13697,7 +13697,7 @@ x yaha pJH( @B0Y $DB@ #H CXnxX9rYzD"0̓;!o(ׁZi@! u %5Hf@ 0dw9qYa_!n b xZAA gyA [W H8 -rt%n-~tݐiH+ ɪ!+NWnmn"o"ΪHW'Ȉth`Vp_{Y߬? `+7Wכ ~o +rt%n-~tݐiH+ ɪ!+NWnmn"o"ΪHW'Ȉth`Vp_{Y߬? `+7Wכ ~o {!O`zn%l"5\\:߿(Rf~QU;(z5|̶Aܞ ˣg}O4N}-lZU/{LeP[wm_i=;>WSVz|Rg_"*ʔyzUJW8bL.ٔO uJߪݎ;Bbubï<_^˿`iKyyc@'\;$Q;S-s/, 9D#,9ƦKvS꿻%-]3ݓ][ClL5ؽr3ܰDSj)W8*ܟ螓3@'}~+ϝ6\p<zu>AbPبLbZa3YEV= {^2<}5aq_5>$C}XjiG/d-!j;6#܊.Oc$zI(/ Wj"K{LHhԻ:iFRF<g] 39}F8|0"G$ I΃ .􋵟ECqQmoi\7ymJ0:nƁ Xe`_j셔rOD6xͷolP*5$8d#iWtuG= koH]:3Ng}?& bayKܣ%tTca֍F˨?B: 3ZP Ɗ} fφTUJj:ϋN)/ E^g^/k&67%"-ήQ͓ Ƒr'#LwDEЙ}`?$-`C5Շ 93XʺUFC:ׇT<ez&Ċ @!- ڽcEҼο2hY#SjzaT x^9%5Fy ױl2$g$?{v,nDfGSH4S"N^t!+nX#guW }ceScZBF%# S=bFp%& @{§ F$ HvoVy糳j՟,_h^p/#ӄH焻[ʻB8Ҭ%P #&}7uo(u95?c8,:f.41h3):;c,Y:N5uQE r!&.Y ;$`yme~b@{3* g`iD՘|)1I\jΙ+&jw{-G3*Um֭, !Oly?MǾ팼sx!X>IٻX,EA;%]"N?v6n$W0OW4ƗNQI>qz#Q3] @@ -13715,7 +13715,7 @@ d B\h~8$7!g;ɥ\cf>}7Zس֖^-U&( ӻIFSOV_hn- X{$@rlZɞˊ1o(mI]_- 'zTn76Gت& IĆ7ԉfu3;)EO4,Źk&l#ٶ hiF] x'fb\{?=3XTW*\Eex@Dz:!XK G>c{BC0Uռݕ5xfUNhZ$8훎Б;߾2~%~Q*|6ο.H&l][%κƬ!rOx!.BzuW,r9TCH֑_e:5r3.4vW][)݈HS+fS4Hzy*/%͠8m'7\K)8@b\ʂ[g5֡'̥g<8Tq_U =#f*6*\oi`lj[W*2(tp{6]}>{?'C5zE&v dYcL8uGݚtVe&KჃoS*.m8WQ3Dj OpHYf>׼_Ƥ|E=PzXD%+C1_=AY:&Aa;U*XJ=1<,|# O'CM]fS4AMjҷkxG,92¬ ߸gp0o9)M&ChVF=VvŞTv(ʴ7jz䭠6]EڟeIGOI&+Z Sl -`cGLs:Jθ OX9B,\p' W'yendstream +`cGLs:Jθ OX9B,\p' Wyendstream endobj 2117 0 obj << /Type /Font @@ -13724,14 +13724,14 @@ endobj /FirstChar 66 /LastChar 78 /Widths 2826 0 R -/BaseFont /DTDQDT+URWPalladioL-BoldItal +/BaseFont /FLXFFM+URWPalladioL-BoldItal /FontDescriptor 2115 0 R >> endobj 2115 0 obj << /Ascent 728 /CapHeight 669 /Descent -256 -/FontName /DTDQDT+URWPalladioL-BoldItal +/FontName /FLXFFM+URWPalladioL-BoldItal /ItalicAngle -9.9 /StemV 114 /XHeight 469 @@ -13747,20 +13747,14 @@ endobj /Length1 771 /Length2 1151 /Length3 532 -/Length 1711 +/Length 1712 /Filter /FlateDecode >> stream -xRiTS2j=,y50 $1ܒK/7AāJ,bKFQQ**u@%Vp""IR95d \ d =jnFXgx& 1)6JaMjJ 6m*3HQcJ&"! U+)5 &֪kSN%/ j L%`H18) !ZMUÀYd|#"BJ:aoJKN%#JDa=sIpDL6C4U`. q\CDF< -:H,&@: NW/6`ጌI #ݛLX .l^ Aoc%Bz -:XA1>[>{j[m-=cs[O}}>N"~u1r̡t$+SOrL2^G rlpbKmilk^lIo|;lW#E3kox8/mcgK}T~z8wL1sͥ:2Snݲ7 - RFstrٟ[& g/]aVcZå ݌H -rKCc$Q V:)j}CjpC[|PhiX[-7KIuɎO?{@m}vr=>#{0M-N.![eh eL -b]n̥kVKuiwXg%~8P狭37=/5r+dj^< g( T;ztUgsx㋎ 44rkQi;#g{bs..E]we{ڽijkis4xts)BA5]ii-!Z;GqsG{x~D0AGoWKZ3j-먌f<&hPK΅X.S=̮&'%ݰ-zy4g]uˍX=V%DeK%˭fܞ9tj(b'2"~rN6HQOWH =)Yz]׼@ǖe┡i<|$Zձh{ gs@}v$ܢ0*԰~L>dŬ Mw<]ĥ:qNM U%FEasrJZcӏ.e*;/Ȍ>b%*H+ y{;AKǜ1>N{WH/wnuk -wK:'PeU]%OǩˈN.wZR 1< i][ 5}MN|QY@#k?QFD{9|_,|fֽ}MJ p켸5jkw_XbXÛg$+PA5n7' -(԰'0O*ʌendstream +xRiTS2j=,y5H b,0 1ܒK/7AāJ,bKFQQ**u@%Vp""<`,R*N`]]?_oslG! C `LafSh`V( X8X2 y˄<>T#$kL HJ:JrL DZ-X;q# `<@d&4IQ5o`H6i(5)HjjZ YSKZjnS+u;ӥ 2 qt*5~#NC^75+%ZD%B0`p3H1PB4@Ԧ8BSM`I$1AX߿v2DPBaLd#&Mc3lI$S”fbTA <qB@& (l (FWL6Pc8e_}؀&7'ftoӂ0C&c0<{/"8) `zSmxm9ʎ[m=ic\~PcSpW,H륞eY2嬭G7z>iJ[[~׺p O蘭]uïLy㜔V/!bJBU{)2~?ĬU{Jmݕr,0쮛_b v +gBkL`\8sϵ23y.ef']a~K]-wEU=OZEZ5 uk\R:EԆ=Ic/i.1I=^T6ǧE{LW?x*5_%Da=+Le5@zۍ#yZ{1޲yh/6b/UUW2wm|S}j[FCƶ8+zكzO4SkgtYdkc liPSƍ \ +R&{Y-2oOQKSizy83н⤏jBKOiL=}qS|ӁaPu#w: :LI0:d4vs*33(sL l૥7m\E98#1yvfR?AMkG jJz츘~W{mlT`mi!ХAPg}(m0^SJܼrHV[|vAMVQwlђtyңJx\X!waY{z>dd3ӾeEҡ-i5ƪݲ. u:vYxW[Q1ūKݾ6&rBLCWe@f,quOKk 37WTy}&ZiOh:Zo'2:_(q+~T=/nNȚ=$VtX7<Ɉ8WIcE*- LS(یendstream endobj 1459 0 obj << /Type /Font @@ -13769,14 +13763,14 @@ endobj /FirstChar 60 /LastChar 62 /Widths 2828 0 R -/BaseFont /EBCJZJ+CMMI10 +/BaseFont /FFXBTY+CMMI10 /FontDescriptor 1457 0 R >> endobj 1457 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /EBCJZJ+CMMI10 +/FontName /FFXBTY+CMMI10 /ItalicAngle -14.04 /StemV 72 /XHeight 431 @@ -13796,15 +13790,24 @@ endobj /Length1 1199 /Length2 2269 /Length3 544 -/Length 3058 +/Length 3057 /Filter /FlateDecode >> stream -xWiχ羯uP@Ўah,L D6=7u4 ڰ@"d= 8Y>hS!Z 92YXϢ2wx4$n(aatHvL.יfX4F 7/m p Fe"3ÖA dA|-Yj@q8aX*B!MA2@J*֖Aa.Kh,5! f$# /G憡<p.;2ب 0BЦQ Rj0p, r\L3 l0FJBXejA]wf:g9y~˺OzwZ1#|ч =``S掘AjR_ZD{'q}TQڍ#GwM˷,"5:郮ML~}o3bWkf&[oT:@HĔ˝*xkgŞwn뢎nQX~w$7?яN#-PЙ)MOy3 :KgjbWE_}a7uU v7 %L,Q'FΟD}(5m,У1YqPvc9N~_5.֙G~!Z]e(9IG+Wm3]׻HMabO\Ol$Xs6TDoNa؜Zp/9G rŹzHXfSiJC4boa_ 2- 69מZ@=`A,f"_P9CRLIioےtutǽr,/է +gSiv@ pBFoxՊ؄OS?]wt ~\/ܣ rV]η"s w6 Vusv WEY)S'9]qP[UtΨQzyc3T3%"űؾB!_&|uASs%\('Ԥld.RJZ.EfKNq0yO;IqDޮ1w +].t D:eՋGEMq%a(Ocm}E,jdN񌘏2^:fqmlD#H{4?y@Ýc`~!gloPzLI3i!AY."D$: aswy5ؒ>%[\ v_zk[!|O=o:].ZR}Oj-zN?b|n.- Euhg%ؽ.IK7a3Zv,L*Qc}o!91.lW/ HNjbAlXLKvu+WDVgiVo-.DF_GB+d$Pn uRtĠ\D֑ly&C -c234N~Azy]PMCy;,(t\G^{[Ċs^pO*g{trv+o|YzjNu;Ǵﮞ#n$œIUs[~}t -ƾ豜5}yjq9ޣwx1>&gaui;4گ1*Ƅ[#]D|C#»*ܶ&KeBKPBh^{Sf Ih{s>W1F-}Ǵcm%q{<?%Σ+`eeHPAe禩DP ˁ;Ap{+K8Y7/JАMyrD2_ߞc(2+dNUmfŽ<1 O'>nh#;VmHq^!o˄]ʱj2MMŢk5ʅׇU3z?Yf(alr /~@endstream +xWi@#QF=%i{4d- O @WRr.h, + '_6`gZ(2B頠5J#a`z8Y JAN`4HĽ f@@*\;3`A cPȾ,UUMMmhh}G Ȥi2l5HPU_, oIV,Vf B6$,MUXKтJꇡ0@XZ!5!FLA[ FY.J e2 %jv + U3F$< FQH G0 bB`> :$}Y J(BPhXHQ~@@sZ47Ch}@C@@> uew-Zxߵ~RHt[K +LhVVoOgQ 9F^(]4Ax_s~aŦR*& iP Q +5l_]oo_of424Zߌ%$b),.7t&eC!_0'_ +2С|@񗤖4H Q<ð + דbID  :a!CMKͤC4^ns^–ӁPƐm:Ylqz\Җ)!ȍ" 6IRovmބAKe{cv|]a\"],fǫA0iJ^qS6hG#N w8oUv{տ]laί Ϊv/7j{Mkٷ|X[{_z%WDsٯJƻ,Wh+*+j-yNU RYJV~V1@ |TZ&i۞dil\8u^쇜\lfBK0>1FO\ed-5 ;y͌`^OwbгR.wN9{qvQ}IW:63q[sȐKpnCS\$Rn:noL.g@I~m5s̝ VwKdQk1%D:':YeVKi0a-z|w[J+qwӼaO=MTڋ%q њj0Qҽ1_Ajb(GP{BgO-bdDov7`K)F/T<>D_ы)[Vff+5B"!7h'{ ݰmkx=D7չUo3:1<k{gYAF }-KeB +pJxs9C"ٿxAu:8A3Ԍv\~i6WG_%X`nӗ!_GJxo>#i<O8Y /\e::q[%»$OȽnd?wu\zh9lsoT/.o-&7-/MYr W͡*jrE/=908d xrJz) +6W26ubt>|tqdK W1_;fϵhEzut5Rsi/sR1f~RXJ`lurw}qwm8] #p]珖S$\;W'dWٶۥJ[s,IV[\{f8O"NeaWLT6Ϸ(w\Q6E.1}rby + 4sA3NkhM?!݁zbUtqLL]jܹ/^E|SΧa{1;E +M>p#S7 |1#CMA;}Wb^:oBoٸT$p@__1+C'ۉ0{qB"ߟ^i"H&8lQ +VAnwKJ-=iVŵecM !|z/R/d|*jvZZWub?v)(fvs*f5/A;(ѯbty|Al"jy9XI8MUn|Ӓ1^ DtPSaITAgNqKRv's驢G4Sڡ%_HBVc_y|6Nؗi2R1{:QoN{sCML$ 82;xw +RɿO˳hngeiSσk ZO;᧽'y\q UFdUvf)*u%~c +b4rMMhҙ:$N|gdjE|х*]N*B72&L)Y& GEܞI3.s:U~F\TzyI_(ߖٳ8ή y 7؛a ʧwI 3X<_@endstream endobj 1448 0 obj << /Type /Font @@ -13813,14 +13816,14 @@ endobj /FirstChar 97 /LastChar 110 /Widths 2829 0 R -/BaseFont /QYCQQR+NimbusSanL-ReguItal +/BaseFont /JQQLHD+NimbusSanL-ReguItal /FontDescriptor 1446 0 R >> endobj 1446 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 -/FontName /QYCQQR+NimbusSanL-ReguItal +/FontName /JQQLHD+NimbusSanL-ReguItal /ItalicAngle -12 /StemV 88 /XHeight 523 @@ -13836,53 +13839,58 @@ endobj /Length1 1624 /Length2 11252 /Length3 532 -/Length 12119 +/Length 12120 /Filter /FlateDecode >> stream -xxeP& ڸ;[p485 Npwwww AϜ{n_SUYYȔTDLl@`3+@Q,$jkmhdmx>!QQ9 [8hL c;; - fk`afЪh100K -ț@ !o׆ bZXbJZ -___@`1@vLm8m&%@of c_#`c p9@l`ck'x훆Fdq4v޼*K#N9oG7`kibkWJco4o(hv@@.|&v@7odvh6WFWu'?evo6eFbci ymfFbkX6M9._3Cl -0"(B\h?4{%tVڼ ? m_ m,] W#ҿ!6{k ;3?. % 9hV`տ fo{o;r-iu%yIj65W;є5_<.w&.6;7_x_gy x_'ۚ53 mClݿo[<= iqerZ -/k`T\@]QZ~wmWroSUs/f#ݡ4" -\UVn]_"ԔcpuXm.VQe'x_)sq(**gLV醤oӟz 4Lm`o.W9|ʍv. Լ~kLMWrki~K Kwϟ }^沗Bԫ<_g-w CRk޵Tu)unG%E=")%K_&%*9, ֶvkE8ha4-㊚*F+̈I\˘ess׷!2c7a"!Ѕtgc|LD\YXswexSb+:3iCIA(Om9_- 㮰sɻxJ9$cQRak5rk (qO^X# -%oR *یةTZ"r~FO,B=+hӔ2$JE ɘzGY~YwD"ג J+lk.-!bW.t{>l,wDT44p.rwD7)5VK݇x'K#ʮ֙":㠆X/_rI6jMGh QMԸKl6u ZF@KՃQ/(=XyYr?)p8mu*Eۍc [v NGuPX-P1)B` 4Aoz8-!8K)Sc.ߛH|4~m -D<.2)=Z%W\tõ߮9t֕ gu7ќǐD'0 -y+8pf$J ?&NT%< 0&u [?Jܮ' -BD?7O4CEsqa yٵ+S&3Dl:sn wOYe/RB#cјc׹\ .MJ)6 x_ Q (3,>)qC!#Ht8MeS߇L4,w#q@ĵYduiI>o2cTBRU!gKL2>cnVgͳ/=藧.WE^[,Pضd4\3Za{)vSK&:M#ͩt,ЦDu}f?q7Z0-o)*LGt5T -_G4 _N9@4@d^qŁ*ʍ(_-ǥʃbĻ@e 6]a{# e%p}M'Q]ց @YlY ՆvBF^+1m$"0?L +I)ղs} -i/Wk\'ΫF}Is]|WON$`\}>ܽ6lETǴ뭺8U'4ikOOLV_"REZ{ &L%+O)Wc:^:ǟVF6:O;e^b d?bg>!e\: `%LYuyϧ1IIER7_>'@C2v*7o*%ip<0w6<"Ma$QkyR.]d"H%kayg^I|D#SŚDPO5DK(gC ۂkި>;k xj/9[`lJ%= HKƷѮ#5 -peIj8YnU Ψk=<rc:3~e|@{ %k,ٗbmI H)8`Y*1W؜چ>!.DSwcYgdж:FݝAzN8U.Iil'I3j;r}z>1# L(|ET6;S: ݣSz-ۘ2߄:`_őq -bXܮ[krYګA(ړ4U>,3M|x T7tu`71'31}A/+]%]w>Dg9ͧxF3$甃*/_ks>sr.$r~@4rtÑfbNzEl7) Nl:Kbɋī_A%3*ȇH0oO혙}Nv;367 #BŮh H)@rsz]$Wy{?΃KSb+R$\eWgo)ړY㚴7q#IU:'.r@ hGRWy@2 ATbr"u -Ψ+b7k8B4E7$Ji *AQ@kRQ=D=who7U {>e'o߹,tկr!Ǘ҇ޝ4C~H}NY?H$_!YzVJDlnˋ1P~ƞ|);Rg1FS8;Yܾdp پ]"Ņj=p-iCM(YΌO+SnF6![{Nʺ+#/FP*-.2.v y#cKp CGu '{݌'vt_.t~><䵂涁s%ӆtE/Ԫg'6glQ;x)L[!םYt*^CPQhh̄ha} -9݈[lgas6w ظYAbܴڇF,ǧfvXԂIXc?A eɗ - ƛ#M r|gZ}u(ASJ؇1NRM9VyL×]O5@vx|gt ^މA6(T#EqITŢ2{H* -hH) # - ۬xw-g\<%~`/\?b+xJ2NLSsc>nmT2?d]>t;!J~)|hWΖISt:5Nom9lo|:oJhY=#.O(*/dĒci ͷlM[C_0T=ϼP/O+b-bCFgS7ru]~Lj:ĔII{B(E&Td@X#qK|-[n_0MH`ӆZ. J܅[ǧBsB>w=$*kƸ+mIpr Y;5t>5:OjQ { -?v;~Jr^"}0HZ2=&seD|qxL\XWL'[x!? qiGUiv9KPAIԍ#ʫk}gߵj\l\e5w.,b/ -Hؙ|,zlVz7dx7Cvߠ1YniI y%"=bԜ">'=yeUDIZ\pcLicL%]?;!& #VI⠔_gJY}!6VɇB:ÛƷlw= r1J:˱F &I2dFdן)" BWGO.1{4EC>>*{نŦH3r~W!IۙD5Ѐ}'+ mo!1j 0O%nuݥ4^-!ioIwJ՝T5 -lʩ4@Ta vX-ctDS4 14:6_!ì.ս"}n0feT e"|:?wV>c¬^ۭPDsSda"VIyl-иȱ:s0ʝu\M%$Xi!?S=L IHԎ.2;]U P_a.ʅdp7 -k-.9L&G6?^SMbc7 %g,~ģ>NiEGlkۉf'^Q/~17RhԘ-<~HL4va2'#==u*f12\UK b"o{wC>22yoTX'<P$kM=J-gBYErcϨr'Ψ -+=>sΡԋBgW~{井TgKWs]gƦ;&Y s\~ڎ&yDoC˒,JKAŵrQF4t5aFD5^}Te!MەK}֤_P{~197"^.dlMqzs\%}jv ,Db"); cgj=pK0˯3 }4&bNfjQMs!;WwԄFA fnjX-Ӥk }zgmons_a#}AЖWWWWׂo(u uK˩KiT28"Ʌ酹nHb#~}M*3з ?R0LAuHAe*d\Y~4OL6^" Ξä#Dl6 ]_7̮D -__O0ePTNT޵]wX%7-2ݛ|%8P ߔPL{=;H4O5) ఔߧQn"ZaT24ك,ֈR;w&;w~gC,Ѱ0tp:_,"ˏ Dϲ -&`lWw{oF=C{z'ք+!=Ro֘˛2w>ӱcŪdqLCy $=B+Z[GkZJ]faOLc?n׏Lږ.54!enhRauUt̑n;lY\گ_Q9?hէ*:}Al1b pfn;PEur2 ˟[7.!J*cqD_5yX~^FM%Ha:F)%[.6R& -.ד J8*)v9k!^hգcmୁ~(8vf=2c4>huK1,EB|ji-)ħ|1!Ml&ONԧH[:eVTACgɩLynCBKm.=k l@ܥ6I']㭲 ӕ' OtBHpn[=ڱ׺s~3LB>x00A6 -zĀC|j>*fϟd$ " s T}(Xn~}B- m|b`1XVϞB{ ;7\L`o -8jL_y|9gf#ϪO C+cIB Y~,{TN*ewB|m>B,1eQn]毶ƶ-W5i%$ b]u v!GmSH>tl@z ɜdGW$<_w >Gok@}0ޣay9إDz -*<57ޫ_P^wq?ˎaœ_uwFA*eh}SF60ņ tm*_\u:;,kH'w6Kŋ<_rCrO;_O1wG5$ƻ8mNtEZhO=а3F+Ti {֕oMH?ن!GonYCCOYFg)h;3C -xu4C+ݥ?hz2AzoUx.3O,]*]4OHʢն.ynr%#cumfYM,f6t29ЩTg1Q)Eq*(#Un?OCka\FXޝ$mvIvH,D84$"Wd9kFK#?cP`EAs4)RmE`ybcZ2g{#M>r3+0 S0Іcwdq< eRp_\:ۣ^2IiT FÝ<3/ZB+Ȇ^NQVJ˽mCk% inP^ӑtPLMk؇1̏mu"*8˘aD'}H|Dc9^b|t̽ZexN R(Ej?3By'.[>ܕ{ɉ&X)coX`/8 /N24tdOSmA oe.*ܯ'|mN+޴F` b[ʢӶA+!}4t0WYB v+ -5.]>, -\ybvۮ-.ڌ?2< -)<-ňFV^V% Q+`@=? &ܒ?XT~ _EGmx9[PzPdR\Oʁcwh@Ҭ-DkO=p4)OC XUd-A&ӅݞJ-Ɲ5uv䅋FRIũZ7/k7!Tꃵ=K;]d+gOW;}; -eѦ4kޱHH +fc <}^iRRz.AeJotW1aψ9K]m(ލ,唘?Qwb. HZ[NN*W +,VUCz@ϏFA#\K6L'H~^*[P0NBъ㼑$dtUVd5m<z {K T ɒ {g \)Q Y7Þi  Wlj'N՗[Z6i잿vNB,C-\yUwO $"[. l3SJ'[( :vLUɩ/LH3`'&A Wc{BFWyEZb!6H^w~z{w=ô~7p}QWߎAS՝i_Z{`{k͹x)z G5n N#R[)~+|c&'fh)B830nnencd2"W6E up~~% MQ{>VOhXKkswh/*2^ ЊȌMXg>%X^ =<$A-L5}Hy| T&4 -fMLh 9lgi> "G"~D&]4nB ɻs^.t6>MkZzH~w`VU:w G Dӯ@#{?&z ݥ-"kFQv[vYf&v%Gȷ#H~:_$U!'n2` -}zzArq{I*_9nOd|jz--eIm|krjnLRF*8oA%$RC:ߘy~ ꅍJ'B#^}W)吼n>ĘjBv91b -K7g"֪0=">*"( }3jc7{r15YIG`|=Gâj( e eD5ΧG{lD)5Ue2F>aW!Mdj((ɱ(ԉXcZ̮gAn$Jen^%HXtH-'إMkdrMv^vٻްTŰ@d e{9w24*!aD|5R4a!L>]CG\&V?~U19V?E@·U;'e/r3=&7Z֓΢:A+sݟ`w" Knl' ۥV &/:N(wXB6Y{#V;l]\OZ8󝗤>@%΅Nj,[2ZJeNn0[7ױWJgl@ {\n9'g*ak)vF&v2ei9.n3+gQnd -7LHmt.`_Dg3ިܮ,=P:>tsuL*$siyi6#93}3$<>Utf'HF #Kw$bBe([85=.Ј3,,;|yD$3uԷy|4Ml U{q(Pj3ί_۽>ؔI_ЈeɂO(yT}7CllX{fWa.zb5BzN ;ג6/ ۵Ϣ\zk5~ O@u/brɎOZsG 7ٵ(6 lY ^q͵Im ٵMtCu ¨J ;s:&5IutJɰߋ~qH7q{a\&xhacֲMZg[{eg6Qսכzآ M̔@e°h1_ږ`iH'o/;PG!~q3[ҡķ冉7px(ԉA- -Y9`4k;`ȃ#v5*r>chwNkC3.SÍ|0dAE\H,vYs_>˹fPw&B;lf6{č g\7-j԰i~>u6r-ihp 4u{ˏXnEYl<ޫ`[MMg]_KοywAJT놰ND;fP2 yXm#6j;`V_Ai@g>G͐SK̶U-ReM\)L-I:l^>kg<\F-U:DqEQUBw18ɌžyJZu5u}%9(Q5{ↀ{&H+R$Oi~|YWPKKx<ٓ5瞧 ]Dz=9$HN$y}L,{!6XM^mlR') ->눎ExWޤ0m܄uTyí"ƣ]C;kXO5:X!/{endstream +xxeP& ڸ;i!Hp. %>su{MMWugg黪"SVc13Iځ!Ll̬|EK[cg';<% DE%B,@2L6^^^$*@E/_*c"oN`ۃ Q_@`fi))k(Jh5R 0hPv~K oi;fv&v`S˿Rsb~qN 73 /`rtrz{X:`[ vK_M {#Ss88ZCo^%'˷ 3{43q+77; W_ASK'{ۛ72{G˿pv+F#hjrrzy:۸mm` q٘1#46#5,2`3;?\@{ hjq̐X o.w]fk@G?^sGwSK:(mKe E ?l6nտ+j_d@obK'IKW%`yr ) z}3be7LW?M=F9[T~=h)ؙ/QQ;W +f/ wmZwЂ?:2!6sNj j:k^P"{&TS!_ 'S!L)x1TUb9, <1[&jh[4*iPgk߶t16^BpLR,\f7th\ZxkM4XeS>!>zJk]s'_oG5!NaxhW+hഏFY@a\]X*<0&} Fj%n׋~_/@1 BܟFʁBkߡ0ԃІYWkhڕ^)|h &6KڹJ2_91xLs.& ^R]NŸkJq0w󸡐RK$e6ɦriK &vG{g;ۑ8 SZ,2Ѧ4 B1K*! +x *%LYI߱wrMk3SW"\ς-(l;2./rT[_{a]ӦTVhK"׈z~칛SszȷTVjj&#:=L* #q~PH  (@Eq/˖|RA1l]2ae +~܅2&θ.GrjCB+!#ɋcmUtϤ j>_4 ї+k\ +'.}Is]|WO$`]\<55HZ"?-D1gfdp:)#&VqIﵗ ynaM4%q5I5x9Ũ2thQЪWD1;w c_}#=o5HcL /=UͰ;DDA\zZEW)V>}[zev^2cZ|VDgw&/KGA?)߲}=ݷU}0T~M]KOK# P] \o1~фx%q2MsE163ʐ|2mr.e\Yv0&jV]wiNRR3}WWX?6(S\ G!o; +7[4$U ar&0ɞK쨿5"Kg)gW#A2#~B5D$>qb-A Z%IP!mANoT\g T\q"Pϋy&x֙-D-('rQ׬nѮ#v#{S]ts"@Ev, ۪*9NMsvsQA\vQVoQBWj+r|})h~LiJ#:g甕EgE nD9~v_+Fm+*#eY|bdI]8ѱ%.;OIF9 +Gb#g"s[' NM +Gc޼s%R\n6+6Ԅ(z16hd#¹O?$l< KݿB1b +x"bא7q1*f< 3$yƠ|X!b^KeJsN^+eaD87^2mNG^V;==?`sѳ;Oy`Zܪ ̂cU +-G5b% 7DCe&/Fs xT Eb#> 㜳{o͚ W94dA>> 1ǂLº/Y~Z(K\Ue0 q8nJ>׶諛mEm n"T>q6hr΃gR~*M ǵ0૦8.gk I @!}.O&CJVUNE"#FNWHP4DPdf#KTmIG<)Y6C BA/XK tmB|qkJYw!1_VQRҲK^%[F7MyC0$%5稳9OؼUjK1J6,ߪ5m-}ϻ~(z?l+3zh?Bü?x-MM-G1w#S'%i +ERy ſKb =/y8X=&ThlKa" v E\.4ySWORw}{HTLpyA W&ے%qBi."IdD>G6+a)ya`{"싮itR-1zu~y1qa=!sl$57U,AYҏlS7NC+nQ}jqzuP8W*zrW^+l#g +r!7rYݐU>ݐ}&d)'ͦQsJtM^ + #S]iq!1Lx0_Kvl,3.NY'uS~Ş)#d^UćEZ$ +o>B",(&/\'!*]4Y +ݜcPZg,-bdQ0$cӣ_lL_N] 2Bރ"T߆ӧq#I 5U5!|Y$ {nBMn9JGYɮl71 ԏ 2רZ94~sܻ +9)ϣ2M=CX* +;QKԄޣir&$_$!> +X +,wQ*w [֍'4ڔBw,s*b9I[#aJ_7'EjnsRhJJ"{s;5Jr!=R(Hf? -C8y=a8ъ(fQfNt]YUs?zM#]RWm՝68dK0(-{׷,9qNatr깈N|8gEdN:0pBTSJeI{ɪ;o0##u PqLvf!~W- +}:er""_:kϕNI*i׿ ε&Rj{=#DrRnG Hraza.8GH+G_e#bSʭ2"k?Ï7 WTFRb(7$2WV!3f$hͦ_x:s4>݆Jٕ\Y)\=,)*ܻːN&[& {zjҟjxU:bo~G5>)= 8vэQTk(,H3}xAɤcE +P'LR&Ώ&˟XeNWn6ÖC6 7@ *gGQUT^%1-4.LY"<cЭw8JN R1R7<p%aQ@e},Ο諦<+k@8U(D`ͩ` b$CV!NJFEi/Oʠg-Q=xH\Bd$ԮQ72:]dHR>#"݅9Eb{xĪ,JI@\m7(]12fz`o=vߙAW ,^m1`"&@D 1$XA4u»`D.I*Z/Gd*Cp,Gt(pArgLX + ( q~Hѝ}oqYlL+Lp{pRg5nfFa +cחCX~ke\WbLkR#Nc?YIv-OdجvΨ ++ 5!ҵB7h :(s5Ƕ:Dceձ ">~$KH16s/1~S>T-JH<@Xi"ha]HȌ-COi=Ebi`U~17,j2(~aJeuS:r)ڶ 4mom6yMoV# VKD-mre׀Ұ>V[M:x,!^5|g.F QVAw nːNymI`* ?~_EGmx9[PzPb\OʁcwhHڬ#D@3p4@C XUd-AӅ^z-&5Zu䅋Iũ7/kf7T=K_;]*gOW;: ѦkޱHH +fc >}Yi~)AeJoP1aψ=O]m(ލ,唘?pb) HZ_NI3*W +/,VUCyBϏFC#\K6L'H~^)[P0NBю㼑$dtSVd5m<z [H T ɑ {g }oRii: =ӤDPN,j l"=1'E,C-\yUw_(,"[. l3SJ'[( :v\Mɹ/LX3`'6AW;S{BfWyEzR!6H^wqz{w=ô~7p}QOߞAS̓Y_ZGP{kͥx)f G-n N3Rk~+|c&'f/hiB830necd62"W6%KupA~ MQG@>V/hCX+ hUR<ܵ> ъL̲ Xg]?%Y^ =<$J-L5}Hy| T'&44*fmLX-\gi> ݄ "G"~D&=4nB ɻs^.t6>-kZzHAwPVU:w G DU/@#? ݥ-"kQ&[Y榻%Gȷ#H뺑Rj&Chd_FMƝ#IY6;j(>,]vRJG`_#YQ +3lOH;j;Iů/L`E!B^/A^6 SG1ߚ|+E+9Ңg[9}?:{avZ}7uP +[PIb77a^pFzaMpĽ7UN9$o&sO93]N%~-ȡĢs9LW@ϙzEfny:zV$;gHQYz=U~iR +GQyrshV@s9Hfv<"d<>KYX6jpl勽8P5TRQW/^_|\lʤrM4/@9sn^&5 Pv%4[g֞Y8jab /^GͧuCzεͅKCv(Z)F)<@\| TEL[4=ّqS+.VM:r}wm12[6>=VӦx:DZ~aTAi\9[}SjZ:MdE8DdI ʛh.{ +<1R̭3 [{ 9ȉ^M=lli xKfJ2axrl+A#04$E@FΝ\kwXPlVrěK}`;U-MgZN]_JοtAKꆰNuD;g|(J0h,t43fH)f){p1ǦD}tגK&$C]qH/5I}^N3v..~"Cٸ${U:!اJRdNK@0q,߹ ګ~lv xao~?&6 #h{endstream endobj 1385 0 obj << /Type /Font @@ -13891,14 +13899,14 @@ endobj /FirstChar 35 /LastChar 122 /Widths 2830 0 R -/BaseFont /YIUPMF+NimbusMonL-BoldObli +/BaseFont /SGSPAZ+NimbusMonL-BoldObli /FontDescriptor 1383 0 R >> endobj 1383 0 obj << /Ascent 624 /CapHeight 552 /Descent -126 -/FontName /YIUPMF+NimbusMonL-BoldObli +/FontName /SGSPAZ+NimbusMonL-BoldObli /ItalicAngle -12 /StemV 103 /XHeight 439 @@ -13914,49 +13922,50 @@ endobj /Length1 1608 /Length2 7939 /Length3 532 -/Length 8789 +/Length 8790 /Filter /FlateDecode >> stream -xvgPTݶ-HPPə&ə&K(HQH s 9#$sn}zvծkιsVmVF-]^Yp@4`(]EXYP0pPOP@jXGw$ 1w۝( -G8Cз㍺P(m XP1HCP:@`8@(('ZP|X(rZnAݬ]<G(B~`( 쀾9X! ڭ9"[0- -Bр۬Z -JDۂѿs`n6r]-̭ 9hw.K(C9o?4Q01 6`$Enanw_u[`GG݈?QCpk>mN+mnA9X#@g\? =3$Zk з)3s"$'5o{ ko p{àjw M 1w 4 6R e`nP me o{Ǯ"0譖ͧg sb\Pߙ7?HIW@([zu䟋rr7'/PT+$ z{bb^& `4x~[Oke7E+Ui-?CAL!^&$(2>hI ^+zq]W9}r3r8{s< ֋5[(?yaҮacmtC BH.پ,DV d+1rvvb~?gl>i]Ngw&d uJ6/t|m jZ9&Zl*-V#=Ud}hq~3!P?Kvg"H~j=VmفꂇJnY@32ĝATokw|9|#5Q Uʤ(KEa?i;vc19>>7ۣ. YɲChCEfr:NN\r{Dԗ|Ernµ2 ܏mS{.9zV>O׉E}N΃輶2 c@ -6BNVz9S,nq2BY_+s`n'.@b%iZwJs {^CHW Z v,!ie1O[oFyۢAx@SeMIZ| -J<.%s J?ANy2}o[+Bz1ហ`tftwώx){qsn!L|ŖjٵXPN:i#V :~k{|t63p5Eu.F/5|m>?d]=R6L"jl zКYw* uFRψP -.& .:%%+rdx ~j}vɱWVf֍>AJi -E *\5ʵnݥvհ@<|USCZЁni0q~x3Xn͌z;{憏k89WK`3jrB(͊vII-.X ~Jx?e(ɧ$kUS_+3k:8e!-ZhɴN>"S[l {G^-dŔ;VGMjr|XP" :@7Q0{N8u :, p\m|11vsThypk@m?O"*NAܱt:%QMsjfZWW /YVMO.}wpY3aY\?J\eAF#J4H;O5kVMc BX. OpG%>}XDfKKJ|΢5xJ'IB7W8pɘ ?l,h*;DK\^JٵղA(U -5լg-=`8Z4~iN6@}!k)CO,PE}/:o4QhBlg˔O1 Qϗ= G2$"ĂB5Gmޜ!kʀF9+TdG"6ld&Ze{4BQۣx -,g!Op,镨/+UN\_H;2@rzPƜ5,Ov^=Ўr`ҝdU'/,&z _'z8^!OU:Ve|BVv0+0Ӷ,V J,^S+kNs8 f[wOR.FFMl-?f$i*Zg-@$G3V;eWwk0B9lZ3 x?j߷E=_a^u(vЕA0U#-aSL --g蟖IkZK -,񭺓 U@Xr};w`D.3\lb񃥂UM̜JWkh jqDKz瑳B|G\Ca+*ʁ~G٧}ΪJ WH>a4 N$YY_W+vqS: 0Za[%s{d?z7~s3M{i17ւ\"Ge3m7 -Kygm/Ś\qbO;z -4'+k=~(6hL<6yj^"xNLݐ%3jz˾e2fĺE>_(uy{!4l"QtIEu nGˈ }c>]':w%زXd܆X[ -?yw G$<2tϢ} @yIGbcKꝷH| xx2_M+=~d/tvLFd*ľb&} /2 ?"B,|B1楛kf}gIy8 .ͲmhF`Nƺʨj=wuu?Tӈ~.%2_()5e-hxlS+\dޢd=bfFO!3"6'jCX]*BwKihn"dg쎓`p'UJfaf[]͏z&$ZifGLzb\d격|X\sɕ+ fܟ|>%H`=6"P9#\ #3z-R|%$Gc^M]{'_D1*,θGgLMa2B ƻ*+M[Tϕlm2!7VԈn摒pj7>"$X:{^u^9̒DW9%%^ ,W0߲ݙZ/{>/"Dkm0_>WTxƹ -z-%OL5V,z>&wrY6ǗJwG *A5 -SSi*z~{OrzMl|P"iWO'gbbQb 3.kBdilw_cŒ, x? Xǟ8 u7W~\EDZ~+;蚖!a{3Ϥ>ݚp{["tRj.94~sGA =bB@Tm87.YkTc,Sy߯N-~R>H9i m8њS$ "OsjpQ0+΋7r ӄr.Ibc7:n'vE[ -&tGϾ2(v'. -0t -sobrvE /WRu/wx h6ʳ(.h(wbsF)qIRP1+ШU">{ɦ3F*+nz4LW`zItR@8QZ|Fgt3(k@:ac1K" &AٽqK3(&>M\\`jB! Fj͠T♁3BbKGsiQ -ݑo~~Hj=߂4fA|N瓞@D2J fv_Q`TU`@Yi"=Mgմ1:Uпfh l`NsklbhL:g6(皊KQ}]j+7,IL$< y1Ӭ^Ubs=-_"/X)"7h=@ - s!q?OGW̳)HnoFA{Ǒ8jUu;W+A;X;{w}x" ƚ=×Nnc}& y[~ h©"̋Em`; -Lj - -̠Q=w¾?6~dxW/aۋC\Uf~ -HN2HB8G+zq(6|}h`wXn֭\d0֟9yEQl84Gh(1#Tl8\^/J\H՞r2Σ}RջY|C|i xCݪZ-0JL՗D9dkΞu !!}U?9ܫeiҍF̦wNRi~qzeh )M# M.?%a5L]tًCMSꣲl^ځf'7bqG2Kj? v:ۤ~ ^~}>[6ԑUi!~{?Gywuj>S8CD?{L"X?P̭|/*_6ffwFڳH2tgm&T-wVu䓘zMQ_q3/Hl̵-@j -=R>jv)y[G5)wArqsV -Ц^o{^PŧrȈ=2ldD4kw3\Wd@$B}vmwK&#?e6*I*iQɿAFd@+yjR魬V{)yK *%36qOVz -PdՎKc" ק߸|: aAff~G+Mk{g1ۻtO)0ʜڲʐ.Zlvpkg[FMI0깳vhPK x!vyڳe?ufK+>X'[&&Sm"~ʏ\m$ G-Jo%dyJ-ۼ`~D]FBAxx`}fZ%r6_f h2jTRw@2B]Bc m򛋦BkSUھ9Qϣg*R^DjYzEl/F{4Qo r+a]:0A S>G<5\c>3ך<;gb}=uMo(!!M'̋b8.X$*1]_>-ӽUo}Ut)(ruާP:(LQϲIz_ϪlZ ة1).TZ -&2PuI[^|ul0xp(%m/ sqo]>51[oLp8e.*-0U'~+TNZR:W(`)""ѣF ~߅R,vK󑯈Tֻ\U)-tK3kI \Z4km3mWL![ -QfNúCzgg_D6qIF2v֦PgUu䂱~#Uz$J{/FQ73!qW|* P.AOĽtzک͛EEmZ\N ί~ D`'(n%[j&9>|Ĵz$xEH8&x*-ɋ ˜ht,c'8PIC)W\Uׅ_[ްNj=.8J /ž\ IL맊$kif~]U 6O=UDcz/? `+ɕHMs*Mĕe0@Sz%j%hDDk^'Ц$S0sj>*4Li\w,>u8[`lU3R膋$zLugt$0o@ rGEVm##jBw:0*%vBW?3ZVegM+>K}9i6 s"ЊYklęJm%:J+ M{N5( FYdR:XdSblҘ~P2LEKd,E5GT&X2G鲒LΚ\$ 62̭ ~^n{{]j(͎(XHᛝ6 }`蝅i?tUIyo\u:ƾ`~3|4}2ϟ -_ iv==%!d2KVB'P0#2/)endstream +xvgPTݶ-HPPIhrMirNlZ,Q@ 9G%#A2H9d C{ιUj9s9ZYtyd K"Ѐ[:tj<8pk&`aCBhA>B!y@@%`!ݑ0[4]_ǐ_!Kxnw`6(hu@B7B-` CrZ %>@ E-gK8 +:kkB8@`KCbɠ`ju:vqH{ +u 6Hh`w&pkF!DFn(4 + sDnj+m F΍ݺHwI|0^4n߹, sDpFlŀڀ8ݝ oՃv#D ­y 9зm`|`Cs"4pܒCpwjM@ߦTω?"Dy;3. ~1W,w74߁68JRA!Z0- Zi#(,7-wӟqA g~+|ʲ2*J\MDiݪsw%_u# \ƐEjD~er%e>w$J$k|XA\9[GowWg1N: Wz$> 6!kS:~ge.0clKP>1yՒ d Sլn9|e>'CfЛqY8$fSRo@* ʹAguG*|eB;}v]6y}sx/GjT$JH QB~RlE1w.*br|}$nևGs]> ?V1x+w\9eІإv7N/.&)0Pk R +^8&sݱ|cկ E=.}(pc8hXeMpefI| +8xώo LUjq*'yJA@"]1\j-L3wذ`,>aZo-~ nQQNq5% zh)#*l\/(YfYwJtoQTH{=ә5 +R!1r<;$g2įCǥsϹE#29[eb BÇ;q4y,'X.^m}l3S@+'YW[ZTayR#Wew3a\&E"g>1do։gs<!4% i%-#`h-GwX8n^]>WipUIdxӄLvN8|x|BSP߮g ԢJm9}/@cH/Jh_ܧ^nK?71$ՎbRm:^5c ZDQ%qީ39;*XgEvb#i.RLj;U9elbZq5SvPCYd42ʥXHC{TT{bjݴ?k)eXrWTblGN1^NdVZ,ZagD- +7=s`[zޕMMEuGh+KI9Z3h#`+]J淚4 G5ɦ /~ 2I%R*ȹ壟CS[m&,^l03F!2gȺYz^X@͛#dQ ?'ty,bx_•DC}F0j|{\s}8$QinA$o<Re#"UerމK =`GS"Hbʘ#6W?+ -I{QeY:Bb>:_/!@Ȭu3+Lnqq`Um'aeG-3rk o=m[b "E;A{<1g `F;ExS>EGt 62j"hkI5IU:Mn"AW( +qE*+nƗ;OeY:*g'\7"klq'9TgeixqVV^nOil&h1n o-R!~x葷yo4{\4X ϴ/坵N%{;4u)!="3М`0f6 -#vl|g՚:qyN3-yŖU${L6Rə?"Z\Q>Ȕ {7l]K*;]RE4[Nh|j"l\#$,4c2"S%OZ5-=_~/Lre7/4w_3-_g$L&{[.46ʈ~1rtBPҗD7Si1N@se{>w +mtW?eRXݟ qNb%2t)( -֧9Aɚ2;Njf:9NʜT)=l'v!V7?њ\k=򆺦^-2~Us.o˪aMfs%W2b+ +(̰?6|K86<6zlD)VsFGfZJ P!HlO}>ݧgF;YuQT tDfP{sc޷+J .>xiȦ{3Ś~d@aķk887KpRXCѰTEQ^w~@GK3rNKjYiFFQGQKV1W-]uӣD'4s^%͇aT{L7^8c6S(¸Zɀ`2$=ݛ4n%5&ȇrPjjV J%8#/+tt:Wc0jMZaC7۾!-6گ66j~Sis?S`%6hSSrNQ_sucUiG1ԇ < ,7%b>/7d^쐱/:zoW7~f:7TWx1RT}<}wD>߭+=f7'Z׫@='EM)TSw-l:mG;r/*f-xz +}~Lct> N$c=nƩng IE^֊dh&|݃tmp6QYM㩩S;h./v6Dz~:K&$sfrXՇ6Y|CȜHR=<3S=U%6?QVxiAL+[~KIo&2j4+,~7RQV$L|<ɜzo0T2chʛ +!dF /pI^ݩ([|Fv/fH/>_!ocG% s5n5ZݟJ\U [22QxsثPU XxnO +Iǐ v 4 CihTޏ f%2l}^#-hC|7iжr QHd.ld1(_wiN3O^Us5@p.0}W +Oy|g܇;h#1|6gU rk_wj!:/*¼_Ԧ S+(#>pKs%hjN +\Ou.h8˵[%-n&o{,OJk $4sz!b7ڇvem5HcWuTO7 ;BȆ"dUt[0!<ڗ(U>9;ր7ޭ:ղy 7T}ICQ\W3ýZ&hlK\o`~~t!('tq Yb4r3DZa[_> (E7 bO;8<084;ժ>*Vu?+hH~qx/}$+V8|!ّ`ǩMQ'e^JY7:?ksqWfa4>Z'y];_GdR ȕbnf\Q17^vo4-מywE$-;k3j"kEļSǻ7Έ1ɜ#,9Ӭ1OmunPZ}7L$*1eP mC gVGG=9"fٰRx;^,zOir>׳wc?!wFNy/^(S̗y`LŔQwѳ.砲7Lm-c\ E>`X|Z-3!lq׃큌frMaKxRn{D?&FT%ɘZ8U6 +3<Ȉ h=`C-Z*3J`+>p;w c\坵df؆:VQ +Lڱ{i CD87.4=N~AYQ +;dY.3m +'OܧZMkEAøVF+\7Hًs +A7?151"yUFIfw*Q;1WGWG9 +dϡ6h| R/?jVttf=]mXCh-E`?|(躃w]R跸[O^'^m[4]ađ95QĔbcőn"]GF&< 3dR% .ӵWQmw)GDaelNA|ZҽLE}b\L&pgr[ߞzd - Zpn|˨) 2xqS=wÆ jI6a6.OSy]Soaԫ̱⣊51r%ob2pȈE&IpVNiXԲ A$e$D{D';,gk\ Gi3qQL99]/9(C쯆IV-u $#?(%<~^nspPpmJ7'y,YEjlw‹h> ;KoŲ"hum:n=NJXN7Ǟߍi1zUL-f+OGŎF*v|FO]vGٟ>?$$.pHS 41,V;"mLWOtou_݄fhJ#ʯ\C¹)O!iSD3J6IYW;9#%Uԅ@KDFjc=sˋN|ݑm*RPh< ;w5y]# +X"b3]ub7夨-sK>< !!=j b](it9 +K.Ha+-Ε[xCiif|-is\|6m=1`K^!y9IjXXHO~L쫜F7v")@W[zb4*L0z$/{>UiOE5t=; +4?tsTe!4J%hQ:yӴ(kYM>X sqir8!SS$ŭ$RѕamP$?g˟Vd[1iO<_%yZ.eX*I{()_W x}kVԳI͵'EGiV;Ͽ6+$ɝ {T"1М5v-V$lޯbݦ)oS6hLG,v%uI~]%)}2 oJ]^RӠHm;d핈`)ڔdv +8>fN-ӥ]rp4 w0N+.f4f /7rCOp%\.̕{ނmݒmp7睎Q}⥜McFnHHD^{D ^HҜ.xØY^$NRK'^钲td?I}ߩfxa(K M*Sih %b**W(#]V> endobj 1367 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 -/FontName /IFSUVN+NimbusSanL-Bold +/FontName /HBAJHG+NimbusSanL-Bold /ItalicAngle 0 /StemV 141 /XHeight 532 @@ -13996,7 +14005,7 @@ x U 1K9Pve`e(\4,@k7+cLC rJH8\A+iP2sp8 pٹ 8 TAo*lR 7 UT@ܜ-.3+@ qk0011 {$. k0u8UB:mG%v6llVfWŊ tecx-T l)qC$A@צ -%K7G6-0 ('?0k+t=-lH6[8BVf.@?b:|wwK+hz RV+:<?\%lpe3 MF]JKR3J\* `|:)<\W'j:%)ΫtvyMcw}e+N㿎ԿuCOWa"G͜#d_n{Бs5YiE TZc\r +%K7G6-0 ('?0k+t=-lH6[8BVf.@?b:|wwK+hz RV+:<?\%lpe3 MLYZLM3J\* `|:)<\W'j:%)ΫtvyMcw}e+N㿎ԿuCOWa"G͜#d_n{Бs5YiE TZc\r q$X8x8iڀ,@׳-R lSilO՞?޿V@O"B0Զ6Z؃eW97r=7V^ebw$Ul+ ``㉥b<;Xð`d#NY넔P/駯 RKx ^PKL`iCpHT+TUdG:%m#RPgQO+:Lxe]k/͉J:'8lJ۬Gy乌טQK6 +Lv16(kXߚ+pQĴ^)R[W,,ޑɻp%n)iuGYǚπZՈv4:uGZ:<=@yݗl:GBOAs:rUuiw,wʽVwZ6]We ͹縤hِ8YWtԸc}5?5&JtOHZpr_\Oű4߲~Ib퇝y"4Z;dzRс t[^c=ϕ =X}^:;} %[,Л>ܱ^4AX%#w۱W:eNSSH f֐ϦKuP }.F!"k/gФ 2հ" kJ @@ -14026,7 +14035,7 @@ g~nM"up^ 9PjK!z!HaO,?VzgTW-XNP94X}chAc~^I8Y-Ji .xjEwIo}H rknTeS> endobj 1364 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 -/FontName /GREUDF+NimbusSanL-Regu +/FontName /ANFAQR+NimbusSanL-Regu /ItalicAngle 0 /StemV 85 /XHeight 523 @@ -14062,59 +14071,58 @@ endobj /Filter /FlateDecode >> stream -xueT-NN ݡƝ[ $Cp{pw|ߙ353VzU]o5 ' ,ѕ]` rTbQvS1$)+(mj)жH[89H4)hm -Tf`bb/׿#.@kG=jc [TTu?~ `h 6bP[:X2@`?s\X߹$\'Ks{_3tqy]`SG;pnn]\\]@'W{VUijcWn; Y{Zjou5:\-=]ef 8ٛz~'s.h -`KkS;;_>{S''{A{G @WK{+V$﹭Hl ӿc/ax/hBbr}O '+?_5O/}WjY7{%x2 =co -k,0Sږ(w5} GwaX88Ya=--T6+S;ۮha :Zk a4sK@Z\Ϧ&._mؿ=U'UoiAqGR apr~Eƿi8yV6u=d/42 &瓫/ ~?=Hs sیL܁Qi.Pz*Pg@FĆwPֆqf?N/; -]xti$~T |LAlFG1>g3J0zZjF%p\`;@*@['4x6?Gwt}C;/`wriaPis4D2mCu'bY>}Θ)SsԸo]ڮPbtmۚE qUݷECbsÞI|wLYA/Mek &%źܵu;0`[,9 XQmo/bf~@/@Hmuϟ>=(ޚW0Br}i3DHS~@kkTsIJmcL@*|8ˤO -fy_e׼[˲X6, -!`Ssw]BEĞ=A#]}7 oξ{Ib+j@)0\si{ʸM9Z^4(ޥs>wWgqg/7KyyZL~alâTJ$Ta bew KˠD؜p6>;b'kO/AҰػƕ{8PK8OJͨS s&8faOߕğaEԄ -~{c]JQw eE^@XQ^ZKt$)?s]?HmPah)؍gB|"Wub:O -2)Pf*.֌>[-~➒hܙ6TQ:V]x/duս 狪KSW'!d='\N.ug/I:?~%nwr'MS}ޮ0a6Mhh5&^!9u;6,z%?>bTφcLqGSi,5{G!_MxޫLULH,FɣȽ[i. l/QM5~+cq(m+n ]"99;z9W96Te(.jq,M8ߗauJR=zM/mɳb>g a(Gx˵ŵD]~ ISd1aI:<;Y?dW Hh2Ua(eE3)' ]3%#/'%@ ;ۗ`TҹNHc *"ʦ^8D$J|N넻)-9jMZSH$T?%՞Y.Fz0;g}¬m (L4i4g8'q繲5 9~;?M B?/ޡÄe]czR~@܍: 0/cGy ~Dؓ鹿z>@Wd9?yJއTƍ -,PRid^+^2m}PGGFcqaXD`*튆T),ڶPƒ9]ŏ!?*:m_h96K= @ O=P`&6Xഺh΁CϿ/RٻʦA`}PLMD5 q g.sD>Ȳ!XsNW<,tYDȹGXXS8Mz R Iز&"Qb?_=I37c@yڈX,.apBS411W C4?󜶛L ȣECT ZƻdZ|&\6#*]ė&dQXn0gFֹr&(؞K(3cFU325N/FEӴ;+(?Rӱ&m$?p ۉ'բ5p S2%QGw_ӊRAs]CPlyh/%w`~׆# H"/}o9AN ʉk9nRfD_ >E^ 5cxORn.?eҤqm8¡Sع!># д&>PqQ^"bUwS?"ޥ"8ml-ױ3T;ߢL G ua I(ǃ -֞CJGM"&4<#`DYWfV Ml=xU 9Zk1C9VOqIh?yª8N?PKG;G3K F6fǡ=WHmٺU$Ȱ^!u/Jr̖Чa`մeY K'hJmB2,m9%ˁB.u^t WWUﲕTcy */X*tBtBYv Jl#.fkfcC%6)ꑴXəWX@.5՚ߡx3|.0\b"x⭜0 >?>6&aMBD:HA -iKU=\k\dhYo;gh+RM^ aHi61P'&i j:UK;ueR)`kGnw\c> 2]/{EΊR wm}RNJ$Ҳ8D< 6gC4Y܅$m]2]XT ƅ p|3o49y*(~E]:|YU"+JRU7..D9 ˫r\T~RsK@SbclUBրgUgymif8Җ&w"^rҟtQU$~Z;_2$d:x, nhmmQW$ʫ8jP޾xlAĥ3y+HωP?QD v&5I:2j/&\4eXPɮa -VSfgw-4 -EܞQaYnk\=:,)BL b3(&2kvwr/F -aNjg!rէ(YB5 l+^IQJԛx#XXIhɩaBA*qk3/i5#nšpOiOґsA-\.v! rݨɧW(+hRzM }q3QH-T:ic\8I.g=u@a}4Ѱ.y -g*=\ -+,B4f{5#Re_S1هi>|6=p9DuT}bT-kgA76pިl<7y>GQ؅ƣ&sK4D9sumU&t,b\HH%2Jƹ=O2~ H,+'ϑT^΄l~_E)wл2;1̪,G͉#jfӺ*9pm}wtS(`Z_r}dm fW e=]iӀxxkNr3Ud:~E UP@d(,a -_&(x(;YKm gl[z*Vi\l%{#w%W^#ӄsȾP7բ>#E9i1Wiޥlj斒mؘuֶ^msMrylƲ0 :&~ s'AeꞲ-d v59KPk'N.tWWBE-=Ј|cb}+~w7@{>rԹf%6>Ygv=~' V67xVT~'/ckQ/uA:R'0 "C=Jݸ-V8Љ7ة;RLZJuٜ68}\Ǽ{Zx ^q%]в:̈wԨWM6hx7+k [z.=:>*/}76cl˛$ۯiE0k - - )mݐ';p4OugEbgW1[fZthmd}-#ɕ޾vB~+~Ň-l:ؘØ0A_o4UNbGt%qp;I27v ñ]Ͽ92U(~D0!7OKx^a,8e&M[xp0t~լohDқ O~%@|Do(Aی C~(^'O= -7YEæOO?q #rϭA[]Pݦ;?JIq', {XVJg)r:u -hVw^7ߐ8p+`r`G. f9IkPOMw] Xw 2Ωfv^=$M:%LļKOx,Q&:.`٧#ރEzdf9K09UDJ?FzÖ?LIF/u&}S;^S@M~䋧I elpD"Ā}ri&~nª*8G|cf @t:olu0w:\E-;OAw-)$"F ?I8%-f?)[5@M1CL8 E\J*,/y?ɺd%+4c'uwXK9!Nsfxv^ꏹ xu="T6j`?h9#͟ZNFm:@c=\7s$4[BKKi~mz5c mufq0FH@ WnSĺUN zkRPd_٫LhO}3 ",QTҒJ#-G1Y}>5Zy..+}{؟S|;)RJl~Hߊ8w8K -V˹BFIܵ<\]M=톮 -wOW:GӱI!vk%[d{fԦ1#VyYtk"aZ<k:q -e,4x9 aLîz͏qqpy(B+T.> q\V89 -<d ]0\OH#(Sa;ԙDfrN>2d된Mz?51IUCBbמp'Ӈ *]),"B'1XY7[zꬡ :%y-t#䐾pl  -Lcd^g)Q=8$3D[59Y'$]h.,3m١o6IL[ ;j{ojd;3!towhڰ\ #9Ecl넾E8sѭqyn&NrBIlEfNfPFl&}"w{,]nWvGܐ0>qDay9}&:`%dƯdY?5˥@+U4}H\OTJT)skז ə mZςb|z9ر0SVJJVٛP>xtֈ7`ۙ:;>fQ8/ Z"_:i[8&b@,/W2'uc]ę&g̝NŖC"P -\\(kE(3!S)HWʰz3!5J|_ _1&Dw&_э;QЃO^VύiNpނIp]]{׍OrRHAddv6ˠZV.2p%a'ʮp.=9̦5M")YlvO,[8VM?ǁEd #OxG+`u]qWZl쁯ugAUCc5'^_BJ D~,Y#ػqd#NzCXAmjח2Uja6cao:| zdOLǂLvY+#6XOeo W"WqyxM {ӹG]>&9 -RQytO@/6XI 4pr W" #%`T Y{]^} k2# -X<9^{ex2¾q W]gjY -*g)Hp2^e/ƼS}FGQi4Sz\7{B1ÃViPS@iQL0zwmNSL#YOmHkSf}S'CȣmުDlĵU_;#ֈ#ڍJ!Q N.alN[,?.d"Q]ϷxJJl݃K;.1uqRIJpz=mJܝ|."!#(rQ~& , nDG;Rw~|GqƲuۄ(Q٣s)k=K}A`4YܾfvfS /^bE-hh@# "P iԷ1_ ~[fj6 XYTh3X)gxhCwmtʷ*5B*n&7׏gSzE"EZ -1;X.ϘmUb~6IE'bTJJ -;+DN7SJYnj)=m"H]64i7p:Y> T%VŖfЌ5W?Ul1<*:uh&8}g5<{GL j.#N>|)HmT! *G5g_pnjîbhgmd@!i쿌tl"'%>{|1}iS[ښ 3I6L֒RW叐".qs$#Z$8D8wD#70kyU-|Y _Bs -^h{hzg( n^]0pᨿ:|0k{}H0Q\&^!`4pCg0"cl7V*MBr[v u<#31x'2960o'~ js9SKpaғA*avd`rLNi';}䷜0[ϧ*1tdn.(=InBXb#2rB̾EhYEGSvk/wIt:tKy1@ƑE2m~lǷ 86~߮.'Hu 8?M;.aZ,BI+0g6Y-|0H7_;H+ 5yvؕ]g&Nw@F<)~VSvrYx.FB( \VFKbOXpRN.MMv M#F(H9Ei: -0Έ# Q8ۧϫTM I!wC|7#,38.sM 8?D$ȳ+%MH(B(֯)dC;yD>R8El,Gw6kea$!iE d`Wg̑GjMnh* ɧ!G6#p uUTk~*-Yx 6m PΧ]#2 Gp*PIrkh+kV@>j$t?~n 9U:A0%$r]c陶3)ro$Yu:ҫS m iClwi̪6lU!}5r% Ǒ<%R k EX#5SHo{|zzpo% *B}lKCQuFr(oH\ၸvEgmiX(0>-(HVm`>B~K[5Qrq9#EWQA!j8ߧJ콤'J]tsqSdxmN'7e&x*: %1f'fy\Q9Bf -MON \]ܘ>L:slCyhs1^n)j!pq!V̀Drʇ ,U1 Ԑp|VZՋu;P$./g\ϞYmX ->`FTdw潚ZpX -spy~kdsS6"V3CZ ]X'EB /~>gq"էt~U̶5IwSD£a8#wy@ylF|U1_AVo{ {ވjGc!:6'$`1o.#Z5#tXme?ly3?ZD$ SlOf]VDS9,^Z&Cߠv=\_ ;,O?])Z%H%WjOdcyA9c!U3koMwǩÅc~5*xw;(&eKuc﬎Pvv[VO?U&2[}u@)N -DD#fjK+aHC; o^SMYp0Cc~?`W)j endstream +xueT-N%hpwƝ[ $Cp{pw|ߙ353VzU]o5 :R.t0ssQ9*YZ) $r2uh[Z,~~~$$ qki3011 ߑH#`NTXIe]O?i>Z:ZM*nﭘ斎. +`h5w.q)fin p;]\ޟ@5\A_ۭ@{8cd* Ws0UEJuژ@V sZ{yG]M.WKO׿rY,.N^ɜps:ZflaoNOh^Qފ={nk#_"hpn% kfދ09{,,>\S{* +WK?}Zc޷ k؛g7+h_?7\M/E]NV.2@OK  k:ZX큎}Aiſ.ų)*3WoOIpr[m%⑐y|X>pX8x>"4<+}vVvvy2iGs_jh>la 6w5o9\06#+ӵ?w`TJz ԩ^ +:a\kˎ<`=]gi>Cw*m+/nQ)jvٌ:vQU5g8V.0C {A yz]8#v37o,]?Ё^/h5?}d{P5m!Hfd$|璔6X%WUTqIfy_׼Z˲Y6- +"`Ssw]녧Q?2`'co@ujNIl|5Q>\uf28gB`1pL-DJI{p`c~_jr1[ @i[LvMmȑ)˹ʱ(DqQSxHfInBEl珬WmϤkviKv|9#7А X}(%[NH K9 )d%䅘|mGBEAx,+1dKZ7`t̸XvLtO%?2l_YPmK:="50 *zu0F+eK:伪7=jLE#4SNZЯg9tMRtO_10qӌEpU4>0" 7% +aBdT:xv uI1s7pco$gr=%YbO82VNdcP]]0U~V(az. +R7'<+BK=ky*\z̶A&1:z.Flj/bF+_xR埲`kB w>L~}Ң,avxvj.<@>T{`A%:NG?zRJg*NEA@35 |YP0/Ҝ9yˆ 9]R gVaM4-PvH6&-c˚D\lÇ~ 'e%I/FFE`q ¤b:hvq$dDw.j`2`.AKimυa3P8}?AlmBZ +5ULsf$i+g y7@܈ +_jI$<4HĠG +cNf#L]/3[kF1I“ZP|Ujn:/$\+A^l%L ?14n%8D$+l/ c A\*tS84}|Lvřūc_+Ga=cً=wI&=~Erkș`dr)m1'(C۱Kgh}7^(h1@qU~B,^$o7=11cpx\5Zs +l_y4~>~((4759 Ǧ+69RBzV}m9i vXdgs +ɼ`I݃#<\a"4ȋP*f~s~sucso6lJ\veϙBQEeWVLq2[%?^)B8Û@4}rs -?& k G5ya,ʍBtF.9Xid o//pL8H=d*ip>] nHB9TR<"n1yOX'Ϻo 4jhvfZaLZBͱxⅵeME{5 +dC;@"h/]ؒ^/y٘@_!cThgV bzlsԽH*uȝ&<[B.VӖf/'Au( KX`;;92'T# sc J +=P @{M ݁|_],{;WIVRJCƧ` eفo(ʏлSƛI ڤGc $g_m^v8/;ȂTk> +ʹxGr)Mܖ~Svfཿ>R/l6 m |pĥoRwGbo UHc\ +d_z$GR8~9 C[zl~0b98 +ub2͠挡#x1]ŪSSX)%vNvG<3р*'j:=Y;>(Mq')7M2,y*.1@`S`-NpCk dhJ'Q^|TE`c".eDty7s\BzN"n3qOґT~6v6᪨I-hd/łԜxLv hU2;k$[(,4D> Cr[ziQ Y2E|7lBQDJKǮhɾ]Vˇ9%^Vd 0LqPz'E+sSo⍨caMRV$Y%F )ǭRiT] k6RqAORs*A-\.v! ݨɧW(+hRzL }q3QH-;ic\8I.g=u@a}4Ѱ.y +g+=\/B4fy5#Re_S1هi>|2=p9Du}bT-kgA;6p֨l<7y>C߅ƣ&sK4D>sumU:t,b\HH%#E9i1Wiޥlj斒mؘuֶ^msMrzlƲ0 :&~ s'AeꞲ-d v59KPk'N.tWWBE-=eb}+~s7@{>rԹf%:>Ygv=v' V67xVT~'/ck/uA:R?­ksgiPh%n\O{AQDQE)&{H gdooElN|>{Zx ^q%]в:̈wԨWM6hx7+k [z.=5|T_olؖ75I _>alb@0=Rں!&MvRh0Ί8J9x|`eznh;dZUCl:ROއo'R#]2S2:5(0pz+UD/fc:Nh̘UEoYr lYx!}'5Rvj +B>&>@57욑N ? 6SX so21!-gܧzƂ`~F`)AXu"$2qP5y`vG::B*&|/]qߔAY-(;lV O߅bgƈ6🪔[CÇϤPQF;i (ozB4 V9dYY%Fq<l9k>{?ֆ!{7 ux=6O_9Iaܵs +aFr\eUsA+)3tv!Ct>dK6na3y2d}&OWl-%v4 w?&3Pt4 +`{VK r_),R*!)ys'e걹LSYx":j6hNŷK]endua6LN(|:v&Z%$ga"v?[+NttmKNّ7\]||LF#Ij0)eQNӯYQD[,zTLWW$s}c"89kuj#Z'z3*t4 ,腁 +,B3YnR4 :LW6F,H,P(W'G &QX*Zښ0r1ޮudsi*{ӟUD>|xe Pa 蔐_<጑$ϺRUf \)n0 ]fcж0PX>e"&;%=-?eOAb]a1'A +ު$aݏ_R>Y$Bs!/ei }IfTiTx_#ܙA+vfDӆj] <)rc_f{^'-n(+ģxu3q; WH" f(2s2c=݀2f3Ac־'#g +Dv;d憄)_CT)v椟uZ\*eKľ~&a,W `L q>QFF(W̭][Z$&g~*2k]#? U"v`L[)!QeocY>Y#@Eogj`Dֿ/w&2j=̊Ko4fV|(hf~QZ5>9G"T2i*hP&\Y3qQvgdCwOg˵>e8V?k2ED`F_Cbm +yo{ +%g2ųdK s0 EA:/vmX̓:WcKA Tdfd]+BS'l=]01lo\[*%DMb͟Hy5īx>Q a A٫DX_qz0TSW乫[Q~x8i%@]8+ɑt: ?T0"; A?Qeٮ[{6~itcГg.JfА0'ݲn!/',**@l7Kx|BƱޢb3́uYps혧n%ҰvXזqOZ'b P~ &2eJ$yc #;c̉'}19E99 E'AWb–1Cq/G_࿈5T-FyfnCAqc?6rC-__UKH ;¢P8vPz`|dW5g6C*~KJT|}_N_h>&"W?ӪpIӖ4Ę(;Q% +vCY& CS"J^X,-{M]SSNϼi38, +xf/c-3g/lU5um }MX,gh&7. +:;?/}g(ɬ5܎ȖG;t B| 9eb?G` F8Jn܉\{zDgss"xwf/]f iq Eʷq|+BAȸȓ&J#iƱAi\ꕖ-9{)uYP~P.X+ XO: q]@A)X Ԏ;Kasic-7Q*.ax:7(˧?D3gPXʟ>)h(֦S/)]q +$$-?Q㓪"+Pt>#˩|AbMfvDk"Cb< b6bOFY0+ YZ-UF,c1 n|]+^Ylߘr((7*_f*Yc;fO(jx*j +(-xaC" F/vPɰ6ci$- im߬odyMs[k}sDqY <$"6L iS7=L9_q\{ca=;n;N*A N'Bϥ]!`%Q.obל!"BٍbG|Ώ(XnR|P1j?{u.{_>Ggo>?=M'7HˤXQK& 3HHab7¨y6 O˳L&!ҋmK8XwLoa|(.ٍN\ZB(]3б$q,wJopİp˃T>f˅6V\d켖0^BܾRTڔc+x(u|֍Sؽ}h Aѱ09FL+-:<Բv(uC4r9F)Ú~}.%aA]#}ۯIS"]f[h\^X_oKiK$g9~:9n9v.BakAQCZSo z^u6)och-n:#u]kެ_%͍X*H*!3V֡Hb@"[!;$2P_y<HO2v8 .W5!?cZOϏkwQWHu\A2Û Is]--r4ȩ:J}ߒIV\e e m`'P:mR`@L6Ft<]ĮqG +6H ~6KV{V议ۏwcSC  -~pa6$UN /h_ SQ$yd$=u%- +#4UW]m̐)IJH_Tgx2=Jo8DGz"$uˮ'XgmO1='۔܅V7)GMG{n~LSW"&?/}-1ثX'+'Ql[˿"P+;k(av*쬔Z{J w_p:L)e\%#IwIfڰKG dFXp6PX[B3\'K F.vGOK|ˉxh +3ʽ|گlC7N@NcOP&X5(: ),[dƪUQ4%=`'. OiWDR-Ocd\$/F1|0(o?[^RyTb˛ΌӴ&"Eϟ sfs5G 499~5Ή.PCa]iu)ot dēg?e(w+b$/!xl%aq$e )%{ۄd k4bn{IS3.H8¹P}ZIŔ:nz7>{3:J: D2w)=ATMr^ҴpozjrLvX8乓M@h-co_dYBaxN*I{g~oMVFޜV$Kck3H0@1Y}m9GLFd7j$B_ڪꖰ́(i.B=?2 +QQ$w>Ub%>QGEMq9?ߔpop.E~ QqE) { +َ7=;%puqc0=C̱E62 0{m?զɅT8[2YJ$+.82WE5PCZզ"~ Zk>T/BeQFBFA_s={fma~+RWfC{5Hni:vC9nͺNDS9ZLAE?zAvX +9*].Z%H%WjOdcyA9c!U3koMwǩÅc~5*xw;(&eKeSÇY 3(k>~*Lej..SR+q2- |G6G8(̗WNkY0 +w8!w0an? '-M SB endstream endobj 1333 0 obj << /Type /Font @@ -14123,14 +14131,14 @@ endobj /FirstChar 34 /LastChar 122 /Widths 2833 0 R -/BaseFont /QCLRFJ+NimbusMonL-ReguObli +/BaseFont /LXSHKS+NimbusMonL-ReguObli /FontDescriptor 1331 0 R >> endobj 1331 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 -/FontName /QCLRFJ+NimbusMonL-ReguObli +/FontName /LXSHKS+NimbusMonL-ReguObli /ItalicAngle -12 /StemV 43 /XHeight 426 @@ -14150,74 +14158,76 @@ endobj /Filter /FlateDecode >> stream -xڬcx]%vضٱm_m۶I:culgf9o~ͼ?8wUUjޛDIA(` P3qswcu55rQP9]ō]M@h -`eQ,,]*4tte'`?=wXY(m!7WK STҖVPK*$@gc[)@h;8l:؛YS _,1hjwtrqrX8ۻ큫"7/+oV%qt4v'_7o?% -t' `fhk7_0Ggps/g-/__um_Q ֜oNS׿-i{s fntW$mf@s8&׿)w*3 -o<'{81Xc;+[Cj"j "`fdEhdjj 07ۣ̀ζVZfYZtf<ͤC鿢C-u0X,n.CZdf?Z7{SD`/?nS7gz-5@'׊)_ufNk=vȔ`? HcEZiq`C_@f.OG]c W ~,[tU@1e`& -ĬsX%Nf{S*P3]l04dŁOH ( h%g)'OTC#}t |1NB:>QGSX}#X,|[#~Ww'#$n6)xC]A=$w?>1$Sd PN< 3WGݣ -@]~?VJM_G)|j:Sb ~,(ֺxdԤ3Wsb.ǓXf-TnhR/2z}wK{ ?|(I{ħj{b4R{2ݷ5ꮋo WԕCd\qwӯ)K -s,燨qZoS-|74\uh2t -CCmkj"?L_LM>JM&BnvERE Z*VXpq$~W\zTX4T#x0E ĂN՜jE7Z~Vr!^Q#S{;B9NG -Y 'B -MWVMSsQ;#tWdFY[G5ӻt_;!K3m]:c -FF&/0R=5;|yo1-kG#wV6 Q [Hd/w#B G8M=Vcn)ː4jc ?3fG/Am eDz!*YRQYuͻ O:}ui߾h;/²kv⿓QԼܳE g2vP&{|VŽ@YaJXe>(*ay!^Rq5iSݯW]VӱmZWf. %hBN@B(KkoZb3 ʐOcwF9j,d* d :goZi`Gg|eȯ ˠeX:?~#3<;35&EAmJ6;A; '#oD],}w0߁˼n89K$>NΌyJE/oG4#oi7u~á0\@x:t^cZ=`o"BY7Lf2HQZdmha.wf F0 l8c -Muɾ"BC߬qq/سn%&gid2'`x;?+pmBk.g+%Mq6mnmsݏLGtz;o)Ӛ%GzVG97x4h}u5 Sl.d޶=Trl  kJRm]/GV5vx}'c-txz|kZNjM -(o#^4-|ȗQ -Fl?XJf^."+^yvK x/|0mٹ_f[5ή?UظCՍ*a.5I^Yko(mOq!<]Fd@SuҸ7$PZHJr|*L]KȮw'7/q^zْ -VXh[i&1u:`F;.@.3_z2/r15U.@hf9miA^|qjr,%q$>[ X6mZ;~I5g+<)ɢ޹|rV@Й^3 G#` F3"(&@p,}"UԶbᜓ|Km\hp -J?0,fPa&/N"o,Sٞک ~2FNr#moCfTPI~#)o\s=Q /=4{ P`YuJNJ/W&6{ƅYh4 a}88& *f -%j yc땘,3c3c$a{sσ6@c2ٽ "d$N%ЗK"#w>Rd<4Ooު'>{C=?>WF{ydl0U})lp)αI{9A r -*'5 ƺizf%ck}ſѷP˃ Ry& sFR5ӤNoU-:M_S;oYp"[c*x'Ȓ!j~K4\|\r.f -+H! ';GW& 0>u(DGSMTIvaЧf}q'#Bw -Ċh{=ݶU^US걼gEoDs?XW ^ BXY(6CqZn-1x˜[Vdm1i0PNvHs at=ǩmt -g6 1/6]vZ -_1RmEƄPsKP=.#`@>Q¯_ƶdN3'M.FrQ?I$_ 1O; "?w:Fœ|/{;E*V$P'Eu!$H+B: 25h֦21O٧hmFj[sF\.c>cۗ+v"ThLQH+V - jgz=dql1Yk^P1\U1$:$a^טNyLl9\UE=̫}c(rEj/&;R߻S#4eQ\G'.*8@g` WQ>拗q6K{0BMc׭жfQر!kᣇ-9\: R MC QRdԏ$9WzC&=LzWuؖ`IL ! NCZsJ^" Y @A(>S9|]|u +‹~LPW -% /" )T^%.R/2{߿)͌ uQǤ/W~DG +,Y9#yX9Md4u_y#jrmiŦ劐*!=C˯C>*78<$`V!Įx8"cBYHu( z -`r⺰4r_fc&Boդ7Y;XsbWL9 :=\ލj2͡Tn1VtӾLC=tTz$YZ<*4賀v/zw>ٟ35U@*8˕N#^. Fj$eoq`^r8OoLeh `LEW*w]|9on3T:ah|WrWQnhAtlogByU#ҒѪ=Ҫ/k.!џLyq # ,m6"0A]Pʷeo<mKTm:AК6xLw2P"tz$Q=%xݔH8sbB#Tق22~+)Td6m#Ϥ`,[5(**WwؼewZvH`^f9$2{vˏLJ -uB۪K|^$:YdZ[nIZ&ýMp5@qٷdsmSY#OiŞ'u0vFP(1}G&&rŽXtcBZsԌh Mvi1!cI#ZOv5^0)T8 L/Ӫ"c\U廰8Z8c۳AbI eĒ帽׳F6\^ਧLq졆l;r?FF/6pI͉24톌9vCp::u/iZ(G՛ZȱSў[(7:Qcwe1͟vdT bw$? V -(O?1D r8!Dh M~ϟ~qE 7)ẹC'C_{/[ߪ>OmB+C8Hݥ 4y[=-FBKPϨa1ƒͩv"fMJK7T"ِz%6eTWX(!_ x5Cm#b,=# uj+6J-0kQΨu8oX~>U,+Зk;P'myszu,a:b)=C-g5JVWDWAKB%K̐66T^h˿{O"g/_ħFFL|q-LxVwi%p`~r:RgG(X3kp1M mY4#/2'hX-ߑ JCX|"wD.䅊 + #:,.%L.^.Gn wZk~5t!+.UI;[U0N#q;jΚ>PX%v^vQ%G=qM7eܭoKˡ^qT{:A>:< Кsa{by G2k|Hm}@; ɢ2 㬕9N3}3:aDwW*.Diow~K֔L?12W}gj蒰ocRKk Y3EY`[a@o=[]5- -  -NvYb#ƍuiÃD„J J)Q'E+lx.U!o4Pe>g/h VO~^Hj!_!7:L[xsJu-{mR >1]dKFq7}@,-ǢCGA YJ (ͥX2{ڬ=A$bPI4xVcUںH!* -.@o.Al -ZCx>P%<`TT<è~ROIH?}7lym%-|~‘@l -DAL[EfZTV=ޞWOtG 6df_JR*i_Yx}|!.9l~4)S4X1X.!O 8m^ޣql1. B&xd !t>! |x 4oʰ,o-LaA7Ͱ7)3̆Vf$0T9 -ڟ\@!#^dcq-$ RGтOL!kVR6rM'_dj'@z,Nua|ah~"^$6^|R4 0Vb" #AL6G0 36D 9\D:R(?}=$7zO ?!<تy< Q?ab{FHr~|ҙ X -Mp.\B$Aԇ}ջX B?)@ 4pҝS -5Z&cea_GT0inCj[LRGnrʞދuRD -zoM`w%ՁRbO飅>ZtuF&ONAJȼWJ6jE~AxH:0֦̽A{5?]-|{ɷ"|QDXG+qvStӽ@kBFT)e&ҁ0^ۀ)0;%$XxJ~l_UUγ('ޚN?PC4ŕ<}I'zYZ\X8[`m]y*Z°K3B4I̧ ;M!-D׷&/JN^v -PRZ ڗF*/\<>c430Bu!uA8NycP/䄆fIvi} 1df9~% "kRXJs.noac;cZ:ckJcSTWK&!:)1O) -ҧS&á` 2oܓ۲z6ڱ]9̲M#S@s]`t:qtwnj|s%5^u?N J7"d56NYwRR{W_@LزEZX{PJ z6 -ҨtWjq,OA*MtQ)V1́ѽyL$~ݯv\TJ̹`ş -,kc493~`"Qp 6yL3|hk$XM=38WH#9L>tħ ٧=Gߙn[kc>ci0$d47I=&ߒ(La˭<;! O$caf%vefck?2HD"V #M韤بŨAJJmu`UKjޣ/?H_]x3sV -v%;[( v~݆&=/{MJ#CSO :IWX{5%{p2D{j)˩8tTFU56פ 6]6s2kX?"WT&UU&iKwzK^ :ra_҇mJHd&q̪z7Q' |wX>uC/oYtpqSlq9"MqﳀxEK xO&S:!bP|iSGhl0l/?g꧐4F O -5]Bd?!a) UwW׽@Lo|pތ˰O؞f\9]˚JȪZPP&_vǢb;-aJ 7 ZZ' Stj[3?2li|ܩWg9D̎ٶ&B&a!ky`4[(TP[_K"bq>L/ozͰ~Fp@8uJ;EFn$>t}? -:pk=v~P!g/C`9h_MӠ0tgH)O\PYV*i^P\wMg( -^A%CLrjYn\4ZT2'c6 -?iy-Ź(Tvl4T>\Jf>jϘa1< maf'N8kR;|(b.@nz# g[nٸLzZa+|)\Kΰb0ժc,5Q5Fg:$n Z3M^ҍ˫gQk5CytԨ`X$$85i7dWꙩ/ABI燷\bEPE ~x;p65|~`\3'qsZw.4v/'xj%Y3 #6y|^AjÛ4ՈvFS/VW3#wX!dY4xjt8 Yx -VtJڙ\z?K*6!H٥L|_MMI$֛Z uKœ -'Dؓx};Ӗ4D'P{ejq~ʀVVOwK,-Jq͍ -so -#cr!W= *g+#es_,2P+puMYP/Ș;>[ZD"oq -EHU 1umLzhp;AOw2}ޖ!F)fm M{y/ꁍL,W{:pRi3\T 0F*xf &/Eͤ%-FOrb/?2-QQJy~K&8pȀ>6IM[3Z0yenľ*t:Ģǹ/D03ٺ \_4č!~"_T3S(@hR@ j_A9(GL*4'63hA -R79`y85bX%2Z}<.3 9ogJ ᷇GُIg [)d T1v>$h(O=:ia(c1}SB=9LY%9Zc%ו<7opn=+t@wFQ-Z吧;VI򜛯mY)[HZe4;]I1 -¶e֏W[v M6W(Js:L9fzoq7X;#=)GMjӧ>7W7WB[ÿzw&"L>bq\Ѫ~yQk ͫ.W?>@#r-Ea]eJř|3RɽJDh’w[*rk4\`f^ ?d:EfMCӄosC>K4O62|3y=1^5x!'On,oybq{mOkxE+7!xF0H{M^^IsC/`uQwOzDFg43{ ɝ`lAoĚCc #s6>jv*AjNeMx@ţ4h7Pg3L0 C1r Řܹs"$7FƜ 1#},W+Lj&F/j(XrCy~/ 3GNLvɛ-J*kV1GLZtR>cQntkDx~n1_3g5DdږnXUo/9Ac0fM<~b{z.OЦN/ w%5>V}7]$~^8 W"s߼ؿ]gQ,x!zϑ.uTE=~Ӿ@]CKR&"5sst넺7y~?塜KdQF!T=nyV#_[~kxE[ʲem9.\NG! T\PV=x)tBQf:z:>Z:=ȫ:+IL4mfcA$UaŞ 6loEՅ2RDrv'sZ7oY3APc7\t!65/^\vB;"6*BxMel1 -&Dc z>FDId#q/x3;| -izղm7ZU4(6žPMpýה(YkW!`ʝmbĥqgF2X3o_dd:T˹E-{.1*J"ۃ{a -dpV _1{?:W~"LQjֱ:KY5bx6b lx ~,YʽI|Ȩ!V3zG#n4Ǧou~RM>sq0wֻŖ#QZB=!:'&}\a~r,𙕟\ -7+V(a=>\M!rm%!~z]3GSUhY$Ƹ!^sAR4~~f#U1$718olK= =j1QzWeXeޙ8Nn=6M#:(.&8=(ZvQH \oJeYBF*0)E 4 /=֌T4Ҏ%:z-n)?Fokӛ,w"({#ۺ]U518s2Yh=ǷoZV0NqT)LnЅyk2#_dH"Tv ~E3.GͿi'ScOg;rl߹"mn)PMT"cqKY"&SԛA² 6Dr_,U2o#J@PّoSM€2vƷ\Ψc)/HN\[_DWgi1O1zH~bEtKU&!m -^&JԲ?\9hY!Eʷ<#Q9Q n's,y_ϳ5N%v<<{OS*%lU\"etߩstvܘt(v kql9^k%}+orRJQ3l^{v; rg3ƆӢ\[#Z̉f|(5Ldh.5T䦆zp׬rMΩqr.ܴ4j%h<2:" /;|endstream +xڬcx]%fm۶m۝c;ضmw;ͯy箪jU{+ \xƮrv"6Fv8rrQ' 4M,,fnnn8r JMY,=NgKs;7-/F bY +ZR* y5ddPt54Z휁3{'Ϳ{;SJsf% 08;M,nzqNs'#;=pXڙظC_FSwvq6qtpͪ(&o.F.v؛47qY9\.2L-l< d/Ζvŀ47r2:;OwNVv+qtqژ11i7?"egf`f܀Nj?3C'h(o7%Ne>$oE7qSw7;`o{,;kdki@ @\AL L6Z:[zM-]L,fF6{/)W@>U Kko?_eTh6W_]T=uٛ?""oz6V= '/Z8Yzt_+ngboϔٙemWF-ۛXedgaO 1:7gDrW~Ԇ24M|{.;|JaP |IP(:9i3/4boew 9ԏ&>;Y`nH݊0ȞL1P@/(O(Fz iay )ժ#i'm.{86"#x}OUG앆]/:(v~bH$߸J{d`!- JEĂ:y-߃EcIQ?sP7VBq#CNc@gqY: #6?G͜'ٺ ֠_`*Psz + u[T9P渑WЯxqDdw^sM]Sx .9I1X0-HG [UؗDg V08\ Zafma5j(!8 +^{[F.@m{ *Ya^>#^]M!O>6:௽߿i:.Cwt~RxܳA^3w=M9qx+䚧(%2UقqH.M[޻Vx"kګ՗n:C -c7) Pd<2OK4D]&A +K0ɡR6u ]ޠIof^ؑ?rhNMzK38?51"AAiL2=F=&-uuY#R)` H1KwJ,b#D*S=2qvDQnB0$fUMp௚tD619xY\,5q't s-,Ufٚ$}:PX~ !I p4>(TI}\1D=Jð[ϼaв=|ҽRB)h!sMT/<0Y? +!U Ϛ(6N{=GZbIP߼h#SlLq6q 3H;ɢUTt=kxRMTI4#|*_ ̤QkJ܉??D< fKh߭wl12O}zzq&~zr,R pq<%@ \ co?/ljšs7X G:Ze\9`k$4D3Hb2HQ\`mhf*sb'J&?(d0mM̯L.KgZjQc y\344ƉO8Sʛm4"6y +vJ߿p鯛l:d_gB ~tnI%9@C%Ԙ8pvf0>Lׁ.2s[o]l"p5Me5~-!Ϻ.^#u|[3ҏ +F^4s5%Bw/k~w;\'a͇ .N~T1t?9lxff AX-^a|S;(JNm;~@a-{+e2m3yK<`4}XpU؛1HDGST6wzB2,&#g-u6O^ mztdvfY5xu""9p̳E/聟&>0o ۈ[0t%RE[#{R"+Q QJzAgXW-cJy(KD9B<䤒.kEE]@wO.4~ZFEibK7 @=YZ[TmWZ2JQ2Qer+~"i)L3j/:ЧDx:sIm?W\0|GZ5tp4.\P,5 +.R#.c+glkѴE-PO& fsY5p¯"A?qf+ +2ߘkCT􇲣:8 +{1Odyh؀TJ^: c6׵B ǛIU"E. -vbTpXE'x,b_)i,{1>(E:?`lT`d%8A[bσifgrK)'Y<ҌW`3+L{LNt<H[w}wa`LԏHY<5|G_*#Oqw8c(Vu1q٭.< ]-mWCjcGn{L%U/_6)m͚%4yIg` +P~=Az3vtG4pE9#.PUܻzC}⠝LP(P9կE]{dql2ޫ=)ѐ7F+sFYI!hr%>)?[P5agŎP43?#~VkVS␥ $TyD]d+RFk>}SLj#B1jpB0oZuprxu$Å_ /j.7%GaG}uVb6Y=A@X+O^ v8^l[y>& KRP "Vxag<_n^DR`HŷuXdmgH'V§ltkS *%5Ӛ&Ԩ$`Е !5.^pm v?'rX#kr"YrVl8w)u|:Az~·1V4?u<2I_^KT +La. Bn]q~y)'D#s&>1`/kY'cƍE 1K{<}*i#R}b1$sX?U+2|Ų[*}5Ԯz`oA'|PyYߛ/\nB'ՊDt$Bv#6ojd[ӷIi k#z@ԉblSgI,?ΦF.)ok?up2[M/v\Tu֨O߼C|^Xe.'1?SX[ԛлZCkvҷS' dN2?_ v$кKإpnQO{o]d &x_w^u( Ǖi,A> xO? +7Gj}> >i@6kڭLN<YghiK[JAsl1ΣaWsWT˶)BT[( HKru*':=d1lQ+PQmQDZ$!9 lY]dqL+|q7(2dGR"5t )]J)t[ c2.#`d+(sEKr% ?g'ױjtiҗ +imY5CLW )'BO Li3* s3OzU۔`J#x! +LCZLZ$m=OPt|:j?Wfm?n8!C"59,4 %oJLNyoSj 남xMqCoK=xmPE  vWILEub[*9xwwᑔ}MV2C"ħʉ]B>ekBz +X 0 MUȜ8&SnrKx3{+n,R3uf]o)xw\{+(K _(~ZEŽr=1G{'HcߡG3^o=]˘ro]|QCаdo=$st"5kv,g>'*ɏ%QM!5 +0ʬpt)Nˤz@̳k^=]nu eÿ́j8Hi]LKjOԔ*Ӆkk[[@Z\;'ta[)a8cmtPp+MDLb|b1y#4&wqi+!hxQ";eO8zѢCq5ͥ+F~A׹1bN)I;R@xL,(S= }ΧÁ1}q|85!5YteL͢"S•j]8_Q.FбX4Ns+g$TT^JVw>qsc P}֬MrS`8:!,tWY=y5 +J5t*D9)AV)K\d@ 0[00IeI  a&ox\%.{! 54\!ƍ?`wҬES(uѺ?^|êvkiGZ66*y h\O`&;\(:ǩnv(DdagےF148ߌ%13#rM԰48T bbiй$ꢙoRkl&ƫzKB{k&;"diGDS5}ؒ*NFo@'}/矓Rf}bhBds@h1 +7`Q'YB]kZ{ç g!㒠NnTǁ6!x~x]$nR +QX%ZxNtUm_aH R3"Ddq$! [A;]3Ž=cR|_ݙ6-{22Ru6VX~V |S.ɊjZu~,_JqB欱_<œT=YoQ}hͮ#~ꩆ҅\L=Sɏ <US$WbH6yиZGAO?~{2aMt!"-s\'*&T\lS4^\vHXo0=SКu&!P__):?XKƷ0EUDknS[tF0+Ӡ{]BIA zov&i0iCgzł~9ȝA~!Q; ,oE%<4y{7nK K߰RHHzkK?NCC6ޏ훅.&Ah8)7֚\D?1$qUB .˪U)؇I|F\`%SC<\"ZLCX#᷆P1H9?RK"ߔn[O2Cӛ +q\`޳ ,1lw:)* F _+"8cF5L{rsH D"('ReLƨsFZg[>bwW,@tNl{=|S/?!7vwQ@lA&N +oJ~6'YRVfYTtګ, +RGS[E:LO-;It DR\$;&^jn?}8=dɅqUFC%5Kam}cJ#q&Fp'T1ʔ;aVyb <N?v  Mz3'$`8?SB|Z~*6'|V>0GԱֽԱXT'MJJ&`!)=fؘPs?qHciqX8;USL1cpۋ)$[ZauqPuz/{n[R$O}R`uv>r'`f:l6q{bp3#v6YๆZTmX|O `F{l0SWv)NqQFߩ$E'")jjE$ֿE~S/`Im L{ܨU!H^:rd{gY4q 7M2Q1DAu}qkJ邒@#y^syJUޤX)nC"*kb@;xSB2j5t2s% R'7m)V/Bŝ c)&\^ƱOrsSKCd,,YR*QppZIDtJT݆q1x3uaH/_CR kXzJF +fiblKͅ`? 9;Kg' [3!¼ yq"0*UuG _s.:ԯ4Yo6;pIQ7L8ԝ٬ܻAFuv>[R[ѧat$=n +n n9羘c*V,Cp͛H hí&.}EMĢ]ز:/5C7 75:ԇkjs‹f&1KZLsvqUŔZ5|C8&d盚 2/>)kYs塩L(^Yv 1,tIp̞8? ~!OӤ[gUbw T:hʭ˲sMZb= ;[$Z_WHA:Lڢ9GYb + zeRhPzj#N yjtAeɰٺ;gDS,Q]>T.X UB]8k Hak^'}E%[R, VQ:W 1xɄ:Î]%{hW,@a&##)E+6R]LqG8BsJйSj +%߮5[/tyV2f&,b0Cqb*ՁWҩ=n7]7m2$7/5^?SNv͏OCC:Rj1Kpո*ӊl :4ѿ0L53[j]GpJpz t(23/L@cEIy{I64D95agaWi^J<& ug P:<}vSsj8 +$f~`AN0y=(UHyJ|(oXۧE:bӔuTz4}q +_>kDGc81| +XXҧztCog$>Q'/.#S[asaMWlk5>=)wJ9Wvgkˎ2|{='9/[ TDʳyϤF]ed^" J:ĝz9âMh#P7k7(PPaҕ},$&V@b)]ng?. XVzb3у[B!0|1%YRhLb͔lsRK'P J5:^l/-"H:%`#Kvcd¦d aYTa lK.V" F0Q7ÑjR:? + {Z0'^^TK)&aj%czɀa􅦉^n:&/_!ƽ:0~ɄG su4Vn:-}5} Rmskd(U\zMĩ EnDo,zJH0\kmqWE)׼oc [IQW$JJj)'%)A3uFж۵ +*"8~~!zךbg}oaiCn/?,ʭmI~Zyx)RtpUz+$OLheKIGhҘS $5(D[ Vx/kTzJ._NwK:4bujtg+Hbh%ԙ,ĵAjrS۠zFDN أ1VGќD}FV#sRI)pw/Pcט<jtVmȿRTCpj]` @ۃ Κ"v#ڬF +,_gi%} ++"- Z.K؍pW +%>U {~`8~}B-Z=XB^Q@et|לPCCVJeJ ~ksŎʐŇ 8tM= 79hսm|ÏNAـxSmg~#c:*7ye +,Ғj;l{KpNk) Y2ݜ z9%ޥ7L {_~9L>aO*xԨLWiU3l%"pM|CFvAeѬ!^ h^( +/aI ]?="Ѿ _ikS?sQ/ 2>Tᒬs.; v)ۢqohrhR3u%/tʻ(^C*^Uc'}7o7> "9=*V,t&[fu[ f%LJ0#|3 +JO0#I Үl܊7QxۘZe&?;T44Vyjqi1EYݻ&6B内1!c41ֺ Ў锉WAkxg}Q0w}+/O)O ❊t$mVgC\?/iwi5_W.$guaF&;Y r"̍˖#<,N1ī2nnG&a ys!&e WCD<͇u[xIfSMhqF ?AYNi,Ixq̍'L'ywJd' ҒhPOSh}[pwB|Svؔq"%NR"ҝ:"k8hD}*0Uyb)04rn+>qLxi?~Mͥl@x\ ΡVi?ןD.IDT􅭯JSv[ +C@6_64i;ŏsUweQTqÖɱ?~&!骮2Qʁ J_x[9%XTUs$H7 ++P7uW@9֫mz5qG{EOJ4걨N3{&GOoG +MP()$׎/Fj*L DJ,@!,Zf92X>~Њz'0ESLBh$xEz=+OT+/6=;߆Rzfm\>(\8*L ]a❆<Ód6pУe,_J4 +34>˗l)8C7҃kUǸ//`rHRH5KMOڝ9{/*,Hgxv璆" +!<]HYF^KshQb=G-=&zwZW$,m4(.Vg # ƱnN uBpDɫ[5+H5?.T411%ء*#? Da00wkǭN9CQ˄}_l#3[g>[MU'7rcIH.KX5WJYV"aVF|(]El7DԳ*=- A)MD|fYfT8P4#e2 y?i~)Ź,Pr0T<^Id}֚6/d,}NsKvtS֡pO=!VK~EEۺIkrxd!P̒ݳ qxm)`n$fK5rw|=cR'XֶmW+g7.^{zKɶaXiu[qPjn3co,b/O/TbwLKH{1/͵ݶLkF/ ^]h(4oc)UzM L۰3q)=[oRHƳ$>XFL ,^`zS$b)US$aXS}i})Z߆L%azc|!yl Ҝ˟tdޏy9D@զY!=z#/'Gܷc+2Fyu&vsFshay(^[-s\16"'9B:LyG(冬'Veں@ujo)"BC M2Ȥʿg[K3{ЅGNu݀uY^b%T +I}d@OBr",#$Oo}vJ?b}өtq0RU Q+ggOhgY֞J<(n²Tޏ +w | Tr/88m-, Z{[K%[M" +"As#X}̗~61*5-:XrU\Ef +S=P9; R>E4DL"Z .5/"MKeag(E :#7 +k 3TIRx~2KY7FtP*Z}`ER߶@"^3H*͍cZG~?cw7α_zkB vռ["e' &Չ/~CW nj~ E v?&*ϓslH,כCâܗWJm3^Lrt4?bن`i(%|H%"Jm,6#9w{=س̝B$4+m%:wL9 HeVzcVNGuH]f]5 k<p 7̴˃tYHi STzH]BN0g oN RZٯ^3?K3eQ>I ంz-;0_wNy#ѶzmRhEؚz;=Pf lS˧h7*ڪ8H~]} 6 RpIYiGW2u.{!⍗ Y)qFXLI(w[9\lTsv x(X;cWfȘ!9fDqE͵%P9b(~尠di6y3ECe*F|X/Q?|,1Z3W\pn|#~PW&ޏU-Wjkom=8_h9=\Y08|C?'څ)6!JתG1nTRH; YVR'QCGK^CyuWg< z,HDS1=S5-ÿPFj76ZndV-6aFb3rfBԙ.?ŋҀ+VW{ SFEܱ]5 &U"4QAOgЈ]vv0l$eort&wO7]!8MoR\08QZF*EݦPQ n@=z4ߐ kuwMJ=LsM0,1Hkf~qÛTgj9W`%f=@vRiW_Wz{pO;8QVj| #f|o]'O/U)?Jm0:Vg)F F[bBzmOOe4T75jxfvZQohԍFrT[:Ζou@I"3Ǔ{:&zr$=JK'DA53LOn>K&se^2؇)DB  $OkFh + +602]IO̠v]HyJ$"z19̓Wˤy@\Z+M44X$?G;MdEߑR5Rһtw~+yVQBIz؎'4tgOIbJ͠~KÐ<;cΎnnam1~``?-~-" o6vtQCV>jkntAplUԠPRtZkkDV9lpiUMإjY Bur#P98T΅v3p#;@" GFG#C@|endstream endobj 1258 0 obj << /Type /Font @@ -14226,14 +14236,14 @@ endobj /FirstChar 34 /LastChar 125 /Widths 2834 0 R -/BaseFont /NSVSXZ+NimbusMonL-Bold +/BaseFont /PKANOS+NimbusMonL-Bold /FontDescriptor 1256 0 R >> endobj 1256 0 obj << /Ascent 624 /CapHeight 552 /Descent -126 -/FontName /NSVSXZ+NimbusMonL-Bold +/FontName /PKANOS+NimbusMonL-Bold /ItalicAngle 0 /StemV 101 /XHeight 439 @@ -14257,7 +14267,7 @@ xڬ wNpwwnsqn?}5Ƴ5ךkQJ f&@ {;FfYNAh kduČ]<M@ h `epssSD<@.juM::0 ;׿n@{[_DU b lQE%miI:@ht2(؀Lr S3`n`jog5gƿXc7 a -tEp:ق~@ 'c;3pLm\!nn/BN#l);8:\*I?A{f/_^c3O- `c_0'пh:,= hadftv W{ce+q8mYX4u[dϢHۙXm7su>7ӿD%alfog 03)ػ- SO[ovpQ0~`_{7nl ?$g&$?p]C ̌6%@@3%%eW3:ـ0 ,SZ3zvfIHΤ##Go꿢jhEx3 8 r|?T ]@ݿ-3ۙڛ+.vfq:9U_7oE= Vi.u8cb,! jE5]~ia[ܕFo!<=OdhmRiz +tEp:ق~@ 'c;3pLm\!nn/BN#l);8:\*I?A{f/_^c3O- `c_0'пh:,= hadftv W{ce+q8mYX4u[dϢHۙXm7su>7ӿD%alfog 03)ػ- SO[ovpQ0~`_{7nl ?$g&$?p]C ̌6%@@3%%eW3:ـ0 ,SZ3zvfIHΤ*)%Oo꿢jhEx3 8 r|?T ]@ݿ-3ۙڛ+.vfq:9U_7oE= Vi.u8cb,! jE5]~ia[ܕFo!<=OdhmRiz ֿq2"jFy_mBp0ko)M}s|'w+Ǥxp@5MՎ^Wxr5@5t]NJ^7(9:40M׭$yr/J+vroI魂|NR-{UZW3|‰ӹ8|MA7SA?!{ülkh_zsg'K7Q23 V!88Sz-ZʲbUlt%/{`ENcj,UooU{L,ے`>8[—;1"d6k$T0c=8l2B-NE>VQ?S׊_ZjcxSHk_G'c ~5ر3=͒9C[X? Cz!YGgzD7 8(GDH%.fjM #: YN oFp=)I%&.ٙJk<6K#Rcx @@ -14332,7 +14342,7 @@ M _7Kbͤ\?MαI9Sf͢qcUDR&P8qpS쭧@K2y4, nz~Bw8X7ՅVƶ /Hۇ84[;[ ]άT HoRUqX }S`Yd2yԾ\1?a#uT!ZG=Q]c9/dҜi Z64Lv+ /{Vs;5ދɁٓKq@-UJ;ѐnU/"%<{Fq+ xQga+q%[Fe$M%r@]C"pI:%?0FX_fN1ήH\Y2{!"ʭ6fBO00H^4WagUv;֗FIzY`5CPW2ssFHzS汕˳ͤ }<.iD{\̣9! zד!0V;&K(MV}QcL3AT×&'gVƴFytc-yfgAzTz-:y@\"?PVWE3 lDK\$Uw>rߩD%<Wv\ӌJRdɢ7v:.Q;/D']ew7Q -A}[L#G_aͿKHh ,_&oypB7vKNhO1_rD91)sTAc5?͂.y;4/"psxe煤nqsendstream +A}[L#G_aͿKHh ,_&oypB7vKNhO1_rD91)sTAc5?͂.y;4/"psxe煤@qMendstream endobj 1238 0 obj << /Type /Font @@ -14341,14 +14351,14 @@ endobj /FirstChar 33 /LastChar 125 /Widths 2835 0 R -/BaseFont /ZJYZZL+NimbusMonL-Regu +/BaseFont /SGHPXM+NimbusMonL-Regu /FontDescriptor 1236 0 R >> endobj 1236 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 -/FontName /ZJYZZL+NimbusMonL-Regu +/FontName /SGHPXM+NimbusMonL-Regu /ItalicAngle 0 /StemV 41 /XHeight 426 @@ -14368,7 +14378,7 @@ endobj /Filter /FlateDecode >> stream -xڬct].v*Icul'[bb۶m۶cw>cjk^s^Z5FQ)0%lA ,<5e ECkkC ;Y)5௙Rh3y@ jghafP堡/?.#@F:Y}pZmA)U@0D%ԒjI-oFY c`j`lgkbOkN'{01`tpr p9ڂd5v6vSdh/L dhaͪ(&:A憠r;Yv=M쌝i__( eX8[_e8;YؚWG5/__} m/6eD`71on3 [vg\?{o&v)oJʌs"H?"owCz; _Ac. =5Rhlm ۚUV ' 7`jhwVٚ-l58 , S50g&2x&1aU5)Y^_A@DC?ع<X8 ߃/"Z-̌,53gǨ mMn4;;:_ov݀+vƼAi:ܑ)1>ȑ`Fբ^ߴ]J`ƦҴGc}8T)|"o +xڬct].v*Icul'[bb۶m۶cw>cjk^s^Z5FQ)0%lA ,<5e ECkkC ;Y)5௙Rh3y@ jghafP堡/?.#@F:Y}pZmA)U@0D%ԒjI-oFY c`j`lgkbOkN'{01`tpr p9ڂd5v6vSdh/L dhaͪ(&:A憠r;Yv=M쌝i__( eX8[_e8;YؚWG5/__} m/6eD`71on3 [vg\?{o&v)oJʌs"H?"owCz; _Ac. =5Rhlm ۚUV ' 7`jhwVٚ-l58 , S50g&2x&%%Q-ue^_A@DC?ع<X8 ߃/"Z-̌,53gǨ mMn4;;:_ov݀+vƼAi:ܑ)1>ȑ`Fբ^ߴ]J`ƦҴGc}8T)|"o tGLzQ7K;P?8ՏJ>`g:Yni(\ <٣6bw5a_|M<}~?$ˉuBC(CBi{Ju glC(bZjfpC@VBj+s^"pjmHNZ;o{O}qM g@ @@ -14442,7 +14452,7 @@ K pӺXk)iKqkٲ{԰!1s3 B Џ2t%]Au"2. xs,)k>hbyZ-$b;* #6^*jj}5ʭtg =)G;RVwV*M\hn`Pٺz'I~V;&븙iw c3:Sa40Z: Mo~#YcVIF^v&Bozҽ<@ !VoC鷳s~A)4jsYɉ cxg4Hc=|(3qr1~tәsV;ˁ}I=*!8 {JhJ$2tKcZ=P)w,cm#dxu!^ 9i7JcԌ]+ jƻ_[hIY0*껪ݳj`?8sGx9g3èt:n:SluHxPoJAh߾W'B qJ`ka殴bg>MOB8uk7)ܿ5GVQ(Pm-FG*TAWK2z) ?3̏QOl sx5W˖zG?yD86<,yʜ%ɾajr L.!e&Ay!q`ۮ8 &CᰈPKMZQR!Vx3'l{x|#,9r&t| a3saw uݙv&R;Ƴo5$r%iav4 E;E6'h;7\oqk*u+NcO -%j endstream +%j7-endstream endobj 1178 0 obj << /Type /Font @@ -14451,14 +14461,14 @@ endobj /FirstChar 2 /LastChar 151 /Widths 2836 0 R -/BaseFont /DATUIL+URWPalladioL-Ital +/BaseFont /QQCYVR+URWPalladioL-Ital /FontDescriptor 1176 0 R >> endobj 1176 0 obj << /Ascent 722 /CapHeight 693 /Descent -261 -/FontName /DATUIL+URWPalladioL-Ital +/FontName /QQCYVR+URWPalladioL-Ital /ItalicAngle -9.5 /StemV 78 /XHeight 482 @@ -14478,80 +14488,73 @@ endobj /Filter /FlateDecode >> stream -xڬeTm-k{pwƥqwwwBpwwwwn/9kuUjW]^TIQ\PWT256:189()Ŝ͍A@{qc9@ nn -`c"P=V _Zzz0o @9P2XmbJ2 -R)u-@h -ۻ,>L̀\ͅ/ hn -fajp4w}]=9fnz)9\L ߬Jde ' / pi`ϕ.\&3*ho_0-l]\;uOv{cGG[E;?k\m-X4m G`gTd-,:f3306s[ 0+8?'#O};crmlwOMm_9y8xXx ]$fJ@oeW73wڛ_07L -hjcO9 ۛꙕ*{Q|rq;B$<+ux3rqxl^vKY 0%i7 {SfGdlowlWma}?:#;T?2%; -9XڨVTP[iV4|~hǖ7;/9m!ONn fRs%(.)e7NvgGr,G?x.&0gTɧC#ý7ynPTNyB:Um&~A͏i_a&?XG{m&ma_GX=hLŵ$~Ԏ`I0n# g7O5@ʯjawAMI ]?"5΀Vͤn -(f^Ouy =5uv0; )$5beA|DR]'lcq q#ζ`zn*pzGHzlXì#!q:g'EZ -:̕#8|0x6>XRoX 0Ejq^^vJubK.X) LS&sɁ,A0B_ ҍF`+sUd1v\7lIoEs+3B -C^q%ժ\8c:l4rml?fGO'L ֺ˜5հ+2 -lOkuҥߡPoR&??H_xdVetFxb˔؛'KNh s+#>ZŗrJJC5׎@}~йP.?%؅|8V+.eit"}g_~I;>aHb/ό(o=!!rM>T_$ f~1t IQԻJTdc8Cc q^W -!ңI_F h[yC%M/9}ͦCFBm)ZkCeqtNZF%m?eY~t+OITͮyahkqgvbFH>:զWk~dKLZ W]Ti7:EUj=Fr<,Ivg٧jZDCSĺT"qOZ!@ >qY4)z=LN${^,נ"1}hJ;ZL"7ҖPm4o2ReX3͂S> S% -Y_޺V0jwݳ -DmX-fgsȞGh5CPa}f'aw9 -JLYYyjj:脯   V*|I1@@i|錽~J8_j"Z28bs+ ]{ 9C[ GߟRџ0^S~A,ŪN1c,$0,Y9i"цE|+1d&&ec6h!*'=TylY&I=pC$F}1rP{Ip::LRuaΒ" 9S"Wg#qQ]l|!c{27:s@3(Ũ ]$=?T]w`gSH8f01m!Zj5b8D?.N -3,_~\4PK8nm']\x-pEm:.LA炳Ѝ595`uYOijNBu:]s#F=Ӊ7/F:OBJ޺W1aE%z<}u#iژ,NA:<uo=C:"7ڏn߲tg<]DCrW˨*c_oVŒin`x OmO*RR-B"TQsI,3o3V9O4&aNYzwG^^Z0 ڧ#Vz.JUvhP|eNj6.)wsqyY*f-xu E"BW4 ƙzXmM<%0%AR/ex4T),tUH:YZťC(_T,pckD=XX,7qvQ:u! -cG<%lyAPjEmbi{U8X'SnGP˜76Ƙ]ͥ8ԡQ[e_16Xs)\W}yCG5s}}XNgnҴ-%1rd0|x sۼ_>UECAxbPgPH^]jXlBZИ*MK`.! 1z_۵:EV{Q[nھ(<@I[!\KufI{aH282LLؓXk23QsbM_c"(]@O8@7)EG̯6 >Mg1o^/ dD(?HYj0cr+M%D ~'a0e{e[JC43O$Qx.]kIw0ז5if)Jnom(Hne[d#GӺx}5G GtrfdW  k> ES\v:nQ-Ȍwᬏ5{ E$Fl8`x#/ G B$ųI4B29oPpMQU^ըԿ#P^( .*tLGο#YgNjVq:vYzDt=nʍi:>07Kv=sTHvRz 1*;lf/hxE\km$|juPM Ht >Ï\hbHkwŬBւ=lUC:_,Ro!9!!ЧeܽQt΀z HL IW5JJ2-leDLaNz:kհPNn7>Y|@ -|xQ"^*[t9z%r1K6S;Ws -J۾YV~&P䭹մxtEQլ/k= Uk,wOTin%\qX#XD.4Ni -Z*~65|AL*2=VT0 (CJ,TKFh!{v~= b|<,ԫ; r;/([= -zy٦gz;w|[,f|muEjn.>P O*bec/ϔcqm/99U i=]H_)vq.5ˉ+f˦(s $6.K 0"5Ӯ}gc(^ q*K78Y_\^'kZ haX(ƑSmC+% w ~97([s;] uWo9UorhCbis8mH x#[ÿaz`ms+3ό]?اBeă""T1X}EvBCLt“1x*1Q%t{XfFD>>T-(K1>aO/BlޑR_8vJ5742 Em4-ǝ4|#Ph zseC.˚^j> l=w|F?GXaݹR@W{Uu%|^*ʬ%?+, -om拁/ rJ1Nh4LжK]ɏ{b_phjR>ͪg>s7޽S/IsJP.=v ! ;ݽr?9RE`a QfT'1Y'v?%i.xok2#*V㝖O\ݭjLc%^r9lsr1m?_qo8,?؈ʧ-8Ծ/BlJ-ˆ4'Gvofqg0Gt}9eF|"[1-/9[ H]õОibtd3A.ܰc>Dޒ?y쒦,`=j:Za{ W0^ִĂ$Sr%m#~OnFЈPTmґ %I>#eX-8¨r_l̍CMO%25D̛mVPpIAbB?z8a5Oy7'tke^oLXQt0di],tz*(kd$i6E:!9ZaYV럥@X3)(9Y<  ؝>+XTT 4T%<) -fP^JmD&kL]gFO"fY?೶~;ZK1n XED -#DgLۉST[DZȍeN~/u?an#2Dl> L|H_* ЩdL#z8\ xwl{-cےŅYyba;?S_D')mKy̽x|V XG8aש6v /vEjBl*lBsic9[C7\oV_ O:SR/m@,P֓`^T*m8FYtQO=Ǯm;E@_Wpml U@Yʌ?S>+iޔX=bz!qK b^AqbA jb0?8{ v -[Hz;ּ\W0Qeq9I5?0x?Dveav*wE%{ -.{Ot' ȨW)Z0mnX}5 :cu sjJ ->61"cP1nKs~⧵X}ͮQ&ѕlŐt!\Mo ^w}DcݾuGn\7cUYejx_gujO+#rtPdC֖%DT,f鋸I؞ɾ2 (@y;szKh7hiJ;[HMCioϋڜj`?re?! 68L`> zIolʛ) 8+Dw;+GUb6Py`|3ybrz< Ki -΋&݉CqH·DŒRsfV+֩q>K@B@4\3揯D$xVn -wύ^~r)%]sF ! -(MO篱цOiw :&E3=B7<ދж/,CN NJ8_;hC1't - P%Eȗуӂy5uJ+dY,IF<榵℣Z^`[0d?GYWM,kSսvν!&_)>~A =i1~ od蒮b5T-Z_;ުq+yʹ0bH&M.Th&A{{a2NJh*;"G@+nQ8f4+}M m1EKڱ]'>*[)Z4b:c@cK} _aEƢ]=zpFݮ~Lb'#.} ?ՍG*Nny.Gq=UnI΀v$()LikJ `ܝ)9<`D.^U26PZigS6%/QZndVE^%?7ojŷ$p_prD Ntn7.PX8B-ྲྀӡX~Mjp_~V^40r[AWr!l%mE_0?[j0&gvU[ai\1|zٚ"EtKĂEq:cďW֘o%vfvK:G Rj 沑Πws/~Nˮk:-VM㖴#L7@~w;Tinn#Sxhd[q%lX6» -3 5\'m9<k<ڳ9 0%3"T# g?NC?8Tsp1d\h)-/T5c9e_CpK]?剛c9o4JTw%+nșK%*84U,>IY3³GΰeokSX@97Dm w٧DXN -~Җi~Nu.MLP1TWÀ9ȟ`77`O Q5`.\L򲞶-,S5iWQF-XE"#+b+E9: }>?=;^+LP<u8[e.j`}U04NcQ$_Kɞ`94I$ԙzwSGcNI -Q;G? ħذG\ӗoċ,I6eC" .BB]ɞRH`VbohM}t5VҘK![Zc\~SejOՈ47;$WWp{ -\&_@zB)aZJ."IKK]]R`Ƣ eBT}>p靏KNNkWRwH)$_z{ cCU{)w9ɕE9KYtVNp%- +ԧ㬌_ [1q@Yexq{LUF2$ -疌J Lg0b2q3O)1|g! -KVmU[ryaCBXo2"B!ؒ9VY7':OCUK?IX2lǜn>ZN ~O5+@5ڷ_&q(L*Wdj=$"Y Ck#ܗ蝍n[5K&VQ4GhgT(zJ'.VjdRp8+QJmOS+L -zg :$ռBQ0؃땶Q$hrb^%֤ROce\<, +@]! L>V.4$TQ~9QHLtN%[ ?#Zh~Y -Nx"5Aǹjꀸ?i7=_8k▂% 6)1¤fl1n- 7n37b -j-~aEnξ4Inp1v1̩zp53c=2f2bJ"A5/;D(#?iu?ɶZJf+pnKSU +| OIcHrTNVrf\&2p}i^_j6u-Ge{2mZ)KĦ&>XӑEdhFazBRV *M\sfQQz/_HW%hkvqA6Pʹȭ}Nj[%s;fW"$խr%23H fWIu{d".FK8݅7P&d32 ٽ.TͦpbBl[ <̛Mj[R<}yˉ*`ȃU)S\^{(`#ʗK}͚[m+YZ2΍x%ǗG>FPU*:q#yД3LdΝMr9&$A)й70H5ǖ MxR)<:m\2 -/2;F̀pmޑL AV\dˑb@:]:Q,e1f"4T9>+0B#GźـeƉF+_\H-{3UѳyݫhVqm|][rgECm饑M<ճ2z!F i\NB'q+ϯ|یdtZj}}rYHXK]yƠZGBC+ɉM\Z*\kى0I4#" ga%lfI٩AӕART,y/At2:16c4hxw9^wJNnPQp5b0e XS[Hx;S ] 9ZT|݅u{cRܸٓG,F#ʣj&* W̘SJHJ]eU|_$_ͮQ$!$g5~ D(I΍uz.)!_+to6Y +z힃l'hTA<5(R*֫.SGJSt/RAZ 9g&l<]wL(!JDw[khZ tYyMNf6QTڄ"ond_ G,j{)Mph Mڪk[c31nGy #jO=4xY˗!L㺃$z-Y?>vfTs2/~FX ~J]#F<8c:$vTapܗ=H]e'%}upd">pGJI/z(fbjHj6dݕu!㎽.ݑqkxt*ߺGơP.n2:Bd-\׶M6>eϑ~"Kơ$j;C c[hadO1 ρ_rprvR38"5oہ Q}xH':bro&e{K)+NHw0qJDj9F\Wq> T9D#&$`RL1JAlZ!U5 As3ҙ -",y ,MkSed)SK{✹ -iKAD "(OZpL3j2R[g\FB@+嚘y$N4|?p->#}--\uo@|d 0GAnpgPZ'M 'iF\[ʑ IGS`'qh$!';IU$NmT斳Ht>I&'7YU|*N>bf;uX/3jy/ -gӺP -mOB5*TO|hp7 I'Îʋػ:j! Mˏjc l QoJշ}ui/j-{h;+`ykLlXUE.uH(8JsyIW}DOG B!ue)۠^ *$R7s;c: -)f.ƚ͵,T6>BkHob)f&5C XF'~A BY?؂keYR[$m1,yk%mQ\f>-NEY~ZKQ}Fh>7X`*Sw``=UyL@dA*Wui'&E'ӽnh >vq%ԟ@ L(O9NRc_F*e65+*}6d흃Ӣ~UXη& - pkr}?x+Ʊ`W|)ӓxR?8;WN<Pr@!5EůUAei? ЖiK4:{lߏo}UO-B|;|֚son5H&(da08aQSz Ab5b8y(gA22wmw{6Ta -YB%C# ZTeN~U֫&κf2;/Doܤ󓬏&tb -2^gت(!."Z٧v%{%<7%rA4Yül3F5쏢n2ӭ&D}vKu<@/ç"|f'nLz{"ꌤa@XcpEҢI]=Eg*{:R$ҥh;b;=,_0Ȥ:֚GaLN5=XW?ba~O_{bϓc.,_GYT+ rvs'#z`Ljp83^ OliJ4lvZۦuXe/x4rĹ[ź/vMvGd|&@J0[# O/&2[qC?6\B"G R:ިt%<`M#{i,F̙/-eHB_g%Q:f.*V],xY9| I(H km)!-O0LuF];2:<O_`1h዗gGHEVr-@,1,qn D>c7n<_p t:gqɤ(0#ߔXTbN>R*0dI]2Hdh/pӸQ׈ Ϣe= -i_-ܭ\mYޟ⅞{=Ȱ!ؖ eĭA: .6g ,^>~ou<nb7EEfB}dQ=>7 䍮>WEKIKFSC~/LONtk%Htyf WebI5&ą~jPý¦"RQR?ۍ{nffL&࣑%{,i%D!Xȱݝc)8h}vmr)yhQ|t #qK^c1Q2*ol/wUBA$,,emrN]~%;mΟ. \cɾ,ܓ/ȂĜKϨ8EY8Q4KVN0"GDTLck= m5 r8ٵ:z - -3RȇCj?} .rnKʼCZ(3R)Y"Y|َ&`Nn SAewJB={u}k y94-"TK{ݴ+.+Z>ά~2X_AN Od"maųs'dMݝCcSd& z󋾇)r3>15Ł*w_n훰2trIdsm yT;&u)-v>"W>IfҪG*qdo^;sͫɑS9] rR6xZ{߉RskQ4T~rwRi6J<_}K (\ sRJsCendstream +xڬeTm-k447.Cp gfΚs~o~}ծUWW QTa676102Ԕ5llL Ff +NfF Ȍaf +53Xxxx(< _::0o3@9P 4m%j 3;3'#  41s6;l}ۙ3_.ag7`d tv :,@{Ll\L)_98%Sw98@YE]'Ong_`o+ K 3w?@g#98U3*8Y9ژ9;Ow란F69٘3"ihϨHٙXm7uq_ gfhadjog053G`M SNG]%>wjqy#[cd,hf.J#2 +a;r00s3:L K^ˮfgjd3 ``afo%s23_3HKkK{A|pr;B$T=+wx1prX,v6KYt0323%i71;{fGddgwlWmamބ/*=+T7<)9PҠZX_mSaV8t~ M{8ڋcCՓjvЇea ~ rƙF66'~ t#?k?IZ}v'Z#F3ʤᡞk8x +>W(d(\Amrֽ.c_wi~HVʈHy7}᭺>IoXaW͖S8տ_$>bܷ<=jpYKk +V]%3r<5!z#lTfxH"fPUeWc%Mg@rW%v__7J ޡx6%x\5h=f'ˡrAo JӀВ=49qNH\gFK/2'QAt嵆,ߴs+Z% V0D]Z( + ƩlNvi^9 q^UaD\pY-FEReQ^*B $g{E&Ψۺ H6vyR[}EHSi+M%gb xA ϏѺ3;V@/ FAV8P^X/ Û+:>-F~Ի:Xm* 3_jk͇"Aܓ:2+&ܣ$&k,_itwQ^\BU]| ot+da@lMv18l S0~ 4p}5FuU7tDg|/NJc ?K9J(6w|۝CB'u;02{ ioQSs+;tfC8ԗ ߆hĹ +y-)K/?8|L#YGuClțjBdp{k ziaJDEpFŰ$~M25Ò-S!-|[;EȨ2ȍ FbzKקz*)]IyaKi5} 04qXwdŮSͥԮ?CR0&T˪(6!X~xH3e򙹄}f3 _(HR*kaΒ&ڎ%zGY>}C +"eD}W:ft""M.Wbz:/0)7wo2Dj=y<"njT'8kL擠HiZ5 ThLV r9׊<3Ec"g 2Y8)̔R 缐z)U^|@ʰ#xjx$Fjτa+2}N_a/)lg71h#Яwzj:YtC&G!{hBJ[ r +!!XGUjaj1B9EA +)%3tIسsfLvj5ֶ0+T8}J~ +,ڌE@hٴ:λVHkE' WĦ4"/D3!v&0s{``Um1^ 6PYj[${aKNHcdGThd{ sb`[ +c%Ng++w'6 ?VGw v+۲棋揌QJM'y wmݎ0#ɲq]붒ECL'I t$ҟ&Rytnd@0EjSTh@)DD\QcFϨ6obë7^ꗅ5Iٙ}-o#H :Cc  +aDmߎ1.~_rIE9h8c]h&B@_-1Wԥn .d?ɞuw`8 +u2V"jUD+Cl2,0(<ܫX\ꃐI~7=I˴Lkr_5BP,܀R)5`6h9|ҒDL[j-J"4yB>gͱ1Zh*Muޅ(/ЊH̤w/U4۠y/E$7p 4%?ef1:@k^5S#J.k.ZKa }גj7(8FHJt*TT/}q䐕&{P|g{VS!'`Q %k2#}M,я;̍b*,l ªΔoݼڈJ(Y Ԛ^ƣ%rwt[_m*kCUuoNžoW +|+@Yv֒߭+bNEb/-~}"Q +YL+{ +ԽqدG:gۅݾSPjkHg)%fh&g7,u81^2st>jsӄQq`W dɂ) b4Zqt4= yoH0,dߚ^M_MiMph_M{#Q%m% rbK_RKz:؈XEZLHKD(D38jl%X\ŷ)U ߵgxA8$L6pI`@Q-]c#ǃDSO.3-ϧsKΔea0n1}WsǻpüQ.2jPV[h妪@ %Ӯ2lb|(C';(Çd/b-u \9v UC΅Fq9L[$EP\ rL!j;5R}(9F0VkvA Ba^/l%<'bA:,Q6>뉞id7|Kms0pi=H:qX8|BH7; +E- uK|FbFUpjBә+p'-I :p^PZt+S&IaY^luo㸘uxܫ!M5/KPRd.Zbᖻ "VzkM3[yoWvLEֳa^cȄGQ K X`QJn6DuOEހ/,w} fDF~,I,o1ݶ= +0S/M$ ɹOv8/sFZA{ʱ,z^g8|:zWC+J;!C[skB"9 |-&AhFǓ}~;EchD7Q +Jr k$w,S~䞚 ބ%ͧ ˰ng),=t魾SI~~H4-Q+֔cl&E"*t8` `Mr0j5?‹zUgz$C*1u~ SJ $%$M3ognqh `3F07  E" +1" eE 99N ^㒷oJ6h"x*4LLPU!HUޙD(ws6oyJ.aِƆZz`b9=SGv%nI$Ͼx?ݢh f1juRbqۇ:"P!q +P9ZX`uoEUB,N8,U)~50ܲ0XPT[8Vy&=dg!w݃]Y.zӺ:G֬ Ig Βe2C%n|֎:oΜ_X|Z?J +"3hHZbI4l'4FCu -=eX2$zVW-X%'JM?o2ux*Bl]lV(BnWLnP5>#2`#]i@"h<hl.Cw$k3΍Xo"ݽe3|ҥ,tCP"IX`Enw( +)Y٨L W +BUt7:c &nnvKtbD3r+ap8mfJۯymͼ},˂ +( EKAl liJ}{^{QPcS'!1u^dL +pFrdUDaϡTA*T؉4W64ۋO;G@zjC)/y~s-AXp[ @ vNX'^NM2]9R7D#J.HV ^ R*5% eG:wtz* m|Mk[ e۟wft2H d6hh H..9<;5 9G{9~ ԯsN{ך6Z;}.p-3Vkr| yC om9i}rO8UU稈S& n\;"~ԴL\l =s./5P͖YPI눗)Xxضf )ۢ$ziSp47Ąܟ{EgZ vZK/eUNB)4|C/;~Y"Y."vo6̡c\hZvO)mY6,Z +穇1X_FH,@QM6Jvi))gVlkj}C3) X6 )4NԾC?YձmC;E*q\h=u]w+̬ +lp /Lzӑ P}5"wxs]듛PLa7m.8q5lɝŢHu.A4^xsxxGOv^9-g ol)Ml9k*K!5[/QA}@~ uR +pq6-t/bEk}n+[ +ʩ>us.:Rgj@󝇦ٸU`s<;cvW8Ĉu =_<쌲;&3Gmt g3R: @>C@[BxUJby^=s5oe0tyh~Z;PwQB"nBLS/ס3gB{n"_O6{1 @1Ŏtޣ_p*Bz ^]Uzƪ\^Dq84,(W¤:T˨.l VTo8_kč8"DH 1Թf=԰_,wU Mr~`Arv+<>jgLӞ@&2"77&6/8S7[Lf1_.y)~9ggD#zΕ=CuϗnDt/f8+ܶ kAU>amhm F{t `9z+"./<+jWZODYt<ؔrZIlARO3=2 b*&cmy7Wbɨj)W,͏+˒N$+gY0h>kdGE|(1q'ʴuXn6-E)!*Ԟ*dFDI% TO^~ OFj%j{=ʿ2rUE0X^߹!y.9"IӵE1 +fNRtCalbɚRfQtFr5+sҔ4GU̜ɣw VoF>$afH't jإݥD(-%~U::ct.pS-d+MSfenOBo?FMu$Â"G}}mpMؔ1UXj<0'KyY)nmS&0 䵋P4y Fu\w#U|"߂йBT ך4|:'.jD2=WhhTuxQn)S)oȪpާ 6 4erZ؃dYԮocr~'1;j5Ѧd~+x KNcOtPJ"0{^wyiZ[ zd<H0=]w6| +Sr$Ƥ$<% Ϻ0k5G`Nl[dCi:O$H痨hF[%PM4sab-{%d4_Ygk?/ť =O/h!@\s̽ `=bG}IuAE6RM%04y3l]T8yzˎgJυU.UXZ}g3%CuŒ]i-^\4 !×C>BPQI&2~ГV~‘|oL"4]Ԣl\f#vXԤm*4jCOֺxD&F] uSO6@_AZTÞO2U2^$i>j,8X163o \=[ ŪIyڑZ3OޒLP5钁GeY9:h Tv>i^Y²gIFAĮꦒƎ?ֱ0x"F _L@%q)ͭyHnDkE8t6ݾ>9k&,?cPGS. [Wz!yπMg$,].~HgWC1N@$]Ӊ0\(SB}!=i /Ad"*!6c$hxw1V{BFfh_Qp9l?i4}G^$oCN'8)R}LӍL!o#Bjcqm[8v-;8eT`HyΖE4f&=]sP;AG|2\ZgHHg4ܧDʴb"ElOb\JMуl/K̰j[Y~~7Ώ<`S9ðm\c,팊sQeN;!vj.M{5欳3IiH$U).t3<2ʯT!OݙH'ޮb؞wgE] g2|r)cΏxʏ*֤0Oj* )tW|L|~|I2B(u//)w?3.+^ &\qV|vSdN9JNкkM RH^ +X#v dM65JF5bfGdpOFR ++S XCڤAlm56A,q$2@.\[pYƾQ?ʦ 1oݬY2_d(BUElR ur:c-sH'1j4Oo_!5E#5Uaq!hUA_ͶDly27$pE.PhP%RXW.%2T~ jKEl<~$$[ ntNDʋ>ڈp"@XcduzE勲Sq(Pxurǂp塢1?_qq(n#iDV jnfrM,D9Ζ#?! _E&Jn@jZJ$hd8.DsZhoH +vr{Sԇ'  qVy7[she܏ /u.EVd]y.$$7]쉯EGu{ɉ r-Q\ VygGv?MKi)S:P$4ur(o'p6 Ng[p'@x6*ǪNQHrՅ?iS't$4h-yXEZh2 +aB-Av6Uh\ᗢaմindud֦BNϲInaVT6pG}Rz{_Z>9bRjx[uO#BCn"6.DɷW #^d֢/ &˿ȊPZ,Z8hwqk5G.It8@ h\[25-")}d6{]ꕰ[جs[3Z_N~ue_whe=/pf+u^N־'?H½TjAf[9E1Om.kX;Hn-2p}Rù,A qǜY2m"883b bgDI57u-LW@=hh1 f( E`l?Y|áy6& M7+9b_IT5HVll}z|cu8S3hW8^z{~rq`=Vo]̑`YO֠ d6g֔fSߵL)8^)|X;‘KsF?/dp x\Qwv-N@ 93Ϊ(E}jN_*.=F~[7^IL6x2TDI_\Ф́R{BHdicRj q,<%D URoF$ٞqnTY{Y$hzu_ +8Ϥ$IIuG|1 5]Iu'6#PB6J*%3ٹhWݑ^ Xo/^Zanݭ=Zn,}=C|_Vub5P̟Y#TfChz[!6 %DD+Ԋ`@c4V +@ɤ8>WZ, *64Ւd|v#MWQ zA:5)y?xPqb]޹Qc Z]+(N$,%-gM]>UWڱ Ӓ #,~Bc ^$~M]ŒT#rinƸDph#f(6 7Ixѕ̢5/9x@' ;Tۆ4OCqK'F1!Lm?;_GeyyF/挝 +<0~)`WRo'Ode*3!zi%Z”ˮG@p=kt.d>?flA5񟶄R Es%; H~ulD +[؞yOKG)$1.9R?A #@վ)gOY\.umwv5{x!KMm;kr2miA2K +$& 3=k RJ[R!|6b%OOD?%`p`iCэVۄ]-sArC i xzg(P2+C'"1t1ld>hy)i"Aϥ+-b*Gleε ڂ_CЯ@p +R*8b |nq) 5OƎde)Y! ԸO|@pWkyp)x(s~L{YƼϝ楽Iڞt-0A::p=ϓM<*3ЈvmF69CWd6AG%hQӬ3c~B +3d8$3 :m~ N4dؚ:׼BdJ_ ҤE~̃č\^;Z(WЏmMόXv%8EW0s>d ߀F;y?(/s/=)bY|{cV~Ihot>\Ih<¾*lG:)^2y~oކzRvߴ2Pw-8.P7A@reꚝl-"2htZ,4}r\2 K4 rhsc{JͬN,&.W?b^5`"ש/$v_&n_,Q(91KBƔf6N̪-g1\y,޳}}~5#=b-J^>F1vŎl +i=:Yο#;ϒm!}u[j1+;0Fzƨ̪̄ aGW ݔ0k~Θ$$:۷llKr} RΟ:jS|%%vt} 4gW).jo(`3_|{[= *Lzzi?sr5:XMjۯl_XWO0OrȈ0w7E?m]~D?,$c2ߋM|&p{Ӎ\ e :sCrr[G^_x[?'ܬ kv5Gl뽺>Q5󆅼~َ  vn|*aݥ^=tn֕_xPdCߕbRwWbgJ?~rοC[BdƯ{hwӉ'}2~]6ٌ9 &N`lu)G2O=EC[ +ϙws@MMXvEu9~ۤk ?yg{;O۫Y$3i#n8ov7}?sȩp.`fOaK> endobj 1040 0 obj << /Ascent 715 /CapHeight 680 /Descent -282 -/FontName /QJSNCC+URWPalladioL-Roma-Slant_167 +/FontName /KJJXFG+URWPalladioL-Roma-Slant_167 /ItalicAngle -9 /StemV 84 /XHeight 469 @@ -14583,20 +14586,17 @@ endobj /Length1 862 /Length2 1251 /Length3 532 -/Length 1860 +/Length 1861 /Filter /FlateDecode >> stream xUkTgnJ+ŀ -2@ &X4-wDP2$H20I0@,PAEJi F4 -& X -Kڳ3}{g;33&H'W d -Cb"aۃ] TlGiT;E`pdQd0cABsaփoŃőD^+D,Mā @HB-lI[*FE)3 Yd#B~$98cNV6wn`RJ!F$b\6 -WJ}es0'dbcх| 6D5uyR%WZ[2BrvZa0@~^w5ʓd" bB}bτ,-(NVQh ٰcQ%M APXAk,>Zx]&)D` -`>3l^;!ePq` h b?5߄, B[sx`X -p!)$:"sRݫWcxSzKGW -Y'un_N^VTOm"x#dk^Y2N|45|m{6lйƹn퍖^',M7x>rqڸ;Y0="4sQ;h} D(V#*Q}z&TgҙXoi癩e|宅k2f\-O$em4v1j{h}MQ0yzőZG>?W)UbC5{DWsCrz=Pw^ZniWɕYY- ?c~eVDV)qNkfgxy}w9/)=Zirfؖ1_u2x )Ѹ6bW_y$|f@^~f@ro0.&gsRf"n6~@n˞q58Q}ts.36!ڏ%DQYRr CS㲎xh躗.;h'$\-ЉМV*Fԏ=25[wPR?)okOWlzyYC?_VSp7JWoʯʉ΄։ETk$ 7e$-O,i*GUM=u)0订c7h]*FZendstream +2@ ,K Ʉ L P. (`PrRZ/b 7 Vzҟ̟yL'6 B1$4H@"gf@b $ @*@Q4 pF"Q^0W X8(0cAB saփoŃőDW/X0Ac 8'đ1[ْT0SfFH sp$w Ɯ7Ll"!bC?I0 +!l`6O"X2rae'rIa6'fqK8,dŷdpgZɄxB0 S/K I2L1! +XgB  +Pa'@4lX +R1(D& (nq5@bPf-NM.Te "S0 X0~/n2VK_i4bmA[ΎoBEaxlb9c~eVDV)qNkfg0=}Ј;ܜL{^ 9clK˜:qՔh[v7<h3ST~f@ro}/&gsRf"n6~@n˞q38Q}s.36!ڏ%DQYRr N})qYGL 5u e!;t"4矕iacfw=j_*9G5Rm~v^g|A(yGT>%mt2|}՛r uf-UqZ1I sIyr tۿ4jHeţƞABtWQ1mq=*QsҔʩ;ۻ we{> endobj 978 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /LSCUAM+CMSY10 +/FontName /ZNLINP+CMSY10 /ItalicAngle -14.035 /StemV 85 /XHeight 431 @@ -14636,7 +14636,7 @@ endobj /Filter /FlateDecode >> stream -xڬc]%\],۶mvuٶm۶lWm}ܹ̯G8;v>'z2@^FD։&o`mm`la'Mhgckf"!r01p6p2M(/Y NG 3[k;{[LLN&S k\LV fbk`` w60H[:PL[S#_,G67#\{ Gǿ G8,l!nj/!{6}, O'sr;ZuLF9Sҿ0N'7r- f`/ gG [b@ p013p06qt Wz{{kw?9X89XB10i7-?GE@vcg8  _vcS(:Y;)w*O"?qF%{;ɿ9cҀm`caj&A#df堧9o8X[ؚVhOƳs+ѿ$EԤo_흔R?(vnOVV #;+`f?d2Nne3[JsZ limWߢsQ71q31ZcgdT;<)2l_ڨ\TWcQQL4tfy Iy8ڇfM֛brMDq0N6\-zQzT^pwRAQwȥ(! 4lpldx6UNO.PXH_9|*"Um{Zl>krNX##)Wc_ 4[\֓ )!(7-OS+1mh5xob7(1ncn/Oj,cV?4vrxNOzG^'>=DU|RkXA bo ?F#zUdUl`ܔ֖x 2 4wH^P ?2քYγx,:,g'+@V)v(މm6C +xڬc]%\],۶mvuٶm۶lWm}ܹ̯G8;v>'z2@^FD։&o`mm`la'Mhgckf"!r01p6p2M(/Y NG 3[k;{[LLN&S k\LV fbk`` w60H[:PL[S#_,G67#\{ Gǿ G8,l!nj/!{6}, O'sr;ZuLF9Sҿ0N'7r- f`/ gG [b@ p013p06qt Wz{{kw?9X89XB10i7-?GE@vcg8  _vcS(:Y;)w*O"?qF%{;ɿ9cҀm`caj&A#df堧9o8X[ؚVhOƳs+ѿUo_흔R?(vnOVV #;+`f?d2Nne3[JsZ limWߢsQ71q31ZcgdT;<)2l_ڨ\TWcQQL4tfy Iy8ڇfM֛brMDq0N6\-zQzT^pwRAQwȥ(! 4lpldx6UNO.PXH_9|*"Um{Zl>krNX##)Wc_ 4[\֓ )!(7-OS+1mh5xob7(1ncn/Oj,cV?4vrxNOzG^'>=DU|RkXA bo ?F#zUdUl`ܔ֖x 2 4wH^P ?2քYγx,:,g'+@V)v(މm6C UZRR _&ޟfx%3EsC B0TU?ܡhVmT 8Z䂁۰ :I?z"6b^%\Wl: įkU*B52[Qj`tgu͚vK0 "15.H_,,.5VIG^ yh}׹Z ypӂu=j 3\xa(74nR&cxaYKܿ~ػբIXiS2 Glk՛$I ƒ<*;:̽PT1]ow0~,AO%/dcck{GK̑j(+BUD# 6:M%sI;v #wRUB&% (cZB/7 '|8}Z6*DLik'/rnX60!~aގا*\Dxc(u?^NW CV Q[5vȈ0K^v*Vc (p3Mi|#Ӄ}5ByEyޢ<^<;>3XFM.8Fߩs^ tI\nk2NR[>oo㩠,`19▱`@W4>->P[\S}Ř`m/]G?,J/kፒzulJF1xDv h rfYUzifUz*JfUޠ |:(Pk<Wo*]gP,Fj%;ɘ9L9.DǦ@sOhڳBts~)-AםZkfbTfNVU&ܼ+0#8h}eaNI{ Ο&vȝ:s]>W날W1$&-/~.`.m6$ŲIڤ5ut SmWX` Fm @f3CF"ؙ䦳(5I/LYQ#Yhu}T?N/c5Ll0>wl\p;jCr-JWm1&4WÒY+#-"{uoS˕@=3³}Vs: 摫{g#qb6+7w&Xy7pwCN(9啦X";fgG]SfI|Fysf8AFی.WH,FFQѹ,PF"Or\4nў3"V5p-fs -ГVMͲ:mWB/ 5uCendstream +ГVMͲ:mWB/ 5uCendstream endobj 977 0 obj << /Type /Font @@ -14748,14 +14748,14 @@ endobj /FirstChar 2 /LastChar 216 /Widths 2840 0 R -/BaseFont /JTEWKS+URWPalladioL-Roma +/BaseFont /ARQOPU+URWPalladioL-Roma /FontDescriptor 975 0 R >> endobj 975 0 obj << /Ascent 715 /CapHeight 680 /Descent -282 -/FontName /JTEWKS+URWPalladioL-Roma +/FontName /ARQOPU+URWPalladioL-Roma /ItalicAngle 0 /StemV 84 /XHeight 469 @@ -14778,7 +14778,7 @@ stream xڬzce߳eU]e۶m[lvm۶mrMOop"̽re;8dD ʴ&#S13-#%@V`cB CF&hjl 1t6"T75!15&db"d!#{8Z[8RŠ/?!F܎ /FeSSBg SB3KSBayMI9qB -q9UBqS;SGCB#KcBKcS;'SJB3#Ϳ-v&DKЉА6SwcS\4NN - @higlbv3;FS89;;Z;ͪ "o<- dM0i0v:Z9:;Ȕo`dig_ hM MlL;U'Vǿv,Lm`4vQ322?|j?3C ƃ ^7%!ts"H?"wC{;6C(C%Zx{qH:m_1h$fnj`llAhfhKڙ:XڙU_$ed`o> Kcko.S;N@"N..!*NިS_j^,?  hYi|8Y}/_kYCgGKwBeOJLegC;.U׉[5覦0+c`_u#S"}#!*E5^=JvGRTc}6?{SMq}H( ;٩J3.ԣndvԎJ> f:nP>#5ġu!6! O:sh|td:'  Kcko.S;N@"N,+/+.DިS_j^,?  hYi|8Y}/_kYCgGKwBeOJLegC;.U׉[5覦0+c`_u#S"}#!*E5^=JvGRTc}6?{SMq}H( ;٩J3.ԣndvԎJ> f:nP>#5ġu!6! O:sh|td:' gD>ZA\$w>(UN[SAD"B0t7<dC{z-67Tܧ p"(`h/w7Ȕ U6S +T~T&֪I z {Nʀ6qZ(X(Zy~ťِʛH#P -5O3U.) @XK`0A2?’1*\& Ese`-_}t`C;]t:#?=*reZN -a:-;""ȶ'(bP$&&ydG<#{BTd/Y`(JsmjdѦ#]CdH A/6N#~LZ{u!9LKi7uc>OvI7&^xPՕAN:+(2]I[ʵ`?B``i?^ endstream +5O3U.) @XK`0A2?’1*\& Ese`-_}t`C;]t:#?=*reZN -a:-;""ȶ'(bP$&&ydG<#{BTd/Y`(JsmjdѦ#]CdH A/6N#~LZ{u!9LKi7uc>OvI7&^xPՕAN:+(2]I[ʵ`?B``i?endstream endobj 954 0 obj << /Type /Font @@ -14887,14 +14887,14 @@ endobj /FirstChar 2 /LastChar 151 /Widths 2841 0 R -/BaseFont /WIWHEG+URWPalladioL-Bold +/BaseFont /SMOMGB+URWPalladioL-Bold /FontDescriptor 952 0 R >> endobj 952 0 obj << /Ascent 708 /CapHeight 672 /Descent -266 -/FontName /WIWHEG+URWPalladioL-Bold +/FontName /SMOMGB+URWPalladioL-Bold /ItalicAngle 0 /StemV 123 /XHeight 471 @@ -16860,7 +16860,7 @@ endobj >> endobj 2854 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() -/CreationDate (D:20140110170939Z) +/CreationDate (D:20140117011504Z) /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref @@ -16872,943 +16872,943 @@ xref 0000000000 00000 f 0000000009 00000 n 0000349948 00000 n -0001233137 00000 n +0001233140 00000 n 0000000054 00000 n 0000000086 00000 n 0000350075 00000 n -0001233065 00000 n +0001233068 00000 n 0000000133 00000 n 0000000173 00000 n 0000350203 00000 n -0001232979 00000 n +0001232982 00000 n 0000000221 00000 n 0000000273 00000 n 0000350331 00000 n -0001232893 00000 n +0001232896 00000 n 0000000321 00000 n 0000000377 00000 n 0000354617 00000 n -0001232783 00000 n +0001232786 00000 n 0000000425 00000 n 0000000478 00000 n 0000354744 00000 n -0001232709 00000 n +0001232712 00000 n 0000000531 00000 n 0000000572 00000 n 0000354872 00000 n -0001232622 00000 n +0001232625 00000 n 0000000625 00000 n 0000000674 00000 n 0000354999 00000 n -0001232535 00000 n +0001232538 00000 n 0000000727 00000 n 0000000757 00000 n 0000359296 00000 n -0001232411 00000 n +0001232414 00000 n 0000000810 00000 n 0000000861 00000 n 0000359424 00000 n -0001232337 00000 n +0001232340 00000 n 0000000919 00000 n 0000000964 00000 n 0000359552 00000 n -0001232250 00000 n +0001232253 00000 n 0000001022 00000 n 0000001062 00000 n 0000359680 00000 n -0001232176 00000 n +0001232179 00000 n 0000001120 00000 n 0000001162 00000 n 0000362665 00000 n -0001232052 00000 n +0001232055 00000 n 0000001215 00000 n 0000001260 00000 n 0000362793 00000 n -0001231991 00000 n +0001231994 00000 n 0000001318 00000 n 0000001355 00000 n 0000362921 00000 n -0001231917 00000 n +0001231920 00000 n 0000001408 00000 n 0000001463 00000 n 0000365868 00000 n -0001231792 00000 n +0001231795 00000 n 0000001509 00000 n 0000001556 00000 n 0000365996 00000 n -0001231718 00000 n +0001231721 00000 n 0000001604 00000 n 0000001648 00000 n 0000366124 00000 n -0001231631 00000 n +0001231634 00000 n 0000001696 00000 n 0000001735 00000 n 0000366252 00000 n -0001231544 00000 n +0001231547 00000 n 0000001783 00000 n 0000001825 00000 n 0000366379 00000 n -0001231457 00000 n +0001231460 00000 n 0000001873 00000 n 0000001936 00000 n 0000367456 00000 n -0001231383 00000 n +0001231386 00000 n 0000001984 00000 n 0000002034 00000 n 0000369115 00000 n -0001231255 00000 n +0001231258 00000 n 0000002080 00000 n 0000002126 00000 n 0000369242 00000 n -0001231142 00000 n +0001231145 00000 n 0000002174 00000 n 0000002218 00000 n 0000369370 00000 n -0001231066 00000 n +0001231069 00000 n 0000002271 00000 n 0000002323 00000 n 0000369498 00000 n -0001230989 00000 n +0001230992 00000 n 0000002377 00000 n 0000002436 00000 n 0000371947 00000 n -0001230898 00000 n +0001230901 00000 n 0000002485 00000 n 0000002523 00000 n 0000375285 00000 n -0001230781 00000 n +0001230784 00000 n 0000002572 00000 n 0000002618 00000 n 0000375413 00000 n -0001230663 00000 n +0001230666 00000 n 0000002672 00000 n 0000002739 00000 n 0000375541 00000 n -0001230584 00000 n +0001230587 00000 n 0000002798 00000 n 0000002842 00000 n 0000375670 00000 n -0001230505 00000 n +0001230508 00000 n 0000002901 00000 n 0000002949 00000 n 0000382656 00000 n -0001230426 00000 n +0001230429 00000 n 0000003003 00000 n 0000003036 00000 n 0000388281 00000 n -0001230293 00000 n +0001230296 00000 n 0000003083 00000 n 0000003126 00000 n 0000388410 00000 n -0001230214 00000 n +0001230217 00000 n 0000003175 00000 n 0000003205 00000 n 0000388539 00000 n -0001230082 00000 n +0001230085 00000 n 0000003254 00000 n 0000003292 00000 n 0000393048 00000 n -0001230017 00000 n +0001230020 00000 n 0000003346 00000 n 0000003388 00000 n 0000393177 00000 n -0001229924 00000 n +0001229927 00000 n 0000003437 00000 n 0000003496 00000 n 0000393306 00000 n -0001229792 00000 n +0001229795 00000 n 0000003545 00000 n 0000003578 00000 n 0000397225 00000 n -0001229727 00000 n +0001229730 00000 n 0000003632 00000 n 0000003681 00000 n 0000400239 00000 n -0001229595 00000 n +0001229598 00000 n 0000003730 00000 n 0000003758 00000 n 0000403019 00000 n -0001229477 00000 n +0001229480 00000 n 0000003812 00000 n 0000003881 00000 n 0000403148 00000 n -0001229398 00000 n +0001229401 00000 n 0000003940 00000 n 0000003988 00000 n 0000403276 00000 n -0001229319 00000 n +0001229322 00000 n 0000004047 00000 n 0000004092 00000 n 0000403405 00000 n -0001229226 00000 n +0001229229 00000 n 0000004146 00000 n 0000004214 00000 n 0000403534 00000 n -0001229133 00000 n +0001229136 00000 n 0000004268 00000 n 0000004338 00000 n 0000407203 00000 n -0001229040 00000 n +0001229043 00000 n 0000004392 00000 n 0000004455 00000 n 0000407332 00000 n -0001228947 00000 n +0001228950 00000 n 0000004509 00000 n 0000004564 00000 n 0000407460 00000 n -0001228868 00000 n +0001228871 00000 n 0000004618 00000 n 0000004650 00000 n 0000407588 00000 n -0001228775 00000 n +0001228778 00000 n 0000004699 00000 n 0000004727 00000 n 0000411357 00000 n -0001228682 00000 n +0001228685 00000 n 0000004776 00000 n 0000004808 00000 n 0000411486 00000 n -0001228550 00000 n +0001228553 00000 n 0000004857 00000 n 0000004887 00000 n 0000411615 00000 n -0001228471 00000 n +0001228474 00000 n 0000004941 00000 n 0000004982 00000 n 0000415413 00000 n -0001228378 00000 n +0001228381 00000 n 0000005036 00000 n 0000005078 00000 n 0000415542 00000 n -0001228299 00000 n +0001228302 00000 n 0000005132 00000 n 0000005177 00000 n 0000420866 00000 n -0001228166 00000 n +0001228169 00000 n 0000005226 00000 n 0000005294 00000 n 0000420995 00000 n -0001228087 00000 n +0001228090 00000 n 0000005348 00000 n 0000005408 00000 n 0000421124 00000 n -0001227994 00000 n +0001227997 00000 n 0000005462 00000 n 0000005513 00000 n 0000425392 00000 n -0001227901 00000 n +0001227904 00000 n 0000005567 00000 n 0000005621 00000 n 0000428374 00000 n -0001227808 00000 n +0001227811 00000 n 0000005675 00000 n 0000005721 00000 n 0000428503 00000 n -0001227715 00000 n +0001227718 00000 n 0000005775 00000 n 0000005817 00000 n 0000428632 00000 n -0001227622 00000 n +0001227625 00000 n 0000005871 00000 n 0000005922 00000 n 0000428761 00000 n -0001227529 00000 n +0001227532 00000 n 0000005976 00000 n 0000006025 00000 n 0000431520 00000 n -0001227436 00000 n +0001227439 00000 n 0000006079 00000 n 0000006136 00000 n 0000431649 00000 n -0001227343 00000 n +0001227346 00000 n 0000006190 00000 n 0000006245 00000 n 0000431778 00000 n -0001227250 00000 n +0001227253 00000 n 0000006300 00000 n 0000006356 00000 n 0000431906 00000 n -0001227157 00000 n +0001227160 00000 n 0000006411 00000 n 0000006472 00000 n 0000432034 00000 n -0001227064 00000 n +0001227067 00000 n 0000006527 00000 n 0000006573 00000 n 0000432163 00000 n -0001226985 00000 n +0001226988 00000 n 0000006628 00000 n 0000006671 00000 n 0000436027 00000 n -0001226853 00000 n +0001226856 00000 n 0000006721 00000 n 0000006777 00000 n 0000436156 00000 n -0001226774 00000 n +0001226777 00000 n 0000006832 00000 n 0000006878 00000 n 0000436285 00000 n -0001226695 00000 n +0001226698 00000 n 0000006933 00000 n 0000006980 00000 n 0000439687 00000 n -0001226563 00000 n +0001226566 00000 n 0000007030 00000 n 0000007087 00000 n 0000439816 00000 n -0001226445 00000 n +0001226448 00000 n 0000007142 00000 n 0000007182 00000 n 0000442484 00000 n -0001226366 00000 n +0001226369 00000 n 0000007242 00000 n 0000007315 00000 n 0000442613 00000 n -0001226273 00000 n +0001226276 00000 n 0000007375 00000 n 0000007448 00000 n 0000445330 00000 n -0001226194 00000 n +0001226197 00000 n 0000007508 00000 n 0000007565 00000 n 0000447722 00000 n -0001226062 00000 n +0001226065 00000 n 0000007620 00000 n 0000007678 00000 n 0000447851 00000 n -0001225983 00000 n +0001225986 00000 n 0000007738 00000 n 0000007815 00000 n 0000447980 00000 n -0001225890 00000 n +0001225893 00000 n 0000007875 00000 n 0000007952 00000 n 0000448109 00000 n -0001225811 00000 n +0001225814 00000 n 0000008012 00000 n 0000008071 00000 n 0000448238 00000 n -0001225718 00000 n +0001225721 00000 n 0000008126 00000 n 0000008170 00000 n 0000450869 00000 n -0001225625 00000 n +0001225628 00000 n 0000008225 00000 n 0000008265 00000 n 0000453677 00000 n -0001225532 00000 n +0001225535 00000 n 0000008320 00000 n 0000008388 00000 n 0000453806 00000 n -0001225453 00000 n +0001225456 00000 n 0000008443 00000 n 0000008514 00000 n 0000457867 00000 n -0001225335 00000 n +0001225338 00000 n 0000008564 00000 n 0000008611 00000 n 0000457996 00000 n -0001225256 00000 n +0001225259 00000 n 0000008666 00000 n 0000008727 00000 n 0000458125 00000 n -0001225177 00000 n +0001225180 00000 n 0000008782 00000 n 0000008852 00000 n 0000460610 00000 n -0001225044 00000 n +0001225047 00000 n 0000008899 00000 n 0000008952 00000 n 0000460739 00000 n -0001224965 00000 n +0001224968 00000 n 0000009001 00000 n 0000009057 00000 n 0000460868 00000 n -0001224886 00000 n +0001224889 00000 n 0000009106 00000 n 0000009155 00000 n 0000465138 00000 n -0001224753 00000 n +0001224756 00000 n 0000009202 00000 n 0000009254 00000 n 0000465267 00000 n -0001224635 00000 n +0001224638 00000 n 0000009303 00000 n 0000009354 00000 n 0000473691 00000 n -0001224517 00000 n +0001224520 00000 n 0000009408 00000 n 0000009453 00000 n 0000473820 00000 n -0001224438 00000 n +0001224441 00000 n 0000009512 00000 n 0000009546 00000 n 0000473949 00000 n -0001224359 00000 n +0001224362 00000 n 0000009605 00000 n 0000009653 00000 n 0000474078 00000 n -0001224241 00000 n +0001224244 00000 n 0000009707 00000 n 0000009747 00000 n 0000476611 00000 n -0001224162 00000 n +0001224165 00000 n 0000009806 00000 n 0000009840 00000 n 0000476740 00000 n -0001224083 00000 n +0001224086 00000 n 0000009899 00000 n 0000009947 00000 n 0000476869 00000 n -0001223950 00000 n +0001223953 00000 n 0000009996 00000 n 0000010046 00000 n 0000480110 00000 n -0001223871 00000 n +0001223874 00000 n 0000010100 00000 n 0000010147 00000 n 0000480238 00000 n -0001223778 00000 n +0001223781 00000 n 0000010201 00000 n 0000010261 00000 n 0000485595 00000 n -0001223685 00000 n +0001223688 00000 n 0000010315 00000 n 0000010367 00000 n 0000485724 00000 n -0001223592 00000 n +0001223595 00000 n 0000010421 00000 n 0000010486 00000 n 0000489194 00000 n -0001223499 00000 n +0001223502 00000 n 0000010540 00000 n 0000010591 00000 n 0000489323 00000 n -0001223406 00000 n +0001223409 00000 n 0000010645 00000 n 0000010709 00000 n 0000489452 00000 n -0001223313 00000 n +0001223316 00000 n 0000010763 00000 n 0000010810 00000 n 0000489581 00000 n -0001223220 00000 n +0001223223 00000 n 0000010864 00000 n 0000010924 00000 n 0000489709 00000 n -0001223127 00000 n +0001223130 00000 n 0000010978 00000 n 0000011029 00000 n 0000493408 00000 n -0001222995 00000 n +0001222998 00000 n 0000011084 00000 n 0000011149 00000 n 0000493537 00000 n -0001222916 00000 n +0001222919 00000 n 0000011209 00000 n 0000011256 00000 n 0000500377 00000 n -0001222823 00000 n +0001222826 00000 n 0000011316 00000 n 0000011364 00000 n 0000507238 00000 n -0001222744 00000 n +0001222747 00000 n 0000011424 00000 n 0000011478 00000 n 0000513667 00000 n -0001222651 00000 n +0001222654 00000 n 0000011533 00000 n 0000011583 00000 n 0000513796 00000 n -0001222558 00000 n +0001222561 00000 n 0000011638 00000 n 0000011701 00000 n 0000513925 00000 n -0001222465 00000 n +0001222468 00000 n 0000011756 00000 n 0000011808 00000 n 0000514054 00000 n -0001222372 00000 n +0001222375 00000 n 0000011863 00000 n 0000011928 00000 n 0000514183 00000 n -0001222279 00000 n +0001222282 00000 n 0000011983 00000 n 0000012035 00000 n 0000520931 00000 n -0001222146 00000 n +0001222149 00000 n 0000012090 00000 n 0000012155 00000 n 0000541866 00000 n -0001222067 00000 n +0001222070 00000 n 0000012215 00000 n 0000012259 00000 n 0000567381 00000 n -0001221974 00000 n +0001221977 00000 n 0000012319 00000 n 0000012358 00000 n 0000567509 00000 n -0001221881 00000 n +0001221884 00000 n 0000012418 00000 n 0000012465 00000 n 0000570958 00000 n -0001221788 00000 n +0001221791 00000 n 0000012525 00000 n 0000012568 00000 n 0000575288 00000 n -0001221695 00000 n +0001221698 00000 n 0000012628 00000 n 0000012667 00000 n 0000579035 00000 n -0001221602 00000 n +0001221605 00000 n 0000012727 00000 n 0000012769 00000 n 0000581953 00000 n -0001221509 00000 n +0001221512 00000 n 0000012829 00000 n 0000012872 00000 n 0000589425 00000 n -0001221416 00000 n +0001221419 00000 n 0000012932 00000 n 0000012975 00000 n 0000593613 00000 n -0001221323 00000 n +0001221326 00000 n 0000013035 00000 n 0000013096 00000 n 0000593741 00000 n -0001221230 00000 n +0001221233 00000 n 0000013157 00000 n 0000013209 00000 n 0000597768 00000 n -0001221137 00000 n +0001221140 00000 n 0000013270 00000 n 0000013323 00000 n 0000601352 00000 n -0001221044 00000 n +0001221047 00000 n 0000013384 00000 n 0000013422 00000 n 0000601480 00000 n -0001220951 00000 n +0001220954 00000 n 0000013483 00000 n 0000013535 00000 n 0000604708 00000 n -0001220858 00000 n +0001220861 00000 n 0000013596 00000 n 0000013640 00000 n 0000608315 00000 n -0001220765 00000 n +0001220768 00000 n 0000013701 00000 n 0000013737 00000 n 0000616760 00000 n -0001220672 00000 n +0001220675 00000 n 0000013798 00000 n 0000013861 00000 n 0000620505 00000 n -0001220579 00000 n +0001220582 00000 n 0000013922 00000 n 0000013972 00000 n 0000627454 00000 n -0001220486 00000 n +0001220489 00000 n 0000014033 00000 n 0000014089 00000 n 0000632152 00000 n -0001220393 00000 n +0001220396 00000 n 0000014150 00000 n 0000014197 00000 n 0000636382 00000 n -0001220300 00000 n +0001220303 00000 n 0000014258 00000 n 0000014326 00000 n 0000643421 00000 n -0001220221 00000 n +0001220224 00000 n 0000014387 00000 n 0000014439 00000 n 0000652184 00000 n -0001220128 00000 n +0001220131 00000 n 0000014494 00000 n 0000014545 00000 n 0000656910 00000 n -0001220035 00000 n +0001220038 00000 n 0000014600 00000 n 0000014664 00000 n 0000662275 00000 n -0001219942 00000 n +0001219945 00000 n 0000014719 00000 n 0000014783 00000 n 0000662404 00000 n -0001219849 00000 n +0001219852 00000 n 0000014838 00000 n 0000014915 00000 n 0000666004 00000 n -0001219756 00000 n +0001219759 00000 n 0000014970 00000 n 0000015027 00000 n 0000666133 00000 n -0001219663 00000 n +0001219666 00000 n 0000015082 00000 n 0000015152 00000 n 0000666262 00000 n -0001219570 00000 n +0001219573 00000 n 0000015207 00000 n 0000015264 00000 n 0000666391 00000 n -0001219477 00000 n +0001219480 00000 n 0000015319 00000 n 0000015389 00000 n 0000670697 00000 n -0001219384 00000 n +0001219387 00000 n 0000015444 00000 n 0000015493 00000 n 0000670826 00000 n -0001219291 00000 n +0001219294 00000 n 0000015548 00000 n 0000015610 00000 n 0000673452 00000 n -0001219198 00000 n +0001219201 00000 n 0000015665 00000 n 0000015714 00000 n 0000681437 00000 n -0001219080 00000 n +0001219083 00000 n 0000015769 00000 n 0000015831 00000 n 0000681566 00000 n -0001219001 00000 n +0001219004 00000 n 0000015891 00000 n 0000015930 00000 n 0000688820 00000 n -0001218908 00000 n +0001218911 00000 n 0000015990 00000 n 0000016024 00000 n 0000688948 00000 n -0001218815 00000 n +0001218818 00000 n 0000016084 00000 n 0000016125 00000 n 0000710733 00000 n -0001218736 00000 n +0001218739 00000 n 0000016185 00000 n 0000016237 00000 n 0000721255 00000 n -0001218604 00000 n +0001218607 00000 n 0000016286 00000 n 0000016319 00000 n 0000721384 00000 n -0001218486 00000 n +0001218489 00000 n 0000016373 00000 n 0000016445 00000 n 0000721513 00000 n -0001218407 00000 n +0001218410 00000 n 0000016504 00000 n 0000016548 00000 n 0000732115 00000 n -0001218328 00000 n +0001218331 00000 n 0000016607 00000 n 0000016660 00000 n 0000732504 00000 n -0001218235 00000 n +0001218238 00000 n 0000016714 00000 n 0000016764 00000 n 0000736346 00000 n -0001218142 00000 n +0001218145 00000 n 0000016818 00000 n 0000016856 00000 n 0000736605 00000 n -0001218049 00000 n +0001218052 00000 n 0000016910 00000 n 0000016959 00000 n 0000739380 00000 n -0001217917 00000 n +0001217920 00000 n 0000017013 00000 n 0000017065 00000 n 0000739505 00000 n -0001217838 00000 n +0001217841 00000 n 0000017124 00000 n 0000017169 00000 n 0000739634 00000 n -0001217745 00000 n +0001217748 00000 n 0000017228 00000 n 0000017280 00000 n 0000739763 00000 n -0001217652 00000 n +0001217655 00000 n 0000017339 00000 n 0000017392 00000 n 0000742206 00000 n -0001217573 00000 n +0001217576 00000 n 0000017451 00000 n 0000017500 00000 n 0000742335 00000 n -0001217480 00000 n +0001217483 00000 n 0000017554 00000 n 0000017634 00000 n 0000746657 00000 n -0001217401 00000 n +0001217404 00000 n 0000017688 00000 n 0000017737 00000 n 0000750163 00000 n -0001217283 00000 n +0001217286 00000 n 0000017786 00000 n 0000017826 00000 n 0000750422 00000 n -0001217204 00000 n +0001217207 00000 n 0000017885 00000 n 0000017932 00000 n 0000753851 00000 n -0001217086 00000 n +0001217089 00000 n 0000017986 00000 n 0000018031 00000 n 0000753980 00000 n -0001217007 00000 n +0001217010 00000 n 0000018090 00000 n 0000018149 00000 n 0000757319 00000 n -0001216914 00000 n +0001216917 00000 n 0000018208 00000 n 0000018272 00000 n 0000757578 00000 n -0001216821 00000 n +0001216824 00000 n 0000018331 00000 n 0000018387 00000 n 0000761762 00000 n -0001216728 00000 n +0001216731 00000 n 0000018446 00000 n 0000018504 00000 n 0000763934 00000 n -0001216649 00000 n +0001216652 00000 n 0000018563 00000 n 0000018625 00000 n 0000765719 00000 n -0001216516 00000 n +0001216519 00000 n 0000018672 00000 n 0000018724 00000 n 0000765847 00000 n -0001216437 00000 n +0001216440 00000 n 0000018773 00000 n 0000018817 00000 n 0000769646 00000 n -0001216305 00000 n +0001216308 00000 n 0000018866 00000 n 0000018907 00000 n 0000769775 00000 n -0001216226 00000 n +0001216229 00000 n 0000018961 00000 n 0000019009 00000 n 0000769904 00000 n -0001216147 00000 n +0001216150 00000 n 0000019063 00000 n 0000019114 00000 n 0000770032 00000 n -0001216068 00000 n +0001216071 00000 n 0000019163 00000 n 0000019210 00000 n 0000774292 00000 n -0001215935 00000 n +0001215938 00000 n 0000019257 00000 n 0000019294 00000 n 0000774421 00000 n -0001215817 00000 n +0001215820 00000 n 0000019343 00000 n 0000019382 00000 n 0000774550 00000 n -0001215752 00000 n +0001215755 00000 n 0000019436 00000 n 0000019514 00000 n 0000774679 00000 n -0001215659 00000 n +0001215662 00000 n 0000019563 00000 n 0000019630 00000 n 0000774808 00000 n -0001215580 00000 n +0001215583 00000 n 0000019679 00000 n 0000019724 00000 n 0000778249 00000 n -0001215447 00000 n +0001215450 00000 n 0000019772 00000 n 0000019804 00000 n 0000778378 00000 n -0001215329 00000 n +0001215332 00000 n 0000019853 00000 n 0000019892 00000 n 0000778507 00000 n -0001215264 00000 n +0001215267 00000 n 0000019946 00000 n 0000020007 00000 n 0000782189 00000 n -0001215132 00000 n +0001215135 00000 n 0000020056 00000 n 0000020113 00000 n 0000782318 00000 n -0001215067 00000 n +0001215070 00000 n 0000020167 00000 n 0000020216 00000 n 0000782447 00000 n -0001214935 00000 n +0001214938 00000 n 0000020265 00000 n 0000020327 00000 n 0000782576 00000 n -0001214856 00000 n +0001214859 00000 n 0000020381 00000 n 0000020436 00000 n 0000807418 00000 n -0001214763 00000 n +0001214766 00000 n 0000020490 00000 n 0000020531 00000 n 0000807547 00000 n -0001214684 00000 n +0001214687 00000 n 0000020585 00000 n 0000020637 00000 n 0000807936 00000 n -0001214566 00000 n +0001214569 00000 n 0000020686 00000 n 0000020736 00000 n 0000810757 00000 n -0001214487 00000 n +0001214490 00000 n 0000020790 00000 n 0000020828 00000 n 0000810886 00000 n -0001214394 00000 n +0001214397 00000 n 0000020882 00000 n 0000020919 00000 n 0000811015 00000 n -0001214301 00000 n +0001214304 00000 n 0000020973 00000 n 0000021011 00000 n 0000811144 00000 n -0001214208 00000 n +0001214211 00000 n 0000021065 00000 n 0000021117 00000 n 0000814380 00000 n -0001214115 00000 n +0001214118 00000 n 0000021171 00000 n 0000021214 00000 n 0000814508 00000 n -0001213983 00000 n +0001213986 00000 n 0000021268 00000 n 0000021313 00000 n 0000814636 00000 n -0001213904 00000 n +0001213907 00000 n 0000021372 00000 n 0000021438 00000 n 0000817622 00000 n -0001213811 00000 n +0001213814 00000 n 0000021497 00000 n 0000021585 00000 n 0000817751 00000 n -0001213718 00000 n +0001213721 00000 n 0000021644 00000 n 0000021719 00000 n 0000817880 00000 n -0001213625 00000 n +0001213628 00000 n 0000021778 00000 n 0000021863 00000 n 0000820788 00000 n -0001213532 00000 n +0001213535 00000 n 0000021922 00000 n 0000022003 00000 n 0000823249 00000 n -0001213453 00000 n +0001213456 00000 n 0000022062 00000 n 0000022146 00000 n 0000823378 00000 n -0001213374 00000 n +0001213377 00000 n 0000022200 00000 n 0000022244 00000 n 0000826274 00000 n -0001213254 00000 n +0001213257 00000 n 0000022292 00000 n 0000022326 00000 n 0000826403 00000 n -0001213175 00000 n +0001213178 00000 n 0000022375 00000 n 0000022402 00000 n 0000848974 00000 n -0001213082 00000 n +0001213085 00000 n 0000022451 00000 n 0000022479 00000 n 0000852607 00000 n -0001212989 00000 n +0001212992 00000 n 0000022528 00000 n 0000022566 00000 n 0000855811 00000 n -0001212896 00000 n +0001212899 00000 n 0000022615 00000 n 0000022654 00000 n 0000862214 00000 n -0001212803 00000 n +0001212806 00000 n 0000022703 00000 n 0000022743 00000 n 0000864940 00000 n -0001212710 00000 n +0001212713 00000 n 0000022792 00000 n 0000022835 00000 n 0000875077 00000 n -0001212617 00000 n +0001212620 00000 n 0000022884 00000 n 0000022921 00000 n 0000888727 00000 n -0001212524 00000 n +0001212527 00000 n 0000022970 00000 n 0000023007 00000 n 0000892108 00000 n -0001212431 00000 n +0001212434 00000 n 0000023056 00000 n 0000023094 00000 n 0000898633 00000 n -0001212338 00000 n +0001212341 00000 n 0000023144 00000 n 0000023184 00000 n 0000916435 00000 n -0001212245 00000 n +0001212248 00000 n 0000023234 00000 n 0000023272 00000 n 0000919577 00000 n -0001212152 00000 n +0001212155 00000 n 0000023322 00000 n 0000023362 00000 n 0000922492 00000 n -0001212059 00000 n +0001212062 00000 n 0000023412 00000 n 0000023452 00000 n 0000932500 00000 n -0001211966 00000 n +0001211969 00000 n 0000023502 00000 n 0000023532 00000 n 0000940973 00000 n -0001211873 00000 n +0001211876 00000 n 0000023582 00000 n 0000023625 00000 n 0000941427 00000 n -0001211780 00000 n +0001211783 00000 n 0000023675 00000 n 0000023708 00000 n 0000955679 00000 n -0001211687 00000 n +0001211690 00000 n 0000023758 00000 n 0000023787 00000 n 0000974104 00000 n -0001211594 00000 n +0001211597 00000 n 0000023837 00000 n 0000023871 00000 n 0000979694 00000 n -0001211501 00000 n +0001211504 00000 n 0000023921 00000 n 0000023958 00000 n 0000982902 00000 n -0001211408 00000 n +0001211411 00000 n 0000024008 00000 n 0000024045 00000 n 0000988586 00000 n -0001211315 00000 n +0001211318 00000 n 0000024095 00000 n 0000024128 00000 n 0000989040 00000 n -0001211222 00000 n +0001211225 00000 n 0000024178 00000 n 0000024212 00000 n 0000991752 00000 n -0001211129 00000 n +0001211132 00000 n 0000024262 00000 n 0000024301 00000 n 0000993865 00000 n -0001211050 00000 n +0001211053 00000 n 0000024351 00000 n 0000024385 00000 n 0000024758 00000 n @@ -17817,10 +17817,10 @@ xref 0000024438 00000 n 0000289555 00000 n 0000289618 00000 n -0001205004 00000 n -0001178862 00000 n -0001204830 00000 n -0001206050 00000 n +0001205007 00000 n +0001178865 00000 n +0001204833 00000 n +0001206053 00000 n 0000026189 00000 n 0000026382 00000 n 0000026462 00000 n @@ -17840,12 +17840,12 @@ xref 0000290936 00000 n 0000289781 00000 n 0000291058 00000 n -0001177626 00000 n -0001151007 00000 n -0001177452 00000 n -0001150322 00000 n -0001148178 00000 n -0001150158 00000 n +0001177629 00000 n +0001151010 00000 n +0001177455 00000 n +0001150325 00000 n +0001148180 00000 n +0001150161 00000 n 0000302898 00000 n 0000294171 00000 n 0000291206 00000 n @@ -17905,9 +17905,9 @@ xref 0000306338 00000 n 0000302983 00000 n 0000316340 00000 n -0001147590 00000 n -0001130169 00000 n -0001147404 00000 n +0001147592 00000 n +0001130171 00000 n +0001147406 00000 n 0000306988 00000 n 0000307152 00000 n 0000307316 00000 n @@ -18041,9 +18041,9 @@ xref 0000335807 00000 n 0000335975 00000 n 0000336142 00000 n -0001129278 00000 n -0001107944 00000 n -0001129102 00000 n +0001129280 00000 n +0001107946 00000 n +0001129104 00000 n 0000336309 00000 n 0000336477 00000 n 0000336633 00000 n @@ -18101,9 +18101,9 @@ xref 0000345813 00000 n 0000345972 00000 n 0000346131 00000 n -0001106965 00000 n -0001086838 00000 n -0001106790 00000 n +0001106967 00000 n +0001086840 00000 n +0001106792 00000 n 0000346290 00000 n 0000346449 00000 n 0000346607 00000 n @@ -18111,7 +18111,7 @@ xref 0000346924 00000 n 0000347083 00000 n 0000347242 00000 n -0001206171 00000 n +0001206174 00000 n 0000350589 00000 n 0000349822 00000 n 0000347567 00000 n @@ -18121,9 +18121,9 @@ xref 0000350394 00000 n 0000350459 00000 n 0000350524 00000 n -0001085996 00000 n -0001067296 00000 n -0001085821 00000 n +0001085998 00000 n +0001067298 00000 n +0001085823 00000 n 0000355126 00000 n 0000353985 00000 n 0000350717 00000 n @@ -18172,7 +18172,7 @@ xref 0000366593 00000 n 0000367391 00000 n 0000367519 00000 n -0001206296 00000 n +0001206299 00000 n 0000369627 00000 n 0000368924 00000 n 0000367684 00000 n @@ -18196,9 +18196,9 @@ xref 0000375220 00000 n 0000375349 00000 n 0000375476 00000 n -0001066574 00000 n -0001053197 00000 n -0001066395 00000 n +0001066576 00000 n +0001053199 00000 n +0001066397 00000 n 0000375734 00000 n 0000380671 00000 n 0000380110 00000 n @@ -18219,7 +18219,7 @@ xref 0000383191 00000 n 0000383041 00000 n 0000383317 00000 n -0001206421 00000 n +0001206424 00000 n 0000386078 00000 n 0000388668 00000 n 0000385913 00000 n @@ -18229,12 +18229,12 @@ xref 0000388474 00000 n 0000387721 00000 n 0000387883 00000 n -0001052291 00000 n -0001042271 00000 n -0001052117 00000 n -0001041707 00000 n -0001032621 00000 n -0001041532 00000 n +0001052293 00000 n +0001042273 00000 n +0001052119 00000 n +0001041709 00000 n +0001032622 00000 n +0001041534 00000 n 0000388603 00000 n 0000388045 00000 n 0000387550 00000 n @@ -18248,9 +18248,9 @@ xref 0000388839 00000 n 0000392983 00000 n 0000393112 00000 n -0001032020 00000 n +0001032021 00000 n 0001019599 00000 n -0001031841 00000 n +0001031842 00000 n 0000393241 00000 n 0000392655 00000 n 0000392821 00000 n @@ -18280,7 +18280,7 @@ xref 0000403340 00000 n 0000403469 00000 n 0000403598 00000 n -0001206546 00000 n +0001206549 00000 n 0000407717 00000 n 0000406821 00000 n 0000403805 00000 n @@ -18312,7 +18312,7 @@ xref 0000418128 00000 n 0000420801 00000 n 0001019324 00000 n -0001015965 00000 n +0001015966 00000 n 0001019145 00000 n 0000420930 00000 n 0000421059 00000 n @@ -18322,12 +18322,12 @@ xref 0000421424 00000 n 0000425327 00000 n 0000425456 00000 n -0001015610 00000 n +0001015611 00000 n 0001013613 00000 n -0001015445 00000 n +0001015446 00000 n 0000424998 00000 n 0000425162 00000 n -0001206671 00000 n +0001206674 00000 n 0000875141 00000 n 0000892172 00000 n 0000428887 00000 n @@ -18374,7 +18374,7 @@ xref 0000442898 00000 n 0000445265 00000 n 0000445394 00000 n -0001206796 00000 n +0001206799 00000 n 0000448367 00000 n 0000447531 00000 n 0000445573 00000 n @@ -18416,7 +18416,7 @@ xref 0000461247 00000 n 0000461097 00000 n 0000461373 00000 n -0001206921 00000 n +0001206924 00000 n 0000465525 00000 n 0000464759 00000 n 0000461480 00000 n @@ -18462,7 +18462,7 @@ xref 0000485659 00000 n 0000485220 00000 n 0000485371 00000 n -0001207046 00000 n +0001207049 00000 n 0000994592 00000 n 0000489838 00000 n 0000488438 00000 n @@ -18503,7 +18503,7 @@ xref 0000504051 00000 n 0000507173 00000 n 0000507302 00000 n -0001207171 00000 n +0001207174 00000 n 0000510891 00000 n 0000510570 00000 n 0000507495 00000 n @@ -18538,7 +18538,7 @@ xref 0000518962 00000 n 0000520866 00000 n 0000520995 00000 n -0001207296 00000 n +0001207299 00000 n 0000524632 00000 n 0000524441 00000 n 0000521174 00000 n @@ -18571,7 +18571,7 @@ xref 0000545624 00000 n 0000545689 00000 n 0000545753 00000 n -0001207421 00000 n +0001207424 00000 n 0000550885 00000 n 0000549757 00000 n 0000545946 00000 n @@ -18610,7 +18610,7 @@ xref 0000570893 00000 n 0000571022 00000 n 0000570726 00000 n -0001207546 00000 n +0001207549 00000 n 0000575417 00000 n 0000574726 00000 n 0000571244 00000 n @@ -18646,7 +18646,7 @@ xref 0000593220 00000 n 0000593805 00000 n 0000593394 00000 n -0001207671 00000 n +0001207674 00000 n 0000597895 00000 n 0000597577 00000 n 0000593984 00000 n @@ -18683,7 +18683,7 @@ xref 0000616695 00000 n 0000616532 00000 n 0000616824 00000 n -0001207796 00000 n +0001207799 00000 n 0000746721 00000 n 0000620634 00000 n 0000620124 00000 n @@ -18715,7 +18715,7 @@ xref 0000632409 00000 n 0000636317 00000 n 0000636446 00000 n -0001207921 00000 n +0001207924 00000 n 0000640643 00000 n 0000640452 00000 n 0000636652 00000 n @@ -18751,7 +18751,7 @@ xref 0000661676 00000 n 0000661856 00000 n 0000662032 00000 n -0001208046 00000 n +0001208049 00000 n 0000666519 00000 n 0000665638 00000 n 0000662661 00000 n @@ -18781,7 +18781,7 @@ xref 0000677982 00000 n 0000676894 00000 n 0000678108 00000 n -0001208171 00000 n +0001208174 00000 n 0000681825 00000 n 0000681246 00000 n 0000678274 00000 n @@ -18853,7 +18853,7 @@ xref 0000704990 00000 n 0000705152 00000 n 0000705313 00000 n -0001208296 00000 n +0001208299 00000 n 0000710861 00000 n 0000709343 00000 n 0000705644 00000 n @@ -18897,7 +18897,7 @@ xref 0000728514 00000 n 0000728579 00000 n 0000728644 00000 n -0001208421 00000 n +0001208424 00000 n 0000732633 00000 n 0000731924 00000 n 0000728824 00000 n @@ -18948,7 +18948,7 @@ xref 0000750292 00000 n 0000750357 00000 n 0000749938 00000 n -0001208546 00000 n +0001208549 00000 n 0000754239 00000 n 0000753660 00000 n 0000750665 00000 n @@ -19000,7 +19000,7 @@ xref 0000769710 00000 n 0000769839 00000 n 0000769967 00000 n -0001208671 00000 n +0001208674 00000 n 0000771194 00000 n 0000771003 00000 n 0000770388 00000 n @@ -19041,7 +19041,7 @@ xref 0000781949 00000 n 0000782705 00000 n 0000782769 00000 n -0001208796 00000 n +0001208799 00000 n 0000789723 00000 n 0000785895 00000 n 0000782989 00000 n @@ -19262,7 +19262,7 @@ xref 0000814155 00000 n 0000814572 00000 n 0000814700 00000 n -0001208921 00000 n +0001208924 00000 n 0000818009 00000 n 0000817431 00000 n 0000814892 00000 n @@ -19300,7 +19300,7 @@ xref 0000830866 00000 n 0000830931 00000 n 0000830996 00000 n -0001209046 00000 n +0001209049 00000 n 0000834824 00000 n 0000834568 00000 n 0000831217 00000 n @@ -19342,7 +19342,7 @@ xref 0000852736 00000 n 0000852801 00000 n 0000852866 00000 n -0001209171 00000 n +0001209174 00000 n 0000856135 00000 n 0000855427 00000 n 0000853072 00000 n @@ -19394,7 +19394,7 @@ xref 0000872057 00000 n 0000872122 00000 n 0000872187 00000 n -0001209296 00000 n +0001209299 00000 n 0000875466 00000 n 0000874756 00000 n 0000872378 00000 n @@ -19441,7 +19441,7 @@ xref 0000892302 00000 n 0000892367 00000 n 0000892432 00000 n -0001209421 00000 n +0001209424 00000 n 0000895878 00000 n 0000895557 00000 n 0000892653 00000 n @@ -19477,7 +19477,7 @@ xref 0000913445 00000 n 0000913510 00000 n 0000913575 00000 n -0001209546 00000 n +0001209549 00000 n 0000916823 00000 n 0000916179 00000 n 0000913809 00000 n @@ -19531,7 +19531,7 @@ xref 0000932694 00000 n 0000932759 00000 n 0000932824 00000 n -0001209671 00000 n +0001209674 00000 n 0000935845 00000 n 0000935654 00000 n 0000933031 00000 n @@ -19573,7 +19573,7 @@ xref 0000950004 00000 n 0000953163 00000 n 0000953228 00000 n -0001209796 00000 n +0001209799 00000 n 0000955872 00000 n 0000955294 00000 n 0000953421 00000 n @@ -19613,7 +19613,7 @@ xref 0000974233 00000 n 0000974298 00000 n 0000974363 00000 n -0001209921 00000 n +0001209924 00000 n 0000976675 00000 n 0000976354 00000 n 0000974570 00000 n @@ -19677,7 +19677,7 @@ xref 0000992076 00000 n 0000992141 00000 n 0000992206 00000 n -0001210046 00000 n +0001210049 00000 n 0000994384 00000 n 0000993674 00000 n 0000992412 00000 n @@ -19692,41 +19692,41 @@ xref 0000994625 00000 n 0001005969 00000 n 0001013558 00000 n -0001015857 00000 n -0001015826 00000 n +0001015858 00000 n +0001015827 00000 n 0001019544 00000 n -0001032340 00000 n -0001042006 00000 n -0001052741 00000 n -0001066985 00000 n -0001086491 00000 n -0001107557 00000 n -0001129707 00000 n -0001147963 00000 n -0001150809 00000 n -0001150579 00000 n -0001178227 00000 n -0001205556 00000 n -0001210135 00000 n -0001210260 00000 n -0001210386 00000 n -0001210512 00000 n -0001210638 00000 n -0001210764 00000 n -0001210863 00000 n -0001210973 00000 n -0001233247 00000 n -0001258330 00000 n -0001258371 00000 n -0001258411 00000 n -0001258545 00000 n +0001032341 00000 n +0001042008 00000 n +0001052743 00000 n +0001066987 00000 n +0001086493 00000 n +0001107559 00000 n +0001129709 00000 n +0001147965 00000 n +0001150812 00000 n +0001150582 00000 n +0001178230 00000 n +0001205559 00000 n +0001210138 00000 n +0001210263 00000 n +0001210389 00000 n +0001210515 00000 n +0001210641 00000 n +0001210767 00000 n +0001210866 00000 n +0001210976 00000 n +0001233250 00000 n +0001258333 00000 n +0001258374 00000 n +0001258414 00000 n +0001258548 00000 n trailer << /Size 2855 /Root 2853 0 R /Info 2854 0 R -/ID [ ] +/ID [ ] >> startxref -1258803 +1258806 %%EOF diff --git a/lib/dns/api b/lib/dns/api index 1bf8d3fa..cc5437d0 100644 --- a/lib/dns/api +++ b/lib/dns/api @@ -5,5 +5,5 @@ # 9.9: 90-109 # 9.9-sub: 130-139 LIBINTERFACE = 102 -LIBREVISION = 1 +LIBREVISION = 2 LIBAGE = 2 diff --git a/lib/dns/dispatch.c b/lib/dns/dispatch.c index 77010414..7af8e644 100644 --- a/lib/dns/dispatch.c +++ b/lib/dns/dispatch.c @@ -778,6 +778,7 @@ port_search(dns_dispatch_t *disp, in_port_t port) { static dispportentry_t * new_portentry(dns_dispatch_t *disp, in_port_t port) { dispportentry_t *portentry; + dns_qid_t *qid; REQUIRE(disp->port_table != NULL); @@ -786,10 +787,13 @@ new_portentry(dns_dispatch_t *disp, in_port_t port) { return (portentry); portentry->port = port; - portentry->refs = 0; + portentry->refs = 1; ISC_LINK_INIT(portentry, link); + qid = DNS_QID(disp); + LOCK(&qid->lock); ISC_LIST_APPEND(disp->port_table[port % DNS_DISPATCH_PORTTABLESIZE], portentry, link); + UNLOCK(&qid->lock); return (portentry); } @@ -800,7 +804,6 @@ new_portentry(dns_dispatch_t *disp, in_port_t port) { static void deref_portentry(dns_dispatch_t *disp, dispportentry_t **portentryp) { dispportentry_t *portentry = *portentryp; - isc_boolean_t unlink = ISC_FALSE; dns_qid_t *qid; REQUIRE(disp->port_table != NULL); @@ -809,15 +812,14 @@ deref_portentry(dns_dispatch_t *disp, dispportentry_t **portentryp) { qid = DNS_QID(disp); LOCK(&qid->lock); portentry->refs--; - unlink = ISC_TF(portentry->refs == 0); - UNLOCK(&qid->lock); - if (unlink) { + if (portentry->refs == 0) { ISC_LIST_UNLINK(disp->port_table[portentry->port % DNS_DISPATCH_PORTTABLESIZE], portentry, link); isc_mempool_put(disp->portpool, portentry); } + UNLOCK(&qid->lock); *portentryp = NULL; } @@ -939,8 +941,11 @@ get_dispsocket(dns_dispatch_t *disp, isc_sockaddr_t *dest, result = ISC_R_NOMEMORY; break; } + } else { + LOCK(&qid->lock); + portentry->refs++; + UNLOCK(&qid->lock); } - portentry->refs++; break; } else if (result == ISC_R_NOPERM) { char buf[ISC_SOCKADDR_FORMATSIZE]; diff --git a/lib/dns/include/dns/Makefile.in b/lib/dns/include/dns/Makefile.in index 1a69f2c8..6ff682f7 100644 --- a/lib/dns/include/dns/Makefile.in +++ b/lib/dns/include/dns/Makefile.in @@ -1,4 +1,4 @@ -# Copyright (C) 2004, 2007-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2004, 2007-2009, 2011, 2012, 2014 Internet Systems Consortium, Inc. ("ISC") # Copyright (C) 1998-2003 Internet Software Consortium. # # Permission to use, copy, modify, and/or distribute this software for any @@ -22,7 +22,8 @@ top_srcdir = @top_srcdir@ @BIND9_VERSION@ HEADERS = acl.h adb.h byaddr.h cache.h callbacks.h cert.h compress.h \ - clientinfo.h db.h dbiterator.h dbtable.h diff.h dispatch.h \ + client.h clientinfo.h compress.h \ + db.h dbiterator.h dbtable.h diff.h dispatch.h \ dlz.h dnssec.h ds.h events.h fixedname.h iptable.h journal.h \ keyflags.h keytable.h keyvalues.h lib.h log.h \ master.h masterdump.h message.h name.h ncache.h nsec.h \ @@ -30,7 +31,7 @@ HEADERS = acl.h adb.h byaddr.h cache.h callbacks.h cert.h compress.h \ rdata.h rdataclass.h rdatalist.h rdataset.h rdatasetiter.h \ rdataslab.h rdatatype.h request.h resolver.h result.h \ rootns.h rpz.h sdb.h sdlz.h secalg.h secproto.h soa.h ssu.h \ - tcpmsg.h time.h tkey.h tsig.h ttl.h types.h \ + tcpmsg.h time.h tkey.h tsec.h tsig.h ttl.h types.h \ validator.h version.h view.h xfrin.h zone.h zonekey.h zt.h GENHEADERS = enumclass.h enumtype.h rdatastruct.h diff --git a/lib/dns/rdata/generic/rrsig_46.c b/lib/dns/rdata/generic/rrsig_46.c index 58a327c0..5dd5a31a 100644 --- a/lib/dns/rdata/generic/rrsig_46.c +++ b/lib/dns/rdata/generic/rrsig_46.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004, 2005, 2007, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004, 2005, 2007, 2009, 2011, 2012, 2014 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -90,7 +90,20 @@ fromtext_rrsig(ARGS_FROMTEXT) { */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, ISC_FALSE)); - RETTOK(dns_time32_fromtext(DNS_AS_STR(token), &time_expire)); + if (strlen(DNS_AS_STR(token)) <= 10U && + *DNS_AS_STR(token) != '-' && *DNS_AS_STR(token) != '+') { + char *end; + unsigned long u; + isc_uint64_t u64; + + u64 = u = strtoul(DNS_AS_STR(token), &end, 10); + if (u == ULONG_MAX || *end != 0) + RETTOK(DNS_R_SYNTAX); + if (u64 > 0xffffffffUL) + RETTOK(ISC_R_RANGE); + time_expire = u; + } else + RETTOK(dns_time32_fromtext(DNS_AS_STR(token), &time_expire)); RETERR(uint32_tobuffer(time_expire, target)); /* @@ -98,7 +111,20 @@ fromtext_rrsig(ARGS_FROMTEXT) { */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, ISC_FALSE)); - RETTOK(dns_time32_fromtext(DNS_AS_STR(token), &time_signed)); + if (strlen(DNS_AS_STR(token)) <= 10U && + *DNS_AS_STR(token) != '-' && *DNS_AS_STR(token) != '+') { + char *end; + unsigned long u; + isc_uint64_t u64; + + u64 = u = strtoul(DNS_AS_STR(token), &end, 10); + if (u == ULONG_MAX || *end != 0) + RETTOK(DNS_R_SYNTAX); + if (u64 > 0xffffffffUL) + RETTOK(ISC_R_RANGE); + time_signed = u; + } else + RETTOK(dns_time32_fromtext(DNS_AS_STR(token), &time_signed)); RETERR(uint32_tobuffer(time_signed, target)); /* diff --git a/lib/export/isc/Makefile.in b/lib/export/isc/Makefile.in index 46df39df..a92f66f3 100644 --- a/lib/export/isc/Makefile.in +++ b/lib/export/isc/Makefile.in @@ -1,4 +1,4 @@ -# Copyright (C) 2009, 2010, 2012, 2013 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2009, 2010, 2012-2014 Internet Systems Consortium, Inc. ("ISC") # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -73,6 +73,7 @@ OBJS = @ISC_EXTRA_OBJS@ \ rwlock.@O@ safe.@O@ serial.@O@ sha1.@O@ sha2.@O@ \ sockaddr.@O@ stats.@O@ string.@O@ \ symtab.@O@ \ + tm.@O@ \ version.@O@ \ ${APIOBJS} ${ISCDRIVEROBJS} \ ${UNIXOBJS} ${NLSOBJS} ${THREADOBJS} @@ -96,6 +97,7 @@ SRCS = @ISC_EXTRA_SRCS@ \ random.c refcount.c region.c regex.c result.c rwlock.c \ safe.c serial.c sha1.c sha2.c sockaddr.c \ stats.c string.c symtab.c \ + tm.c \ version.c \ ${APISRCS} ${ISCDRIVERSRCS} diff --git a/lib/irs/api b/lib/irs/api index 343e4aaf..3f5a2a3b 100644 --- a/lib/irs/api +++ b/lib/irs/api @@ -4,6 +4,6 @@ # 9.8: 80-89, 120-129 # 9.9: 90-109 # 9.9-sub: 130-139 -LIBINTERFACE = 90 -LIBREVISION = 2 +LIBINTERFACE = 91 +LIBREVISION = 0 LIBAGE = 0 diff --git a/lib/irs/include/irs/Makefile.in b/lib/irs/include/irs/Makefile.in index 63e7fd6b..eca98eb1 100644 --- a/lib/irs/include/irs/Makefile.in +++ b/lib/irs/include/irs/Makefile.in @@ -1,4 +1,4 @@ -# Copyright (C) 2009, 2012 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2009, 2012, 2014 Internet Systems Consortium, Inc. ("ISC") # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -39,6 +39,8 @@ install:: installdirs done ${INSTALL_DATA} netdb.h ${DESTDIR}${includedir}/irs ${INSTALL_DATA} platform.h ${DESTDIR}${includedir}/irs + ${INSTALL_DATA} resconf.h ${DESTDIR}${includedir}/irs + ${INSTALL_DATA} types.h ${DESTDIR}${includedir}/irs distclean:: rm -f netdb.h platform.h diff --git a/lib/irs/include/irs/resconf.h b/lib/irs/include/irs/resconf.h index 78c87d51..dec110ad 100644 --- a/lib/irs/include/irs/resconf.h +++ b/lib/irs/include/irs/resconf.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2009, 2014 Internet Systems Consortium, Inc. ("ISC") * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -46,7 +46,12 @@ isc_result_t irs_resconf_load(isc_mem_t *mctx, const char *filename, irs_resconf_t **confp); /*%< * Load the resolver configuration file 'filename' in the "resolv.conf" format, - * and create a new irs_resconf_t object from the configuration. + * and create a new irs_resconf_t object from the configuration. If the file + * is not found ISC_R_FILENOTFOUND is returned with the structure initialized + * as if file contained only: + * + * nameserver ::1 + * nameserver 127.0.0.1 * * Notes: * @@ -55,6 +60,11 @@ irs_resconf_load(isc_mem_t *mctx, const char *filename, irs_resconf_t **confp); * In addition, 'sortlist' is not actually effective; it's parsed, but * the application cannot use the configuration. * + * Returns: + * \li ISC_R_SUCCESS on success + * \li ISC_R_FILENOTFOUND if the file was not found. *confp will be valid. + * \li other on error. + * * Requires: * *\li 'mctx' is a valid memory context. diff --git a/lib/irs/resconf.c b/lib/irs/resconf.c index 15a46baf..cb240079 100644 --- a/lib/irs/resconf.c +++ b/lib/irs/resconf.c @@ -483,7 +483,7 @@ irs_resconf_load(isc_mem_t *mctx, const char *filename, irs_resconf_t **confp) { FILE *fp = NULL; char word[256]; - isc_result_t rval, ret; + isc_result_t rval, ret = ISC_R_SUCCESS; irs_resconf_t *conf; int i, stopchar; @@ -507,45 +507,49 @@ irs_resconf_load(isc_mem_t *mctx, const char *filename, irs_resconf_t **confp) conf->search[i] = NULL; errno = 0; - if ((fp = fopen(filename, "r")) == NULL) { - isc_mem_put(mctx, conf, sizeof(*conf)); - return (ISC_R_INVALIDFILE); - } - - ret = ISC_R_SUCCESS; - do { - stopchar = getword(fp, word, sizeof(word)); - if (stopchar == EOF) { - rval = ISC_R_SUCCESS; - POST(rval); - break; - } - - if (strlen(word) == 0U) - rval = ISC_R_SUCCESS; - else if (strcmp(word, "nameserver") == 0) - rval = resconf_parsenameserver(conf, fp); - else if (strcmp(word, "domain") == 0) - rval = resconf_parsedomain(conf, fp); - else if (strcmp(word, "search") == 0) - rval = resconf_parsesearch(conf, fp); - else if (strcmp(word, "sortlist") == 0) - rval = resconf_parsesortlist(conf, fp); - else if (strcmp(word, "options") == 0) - rval = resconf_parseoption(conf, fp); - else { - /* unrecognised word. Ignore entire line */ - rval = ISC_R_SUCCESS; - stopchar = eatline(fp); + if ((fp = fopen(filename, "r")) != NULL) { + do { + stopchar = getword(fp, word, sizeof(word)); if (stopchar == EOF) { + rval = ISC_R_SUCCESS; + POST(rval); break; } - } - if (ret == ISC_R_SUCCESS && rval != ISC_R_SUCCESS) - ret = rval; - } while (1); - fclose(fp); + if (strlen(word) == 0U) + rval = ISC_R_SUCCESS; + else if (strcmp(word, "nameserver") == 0) + rval = resconf_parsenameserver(conf, fp); + else if (strcmp(word, "domain") == 0) + rval = resconf_parsedomain(conf, fp); + else if (strcmp(word, "search") == 0) + rval = resconf_parsesearch(conf, fp); + else if (strcmp(word, "sortlist") == 0) + rval = resconf_parsesortlist(conf, fp); + else if (strcmp(word, "options") == 0) + rval = resconf_parseoption(conf, fp); + else { + /* unrecognised word. Ignore entire line */ + rval = ISC_R_SUCCESS; + stopchar = eatline(fp); + if (stopchar == EOF) { + break; + } + } + if (ret == ISC_R_SUCCESS && rval != ISC_R_SUCCESS) + ret = rval; + } while (1); + + fclose(fp); + } else { + switch (errno) { + case ENOENT: + break; + default: + isc_mem_put(mctx, conf, sizeof(*conf)); + return (ISC_R_INVALIDFILE); + } + } /* If we don't find a nameserver fall back to localhost */ if (conf->numns == 0) { @@ -575,8 +579,11 @@ irs_resconf_load(isc_mem_t *mctx, const char *filename, irs_resconf_t **confp) if (ret != ISC_R_SUCCESS) irs_resconf_destroy(&conf); - else + else { + if (fp == NULL) + ret = ISC_R_FILENOTFOUND; *confp = conf; + } return (ret); } diff --git a/lib/isc/Makefile.in b/lib/isc/Makefile.in index e8c28214..709771f7 100644 --- a/lib/isc/Makefile.in +++ b/lib/isc/Makefile.in @@ -1,4 +1,4 @@ -# Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2004-2014 Internet Systems Consortium, Inc. ("ISC") # Copyright (C) 1998-2003 Internet Software Consortium. # # Permission to use, copy, modify, and/or distribute this software for any @@ -64,7 +64,8 @@ OBJS = @ISC_EXTRA_OBJS@ \ rwlock.@O@ \ safe.@O@ serial.@O@ sha1.@O@ sha2.@O@ sockaddr.@O@ stats.@O@ \ string.@O@ strtoul.@O@ symtab.@O@ task.@O@ taskpool.@O@ \ - timer.@O@ version.@O@ ${UNIXOBJS} ${NLSOBJS} ${THREADOBJS} + tm.@O@ timer.@O@ version.@O@ \ + ${UNIXOBJS} ${NLSOBJS} ${THREADOBJS} SYMTBLOBJS = backtrace-emptytbl.@O@ # Alphabetically @@ -80,7 +81,7 @@ SRCS = @ISC_EXTRA_SRCS@ \ ratelimiter.c refcount.c region.c regex.c result.c rwlock.c \ safe.c serial.c sha1.c sha2.c sockaddr.c stats.c string.c \ strtoul.c symtab.c symtbl-empty.c task.c taskpool.c timer.c \ - version.c + tm.c version.c LIBS = @LIBS@ diff --git a/lib/isc/api b/lib/isc/api index 07c646d6..a1fe77ff 100644 --- a/lib/isc/api +++ b/lib/isc/api @@ -4,6 +4,6 @@ # 9.8: 80-89, 120-129 # 9.9: 90-109 # 9.9-sub: 130-139 -LIBINTERFACE = 99 +LIBINTERFACE = 100 LIBREVISION = 0 -LIBAGE = 4 +LIBAGE = 5 diff --git a/lib/isc/include/isc/Makefile.in b/lib/isc/include/isc/Makefile.in index 3b2b0369..54524bed 100644 --- a/lib/isc/include/isc/Makefile.in +++ b/lib/isc/include/isc/Makefile.in @@ -1,4 +1,4 @@ -# Copyright (C) 2004-2009, 2012, 2013 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2004-2009, 2012-2014 Internet Systems Consortium, Inc. ("ISC") # Copyright (C) 1998-2001, 2003 Internet Software Consortium. # # Permission to use, copy, modify, and/or distribute this software for any @@ -29,18 +29,16 @@ top_srcdir = @top_srcdir@ HEADERS = app.h assertions.h base64.h bind9.h bitstring.h boolean.h \ buffer.h bufferlist.h commandline.h entropy.h error.h event.h \ eventclass.h file.h formatcheck.h fsaccess.h \ - hash.h heap.h hex.h hmacmd5.h hmacsha.h \ - httpd.h \ - interfaceiter.h @ISC_IPV6_H@ iterated_hash.h lang.h lex.h \ - lfsr.h lib.h list.h log.h \ + hash.h heap.h hex.h hmacmd5.h hmacsha.h httpd.h \ + interfaceiter.h @ISC_IPV6_H@ iterated_hash.h \ + lang.h lex.h lfsr.h lib.h list.h log.h \ magic.h md5.h mem.h msgcat.h msgs.h mutexblock.h \ namespace.h netaddr.h ondestroy.h os.h parseint.h \ print.h quota.h radix.h random.h ratelimiter.h \ refcount.h regex.h region.h resource.h \ result.h resultclass.h rwlock.h safe.h serial.h sha1.h sha2.h \ - sockaddr.h socket.h stdio.h stdlib.h string.h \ - symtab.h \ - task.h taskpool.h timer.h types.h util.h version.h \ + sockaddr.h socket.h stdio.h stdlib.h string.h symtab.h \ + task.h taskpool.h timer.h tm.h types.h util.h version.h \ xml.h SUBDIRS = diff --git a/lib/isc/include/isc/tm.h b/lib/isc/include/isc/tm.h new file mode 100644 index 00000000..44b81480 --- /dev/null +++ b/lib/isc/include/isc/tm.h @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC") + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef ISC_TM_H +#define ISC_TM_H 1 + +/*! \file isc/tm.h + * Provides portable conversion routines for struct tm. + */ +#include + +#include +#include + + +ISC_LANG_BEGINDECLS + +time_t +isc_tm_timegm(struct tm *tm); +/* + * Convert a tm structure to time_t, using UTC rather than the local + * time zone. + */ + +char * +isc_tm_strptime(const char *buf, const char *fmt, struct tm *tm); +/* + * Parse a formatted date string into struct tm. + */ + +ISC_LANG_ENDDECLS + +#endif /* ISC_TIMER_H */ diff --git a/lib/isc/tm.c b/lib/isc/tm.c new file mode 100644 index 00000000..713ce0e5 --- /dev/null +++ b/lib/isc/tm.c @@ -0,0 +1,445 @@ +/* + * Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC") + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/*- + * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code was contributed to The NetBSD Foundation by Klaus Klein. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#include +#include +#include +#include +#include + +#include +#include + +/* + * Portable conversion routines for struct tm, replacing + * timegm() and strptime(), which are not available on all + * platforms and don't always behave the same way when they + * are. + */ + +/* + * We do not implement alternate representations. However, we always + * check whether a given modifier is allowed for a certain conversion. + */ +#define ALT_E 0x01 +#define ALT_O 0x02 +#define LEGAL_ALT(x) { if (alt_format & ~(x)) return (0); } + +#ifndef TM_YEAR_BASE +#define TM_YEAR_BASE 1900 +#endif + +static const char *day[7] = { + "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", + "Friday", "Saturday" +}; +static const char *abday[7] = { + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" +}; +static const char *mon[12] = { + "January", "February", "March", "April", "May", "June", "July", + "August", "September", "October", "November", "December" +}; +static const char *abmon[12] = { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" +}; +static const char *am_pm[2] = { + "AM", "PM" +}; + +static int +conv_num(const char **buf, int *dest, int llim, int ulim) { + int result = 0; + + /* The limit also determines the number of valid digits. */ + int rulim = ulim; + + if (**buf < '0' || **buf > '9') + return (0); + + do { + result *= 10; + result += *(*buf)++ - '0'; + rulim /= 10; + } while ((result * 10 <= ulim) && + rulim && **buf >= '0' && **buf <= '9'); + + if (result < llim || result > ulim) + return (0); + + *dest = result; + return (1); +} + +time_t +isc_tm_timegm(struct tm *tm) { + time_t ret; + int i, yday = 0, leapday; + int mdays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 }; + + leapday = ((((tm->tm_year + 1900 ) % 4) == 0 && + ((tm->tm_year + 1900 ) % 100) != 0) || + ((tm->tm_year + 1900 ) % 400) == 0) ? 1 : 0; + mdays[1] += leapday; + + yday = tm->tm_mday - 1; + for (i = 1; i <= tm->tm_mon; i++) + yday += mdays[i - 1]; + ret = tm->tm_sec + + (60 * tm->tm_min) + + (3600 * tm->tm_hour) + + (86400 * (yday + + ((tm->tm_year - 70) * 365) + + ((tm->tm_year - 69) / 4) - + ((tm->tm_year - 1) / 100) + + ((tm->tm_year + 299) / 400))); + return (ret); +} + +char * +isc_tm_strptime(const char *buf, const char *fmt, struct tm *tm) { + char c, *ret; + const char *bp; + size_t len = 0; + int alt_format, i, split_year = 0; + + bp = buf; + + while ((c = *fmt) != '\0') { + /* Clear `alternate' modifier prior to new conversion. */ + alt_format = 0; + + /* Eat up white-space. */ + if (isspace((unsigned char) c)) { + while (isspace((unsigned char) *bp)) + bp++; + + fmt++; + continue; + } + + if ((c = *fmt++) != '%') + goto literal; + + +again: switch (c = *fmt++) { + case '%': /* "%%" is converted to "%". */ +literal: + if (c != *bp++) + return (0); + break; + + /* + * "Alternative" modifiers. Just set the appropriate flag + * and start over again. + */ + case 'E': /* "%E?" alternative conversion modifier. */ + LEGAL_ALT(0); + alt_format |= ALT_E; + goto again; + + case 'O': /* "%O?" alternative conversion modifier. */ + LEGAL_ALT(0); + alt_format |= ALT_O; + goto again; + + /* + * "Complex" conversion rules, implemented through recursion. + */ + case 'c': /* Date and time, using the locale's format. */ + LEGAL_ALT(ALT_E); + if (!(bp = isc_tm_strptime(bp, "%x %X", tm))) + return (0); + break; + + case 'D': /* The date as "%m/%d/%y". */ + LEGAL_ALT(0); + if (!(bp = isc_tm_strptime(bp, "%m/%d/%y", tm))) + return (0); + break; + + case 'R': /* The time as "%H:%M". */ + LEGAL_ALT(0); + if (!(bp = isc_tm_strptime(bp, "%H:%M", tm))) + return (0); + break; + + case 'r': /* The time in 12-hour clock representation. */ + LEGAL_ALT(0); + if (!(bp = isc_tm_strptime(bp, "%I:%M:%S %p", tm))) + return (0); + break; + + case 'T': /* The time as "%H:%M:%S". */ + LEGAL_ALT(0); + if (!(bp = isc_tm_strptime(bp, "%H:%M:%S", tm))) + return (0); + break; + + case 'X': /* The time, using the locale's format. */ + LEGAL_ALT(ALT_E); + if (!(bp = isc_tm_strptime(bp, "%H:%M:%S", tm))) + return (0); + break; + + case 'x': /* The date, using the locale's format. */ + LEGAL_ALT(ALT_E); + if (!(bp = isc_tm_strptime(bp, "%m/%d/%y", tm))) + return (0); + break; + + /* + * "Elementary" conversion rules. + */ + case 'A': /* The day of week, using the locale's form. */ + case 'a': + LEGAL_ALT(0); + for (i = 0; i < 7; i++) { + /* Full name. */ + len = strlen(day[i]); + if (strncasecmp(day[i], bp, len) == 0) + break; + + /* Abbreviated name. */ + len = strlen(abday[i]); + if (strncasecmp(abday[i], bp, len) == 0) + break; + } + + /* Nothing matched. */ + if (i == 7) + return (0); + + tm->tm_wday = i; + bp += len; + break; + + case 'B': /* The month, using the locale's form. */ + case 'b': + case 'h': + LEGAL_ALT(0); + for (i = 0; i < 12; i++) { + /* Full name. */ + len = strlen(mon[i]); + if (strncasecmp(mon[i], bp, len) == 0) + break; + + /* Abbreviated name. */ + len = strlen(abmon[i]); + if (strncasecmp(abmon[i], bp, len) == 0) + break; + } + + /* Nothing matched. */ + if (i == 12) + return (0); + + tm->tm_mon = i; + bp += len; + break; + + case 'C': /* The century number. */ + LEGAL_ALT(ALT_E); + if (!(conv_num(&bp, &i, 0, 99))) + return (0); + + if (split_year) { + tm->tm_year = (tm->tm_year % 100) + (i * 100); + } else { + tm->tm_year = i * 100; + split_year = 1; + } + break; + + case 'd': /* The day of month. */ + case 'e': + LEGAL_ALT(ALT_O); + if (!(conv_num(&bp, &tm->tm_mday, 1, 31))) + return (0); + break; + + case 'k': /* The hour (24-hour clock representation). */ + LEGAL_ALT(0); + /* FALLTHROUGH */ + case 'H': + LEGAL_ALT(ALT_O); + if (!(conv_num(&bp, &tm->tm_hour, 0, 23))) + return (0); + break; + + case 'l': /* The hour (12-hour clock representation). */ + LEGAL_ALT(0); + /* FALLTHROUGH */ + case 'I': + LEGAL_ALT(ALT_O); + if (!(conv_num(&bp, &tm->tm_hour, 1, 12))) + return (0); + if (tm->tm_hour == 12) + tm->tm_hour = 0; + break; + + case 'j': /* The day of year. */ + LEGAL_ALT(0); + if (!(conv_num(&bp, &i, 1, 366))) + return (0); + tm->tm_yday = i - 1; + break; + + case 'M': /* The minute. */ + LEGAL_ALT(ALT_O); + if (!(conv_num(&bp, &tm->tm_min, 0, 59))) + return (0); + break; + + case 'm': /* The month. */ + LEGAL_ALT(ALT_O); + if (!(conv_num(&bp, &i, 1, 12))) + return (0); + tm->tm_mon = i - 1; + break; + + case 'p': /* The locale's equivalent of AM/PM. */ + LEGAL_ALT(0); + /* AM? */ + if (strcasecmp(am_pm[0], bp) == 0) { + if (tm->tm_hour > 11) + return (0); + + bp += strlen(am_pm[0]); + break; + } + /* PM? */ + else if (strcasecmp(am_pm[1], bp) == 0) { + if (tm->tm_hour > 11) + return (0); + + tm->tm_hour += 12; + bp += strlen(am_pm[1]); + break; + } + + /* Nothing matched. */ + return (0); + + case 'S': /* The seconds. */ + LEGAL_ALT(ALT_O); + if (!(conv_num(&bp, &tm->tm_sec, 0, 61))) + return (0); + break; + + case 'U': /* The week of year, beginning on sunday. */ + case 'W': /* The week of year, beginning on monday. */ + LEGAL_ALT(ALT_O); + /* + * XXX This is bogus, as we can not assume any valid + * information present in the tm structure at this + * point to calculate a real value, so just check the + * range for now. + */ + if (!(conv_num(&bp, &i, 0, 53))) + return (0); + break; + + case 'w': /* The day of week, beginning on sunday. */ + LEGAL_ALT(ALT_O); + if (!(conv_num(&bp, &tm->tm_wday, 0, 6))) + return (0); + break; + + case 'Y': /* The year. */ + LEGAL_ALT(ALT_E); + if (!(conv_num(&bp, &i, 0, 9999))) + return (0); + + tm->tm_year = i - TM_YEAR_BASE; + break; + + case 'y': /* The year within 100 years of the epoch. */ + LEGAL_ALT(ALT_E | ALT_O); + if (!(conv_num(&bp, &i, 0, 99))) + return (0); + + if (split_year) { + tm->tm_year = ((tm->tm_year / 100) * 100) + i; + break; + } + split_year = 1; + if (i <= 68) + tm->tm_year = i + 2000 - TM_YEAR_BASE; + else + tm->tm_year = i + 1900 - TM_YEAR_BASE; + break; + + /* + * Miscellaneous conversions. + */ + case 'n': /* Any kind of white-space. */ + case 't': + LEGAL_ALT(0); + while (isspace((unsigned char) *bp)) + bp++; + break; + + + default: /* Unknown/unsupported conversion. */ + return (0); + } + + + } + + /* LINTED functional specification */ + DE_CONST(bp, ret); + return (ret); +} diff --git a/lib/isc/unix/time.c b/lib/isc/unix/time.c index 9039b06a..890b9192 100644 --- a/lib/isc/unix/time.c +++ b/lib/isc/unix/time.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #define NS_PER_S 1000000000 /*%< Nanoseconds per second. */ @@ -408,31 +409,6 @@ isc_time_formathttptimestamp(const isc_time_t *t, char *buf, unsigned int len) { INSIST(flen < len); } -static time_t -timetfromtm(struct tm *tm) { - time_t ret; - int i, yday = 0, leapday; - int mdays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 }; - - leapday = ((((tm->tm_year + 1900 ) % 4) == 0 && - ((tm->tm_year + 1900 ) % 100) != 0) || - ((tm->tm_year + 1900 ) % 400) == 0) ? 1 : 0; - mdays[1] += leapday; - - yday = tm->tm_mday - 1; - for (i = 1; i <= tm->tm_mon; i++) - yday += mdays[i - 1]; - ret = tm->tm_sec + - (60 * tm->tm_min) + - (3600 * tm->tm_hour) + - (86400 * (yday + - ((tm->tm_year - 70) * 365) + - ((tm->tm_year - 69) / 4) - - ((tm->tm_year - 1) / 100) + - ((tm->tm_year + 299) / 400))); - return (ret); -} - isc_result_t isc_time_parsehttptimestamp(char *buf, isc_time_t *t) { struct tm t_tm; @@ -441,10 +417,10 @@ isc_time_parsehttptimestamp(char *buf, isc_time_t *t) { REQUIRE(buf != NULL); REQUIRE(t != NULL); - p = strptime(buf, "%a, %d %b %Y %H:%M:%S", &t_tm); + p = isc_tm_strptime(buf, "%a, %d %b %Y %H:%M:%S", &t_tm); if (p == NULL) return (ISC_R_UNEXPECTED); - when = timetfromtm(&t_tm); + when = isc_tm_timegm(&t_tm); if (when == -1) return (ISC_R_UNEXPECTED); isc_time_set(t, when, 0); diff --git a/lib/isc/win32/libisc.def.in b/lib/isc/win32/libisc.def.in index f03fd879..94363250 100644 --- a/lib/isc/win32/libisc.def.in +++ b/lib/isc/win32/libisc.def.in @@ -588,6 +588,8 @@ isc_time_seconds isc_time_set isc_time_settoepoch isc_time_subtract +isc_tm_timegm +isc_tm_strptime isc_win32os_majorversion isc_win32os_minorversion isc_win32os_servicepackmajor diff --git a/lib/isc/win32/libisc.dsp.in b/lib/isc/win32/libisc.dsp.in index a68dd9e3..2c06974a 100644 --- a/lib/isc/win32/libisc.dsp.in +++ b/lib/isc/win32/libisc.dsp.in @@ -561,6 +561,10 @@ SOURCE=..\include\isc\timer.h # End Source File # Begin Source File +SOURCE=..\include\isc\tm.h +# End Source File +# Begin Source File + SOURCE=.\include\isc\win32os.h # End Source File # Begin Source File @@ -805,6 +809,10 @@ SOURCE=..\timer.c # End Source File # Begin Source File +SOURCE=..\tm.c +# End Source File +# Begin Source File + SOURCE=.\win32os.c # End Source File # End Group diff --git a/lib/isc/win32/libisc.mak.in b/lib/isc/win32/libisc.mak.in index f1c754a0..5cca6d96 100644 --- a/lib/isc/win32/libisc.mak.in +++ b/lib/isc/win32/libisc.mak.in @@ -192,6 +192,7 @@ CLEAN : -@erase "$(INTDIR)\thread.obj" -@erase "$(INTDIR)\time.obj" -@erase "$(INTDIR)\timer.obj" + -@erase "$(INTDIR)\tm.obj" -@erase "$(INTDIR)\vc60.idb" -@erase "$(INTDIR)\version.obj" -@erase "$(INTDIR)\win32os.obj" @@ -289,6 +290,7 @@ LINK32_OBJS= \ "$(INTDIR)\task.obj" \ "$(INTDIR)\taskpool.obj" \ "$(INTDIR)\timer.obj" \ + "$(INTDIR)\tm.obj" \ "$(INTDIR)\parseint.obj" \ "$(INTDIR)\pool.obj" \ "$(INTDIR)\portset.obj" \ @@ -469,6 +471,8 @@ CLEAN : -@erase "$(INTDIR)\time.sbr" -@erase "$(INTDIR)\timer.obj" -@erase "$(INTDIR)\timer.sbr" + -@erase "$(INTDIR)\tm.obj" + -@erase "$(INTDIR)\tm.sbr" -@erase "$(INTDIR)\vc60.idb" -@erase "$(INTDIR)\vc60.pdb" -@erase "$(INTDIR)\version.obj" @@ -567,6 +571,7 @@ BSC32_SBRS= \ "$(INTDIR)\task.sbr" \ "$(INTDIR)\taskpool.sbr" \ "$(INTDIR)\timer.sbr" \ + "$(INTDIR)\tm.sbr" \ "$(INTDIR)\parseint.sbr" \ "$(INTDIR)\pool.sbr" \ "$(INTDIR)\portset.sbr" \ @@ -658,6 +663,7 @@ LINK32_OBJS= \ "$(INTDIR)\task.obj" \ "$(INTDIR)\taskpool.obj" \ "$(INTDIR)\timer.obj" \ + "$(INTDIR)\tm.obj" \ "$(INTDIR)\parseint.obj" \ "$(INTDIR)\pool.obj" \ "$(INTDIR)\portset.obj" \ @@ -2103,6 +2109,24 @@ SOURCE=..\timer.c $(CPP) $(CPP_PROJ) $(SOURCE) +!ENDIF + +SOURCE=..\tm.c + +!IF "$(CFG)" == "libisc - @PLATFORM@ Release" + + +"$(INTDIR)\tm.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "libisc - @PLATFORM@ Debug" + + +"$(INTDIR)\tm.obj" "$(INTDIR)\tm.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + !ENDIF diff --git a/lib/isc/win32/libisc.vcxproj.filters.in b/lib/isc/win32/libisc.vcxproj.filters.in index ea3c2e30..e7b3c793 100644 --- a/lib/isc/win32/libisc.vcxproj.filters.in +++ b/lib/isc/win32/libisc.vcxproj.filters.in @@ -248,6 +248,9 @@ Library Header Files + + Library Header Files + Library Header Files @@ -593,5 +596,8 @@ Library Source Files + + Library Source Files + - \ No newline at end of file + diff --git a/lib/isc/win32/libisc.vcxproj.in b/lib/isc/win32/libisc.vcxproj.in index 4e459cec..7a915240 100644 --- a/lib/isc/win32/libisc.vcxproj.in +++ b/lib/isc/win32/libisc.vcxproj.in @@ -312,6 +312,7 @@ copy /Y @VCREDIST_PATH@ ..\Build\Release\ + @@ -405,6 +406,7 @@ copy /Y @VCREDIST_PATH@ ..\Build\Release\ + @@ -434,4 +436,4 @@ copy /Y @VCREDIST_PATH@ ..\Build\Release\ - \ No newline at end of file + diff --git a/lib/isc/win32/strptime.c b/lib/isc/win32/strptime.c deleted file mode 100644 index 10dcec1e..00000000 --- a/lib/isc/win32/strptime.c +++ /dev/null @@ -1,392 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code was contributed to The NetBSD Foundation by Klaus Klein. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include - -/* - * We do not implement alternate representations. However, we always - * check whether a given modifier is allowed for a certain conversion. - */ -#define ALT_E 0x01 -#define ALT_O 0x02 -#define LEGAL_ALT(x) { if (alt_format & ~(x)) return (0); } - -#ifndef TM_YEAR_BASE -#define TM_YEAR_BASE 1900 -#endif - -static int conv_num(const char **, int *, int, int); - -static const char *day[7] = { - "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", - "Friday", "Saturday" -}; -static const char *abday[7] = { - "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" -}; -static const char *mon[12] = { - "January", "February", "March", "April", "May", "June", "July", - "August", "September", "October", "November", "December" -}; -static const char *abmon[12] = { - "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" -}; -static const char *am_pm[2] = { - "AM", "PM" -}; - -static char * -strptime(const char *buf, const char *fmt, struct tm *tm) { - char c; - const char *bp; - size_t len = 0; - int alt_format, i, split_year = 0; - - bp = buf; - - while ((c = *fmt) != '\0') { - /* Clear `alternate' modifier prior to new conversion. */ - alt_format = 0; - - /* Eat up white-space. */ - if (isspace(c)) { - while (isspace(*bp)) - bp++; - - fmt++; - continue; - } - - if ((c = *fmt++) != '%') - goto literal; - - -again: switch (c = *fmt++) { - case '%': /* "%%" is converted to "%". */ -literal: - if (c != *bp++) - return (0); - break; - - /* - * "Alternative" modifiers. Just set the appropriate flag - * and start over again. - */ - case 'E': /* "%E?" alternative conversion modifier. */ - LEGAL_ALT(0); - alt_format |= ALT_E; - goto again; - - case 'O': /* "%O?" alternative conversion modifier. */ - LEGAL_ALT(0); - alt_format |= ALT_O; - goto again; - - /* - * "Complex" conversion rules, implemented through recursion. - */ - case 'c': /* Date and time, using the locale's format. */ - LEGAL_ALT(ALT_E); - if (!(bp = strptime(bp, "%x %X", tm))) - return (0); - break; - - case 'D': /* The date as "%m/%d/%y". */ - LEGAL_ALT(0); - if (!(bp = strptime(bp, "%m/%d/%y", tm))) - return (0); - break; - - case 'R': /* The time as "%H:%M". */ - LEGAL_ALT(0); - if (!(bp = strptime(bp, "%H:%M", tm))) - return (0); - break; - - case 'r': /* The time in 12-hour clock representation. */ - LEGAL_ALT(0); - if (!(bp = strptime(bp, "%I:%M:%S %p", tm))) - return (0); - break; - - case 'T': /* The time as "%H:%M:%S". */ - LEGAL_ALT(0); - if (!(bp = strptime(bp, "%H:%M:%S", tm))) - return (0); - break; - - case 'X': /* The time, using the locale's format. */ - LEGAL_ALT(ALT_E); - if (!(bp = strptime(bp, "%H:%M:%S", tm))) - return (0); - break; - - case 'x': /* The date, using the locale's format. */ - LEGAL_ALT(ALT_E); - if (!(bp = strptime(bp, "%m/%d/%y", tm))) - return (0); - break; - - /* - * "Elementary" conversion rules. - */ - case 'A': /* The day of week, using the locale's form. */ - case 'a': - LEGAL_ALT(0); - for (i = 0; i < 7; i++) { - /* Full name. */ - len = strlen(day[i]); - if (strncasecmp(day[i], bp, len) == 0) - break; - - /* Abbreviated name. */ - len = strlen(abday[i]); - if (strncasecmp(abday[i], bp, len) == 0) - break; - } - - /* Nothing matched. */ - if (i == 7) - return (0); - - tm->tm_wday = i; - bp += len; - break; - - case 'B': /* The month, using the locale's form. */ - case 'b': - case 'h': - LEGAL_ALT(0); - for (i = 0; i < 12; i++) { - /* Full name. */ - len = strlen(mon[i]); - if (strncasecmp(mon[i], bp, len) == 0) - break; - - /* Abbreviated name. */ - len = strlen(abmon[i]); - if (strncasecmp(abmon[i], bp, len) == 0) - break; - } - - /* Nothing matched. */ - if (i == 12) - return (0); - - tm->tm_mon = i; - bp += len; - break; - - case 'C': /* The century number. */ - LEGAL_ALT(ALT_E); - if (!(conv_num(&bp, &i, 0, 99))) - return (0); - - if (split_year) { - tm->tm_year = (tm->tm_year % 100) + (i * 100); - } else { - tm->tm_year = i * 100; - split_year = 1; - } - break; - - case 'd': /* The day of month. */ - case 'e': - LEGAL_ALT(ALT_O); - if (!(conv_num(&bp, &tm->tm_mday, 1, 31))) - return (0); - break; - - case 'k': /* The hour (24-hour clock representation). */ - LEGAL_ALT(0); - /* FALLTHROUGH */ - case 'H': - LEGAL_ALT(ALT_O); - if (!(conv_num(&bp, &tm->tm_hour, 0, 23))) - return (0); - break; - - case 'l': /* The hour (12-hour clock representation). */ - LEGAL_ALT(0); - /* FALLTHROUGH */ - case 'I': - LEGAL_ALT(ALT_O); - if (!(conv_num(&bp, &tm->tm_hour, 1, 12))) - return (0); - if (tm->tm_hour == 12) - tm->tm_hour = 0; - break; - - case 'j': /* The day of year. */ - LEGAL_ALT(0); - if (!(conv_num(&bp, &i, 1, 366))) - return (0); - tm->tm_yday = i - 1; - break; - - case 'M': /* The minute. */ - LEGAL_ALT(ALT_O); - if (!(conv_num(&bp, &tm->tm_min, 0, 59))) - return (0); - break; - - case 'm': /* The month. */ - LEGAL_ALT(ALT_O); - if (!(conv_num(&bp, &i, 1, 12))) - return (0); - tm->tm_mon = i - 1; - break; - - case 'p': /* The locale's equivalent of AM/PM. */ - LEGAL_ALT(0); - /* AM? */ - if (strcasecmp(am_pm[0], bp) == 0) { - if (tm->tm_hour > 11) - return (0); - - bp += strlen(am_pm[0]); - break; - } - /* PM? */ - else if (strcasecmp(am_pm[1], bp) == 0) { - if (tm->tm_hour > 11) - return (0); - - tm->tm_hour += 12; - bp += strlen(am_pm[1]); - break; - } - - /* Nothing matched. */ - return (0); - - case 'S': /* The seconds. */ - LEGAL_ALT(ALT_O); - if (!(conv_num(&bp, &tm->tm_sec, 0, 61))) - return (0); - break; - - case 'U': /* The week of year, beginning on sunday. */ - case 'W': /* The week of year, beginning on monday. */ - LEGAL_ALT(ALT_O); - /* - * XXX This is bogus, as we can not assume any valid - * information present in the tm structure at this - * point to calculate a real value, so just check the - * range for now. - */ - if (!(conv_num(&bp, &i, 0, 53))) - return (0); - break; - - case 'w': /* The day of week, beginning on sunday. */ - LEGAL_ALT(ALT_O); - if (!(conv_num(&bp, &tm->tm_wday, 0, 6))) - return (0); - break; - - case 'Y': /* The year. */ - LEGAL_ALT(ALT_E); - if (!(conv_num(&bp, &i, 0, 9999))) - return (0); - - tm->tm_year = i - TM_YEAR_BASE; - break; - - case 'y': /* The year within 100 years of the epoch. */ - LEGAL_ALT(ALT_E | ALT_O); - if (!(conv_num(&bp, &i, 0, 99))) - return (0); - - if (split_year) { - tm->tm_year = ((tm->tm_year / 100) * 100) + i; - break; - } - split_year = 1; - if (i <= 68) - tm->tm_year = i + 2000 - TM_YEAR_BASE; - else - tm->tm_year = i + 1900 - TM_YEAR_BASE; - break; - - /* - * Miscellaneous conversions. - */ - case 'n': /* Any kind of white-space. */ - case 't': - LEGAL_ALT(0); - while (isspace(*bp)) - bp++; - break; - - - default: /* Unknown/unsupported conversion. */ - return (0); - } - - - } - - /* LINTED functional specification */ - return ((char *)bp); -} - -static int -conv_num(const char **buf, int *dest, int llim, int ulim) { - int result = 0; - - /* The limit also determines the number of valid digits. */ - int rulim = ulim; - - if (**buf < '0' || **buf > '9') - return (0); - - do { - result *= 10; - result += *(*buf)++ - '0'; - rulim /= 10; - } while ((result * 10 <= ulim) && - rulim && **buf >= '0' && **buf <= '9'); - - if (result < llim || result > ulim) - return (0); - - *dest = result; - return (1); -} diff --git a/lib/isc/win32/time.c b/lib/isc/win32/time.c index 6c38e25a..d6993f93 100644 --- a/lib/isc/win32/time.c +++ b/lib/isc/win32/time.c @@ -30,6 +30,7 @@ #include #include +#include #include /* @@ -318,32 +319,6 @@ isc_time_formathttptimestamp(const isc_time_t *t, char *buf, unsigned int len) { } } -static time_t -timetfromtm(struct tm *tm) { - time_t ret; - int i, yday = 0, leapday; - int mdays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 }; - - leapday = ((((tm->tm_year + 1900 ) % 4) == 0 && - ((tm->tm_year + 1900 ) % 100) != 0) || - ((tm->tm_year + 1900 ) % 400) == 0) ? 1 : 0; - mdays[1] += leapday; - - yday = tm->tm_mday - 1; - for (i = 1; i <= tm->tm_mon; i++) - yday += mdays[i - 1]; - ret = tm->tm_sec + - (60 * tm->tm_min) + - (3600 * tm->tm_hour) + - (86400 * (yday + - ((tm->tm_year - 70) * 365) + - ((tm->tm_year - 69) / 4) - - ((tm->tm_year - 1) / 100) + - ((tm->tm_year + 299) / 400))); - return (ret); -} - -#include "strptime.c" isc_result_t isc_time_parsehttptimestamp(char *buf, isc_time_t *t) { struct tm t_tm; @@ -352,10 +327,10 @@ isc_time_parsehttptimestamp(char *buf, isc_time_t *t) { REQUIRE(buf != NULL); REQUIRE(t != NULL); - p = strptime(buf, "%a, %d %b %Y %H:%M:%S", &t_tm); + p = isc_tm_strptime(buf, "%a, %d %b %Y %H:%M:%S", &t_tm); if (p == NULL) return (ISC_R_UNEXPECTED); - when = timetfromtm(&t_tm); + when = isc_tm_timegm(&t_tm); if (when == -1) return (ISC_R_UNEXPECTED); isc_time_set(t, when, 0); diff --git a/srcid b/srcid index e5e037af..0cef18f0 100644 --- a/srcid +++ b/srcid @@ -1 +1 @@ -SRCID=f7a59390 +SRCID=ea195f0b diff --git a/version b/version index 92e82f50..426490c9 100644 --- a/version +++ b/version @@ -9,5 +9,5 @@ MAJORVER=9 MINORVER=9 PATCHVER=5 RELEASETYPE=rc -RELEASEVER=1 +RELEASEVER=2 EXTENSIONS= -- cgit v1.2.3