From: Andrei Elkin Date: June 17 2011 10:56am Subject: bzr commit into mysql-next-mr-wl5569 branch (andrei.elkin:3301) WL#5569 List-Archive: http://lists.mysql.com/commits/139409 Message-Id: <201106171056.p5HAuoRh004198@mysql1000.dsl.inet.fi> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0307196294==" --===============0307196294== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/andrei/MySQL/BZR/2a-23May/WL/mysql-next-mr-wl5569/ based on revid:alfranio.correia@stripped 3301 Andrei Elkin 2011-06-17 wl#5569 MTS fixing few tests. 1. Policy is implemented for reacting with a warning in a case of failing worker leaves the total slave state with gaps thereby inconsistent. 2. Two tests that were used to time out due to reset master/slave was disabled in there. @ mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test a suppression is added. @ mysql-test/extra/rpl_tests/rpl_row_basic.test a suppression is added. @ mysql-test/suite/rpl/r/rpl_known_bugs_detection.result a suppression is added. @ mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result a suppression is added. @ mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result a suppression is added. @ mysql-test/suite/rpl/r/rpl_row_binlog_max_cache_size.result a suppression is added. @ mysql-test/suite/rpl/r/rpl_row_event_max_size.result a suppression is added. @ mysql-test/suite/rpl/r/rpl_row_idempotency.result a suppression is added. @ mysql-test/suite/rpl/t/rpl_known_bugs_detection.test a suppression is added. @ mysql-test/suite/rpl/t/rpl_parallel_benchmark-slave.opt removing unnecessary options causing test to fail. @ mysql-test/suite/rpl/t/rpl_parallel_benchmark.test removing an erronous assignment. The former disabling of reset was intended for benchmarking w/o binlog on the slave to please master-slave.inc. @ mysql-test/suite/rpl/t/rpl_parallel_innodb-slave.opt removing unnecessary options causing test to fail. @ mysql-test/suite/rpl/t/rpl_parallel_innodb.test removing an erronous assignment. The former disabling of reset was intended for benchmarking w/o binlog on the slave to please master-slave.inc. @ mysql-test/suite/rpl/t/rpl_row_event_max_size.test a suppression is added. @ mysql-test/suite/rpl/t/rpl_row_idempotency.test a suppression is added. @ sql/rpl_slave.cc Downgrading error to warning in a case of Coordinator fails due to a Worker error. Improving messages. Merging two if:s to have just one report(). @ sql/share/errmsg-utf8.txt Improved the text of an error; Added a new error code. modified: mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test mysql-test/extra/rpl_tests/rpl_row_basic.test mysql-test/suite/rpl/r/rpl_known_bugs_detection.result mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result mysql-test/suite/rpl/r/rpl_row_binlog_max_cache_size.result mysql-test/suite/rpl/r/rpl_row_event_max_size.result mysql-test/suite/rpl/r/rpl_row_idempotency.result mysql-test/suite/rpl/t/rpl_known_bugs_detection.test mysql-test/suite/rpl/t/rpl_parallel_benchmark-slave.opt mysql-test/suite/rpl/t/rpl_parallel_benchmark.test mysql-test/suite/rpl/t/rpl_parallel_innodb-slave.opt mysql-test/suite/rpl/t/rpl_parallel_innodb.test mysql-test/suite/rpl/t/rpl_row_event_max_size.test mysql-test/suite/rpl/t/rpl_row_idempotency.test sql/rpl_slave.cc sql/share/errmsg-utf8.txt === modified file 'mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test' --- a/mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test 2011-05-12 21:51:20 +0000 +++ b/mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test 2011-06-17 10:56:44 +0000 @@ -389,6 +389,7 @@ CALL mtr.add_suppression("Multi-statemen CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_stmt_cache_size' bytes of storage.*"); CALL mtr.add_suppression("Writing one row to the row-based binary log failed.*"); CALL mtr.add_suppression("Slave SQL.*The incident LOST_EVENTS occured on the master. Message: error writing to the binary log"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); connection master; TRUNCATE t1; === modified file 'mysql-test/extra/rpl_tests/rpl_row_basic.test' --- a/mysql-test/extra/rpl_tests/rpl_row_basic.test 2011-02-23 20:01:27 +0000 +++ b/mysql-test/extra/rpl_tests/rpl_row_basic.test 2011-06-17 10:56:44 +0000 @@ -385,6 +385,7 @@ SET GLOBAL SLAVE_TYPE_CONVERSIONS = @sav call mtr.add_suppression("Slave SQL.*Table definition on master and slave does not match: Column 1 size mismatch.* Error_code: 1535"); call mtr.add_suppression("Slave SQL.*Could not execute Delete_rows event on table test.t1.* Error_code: 1032"); call mtr.add_suppression("Slave SQL.*Column 1 of table .test.t.. cannot be converted from type.*, Error_code: 1677"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); --let $rpl_only_running_threads= 1 --source include/rpl_reset.inc === modified file 'mysql-test/suite/rpl/r/rpl_known_bugs_detection.result' --- a/mysql-test/suite/rpl/r/rpl_known_bugs_detection.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_known_bugs_detection.result 2011-06-17 10:56:44 +0000 @@ -7,6 +7,7 @@ SELECT * FROM t1; a b 1 10 2 2 +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); call mtr.add_suppression("Slave SQL.*suffer.*http:..bugs.mysql.com.bug.php.id=24432"); include/wait_for_slave_sql_error.inc [errno=1105] Last_SQL_Error = 'Error 'master may suffer from http://bugs.mysql.com/bug.php?id=24432 so slave stops; check error log on slave for more info' on query. Default database: 'test'. Query: 'INSERT INTO t1(b) VALUES(1),(1),(2) ON DUPLICATE KEY UPDATE t1.b=10'' === modified file 'mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result' --- a/mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result 2011-06-17 10:56:44 +0000 @@ -481,6 +481,7 @@ SET GLOBAL SLAVE_TYPE_CONVERSIONS = @sav call mtr.add_suppression("Slave SQL.*Table definition on master and slave does not match: Column 1 size mismatch.* Error_code: 1535"); call mtr.add_suppression("Slave SQL.*Could not execute Delete_rows event on table test.t1.* Error_code: 1032"); call mtr.add_suppression("Slave SQL.*Column 1 of table .test.t.. cannot be converted from type.*, Error_code: 1677"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); include/rpl_reset.inc [expecting slave to replicate correctly] INSERT INTO t4 VALUES (1, "", 1); === modified file 'mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result' --- a/mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result 2011-06-17 10:56:44 +0000 @@ -484,6 +484,7 @@ SET GLOBAL SLAVE_TYPE_CONVERSIONS = @sav call mtr.add_suppression("Slave SQL.*Table definition on master and slave does not match: Column 1 size mismatch.* Error_code: 1535"); call mtr.add_suppression("Slave SQL.*Could not execute Delete_rows event on table test.t1.* Error_code: 1032"); call mtr.add_suppression("Slave SQL.*Column 1 of table .test.t.. cannot be converted from type.*, Error_code: 1677"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); include/rpl_reset.inc [expecting slave to replicate correctly] INSERT INTO t4 VALUES (1, "", 1); === modified file 'mysql-test/suite/rpl/r/rpl_row_binlog_max_cache_size.result' --- a/mysql-test/suite/rpl/r/rpl_row_binlog_max_cache_size.result 2011-05-12 21:51:20 +0000 +++ b/mysql-test/suite/rpl/r/rpl_row_binlog_max_cache_size.result 2011-06-17 10:56:44 +0000 @@ -142,6 +142,7 @@ CALL mtr.add_suppression("Multi-statemen CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_stmt_cache_size' bytes of storage.*"); CALL mtr.add_suppression("Writing one row to the row-based binary log failed.*"); CALL mtr.add_suppression("Slave SQL.*The incident LOST_EVENTS occured on the master. Message: error writing to the binary log"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); TRUNCATE t1; SET GLOBAL max_binlog_cache_size= ORIGINAL_VALUE; SET GLOBAL binlog_cache_size= ORIGINAL_VALUE; === modified file 'mysql-test/suite/rpl/r/rpl_row_event_max_size.result' --- a/mysql-test/suite/rpl/r/rpl_row_event_max_size.result 2011-02-10 10:33:25 +0000 +++ b/mysql-test/suite/rpl/r/rpl_row_event_max_size.result 2011-06-17 10:56:44 +0000 @@ -60,6 +60,7 @@ LENGTH(data1) LENGTH(data2) LENGTH(data3 drop table t1; call mtr.add_suppression("Slave I/O: Got fatal error 1236 from master when reading data from binary log: .*"); call mtr.add_suppression("Found invalid event in binary log"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); drop table t1; include/wait_for_slave_io_error.inc [errno=1236] Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master'' === modified file 'mysql-test/suite/rpl/r/rpl_row_idempotency.result' --- a/mysql-test/suite/rpl/r/rpl_row_idempotency.result 2011-02-23 11:54:58 +0000 +++ b/mysql-test/suite/rpl/r/rpl_row_idempotency.result 2011-06-17 10:56:44 +0000 @@ -4,6 +4,7 @@ call mtr.add_suppression("Can.t find rec call mtr.add_suppression("Cannot delete or update a parent row: a foreign key constraint fails .* Error_code: 1451"); call mtr.add_suppression("Cannot add or update a child row: a foreign key constraint fails .* Error_code: 1452"); call mtr.add_suppression("Duplicate entry .1. for key .PRIMARY.* Error_code: 1062"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); set @old_slave_exec_mode= @@global.slave_exec_mode; set @@global.slave_exec_mode= IDEMPOTENT; create table ti1 (b int primary key) engine = innodb; === modified file 'mysql-test/suite/rpl/t/rpl_known_bugs_detection.test' --- a/mysql-test/suite/rpl/t/rpl_known_bugs_detection.test 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/t/rpl_known_bugs_detection.test 2011-06-17 10:56:44 +0000 @@ -29,6 +29,8 @@ INSERT INTO t1(b) VALUES(1),(1),(2) ON D SELECT * FROM t1; connection slave; +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); + # show the error message #1105 = ER_UNKNOWN_ERROR --let $slave_sql_errno= 1105 === modified file 'mysql-test/suite/rpl/t/rpl_parallel_benchmark-slave.opt' --- a/mysql-test/suite/rpl/t/rpl_parallel_benchmark-slave.opt 2011-04-02 11:32:02 +0000 +++ b/mysql-test/suite/rpl/t/rpl_parallel_benchmark-slave.opt 2011-06-17 10:56:44 +0000 @@ -1,3 +1,3 @@ ---skip-log-bin --skip-log-slave-updates --log-warnings=0 --slave-transaction-retries=0 +--log-warnings=0 --slave-transaction-retries=0 === modified file 'mysql-test/suite/rpl/t/rpl_parallel_benchmark.test' --- a/mysql-test/suite/rpl/t/rpl_parallel_benchmark.test 2011-06-15 17:12:11 +0000 +++ b/mysql-test/suite/rpl/t/rpl_parallel_benchmark.test 2011-06-17 10:56:44 +0000 @@ -7,8 +7,6 @@ # how to vary running configuration. # -let $rpl_skip_reset_master_and_slave= 1; - --source include/master-slave.inc connection slave; === modified file 'mysql-test/suite/rpl/t/rpl_parallel_innodb-slave.opt' --- a/mysql-test/suite/rpl/t/rpl_parallel_innodb-slave.opt 2011-05-30 10:05:07 +0000 +++ b/mysql-test/suite/rpl/t/rpl_parallel_innodb-slave.opt 2011-06-17 10:56:44 +0000 @@ -1,4 +1,4 @@ ---log-warnings=0 --slave-transaction-retries=0 --innodb_flush_log_at_trx_commit=0 --skip-log-bin --skip-log-slave-updates --sync_binlog=0 +--log-warnings=0 --slave-transaction-retries=0 === modified file 'mysql-test/suite/rpl/t/rpl_parallel_innodb.test' --- a/mysql-test/suite/rpl/t/rpl_parallel_innodb.test 2011-06-15 17:12:11 +0000 +++ b/mysql-test/suite/rpl/t/rpl_parallel_innodb.test 2011-06-17 10:56:44 +0000 @@ -5,8 +5,6 @@ # checks and provides benchmarking data with load to innodb tables. # -let $rpl_skip_reset_master_and_slave= 1; - --source include/master-slave.inc connection master; === modified file 'mysql-test/suite/rpl/t/rpl_row_event_max_size.test' --- a/mysql-test/suite/rpl/t/rpl_row_event_max_size.test 2010-12-19 17:22:30 +0000 +++ b/mysql-test/suite/rpl/t/rpl_row_event_max_size.test 2011-06-17 10:56:44 +0000 @@ -68,6 +68,7 @@ drop table t1; connection slave; call mtr.add_suppression("Slave I/O: Got fatal error 1236 from master when reading data from binary log: .*"); call mtr.add_suppression("Found invalid event in binary log"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); # Show slave last IO errno drop table t1; === modified file 'mysql-test/suite/rpl/t/rpl_row_idempotency.test' --- a/mysql-test/suite/rpl/t/rpl_row_idempotency.test 2011-02-23 11:54:58 +0000 +++ b/mysql-test/suite/rpl/t/rpl_row_idempotency.test 2011-06-17 10:56:44 +0000 @@ -13,6 +13,7 @@ call mtr.add_suppression("Can.t find rec call mtr.add_suppression("Cannot delete or update a parent row: a foreign key constraint fails .* Error_code: 1451"); call mtr.add_suppression("Cannot add or update a child row: a foreign key constraint fails .* Error_code: 1452"); call mtr.add_suppression("Duplicate entry .1. for key .PRIMARY.* Error_code: 1062"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); # bug#31609 Not all RBR slave errors reported as errors # bug#31552 Replication breaks when deleting rows from out-of-sync table === modified file 'sql/rpl_slave.cc' --- a/sql/rpl_slave.cc 2011-06-15 17:12:11 +0000 +++ b/sql/rpl_slave.cc 2011-06-17 10:56:44 +0000 @@ -1091,14 +1091,14 @@ static bool sql_slave_killed(THD* thd, R "ignores duplicate key, key not found, and similar errors (see " "documentation for details)."; char msg_stopped_mts[]= - "... The slave Coordinator and Worker threads are stopped, possibly " - "leaving data in inconsistent state. The following restart shall " - "restore consistency automatically. There might be exceptional situations " - "in the recovery caused by combination of non-transactional storage for " - "either of Coordinator or Workers info tables and updating non-transactional " - "data tables or DDL queries. In such cases you have to examine your data " - "(see documentation for details)."; + "... The slave coordinator and worker threads are stopped, possibly " + "leaving data in inconsistent state. A restart should " + "restore consistency automatically, although using non-transactional " + "storage for data or info tables or DDL queries could lead to problems. " + "In such cases you have to examine your data (see documentation for " + "details)."; + ret= TRUE; if (rli->abort_slave) { DBUG_PRINT("info", ("Request to stop slave SQL Thread received while " @@ -1125,7 +1125,7 @@ static bool sql_slave_killed(THD* thd, R DBUG_EXECUTE_IF("incomplete_group_in_relay_log", ret= TRUE;);); // time is over - if (ret == 0) + if (!ret) { rli->report(WARNING_LEVEL, 0, !is_parallel_group ? @@ -1137,18 +1137,17 @@ static bool sql_slave_killed(THD* thd, R "stopped in the middle of assigning a group of events; " "deferring to exit until the group completion ... "); } - else - { - rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, - ER(ER_SLAVE_FATAL_ERROR), - !is_parallel_group ? msg_stopped : msg_stopped_mts); - } } - else + if (ret) { - ret= TRUE; - rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, ER(ER_SLAVE_FATAL_ERROR), - !is_parallel_group ? msg_stopped : msg_stopped_mts); + if (is_parallel_group) + rli->report(WARNING_LEVEL, + ER_MTS_PARALLEL_INCONSISTENT_DATA, + ER(ER_MTS_PARALLEL_INCONSISTENT_DATA), + msg_stopped_mts); + else + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER(ER_SLAVE_FATAL_ERROR), msg_stopped); } } else === modified file 'sql/share/errmsg-utf8.txt' --- a/sql/share/errmsg-utf8.txt 2011-06-12 19:05:05 +0000 +++ b/sql/share/errmsg-utf8.txt 2011-06-17 10:56:44 +0000 @@ -6511,4 +6511,6 @@ ER_MTS_FEATURE_IS_NOT_SUPPORTED ER_MTS_UPDATED_DBS_GREATER_MAX eng "Modified database names number exceeds the maximum %d; the names are not written into the replication event." ER_MTS_CANT_PARALLEL - eng "Can't execute the current event group in parallel mode running into event %s, relay-log name %s, position %s." + eng "Can't execute the current event group in parallel mode. Encountered event %s, relay-log name %s, position %s which prevents execution of this event group in parallel mode." +ER_MTS_PARALLEL_INCONSISTENT_DATA + eng "%s" --===============0307196294== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/andrei.elkin@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: andrei.elkin@stripped # target_branch: file:///home/andrei/MySQL/BZR/2a-23May/WL/mysql-next-\ # mr-wl5569/ # testament_sha1: 1603dc47d6c834761bf30d98a532563c99cfdbd4 # timestamp: 2011-06-17 13:56:50 +0300 # source_branch: file:///home/andrei/MySQL/BZR/2a-23May/mysql-trunk/ # base_revision_id: alfranio.correia@stripped\ # pn69kpw9tj70qzlm # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWfeF7psADaB/gFUQEAB65/// f6ffgL////pgFivu3tOF7vqet7cDoGqLb7sK9cgFAV7n3u+ffeYKF3XEhKO2AUiNMEUVzNaxIFAx RU00z1IAY0wmmSDRiGATJkGEBoYSUmgyJtDUankTRqNPQj1GgPQgaNBp6gDIMgESnkk9T1P1J5E0 AyMgAAAAANNBISSntTU1MyamnoQ0NGgAAAAAAAIpCCaA0NIybUyaExqFP1NEDIAGgA9QRSE0AIAI NAChT8pPUNA9TI0AAPUeM0gxcjnoYBSYg/uPtggmNFZweQHKgGghBJFaIg79/HrzTA1gQYc9A27u mhrjeiXum8DWGylpmzkirvGSJiUjjPlzlSek6XS6BhLrpsztEN8BlAjW2YkwIi0BAEwklo3RWKMM lwV8hWqb2wnairCr4SJEjJ2vnwyIDrGCQSpBD89s27sPw/+brGHZAwQG5JRJNNpNttttttpDbbbG DGX4kBuICM9mvGxxNSwlC6qWYLsQQrMKexdJGtrPQtvYUXZDfvQ2YS9WymLxwl2R2d7zJmWERmym N8iszxwzUrPNL1HGsXM+vTrvWZngYauO5vdL9JHFwGeYNBfCReYF1hTvRlErgYnBOXXsZnzbbPSt uMpSM624IF0Xf8aTM8TD/yMrsDUH/snkDjnaTUnlZZNSZjf6G6FJeiBlKtYkYQTuMa1wtLkDMxR1 l/CtLabj6uEM9aiyBgHHJS7UjhZcIG3MTTUefaBX2DZMIYt4TJPRDHPa6vhTuCqvDOURSkhfkjYq taWXeTN2Vim8DzQJaLmkM5iTXUYnFJCez9Mt0bTcgBE5muNO9o1SuOmLxfOCR3uEgnn1D7CRAUlA QQgMc6c4OcQpu/EiYQeevxqy8skc5CVcHFvpMgFOIZBt3r8u/wcefSzipqomrXilZ4mrX6wO+bsh xHEbXxH/iFgw62pkKmh5Njp8fYdesK2yaYjn9WseeW11eYoSbXu+8kV4K1OR1et2Z2lXcaFz9K6a Ened/4RGpqroYd5i8pF+5ZuyXlS6kEX1G/JVZeOhq6bK9XGCIS+Ig7dKlQAHUeCCRRYc4lCMUy6D u4dnSHDtuSqq7pG8R0yAKjAQbu6dc0ishWNejYoabdUoOoSYc4dWFZDNerv6miWFnh21l4gShV4w VQtULznw6XFVCrNMSGbMYkhAwibCkyjWwcGKBmMkQMSdWxJYZkm88ywwvk3DW1YXAzLG4kWljRiZ YXWUWxgvShiWGDK620hDIktUIFC0xLSo0C0YVTeUoNpQsHAwLjk2NRwLDIyMFa4lWCV6hdMmQRd/ 6yNDMKGhkWky00OpYULjNw0O37tW659hJnBApAumzTdlYDK1YO82ZESpwBFiAGyVShQGxg8LkAWG j3UC1YIeEbMmgEwgQ0FCEUkN5iemJ1Om8pQ8s3F4NL2DFWRAo1zLRsM90E52kJwPh01zKmRUZE3W k1IAwAjlOmOWs6ztnbKpt64xMxLCdMbTfZxlkalKmRmYlCShEh28RYDYOhMLJR9t3jbtguqaOJuM 3TMqQHEgvhoWDO0+poDR2W9wnE+bB5vU0kdORB57ywsZZji9DeGUil6BiZzUWEGomTLSoIJHa70D sLCC7jrSwQzJXkiRyH9R/N9Hg6IJJlpmdz3RpMlJap6s8pS2StrN7qacWGwZvPHNQrS53iIyznDj ymh3mY/MYMLsN/gWl9T0dltMaoVUuvXsUA9ZnFTv4ZWnDLF3HicXjZS/xvORPfjoTl0GeFlTNTYd dsywo7C48CCCCZwJnnk3AlhkdmZfgb+nxMvKyDAkQfV2HN7X/yd83G30mM3LZdw6UG2kZ5jUIbUm b3UlUOtNTbg2hginEUKBlg5ciMONREXTIKwZ24YIZksSpm2jS07jo2Hib8jMycTs2FhGQ0FpdFb+ kgq5VqtInHFIqCNo8sMyv4cDLlkLCsg39I2mJrMGs06D6ih0Nrpyvg+R4J6nofNufLvud9XFmAnM 59uJ6RxOvhG7nYKFLZElzJFqh7veSgQsYQMi6joQ0gDrnEbdM7zuMSy4ZdiAsIPAo5ihUwKE5lxd jaX4oSGZMq+tCZYdDa8/KmhTC5Mc2mRTIqSsdjyIeNxuPLMrovM2WQER6+wBIToIYHaXkjaQSNOA 4FG8pa/D0LDlzOBwJlhqQbpGwg0/HB8Fm7PVtcM3LB7Jo4CU3RM2tald6Vhc5JbIdBiZzOVjvZ1R SIMiRcpKtpbQscRvORacDEbRsbe9ezSwYQfhOUkDEjKZSUt1pQ4BFZSZx7j4O0tCQTn0JSCotEgx KTEdaRG4jiI0eMMkpaUDjIcljy0z3t7oOP4jmtIg01INDQ2EdTa9Wy4kTILSpWwkWlxIuaF6+j7t Jj49z9NXo7mvM114zlynzKWWayq2DuNxMocDKXAtunfiUQ3FBkgl48LuhPRKGLbo6ihjgOd5FxfB meU8rw0MCmF8aHgadxEzboXfg5YY1LCCnR43KG6j9ngWsyWZgaGTwJnE9PjMJSodDfBwNhcaYGpI x5HR8BQ7mY/S+w8x5ezJ4+7m1zO8seOyczpScSJRZS98e5KlXiM2GgyYORxSRwbaihe1JO03loxl Q2eJNM9ysGkArNEIGN84yJSWmgJTTYspAeZCgvKs6IE9x7+smWcu/ZpPpDniYqGZabXybw3GAwSL zaYmJY7DF31PZzc33H7tmju6vH09F7Pfs3XHlvJHLbxWbyPJMG2ZIsbiCV7dUacys5uJBOpScEzA qWbiZIgwPH1sN5daZGWBliTMTW2DM1p1NbY+Kal1/hlz1KGR51Jl5eak8CDSpBN/IDomxwZD8uJf z4xWL45EX2xbIZbiDiSgG4zLywo3kitTUrMNpcci/OwcAzqXbypacucm4oSLSlVDsVNSQLaC4WEZ Km4OGXTmBSMYRjMWuioK166j5u15pv03yU44zyU3DgtWi3ypBbErUDJ0liQFBAhaehV0R5WVREJA kgBXCCWBNdQQZEZbNsXBGVZTY7er5wFtb/ZEHHyG+Wm2xsGwY2xnWQHBEVIyJjTbYMYxlEkRAO9S AJI68PUS5gRCKJIGzhQvlbD//B+cN/KwSzMBggYzP/Vmr6Eyl3a7uqVi3D6+prJp6ietiZ8zjfRo 24wNvaA5wYpyAZ8pg8haTLiKAhuagCbZrIzawyuT6hYydCkXXWa6fcJc6a4fra5mPtV/OAQQYife J5iUE9SrigVwpNAgaCUEkCQJ7CUE+piWwAR7yRCqPuVQJ4Cs22x0gKLkQrpFJE3EwTfCkTtGyuoL Ycx0m0qOYcQLkgmNpIgKDzmkYbV0qQ2lBIbUdB7U46kmKbnXrIBkHlJQqCJE4B5l9wt4qMDTidO+ C4wMTQT9MVFutY51P7lPBSlYBzOh0O8LMBCASOYbOb6y73YPYee9TBUjZiXiHphR/ktkDW8f0PuI QgS/WqHxk92qpgD7EkQ0fcfkNmpJ7jB8VeriXBjHqLgjkgTJcUcTAu+UbyADJHFvBKtA/fqZoe55 HTDjHkdVBA4w1LeO9EaTBMPHDCDBpUOJCUcfCp7mutS02EEftV2Eh+l0K3mdZmGEzxIdDaScS81c xOpi8zfayoWCf4Oa5/wh+AeaNMX1fDcOAn06/4ur5fooPgHq1GDVJGZ0O86FpQ8SZmSOxsOJxPs9 jI+x41NSmN0zt2NhqWE7TcJBocC1rQIwSJ7FqR81cYBA3jmCsaSS28XfuN88t9+BlMkywr141sLL UJIHqKEp9rJRbXbeou3LoTBUJzSLjxW2D3zhXHfAvyGIhxNDd3QMI9GxvQJqaTj1wOBzPAgsdAob AxLjwK3lQdo4HsbvYuCtDEuPI4KGheZ3djAkEgsM4F3KF1TA2HleoFuakFhzF5IS2HIu3mVxa3lx sDd9DIvNxvUmf0SUvejkYg4G0Svp5iXHODu7xQ0PJLxD1Ru7X08l8nE2tWBgKloOyT7NKj49HiZ+ umQPnTyQL5lNIWZ6C2gxh+FrE6TpZh8zUqONtpFOzNKKLA8gJIFliPsdC/PlseRxZKd5FxaepeSP jr3QVypM095GMimZg5GRFT4NT19PY65HR+DgdjUt6oHBAvsF6QEuogbQSiPeHE9jpWkgZK7zQ5mF l40OwvMSgcTa2Tqy48uiNimLxLLVaqjSaeWSDl8Laou3xi7TtPbEkXmh6OAqdmqQ8Hc9hs1747f7 SqRLvyRSUg6iSv0B5o/BOsEwZR0JIExJEBJE5FzQ3C1t3hL01ks339/Z8Pcj01j00HHDC7bRwdqh 2khS9UJyksQMA1sOCkGZ6iSRMfSjZOFA1lZaOTK9R4d6h3ngQSZyIMMJTWcpsGkcw9+tUFBybB5O TlA61OxNhSaBVF/NK1MzhYUDM6h9epdqWGTuBLabzEQ8/T+NA7OqBCBagSwweTShAVQeJ4j9Gm07 V0ORE5QwQha8yZ6up7NooeT8mHDe+rPIJcbMRQyryVCRHQe1pDb5Owxh23HnItEvcznYmw2/LV2d IjwpSdLxjawE2FKVTAuFCmg4+DP9AsBWJ36GZyfZ+M8XkWg2FM8A1JU4Ox8/EQNsrLRz0FSZSGAk vGpRphPfZoFDgp7woMePSIhyvAyOX8T/XHAQ+Leer1fgb3oiBnZuZuNMIF7JFMyPulEZgny4Tr5C 2Y8Cd/Ag8ZmJnZU8Qez4JBCZn6ff129C8cTVSIBgYUId63vm5VOkZvucGDaCZXKL6iPmS39FqHv+ I1IO/S+Aocnm8hQ3MNjg4tzodml3JYuh5Mc7X5+7cEtDHFdGxtgXieZ8v2TMVPUEqQJm+Qngn2f2 PXAvUlli2IFT8hkQtob3c6nVb4AMeA9792/yHNkf9QJmBCkIIaIRuRcrTq3vQgfS4Q1qLCg8biAf s5bFSki0a3u+yhOnwKv1aUUop1hU0xqfDcQQJBcVA4K6bO9xTSDTUItR2MvIHB1s/AEU0VvJEAyw hF5iIKnHCn8T01eGGoTXFQOpELpiZf2HTspQt/hJ6k1Nvuuhdx83o/B+SXgGhXbrDYykDAMGyRKc ldSwa4cWp3vVyPeMiTD9vhuQLUU+hJHMQmIZ4LkDNH4kpQGYJEj+mSKfTdZ5kr9KNxCrjBPaF4/L 6j7jUH7lHYTV6uiueh+YlwXOVDJgXVAcDGTKATST2GDa5vwGv85Ab4CcpFRnv06XKzO3z5V5D9K/ 51UXKMhbCBcIAZcriZUI/hMsF8wsPd43zqBkVxKcpv1UWiJwRj8cEa06rnHo1uLJGUCW8PYrMzPa aJ7yIPuZIhQT+W5c7X7qBnPd9l2LLNoGD8iJ85IEAhrcOAhAu78/Xsb1Eby34fkvojQSh+Ubhdip SsUrM8z1rDhB1fRk4mHdobXi9zZg5Ka07lAv+br/DmbNBpfUqdCBujMwRfKQMcRkZJ7lOo0D3fi0 SqAhRfnCJkVPHUNT7NgtgN8RHpv+QaExU9Bp5hKqIT/dD1FI/N8gf+/p/DEsy/pyCHe83U8YwMVv XK4CyP+9ZpdgkSwDmaMsDPUDmKFIQcIlr1SRzaFI2OpI422OODlhWVWikikbHaSONjkkciIiiEGI 67FM5ko/FfplQgoTU7wam0pX2rtiZSca6frOLbJHoyfayR/Xo80+Ww5A6WwOr3KEjnIr1vu7Alz2 TqfzjetADug4CHDlIcwORWDFgU0BNReFUH9ruUO/o4q5aFsMQOS5qAs9uSSSSSSSW64BCRJaFqQj aBQkKbYQT1yBkuItjlQGMcQSq0yRsRmDSik1Je77vuu27PL6wXY9nlQGRQskdBh8YiLLCs+jNhtl pWTWXrCP24nN+Di5dNhkUcogSRmLuq4UVrx22I8EckI2iV7bdpEoIgiIJVngJYSAO0sj1XyVvVks +JEEKBPRPJdDVAsQsgH0nnuZdbOx0vsxmu87nM5D+xrblIwFyIwKbWnr3KcE3h2vAsLa4TZNQ18s xm4JtOzO/R2u92cH4Nr3XwTftPFvXPwE9m0Rmd0gbvJ7V2ld7DWqRRa5F7WYG6lXC9iW5rp9B3Dv 6WvfYq3fR1d6NrFW5rJAwzBPolozex2Ri8cU15CNxq2OpvFDEwbm3o6UQuLiHieD2GoUKB3HjZ1c iln7rEfJeDqbh6DiNATnYzKvo0LX0fu33vg++wbtQgEIgOTxbXze17/G/pKakzQMrJ0EjwHv9XJz cEoejmeBN21KuK7Tg8Ho+Tp3uRvKl3jPkuHRbqJ2iOLeanY6mbwGTm6FW5MjmfsP/i7kinChIe8L 3TY= --===============0307196294==--